题目1 线性方程组的数值解法
1.1 题目的主要研究内容及预期达到的目标
(1)实现雅可比迭代算法
(2)求得给定线性方程组的解
1.2 题目研究的工作基础或实验条件
(1)笔记本
(2)C-Free 5应用开发平台
1.3 设计思想
将线性方程组的系数矩阵A分成三部分D、L和U,其中满足A=D-L-U(具体关系参考教材P188)。
由Ax=b和雅可比迭代法思想可以推导得出最终的计算公式,然后根据公式和算法思想即可编写程序实现。
1.4 流程图
1.5 主要程序代码(要求必须有注释)
#include<iostream>
#include<Windows.h>
using namespace std;
void JacobiIteration(){
int n,k;
cout<<"输入你将输入的系数矩阵阶数n=";
cin>>n;
double e,w[n];
double Matrix[n][n],b[n];
ZeroMemory(Matrix,sizeof(Matrix));//初始化系数矩阵,元素置零
cout<<"输入系数矩阵(类似:\na1 a2 a3\nb1 b2 b3\nc1 c2 c3):"<<endl;
for(int i=0;i<n;++i)
for(int j=0;j<n;++j)
cin>>Matrix[i][j];
cout<<"依次输入"<<n<<"个线性方程组的右式值:";
for(int i=0;i<n;++i)
cin>>b[i];
double x[n];
for(int i=0;i<n;++i)
x[i]=0;
cout<<'\n'<<"输入迭代次数k=";
cin>>k;
for(int i=0;i<k;++i)
{
for(int m=0;m<n;++m)
w[m]=0;//清零,以便记录累加和
for(int m=0;m<n;++m)
{
for(int l=0;l<n;++l)
{
if(l!=m)
w[m]+=Matrix[m][l]*x[l];
}
}
for(int j=0;j<n;++j)
{
x[j]=(b[j]-w[j])/Matrix[j][j];
}
}
cout<<"该线性方程组经雅可比迭代法求解得:"<<endl;
for(int i=0;i<n;++i)
{
cout<<"x"<<i+1<<"="<<x[i]<<endl;//输出最终求解结果
}
}
int main()
{
JacobiIteration();
}
1.6 运行结果及分析
所用测试范例为教材P180的例1,最终求得结果同教材所给结果相同。
1.7 心得体会
通过本次实验,我加深了对雅可比迭代法的理解。
通过将数学模型简化成一系列算术和逻辑运算并上机实现其数值求解的过程中,在增强了编程能力的同时,我还进一步掌握了利用计算机实现求解方程组的思想。