次のように定義されたルジャンドル多項式をプロットしようとしています。
P0(x) = 1
P1(x) = x
Pn+1(x) = ((2n+1)/(n+1)) * x * Pn(x) - (n / (n+1)) * Pn-1(x)
私はそれを簡単でゆっくりとした方法で行い、直接的でもう少し複雑な方法で行いました。どちらも同様の数値になりますが、まったく同じではありません。振幅が異なります。以下は、敬意を表したコードです (定義の添字 n+1 を n に調整していることに注意してください)。
xi = linspace(-1,1,500);
n = 10;
方法 1:
Pn = cell(n+1,1);
Pn{1} = @ (x) 1;
Pn{2} = @ (x) x;
for i=3:(n+1)
Pn{i} = @ (x) ((2*(i-1)+1)/(i)).*x.*Pn{i-1}(x) - ((i-1)/i) .* Pn{i-2}(x);
end
plot(xi,Pn{1}(xi),'--r',xi,Pn{2}(xi),'--g',xi,Pn{3}(xi),'--b',...
xi,Pn{4}(xi),'--m',xi,Pn{5}(xi),'--c',xi,Pn{6}(xi),'--k');
legend('P0','P1','P2','P3','P4','P5');
図1:
方法 2:
%Notice here that the results of Pj get stored into YI(j+1)
YI = zeros(length(xi),6);
YI(:,1) = ones(size(xi))';
YI(:,2) = xi';
for i=3:6;
Pn1 = 1;
Pn2 = xi;
for j=2:(i-1)
Pn3 = ((2*(j-1)+1)/j) .* xi .* Pn2 - ((j-1) / j) .* Pn1;
Pn1 = Pn2;
Pn2 = Pn3;
end
YI(:,i) = Pn3';
end
figure('Name','direct method');
plot(xi,YI(:,1)','--r',xi, YI(:,2)', '--g', xi, YI(:,3)', '--b', ...
xi,YI(:,4)','--m', xi,YI(:,5)', '--c', xi,YI(:,6)', '--k');
図 2:
控えめに言っても、これは奇妙です。方法 1 では、P11 までのすべての多項式を計算していますが、最初の 6 つだけを使用してプロットします。何が起こっているのか誰か知っていますか?