More Recursion Help Needed

Hi again everyone,
I became stuck on another section of my lab saying this:
Error in ==> pnm at 6
if ((n ~= 0 && m ~= 0) || (n~=0 && m==0) || (n==0 && m~=0))
??? Output argument "values" (and maybe others) not assigned
during call to "E:\Matlab\ENGO423-Lab2\pnm.m>pnm".
Error in ==> pnm at 19
pnmCurrentn =
((2*n-1)/(n-m)).*cos(theta).*pnm(n-1,m,theta,norm)-((n+m-1)/(n-m))*pnm(n-2,m,theta,norm);
Error in ==> main at 24
set2non = pnm(3,1,theta,0);
Here are my codes:
Main:
close all
clear all
clc
theta = [-pi:pi/100:pi]';
plotValues = cos(theta);
set1 = pnm(1,1,theta,1);
set2 = pnm(3,1,theta,1);
set3 = pnm(5,1,theta,1);
set4 = pnm(7,1,theta,1);
hold on
plot(plotValues,set1,'g');
plot(plotValues,set2,'r');
plot(plotValues,set3,'m');
plot(plotValues,set4,'b');
axis([-1 1 -4 4]);
legend('n=1; m=1','n=3; m=1', 'n=5; m=1', 'n=7; m=1')
set1non = pnm(1,1,theta,0);
set2non = pnm(3,1,theta,0);
%set3non = pnm(5,1,theta,0);
%set4non = pnm(7,1,theta,0);
pnm:
function [ values ] = pnm( n,m,theta,norm )
%What to do...
if ((n ~= 0 && m ~= 0) || (n~=0 && m==0) || (n==0 && m~=0))
if (norm == 0 )
if (m >= 2)
pnmCurrentn = 2*(m-1)*((cos(theta)/sqrt(1-cos(theta)^2)))*pnm(n,m-1,theta,norm)-(n-m+2)*(n+m-1)*pnm(n,m-2,theta,norm);
values = pnmCurrentn;
elseif (norm == 0 && m == 0)
pn = -((n-1)/n)*pnm(n-2,0,theta,norm)+((2*n-1)/n)*(cos(theta))*pnm(n-1,0,theta,norm);
values = pn;
elseif ( norm == 0 && n >= m+2)
pnmCurrentn = ((2*n-1)/(n-m)).*cos(theta).*pnm(n-1,m,theta,norm)-((n+m-1)/(n-m))*pnm(n-2,m,theta,norm);
values = pnmCurrentn;
elseif (norm == 0 && n==1 && m==1)
values = sin(theta);
end
elseif ( norm == 1)
if ( n == 1 && m == 1)
w11 = sqrt(3);
values = w11*sqrt((1-cos(theta).^2))*pnm(m-1,m-1,theta,norm);
elseif (( n==0 && m==0) || (n==0 && m~=0) || (n~=0 && m==0))
values = 1;
elseif ( n == m )
wmm = sqrt((2*m-1)/(2*m));
values = wmm*(1-cos(theta)^2)^(1/2)*pnm(m-1,m-1,theta,norm);
elseif ( (n ~= m) && (n~=0 || m~=0) )
wnm = sqrt(((2*n+1)*(2*n-1))/((n+m)*(n-m)));
wnmB = sqrt(((2*(n-1)+1)*(2*(n-1)-1))/(((n-1)+m)*((n-1)-m)));
values = wnm*(cos(theta).*pnm(n-1,m,theta,norm)-inv(wnmB)*pnm(n-2,m,theta,norm));
end
end
elseif ((n == 0 && m == 0))
if (norm ~= 1)
values = 1;
elseif (norm == 1)
values = 1;
end
end
end
If anyone can assist me in finding my error again that would be greatly appreciated.

 Risposta accettata

Amin Bashi
Amin Bashi il 11 Feb 2011

0 voti

see the 11th and 12th lines of pnm function elseif ( norm == 0 && n >= m+2) pnmCurrentn = ((2*n-1)/(n-m)).*cos(theta).*pnm(n-1,m,theta,norm)-((n+m-1)/(n-m))*pnm(n-2,m,theta,norm);
when u call pnm with pnm(3,1,theta,0), it call pnm again with (2,1,theta,0) in line 12; but u don't have this condition in your code

Più risposte (0)

Categorie

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by