数值计算方法matlab程序Word下载.doc
《数值计算方法matlab程序Word下载.doc》由会员分享,可在线阅读,更多相关《数值计算方法matlab程序Word下载.doc(16页珍藏版)》请在冰豆网上搜索。
>
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)
N=500;
3
x=x0;
x0=x+2*ep;
whileabs(x-x0)>
ep&
k<
N
x0=x;
x=feval(fun1,x0);
ifk==N
warning('
已达最大迭代次数'
)
(x+1)^(1/3)'
[x0,k]=iterate1(fun1,1.5)
x^3-1'
Inf
9
Steffesen加速迭代(简单迭代法的加速)
function[x0,k]=steffesen1(fun1,x0,ep,N)
y=feval(fun1,x0);
z=feval(fun1,y);
x=x0-(y-x0)^2/(z-2*y+x0);
[x0,k]=steffesen1(fun1,1.5)
6
Newton迭代
function[x0,k]=Newton7(fname,dfname,x0,ep,N)
5
x=x0-feval(fname,x0)/feval(dfname,x0);
fname=inline('
x-cos(x)'
dfname=inline('
1+sin(x)'
[x0,k]=Newton7(fname,dfname,pi/4,1e-8)
0.7391
k=4
非线性方程求根的Matlab函数调用举例:
1.求多项式的根:
求f(x)=x^3-x-1=0的根:
roots([10-1-1])
ans=
-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])
-0.6180
[x,f,h]=fsolve(fun,-1.6)
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+1))-A((k+1):
n,k)/A(k,k)*A(k,(k+1):
(n+1));
n,k)=zeros(n-k,1);
A;
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
-13
8
2
列选主元的高斯消元法:
function[A,x]=gauss5(A,b)
%本算法用列选主元的高斯消元法求解线性方程组
%选主元
[ap,p]=max(abs(A(k:
n,k)));
p=p+k-1;
ifp>
k
t=A(k,:
A(k,:
)=A(p,:
A(p,:
)=t;
%消元
A((k+1):
A((k+1):
end
%回代
x=zeros(n,1);
n)*x((sk+1:
;
[A,x]=gauss5(A,b)
4.00003.000030.000032.0000
02.7500-20.5000-19.0000
000.18180.3636
三角分解法:
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,n)/U(k,k);
End
y=zeros(n,1);
x=y;
y
(1)=b
(1);
fori=2:
y(i)=b(i)-L(i,1:
i-1)*y(1:
i-1);
x(n)=y(n)/U(n,n);
fori=n-1:
x(i)=(y(i)-U(i,i+1:
n)*x(i+1:
n))/U(i,i);
A=[123;
252;
315];
b=[141820]'
[L,U,x]=doolittle1(A,b)
L=
100
210
3-81
U=
123
01-4
00-36
2.8333
1.3333
2.8333
平方根法:
function[L,x]=choesky3(A,b)
L=zeros(n);
L(:
1)=A(:
1)/sqrt(A(1,1));
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:
L(i,k)=(A(i,k)-L(i,1:
)/L(k,k);
y=zeros(n,1);
y
(1)=b
(1)/L(1,1);
y(i)=(b(i)-L(i,1:
i-1))/L(i,i);
x(n)=y(n)/L(n,n);
x(i)=(y(i)-L(i+1:
n,i)'
*x(i+1:
n))/L(i,i);
A=[4-11;
-14.252.75;
12.753.5]
4.0000-1.00001.0000
-1.00004.25002.7500
1.00002.75003.5000
b=[467.25]'
4.0000
6.0000
7.2500
[L,x]=choesky3(A,b)
2.000000
-0.50002.00000
0.50001.50001.0000