gany 发表于 2009-4-5 21:02

符号表达式怎么变成数值表达式?

先编写方程
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=;b=;lb=zeros(2,1);x0=;=fmincon(@ff4,x0,A,b,[],[],lb)


可以得到结果:
x =
    0.6667
    1.3333

fval =
   -8.2222

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

然后在matlab中调用:
A=;b=;lb=zeros(2,1);x0=;=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
   =...


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

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

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

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



[ 本帖最后由 gany 于 2009-4-5 21:05 编辑 ]

qingqing5638 发表于 2009-4-6 21:16

回复 楼主 gany 的帖子

(我也不是太懂啊)我觉得先给表达式中的那个符号赋值,让他在一定范围内,后面表达成带参数的表达式之类,也许就可以了吧,一切都不用符号表达
页: [1]
查看完整版本: 符号表达式怎么变成数值表达式?