matlab一维外延差值,matlab怎么用外延法?

二分法

function [x0,k]=bisect1(fun1,a,b,ep)

if nargin<4

ep=1e-5;

end

fa=feval(fun1,a); fb=feval(fun1,b); if fa*fb>0

x0=[fa,fb];

k=0;

return;

end

k=1;

while abs(b-a)/2>ep

x=(a+b)/2;

fx=feval(fun1,x);

if fx*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)

if nargin<4

N=500;

end

if nargin<3

ep=1e-5;

end

x=x0;

x0=x+2*ep;

1/16页

k=0;

while abs(x-x0)>ep & k

x0=x;

x=feval(fun1,x0);

k=k+1;

end

x0=x;

if k==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)

if nargin<4

N=500;

end

if nargin<3

ep=1e-5;

end

x=x0;

x0=x+2*ep;

k=0;

while abs(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;

if k==N

2/16页

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)

if nargin<5

N=500;

end

if nargin<4

ep=1e-5;

end

x=x0;

x0=x+2*ep;

k=0;

while abs(x-x0)>ep & k

x0=x;

x=x0-feval(fname,x0)/feval(dfname,x0);

k=k+1;

end

x0=x;

if k==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

3/16页

非线性方程求根的Matlab函数调用举例:

1.求多项式的根: 求f(x)=x^3-x-1=0的根:

>> roots([1 0 -1 -1])

ans =

1.3247

-0.6624 + 0.5623i

-0.6624 - 0.5623i

2.求一般函数的根

>> fun=inline('x*sin(x^2-x-1)','x')

fun =

Inline function:

fun(x) = x*sin(x^2-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.6180

[x,f,h]=fsolve(fun,-1.6) x =

-1.5956

f =

4/16页

1.4909e-009

h =

1

(h>0表示收敛,h<0表示发散,h=0表示已达到设定的计算函数值的最大次数)

第三章:线性方程组的数值解法

1. 高斯消元法

function [A,x]=gauss3(A,b)

%本算法用顺序高斯消元法求解线性方程组

n=length(b);

A=[A,b];

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

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((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

>> [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.0000

x =

-13

8

2

列选主元的高斯消元法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值