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

Click For Summary

Discussion Overview

The discussion revolves around troubleshooting MATLAB code used to analyze an AC circuit, focusing on the calculation of unknown values and the generation of plots. Participants address issues related to warnings and errors encountered in the code, as well as the interpretation of results.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Mathematical reasoning

Main Points Raised

  • One participant reports receiving a warning in their MATLAB code but does not specify the nature of the warning, asking for help in identifying the mistake.
  • Another participant suggests that the warning may be due to floating point arithmetic issues, proposing a modification to the loop index to use rounding.
  • A participant who does not have MATLAB mentions encountering an error in Octave regarding the index being invalid, indicating a potential issue with how the loop is structured.
  • After revising the code, the original poster shares updated plots and code, indicating a potential resolution to the warning issue.
  • A later post identifies a missing index in the code, suggesting that the variable should be corrected to include the index for proper assignment.

Areas of Agreement / Disagreement

Participants express differing views on the source of the warning and errors, with some suggesting potential solutions while others highlight the need for more information. The discussion remains unresolved regarding the exact cause of the initial warning.

Contextual Notes

Limitations include the lack of specific details about the warning message and the potential impact of floating point arithmetic on loop indexing. The discussion also reflects varying experiences with MATLAB and Octave, which may affect interpretations of the code.

Who May Find This Useful

This discussion may be useful for individuals working with MATLAB or Octave in the context of electrical engineering or physics, particularly those interested in AC circuit analysis and troubleshooting coding issues.

Fatima Hasan
Messages
315
Reaction score
14
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
    35.4 KB · Views: 276
  • plotb.PNG
    plotb.PNG
    12.1 KB · Views: 289
Physics news on Phys.org
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...
 
BvU said:
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)"
 
RPinPA said:
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
    20.2 KB · Views: 257
  • figure2.PNG
    figure2.PNG
    8.9 KB · Views: 244
  • figure3_.PNG
    figure3_.PNG
    8.3 KB · Views: 262
Last edited:
Fatima Hasan said:
voa=rad2deg(angle(vo(i)));
I missed (i) , it should be voa(i)=rad2deg(angle(vo(i)));
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
4K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 26 ·
Replies
26
Views
3K
Replies
2
Views
2K
  • · Replies 3 ·
Replies
3
Views
8K
  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 6 ·
Replies
6
Views
5K
  • · Replies 2 ·
Replies
2
Views
4K