[数值分析]雅可比迭代公式解线性方程组

[数值分析]雅可比迭代公式解线性方程组

  • 例:

[数值分析]雅可比迭代公式解线性方程组_第1张图片
[数值分析]雅可比迭代公式解线性方程组_第2张图片

  • 运行示例:

[数值分析]雅可比迭代公式解线性方程组_第3张图片

  • 源码:
#include
#include
#define MAX 10
using namespace std;

int main(void)
{
     
	double a[MAX][MAX];   //二维数组存储原始方程组的增广矩阵

	int row, col;

	cout << "请输入增广矩阵行数:";   //行数,即方程个数
	cin >> row;

	cout << "请输入增广矩阵列数:";   //列数,包含常数项
	cin >> col;

	cout << endl;

	//增广矩阵输入提示,按行输入
	for (int i = 1; i <= row; i++)
	{
     
		cout << "请输入增广矩阵第" << i << "行的元素:";

		for (int j = 1; j <= col; j++)
		{
     
			cin >> a[i][j];
		}
		cout << endl;
	}

	//对元素进行处理
	for (int i = 1; i <= row; i++)
	{
     
		for (int j = 1; j <= col; j++)
		{
     
			if (i != j && j != col)
			{
     
				a[i][j] /= -a[i][i];   //非行列坐标相等的元素除以负行列坐标相等的元素
			}
			if (j == col)
			{
     
				a[i][j] /= a[i][i];   //常数项除以行列相等的元素
			}
		}
	}

	//对a[1][1]、a[2][2]......赋值为0
	for (int i = 1; i <= row; i++)
	{
     
		a[i][i] = 0;
	}

	double b[MAX]; //记录每次迭代后的值
	//迭代初值

	cout << "请输入迭代初值:";

	for (int i = 1; i < col; i++)   //用数组b记录每次迭代后的x的值,用于下次迭代
	{
     
		cin >> b[i];
	}

	int N;   //允许的最大迭代次数

	cout << "请输入最大迭代次数:";
	cin >> N;

	double c[MAX];

	for (int i = 1; i <= N; i++)   //最多允许迭代N次
	{
     
		cout << "第" << i << "次迭代:";

		int count = 1;   //用count控制迭代值按每行col-1个输出,即自变量个数输出

		for (int j = 1; j <= row; j++)   //每一次迭代(i),求取每一行的行列坐标相等的值即a[j][j]
		{
     
			double item;   //中间变量

			for (int k = 1; k <= col; k++)   //j循环一次,j循环col次,求得a[j][j]
			{
     
				if (j == k)   //如果j=k,继续
				{
     
					continue;
				}

				if (k != col)   //如果j不等于k且不等于常数项的下标
				{
     
					item = a[j][k] * b[k];   //则每一项等于系数与对应迭代初值的乘积
				}
				else
				{
     
					item = a[j][col];   //j=col即常数项下标时,直接加上常数项,不对常数项处理
				}

				a[j][j] += item;   //累加item,求的a[1][1],a[2][2]......
			}
			cout << "\t\t" << a[j][j] << "\t\t";  //输出a[1][1],a[2][2]......

			c[count] = a[count][count];   //将a[1][1],a[2][2]......暂存与数组c
			a[count][count] = 0;   //赋a[1][1],a[2][2]......值为0,避免拥有初值影响下一次迭代结果

			if (count % (col - 1) == 0)   //控制元素输出个数
				cout << endl;
			count++;

		}
		for (int i = 1; i < col; i++)    //将c数组中的值赋值给b数组,进入下次循环
			b[i] = c[i];
	}
}

你可能感兴趣的:(#,数值分析,c++,数值分析,雅可比迭代公式,线性方程组)