资源描述:
《数值分析+作业+程序》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、一些经典的数值分析(matlab程序)2008-11-2718:41以下是一些可能很常用的方法,1、牛顿迭代法此方法一般用来求函数的根,速度比较快,程序比较简单。文件newton.m内容如下%n表示迭代次数,ret为返回值functionret=newton(n)formatlongy=inline('x^3+10*x-20');z=inline('3*x^2+10');x0=1.5;fori=1:n a=y(x0); b=z(x0); x1=x0-a/b; x0=x1;endret=x1
2、2、复合Simpson求积分很简单的一种求定积分的方法,将求积区间分成很多小的曲边梯形,再累加。文件mulsimpson.m内容如下%复化simpson求积分%a,b表示区间,n表示区间数functionret=mulsimpson(a,b,n)h=(b-a)/n;detsum=0;fori=1:n-1 xk=a+i*h; detsum=detsum+fun(xk);endret=h*(fun(a)+fun(b)+2*detsum)/2;%内建函数functionz=fun(x)z=exp(-x*
3、x);3、4阶龙格-库塔法求积分此方法速度较快,编程较方便文件step4Runge.m内容如下%4阶Runge-Kutta法%a,b为积分区间,N为划分数目,y0为初值,函数由fun定义functionret=step4Runge(a,b,N,y0)formatlongh=(b-a)/N;n=1;x0=a;forn=1:Nx=x0+h;k1=fun(x0,y0);k2=fun(x0+h/2,y0+h*k1/2);k3=fun(x0+h/2,y0+h*k2/2);k4=fun(x0+h,y0+h*k3);y
4、=y0+h*(k1+2*(k2+k3)+k4)/6;x0=xy0=yend%积分函数定义functionz=fun(x,y)z=1+y*y;4、Gauss_Seidel迭代解线性方程相比消元法,编程较为容易文件Gauss_Seidel.m内容如下%此函数演示高斯-赛德尔迭代%a表示系数矩阵,b表示值矩阵,n表示系数矩阵阶数,M表示迭代次数%注意b为列向量functiony=Gauss_Seidel(a,b,n,M)formatlongx0=[0;0;0];fork=1:M fori=1:n
5、 s=0; t=x0(i); forj=1:n ifj~=i s=s+a(i,j)*x0(j); end end x0(i)=(b(i)-s)/a(i,i); endendy=x0;5、高斯列主消元法此方法为解线性方程组常用方法,先化简增广矩阵,然后回代求解。文件gauss.m内容如下%Gauss主列消元法%a为系数矩阵,b为列向量(行列式右侧),n为系数矩阵阶数functionu=ga
6、uss(a,b,n)aug=[ab]%取得增广矩阵fork=1:n fori=k+1:n r=k; det=abs(aug(k,k)); forj=k+1:n%选主元 ifdet7、p; end ifaug(k,k)==0%消元失败 disp('err!'); pause; exit; end fori=k+1:n%第i行 m=aug(i,k)/aug(k,k);%行因子 forj=k:n+1 aug(i,j)=aug(i,j)-m*aug(k,j); end end end
8、endaug%显示对角化后的矩阵x(n)=aug(n,n+1)/aug(n,n);%最后一个解fori=n-1:-1:1%回代消元 s=0; forj=i+1:n s=s+aug(i,j)*x(j); end x(i)=(aug(i,n+1)-s)/aug(i,j-1);%求第i各解endu=x;