1、数值分析实验题集锦实验一题目: 多项式最小二乘法1.数学原理:对于给定的测量数据(xi,fi)(i=1,2,,n),设函数分布为特别的,取为多项式 (j=0, 1,,m)则根据最小二乘法原理,可以构造泛函令 (k=0, 1,,m)则可以得到法方程求该解方程组,则可以得到解,因此可得到数据的最小二乘解2.程序设计:本实验采用Matlab的M文件编写。其中多项式函数写成function的方式,如下function y=fai(x,j)y=1;for i=1:j y=x.*y;end写成如上形式即可,下面给出主程序。多项式最小二乘法源程序clear%给定测量数据点(s,f)s=3 4 5 6 7 8
2、 9;f=2.01 2.98 3.50 5.02 5.47 6.02 7.05;%计算给定的数据点的数目n=length(f);%给定需要拟合的数据的最高次多项式的次数m=10;%程序主体for k=0:m; g=zeros(1,m+1); for j=0:m; t=0; for i=1:n;%计算内积(fai(si),fai(si) t=t+fai(s(i),j)*fai(s(i),k); end g(j+1)=t; end A(k+1,:)=g;%法方程的系数矩阵 t=0; for i=1:n;%计算内积(f(si),fai(si) t=t+f(i)*fai(s(i),k); end b(
3、k+1,1)=t;end a=Ab%求出多项式系数x=s(1):0.01:s(n);y=0;for i=0:m; y=y+a(i+1)*fai(x,i);endplot(x,y)%作出拟合成的多项式的曲线grid onhold on plot(s,f,rx) %在上图中标记给定的点3.结果分析和讨论:例 用最小二乘法处理下面的实验数据.xi3456789fi2.012.983.505.025.476.027.05并作出的近似分布图。分别采用一次,二次和五次多项式来拟合数据得到相应的拟合多项式为:y1=-0.38643+0.82750x;y2=-1.03024+1.06893x-0.02012x
4、2;y5=-50.75309+51.53527x-19.65947x2+3.66585x3-0.32886x4+0.01137x5;分别作出它们的曲线图,图中点划线为y1曲线,实线为y2曲线,虚线为y5曲线。x为给定的数据点。从图中可以看出并不是多项式次数越高越好,次数高了,曲线越能给定点处和实际吻合,但别的地方就很差了。因此,本例选用一次和两次的多项式拟合应该就可以了。实验二题目:非线性方程求解1.数学原理:对于一个非线性方程的数值解法很多。在此介绍两种最常见的方法:二分法和Newton法。对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在a,b上连续,f(a)f(b)0,且f
5、(x)在a,b内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)5e-6) ; c=(a+b)/2; if f12(a)*f12(c)0; a=c; else b=c; end R=b-a;%求出误差k=k+1;endx=c%给出解Newton法及改进的Newton法源程序:clear% 输入函数f=input(请输入需要求解函数,s)%求解f(x)的导数df=diff(f);%改进常数或重根数miu=2;%初始值x0x0=input(input initial value x0);k=0;%迭代次数max=100;%最大迭代次数R=eval(subs(f,x0,x)
6、;%求解f(x0),以确定初值x0时否就是解while (abs(R)1e-8) x1=x0-miu*eval(subs(f,x0,x)/eval(subs(df,x0,x); R=x1-x0; x0=x1; k=k+1;if (eval(subs(f,x0,x)max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值 ss=input(maybe result is error,choose a new x0,y/n?,s); if strcmp(ss,y) x0=input(input initial value x0); k=0; else break end endendk;%给
7、出迭代次数x=x0;%给出解3.结果分析和讨论:1. 用二分法计算方程在1,2内的根。(,下同)计算结果为x= 1.40441513061523;f(x)= -3.797205105904311e-007;k=18;由f(x)知结果满足要求,但迭代次数比较多,方法收敛速度比较慢。2. 用二分法计算方程在1,1.5内的根。计算结果为x= 1.32471847534180;f(x)= 2.209494846194815e-006;k=17;由f(x)知结果满足要求,但迭代次数还是比较多。3. 用Newton法求解下列方程a) x0=0.5;计算结果为x= 0.56714329040978;f(x)
8、= 2.220446049250313e-016;k=4;由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快。b) x0=1;c) x0=0.45, x0=0.65; 当x0=0.45时,计算结果为x= 0.49999999999983;f(x)= -8.362754932994584e-014;k=4;由f(x)知结果满足要求,而且又迭代次数只有4次看出收敛速度很快,实际上该方程确实有真解x=0.5。当x0=0.65时,计算结果为x= 0.50000000000000;f(x)=0;k=9;由f(x)知结果满足要求,实际上该方程确实有真解x=0.5,但迭代次数增多,实际上当取x
9、00.68时,x1,就变成了方程的另一个解,这说明Newton法收敛与初值很有关系,有的时候甚至可能不收敛。4. 用改进的Newton法求解,有2重根,取 x0=0.55;并与3.中的c)比较结果。当x0=0.55时,程序死循环,无法计算,也就是说不收敛。改时,结果收敛为x=0.50000087704286;f(x)=4.385198907621127e-007;k=16;显然这个结果不是很好,而且也不是收敛至方程的2重根上。当x0=0.85时,结果收敛为x= 1.00000000000489;f(x)= 2.394337647718737e-023;k=4;这次达到了预期的结果,这说明初值的
10、选取很重要,直接关系到方法的收敛性,实际上直接用Newton法,在给定同样的条件和精度要求下,可得其迭代次数k=15,这说明改进后的Newton法法速度确实比较快。4.结论:对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢。Newton法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果。改进的Newton法求解重根问题时,如果初值不当,可能会不收敛,这一点非常重要,当然初值合适,相同情况下其速度要比Newton法快得多。实验三题目: Gauss列主元
11、消去法1.数学原理:由于一般线性方程在使用Gauss消去法求解时,从求解的过程中可以看到,若=0,则必须进行行交换,才能使消去过程进行下去。有的时候即使0,但是其绝对值非常小,由于机器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确。因此有必要进行列主元技术,以最大可能的消除这种现象。这一技术要寻找行r,使得并将第r行和第k行的元素进行交换,以使得当前的的数值比0要大的多。这种列主元的消去法的主要步骤如下:1. 消元过程对k=1,2,n-1,进行如下步骤。1) 选主元,记若很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对。2) 交换增广阵A的r,k两行的元素。 (j=
12、k,n+1)3) 计算消元 (i=k+1,n; j=k+1,n+1)2. 回代过程对k= n, n-1,1,进行如下计算至此,完成了整个方程组的求解。2.程序设计:本实验采用Matlab的M文件编写。 Gauss消去法源程序:cleara=input(输入系数阵:n)b=input(输入列阵b:n)n=length(b);A=a bx=zeros(n,1);%函数主体for k=1:n-1;%是否进行主元选取if abs(A(k,k)abs(t) p=r; else p=k; end end %交换元素 if p=k; for q=k:n+1; s=A(k,q); A(k,q)=A(p,q);
13、 A(p,q)=s; end end end %判断系数矩阵是否奇异或病态非常严重if abs(A(k,k) Euler_1(f,0,3,2,20)四、实验结果 Euler_1(f,0,3,2,20)T = 0 3.0000 0.1000 2.9836 0.2000 2.9517 0.3000 2.9058 0.4000 2.8481 0.5000 2.7810 0.6000 2.7073 0.7000 2.6297 0.8000 2.5511 0.9000 2.4739 1.0000 2.4004 1.1000 2.3325 1.2000 2.2714 1.3000 2.2177 1.4000 2.1717 1.5000 2.1332 1.6000 2.1017 1.7000 2.0765 1.8000 2.0567 1.9000 2.0414 2.0000 2.0299五、实验结论:欧拉(Euler)算法是数值求解中最基本、最简单的方法,但其求解精度较低。改进欧拉格式较欧拉格式提高了精度,其截断误差比欧拉格式提高了一阶。龙格库塔法是用于模拟长微分方程的解的重要的一类隐式或显式迭代法。工程中很多的地方用到龙格库塔求解微分方程的数值解,龙格库塔是很重要的一种方法,尤其是四阶的,精确度相当的高。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1