声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1532|回复: 0

[混合编程] 求助:matlab中subs函数的问题!

[复制链接]
发表于 2011-11-29 00:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我想编写一个牛顿法求无约束问题的最小值问题。在以下程序中,虽然最开始时我取x1、x2为syms型变量,但是每次迭代时X1、X2都是确定的数值,那么a、b、c、d、e、f应该都是确定的数值,而不再是syms型数据了,但为什么运行后总是提示出现“>”的行有错误,错误是"Function 'gt' is not defined for values of class 'sym'"。要如何修改才能得到正确答案呢?

clc;
clear;
syms x1 x2;
x=[x1 x2];
t=0;
X0=[0;1];
y=(x1-1)^2+x2^2;
e=0.001;
for n=1:200
    a=subs(diff(y,x1),x,X0);%y对x1求一阶导数
    b=subs(diff(y,x2),x,X0);%y对x2求一阶导数
    c=subs(diff(y,x1,2),x,X0);%y对x1求二阶导数
    d=subs(diff(y,x2,2),x,X0);%y对x2求二阶导数
    e=subs(diff(diff(y,x1),x2),x,X0);%求y对x1、x2的偏导数
    f=subs(diff(diff(y,x2),x1),x,X0);%求y对x1、x2的偏导数
    yj=[a;b];%梯度
    h=inv([c e;f d]);%求逆
    X1=X0-h*yj;%更新X的值
    X2=X1-X0;
    if X2(1)>X2(2)
        minX2=X2(2);
    else
        minX2=X2(1);
    end
    if minX2>e
        X0=X1;
        t=t+1;
    else
        break;
    end
end
X0
y=subs(y,x,X0)   
t


谢谢大家的帮助
回复
分享到:

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-6-2 11:48 , Processed in 0.055747 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表