Variables Calculated in Function Somehow Aren't Assigned to Output

My code was working only a day ago, but it just stopped giving me output. I know it calculates the variables I need (wg,pm) becasue it will display them, but it never leaves the scope of the for loop. I know its gotta be something simple, but I'm stumped.
function[wp,pm,wg,gm] = pleaseWork(tf_in)
tf = inline(tf_in,'r')
figure
j = 1
for w = 0:0.1:100
magDB = 20*log10(abs(tf(i*w)));
phase = mod((180/pi)*atan2(imag(tf(i*w)),real(tf(i*w))),-360);
if round(magDB) == 0
wg = w
pm = phase + 180
end
if round(phase) == -180
wp = w
gm = -magDB
end
hold on
subplot(2,1,1)
title('HW 2 #9')
ylabel('Magnitude (dB)')
semilogx(w,20*log10(abs(tf(i*w))),'b.')
hold on
subplot(2,1,2)
ylabel('Phase (deg)')
xlabel('Angular Frequency (rad/s)')
semilogx(w,phase,'b.')
j = j + 1;
end
end

2 Comments

Before entering the for-loop, assign values to wg,pm,wp,gm (e.g. NaN).
What's the relevance of the variable j ?
Yeah that was it, I had no idea MATLAB wouldnt output if all outputs weren't assigned. j was accidentally copy and pasted over to this post, I truncated a lot of the code for readability.

Sign in to comment.

 Accepted Answer

Jonas
Jonas on 21 Jul 2021
Edited: Jonas on 21 Jul 2021
looks like your two if statements are never fullfilled, thats why output variables are empty

2 Comments

They're fufilled, as I can get it to display what I need while the function is executing. I just cant get it to output that value.
For example with a transfer function '50/(r*(r+1))'
Actually, you're 100% correct. I didnt know MATLAB would assign any outputs if ALL o them werent assigned at some point.

Sign in to comment.

More Answers (0)

Asked:

on 21 Jul 2021

Edited:

on 21 Jul 2021

Community Treasure Hunt

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

Start Hunting!