Using a for loop to fill up a matrix

Novice here, and I can't figure out how to fill up a matrix using the for loop. The program computes the correct values, but the output is really unprofessional looking. I should be able to get the three output matices: A matrix, CLa and CDia. After each pass in the loop, in the A matrix I should get a column of length four, and the CLa and CDia matrices yield one value each for each pass through the loop.
Here is my program: (I know it's ugly, but I'm new and it works!). The meat of the program is down where the n matrix goes through and uses each successive value of alfa. Right below that is where I want the matrices to start filling up.
for alfa = [-2:2:12],
format long e;
theta=[22.5 45 67.5 90];
k1=sin(theta*pi/180);
k2=sin(3*theta*pi/180);
k3=sin(5*theta*pi/180);
k4=sin(7*theta*pi/180);
k=[k1;k2;k3;k4];
mu=0.24933*(1-0.6*cos(theta*pi/180));
l1=mu+k1;
l2=3*mu+k1;
l3=5*mu+k1;
l4=7*mu+k1;
l=[l1;l2;l3;l4];
m1=k1.*l1;
m2=k2.*l2;
m3=k3.*l3;
m4=k4.*l4;
m=[m1;m2;m3;m4];
n=((alfa+1.2)*pi/180)*(mu.*k1);
A(:,:)=m'\n'
CLa(1,:)=A(1)*pi*9
CDia(1,:)=(CLa^2/(9*pi))*(1 + 3*A(2)^2/A(1)^2 + 5*A(3)^2/A(1)^2 + 7*A(4)^2/A(1)^2)
end;

 Accepted Answer

Please go back and format your code using the '{} Code' button.
EDIT Thank you for (partially) formatting your code!
There are some questions having to do with what you want. First off, putting everything that doesn't change in the FOR loop is very bad form. I know you are a beginner, so I am just pointing that out for future reference :-). Now the question is, what is the line:
A(:,ii) = m'\n'
supposed to be doing? Are you meaning to do m\n' (matrix division?) or what? Here is your code, partially fixed, and assuming you did mean to use matrix division. Also, pay attention to the lines assigning CDia and Cla. Did you mean to access each of those rows in the current column of A? If so,r replace A(1) with A(1,ii), and similarly for A(n), etc...
% All of this stuff goes outside the loop!
format long e;
theta=[22.5 45 67.5 90];
k1=sin(theta*pi/180);
k2=sin(3*theta*pi/180);
k3=sin(5*theta*pi/180);
k4=sin(7*theta*pi/180);
k=[k1;k2;k3;k4];
mu=0.24933*(1-0.6*cos(theta*pi/180));
l1=mu+k1;
l2=3*mu+k1;
l3=5*mu+k1;
l4=7*mu+k1;
l=[l1;l2;l3;l4];
m1=k1.*l1;
m2=k2.*l2;
m3=k3.*l3;
m4=k4.*l4;
m=[m1;m2;m3;m4];
alfa = [-2:2:12];
A = zeros(4,8);
CLa = zeros(1,8);
CDia = zeros(1,8);
for ii = 1:length(alfa)
n = ((alfa(ii)+1.2)*pi/180)*(mu.*k1);
A(:,ii) = m\(n.');
CLa(ii) = A(1,ii)*pi*9;
CDia(ii) = (CLa(ii)^2/(9*pi))*(1+3*A(2,ii)^2/A(1,ii)^2+...
5*A(3,ii)^2/A(1,ii)^2 + 7*A(4,ii)^2/A(1,ii)^2);
end
EDIT In response to your comment I replaced A(n) with A(n,ii) in the above code.

6 Comments

Thanks. I warned that i was a newbie!
The A matrix comes out with four coefficients. Only A(1) is used in CL, but A(1)through A(4)is used in CDia. With each pass through using alfa, I need to develop successive columns in all three matrices. The A matrix will develop into a 4X8 and the other two will be 1X8.
Thanks for your help!
See my comment about replacing A(n) with A(n,ii) in the CDia and Cla lines, if that is the case...
Thanks a bunch Matt. I can't imagine how long trial and error would have taken me.
I'm getting this error and I don't understand why:
??? Attempted to access alfa(0.493803); index must be a positive integer or logical.
Error in ==> BertinEx7pt1 at 25
n=((alfa(ii)+1.2)*pi/180)*(mu.*k1);
alfa is an integer...alfa is the aircraft angle of attack and I'm looking at -2deg, 0 deg, etc.
Did you copy and paste the code exactly as I put it, because I ran the code and got no such error. All variables were created just fine.
ii is always an integer and never 0.493803. Something changed...
Running like a Porsche. Thank you Matt.

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Asked:

on 21 Apr 2011

Community Treasure Hunt

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

Start Hunting!