Use a MATLAB Workspace to get the unknown values in an AC circuit

  • Engineering
  • Thread starter Fatima Hasan
  • Start date
  • #1
Fatima Hasan
319
13
Homework Statement:
The question is attached below.
Relevant Equations:
-
The plot of part b is attached below.
I got a warning on part a , I don't know where is my mistake .
Please check my work .
Part A
Matlab:
clc;
clear all;
%parta
f=800;
t=0:10e-6:0.005;
xc=10^(-6);
xl=40e-3;
for i=1:(0.005)/(10e-6)
    w=2*f*pi;
    zeq=xl*j*w+50;
    is(i)=2*(1600*t(i)*pi);
    c=1/(xc*j*w);
    i1(i)=is(i)*c/(c+zeq); %apply CDR
    vo(i)=i1(i)*zeq;
end
figure (1)
subplot(2,1,1) , plot (t,vo)
subplot (2,1,2) , plot (t,is)
%partb
f=10:10:1000;
xl=40e-3;
xc=1e-6;
r=50;
for i=1:100 %(1000-10)/10+1=100
    w(i)=2*f(i)*pi;
    zeq(i)=xl*j*w(i)+r;
    c(i)=1/(xc*j*w(i));
    l(i)=xl*w(i)*j;
    zeq(i)=r+l(i);
    zt(i)=zeq(i)+c(i);
    is(i)=2*(cosd(0)+sind(0)*j); %convert to recantgular form
    vo(i)=(is(i)*c(i)/zt(i))*zeq(i); %Apply CDR to find the current and multiply it by Zeq to get the voltage
end
logscale1=20*log(abs(vo));
logscale2=20*(log(rad2deg(angle(vo))));
subplot(2,1,1) , plot(f,logscale1)
subplot(2,1,2) , plot(f,logscale2)
 

Attachments

  • Q2.PNG
    Q2.PNG
    39.4 KB · Views: 152
  • plotb.PNG
    plotb.PNG
    14.3 KB · Views: 162

Answers and Replies

  • #2
BvU
Science Advisor
Homework Helper
15,360
4,337
I don't have Matlab, but Octave gives an error in line 11: the index ##i## in array ##is## is invalid because ##i## is not an integer...
 
  • #3
RPinPA
Science Advisor
Homework Helper
587
329
I don't have Matlab, but Octave gives an error in line 11: the index ##i## in array ##is## is invalid because ##i## is not an integer...

That sounds likely just looking at the code. Actually providing the text of the message would be useful, we can't tell much from "I got a warning somewhere in my code".

I know that 0.005/10e-6 looks like it should be an integer, but floating point arithmetic in computers is not exact. Many numbers that are terminating decimals in base 10 are repeating decimals in base 2.

I would try changing the limits of the FOR loop to "for i=1:round(0.005/10e-6)"
 
  • #4
Fatima Hasan
319
13
That sounds likely just looking at the code. Actually providing the text of the message would be useful, we can't tell much from "I got a warning somewhere in my code".

I know that 0.005/10e-6 looks like it should be an integer, but floating point arithmetic in computers is not exact. Many numbers that are terminating decimals in base 10 are repeating decimals in base 2.

I would try changing the limits of the FOR loop to "for i=1:round(0.005/10e-6)"

I resolve it again .
Plots are attached below.
Matlab:
clc;
clear all;
%parta
f=800;
xl=40e-3;
xc=1e-6;
r=50;
t=0:1e-6:5e-3
is=2*cos(1600*pi*t);
w=2*pi*f;
l=xl*j*w;
c=1/(xc*j*w);
z=l+r;
zeq=(z*c)/(c+z);
vo=is*zeq;  %v=total current*total Z
figure (1)
subplot(2,1,1) , plot (t,vo)
subplot(2,1,2) , plot (t,is)
%part b
f=10:10:1000;
xl=40e-3;
xc=1e-6;
r=50;
for i=1:100 %(1000-10)/10+1=100
    w=2*pi*f(i);
    c=1/(xc*j*w);
    l=xl*w*j;
    z=l+r;
    zeq=(z*c)/(z+c);
    is=2*(cosd(0)+sind(0)*j); %convert to rectangular form
    vo(i)=is*zeq;
    vom(i)=abs(vo(i));
    voa=rad2deg(angle(vo(i)));
end
figure (2)
    semilogx(f,vom)
figure (3)
    semilogx(f,voa)
 

Attachments

  • figure1.PNG
    figure1.PNG
    21.9 KB · Views: 141
  • figure2.PNG
    figure2.PNG
    11.4 KB · Views: 128
  • figure3_.PNG
    figure3_.PNG
    8.3 KB · Views: 139
Last edited:
  • #5
Fatima Hasan
319
13
voa=rad2deg(angle(vo(i)));
I missed (i) , it should be voa(i)=rad2deg(angle(vo(i)));
 

Suggested for: Use a MATLAB Workspace to get the unknown values in an AC circuit

Replies
2
Views
619
Replies
2
Views
389
Replies
0
Views
357
  • Last Post
Replies
1
Views
332
  • Last Post
Replies
4
Views
575
Replies
3
Views
832
Replies
42
Views
638
  • Last Post
Replies
2
Views
400
Replies
16
Views
306
  • Last Post
Replies
6
Views
843
Top