matlab使用法Word格式文档下载.docx

上传人:b****5 文档编号:20792227 上传时间:2023-01-25 格式:DOCX 页数:22 大小:37.47KB
下载 相关 举报
matlab使用法Word格式文档下载.docx_第1页
第1页 / 共22页
matlab使用法Word格式文档下载.docx_第2页
第2页 / 共22页
matlab使用法Word格式文档下载.docx_第3页
第3页 / 共22页
matlab使用法Word格式文档下载.docx_第4页
第4页 / 共22页
matlab使用法Word格式文档下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

matlab使用法Word格式文档下载.docx

《matlab使用法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《matlab使用法Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。

matlab使用法Word格式文档下载.docx

x=feval(fun1,x0);

x0=x;

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)

3

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=

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])

-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);

%上面为回代过程

A=[234;

352;

4330];

b=[6,5,32]'

b=

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;

%消元

%回代

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

迭代法求方程组的解

Jacobi迭代法:

function[x,k]=jacobi2(a,b,x0,ep,N)

%本算法用Jacobi迭代求解ax=b,用分量形式

x0=zeros(n,1);

whilenorm(x-x0,inf)>

N

fori=1:

y(i)=b(i);

forj=1:

ifj~=i

y(i)=y(i)-a(i,j)*x0(j);

ifabs(a(i,i))<

1e-10|k==N

a(i,i)istoosmall'

return

y(i)=y(i)/a(i,i);

x=y;

a=[430;

34-1;

0-14];

b=[2430-24]'

[x,k]=jacobi2(a,b)

3.0000

-5.0000

59

Gauss-seidel迭代法:

function[x,k]=gaussseide2(a,b,x0,ep,N)

%本算法用Gauss-seidel迭代求解ax=b,用分量形式

y=x;

z(i)=b(i);

z(i)=z(i)-a(i,j)*x(j);

z(i)=z(i)/a(i,i);

x(i)=z(i);

[x,k]=gaussseide2(a,b)

25

常微分方程数值解

function[x,y]=Euler1(fun,xspan,y0,h)

%本算法用欧拉格式计算微分方程y'

=f(x,y)的解。

%fun为右端函数,xspan为求解的自变量区间,yo为初值,h为步长。

%输出向量x以及对应的函数值向量y.

x=xspan

(1):

h:

xspan

(2);

y

(1)=y0;

n=length(x);

y(k+1)=y(k)+h*feval(fun,x(k),y(k));

x=x'

y=y'

fun=inline('

y-2*x/y'

[x,y1]=Euler1(fun,[0,1],1,0.1)

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

y1=

1.1

1.1918

1.2774

1.3582

1.4351

1.509

1.5803

1.6498

1.7178

1.7848

function[x,y]=Euler2(fun,xspan,y0,h)

%本算法用改进的欧拉格式计算微分方程y'

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;

[x,y2]=Euler2(fun,[0,1],1,0.1)

y2=

1.0959

1.1841

1.2662

1.3434

1.4164

1.486

1.5525

1.6165

1.6782

1.7379

y3=sqrt(1+2*x)

y3=

1.0954

1.1832

1.2649

1.3416

1.4142

1.4832

1.5492

1.6125

1.6733

1.7321

plot(x,y1,'

+'

x,y2,'

o'

x,y3,'

r'

将矩阵A按对角元绝对值由小到大顺序进行行列调动。

a=randn(4);

a=

-0.4326-1.14650.3273-0.5883

-1.66561.19090.17462.1832

0.12531.1892-0.1867-0.1364

0.2877-0.03760.72580.1139

[u,v]=sort(-abs(diag(a)))

u=

-1.1909

-0.4326

-0.1867

-0.1139

v=

4

A=a(v,v)

1.1909-1.66560.17462.1832

-1.1465-0.43260.3273-0.5883

1.18920.1253-0.1867-0.1364

-0.03760.28770.72580.1139

求二次多项式的根,避免上下溢,避免两个数相加或者相减接近0

function[xflag]=root2qe(a,b,c)

ifnargin==1

c=a(3);

b=a

(2);

a=a

(1);

ifa~=0

M=max(abs([a,b,c]));

a=a/M;

b=b/M;

c=c/M;

s=sign(b);

ifs==0

s=1;

x1=(-b-s*sqrt(b^2-4*a*c))/(2*a);

x2=c/(a*x1);

x=[x1x2];

flag='

twosolutions'

elseifb~=0

x=-c/b;

onesolution'

elseifc~=0

x=[];

nosolution'

else

x=[1];

allxaresolutions'

[xflag]=root2qe(6,10,-4)

-2.00000.3333

flag=

twosolutions

[xflag]=root2qe(6e+154,10e+154,-4e+154)

[xflag]=root2qe(0,1,1)

-1

onesolution

[xflag]=root2qe(1,-1e+5,1)

1.0e+004*

10.00000.0000

计算如下的递推数列:

x1=1/3;

x2=1/12;

x(k+1)=2.25*x(k)-0.5*x(k-1);

可以证明,xk=4^(1-k)/3;

是一个单调递减数列,但是计算数据如下:

functionex2

x

(1)=1/3;

x

(2)=1/12;

fork=3:

60

x(k)=2.25*x(k-1)-0.5*x(k-2);

plot(x(1:

60))

想想是什么原因导致这种现象?

找出函数y=arctan(x)在区间【1,6】的11个等分点,做10次插值多项式。

打印出Newton形式的系数,在同一个图上作出在区间【0,8】的33个等分点上插值多项式的值与y=arctan(x)的值,由此得出什么结论?

functionex3

n=11;

x=linspace(1,6,n);

h=(6-1)/(n-1);

y=atan(x)'

forj=2:

y(1:

n+1-j,j)=diff(y(1:

n+2-j,j-1))/((j-1)*h);

y=y(1,:

formatlonge

fprintf('

\nthecoefficientsofNewtoninterpolationis:

\n\n'

%12.9f'

y);

pz=[];

v=linspace(0,8,33);

fort=v,

z=y(n);

forj=n-1:

z=z*(t-x(j))+y(j);

pz=[pzz];

plot(v,pz,'

g*-'

v,atan(v),'

b+:

'

\nxi,p(xi),atan(xi),error\n'

forj=1:

length(v)

fprintf('

%12.6f%12.6f%12.6f%12.6f'

...

v(j),pz(j),atan(v(j)),abs(pz(j)-atan(v(j))));

(注:

可编辑下载,若有不当之处,请指正,谢谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1