今天你学习了吗. 2021-10-24 22:57 采纳率: 83.3%
浏览 27
已结题

各位,用matlab阻尼牛顿法求优化问题出现syms不能转化为logic,该怎么解决呀

img


syms x1 x2 n;
x=[x1 x2]';
f=3x1^2-4x1x2+x2^2+x1-3x2+8;
g=[6x1-4x2+1,-4x1+2x2-3]';
h=[6,-4;-4,2];
h0=inv(h);
eps=0.01;
k=0;
tol=1;
x0=[0,0]';
while tol>eps
g0=subs(g,x,x0);
m=eval(norm(g0));
if m<eps
minf=subs(f,{x1,x2},{x0(1,1),x0(2,1)});
x=x0
break
else
d0=-h0g0;
fn=subs(f,x,x0);
dfn=diff(fn);
n0=solve(dfn);
[r,s]=size(n0);
d2fn=diff(fn,2);
for i=1:s
I(i)=limit(d2fn,n,n0(i));
temp=double(I(i));
if temp>0
n=n0;
end;
end;
end;
x0=x0+n
d0;
tol=m;
k=k+1;
end

  • 写回答

2条回答 默认 最新

  • 技术专家团-Joel 2021-10-25 20:33
    关注

    帮你整理了一下,整个代码逻辑比较混乱

    syms x1 x2 n;
    x=[x1 x2]';
    f=3*x1^2-4*x1*x2+x2^2+x1-3*x2+8;
    g=[6*x1-4*x2+1,-4*x1+2*x2-3]';
    h=[6,-4;-4,2];
    h0=inv(h);
    eps1=0.01;
    k=0;
    tol=1;
    x0=[0,0]';
    while tol>eps1
        g0=subs(g,[x1,x2],[0,0]);
        m=eval(norm(g0));
        if m<eps1
            minf=subs(f,{x1,x2},{x0(1,1),x0(2,1)});
            x=x0
            break
        else
            d0=-h0*g0;
            fn=subs(f,[x1,x2],[0,0]);
            dfn=diff(fn);
            n0=solve(dfn);
            [r,s]=size(n0);
            d2fn=diff(fn,2);
            for i=1:s
                I(i)=limit(d2fn,n,n0(i));
                temp=double(I(i));
                if temp>0
                    n=n0;
                end;
            end;
        end;
        x0=x0+n*d0;
        tol=m;
        k=k+1;
    end
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月3日
  • 已采纳回答 4月25日
  • 创建了问题 10月24日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题