Help With For Loops in Plotting Problem

조회 수: 2 (최근 30일)
Not_sharpest_tool.mat
Not_sharpest_tool.mat 2019년 7월 25일
편집: per isakson 2019년 7월 25일
I have written this formula and it works well...
The thing is I need to use For loops for the values of "Zeta" to change. I need to be able to plot four graphs with values 0.2, 0.4, 0.6, 0.8 for Zeta.
Should I use the For loop on the C_t formula? or would it be better for only the value of Zeta to change? Either way I can't seem to make it work. Any suggestions on how to proceed?
Zeta=0.2;
Nat_fr=2.5; %Natural Frequency
Beta= sqrt(1-Zeta.^2);
Tan_theta=Beta/Zeta;
theta=atan(Tan_theta); %Angle in radians
t= linspace(0,15,100);
%% Equation
c_t= 1-(1/(sqrt(1-Zeta.^2))).*(exp(-Zeta.*Nat_fr.*t)).*sin((sqrt(1-Zeta)).*Nat_fr.*t+atan((sqrt(1-Zeta))/Zeta));
%% Plot
plot(t,c_t)

채택된 답변

Raj
Raj 2019년 7월 25일
편집: Raj 2019년 7월 25일
temp=1;
t= linspace(0,15,100);
Nat_fr=2.5; %Natural Frequency
for Zeta=0.2:0.2:0.8
Beta (temp,1)= sqrt(1-Zeta.^2);
Tan_theta(temp,1)=Beta(temp,1)/Zeta;
theta(temp,1)=atan(Tan_theta(temp,1)); %Angle in radians
%% Equation
c_t= 1-(1/(sqrt(1-Zeta.^2))).*(exp(-Zeta.*Nat_fr.*t)).*sin((sqrt(1-Zeta)).*Nat_fr.*t+atan((sqrt(1-Zeta))/Zeta));
%% Plot
plot(t,c_t)
hold on
temp=temp+1;
end
legend ('Zeta=0.2','Zeta=0.4','Zeta=0.6','Zeta=0.8');
grid on;

추가 답변 (1개)

per isakson
per isakson 2019년 7월 25일
편집: per isakson 2019년 7월 25일
Either should work.
I prefer to keep plot() outside the loop because of speed. That requires to make c_t a matrix, which in turn requires an interger loop-counter to reference c_t. Thus, something like this
function cssm1()
Nat_fr=2.5; %Natural Frequency
Zeta = [0.2,0.4,0.6,0.8];
t = linspace(0,15,100);
c_t = nan( length(Zeta), length(t) ); % preallocate
for jj = 1 : length( Zeta )
% Beta= sqrt(1-Zeta(jj).^2);
% Tan_theta=Beta/Zeta(jj);
% theta = atan(Tan_theta); %Angle in radians
%% Equation
c_t(jj,:) = 1-(1/(sqrt(1-Zeta(jj).^2))).*(exp(-Zeta(jj).*Nat_fr.*t)).*sin((sqrt(1-Zeta(jj))).*Nat_fr.*t+atan((sqrt(1-Zeta(jj)))/Zeta(jj)));
end
%% Plot
plot( t, c_t )
end
sqrt(1-Zeta(jj)) is calculated three times in the equation, which is a bit of waste of cpu-cycles. Ok, that's why you calculate Beta.
I put the code in a function to avoid cluttering of my base workspace.

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by