迭代法求方程组的实现Word文件下载.docx
- 文档编号:21238584
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:15
- 大小:180.55KB
迭代法求方程组的实现Word文件下载.docx
《迭代法求方程组的实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《迭代法求方程组的实现Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
附录
实现代码如下,为.cpp文件,可在编译器上编译后直接使用:
#include<
stdio.h>
doubleabsolute(doublea){
if(a<
0)return-a;
elsereturna;
}
voidjacobi(doubleA[][101],doublex[],doubleb[],intn,doubleq)
{
inti,j;
doubleoldx[100];
//x(k)
doublenewx[100];
//x(k+1)
for(i=0;
i<
n;
i++)
oldx[i]=x[i];
//赋予初始值
doublemaxdeta=0;
newx[i]=b[i];
for(j=0;
j<
j++)
if(j!
=i)
newx[i]=newx[i]-A[i][j]*oldx[j];
//求x
(1)
newx[i]=newx[i]/A[i][i];
//printf("
%lf"
newx[i]);
if(maxdeta<
absolute(newx[i]-oldx[i]))
maxdeta=absolute(newx[i]-oldx[i]);
intcount=1;
//迭代过程,直到满足精度要求或迭代次数过多结束
while(maxdeta>
q&
&
count<
100)
maxdeta=0;
oldx[i]=newx[i];
count++;
//迭代完成,给出结果
if(count!
=100)
printf("
结果为:
\n"
);
%lf
"
迭代次数为:
%d\n"
count);
elseprintf("
不收敛的结果,请输入具有收敛性的方程组\n"
//高斯赛德尔
voidGauss(doubleA[][101],doublex[],doubleb[],intn,doubleq)
i;
newx[i]=newx[i]-A[i][j]*newx[j];
for(j=i+1;
//SOR
voidSOR(doubleA[][101],doublex[],doubleb[],intn,doubleq,doublew)
for(j=i;
newx[i]=oldx[i]+newx[i]/A[i][i]*w;
newx[i]=oldx[i]+w*newx[i]/A[i][i];
//自行匹配w的SOR法
voidsearch_SOR(doubleA[][101],doublex[],doubleb[],intn,doubleq)
doublew,bestx[101],bestw;
intcountmin=1000000;
for(w=0.001;
w<
2;
w=w+0.001)
if(count<
countmin)
countmin=count;
bestx[i]=newx[i];
bestw=w;
匹配到最佳的w值为:
%lf\n"
bestw);
解为:
for(inti=0;
bestx[i]);
\n迭代次数为:
countmin);
}
intmain()
doubleA[101][101],b[101],q,x0[101];
intn,i,j,flag;
//程序样式
***************\n"
*
*\n"
方程组迭代法求解程序
--------------------------------------\n"
对于形如:
5*x1+3*x2=7\n"
8*x1+2*x2=3\n"
请按537\n"
823\n"
的形式输入方程组,主对角线上元素须不为0\n"
请输入你选择的迭代方式:
\n输入1选择雅可比迭代法\n输入2选择高斯-赛德尔法\n输入3选择SOR法\n"
while(scanf("
%d"
&
flag)!
=EOF&
flag!
=0)
if(flag==1)
你选择了雅可比法\n"
elseif(flag==2)
你选择了高斯-赛德尔法\n"
elseif(flag==3)
你选择了SOR法"
else{
非合法输入,请重新输入\n"
continue;
请输入方程组个数n:
"
scanf("
n);
请按示例方式输入方程组\n"
%lf"
A[i][j]);
b[i]);
if(A[i][i]==0)
主对角线上有0元素,输入不合法,请重新输入\n"
break;
方程组输入完成,请输入迭代初始值\n"
x0[i]);
请输入精度(无穷范数):
q);
jacobi(A,x0,b,n,q);
if(flag==2)
Gauss(A,x0,b,n,q);
if(flag==3)
doublew;
ints;
系统自动匹配最佳w值,请输入1自行输入w值,请输入2\n"
s);
if(s==2){
请输入SOR法的w:
w);
SOR(A,x0,b,n,q,w);
elseif(s==1){
search_SOR(A,x0,b,n,q);
不合法输入\n"
操作完成\n"
\n输入1选择雅可比迭代法\n输入2选择高斯-赛德尔法\n输入3选择SOR法\n输入0结束程序\n"
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 迭代法 方程组 实现