loop for specific values

59 views (last 30 days)
Alina Abdikadyr
Alina Abdikadyr on 13 Feb 2023
Edited: Dyuman Joshi on 27 Feb 2024
Hello everyone!
Please, could you help me with a code.
I need to calculate for a given set of values V and P. So, my set is phi = [0;36.87;48.19;55.15;60]
My code is:
clear all; close all
W = 10000;
S = 40;
AR=7;
cd0 = 0.005;
k = 1 / pi / AR;
Psl=25000;
clalpha = 2*pi;
rho=1.225;
figure(1);hold on; xlabel('V');ylabel('P')
for phi = [0;36.87;48.19;55.15;60]
i=0;
for alpha = 1:0.25:12
i=i+1;
n(i)=1/cos(phi*pi/180);
cl(i) = clalpha * alpha * pi/180;
V(i) = sqrt(2*n(i)*W/rho/S/cl(i));
L(i) = 0.5 * rho * V(i) * V(i) * S * cl(i);
cd(i) = cd0 + k * cl(i) * cl(i);
D(i) = 0.5 * n(i)*rho * V(i) * V(i) * S * cd(i);
clcd(i) = cl(i)/cd(i);
p(i) = D(i)*V(i);
P_a(i)=Psl;
end
figure(1); plot(V,p)
hold on
plot(V,P_a)
end

Answers (2)

Dyuman Joshi
Dyuman Joshi on 13 Feb 2023
Edited: Dyuman Joshi on 27 Feb 2024
From the for loop documentation - "To iterate over the values of a single column vector, first transpose it to create a row vector."
Thus, transpose the input such that it is provided as a row vector for the iterating values and your code will work.
Also, you can vectorize the inner for loop like I have shown -
W = 10000;
S = 40;
AR = 7;
cd0 = 0.005;
k = 1 / pi / AR;
Psl = 25000;
clalpha = 2*pi;
rho = 1.225;
figure(1);
hold on;
xlabel('V');ylabel('P');
%Bring out the constant values out of the loop
alpha = 1:0.25:12;
cl = clalpha*alpha*pi/180;
cd = cd0 + k * cl.^2;
clcd = cl./cd;
P_a = Psl*ones(size(alpha));
for phi = [0;36.87;48.19;55.15;60]'
% transpose^
n=1/cos(phi*pi/180);
V = sqrt(2.*n.*W./rho./S./cl);
L = 0.5*rho*V.^2*S.*cl;
D = 0.5.*n.*rho.*V.^2*S.*cd;
p = D.*V;
plot(V,p);
plot(V,P_a);
end

Robert
Robert on 28 Nov 2023
Edited: Robert on 28 Nov 2023
@ geometry dash scratch
Hello, Here's the modified code with some improvements:
clear all; close all
W = 10000;
S = 40;
AR = 7;
cd0 = 0.005;
k = 1 / (pi * AR);
Psl = 25000;
clalpha = 2 * pi;
rho = 1.225;
figure(1);
hold on;
xlabel('V');
ylabel('P');
phi = [0; 36.87; 48.19; 55.15; 60];
for k = 1:numel(phi)
alpha_range = 1:0.25:12;
n = 1 / cos(phi(k) * pi / 180);
cl = clalpha * alpha_range * pi / 180;
V = sqrt(2 * n * W / (rho * S * cl));
L = 0.5 * rho * V.^2 * S .* cl;
cd = cd0 + k * cl.^2;
D = 0.5 * n * rho * V.^2 * S .* cd;
clcd = cl ./ cd;
p = D .* V;
P_a = Psl * ones(size(V));
figure(1);
plot(V, p);
hold on;
plot(V, P_a);
end

Categories

Find more on MATLAB in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!