RC Circuit

Contents

symbolic

%R R1 1 2 100
%C C1 2 0 0.1
%V Vs 1 0 2

R1 = sym('R1');
C1 = sym('C1');
Vs = sym('Vs');
% vector of unknowns
V1 = sym('V1');
V2 = sym('V2');
Iv = sym('Iv');
y = sym([ V1; V2; Iv;]);

% Build system
Gm = nmAcc(1,2,1/R1,sym(zeros(3,3)));
Cm = nmAcc(2,0,C1,sym(zeros(3,3)));
Is = sym(zeros(3,1));
m = 3;
Gm = mnaVsrc(m,1,0,Gm);
Is(m) = Vs;

% show results
disp('y (unknowns)');
pretty(y);
disp('Gm');
pretty(Gm);
disp('Cm');
pretty(Cm);
disp('Is (rhs)');
pretty(Is);
y (unknowns)

  +-    -+
  |  V1  |
  |      |
  |  V2  |
  |      |
  |  Iv  |
  +-    -+
Gm

  +-               -+
  |    1      1     |
  |   --,  - --, 1  |
  |   R1     R1     |
  |                 |
  |     1    1      |
  |  - --,  --,  0  |
  |    R1   R1      |
  |                 |
  |    1,    0,  0  |
  +-               -+
Cm

  +-          -+
  |  0,  0, 0  |
  |            |
  |  0, C1, 0  |
  |            |
  |  0,  0, 0  |
  +-          -+
Is (rhs)

  +-    -+
  |   0  |
  |      |
  |   0  |
  |      |
  |  Vs  |
  +-    -+

state equations

% eigenvalue analysis
[V S] = eig(Cm);
r = int32(rank(Cm));
d = diag(S);
n = size(Cm,1);
idx = n-r + (1:r);
Vr = V(:,idx);
srr = diag(d(idx));
ys = Gm\Is;
Cmr = (Gm\Vr)*srr;
% state variables
x = Vr'*y;
% state equations
A =  -inv(Vr'*Cmr);
B = -A*(Vr'*ys);
C = -Cmr*A;
D = ys-Cmr*B;
% show results
disp('x (state variable)');
pretty(x);
disp('A');
pretty(A);
disp('B');
pretty(B);
disp('C');
pretty(C);
disp('D');
pretty(D);
disp('y');
pretty(y);
disp('C*x+D');
pretty(C*x+D);
x (state variable)

  V2
A

      1
  - -----
    C1 R1
B

    Vs
  -----
  C1 R1
C

  +-    -+
  |   0  |
  |      |
  |   1  |
  |      |
  |   1  |
  |  --  |
  |  R1  |
  +-    -+
D

  +-      -+
  |   Vs   |
  |        |
  |    0   |
  |        |
  |    Vs  |
  |  - --  |
  |    R1  |
  +-      -+
y

  +-    -+
  |  V1  |
  |      |
  |  V2  |
  |      |
  |  Iv  |
  +-    -+
C*x+D

  +-         -+
  |     Vs    |
  |           |
  |     V2    |
  |           |
  |  V2   Vs  |
  |  -- - --  |
  |  R1   R1  |
  +-         -+