Warning: The data cannot be plotted because it is incompatible with the size of the plot or is missing
4 views (last 30 days)
Show older comments
I'm not resolve this error Matlab 2011a.
My script should work normally but I n unable to view.
Could you help me ??
I add the script you attached. it still does not. The problem is with (* Out_matrix inv_Ctl_matrix). Matlab n not seem to do the multiplication of the two matrix vector. Help me please
script:
% VIENNA rectifier analysis - state space
L=3.15e-3; %Filter Inductor
C=66E-6; %Filter Capacitor
rc=0.8; %Filter Capacitor ESR
Dp=0.384; %Positive duty cycle
Dn=1; %Negative duty cycle
RL=490; %Equivalent Output Load
vp=143.7; %Positive voltage
vn=-71.85; %Negative voltage
Ip=4.64;
In=-2.32;
Vref=2.5; %Reference voltage
Vout=700; %Output voltage
Rsense=0.17; %Sensing resistance
Vm=1.92;
VLL=176; %RMS input voltage
% main program
syms s Dp Dn X30 X40
X10=Ip;
X20=In;
sI=[[s 0 0 0];[0 s 0 0];[0 0 s 0];[0 0 0 s]];
%(1-Dp) terms
A_1=[[0 0 -2/(3*L) 0];[0 0 1/(3*L) 0];[1/C 0 0 0];[0 0 0 0]];
B_1=[[0];[0];[0];[0]];
C_1=[0 0 0 0];
% (1-Dn) terms
A_2=[[0 0 0 -1/(3*L)];[0 0 0 2/(3*L)];[0 0 0 0];[0 -1/C 0 0]];
B_2=[[0];[0];[0];[0]];
C_2=[0 0 0 0];
% Constant terms
A_3=[[0 0 0 0];[0 0 0 0];[0 0 -1/(C*(2*rc+RL)) -1/(C*(2*rc+RL))];[0 0 -1/(C*(2*rc+RL)) -1/(C*(2*rc+RL))]];
B_3=[[vp/L];[vn/L];[0];[0]];
C_3=[0 0 1 1];
S=solve( ((1-Dp)*A_1(1,:)+(1-Dn)*A_2(1,:)+A_3(1,:))*[[X10];[X20];[X30];[X40]]+(1-Dp)*B_1(1)+(1-Dn)*B_2(1)+B_3(1), ((1-Dp)*A_1(2,:)+(1-Dn)*A_2(2,:)+A_3(2,:))*[[X10];[X20];[X30];[X40]]+(1-Dp)*B_1(2)+(1-Dn)*B_2(2)+B_3(2), ((1-Dp)*A_1(3,:)+(1-Dn)*A_2(3,:)+A_3(3,:))*[[X10];[X20];[X30];[X40]]+(1-Dp)*B_1(3)+(1-Dn)*B_2(3)+B_3(3), ((1-Dp)*A_1(4,:)+(1-Dn)*A_2(4,:)+A_3(4,:))*[[X10];[X20];[X30];[X40]]+(1-Dp)*B_1(4)+(1-Dn)*B_2(4)+B_3(4));
S.Dp=double(S.Dp(1));
S.Dn=double(S.Dn(1));
V1=double(S.X30(1));
V2=double(S.X40(1));
V1=Vout/2;
V2=Vout/2;
A=(1-S.Dp)*A_1+(1-S.Dn)*A_2+A_3;
sI_A=sI-A;
inv_sI_A=inv(sI_A);
X=[[Ip];[In];[V1];[V2]];
[N1,D1]=numden(inv_sI_A(1,1));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_11=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(1,2));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_12=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(1,3));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_13=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(1,4));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_14=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(2,1));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_21=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(2,2));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_22=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(2,3));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_23=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(2,4));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_24=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(3,1));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_31=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(3,2));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_32=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(3,3));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_33=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(3,4));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_34=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(4,1));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_41=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(4,2));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_42=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(4,3));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_43=tf(Npoly,Dpoly);
[N1,D1]=numden(inv_sI_A(4,4));
Npoly=sym2poly(N1);
Dpoly=sym2poly(D1);
Npoly=Npoly/Dpoly(1);
Dpoly=Dpoly/Dpoly(1);
A_44=tf(Npoly,Dpoly);
ip=[(-A_13*Ip/C+2*A_11*V1/(3*L)-A_12*V1/(3*L)) (A_14*In/C+A_11*V2/(3*L)-2*A_12*V2/(3*L))];
in=[(-A_23*Ip/C+2*A_21*V1/(3*L)-A_22*V1/(3*L)) (A_24*In/C+A_21*V2/(3*L)-2*A_22*V2/(3*L))];
v2=[(-A_43*Ip/C+2*A_41*V1/(3*L)-A_42*V1/(3*L)) (A_44*In/C+A_41*V2/(3*L)-2*A_42*V2/(3*L))];
v1=[(-A_33*Ip/C+2*A_31*V1/(3*L)-A_32*V1/(3*L)) (A_34*In/C+A_31*V2/(3*L)-2*A_32*V2/(3*L))];
vo=v1+v2;
vctl_p=(Rsense)*(2*ip+in);
vctl_n=(Rsense)*(-2*in-ip);
Tfb=(Vref/Vout);
Out_matrix=[[v1];[v2]];
Ctl_matrix=[[vctl_p];[vctl_n]];
Ctl_matrix=minreal(Ctl_matrix);
det_Ctl_matrix=Ctl_matrix(1,1)*Ctl_matrix(2,2)-Ctl_matrix(2,1)*Ctl_matrix(1,2);
det_Ctl_matrix=minreal(det_Ctl_matrix);
inv_Ctl_matrix=(1/det_Ctl_matrix)*[[Ctl_matrix(2,2) -Ctl_matrix(1,2)];[-Ctl_matrix(2,1) Ctl_matrix(1,1)]];
inv_Ctl_matrix=minreal(inv_Ctl_matrix);
%Open loop transfer function analysis
Out_matrix=minreal(Out_matrix);
inv_Ctl_matrix=minreal(inv_Ctl_matrix);
Tol=Tfb*[[2] [2]]*(Out_matrix*inv_Ctl_matrix);
Tol2=minreal((Tol(1)+Tol(2)),0.5);
bode(Tol2,{1;100E3});
2 Comments
Walter Roberson
on 24 May 2015
I suspect that one of the models is coming out empty after minreal(). The documentation indicates that by default minreal() displays how many states it removes so you should be able to scan through that.
Right at the end you have
Tol2=minreal((Tol(1)+Tol(2)),0.5);
Tol(1) and Tol(2) look like they would be purely numeric objects, so Tol(1)+Tol(2) would be a simple scalar value. What kind of control model is described by a simple scalar? I see other places where you apply minreal() to a scalar. What is the intention of those? If states were minimized out of a scalar, it sounds to me like the result could be the empty vector.
Answers (1)
Kelvin Lee
on 26 Oct 2017
This problem happens frequently when the transfer functions are too complex. It bothers me a lot. If I program my own codes, like bode or nyquist, it won't happen. But it's too inconvenient, I hope the mathwork company can solve it once and for all. Otherwise, most guests may be disappointed.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!