您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 一些经典的数值分析(matlab程序)
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:na=y(x0);b=z(x0);x1=x0-a/b;x0=x1;endret=x12、复合Simpson求积分很简单的一种求定积分的方法,将求积区间分成很多小的曲边梯形,再累加。文件mulsimpson.m内容如下%复化simpson求积分%a,b表示区间,n表示区间数functionret=mulsimpson(a,b,n)h=(b-a)/n;detsum=0;fori=1:n-1xk=a+i*h;detsum=detsum+fun(xk);endret=h*(fun(a)+fun(b)+2*detsum)/2;%内建函数functionz=fun(x)z=exp(-x*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=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:Mfori=1:ns=0;t=x0(i);forj=1:nifj~=is=s+a(i,j)*x0(j);endendx0(i)=(b(i)-s)/a(i,i);endendy=x0;5、高斯列主消元法此方法为解线性方程组常用方法,先化简增广矩阵,然后回代求解。文件gauss.m内容如下%Gauss主列消元法%a为系数矩阵,b为列向量(行列式右侧),n为系数矩阵阶数functionu=gauss(a,b,n)aug=[ab]%取得增广矩阵fork=1:nfori=k+1:nr=k;det=abs(aug(k,k));forj=k+1:n%选主元ifdetabs(aug(j,k))det=abs(aug(j,k));endendifr~=k%交换r,ktemp=r;r=k;k=temp;endifaug(k,k)==0%消元失败disp('err!');pause;exit;endfori=k+1:n%第i行m=aug(i,k)/aug(k,k);%行因子forj=k:n+1aug(i,j)=aug(i,j)-m*aug(k,j);endendendendaug%显示对角化后的矩阵x(n)=aug(n,n+1)/aug(n,n);%最后一个解fori=n-1:-1:1%回代消元s=0;forj=i+1:ns=s+aug(i,j)*x(j);endx(i)=(aug(i,n+1)-s)/aug(i,j-1);%求第i各解endu=x;
本文标题:一些经典的数值分析(matlab程序)
链接地址:https://www.777doc.com/doc-5741438 .html