数值分析课程设计题目Word文档格式.docx
- 文档编号:19719166
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:18
- 大小:263.77KB
数值分析课程设计题目Word文档格式.docx
《数值分析课程设计题目Word文档格式.docx》由会员分享,可在线阅读,更多相关《数值分析课程设计题目Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
达到的精度上限
返回值有以下四种可能:
a)-2:
SOR方法不收敛;
(不收敛的依据为
的某个分量值超出区间[-108,108]。
)
b)-1:
矩阵有一列全为0;
c)0:
算法经过MAXN次迭代还未收敛;
d)k:
SOR方法经k次迭代收敛,求得方程组的解向量X记录下来.
2.自定义函数Direct(A,B),以实现高斯LU分解的方法求解线性方程组AX=B,其中
返回值有两种可能:
e)“LUdecompsitionfailed.”:
分解过程中U的对角线元素至少一个为0;
f)X:
分解过程中
3.分别使用步骤1中定义的函数SOR(A,B,w,MAXN,TOL)和步骤2中定义的函数Direct(A,B)进行测试,记录返回值及X值(算法收敛或有效的情形,保留4位小数):
(1)测试1:
MAXN=1000,TOL=10-9,w分别取1,1.05,1.1,1.2,1.3,1.6,1.95;
(2)测试2:
MAXN=1000,TOL=10-9,w=1;
(3)测试3:
MAXN=1000,TOL=10-9,w=1.2;
(4)测试4:
MAXN=1000,TOL=10-9,w=1,1.1,1.3,1.8;
(5)测试5:
:
n阶Hilbert矩阵定义为
取n=3,
MAXN=1000,TOL=10-9,w=1,1.3,1.6,1.9;
测试6:
A为4阶Hilbert矩阵,
MAXN=10000,TOL=10-6,w=1,1.3,1.6,1.8,1.9.
4.对于步骤3的测试结果,有条理地写出你所发现的求解方程组的直接法和迭代法的特点。
三、实验结果及分析
测试
(1)松弛迭代法w=1
w=1.05
w=1.1
w=1.2
w=1.3
w=1.6
w=1.95
高斯消元法:
测试
(2)松弛迭代法
高斯消元法
测试(3)松弛迭代法
测试(4)松弛迭代法
w=1
w=1.1
w=1.8
高斯消元法
测试(5)松弛迭代法
w=1
w=1.6
w=1.9
测试(6)松弛迭代法:
w=1.8
w=1.9
四、关于本设计的体会
通过用编程的方法来加深松弛迭代法和高斯消元法的应用,很好的体会这两种方法的不同和思想。
迭代法的基本思想和方法完全适用于线性方程组的情况,在算法分析和讨论中,经常要遇到向量范数、矩阵范数以及序列极限概念。
而高斯消元法尽管在理论上是完善的算法,但因为实际计算时总会有舍入误差存在,所以解出来的解是准确解的近似值。
理论再结合实际的上机操作能很好解决多元线性方程组,从而能较方便和精确的求解出方程组的根。
通过这次的课程设计,我不仅的巩固了书本里面的知识点,而且使我能更熟练c语言的算法、结构和思想。
五、参考文献
数值分析/史万民,吴裕树,孙新编著.—3版.北京:
北京理工大学出版社,2004
ISBN978–7–5640–3107-7
六、附录
所用编程软件Code:
Blocks10.05或c++
松弛迭代法(c语言代码):
#include"
stdio.h"
math.h"
#defineMax20
doublea[Max][Max],l[Max][Max],u[Max][Max],b[Max],x[Max],X[Max],num[Max];
inti,j,n,k,MAXN;
doublew,sum1,sum2;
doubleTOL;
doubleSOR(intn,doublea[Max][Max],doubleb[Max],doublew,intMAXN,doubleTOL)
{
doubletemp,max;
intsum=0,q;
for(i=0;
i<
n;
i++)
x[i]=1;
{
for(j=0;
j<
j++)
if(a[j][i]==0)
sum++;
}
if(sum==n)return(-1);
if(i>
j)l[i][j]=-a[i][j]/a[i][i];
if(i<
j)u[i][j]=-a[i][j]/a[i][i];
b[i]=b[i]/a[i][i];
for(k=1;
k<
=MAXN;
)//迭代循环,k是计时器
i;
sum1+=l[i][j]*X[j];
for(j=i;
sum2+=u[i][j]*x[j];
X[i]=(1-w)*x[i]+w*(sum1+sum2+b[i]);
if(x[i]>
100000000||x[i]<
-100000000)
return(-2);
num[i]=fabs(X[i]-x[i]);
max=num[0];
for(q=1;
q<
q++)
if(max<
num[q])max=num[q];
sum1=0;
sum2=0;
x[i]=X[i];
k++;
if(k==MAXN)
return(0);
TOL)break;
if(k<
MAXN)
return(k);
}
main()
inti,j;
intresult;
doublenuma,numb;
charch;
do
printf("
请输入方程组的元数n="
);
scanf("
%d"
&
n);
输入系数矩阵A:
\n"
{for(j=0;
%lf"
numa);
a[i][j]=numa;
输入常数列向量B:
"
numb);
b[i]=numb;
输入松弛因子w:
"
w);
输入迭代的最大次数MAXN:
MAXN);
输入精度上限TOL:
TOL);
getchar();
result=SOR(n,a,b,w,MAXN,TOL);
switch(result)
case-2:
-------SOR方法不收敛-------\n"
break;
case-1:
-------矩阵有一列全为0-------\n"
case0:
-------算法经过MAXN次迭代后还未收敛--------\n"
default:
--------SOR方法经k=%d次迭代收敛,求得方程组的解向量X为--------\n"
result);
X%d=%0.4f"
i+1,x[i]);
\n重新输入?
(y/n)"
%c"
ch);
}while(ch=='
y'
高斯消元法(c语言代码):
#include<
stdio.h>
math.h>
#defineMax50
doublea[Max][Max],l[Max][Max],u[Max][Max],z[Max],b[Max],x[Max];
doubleFl(int,int);
doubleFz(int);
doubleFu(int,int);
doubleFx(int);
intn;
inti,j,k;
floatnuma,numb;
输入矩阵的A值:
%f"
l[i][i]=1;
//求解l[i][i]
j)
l[i][j]=Fl(i,j);
//求解l[i][j],(i!
=j)
else
u[i][j]=Fu(i,j);
//求解u[i][j],(i<
i++)z[i]=Fz(i);
//求解z[i]
for(i=n-1;
i>
=0;
i--)x[i]=Fx(i);
//求解x[i]
i++)//收敛性判断
if(u[i][i]==0)
\n方程组无解"
return0;
getch();
矩阵L的值:
//输出
j++)printf("
%1.4f"
l[i][j]);
矩阵U的值:
u[i][j]);
向量Z的值:
for(i=0;
i++)printf("
z[i]);
\n方程组的解\n"
x%d=%1.4f"
doubleFl(inti,intj)
doublesum=0;
intk;
for(k=0;
j;
k++)sum=sum+l[i][k]*u[k][j];
l[i][j]=(a[i][j]-sum)/u[j][j];
returnl[i][j];
doubleFu(inti,intj)
u[i][j]=a[i][j]-sum;
returnu[i][j];
doubleFz(inti)
k++)sum=sum+l[i][k]*z[k];
z[i]=b[i]-sum;
returnz[i];
doubleFx(inti)
for(k=i+1;
k++)sum=sum+u[i][k]*x[k];
x[i]=(z[i]-sum)/u[i][i];
returnx[i];
七、教师评价
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 课程设计 题目