数值分析编程总结.docx
- 文档编号:2167844
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:19
- 大小:24.25KB
数值分析编程总结.docx
《数值分析编程总结.docx》由会员分享,可在线阅读,更多相关《数值分析编程总结.docx(19页珍藏版)》请在冰豆网上搜索。
数值分析编程总结
1.LU分解:
[LU]=lu(A);
2.追赶法
functionx=zhuiganfa(A,b)
[n,n]=size(A);
fori=1:
n
if(i==1)
l(i)=A(i,i);
y(i)=b(i)/l(i);
else
l(i)=A(i,i)-A(i,i-1)*u(i-1);
y(i)=(b(i)-y(i-1)*A(i,i-1))/l(i);
end
if(i u(i)=A(i,i+1)/l(i); end end x(n)=y(n) forj=n-1: -1: 1 x(j)=y(j)-u(j)*x(j+1); end 数值试验: n=101; a=1210………………………………..….0 1121………………………………..…0 01121………………………..…0 001121……………………0 1 112 关键是如何定义上述矩阵: >>n=101; c1=ones(1,n-1); a1=diag(c1,-1);这个-1说明行位置-1 c2=12*ones(1,n); a2=diag(c2); c3=ones(1,n-1); a3=diag(c3,1); a=a1+a2+a3; 3.拉格朗日插值 functionyh=lage(x,y,xh) n=length(x); m=length(xh); yh=zeros(1,m); c1=ones(n-1,1); c2=ones(1,m); fori=1: n xp=x([1: i-1i+1: n]); yh=yh+y(i)*prod((c1*xh-xp'*c2)./(x(i)-xp'*c2)); end end >>x=[11,12]; >>y=[2,4]; >>xh=[11.75]; >>lage(x,y,xh) ans= 3.5000 4最小二乘法 1.最小二乘的xi和yi为: xi 1953 1964 1982 1990 2000 yi 5.82 6.95 10.08 11.34 12.66 要拟合的函数为: y=a+bx-cxy注意不是多项式 2.编程函数为: functionz=erchen(x,y) x1=ones(5,1); A=[x1,x,-x.*y];注意点乘 z=A\y;注意左除 a=z (1); b=z (2); c=z(3); end 输入: ≻≻x=[19531964198219902000]'; ≻≻y=[5.826.9510.0811.3412.66]'; ≻≻erchen(x,y) ans= 2.9456=a -0.0014=b -0.0005=c 1.最小二乘的xi和yi为: xi 0 0.25 0.5 0.75 1 yi 1 1.284 1.6487 2.1170 2.7183 要拟合的函数为: y=a+bx+cx2是多项式 2.编程函数为: functionz=erchen2(x,y) x1=ones(5,1); A=[x1,x,x.^2]; z=A\y; a=z (1); b=z (2); c=z(3); end 输入: ≻≻x=[00.250.50.751.00]'; ≻≻y=[1.001.2841.64872.11702.7183]'; ≻≻erchen2(x,y) ans= 1.0051 0.8642 0.8437 最小二乘多项式拟合的简单函数方法: ≻≻x=[00.250.50.751.00]'; ≻≻y=[1.001.2841.64872.11702.7183]'; ≻≻P=polyfit(x,y,2)要拟合成4次,则2改成4就可以了 P= 0.84370.86421.0051注意此内置函数输出的结果c,b,a是反的 5复合辛普森公式求解积分 先定义函数: functionv=f(x) v=sin(x);“若定义有除数要点除,分母有0时要特殊定义” end 定义程序: functionI=fsps(f,a,b,n) h=(b-a)/n; x=linspace(a,b,2*n+1); y=feval(f,x); I=(h/6)*(y (1)+2*sum(y(3: 2: 2*n-1))+4*sum(y(2: 2: 2*n))+y(2*n+1)); end >>fsps('f',0,1,4) ans= 0.4597 6.不动点迭代思路 不动点迭代常常有好几个迭代的不动点函数,所以要分别定义这些函数是很困难的,如是乎使用SWITCH内置函数进行切换,叫切换函数. 1.先定义函数后进行编程的方法 先需要定义不动点函数: functionv=f(x) v=x^3-x-1; end 再定义编程: function[it,x]=fixpnt1(f,a,maxit,tol) it=0; x=feval(f,a); whileit<=maxit&abs(x-a)>tol, it=it+1; a=x; x=feval(f,a); end 此函数的调用: >>fixpnt1('f',2,100,1e-5) ans= 1 3.利用切换函数SWITCH的方法(多个不动点迭代函数) function[x,it]=fixpnt(np,a,maxit,tol) switchnp, case1, phi=inline('(3*x+10)^(1/5)'); case2, phi=inline('sin(10*x)+2*cos(x)-3'); case3, phi=inline('3-atan(x)'); case4, phi=inline('-2-1/log(x^2+x+1)'); end it=0; x=phi(a); whileit<=maxit&abs(x-a)>tol, it=it+1; a=x; x=phi(a); end 使用与输入: >>fixpnt(2,1,100,1e-5) ans= -4.2696 7.雅可比迭代 function[xit]=jacobi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); forit=1: 500 x=D\(b+L*x+U*x); error=norm(b-A*x)/norm(b); if(error break; end end 8.高斯迭代 function[xit]=gaosi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); forit=1: 500 x=(D-L)\(b+U*x); error=norm(b-A*x)/norm(b); if(error break; end end 9.SOR迭代 function[xit]=SOR(A,b,w,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); forit=1: 500 x=(D-w*L)\(w*b+(1-w)*D*x+w*U*x); error=norm(b-A*x)/norm(b); if(error break; end end 10.二分法: 1.先要定义所求的函数: functionv=f(x) v=x^3-x-1; end 2.二分法程序如下: function[x,it]=erfengfa(a,b,f,tol) fa=feval(f,a); fb=feval(f,b); it=0; whileabs(b-a)>tol, it=it+1; x=a/2+b/2; fx=feval(f,x); ifsign(fx)==sign(fa), a=x;fa=fx; else b=x;fb=fx; end end 11.牛顿法: 1.先定义函数后进行编程的方法 先需要定义不动点函数 需要计算的函数f functionv=f(x) v=x^5-3*x-10; end 需要计算的函数的导数g functionv=g(x) v=5*x^4-3; end 2.再定义编程: functionv=newton(a,f,g,maxit,tol) it=0; x=a; whileit<=maxit&abs(feval(f,x))>tol, it=it+1; x=x-feval(f,x)/feval(g,x); end v=[x,it]; end 12.牛顿下山法: 1.先定义函数后进行编程的方法 先需要定义不动点函数 需要计算的函数f functionv=f(x) v=x^2+sin(10*x)-1 end 需要计算的函数的导数g functionv=g(x) v=2*x+10*cos(10*x) end 2.再定义编程1: functionv=newtonxiashang(x0,f,g,maxit,tol) x=x0; it=0; whileit<=maxit&abs(feval(f,x))>tol, it=it+1; d=-feval(f,x)/feval(g,x); lambda=1; isdone=0; while~isdone, xn=x+lambda*d; ifabs(feval(f,xn)) isdone=1; elselambda=lambda*0.5; end end x=xn; end v=[x,it]; end 3.再定义编程2: functionv=newtonxiashang2(x0,f,g,maxit,tol) x=x0; it=0; whileit<=maxit&abs(feval(f,x))>tol, it=it+1; d=-feval(f,x)/feval(g,x); lambda=1; whileabs(feval(f,x+lambda*d))>=abs(feval(f,x)), lambda=0.5*lambda; end x=x+lambda*d; end v=[x,it]; end 13.割线法 1.先定义函数后进行编程的方法 先需要定义函数 需要计算的函数f functionv=f(x) v=x^5-3*x-10; end 2.再定义编程: functionv=gexian(a,b,f,maxit,tol) it=0; x0=a; x=b; w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 编程 总结