Differentiation with str2sym

9 visualizzazioni (ultimi 30 giorni)
Gabriele Ansaldo
Gabriele Ansaldo il 11 Mag 2020
Commentato: Walter Roberson il 15 Giu 2020
Hello,
I am trying to differentiate usinf str2sym but i seem to get some errors.
Here is the code:
clear all
y(1) = str2sym ('x(1)');
y(2) = str2sym ('x(2)');
f = y(1) + y(2);
diff(f, y(1))
This is the error i get
Error using sym/diff (line 70)
Second argument must be a variable or a nonnegative integer specifying the number of
differentiations.
Error in prove (line 8)
diff(f, y(1))

Risposte (1)

Walter Roberson
Walter Roberson il 12 Mag 2020
The error message is correct. You can only differentiate with respect to an entire variable, not with respect to a function call like x(1)
x = sym('x', [1 2]);
y(1) = str2sym ('x(1)');
y(2) = str2sym ('x(2)');
y = mapSymType(y, 'x', @(e) x(children(e)));
f = y(1) + y(2);
diff(f, y(1))
  2 Commenti
Gabriele Ansaldo
Gabriele Ansaldo il 12 Mag 2020
Thanks! However, its not exactly what I meant. If I run the code you wrote and for instance i set f = y(1)^2 +y(1) this happens:
clear all
x = sym('x', [1 2]);
y(1) = str2sym ('x(1)');
y(2) = str2sym ('x(2)');
y = mapSymType(y, 'x', @(e) x(children(e)));
f = y(1)^2+ y(2);
diff(f, y(1))
This is the result
ans =
2*x1
where i actually expected it to be
ans =
2*x(1)
with the brackets around the one.
Walter Roberson
Walter Roberson il 15 Giu 2020
x = sym('x', [1 2]);
y(1) = str2sym ('x(1)');
y(2) = str2sym ('x(2)');
Y = mapSymType(y, 'x', @(e) x(children(e)));
f = Y(1)^2 + Y(2);
df = diff(f, Y(1));
df = subs(df, x, y);

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by