24小时热门版块排行榜    

CyRhmU.jpeg
南方科技大学公共卫生及应急管理学院2026级博士研究生招生报考通知(长期有效)
查看: 2241  |  回复: 0

mjluanwu

新虫 (初入文坛)

[交流] MATLAB牛顿法解非线性方程

function root=NewtonRootReal(f,a,b,eps)
f1=real(subs(sym(f),findsym(sym(f)),a));
f2=real(subs(sym(f),findsym(sym(f)),b));
if(f1==0)
    root=f1;
end
if(f2==0)
    root=f2;
end
if(f1*f2>0)
    disp('>0')
    return;
else
    tol=1;
    fun=diff(sym(f));
    fa=real(subs(sym(f),findsym(sym(f)),a));
    fb=real(subs(sym(f),findsym(sym(f)),b));
    dfa=real(subs(sym(fun),findsym(sym(fun)),a));
    dfb=real(subs(sym(fun),findsym(sym(fun)),b));
    if(dfa>dfb)
        root=a-fa/dfa;
    else
        root=b-fb/dfb;
    end
    while(tol>eps)
        r1=root;
        fx=real(subs(sym(f),findsym(sym(f)),r1));
        dfx=real(subs(sym(fun),findsym(sym(fun)),r1));
        root=r1-fx/dfx;
        tol=abs(root-r1);
    end
end

函数f既有实数部分,又有虚数部分,我把牛顿法修改了只求函数f实数部分为零的解。基于原始的NewtonRoot法,增加了real以求得实数部分。其他未曾修改。求大神看一下可以这样修改么?应该没有问题吧
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mjluanwu 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见