How can we compute the derivative of polynomials?
Info
This question is closed. Reopen it to edit or answer.
Show older comments
How can we compute the derivative of the (m-1) polynomials at a point?
I got the following error:
The following error occurred converting from sym to double:
Unable to convert expression into double array.
Error in untitled (line 42)
p(1)=((x-alpha(1))*p0)/beta(1);
syms x
p0=1;
x0=2;
p(1)=((x-.2)*p0)/.3;
p(2)=((x-.5)*p(1)-.3*p0)/1.3;
dp(1)=eval((subs(diff(p(1),x,1),x,x0)) )
dp(2)=eval((subs(diff(p(2),x,1),x,x0)) )
for j=3:m-1
p(j)=((x-.2)*p(j-1) - .3*p(j-2))/1.3;
dp(j)=eval((subs(diff(p(j),x,1),x,x0)));
end
11 Comments
James Tursa
on 1 Oct 2020
Edited: James Tursa
on 1 Oct 2020
What is m? When I define m, I don't get any errors when I run your code in R2020a. What version are you running?
Omar B.
on 1 Oct 2020
James Tursa
on 1 Oct 2020
I don't get any errors in R2017a either.
Omar B.
on 2 Oct 2020
Walter Roberson
on 2 Oct 2020
If I set m=6 then I do not get any error in R2020a.
Walter Roberson
on 2 Oct 2020
You should never eval() a symbolic expression.
eval() of a symbolic expression is equivalent to eval(char()) of the expression. However, char() of a symbolic expression is not generally a MATLAB expression.
>> char(repmat(sym('x'),[2 2 2]))
ans =
'array(1..2, 1..2, 1..2, (1, 1, 1) = x, (1, 1, 2) = x, (1, 2, 1) = x, (1, 2, 2) = x, (2, 1, 1) = x, (2, 1, 2) = x, (2, 2, 1) = x, (2, 2, 2) = x)'
char() of a symbolic expression is also not generally a MuPAD expression.
In context, the subs() are returning symbolic rational numbers, and those only need to be double() not eval() .
Omar B.
on 2 Oct 2020
James Tursa
on 2 Oct 2020
Edited: James Tursa
on 2 Oct 2020
double( )
That being said, I don't know what is going on in your actual case since your example code doesn't produce an error at my end.
Omar B.
on 2 Oct 2020
James Tursa
on 2 Oct 2020
Both eval( ) and double( ) work for me with your example code. What is your actual code?
Omar B.
on 2 Oct 2020
Answers (1)
David Hill
on 1 Oct 2020
Why not just use polynomial representation
p = [3 0 -2 0 1 5];
pd=polyder(p);
x=1:10;
val=polyval(pd,x);
This question is closed.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!