build an array within the loop

조회 수: 2 (최근 30일)
Aamna Alshehhi
Aamna Alshehhi 2019년 10월 2일
댓글: Aamna Alshehhi 2019년 10월 2일
i wanna build two arrays within a loop. the first array contain Th2 elements and the second array contain Th3 elements. then i wanna plot them. this my code
for Th2=0:360
d =3.5; a = 1;b = 2; c = 4;
Th1= 0;
Z = d*exp(1i*deg2rad(Th1))- a*exp(1i*deg2rad(Th2));
Zc = conj(Z);
Ka = c*Zc; Kb = Z*Zc + c^2 -b^2; Kc = c*Z;
T = roots([ Ka Kb Kc]);
S = (c*T+Z)/b;
Th3 = rad2deg(angle(S));
Th4 = rad2deg(angle(T));
P= a*exp(1i* deg2rad(Th1))+ 6*exp(1i* deg2rad(Th3+20));
end
plot (Th2,Th3);

채택된 답변

Charles Rice
Charles Rice 2019년 10월 2일
Each time through the loop, Th3 is being overwritten with a new value. You need to assign each new value to the next index in an array.
theta_range = 0:360; % create the range of angles
Th3 = zeros(2, numel(theta_range)); % preallocate array
Th4 = zeros(2, numel(theta_range)); % preallocate array
for theta_index = 1:numel(theta_range)
% step through angles (this helps avoid zero indexing and lets you have a non-integer range)
Th2 = theta_range(theta_index);
d = 3.5;
a = 1;
b = 2;
c = 4;
Th1= 0;
Z = d*exp(1i*deg2rad(Th1)) - a*exp(1i*deg2rad(Th2));
Zc = conj(Z);
Ka = c*Zc;
Kb = Z.*Zc + c^2 - b^2;
Kc = c*Z;
T = roots([ Ka Kb Kc]);
S = (c*T+Z)/b;
Th3(:, theta_index) = rad2deg(angle(S)); % this function gives you a 2x1 result, so put it in both rows
Th4(:, theta_index) = rad2deg(angle(T));
P = a*exp(1i* deg2rad(Th1))+ 6*exp(1i* deg2rad(Th3+20));
end
subplot(2,1,1)
plot(theta_range, Th3(1,:));
xlabel('Theta')
ylabel('Positive Theta 3')
subplot(2,1,2)
plot(theta_range, Th3(2,:));
xlabel('Theta')
ylabel('Negative Theta 3')

추가 답변 (1개)

Ajay Kumar
Ajay Kumar 2019년 10월 2일
You are not creating Th3 array but overwriting it everytime. Try this
for i=0:360
d =3.5; a = 1;b = 2; c = 4;
Th1= 0;
Z = d*exp(1i*deg2rad(Th1))- a*exp(1i*deg2rad(i));
Zc = conj(Z);
Ka = c*Zc; Kb = Z*Zc + c^2 -b^2; Kc = c*Z;
T = roots([ Ka Kb Kc]);
S = (c*T+Z)/b;
Th3(:,i+1) = rad2deg(angle(S));
Th4 = rad2deg(angle(T));
P= a*exp(1i* deg2rad(Th1))+ 6*exp(1i* deg2rad(Th3+20));
end
Th2 = 0:360;
plot (Th2,Th3(1,:));
hold on;
plot (Th2,Th3(2,:));
  댓글 수: 1
Aamna Alshehhi
Aamna Alshehhi 2019년 10월 2일
you guys are AMAZING. THANKS!!!

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Oceanography and Hydrology에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by