用java语言编写追赶法求解n阶三对角方程组

2025-03-10 16:50:11
推荐回答(1个)
回答1:

可以这样写,代码如下


#include "pch.h"

#include

#include

# include

#include

#include

void Chasing_method(double **a, double *b, double *xx, int N_num);

using namespace std;

//*****************************

 //追赶法求解AX=B矩阵

//*****************************

void Chasing_method(double **a, double *b, double *xx, int N_num)

{

int i, j, k;

double *gamma = new double[N_num]();

double *alpha = new double[N_num]();

double *beta = new double[N_num]();

double *y = new double[N_num]();

alpha[0] = a[0][0];

beta[0] = a[1][0] / alpha[0]; y[0] = b[0] / alpha[0];

for (i = 1; i < N_num; i++)

{

gamma[i] = a[i - 1][i];

alpha[i] = a[i][i] - gamma[i] * beta[i - 1];

if (i < N_num - 1)

{

beta[i] = a[i + 1][i] / alpha[i];

}

y[i] = (b[i] - gamma[i] * y[i - 1]) / alpha[i];

}

xx[N_num - 1] = y[N_num - 1];

for (i = N_num - 2; i >= 0; i--)

{

xx[i] = y[i] - beta[i] * xx[i + 1];

}

}

int main()

{

int N_num = 4;

double **a = new double*[N_num]();

for (int i = 0; i < N_num; i++)            //AX=B方程a[n][n]为系数矩阵 

a[i] = new double[N_num]();            

double *b = new double[N_num]();           //AX=B方程b[n]为右侧列矩阵 

double *x = new double[N_num]();           //AX=B方程x[n]为方程解 

ifstream fin("ab.txt");

for (int i=0; i < N_num; i++)

{

for (int j=0; j < N_num; j++)

{

fin >> a[i][j];           //读取数

cout << fixed << setw(8) << setprecision(4) << a[i][j];

}

fin >> b[i];

cout << fixed << setw(8) << setprecision(4) << b[i] << endl;

}

Chasing_method(a, b, x, N_num);

cout << "追赶法求得方程组解为:" << endl;

for (int i = 0; i < N_num; i++)

{

cout<<"x["<

}

}