《计算方法与实习》实验报告(4)

2019-04-23 00:05

计算方法与实习

nli??j?0,j?ix?xjxi?xjnLn(x)?式,内层计算

,外层计算

?li?0i(x)y(x)i

C++语言编程源代码如下:

#include #include #include

using namespace std; double chazhi(double x){

double

xi[6]={0.30,0.42,0.50,0.58,0.66,0.72},yi[6]={1.04403,1.08462,1.11803,1.15603,1.19817,1.23223},li[6]={1,1,1,1,1,1},Ln=0; int i,j;

for(i=0;i<=5;i++){ for(j=0;j<=5;j++){ }

if(j!=i)li[i]*=(x-xi[j])/(xi[i]-xi[j]); }

li[i]*=yi[i]; Ln+=li[i];

return Ln; } int main(){ cout<<\五次插值的结果如下:\ cout<<\时,y=\ }

cout<<\时,y=\cout<<\时,y=\return 0;

实验结果如下:

五次插值的结果如下:

x=0.46时,y=1.100724 x=0.55时,y=1.141271 x=0.60时,y=1.166194 Press any key to continue

习题6、试分别用抛物线

y?a?bx?cx2bx和指数曲线

y?ae拟合下列数据

16

计算方法与实习

xi yi 1 1.5 2 122.65 2.5 159.05 3 189.15 3.5 214.15 4 238.65 4.5 252.50 33.4 79.50 xi 5 5.5 6 6.5 7 7.5 8 yi 267.55 280.50 296.65 301.40 310.40 318.15 325.15

比较两个拟合函数的优劣。

一、抛物线拟合

思路分析

套用最小二乘法的解题思路,先求取正规方程组,再用高斯消元法解得正规方程组的解即为抛物线拟合的系数,a,b,c。

C++语言编程源代码如下:

#include #include #include using namespace std; int main(){

double

x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8},y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50,

267.55,280.50,296.65,301.40,310.40,318.15,325.15},s[3][4]={0},k,p,a,b,c; int i,j,n=14; for(i=0;i<=14;i++){ s[0][0]+=1;

s[1][0]=s[0][1]+=x[i];

s[1][1]=s[2][0]=s[0][2]+=x[i]*x[i]; s[1][2]=s[2][1]+=x[i]*x[i]*x[i]; s[2][2]+=x[i]*x[i]*x[i]*x[i]; s[0][3]+=y[i];

s[1][3]+=x[i]*y[i]; s[2][3]+=x[i]*x[i]*y[i]; }

for(i=0;i<=1;i++){

for(j=0;j<=3;j++){

if(j==0){ k=s[i+1][i]/s[i][i]; }

17

计算方法与实习

}

s[i+1][j]-=k*s[i][j]; if(i==0){ if(j==0){ p=s[i+2][i]/s[i][i]; } } }

s[i+2][j]-=p*s[i][j];

c=s[2][3]/s[2][2];

b=(s[1][3]-c*s[1][2])/s[1][1];

a=(s[0][3]-c*s[0][2]-b*s[0][1])/s[0][0];

cout<<\抛物线拟合的结果为:y=\ cout<<\与原数据相比,拟合结果如下:\

cout<

cout<}

return 0;

实验结果如下:

抛物线拟合的结果为:y=-45.3333+94.2302x-6.13161x^2 与原数据相比,拟合结果如下:

x y y' y-y’ 1 33.4 42.76529 9.365294 1.5 79.5 82.21588 2.715882 2 122.65 118.6007 4.049334 2.5 159.05 151.9196 7.130356 3 189.15 182.1728 6.977182 3.5 214.15 209.3602 4.789813 4 238.65 233.4818 5.168248 4.5 252.5 254.5375 2.037511 5 267.55 272.5275 4.977466 5.5 280.5 287.4516 6.951616 6 296.65 299.31 2.659961 6.5 301.4 308.1025 6.702502 7 310.4 313.8292 3.429237 7.5 318.15 316.4902 1.659832 8 325.15 316.0853 9.064706 Press any key to continue

18

计算方法与实习

二、指数曲线拟合

思路分析

上述数据用x[i],y[i]数组存储,对y[i]取自然对数,用最小二乘法进行一次函数拟合,转化为正规方程组后用高斯消元法求得b与a’,e即为a。

a'C++语言编程源代码如下:

#include #include #include using namespace std; int main(){

double

x[15]={1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8},y[15]={33.4,79.50,122.65,159.05,189.15,214.15,238.65,252.50, 267.55,280.50,296.65,301.40,310.40,318.15,325.15},s[2][3]={0},k,a,b; int i,j,n=14;

cout<for(i=0;i<=n;i++){

y[i]=log(y[i]); }

for(i=0;i<=n;i++){ s[0][0]+=1; s[0][1]=s[1][0]+=x[i];

s[1][1]+=x[i]*x[i]; s[0][2]+=y[i];

s[1][2]+=x[i]*y[i]; }

for(j=0;j<=2;j++){

if(j==0){k=s[1][0]/s[0][0];} s[1][j]-=k*s[0][j];

}

b=s[1][2]/s[1][1];

a=(s[0][2]-b*s[0][1])/s[0][0]; a=exp(a);

cout<<\抛物线拟合的结果为:y=\ cout<<\与原数据相比,拟合结果如下:\

cout<

19

计算方法与实习

}

return 0;

实验结果如下:

抛物线拟合的结果为:y=67.4026e^(0.23896x) 与原数据相比,拟合结果如下:

x y y' y-y' 1 33.4 85.5964 52.1964 1.5 79.5 96.4595 16.9595 2 122.65 108.701 13.9488 2.5 159.05 122.497 36.5534 3 189.15 138.043 51.1073 3.5 214.15 155.562 58.5883 4 238.65 175.304 63.3458 4.5 252.5 197.552 54.9479 5 267.55 222.624 44.9264 5.5 280.5 250.877 29.6232 6 296.65 282.716 13.9342 6.5 301.4 318.595 17.1954 7 310.4 359.028 48.6285 7.5 318.15 404.593 86.443 8 325.15 455.94 130.79 Press any key to continue

实验分析

从以上两种方法的拟合来看,抛物线拟合可以使误差变得更小,而指数拟合只能实现一部分曲线与数据的误差比较小,其他点的误差则较大,说明这组数据更适合用抛物线拟合来进行拟合计算而不适合用指数拟合来计算。

?习题7、用复化梯形和复化辛卜生公式计算积分

?I1(f)??201?cos2xdx和

I2(f)??4tanxx0dx,观察n为多少时,所得近似值具有6位有效数字?

?一、

I1(f)??201?cos2xdx

思路分析

20


《计算方法与实习》实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:儿童心理学部分作业参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: