數(shù)值計(jì)算方法matlab程序_第1頁
數(shù)值計(jì)算方法matlab程序_第2頁
數(shù)值計(jì)算方法matlab程序_第3頁
數(shù)值計(jì)算方法matlab程序_第4頁
數(shù)值計(jì)算方法matlab程序_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、二分法function x0,k=bisect1(fun1,a,b,ep)if nargin<4ep=1e-5;endfa=feval(fun1,a);fb=feval(fun1,b);if fa*fb>0x0=fa,fb;k=0;return;endk=1;while abs(b-a)/2>epx=(a+b)/2;fx=feval(fun1,x);if fx*fa<0b=x;fb=fx;elsea=x;fa=fx;k=k+1;endendx0=(a+b)/2;>> fun1=inline('x3-x-1');>> x0,k=bi

2、sect1(fun1,1.3,1.4,1e-4)x0 =1.3247k =7>>簡單迭代法function x0,k=iterate1(fun1,x0,ep,N)if nargin<4N=500;endif nargin<3ep=1e-5;endx=x0;x0=x+2*ep;k=0;while abs(x-x0)>ep & k<Nx0=x;x=feval(fun1,x0);k=k+1;endx0=x;if k=Nwarning('已達(dá)最大迭代次數(shù)')end>> fun1=inline('(x+1)(1/3)'

3、;);>> x0,k=iterate1(fun1,1.5)x0 =1.3247k =7>> fun1=inline('x3-1');>> x0,k=iterate1(fun1,1.5)x0 =Infk =9>>Steffesen加速迭代(簡單迭代法的加速)function x0,k=steffesen1(fun1,x0,ep,N)if nargin<4N=500;endif nargin<3ep=1e-5;endx=x0;x0=x+2*ep;k=0;while abs(x-x0)>ep & k<Nx

4、0=x;y=feval(fun1,x0);z=feval(fun1,y);x=x0-(y-x0)2/(z-2*y+x0);k=k+1;endx0=x;if k=Nwarning('已達(dá)最大迭代次數(shù)')end>> fun1=inline('(x+1)(1/3)');>> x0,k=steffesen1(fun1,1.5)x0 =1.3247k =3>> fun1=inline('x3-1');>> x0,k=steffesen1(fun1,1.5)x0 =1.3247k =6Newton迭代funct

5、ion x0,k=Newton7(fname,dfname,x0,ep,N)if nargin<5N=500;endif nargin<4ep=1e-5;endx=x0;x0=x+2*ep;k=0;while abs(x-x0)>ep & k<Nx0=x;x=x0-feval(fname,x0)/feval(dfname,x0);k=k+1;endx0=x;if k=Nwarning('已達(dá)最大迭代次數(shù)')end>> fname=inline('x-cos(x)');>> dfname=inline(

6、9;1+sin(x)');>> x0,k=Newton7(fname,dfname,pi/4,1e-8)x0 =0.7391k =4非線性方程求根的Matlab函數(shù)調(diào)用舉例:1.求多項(xiàng)式的根: 求f(x)=x3-x-1=0的根:>> roots(1 0 -1 -1)ans =1.3247-0.6624 + 0.5623i-0.6624 - 0.5623i2.求一般函數(shù)的根>> fun=inline('x*sin(x2-x-1)','x')fun = Inline function: fun(x) = x*sin(x2-

7、x-1)>> fplot(fun,-2 0.1);grid on>> x=fzero(fun,-2,-1)x = -1.5956>> x=fzero(fun,-1 -0.1)x = -0.6180x,f,h=fsolve(fun,-1.6)x = -1.5956f = 1.4909e-009h = 1(h>0表示收斂,h<0表示發(fā)散,h=0表示已達(dá)到設(shè)定的計(jì)算函數(shù)值的最大次數(shù))第三章:線性方程組的數(shù)值解法1. 高斯消元法function A,x=gauss3(A,b)%本算法用順序高斯消元法求解線性方程組n=length(b);A=A,b;for

8、 k=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;endx=zeros(n,1); %上面為消元過程 x(n)=A(n,n+1)/A(n,n); for k=n-1:-1:1 x(k)=(A(k,n+1)-A(k,(k+1):n)*x(k+1:n)/A(k,k); end %上面為回代過程 >> A=2 3 4;3 5 2;4 3 30;>> b=6,5,32'b = 6 5 32&g

9、t;> A,x=gauss3(A,b)A = 2.0000 3.0000 4.0000 6.0000 0 0.5000 -4.0000 -4.0000 0 0 -2.0000 -4.0000x = -13 8 2列選主元的高斯消元法:function A,x=gauss5(A,b)%本算法用列選主元的高斯消元法求解線性方程組n=length(b);A=A,b;for k=1:n-1 %選主元 ap,p=max(abs(A(k:n,k); p=p+k-1; if p>k t=A(k,:); A(k,:)=A(p,:); A(p,:)=t; end %消元 A(k+1):n,(k+1)

10、:(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); for k=n-1:-1:1 x(k)=(A(k,n+1)-A(k,(k+1):n)*x(sk+1:n)/A(k,k);end>> A=2 3 4;3 5 2;4 3 30; b=6,5,32'>> A,x=gauss5(A,b)A = 4.0000 3.0000 30.0000 32.0000 0

11、2.7500 -20.5000 -19.0000 0 0 0.1818 0.3636x = -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);for k=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);Endy=zeros(n,1);x=y;y(1)

12、=b(1);for i=2:n y(i)=b(i)-L(i,1:i-1)*y(1:i-1);endx(n)=y(n)/U(n,n);for i=n-1:-1:1 x(i)=(y(i)-U(i,i+1:n)*x(i+1:n)/U(i,i);end>> A=1 2 3;2 5 2 ;3 1 5;b=14 18 20'>> L,U,x=doolittle1(A,b)L = 1 0 0 2 1 0 3 -8 1U = 1 2 3 0 1 -4 0 0 -36x = 2.8333 1.33332.8333 平方根法:function L,x=choesky3(A,b)n=

13、length(A);L=zeros(n);L(:,1)=A(:,1)/sqrt(A(1,1);for k=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); for i=k+1:n L(i,k)=(A(i,k)-L(i,1:k-1)*L(k,1:k-1)')/L(k,k); endend y=zeros(n,1);x=y;y(1)=b(1)/L(1,1);for i=2:n y(i)=(b(i)-L(i,1:i-1)*y(1:i-1)/L(i,i);endx(n)=y(n)/L(n,n);for i=n-1:

14、-1:1 x(i)=(y(i)-L(i+1:n,i)'*x(i+1:n)/L(i,i);end>> A=4 -1 1;-1 4.25 2.75;1 2.75 3.5A = 4.0000 -1.0000 1.0000 -1.0000 4.2500 2.7500 1.0000 2.7500 3.5000>> b=4 6 7.25'b = 4.0000 6.0000 7.2500L,x=choesky3(A,b)L = 2.0000 0 0 -0.5000 2.0000 0 0.5000 1.5000 1.0000x = 1 1 1>>迭代法求方程

15、組的解Jacobi迭代法:function x,k=jacobi2(a,b,x0,ep,N)%本算法用Jacobi迭代求解ax=b,用分量形式n=length(b);k=0;if nargin<5 N=500;endif nargin<4 ep=1e-5;endif nargin<3 x0=zeros(n,1); y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x-x0,inf)>ep & k<N k=k+1; x0=x; for i=1:n y(i)=b(i); for j=1:n if j=i y(i)=y(i)-a

16、(i,j)*x0(j); end end if abs(a(i,i)<1e-10|k=N warning('a(i,i) is too small'); return end y(i)=y(i)/a(i,i); end x=y; enda=4 3 0;3 4 -1; 0 -1 4;b=24 30 -24';x,k=jacobi2(a,b)x = 3.0000 4.0000 -5.0000k =59Gauss-seidel迭代法:function x,k=gaussseide2(a,b,x0,ep,N)%本算法用Gauss-seidel迭代求解ax=b,用分量形式n

17、=length(b);k=0;if nargin<5 N=500;endif nargin<4 ep=1e-5;endif nargin<3 x0=zeros(n,1); y=zeros(n,1);endx=x0;x0=x+2*ep;while norm(x-x0,inf)>ep & k<N k=k+1; x0=x; y=x; for i=1:n z(i)=b(i); for j=1:n if j=i z(i)=z(i)-a(i,j)*x(j); end end if abs(a(i,i)<1e-10|k=N warning('a(i,i)

18、is too small'); return end z(i)=z(i)/a(i,i); x(i)=z(i); end endx,k=gaussseide2(a,b)x = 3.0000 4.0000 -5.0000k = 25最速下降法function x,k=zuisuxiajiang(A,b,x0,ep,N)%本算法用最速下降算法求解正定方程組Ax=b,n=length(b);if nargin<5 N=500;endif nargin<4 ep=1e-8;endif nargin<3 x0=ones(n,1); endx=x0;x0=x+2*ep;r=b-A*

19、x;d=r;k=0;while norm(x-x0,inf)>ep & k<N k=k+1; x0=x;lamda=(d'*d)/(d'*A*d);x=x0+lamda*d;r=b-A*x;d=r;endif k=N warning('已達(dá)最大迭代次數(shù)')end共軛梯度算法function x,k=gongertidufa(A,b,x0,ep,N)%本算法用共軛梯度算法求解正定方程組Ax=b,n=length(b);if nargin<5 N=500;endif nargin<4 ep=1e-8;endif nargin<3

20、 x0=ones(n,1); endx=x0;x0=x+2*ep;r=b-A*x;d=r;k=0;while norm(x-x0,inf)>ep & k<N k=k+1; x0=x;lamda=(r'*r)/(d'*A*d);r1=r;x=x0+lamda*d;r=b-A*x;beta=(r'*r)/(r1'*r1);d=r+beta*d;endif k=N warning('已達(dá)最大迭代次數(shù)')end 常微分方程數(shù)值解function x,y=Euler1(fun,xspan,y0,h)%本算法用歐拉格式計(jì)算微分方程y

21、9;=f(x,y)的解。 %fun為右端函數(shù),xspan為求解的自變量區(qū)間,yo為初值,h為步長。% 輸出向量x以及對(duì)應(yīng)的函數(shù)值向量y.x=xspan(1):h:xspan(2);y(1)=y0;n=length(x);for k=1:n-1 y(k+1)=y(k)+h*feval(fun,x(k),y(k);endx=x'y=y'fun=inline('y-2*x/y');x,y1=Euler1(fun,0,1,1,0.1)x = 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1y1 = 1 1.1 1.1918 1.2774 1

22、.3582 1.4351 1.509 1.5803 1.6498 1.7178 1.7848function x,y=Euler2(fun,xspan,y0,h)%本算法用改進(jìn)的歐拉格式計(jì)算微分方程y'=f(x,y)的解。 %fun為右端函數(shù),xspan為求解的自變量區(qū)間,yo為初值,h為步長。% 輸出向量x以及對(duì)應(yīng)的函數(shù)值向量y.x=xspan(1):h:xspan(2);y(1)=y0;n=length(x);for k=1:n-1 k1=feval(fun,x(k),y(k); y(k+1)=y(k)+h*k1; k2=feval(fun,x(k+1),y(k+1); y(k+1)=y(k)+h*(k1+k2)/2;endx=x'y=y'x,y2=Euler2(fun,0,1,1,0.1)x = 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1y2 = 1 1.0959 1.1841 1.2662 1.3434 1.4164 1.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論