matlab非线性数值方程的求解


对于二分法的matlab代码:

myfunction.m

function y=myfunction(x)
y=x^6-x-1;
end

dichotomyRoot.m

function y=dichotomyRoot(x1,x2,e)
x=(x1+x2)/2;  % x是中间数
f3=myfunction(x);
f1=myfunction(x1);

if f1*f3<0
    %k=k+1;
    m=x-x1; % m是距离
    fprintf('%.4f\t%.4f\t%.4f\t%.4f\n',x1,x2,x,myfunction(x));
    if m>e
        x2=x;
        y=dichotomyRoot(x1,x2,e);                   
    else
        y=x;                             
    end
else
    %k=k+1;
    m=x2-x;
    fprintf('%.4f\t%.4f\t%.4f\t%.4f\n',x1,x2,x,myfunction(x));
    if m>e
        x1=x;
        y=dichotomyRoot(x1,x2,e);                    
    else
        y=x;
                            % fprintf('%.4f\t%.4f\t%.4f\t%.4f\n',x1,x2,x,myfunction(x));
    end
end
end

dichotomy.m

function dichotomy()
x1=input('输入求根区间的下限,x1=');
x2=input('输入求根区间的上限,x2=');
e=input('输入求根的精度,e=');
fprintf('ak\t\tbk\t\txk\t\tf(x)\n');
f1=myfunction(x1);
f2=myfunction(x2);
if f1*f2>0
       disp('根不在输入的区间里');
else
    y=dichotomyRoot(x1,x2,e);
    %disp('root=');
    fprintf('%.6f',y);
end
end

程序结果:



二、对于迭代法:

diedai.m

function [k, piancha xk]=deidai1(x0,k)
%输入的量 ,x0是初始值,k是迭代的次数
x(1)=x0;
for i=1:k
    x(i+1)=fun1(x(i))%程序调用的是fun1.m为函数y=f'(x)
    piancha=abs(x(i+1)-x(i));
    fprintf('迭代第%d次\n',i);
    i=i+1;
    xk=x(i);
    [i-1 piancha  xk]
end;
if (piancha>0.0005)&(k>3)
    disp('请用户注意:此迭代序列发散,请重新输入新的迭代公式');
    return ;
end
if (piancha<0.0005)&(k>3)
    disp('此程序迭代收敛,且收敛速度越来越快!')
    return ;
end
%p=[(i-1) piancha xk]';
end

fun1.m

function y1=fun1(x)
y1=sin(x)+0.5;
end

程序结果:


牛顿法:

Newton_1.m

function Newton(fyuan,fdao,x,e)
% 原函数  一阶导数  初始值  精确范围
k=1;
y=x-feval(fyuan,x)/feval(fdao,x);
while (k<=100)&&(abs(x-y)>e)
    x =y;
    fprintf('第%d次迭代结果为:%.6f\n',k,y);
    y=x-feval(fyuan,x)/feval(fdao,x);
    k=k+1;
end

Newtonans.m

fun = @(x) x.^6-x-1;
dfun = @(x) 6*x.^5-1;
fprintf('牛顿法实验结果(正常精确度):\n');
Newton(fun,dfun,1,0.0005)
fprintf('缩小精确度后:\n')
Newton(fun,dfun,1,0.0000000001)

程序结果如图:


实验总结:

通过实验结果表明:对二分法和牛顿法而言,相同的非线性函数下求根,用二分法迭代的次数k更大,结果更为精确;牛顿法迭代的次数少,但是不精确。如果改变牛顿法的精确范围变得小一点,则牛顿法结果变得精确,迭代次数还是小于二分法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值