Differentiating gives wrong result

12 ビュー (過去 30 日間)
Richárd Tóth
Richárd Tóth 2019 年 8 月 12 日
回答済み: Alex Mcaulley 2019 年 8 月 12 日
Hello
One of my functions returns this symbolic expression
(10000*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40))^2)/9801 + (10000*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40))^2)/9801 - 1
If I use the diff function(by x1) on it, it gives wrong result(ignores the variables or I don't know):
(20000*cos((9*pi)/40)*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40)))/9801 + (20000*sin((9*pi)/40)*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40)))/9801
Instead of:
(50706024009129175657667733171308125*x1)/24848487065673752728138376231780352
If I simply run this code, it works, so something is probably wrong with my returned expression from the function
syms x1 x2
f=(10000*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40))^2)/9801 + (10000*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40))^2)/9801 - 1;
diff(f,x1)
  2 件のコメント
Alex Mcaulley
Alex Mcaulley 2019 年 8 月 12 日
Can you show the complete code that generates the symbolic expression? As you say, it works just executing your code.
Richárd Tóth
Richárd Tóth 2019 年 8 月 12 日
Yes, it's not the same code, that code is much longer but gives the same result.
The function:
function expr = testfunc()
syms x1 x2 d1 d2 d3 center1 center2
expr = (cos(d3)*(center1 - x1) - sin(d3)*(center2 - x2))^2/d1^2 + (cos(d3)*(center2 - x2) + sin(d3)*(center1 - x1))^2/d2^2 - 1;
and the code:
syms x1 x2 lambda d1 d2 d3 center1 center2
d1=0.9900;d2=0.9900;d3=9*pi/40;
center1=0;center2=0;
ell = testfunc;
ell = subs(ell);
g = ell;
diff(g,x1)
Running this displays the wrong value I mentioned in previous post.
If you try this, it works:
syms x1 x2
f = (10000*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40))^2)/9801 + (10000*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40))^2)/9801 - 1;
diff(f,x1)

サインインしてコメントする。

採用された回答

Alex Mcaulley
Alex Mcaulley 2019 年 8 月 12 日
I don't know why the result is presented in different way depending on the case, but the result is allways the same:
%Case 1
syms x1 x2
f = (10000*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40))^2)/9801 + (10000*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40))^2)/9801 - 1;
sol = diff(f,x1)
sol =
(50706024009129175657667733171308125*x1)/24848487065673752728138376231780352
double(subs(sol,x1,1))
ans =
2.0406
%Case 2
syms x1 x2 lambda d1 d2 d3 center1 center2
d1=0.9900;d2=0.9900;d3=9*pi/40;
center1=0;center2=0;
ell = testfunc;
ell = subs(ell);
g = ell;
sol = diff(g,x1)
sol =
(20000*cos((9*pi)/40)*(x1*cos((9*pi)/40) - x2*sin((9*pi)/40)))/9801 + (20000*sin((9*pi)/40)*(x2*cos((9*pi)/40) + x1*sin((9*pi)/40)))/9801
sol = simplify(sol)
sol =
(20000*x1)/9801
double(subs(sol,x1,1))
ans =
2.0406

その他の回答 (0 件)

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by