I think i would aslo need to re formulate the figure title to be depending on the user input Freq and the picked nd(Node number), is that even possible?
A problem with recalling a function
6 views (last 30 days)
Show older comments
Abdelrhman Abdelfatah
on 27 Nov 2021
Answered: Abdelrhman Abdelfatah
on 30 Nov 2021
So I have a code, that calculate the output voltage at the three Nodes of an RC Circuit based on the user's Input frequncy.. ( one of three, 1Hz, 8Hz, or 20Hz) .. And the user had only 3 choices, And i designed it using the following errorflag
errorflag = 0;
while (errorflag == 0)
disp(' ')
disp ('Which Frequency do you want to use?')
disp (' (1) 1Hz ')
disp (' (2) 8Hz')
disp (' (3) 20Hz')
freq_choice=input('Please enter choice (1, 2, 3) > ');
disp(' ')
% check for valid input
if( freq_choice == 1 || freq_choice == 2 || freq_choice == 3)
errorflag =1;
else
disp(' *** Invalid choice ')
disp(' *** Please respond with a 1, 2, or 3 ')
disp(' *** Press ENTER to continue ' )
pause
end % if
end % while
Based on the user input, let's assume he chose 1Hz, the output would be a subplot of the output voltage at Node1, Node2, and Node 3.. with 1Hz frequncy.
Now I want to improve the code a bit, expanding the choices to 6 as shown below
errorflag = 0;
while (errorflag == 0)
disp(' ')
disp ('Which analysis do you want to make?')
disp (' (1) Using 1Hz freq across all three Nodes (1&2&3) ')
disp (' (2) Using 8Hz freq across all three Nodes (1&2&3)')
disp (' (3) Using 20Hz freq across all three Nodes (1&2&3)')
disp (' (4) At Node1 ONLY across all three Freq (1Hz & 8Hz & 20Hz)')
disp (' (5) At Node2 ONLY across all three Freq (1Hz & 8Hz & 20Hz)')
disp (' (6) At Node3 ONLY across all three Freq (1Hz & 8Hz & 20Hz)')
freq_choice=input('Please enter choice (1, 2, 3,4,5,6) > ');
disp(' ')
% check for valid input
if( freq_choice == 1 || freq_choice == 2 || freq_choice == 3 || freq_choice == 4 || freq_choice == 5 || freq_choice == 6)
errorflag =1;
else
disp(' *** Invalid choice ')
disp(' *** Please respond with a 1, 2, 3, 4, 5 or ')
disp(' *** Press ENTER to continue ' )
pause
end % if
end % while
And I want to design a function, that takes two inputs from the user .. freq ( the input frequency) and nd (the node number, 1 ,2 or 3) .. (I was not sure about posting the whole code, so I added (......) replacing the circuit formulation part, and left the part that's connected with the two vraibles i wasnt ( freq , nd)
function dc=requiredgraph (freq, nd)
% Declare the number of the nodes and Matricies from the circuit nodal formulation (G ,C ,B)
......
% Our simulation conditions { End time (T) / Number of Points (N) }
......
% The Initial Conditions
......
% Time Vector, based on the Number of Points (N)
.......
%Definining the Input Voltage based on Freq
for i=1:N
Vin(i)=cos(2*pi*freq*t(i));
end
% Solve For V using the Time March Technique
V(:,1)=Vo;
for i=2:N
V(:,i)=((C+G*dt))\(C*V(:,i-1)+B*Vin(i)*dt);
%plotting the function
figure
plot(t,V(nd,:));
title('The Output voltage at Node2, at Frequency of 1Hz');
xlabel('Time');
ylabel('The Output Voltage');
grid on
end
end
Now, if i want to recall this function to plot the graph of output at Node 2 ( nd=2) and Freq of 8Hz ( freq=8) .. How can I do this? Sorry for the long question, and please let me know if there is any missing info.
Thanks in advance. And help is highly appreictated
2 Comments
Dr. Kelsey Joy
on 27 Nov 2021
I recommend revising how you prevent your user from proceeding based on their input. Here is some sample code to help you out with your errorflag portion of code: https://www.mathworks.com/matlabcentral/fileexchange/102674-educational-validating-user-inputs-numbers-and-strings?s_tid=prof_contriblnk
Accepted Answer
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!