2012-10-13 36 views
1

我想使用创建的符号向量来区分以下符号表达式,但我不断收到错误。也就是说,我想要df/dx1,df/dx2和df/dx3。这是我曾尝试过的:使用符号向量的符号表达式差异化

>> x = sym('x', [3 1]) 

x = 

x1 
x2 
x3 

>> symbolic = 0.5*transpose(x)*eye(1)*x + [1 1 1]*x 

symbolic = 

x1^2/2 + x1 + x2^2/2 + x2 + x3^2/2 + x3 

>> diff(symbolic, x) 
Error using mupadmex 
Error in MuPAD command: Invalid argument. [contains] 

    Evaluating: (Dom::Matrix(Dom::ExpressionField()))::_mult1 

Error in sym/diff (line 44) 
    R = mupadmex('symobj::diff', S.s, x.s, int2str(n)); 

>> diff(symbolic, x.x1) 
Error using sym/subsref 
Too many output arguments. 

任何援助将不胜感激。谢谢!

回答

2

您可以尝试这两个选项之一:

% option 1 
x = sym('x', [3 1]); 
f = 0.5*transpose(x)*eye(1)*x + [1 1 1]*x; 

for i=1:3 
    Df(1,i) = diff(f, x(i)); 
end 

% I do not like this option because I do not know 
% how to evaluate the expressions with numeric values 
x(1) = 1; 
eval(Df) 

我更喜欢“选项2”,因为它更容易计算表达式。

% option 2 
syms x1 x2 x3 real; % 'real' fixes x1 x2 x3 as real numbers (not complex ones) 
x = [x1 x2 x3]'; % ' 
f = 0.5*transpose(x)*eye(1)*x + [1 1 1]*x; 

for i=1:3 
    eval(['Df(1,i) = diff(f,x',num2str(i),');']); 
end 

% To eval at a certain value 
x1 = 1; 
x2 = 2; 
x3 = 3; 
eval(Df) 

我认为EVAL只有我上面所用的两种功能:

  1. 要EVAL符号表达式的符号变量的具体值,就像当我写的eval(DF)。
  2. 您可以使用eval来评估写成字符串的matlab命令,就好像您正在将它写为普通代码一样。试试看看我的意思:

    a = 1; %设定值为1

    eval('a = 2'); %的变化值为2

    eval(['a =',num2str(5)]); %的设定值为5;

希望这有助于

+0

谢谢!另外,我从来没有见过'eval'函数,真棒! – john

+0

我喜欢eval函数,我有一个基于它的简单配置脚本来制作情节。评估是非常有用的。乐意效劳 :)。 – jespestana