How to write a function with subscripts
How to write a function with subscripts
(OP)
Hi!
I need a help, I am a beginner in matlab programming, I a m trying to write a recursive function in matlab with subscripts but I don't how I should represent it, I have just tried to represent it as follow;
Pmbar_nm = a_nm*q*t*Pmbar_n-1,m - b_nm*q^2*Pmbar_n-2,m;
where by I want the nm, n-1,m and n-2,m to be subscripts. As it is when I Run, I'm getting error message that function Pmbar_n is not defined. please tell me what to do!!
The following is the coplete code I have tried to write
function Pmbar_nm = Leg(phi,n_max,t)
%LEG copmutes the normalized associated legendre functions Pnm(t)by recurrence relation
if (nargin == 0)
phi = -6;
lambda = 39;
h = 76;
n_max = 18;
end
if n_max > 180, disp('Upper summation bound too large!'), return, end
GM = 3986004.418e8; % m^3/s^2
a_e = 6378136.46; % m
finv = 298.257223563; % flatenning
% We input geodetic coordinates phi,lambda in degrees
% We have to transform the geodetic coordinates to geocentric coordinates in radians
[X,Y,Z] = frgeod(a_e,finv,phi,lambda,h);
[lambda,phi_geoc,r] = cart2sph(X,Y,Z); % lambda and phi_geoc are now in radians
t = sin(phi_geoc); % phi_geoc is geocentric latitude
%Computing the normalized associated legendre legendre functions along the diagonal
Pbar_nm = zeros(n_max+3,1);
for n = 2:n_max
for m = 0:n
i = 2:m
u = cos (phi_geoc);
Pbar_nm = u^m*sqrt(3)*prod(sqrt((2i+1)/2i));
end
end
% building location array
loc = zeros(n_max+3,1);
for i = 1:n_max+3
loc(i)=i*(i-1)/2+1;
end
% Computing the normalisation coefficients a_nm and b_nm
a_nm = zeros((n_max+3)*(n_max+4)/2,1);
b_nm = a_nm;
for m = 1:n_max+1
for n = m+1:n_max
s = loc(n+1)+m;
a_nm(s) = sqrt(((2*n+1)*(2*n-1))/((n-m)*(n+m)));
b_nm(s) = sqrt(((2*n+1)*(n+m-1)*(n-m-1))/((2*n-3)*(n+m)*(n-m)));
end
end
%Computing the modified associated legendre function
q = a_e/r;
Pmbar_nm= zeros(n_max-4,1);
for m = n_max:-1:2
for n = n_max:-1:m
Pmbar_nm = (Pbar_nm/u^m) *10^(-280);
end
Pmbar_nm = a_nm*q*t*Pmbar_n-1,m - b_nm*q^2*Pmbar_n-2,m;
end
disp ('Computed values for the associated legendre function Pmbar_nm'),return, end
Thank you in advance for your consideration!!
I need a help, I am a beginner in matlab programming, I a m trying to write a recursive function in matlab with subscripts but I don't how I should represent it, I have just tried to represent it as follow;
Pmbar_nm = a_nm*q*t*Pmbar_n-1,m - b_nm*q^2*Pmbar_n-2,m;
where by I want the nm, n-1,m and n-2,m to be subscripts. As it is when I Run, I'm getting error message that function Pmbar_n is not defined. please tell me what to do!!
The following is the coplete code I have tried to write
function Pmbar_nm = Leg(phi,n_max,t)
%LEG copmutes the normalized associated legendre functions Pnm(t)by recurrence relation
if (nargin == 0)
phi = -6;
lambda = 39;
h = 76;
n_max = 18;
end
if n_max > 180, disp('Upper summation bound too large!'), return, end
GM = 3986004.418e8; % m^3/s^2
a_e = 6378136.46; % m
finv = 298.257223563; % flatenning
% We input geodetic coordinates phi,lambda in degrees
% We have to transform the geodetic coordinates to geocentric coordinates in radians
[X,Y,Z] = frgeod(a_e,finv,phi,lambda,h);
[lambda,phi_geoc,r] = cart2sph(X,Y,Z); % lambda and phi_geoc are now in radians
t = sin(phi_geoc); % phi_geoc is geocentric latitude
%Computing the normalized associated legendre legendre functions along the diagonal
Pbar_nm = zeros(n_max+3,1);
for n = 2:n_max
for m = 0:n
i = 2:m
u = cos (phi_geoc);
Pbar_nm = u^m*sqrt(3)*prod(sqrt((2i+1)/2i));
end
end
% building location array
loc = zeros(n_max+3,1);
for i = 1:n_max+3
loc(i)=i*(i-1)/2+1;
end
% Computing the normalisation coefficients a_nm and b_nm
a_nm = zeros((n_max+3)*(n_max+4)/2,1);
b_nm = a_nm;
for m = 1:n_max+1
for n = m+1:n_max
s = loc(n+1)+m;
a_nm(s) = sqrt(((2*n+1)*(2*n-1))/((n-m)*(n+m)));
b_nm(s) = sqrt(((2*n+1)*(n+m-1)*(n-m-1))/((2*n-3)*(n+m)*(n-m)));
end
end
%Computing the modified associated legendre function
q = a_e/r;
Pmbar_nm= zeros(n_max-4,1);
for m = n_max:-1:2
for n = n_max:-1:m
Pmbar_nm = (Pbar_nm/u^m) *10^(-280);
end
Pmbar_nm = a_nm*q*t*Pmbar_n-1,m - b_nm*q^2*Pmbar_n-2,m;
end
disp ('Computed values for the associated legendre function Pmbar_nm'),return, end
Thank you in advance for your consideration!!





RE: How to write a function with subscripts
If you want to be neat and have all your functions listed in your script file, you'll have to make your script file one big function by putting a function statement as the first line.
For instance- if your script were called "test.m", the first line would be
function [output_var1, output_var2, etc] = test (input_var1, input_var2, etc)
or just
function test
This makes debugging difficult, since your script file won't store all variables after completion. It will only return what you specify in the brackets of the function declaration statement.