数值计算方法matlab程序.docx
- 文档编号:1966627
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:22
- 大小:32.69KB
数值计算方法matlab程序.docx
《数值计算方法matlab程序.docx》由会员分享,可在线阅读,更多相关《数值计算方法matlab程序.docx(22页珍藏版)》请在冰豆网上搜索。
数值计算方法matlab程序
二分法
function[x0,k]=bisect1(fun1,a,b,ep)
ifnargin<4
ep=1e-5;
end
fa=feval(fun1,a);
fb=feval(fun1,b);
iffa*fb>0
x0=[fa,fb];
k=0;
return;
end
k=1;
whileabs(b-a)/2>ep
x=(a+b)/2;
fx=feval(fun1,x);
iffx*fa<0
b=x;
fb=fx;
else
a=x;
fa=fx;
k=k+1;
end
end
x0=(a+b)/2;
>>fun1=inline('x^3-x-1');
>>[x0,k]=bisect1(fun1,1.3,1.4,1e-4)
x0=
1.3247
k=
7
>>
简单迭代法
function[x0,k]=iterate1(fun1,x0,ep,N)
ifnargin<4
N=500;
end
ifnargin<3
ep=1e-5;
end
x=x0;
x0=x+2*ep;
k=0;
whileabs(x-x0)>ep&k x0=x; x=feval(fun1,x0); k=k+1; end x0=x; ifk==N warning('已达最大迭代次数') end >>fun1=inline('(x+1)^(1/3)'); >>[x0,k]=iterate1(fun1,1.5) x0= 1.3247 k= 7 >>fun1=inline('x^3-1'); >>[x0,k]=iterate1(fun1,1.5) x0= Inf k= 9 >> Steffesen加速迭代(简单迭代法的加速) function[x0,k]=steffesen1(fun1,x0,ep,N) ifnargin<4 N=500; end ifnargin<3 ep=1e-5; end x=x0; x0=x+2*ep; k=0; whileabs(x-x0)>ep&k x0=x; y=feval(fun1,x0); z=feval(fun1,y); x=x0-(y-x0)^2/(z-2*y+x0); k=k+1; end x0=x; ifk==N warning('已达最大迭代次数') end >>fun1=inline('(x+1)^(1/3)'); >>[x0,k]=steffesen1(fun1,1.5) x0= 1.3247 k= 3 >>fun1=inline('x^3-1'); >>[x0,k]=steffesen1(fun1,1.5) x0= 1.3247 k= 6 Newton迭代 function[x0,k]=Newton7(fname,dfname,x0,ep,N) ifnargin<5 N=500; end ifnargin<4 ep=1e-5; end x=x0; x0=x+2*ep; k=0; whileabs(x-x0)>ep&k x0=x; x=x0-feval(fname,x0)/feval(dfname,x0); k=k+1; end x0=x; ifk==N warning('已达最大迭代次数') end >>fname=inline('x-cos(x)'); >>dfname=inline('1+sin(x)'); >>[x0,k]=Newton7(fname,dfname,pi/4,1e-8) x0= 0.7391 k=4 非线性方程求根的Matlab函数调用举例: 1.求多项式的根: 求f(x)=x^3-x-1=0的根: >>roots([10-1-1]) ans= 1.3247 -0.6624+0.5623i -0.6624-0.5623i 2.求一般函数的根 >>fun=inline('x*sin(x^2-x-1)','x') fun= Inlinefunction: fun(x)=x*sin(x^2-x-1) >>fplot(fun,[-20.1]);gridon >>x=fzero(fun,[-2,-1]) x= -1.5956 >>x=fzero(fun,[-1-0.1]) x= -0.6180 [x,f,h]=fsolve(fun,-1.6) x= -1.5956 f= 1.4909e-009 h= 1 (h>0表示收敛,h<0表示发散,h=0表示已达到设定的计算函数值的最大次数) 第三章: 线性方程组的数值解法 1.高斯消元法 function[A,x]=gauss3(A,b) %本算法用顺序高斯消元法求解线性方程组 n=length(b); A=[A,b]; fork=1: n-1 A((k+1): n,(k+1): (n+1))=A((k+1): n,(k+1): (n+1))-A((k+1): n,k)/A(k,k)*A(k,(k+1): (n+1)); A((k+1): n,k)=zeros(n-k,1); A; end x=zeros(n,1); %上面为消元过程 x(n)=A(n,n+1)/A(n,n); fork=n-1: -1: 1 x(k)=(A(k,n+1)-A(k,(k+1): n)*x((k+1: n)))/A(k,k); end %上面为回代过程 >>A=[234;352;4330]; >>b=[6,5,32]' b= 6 5 32 >>[A,x]=gauss3(A,b) A= 2.00003.00004.00006.0000 00.5000-4.0000-4.0000 00-2.0000-4.0000 x= -13 8 2 列选主元的高斯消元法: function[A,x]=gauss5(A,b) %本算法用列选主元的高斯消元法求解线性方程组 n=length(b); A=[A,b]; fork=1: n-1 %选主元 [ap,p]=max(abs(A(k: n,k))); p=p+k-1; ifp>k t=A(k,: ); A(k,: )=A(p,: ); A(p,: )=t; end %消元 A((k+1): n,(k+1): (n+1))=A((k+1): n,(k+1): (n+1))-A((k+1): n,k)/A(k,k)*A(k,(k+1): (n+1)); A((k+1): n,k)=zeros(n-k,1); end %回代 x=zeros(n,1); x(n)=A(n,n+1)/A(n,n); fork=n-1: -1: 1 x(k)=(A(k,n+1)-A(k,(k+1): n)*x((sk+1: n)))/A(k,k); end >>A=[234;352;4330];b=[6,5,32]'; >>[A,x]=gauss5(A,b) A= 4.00003.000030.000032.0000 02.7500-20.5000-19.0000 000.18180.3636 x= -13 8 2 三角分解法: Doolittle分解 function[L,U]=doolittle1(A) n=length(A); U=zeros(n); L=eye(n); U(1,: )=A(1,: ); L(2: n,1)=A(2: n,1)/U(1,1); fork=2: n U(k,k: n)=A(k,k: n)-L(k,1: k-1)*U(1: k-1,k: n); L(k+1: n,k)=A(k+1: n,k)-L(k+1: n,1: k-1)*U(1: k-1,n)/U(k,k); End y=zeros(n,1); x=y; y (1)=b (1); fori=2: n y(i)=b(i)-L(i,1: i-1)*y(1: i-1); end x(n)=y(n)/U(n,n); fori=n-1: -1: 1 x(i)=(y(i)-U(i,i+1: n)*x(i+1: n))/U(i,i); end >>A=[123;252;315];b=[141820]'; >>[L,U,x]=doolittle1(A,b) L= 100 210 3-81 U= 123 01-4 00-36 x= 2.8333 1.3333 2.8333 平方根法: function[L,x]=choesky3(A,b) n=length(A); L=zeros(n); L(: 1)=A(: 1)/sqrt(A(1,1)); fork=2: n L(k,k)=A(k,k)-L(k,1: k-1)*L(k,1: k-1)'; L(k,k)=sqrt(L(k,k)); fori=k+1: n L(i,k)=(A(i,k)-L(i,1: k-1)*L(k,1: k-1)')/L(k,k); end end y=zeros(n,1); x=y; y (1)=b (1)/L(1,1); fori=2: n y(i)=(b(i)-L(i,1: i-1)*y(1: i-1))/L(i,i); end x(n)=y(n)/L(n,n); fori=n-1: -1: 1 x(i)=(y(i)-L(i+1: n,i)'*x(i+1: n))/L(i,i); end >>A=[4-11;-14.252.75;12.753.5] A= 4.0000-1.00001.0000 -1.00004.25002.7500 1.00002.75003.5000 >>b=[467.25]' b= 4.0000 6.0000 7.2500 [L,x]=choesky3(A,b) L= 2.000000 -0.50002.00000 0.50001.50001.0000 x= 1 1 1 >> 迭代法求方程组的解 Jacobi迭代法: function[x,k]=jacobi2(a,b,x0,ep,N) %本算法用Jacobi迭代求解ax=b,用分量形式 n=length(b); k=0; ifnargin<5 N=500; end ifnargin<4 ep=1e-5; end ifnargin<3 x0=zeros(n,1); y=zeros(n,1); end x=x0;x0=x+2*ep; whilenorm(x-x0,inf)>ep&k k=k+1; x0=x; fori=1: n y(i)=b(i); forj=1: n ifj~=i y(i)=y(i)-a(i,j)*x0(j); end end ifabs(a(i,i))<1e-10|k==N warning('a(i,i)istoosmall'); return end y
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 计算方法 matlab 程序
![提示](https://static.bdocx.com/images/bang_tan.gif)