Second order ODE (mupad)

What's wrong??? How can i run this basic program?
% Solve 2nd order ODE
clc;clear all;
syms y(x) k
eq='(1-x^2)*D2y - 2*x*Dy +(1+k)*k*y=0';
ic='y(0)=0, Dy(0)=1'; % Initial conditions
y=dsolve(eq, ic,'x')
k=2;
y=subs(y)
Messages :(R2014a)
Error using mupadmex
Error in MuPAD command: The first argument must not be negative. [orthpoly::legendre]
Error in sym/subs>mupadsubs (line 139)
G = mupadmex('symobj::fullsubs',F.s,X2,Y2);
Error in sym/subs (line 124)
G = mupadsubs(F,X,Y);
Error in dsolve_legendre1 (line 10)
y=subs(y)

 采纳的回答

syms y(x)
k=2;
eq=(1-x^2)*diff(y,x,2)-2*x*diff(y,x)+(1+k)*k*y==0;
Dy=diff(y,x);
ic=[y(0)==0,Dy(0)==1];
y=dsolve(eq,ic,x)
I did this for command line, not MuPaD.

更多回答(1 个)

In R2014a, if you dsolve() with symbolic k then the solution that you get for y is
-orthpoly::legendre(- ((2*k + 1)^2)^(1/2)/2 - 1/2, x)*int(1/((y^2 - 1)*orthpoly::legendre(- ((2*k + 1)^2)^(1/2)/2 - 1/2, y)^2), y, 0, x)*orthpoly::legendre(- ((2*k + 1)^2)^(1/2)/2 - 1/2, 0)
Here, orthpoly::legendre is a reference to an MuPAD routine to calculate legendre polynomials.
Unfortunately when you subs in any real-valued k in that expression, the first argument to orthpoly::legendre becomes negative, and MuPAD does not like to compute that, leading to the error you see.
cvklpstunc showed computing with a specific numeric k: that works where using symbolic k and substituting in later does not.
This is a limitation in the R2014a symbolic engine. It is overcome in some later version.

Community Treasure Hunt

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

Start Hunting!

Translated by