- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算方法结大作业
计算方法结课大作业
第一题:求数值积分,精确到。
解:Romberg方法基本思想:
根据
分别算出T0(0), T0(1),T1(0)…….的值,若对角线上的值的差足够小则停止,否则继续计算,直到足够小为止。
T0(0)=
=
=
其中sin1= 0.841471 sin(-1)= -0.841471
==0.438098
T0(1)= T0(0)+
= 0.469049
T1(0)== =0.479366
T0(2)=T0(1)
=0.476729
T1(1) ===0.479289
T2(0)===0.479284
T0(3)=T0(2)=0.478645
T1(2)== =0.478645
T2(1)=T0(1)=0.438098
T3(0)===0.479284
化简成缩略图,根据公式可一目了然:
T0(0)=,
T0(1)=0.469049, T1(0)= 0.479366
T0(2)=0.476729, T1(1) =0.479289 T2(0)=0.479284
T0(3)= 0.478645, T1(2)=0.479284, T2(1)=0.479284,T3(0)=0.479284
由于T3(0)就已达预定精度,故取I T3(0)=0.479284
第二题:设实验数据如下
1
2
3
4
5
6
7
8
9
10
5.8191
10.3626
18.4715
26.0003
34.9121
48.1684
60.2300
73.9750
92.2391
109.3331
建立形如最小二乘拟合。
解:已知曲线,将表格中所有点依次代入得到方程:
改写成矩阵形式:
根据公式进行转置:
上式整理得: =
整理为方程如下:
得解为:
于是所求拟合曲线为
第三题 :给定初值问题
经典四阶R-K方法,分别取,计算并打印各点的值,并于准确值相比较。
解:四阶龙格-库塔算法公式如下:
当步长h=0.1时,运行结果如下:
当步长h=0.025时,运行结果如下:
当步长h=0.01时,运行结果如下:
与准确值相比较:
注:(因数据庞大,此处只取前十一个数作比较)
用编程实现如下:
注:此处只举例出当步长h=0.1时执行的程序,当h=0.025和h=0.01时只需稍加修改即可。
#includestdlib.h
#includestdio.h
/*n表示几等分,n+1表示它输出的个数*/
int RungeKutta(double y0,double a,double b,int n,double *x,double *y,double (*function)(double,double))
{
double h=(b-a)/n,k1,k2,k3,k4;
int i;
x[0]=a;
y[0]=y0;
for(i=0;in;i++)
{
x[i+1]=x[i]+h;
k1=function(x[i],y[i]);
k2=function(x[i]+h/2,y[i]+h*k1/2);
k3=function(x[i]+h/2,y[i]+h*k2/2);
k4=function(x[i]+h,y[i]+h*k3);
y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;
}
return 1;
}
double function(double x,double y)
{
return -30*y+30*x*x+2*x;
}
//例子求y=-30y+30*x*x+2*x(0x1);y0=1;
int main()
{
double x[11],y[11];
printf(用四阶龙格-库塔方法\n);
RungeKutta(1,0,1,10,x,y,function);
for(int i=0;i11;i++)
printf(x[%d]=%f,y[%d]=%f\n,i,x[i],i,y[i]);
return 1;
}
文档评论(0)