基于Matlab的二阶电路的动态电路分析!

该博客介绍了使用Matlab进行一阶和二阶电路的动态分析,包括电感和电容的独立及串联并联情况。通过建立戴维宁等效电路或诺顿等效电路,利用微分方程求解电流和电压随时间的变化,并绘制了i-t和u-t图像。同时,考虑了零输入响应和有源情况的分析。
摘要由CSDN通过智能技术生成

基于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).本次实验将一阶电路的动态电路分析全部解决,将二阶电容电感捆绑型电路全部解决(零状态、零响应、全响应)

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值