中北大学 数值分析14实验报告.docx

上传人:b****5 文档编号:6282965 上传时间:2023-01-05 格式:DOCX 页数:18 大小:171.39KB
下载 相关 举报
中北大学 数值分析14实验报告.docx_第1页
第1页 / 共18页
中北大学 数值分析14实验报告.docx_第2页
第2页 / 共18页
中北大学 数值分析14实验报告.docx_第3页
第3页 / 共18页
中北大学 数值分析14实验报告.docx_第4页
第4页 / 共18页
中北大学 数值分析14实验报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

中北大学 数值分析14实验报告.docx

《中北大学 数值分析14实验报告.docx》由会员分享,可在线阅读,更多相关《中北大学 数值分析14实验报告.docx(18页珍藏版)》请在冰豆网上搜索。

中北大学 数值分析14实验报告.docx

中北大学数值分析14实验报告

 

实验类别:

数值分析

专业:

信息与计算科学

班级:

13080241

学号:

1308024120

姓名:

杨燕

中北大学理学院

实验一函数插值方法

【实验内容】

给定一元函数

个节点值

,数据如下:

0.4

0.55

0.65

0.80

0.95

1.05

0.41075

0.57815

0.69675

0.90

1.00

1.25382

求五次Lagrange多项式

或分段三次插值多项式或Newton插值多项式,并计

的值。

(提示:

结果为

≈0.625732,

≈1.05423)

【实验方法与步骤】

利用Lagrange插值公式

,用C语言编写出插值多项式程序如下:

#include

#defineN5

floatx[]={0.4,0.55,0.65,0.80,0.95,1.05};

floaty[]={0.41075,0.57815,0.69675,0.90,1.00,1.25382};

floatp(floatxx)

{

inti,k;

floatpp=0,m1,m2;

for(i=0;i<=N;i++)

{

m1=1;m2=1;

for(k=0;k<=N;k++)

if(k!

=i)

{

m1*=xx-x[k];

m2*=x[i]-x[k];

}

pp+=y[i]*m1/m2;

}

returnpp;

}

main()

{

printf("f(0.596)=%lf\n",p(0.596));

printf("f(0.99)=%lf\n",p(0.99));

}

【实验结果】

【思考】

1、给出的程序求

行不行,精度高不高?

2、五次Lagrange多项式与Newton插值多项式是同一个多项式吗?

五次Lagrange多项式与Newton插值多项式是同一个多项式。

3、为什么高次插值不能令人满意?

一般来说,节点个数越多,插值函数和被插值函数就有越多的地方相等。

但是随着插值节点个数的增加,两个插值节点之间插值函数并不一定能够很好地逼近被插值函数。

再次,从舍入误差看,高次插值由于计算量大,可能会产生更严重的误差积累,所以,稳定性得不到保证。

此时就会出现龙格现象。

 

 

实验类别:

数值分析

专业:

信息与计算科学

班级:

13080241

学号:

1308024120

姓名:

杨燕

中北大学理学院

实验二函数逼近与曲线拟合

【实验内容】

1、编写出Legendre、Chebyshev多项式的程序;

2、从随机的数据中找出其规律性,给出其近似表达式,在生产实践和科学实验中大量存在,通常利用数据的最小二乘法求得拟合曲线。

例如在某冶炼过程中,根据统计数据的含碳量与时间关系,试求含碳量

与时间

的拟合曲线。

分)

0

5

10

15

20

25

30

35

40

45

50

55

0

1.7

2.16

2.86

3.44

3.87

4.15

4.37

4.51

4.58

4.02

4.64

1

1

1

1

1

1

1

1

1

1

1

1

【实验方法与步骤】

1、用C编写语言出Legendre多项式的程序如下:

#include

doublep(intn,doublex)

{

if(n==0)

return1;

else

if(n==1)

returnx;

else

return((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;

}

intmain()

{

intn;

doublex;

doubley;

printf("inputn,x:

\n");

scanf("%d%lf",&n,&x);

y=p(n,x);

printf("%lf\n",y);

return0;

}

2、给出表格数据的近似解析表达式为;

,选取基函数

,则得到

于是得方程组

,用C语言编写曲线拟合的程序如下:

#include

#defineMax_N25

main()

{

inti,n;

doublex[Max_N],y[Max_N];

doublea11,a12,a21,a22,d1,d2;

doublea,b;

printf("\nInputnvalue:

");

do

{

scanf("%d",&n);

if(n>Max_N)

printf("\npleasere_inputnvalue:

");

}

while(n>Max_N||n<=0);

printf("inputx[i],i=0,...%d:

\n",n-1);

for(i=0;i

scanf("%lf",&x[i]);

printf("inputy[i],i=0,...%d:

\n",n-1);

for(i=0;i

scanf("%lf",&y[i]);

for(i=0;i

{

a21+=x[i];

a22+=x[i]*x[i];

d1+=y[i];

d2+=x[i]*y[i];

}

a12=a21;

a11=n;

a=(d1*a22-d2*a12)/(a11*a22-a12*a21);

b=(d1*a21-d2*a11)/(a21*a12-a22*a11);

printf("slove:

P(x)=%f+%fx\n",a,b);

getchar();

return0;

}

3、为作比较,用MATLAB进行曲线拟合,编写的程序如下:

x=[0510152025303540455055];

y=[01.272.162.863.443.874.154.374.514.584.024.64];

p=polyfit(x,y,1);

disp([num2str(p

(1)),'*x+',num2str(p

(2))]);

xx=linspace(0,60,60);

yy=polyval(p,xx);

plot(x,y,'rx',xx,yy)

【实验结果】

1、C语言编写的Legendre多项式的程序结果如下:

2、C语言拟合的曲线结果如下:

3、MATLAB拟合的曲线结果和误差分析结果如下:

拟合的方程为:

【思考】

1、最佳一致逼近与最佳平方逼近的区别是什么?

最佳一致逼近中的范数取的是无穷大范数,公式为:

最佳平方逼近中的范数取的是二范数,公式为:

2、曲线拟合与最佳平方逼近的区别是什么?

曲线拟合中的

上的一个列表函数,公式为:

最佳平方逼近中的

是一个未知函数,公式为:

3、能用什么方法确定最小二乘法的拟合函数?

拟合的方法除了最小二乘法外,还有拉格朗日插值法、牛顿插值法、区间二分法、雅克比迭代法和牛顿科特斯数值积分法等,都可以确定拟合函数。

 

 

实验类别:

数值分析

专业:

信息与计算科学

班级:

13080241

学号:

1308024120

姓名:

杨燕

中北大学理学院

实验三数值积分与数值微分

【实验内容】

选用复合梯形公式,复合Simpson公式,Romberg算法、高斯算法计算

(1)

(2)

(3)

【实验方法与步骤】

1、用C语言编写Romberg算法数值积分的程序如下:

#include

#include

#defineepsilon0.0001/*求基函数*/

floatf(floatx)

{

return(sqrt(4-sin(x)*sin(x)));

}/*梯形公式*/

floatRomberg(floata,floatb)

{

intk=1;

floatS,x,T1,T2,S1,S2,C1,C2,R1,R2,h=b-a;

T1=h/2*(f(a)+f(b));

while

(1)

{

S=0;x=a+h/2;

do

{

S+=f(x);

x+=h;

}

while(x

T2=(T1+h*S)/2.0;

if(fabs(T2-T1)

return(T2);

S2=T2+(T2-T1)/3.0;

if(k==1)

{

T1=T2;S1=S2;h/=2;k+=1;

continue;

}

if(fabs(S2-S1)

return(S2);

C2=S2+(S2-S1)/15.0;

if(k==2)

{

C1=C2;T1=T2;S1=S2;h/=2;k+=1;

continue;

}

if(fabs(C2-C1)

return(C2);

R2=C2+(C2-C1)/63.0;

if(k==3)

{

R1=R2;C1=C2;T1=T2;S1=S2;h/=2;k+=1;

continue;}

if(fabs(R2-R1)

return(R2);

R1=R2;C1=C2;T1=T2;S1=S2;h/=2;k+=1;

}

}

main()

{

inti;

floata,b,S;

printf("\nInputbeginandend:

");

scanf("%f%f",&a,&b);

S=Romberg(a,b);

printf("Solveis:

%f",S);

scanf("%",S);

}

2、再用复合Simpson公式计算同一个积分,并比较其结果,且用C语言编写的程序如下:

#include

#include

floatf(floatx)

{

return(sqrt(4-sin(x)*sin(x)));

}

floatSimpson(floata,floatb)

{

intk=1,n=20;

floats,x1,x2,h=(b-a)/n,c=a+h/2;

s=h/6*(f(a)+f(b)+4*f(c));

for(k=1;k<=n-1;k++)

{

x1=a+k*h;

x2=x1+h/2;

s=s+(2*h/3)*f(x2)+(h/3)*f(x1);

}

return(s);

}

main()

{

inti;

floata,b,s;

printf("请输入a,b:

");

scanf("%f%f",&a,&b);

s=Simpson(a,b);

printf("解为:

%f",s);

scanf("%",s);

}

3、分别取不同步长

,试比较计算结果(如

等);

4、给定精度要求

,试用变步长算法,确定最佳步长。

【实验结果】

1、所给三个定积分的结果如下:

2、对第一个定积分

用Romberg算法和复合Simpson公式计算的结果分别如下:

3、步长为

时,所给三个定积分的结果如下:

4、步长为

时,所给三个定积分的结果如下:

【思考】

1、复合求积公式的优点是什么?

复合求积公式通过把区间分成若干个子区间,再在每个子区间上用低阶求积公式来提高求积的精度。

2、Romberg算法与与牛顿-柯特斯求积算法的联系是什么?

Romberg算法与与牛顿-柯特斯求积算法的节点都是等距选取均匀分布的,且

的牛顿-柯特斯公式因为误差太大而不能使用。

3、高斯算法的求积节点如何确定?

以这些节点为零的多项式

与任何次数不超过

的多项式

带权

正交,即:

4、牛顿-柯特斯求积与高斯算法的节点分布有什么不同?

牛顿-柯特斯求积的节点是等距选取均匀分布的,而高斯算法的节点是满足以这些节点为零的多项式

与任何次数不超过

的多项式

带权

正交,即是不均匀分布的。

 

实验类别:

数值分析

专业:

信息与计算科学

班级:

13080241

学号:

1308024120

姓名:

杨燕

中北大学理学院

 

实验四线性方程组的直接解法

【实验内容】

(用追赶法)

【实验方法与步骤】

1、对上述方程组用追赶法求解,用C语言编程如下:

#include

#include

#include

#defineN5

main()

{

floata[N]={0,0,-1,-2,-2};

floatb[N]={0,2,3,4,5};

floatc[N]={0,-1,-2,-2,0};

floatd[N]={0,3,1,0,-5};

floatx[N]={0,0,0,0};

floatr[N]={0,0,0,0};

floaty[N]={0,0,0,0};

floatq;

intk;

r[1]=c[1]/b[1];

y[1]=d[1]/b[1];

for(k=2;k<=N-1;k++)

{

q=b[k]-r[k-1]*a[k];

r[k]=c[k]/q;

y[k]=(d[k]-y[k-1]*a[k])/q;

}

y[N-1]=(d[N-1]-y[N-2]*a[N-1])/(b[N-1]-r[N-2]*a[N-1]);

x[N-1]=y[N-1];

for(k=N-2;k>=1;k--)

x[k]=y[k]-r[k]*x[k+1];

for(k=1;k

printf("x[%d]=%lf\n",k,x[k]);

}

2、将结果与精确值进行比较;

3、分析数值解误差的原因。

【实验结果】

1、追赶法求解结果:

2、追赶法求解结果与精确值进行比较:

因为此方程组的精确解为

;与追赶法求解结果一样。

3、分析数值解误差的原因:

此方程组用追赶法求解时没有出现误差,但如果出现误差,我觉得就是在计算过程中的舍入误差逐步累积导致的。

【思考】

1、列主元消去法为什么选主元?

由高斯消去法知道,小主元可能产生麻烦,应避免采用绝对值小的主元素

,最好每一步选取隶属矩阵中绝对值最大的元素作为主元素,以使高斯消去法具有较好的数值稳定性。

2、全主元消去法与列主元消去法各自的优缺点是什么?

全主元素消去法就是找所有元素的最大值放在顺序主子阵左上角,它的优点是计算值的误差较小,缺点是计算量太大;列主元素消去法就是找一列中元素的最大值放在顺序主子阵左上角,它的优点是计算量较全主元素消去法来说要小很多,缺点是计算值的误差比用全主元素消去法计算出来的值得误差要大。

3、什么样的线性方程组可用追赶法求解?

线性方程组的系数矩阵为对角占优三对角线矩阵。

4、什么是矩阵的条件数,在算法的误差分析中起什么作用?

为非奇异矩阵,称

为矩阵

的条件数。

的条件数越大,方程组的病态越严重,也就越难用一般的计算方法求得比较准确的解。

5、矩阵的三角分解是什么?

将高斯消去法改写为紧凑形式,可以直接从矩阵

的元素得到计算

元素的递推公式,而不需要任何中间步骤,即将

的问题等价于求解两个三角形方程组:

,求

,求

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1