More Recursion Help Needed
    6 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
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.
0 Kommentare
Akzeptierte Antwort
  Amin Bashi
      
 am 11 Feb. 2011
        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
0 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
				Mehr zu Performance and Memory finden Sie in Help Center und File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!