zl程序教程

您现在的位置是:首页 >  后端

当前栏目

MATLAB 二分法、牛顿迭代法、弦截法

MATLAB 二分法 牛顿 迭代法
2023-09-27 14:27:14 时间

在这里插入图片描述

二分法

binarySearch.m文件:

function binarySearch(f,bot,top)
err = 1e-6;
while abs(top-bot)>err
    x=(bot+top)/2;
    fx=f(x);
    if fx==0
        bot=x; top=x;
    elseif f(bot)*fx<0
        top=x;
    else
        bot=x;
    end
    fprintf('·½³ÌµÄ¸ùx=%.6f;f(x)=%.6f\n',x,fx); % 复制到word上出现乱码了,不管了
end

控制台输入:

>> f=@(x)x*cos(x)+2;
>> bot = -4;
>> top = -2;
>> binarySearch(f,bot,top)

Newton法:

newton.m文件:

function [x,b,c]= newton( f,df,x0,x1,N )
x=ones(N,1);
e=ones(N,1);
c=ones(N,1);
b=ones(N,1);
for n=1:N
fvalue=subs(f,x1);
dfvalue=subs(df,x1);
x(n)=vpa(x1-fvalue/dfvalue);
e(n)=vpa(abs(x(n)-x0));
if n>1
c(n)=vpa(e(n)/e(n-1));
b(n)=vpa(e(n)/e(n-1)^2);
end
x1=x(n);
end
end

控制台输入:

>> f=@(x)x^3+2*x^2+10*x-100;
df=@(x)3*x^2+4*x+10;
n=10;
x0=2; % 初值
x1=0; % 初值
newton( f,df,x0,x1,n );

弦截法

gfun.m文件:

function y=gfun(a,n,x)
y=0.0;
for i=1:(n+1)
    y=y+a(i).* (x.^(n+1-i));
end
end

xjf.m文件:

function y=xjf(a,n,x1,x2,eps)
x(1)=x1;x(2)=x2;
b=1;i=2;
while(abs(b)>eps*x(i))
x(i+1)=x(i)-gfun(a,n,x(i))*
(x(i)-x(i-1))/(gfun(a,n,x(i))-
gfun(a,n,x(i-1)));
b=x(i+1)-x(i);
i=i+1;
end
y=x'; 

控制台输入:

>>a=[1;2;10;-100];
n=3;
eps=1e-6; % 精度
x0=2;    
x1=0;
y=xjf(a,n,x0,x1,eps);