Recording solutions given by for loop as a vector.

2 views (last 30 days)
So I have created a load of code that helps to plot the coefficient of lift across a 2D cambered wing. I have a bit of code that gives me a vector of numbers that directly impacts the coefficient. N = 20, 40, 80, 160, 320, 640. These N input values are run through a for loop showing how the output changes when the numbers double (20, 40, 80 etc.) The loop runs smoothly through all values, but I do not know how to record the values as a vector without upsetting the code already written. I will include the code below, bare in mind that it is a very experimental piece of code so there will be bits that look odd and such, ignore them, I simply need to know how to record the AREA output (one of the last lines of code inside the loop).
for N = [20,40,60,80,160,320,640];
GWE = (4.9736)./N;
x1 = [0:GWE:P*4];
x2 = [P*4:GWE:4];
x3 = cat(2,x1,x2);
x4 = [0:GWE:P*4];
x5 = [P*4:GWE:4];
x6 = cat(2,x4,x5);
Z1 = ((0.07*4)/(P.^2))*(((2*P)*(x4/4))-((x4/4).^2));
Z2 = ((0.07*4)/((1-P).^2))*((1-(2*P))+((2*P)*(x5/4))-((x5/4).^2));
Z3 = cat(2,Z1,Z2);
Y1 = (tmax/0.2)*((0.2969*((x3/c).^0.5))-(0.1281*(x3/4))-(0.3516*((x3/4).^2))+(0.2843*((x3/4).^3))-(0.1015*((x3/4).^4)));
dzdx = diff(Z3);
%To Stop The Loop From Not Syncing Together
TSTL = N - ((N*2)/10);
if TSTL > 127
TSTL = N - (((N*2)/10)-1);
end
if TSTL >512
TSTL = N - (((N*2)/10)-2);
end
x=x3(1,1:TSTL);
Y=Y1(1,1:TSTL);
Z=Z3(1,1:TSTL);
theta = atan(diff(Z3));
xup = x - (Y.*sin(theta));
yup = Z + (Y.*cos(theta));
xlow = x + (Y.*sin(theta));
ylow = Z - (Y.*cos(theta));
plot (x,Z, '-.r')
hold on
plot (x,0, 'g')
plot (xup,yup)
plot (xlow,ylow)
axis([-1 5 -1 1.5])
c = 4;
rhoinf = 1.2;
vinf = 80;
[gamma, xj] = vortex_lattice(dzdx, x, alpha, vinf, rhoinf, c);
figure
plot(xj, gamma);
Area = trapz(xj,gamma);
end

Answers (1)

Guillaume
Guillaume on 8 Dec 2014
Replace the loop with:
NCoeffs = [20,40,60,80,160,320,640];
Area = zeros(size(NCoeffs));
for coeffidx = 1:numel(NCoeffs)
N = NCoeffs(coeffidx);
...
And the Area calculation with:
Area(coeffidx) = trapz(xj, gamma);
  2 Comments
Joe
Joe on 8 Dec 2014
This worked great. My answers are now being stored as a vector as required but unfortunately they are all using the first N value (20), I can't seem to get them to use the corresponding [20, 40,80,160 etc...]
Guillaume
Guillaume on 8 Dec 2014
The line
N = NCoeffs(coeffidx);
sets N to each of the values of NCoeffs. Did you forget the line?

Sign in to comment.

Categories

Find more on Two y-axis in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!