基于Matlab的二阶电路的动态电路分析!
算法思路
1.一阶电路
1.只有电感:先得到电感所在端口的戴维宁等效电路;
接着代入公式计算,得到 i-t图像;
2.只有电容:先得到电容所在端口的戴维宁等效电路;
接着代入公式计算,得到u-t图像
2二阶电路
1.电感电容串联:将电感电容当成一个整体得出对应端口的戴维宁等效电路;接着代入公式,得到u-t图像;
2.电感电容并联:将电感电容当成一个整体得出对应端口的诺顿等效电路;接着代入公式,得到i-t图像。
一阶电路
//将初始电压值和电流值赋值给UStart和IStart
UStart=app.UStartEditField.Value;
IStart=app.IStartEditField.Value;
//如果是零输入 的话,电路里没电源自己加一个(即判断是否有源,如果无源执行if语句如下)
if(app.VNumber==0&&app.INumber==0)
NoSource=true;
app.INumber=app.INumber+1;
NewI=zeros(1,4);
NewI(1,1)=app.INumber;
NewI(1,2)=2;
if(app.CNumber~=0)
NewI(1,3)=app.CNP(1,3);
NewI(1,4)=app.CNP(1,4);
elseif(app.LNumber~=0)
NewI(1,3)=app.LNP(1,3);
NewI(1,4)=app.LNP(1,4);
end
app.INP=[app.INP;NewI];
end
//只有电容的情况
if(app.CNumber~=0&&app.LNumber==0)
app.RNP2=[app.RNP;app.CNP];%将电容矩阵加到电阻矩阵中
DynamicCircuit(app,app.RNP2);
if(NoSource==true)
syms t R C ustart;
%求解微分方程
app.U=dsolve('R*C*Du+u=0','u(0)=ustart','t');
ustart=UStart;
R=app.EqualResistance;
C=app.CNP(1,2);
app.U(t)=subs(app.U);
tao=app.EqualResistance*app.CNP(1,2);
%绘图
fplot(app.UIAxes,app.U,[0,7*tao]);
else%有源的情况
syms t R Vs C ustart;
app.U=dsolve('R*C*Du+u=Vs','u(0)=ustart','t');
ustart=UStart;
R=app.EqualResistance;
Vs=app.EqualVoltage;
C=app.CNP(1,2);
app.U(t)=subs(app.U);
tao=app.EqualResistance*app.CNP(1,2);
app.TAOEditField.Value=tao;
fplot(app.UIAxes,app.U,[0,7*tao]);
end
//只有电感的情况
elseif(app.CNumber==0&&app.LNumber~=0)
app.RNP2=[app.RNP;app.LNP];%将电容矩阵加到电阻矩阵中
%调用函数 计算动态电路中的戴维宁
DynamicCircuit(app,app.RNP2);
if(NoSource==true)
syms t R istart L;
app.I=dsolve('(L/R)*Di+i=0','i(0)=istart','t');
R=app.EqualResistance;
istart=IStart;
L=app.LNP(1,2);
app.I(t)=subs(app.I);
tao=L/R;
app.TAOEditField.Value=tao;
fplot(app.UIAxes,app.I,[0,7*tao]);
else
syms t R Is L istart;
app.I=dsolve('(L/R)*Di+i=Is','i(0)=istart','t');
istart=IStart;
R=app.EqualResistance;
Is=app.EqualCurrent;
L=app.LNP(1,2);
app.I(t)=subs(app.I);
tao=L/R;
app.TAOEditField.Value=tao;
% clear(app.UIAxes);
% cla(app.UIAxes);
fplot(app.UIAxes,app.I,[0,7*tao]);
end
app.UIAxes.YLabel.String='电感电流/A';
app.UIAxes.Title.String='I-t';
二阶电路
//电容电感并联的情况如下
if((app.CNP(1,3)==app.LNP(1,3)&&app.CNP(1,4)==app.LNP(1,4))||(app.CNP(1,4)==app.LNP(1,3)&&app.CNP(1,3)==app.LNP(1,4)))
app.RNP2=[app.RNP;app.CNP];%将电容矩阵加到电阻矩阵中
DynamicCircuit(app,app.RNP2);
if(NoSource==true)
syms t G C L ustart istart;
app.I=dsolve('L*C*D2i+G*L*Di+i=0','i(0)=istart','Di(0)=ustart/L','t');
istart=IStart;
ustart=UStart;
G=1/app.EqualResistance;
C=app.CNP(1,2);
L=app.LNP(1,2);
app.I=subs(app.I);
%求解特征根
% tao=EqualResistance*app.CNP(1,2);
% app.TAOEditField.Value=tao;
tao=C/G;
fplot(app.UIAxes,app.I,[0,10*tao]);
else%无源情况
syms t G C L Is ustart istart;
app.I=dsolve('L*C*D2i+G*L*Di+i=Is','i(0)=istart','Di(0)=ustart/L','t');
istart=IStart;
ustart=UStart;
G=1/app.EqualResistance;
Is=app.EqualCurrent;
C=app.CNP(1,2);
L=app.LNP(1,2);
app.I=subs(app.I);
%求解特征根
% tao=EqualResistance*app.CNP(1,2);
% app.TAOEditField.Value=tao;
tao=C/G;
fplot(app.UIAxes,app.I,[0,10*tao]);
end
app.UIAxes.YLabel.String='电感电流/A';
app.UIAxes.Title.String='I-t';
//电容电感串联的情况如下
elseif(app.CNP(1,3)==app.LNP(1,3)||app.CNP(1,3)==app.LNP(1,4)||app.CNP(1,4)==app.LNP(1,4)||app.CNP(1,4)==app.LNP(1,3))
LC=zeros(1,4);
LC(1,2)=app.CNP(1,2)*app.LNP(1,2);
if(app.CNP(1,3)==app.LNP(1,3))
LC(1,3)=app.CNP(1,4);
LC(1,4)=app.LNP(1,4);
elseif(app.CNP(1,4)==app.LNP(1,4))
LC(1,3)=app.CNP(1,3);
LC(1,4)=app.LNP(1,3);
elseif(app.CNP(1,3)==app.LNP(1,4))
LC(1,3)=app.CNP(1,4);
LC(1,4)=app.LNP(1,3);
elseif(app.CNP(1,4)==app.LNP(1,3))
LC(1,3)=app.CNP(1,3);
LC(1,4)=app.LNP(1,4);
end
app.RNP2=[app.RNP;LC];%将电容电感的假电阻新矩阵矩阵加到电阻矩阵中
DynamicCircuit(app,app.RNP2);
if(NoSource==true)
syms t R C L ustart istart;
app.U=dsolve('L*C*D2u+R*C*Du+u=0','u(0)=ustart','Du(0)=istart/C','t');
ustart=UStart;
istart=IStart;
R=app.EqualResistance;
C=app.CNP(1,2);
L=app.LNP(1,2);
app.U=subs(app.U);
%求解特征跟
% tao=EqualResistance*app.CNP(1,2);
% app.TAOEditField.Value=tao;
tao=2*L/R;
fplot(app.UIAxes,app.U,[0,7*tao]);
//统一有源情况如下(以上二阶均无源)
else
syms t R C L Us ustart istart;
app.U=dsolve('L*C*D2u+R*C*Du+u=Us','u(0)=ustart','Du(0)=istart/C','t');
ustart=UStart;
istart=IStart;
Us=app.EqualVoltage;
R=app.EqualResistance;
C=app.CNP(1,2);
L=app.LNP(1,2);
app.U=subs(app.U);
%求解特征跟
% tao=EqualResistance*app.CNP(1,2);
% app.TAOEditField.Value=tao;
tao=2*L/R;
fplot(app.UIAxes,app.U,[0,7*tao]);
end
app.UIAxes.YLabel.String='电容电压/V';
app.UIAxes.Title.String='U-t';
end
%撤销电流源 让电流源矩阵少一行
if(NoSource==true)
app.INP(app.INumber,:)=[];
app.INumber=app.INumber-1;
end
app.UIAxes.XLabel.String='时间/s';
app.TAOEditField.Value=tao;
hold(app.UIAxes,"on");
grid(app.UIAxes,"on");
人机界面
编者独白:
1).本次完善在上次一阶电路基础上增加了诺顿定理的验证,最大功率的验证(下次将代码附上);
2).本次实验将一阶电路的动态电路分析全部解决,将二阶电容电感捆绑型电路全部解决(零状态、零响应、全响应)