Differentiation with str2sym

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))

回答(1 个)

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 个评论

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.
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);

请先登录,再进行评论。

类别

帮助中心File Exchange 中查找有关 Code Generation 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by