数值分析编程题c语言_第1页
数值分析编程题c语言_第2页
数值分析编程题c语言_第3页
数值分析编程题c语言_第4页
数值分析编程题c语言_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上机实习题一一、题目:已知A与b12.38412,2.,-1.,1.,-0.,0.,1.,3.,-2. 2.,19.,-3.,-1.,2.,1.,-0.,1.,3. -1.,-3.,15.,3.,2.,1.,-1.,0.,-1. 1.,-1.,3.,27.,4.,-3.,2.,-0.71828,-0. A= -0.,2.,2.,4.,19.,0.,-3.,2.,1. 0.,1.,1.,-3.,0.,9.,-0.,-1.,0. 1.,-0.,-1.,2.,-3.,-0.,14.,3.,-2. 3.,1.,0.,-0.71828,2.,-1.,3.,30.,4. -2.,3.,-1.,-0.,1.

2、,0.,-2.,4.,40.00001b=2.,33.,-25.,0.,1.,-86.,1.,4.,-5.1用Household变换,把A化为三对角阵B(并打印B)。2用超松弛法求解BX=b(取松弛因子=1.4,X(0)=0,迭代9次)。3用列主元素消去法求解BX=b。二、解题方法的理论依据: 1 、用Householder变换的理论依据 1 令A0=A,a(ij)1=a(ij),已知Ar_1即Ar_1=a(ij)r 2 Sr=sqrt(pow(a,2) 3 a(r)=Sr*Sr+abs(a(r+1,r)*Sr 4 y(r)=A(r_1)*u/a 5 Kr=(/2)*Ur的转置*Yr/a 6

3、Qr=Yr-Kr*Ur 7 Ar=A(r-1)-(Qr*Ur的转置+Ur*Qr的转置) r=1,2,n-22 、用超松弛法求解其基本思想:在高斯方法已求出x(m),x(m-1)的基础上,组合新的序列,从而加快收敛速度。其算式:其中是超松弛因子,当1时,可以加快收敛速度3 、用消去法求解用追赶消去法求Bx=b的方法: , , , , q10=0 , u10=0 , x9=u19三、1计算程序:#include math.h#include stdio.h#define ge 8void main()int sign(double x);double a9=12.38412,2.,-1.,1.,-

4、0.,0.,1.,3.,-2., 2.,19.,-3.,-1.,2.,1.,-0.,1.,3.,-1.,-3.,15.,3.,2.,1.,-1.,0.,-1.,1.,-1.,3.,27.,4.,-3.,2.,-0.71828,-0.,-0.,2.,2.,4.,19.,0.,-3.,2.,1.,0.,1.,1.,-3.,0.,9.,-0.,-1.,0.,1.,-0.,-1.,2.,-3.,-0.,14.,3.,-2.,3.,1.,0.,-0.71828,2.,-1.,3.,30.,4.,-2.,3.,-1.,-0.,1.,0.,-2.,4.,40.00001 ;double k,h,s,w;in

5、t i,j,n,m,g;double u9,x19,y9,q9,b1910,x9;double b9=2.,33.,-25.,0.,1.,-86.,1.,4.,-5.; for(j=0;j7;+j) /*Household 变换 */s=0.0; for(i=j+1;i0)?(s*s+s*aj+1j):(s*s-s*aj+1j);for(g=0;g9;+g)if (g=j)ug=0;else if (g=j+1) ug=aj+1j+s*sign(aj+1j);else ug=agj;for(m=0;m9;+m)ym=0;for(n=0;n9;+n)ym=ym+amn*un; ym=ym/h;k

6、=0;for(i=0;i9;+i)k=k+ui*yi;k=0.5*k/h;for(i=0;i9;+i)qi=yi-k*ui;for(n=0;n9;+n)for(m=0;m9;+m)amn=amn-(qm*un+um*qn);printf(Household:n);for(i=0;i9;+i)for(j=0;j9;+j)if (j%9=0)printf(n);printf(%-9.5f,aij);printf(n);w=1.4; /*超松弛法*/for(i=0;i9;i+)x1i=0;for(i=0;i9;i+)for(j=0;j9;j+)if(i=j)b1ij=0;else b1ij=-aij

7、/aii;for(i=0;i9;i+)b1i9=bi/aii;for(n=0;n9;n+)for(i=0;i9;i+)s=0;for(j=0;j9;j+)s=s+b1ij*x1j;s=s+b1i9;x1i=x1i*(1-w)+w*s;for(i=0;i9;i+) if (i=5)printf(n);printf(x%d=%-10.6f,i,x1i); printf(n);u0=a00; /*以下是消去法*/y0=b0;for(i=1;i=0;i-)xi=(yi-aii+1*xi+1)/ui;for(i=0;i=(1e-6)?1:-1); return(z); 2打印结果:Household:1

8、2.38412 -4.89308 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000-4.89308 25.39842 6.49410 0.00000 0.00000 0.00000 0.00000 0.00000 0.000000.00000 6.49410 20.61150 8.24393 0.00000 0.00000 0.00000 0.00000 0.000000.00000 0.00000 8.24393 23.42284 -13.00000 0.00000 0.00000 -0.000000.00000 0.00000

9、0.00000 -13.69828 4.53450 0.00000 0.00000 0.000000.00000 0.00000 0.00000 0.00000 4.53450 16.00612 4.88144 0.00000 0.000000.00000 0.00000 0.00000 0.00000 0.00000 4.88144 26.01332 -4.50363 -0.000000.00000 0.00000 0.00000 0.00000 0.00000 0.00000 -4.50363 21.25406 4.504500.00000 0.00000 0.00000 -0.00000

10、 0.00000 0.00000 -0.00000 4.50450 14.53412x0=1. x1=2. x2= -2.x3=2. x4=2. x5= -6.x6=1. x7=0. x8= -0.x0=1. x1=2. x2= -2.x3=2. x4=2. x5= -6.x6=1. x7=0. x8= -0.四、问题讨论:此程序具有很好的通用性。在GS方法的基础上,已经求出x的第m解,第m-1基础上,经过重新组合得新的序列,而在此新序列收敛速度加快。上机实习题二一、题目:已知函数值如下表:x12345f(x)00.1.1.1.x678910f(x)1.1.2.2.2.f(x)f(1)=1f(

11、0)=0.1试用三次样条插值求f(4.563)及f(4.563)的近似值。二、解题方法的理论依据:任意划分的三弯矩插值法以及方程组解法中的三对角阵追赶算法。应用三次样条插值法能够对函数产生很好的逼近效果。而追赶算法又具有计算量少、方法简单、算法稳定的特点。方法应用条件:适用于求复杂函数在给定区间内某一点的函数值,给出函数f(x)在区间a,b中的n个插值点,并且给出函数在区间端点处的值。三、1计算程序:#include stdio.h#include math.h#define n 11#define ge 11void main()int i,m;double e,s,E,q12,u12,y1

12、2,c12,w12;double b12=2,0,4.,6.,8.,9.,10.,11.,12.47667,13.,13.,14.;double a1212=-2,-4,0,0,0,0,0,0,0,0,0,0,0;ann-1=4;ann=2;for(i=1;i11;i+)aii-1=1;aii=4;aii+1=1;u0=a00; /*消去法求ci*/y0=b0;for(i=1;i=0;i-)ci=(yi-aii+1*ci+1)/ui; printf(请输入要插的值:);scanf(%lf,&E); for(i=0;i=2) wi=0;else if(e=1) wi=0.5*fabs(e*e*e

13、)-e*e+2.0/3.0;elsewi=(-1.0/6.0)*fabs(e*e*e)+e*e-2*fabs(e)+4.0/3.0; s=0.0;for(i=0;i12;i+)s=s+ci*wi;printf(f(%lf)=%lf,E,s);printf(n);printf(请输入要求的导数的值:);scanf(%d,&m);printf(f(%d)=%lfn,m,(cm+1-cm-1)/2.0); 输出结果:请输入要插的值: 4.563f(4.563)=1.请输入要求的导数的值: 4.563f(4.563)= 0.四、问题讨论:在给均匀分划的插值函数x赋值时,由于使用for循环,误将xi=i

14、+1写成xi=i,导致运算错误。此程序具有一定通用性,对于任意划分的三弯矩插值法,只许改动xi即可。求解方程组Mj时,要用到三对角方程组的追赶法(也称Thomas算法)。变量较多,应注意区分。求导时注意正负号。上机实习题三一、题目: 用Newton法求方程 X7-28x4+14=0在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。二、解题方法及理论依据:Newton迭代法是平方收敛于方程f(x)=0在区间a,b上的唯一解,收敛速度较快,循环次数少。方法应用条件: ) f(a)f(b)=1e-5); /*控制误差小于0.00001*/ printf(nT

15、he result of the question is %fn,x);2打印结果:请输入端点值:1.9 0.1x=0. 3.四、问题讨论:程序较为简单。它的几何意义为xk+1是f(x)在点xk的切线与x轴交点,故也称为切线法,它是平方收敛的,此处取xk=1.9收敛性较好,要注意判断f(xk)是否为零。上机实习题四一、题目:用Romberg算法求 (允许误差=0.00001)。二、解题方法及理论依据:龙贝格(Romberg)方法求数值积分T1(0)=(b-a)/2*f(a)+f(b)T1(l)=(1/2)* T1(l-1)+(b-a)/2l-1*fa+(2i-1)*(b-a)/2lTm+1k-

16、1=4mTm(k)-Tm(k-1)/(4m-1)三、1计算程序:#include math.hint a=1,b=3;double f(double x) /*求f(x)=3xx1.4(5x+7)sinx2的值*/ double z; z=pow(3,x)*pow(x,1.4)*(5*x+7)*sin(x*x); return (z);double s(int l) /*求T1(l) 中的(b-a)/2l-1*fa+(2i-1)*(b-a)/2l*/ extern a,b; int i,m; double z=0.0; m=pow(2,l-1); for(i=1;i=0;m+,n-) /*求解

17、Tl(0)*/ Tmn=(pow(4,m-1)*Tm-1n+1-Tm-1n)/(pow(4,m-1)-1.0); while(fabs(Tl0-Tl-10)=1e-5); printf(nT%d0=%f,l,Tl0);2打印结果:T80=440.四、问题讨论:此程序较繁,计算T1(k)需要复化梯形公式,还要用到Richardson外推法,构造新序列,计算新分点的值时,这些数值个数成倍增加。应用给出所要求的误差,当|Tl(0)-Tl+1(0)|时控制循环。程序具有广泛的通用性。上机实习题五一、题目:用定步长四阶Runge-Kutta法求解 dy1/dt=1 dy2/dt=y3 dy3/dt=10

18、00-1000y2-100y3 y1(0)=0 y2(0)=0 y3(0)=0h=0.0005,打印yi(0.025), yi(0.045), yi(0.085), yi(0.1),(i=1,2,3)二、解题方法及理论依据:高阶方程组的Runge-Kutta解法 Yn+1=Yn+(1/6)*(K1+2K2+2K3+K4) K1=h*F(xn,Yn) K2=h*F(xn+h/2,Yn+K1/2) K3=h*F(xn+h/2,Yn+K2/2) K4=h*F(xn+h,Yn+K3) 适用条件:使用于那些用普通的积分方法解不了的微分方程组.只要知道函数之间的关系和初值就可以不用解出表达式而直接求解函数在要求点的值。三、1计算程序:#include main() double t,h=0.0005,y1=0,y2=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论