声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1774|回复: 1

[综合讨论] 符号表达式怎么变成数值表达式?

[复制链接]
发表于 2009-4-5 21:02 | 显示全部楼层 |阅读模式

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

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

x
先编写方程
function f=ff4(x)
f =(1/2*x(1)-1/2*x(2))*x(1)+(-1/2*x(1)+x(2))*x(2)-2*x(1)-6*x(2)

然后在matlab里

A=[1 1;-1 2;2 1];b=[2;2;3];lb=zeros(2,1);x0=[0;0];[x,fval]=fmincon(@ff4,x0,A,b,[],[],lb)


可以得到结果:
x =
    0.6667
    1.3333

fval =
   -8.2222

但是我现在需要把.m文件中的方程式改为符号表达式后计算
function f=ff6(x)
sym x1;
sym x2;
H=[1 -1;-1 2];f0=[-2 -6]';x=sym('[x(1);x(2)]');
f=0.5*transpose(x)*H*x+f0'*x

然后在matlab中调用:
A=[1 1;-1 2;2 1];b=[2;2;3];lb=zeros(2,1);x0=[0;0];[x,fval]=fmincon(@ff6,x0,A,b,[],[],lb)



就会出现:
??? Undefined function or method 'ge' for input arguments of type 'sym'.
Error in ==> nlconst at 749
         elseif f >=0
Error in ==> fmincon at 562
   [X,FVAL,lambda,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...


我想是因为符号表达式不能变成数值表达式计算出数值结果造成的。其实,第一个.m文件和第二个.m文件生成的方程式是一样的,因为第一个表达式是由第二个符号表达式计算出来的结果,我直接贴到第一个.m文件里的。

我搜索到 numeric(p) 将符号表达式p转化为数值表达式;eval(p) 将符号表达式p转化为数值表达式;可是我在第二个里加上f=eval(f)后,依然出现同样问题。

现在我想问一下,符号表达式可不可以转换成第一个.m文件中的方程式,也就是可以直接计算出数值结果。如果可以,该在第二个.m文件中怎么改?

这个问题是我把方程改简单了以后的,现实里我的符号表达式比这个的未知数要多很多,人工计算出数值表达式很麻烦那,所以直接用符号矩阵计算出符号表达式的。所以,我现在急需解决以上这个问题。希望达人指教啊




[ 本帖最后由 gany 于 2009-4-5 21:05 编辑 ]
回复
分享到:

使用道具 举报

发表于 2009-4-6 21:16 | 显示全部楼层

回复 楼主 gany 的帖子

(我也不是太懂啊)我觉得先给表达式中的那个符号赋值,让他在一定范围内,后面表达成带参数的表达式之类,也许就可以了吧,一切都不用符号表达
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-6 07:30 , Processed in 0.057373 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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