数值分析作业.docx
《数值分析作业.docx》由会员分享,可在线阅读,更多相关《数值分析作业.docx(28页珍藏版)》请在冰豆网上搜索。
![数值分析作业.docx](https://file1.bdocx.com/fileroot1/2023-2/1/e29c5c7c-c4f3-4de8-87cb-877914ec5211/e29c5c7c-c4f3-4de8-87cb-877914ec52111.gif)
数值分析作业
数值分析作业四
刘涌
一、作业要求
1.算法的设计方案。
2.全部源程序(要求注明主程序和每个子程序的功能)。
3.用各种积分方法求出的数值解
及节点
的值。
4.在同一坐标系内画出积分方程精确解的曲线和用各种积分方法求出的数值解的曲线。
5.讨论不同积分法的优劣
二、算法设计方案
1.复化梯形积分法:
设
在区间[a,b]
上有二阶连续导数,取等距节点
复化梯形公式
其求积系数
总满足
对于问题中所给积分方程中的积分项,分别用复化梯形积分法的数值积分算法公式展开,得到含有未知数u(x)和x的方程,有如下形式:
再将各个方程积分节点带入各个方程,得到
的(n+1)阶方程组。
由于对角元素绝对占优,用Gauss消去法解该方程组即可。
由于节点数目未知,需要进行迭代确定,每迭代一次,需要判断是否满足精度要求,节点数目增加,然后再进行。
2.复化Simpon积分法:
设
在区间[a,b]
上有二阶连续导数,取2m+1个等距节点
复化Simpson公式为
其求积系数总满足
复化simpson积分法计算量较小,可以直接每次增加2个节点(区间必需取偶数)。
3.Guass积分法:
本题中采用下列公式
若记
,
,积分区间在[a,b],其相应的正交多项式是Ledendre多项式,其形式为如上求积公式,查表得n=NG时的积分节点及求积系数
求解得NG个差值节点的值。
三、程序源代码:
#include
#include
#include"stdlib.h"
#defineN2601
#defineM39
#defineNG9
doublea1[N+1][N+1],g1[N+1],x1[N+1],u1[N+1];
FILE*fp;
//N:
复化梯形计算的节点数:
N+1
//M:
复化Simpson算法节点数:
2*M+1
//NG:
gauss算法节点数:
NG
voidgsxy(n)
//列主元素的gauss消去法求解线性方程组,用于梯形法中方程组的求解
intn;
{
doublesum,max,tem;
inti,j,r,im;
for(r=0;r{
im=r;
max=fabs(a1[r][r]);
for(i=r;i{
if(fabs(a1[(i+1)][r])>=max)
{
max=fabs(a1[(i+1)][r]);
im=i+1;
}
}
for(j=r;j{
tem=a1[im][j];
a1[im][j]=a1[r][j];
a1[im][j]=tem;
}
for(i=r+1;i{
tem=a1[i][r]/a1[r][r];
for(j=r+1;ja1[i][j]=a1[i][j]-tem*a1[r][j];
g1[i]=g1[i]-tem*g1[r];
}
}
u1[n-1]=g1[n-1]/a1[n-1][n-1];
for(i=n-2;i>=0;i--)
{
sum=0.0;
for(j=i+1;jsum=sum+a1[i][j]*u1[j];
u1[i]=(g1[i]-sum)/a1[i][i];
}
}
doublefhtix()
//复合梯形法求解,因为计算量大,数组采用全局变量的形式存储,返回误差值,结果存入F:
\\rezult4.txt
{
doubleh,er;
inti,j,n;
n=N+1;
h=2/(double)N;
for(i=0;ix1[i]=-1.0+h*(double)i;
for(i=0;ig1[i]=exp(4*x1[i])+(exp(x1[i]+4)-exp(-1.0*(x1[i]+4)))/(x1[i]+4);
for(i=0;ifor(j=0;j{
if((j==0)||(j==N))
a1[i][j]=h*exp(x1[i]*x1[j])/2;
else
a1[i][j]=h*exp(x1[i]*x1[j]);
}
for(i=0;ia1[i][i]=1.0+a1[i][i];
//lu(a1,g1,N+1,u1);
gsxy(n);
er=0.0;
for(i=1;ier=er+(exp(4*x1[i])-u1[i])*(exp(4*x1[i])-u1[i]);
er=er*h;
er=er+h*(exp(4*x1[0])-u1[0])*(exp(4*x1[0])-u1[0])/2.0;
er=er+h*(exp(4*x1[N])-u1[N])*(exp(4*x1[N])-u1[N])/2.0;
fprintf(fp,"梯形解法:
erroris:
%.8e\n",er);
fputs("差值点,计算值,真实值\n",fp);
for(i=0;ifprintf(fp,"%f,%f,%f\n",x1[i],u1[i],exp(4*x1[i]));
return(er);
}
voidlu(a,b,n,x)
doublea[],b[],x[];
intn;
/*Doolittle法解线性方程组,用于simpson和gauss方法中线性方程组的求解*/
{
intk,t,j,i;
double*l,*u,*y;
doublesum;
l=malloc(n*n*sizeof(double));
u=malloc(n*n*sizeof(double));
y=malloc(n*sizeof(double));
for(k=0;kl[k*n+k]=1.0;
for(j=0;j{
u[j]=a[j];
if(j>0)
l[j*n]=a[j*n]/u[0];
}
for(k=1;k{
for(j=k;j{sum=0.0;
for(t=0;t{
sum=sum+l[k*n+t]*u[t*n+j];
}
u[k*n+j]=a[k*n+j]-sum;
}
if(k<(n-1))
{
for(i=(k+1);i{
sum=0.0;
for(t=0;t{
sum=sum+l[i*n+t]*u[t*n+k];
}
l[i*n+k]=(a[i*n+k]-sum)/u[k*n+k];
}
}
}
y[0]=b[0];
for(i=1;i{sum=0.0;
for(t=0;t
sum=sum+l[i*n+t]*y[t];
y[i]=b[i]-sum;
}
x[n-1]=y[n-1]/u[(n-1)*n+n-1];
for(i=n-2;i>=0;i--)
{sum=0.0;
for(t=i+1;tsum=sum+u[i*n+t]*x[t];
x[i]=(y[i]-sum)/u[i*n+i];
}
free(l);
free(u);
free(y);
return;
}
doublefhSimpson(doubleu[2*M+1])
//复合Simpson求解,返回误差值,结果存入F:
\\rezult4.txt
{
doublex[2*M+1],a[2*M+1][2*M+1],g[2*M+1],h,er;
inti,j;
h=1/(double)M;
for(i=0;i<(2*M+1);i++)
x[i]=-1.0+h*(double)i;
for(i=0;i<(2*M+1);i++)
g[i]=exp(4*x[i])+(exp(x[i]+4)-exp(-1.0*(x[i]+4)))/(x[i]+4);
for(i=0;i<(2*M+1);i++)
for(j=0;j<(2*M+1);j++)
{
if((j==0)||(j==2*M))
a[i][j]=h*exp(x[i]*x[j])/3;
elseif(j%2==0)
a[i][j]=2*h*exp(x[i]*x[j])/3;
else
a[i][j]=4*h*exp(x[i]*x[j])/3;
}
for(i=0;i<(2*M+1);i++)
a[i][i]=1.0+a[i][i];
lu(a,g,2*M+1,u);
er=0.0;
for(i=2;i<2*M;i=i+2)
er=er+(exp(4*x[i])-u[i])*(exp(4*x[i])-u[i]);
er=er*h*2/3;
for(i=1;i<2*M;i=i+2)
er=er+(exp(4*x[i])-u[i])*(exp(4*x[i])-u[i]);
er=er*h*4/3;
er=er+h*(exp(4*x[0])-u[0])*(exp(4*x[0])-u[0])/3;
er=er+h*(exp(4*x[2*M])-u[2*M])*(exp(4*x[2*M])-u[2*M])/3;
fprintf(fp,"Simpson解法:
erroris:
%.8e\n",er);
for(i=0;i<(2*M+1);i++)
fprintf(fp,"%f,%f,%f\n",x[i],u[i],exp(4*x[i]));
return(er);
}
doublegauss(doubleu[NG])
//Gauss积分法求解,返回误差值,结果存入F:
\\rezult4.txt
{
doublex[NG]={-0.9681602395,-0.8360311073,-0.6133714327,-0.3242534234,0,0.3242534234,0.6133714327,0.8360311073,0.9681602395};
doublea1[NG]={0.0812743884,0.1806481607,0.2606106964,0.3123470770,0.3302393550,0.3123470770,0.2606106964,0.1806481607,0.0812743884};
//NG=9时节点值及系数
//doublex[NG]={-0.9602898565,-0.7966664774,-0.5255324099,-0.1834346425,0.1834346425,0.5255324099,0.7966664774,0.9602898565};
//doublea1[NG]={0.1012285363,0.2223810345,0.3137066459,0.3626837834,0.3626837834,0.3137066459,0.2223810345,0.1012285363};
//NG=8时节点值及系数
//doublex[NG]={-0.9324695142,-0.6612093865,-0.2386191861,0.2386191861,0.6612093865,0.9324695142};
//doublea1[NG]={0.1713244924,0.3607615730,0.4679139346,0.4679139346,0.3607615730,0.1713244924};
////NG=6时节点值及系数
//doublex[NG]={-0.9491079123,-0.7415311856,-0.4058451514,0,0.4058451514,0.7415311856,0.9491079123};
//doublea1[NG]={0.1294849662,0.2797053915,0.3818300505,0.4179591837,0.3818300505,0.2797053915,0.1294849662};
//NG=7时节点值及系数
doublea[NG][NG],g[NG],er;
inti,j;
for(i=0;ig[i]=exp(4*x[i])+(exp(x[i]+4)-exp(-1.0*(x[i]+4)))/(x[i]+4);
for(i=0;ifor(j=0;ja[i][j]=a1[j]*exp(x[i]*x[j]);
for(i=0;ia[i][i]=1.0+a[i][i];
lu(a,g,NG,u);
er=0;
for(i=0;ier=er+a1[i]*(exp(4*x[i])-u[i])*(exp(4*x[i])-u[i]);
fprintf(fp,"Gauss解法:
erroris:
%.8e\n",er);
for(i=0;ifprintf(fp,"%f,%f,%f\n",x[i],u[i],exp(4*x[i]));
return(er);
}
voidmain()
//主函数,调用各子函数求解方程,结果存入F:
\\rezult4.txt
{
doubleu2[2*M+1],u3[NG];
doubler1,r2,r3;
fp=fopen("F:
\\rezult4.txt","w");
r1=fhtix(u1);
printf("er1is:
%.8e\n",r1);
r2=fhSimpson(u2);
printf("er2is:
%.8e\n",r2);
r3=gauss(u3);
printf("er3is:
%.8e\n",r3);
fclose(fp);
}
四、计算结果
复化梯形积分法
复化Simpon积分法
Guass积分法
节点值
数值解
节点值
数值解
节点值
数值解
-1
0.018317
-1
0.018317
-0.96816
0.020803
-0.99231
0.018889
-0.97561
0.020194
-0.83603
0.035291
-0.98462
0.019479
-0.95122
0.022263
-0.61337
0.085993
-0.97693
0.020087
-0.92683
0.024544
-0.32425
0.273347
-0.96924
0.020715
-0.90244
0.02706
0
1
-0.96155
0.021362
-0.87805
0.029832
0.324253
3.658356
-0.95386
0.022029
-0.85366
0.03289
0.613371
11.62881
-0.94618
0.022717
-0.82927
0.03626
0.836031
28.33576
-0.93849
0.023426
-0.80488
0.039976
0.96816
48.06917
-0.9308
0.024158
-0.78049
0.044072
-0.92311
0.024913
-0.7561
0.048589
-0.91542
0.025691
-0.73171
0.053568
-0.90773
0.026493
-0.70732
0.059057
-0.90004
0.027321
-0.68293
0.065109
-0.89235
0.028174
-0.65854
0.071781
-0.88466
0.029054
-0.63415
0.079137
-0.87697
0.029961
-0.60976
0.087247
-0.86928
0.030897
-0.58537
0.096188
-0.86159
0.031862
-0.56098
0.106045
-0.8539
0.032857
-0.53659
0.116912
-0.84621
0.033884
-0.5122
0.128893
-0.83852
0.034942
-0.48781
0.142102
-0.83083
0.036033
-0.46342
0.156664
-0.82315
0.037159
-0.43902
0.172719
-0.81546
0.038319
-0.41463
0.190419
-0.80777
0.039516
-0.39024
0.209932
-0.80008
0.040751
-0.36585
0.231446
-0.79239
0.042023
-0.34146
0.255164
-0.7847
0.043336
-0.31707
0.281312
-0.77701
0.04469
-0.29268
0.310141
-0.76932
0.046085
-0.26829
0.341924
-0.76163
0.047525
-0.2439
0.376963
-0.75394
0.049009
-0.21951
0.415594
-0.74625
0.05054
-0.19512
0.458183
-0.73856
0.052119
-0.17073
0.505137
-0.73087
0.053747
-0.14634
0.556903
-0.72318
0.055425
-0.12195
0.613973
-0.71549
0.057157
-0.09756
0.676892
-0.70781
0.058942
-0.07317
0.746259
-0.70012
0.060783
-0.04878
0.822734
-0.69243
0.062681
-0.02439
0.907047
-0.68474
0.064639
0
1
-0.67705
0.066658
0.02439
1.102478
-0.66936
0.06874
0.04878
1.215459
-0.66167
0.070887
0.073171
1.340017
-0.65398
0.073101
0.097561
1.47734
-0.64629
0.075385
0.121951
1.628736
-0.6386
0.077739
0.146341
1.795646
-0.63091
0.080168
0.170732
1.979662
-0.62322
0.082672
0.195122
2.182535
-0.61553
0.085254
0.219512
2.406198
-0.60784
0.087917
0.243902
2.652782
-0.60015
0.090663
0.268293
2.924635
-0.59246
0.093495
0.292683
3.224348
-0.58478
0.096415
0.317073
3.554775
-0.57709
0.099426
0.341463
3.919064
-0.5694
0.102532
0.365854
4.320684
-0.56171
0.105735
0.390244
4.763462
-0.55402
0.109037
0.414634
5.251615
-0.54633
0.112443
0.439024
5.789794
-0.53864
0.115955
0.463415
6.383124
-0.53095
0.119577
0.487805
7.037259
-0.52326
0.123312
0.512195
7.758428
-0.51557
0.127164
0.536585
8.553501
-0.50788
0.131136
0.560976
9.430053
-0.50019
0.135232
0.585366
10.39643
-0.4925
0.139456
0.609756
11.46185
-0.48481
0.143811
0.634146
12.63644
-0.47712
0.148303
0.658537
13.93141
-0.46944
0.152936
0.682927
15.35908
-0.46175
0.157713
0.707317
16.93306
-0.45406
0.162639
0.731707
18.66833
-0.44637
0.167719
0.756098
20.58144
-0.43868
0.172958
0.780488
22.6906
-0.43099
0.17836
0.804878
25.0159
-0.4233
0.183931
0.829268
27.5795
-0.41561
0.189676
0.853659
30.40581
-0.40792
0.195601
0.878049
33.52176
-0.40023
0.20171
0.902439
36.95702
-0.39254
0.208011
0.926829
40.74433
-0.38485
0.214508
0.95122
44.91975
-0.37716
0.221208
0.97561
49.52307