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.

どんな援助でも大歓迎です。ありがとう!

4

1 に答える 1

2

次の 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 には、上で使用した 2 つの関数しかないと思います。

  1. eval(Df) を書いたときのように、シンボリック変数の特定の値に対してシンボリック式を評価します。
  2. eval を使用して、文字列として記述された matlab コマンドを、通常のコードとして記述しているかのように評価できます。これを試して、私が何を意味するかを確認してください。

    = 1; % a の値を 1 に設定

    eval('a = 2'); % a の値を 2 に変更

    eval(['a = ',num2str(5)]); % a の値を 5 に設定します。

お役に立てれば、

于 2012-10-13T21:09:07.143 に答える