考尔型电路设计中求连分式商的Matlab实现

考尔型电路设计中求连分式商的Matlab实现

背景

搞电气工程的,研究生阶段有一门必修课《电网络理论》。当给出一个网络函数时F(s)时,需要用实际的电路去实现那个网络函数。一般用到的是考尔型电路去实现。下图所示就是考尔型电路。
在这里插入图片描述
图中电路参数与数学表达式的关系为:
在这里插入图片描述
而计算这些参数要用到“辗转相除”的方法,从而才能的到上面的连分式形式。
比如一个网络函数:
F ( s ) = s 4 + 10 s 2 + 9 s 3 + 2 s F(s) = \frac{s^4+10s^2+9}{s^3+2s} F(s)=s3+2ss4+10s2+9
下图是课本用辗转相除法的解体过程:
在这里插入图片描述
目的就是求出图中右边的那几个数, 9 2 s \frac{9}{2s} 2s9 4 11 s \frac{4}{11s} 11s4 121 14 s \frac{121}{14s} 14s121 7 11 s \frac{7}{11s} 11s7。这几个参数分别对应上图电路中原件的参数。也就是通过数学方法把传递函数形式转化成连分式的形式,由连分式的形式就可以得到实际的电路了。

解决方案

此计算还是比较繁琐。于是我就想用Matlab编程实现。
程序如下:

function g = lianfenshi(N,D,H)
    clc;
    x=size(N);y=size(D);
    L=size(N)-size(D);
    if (L(1,2)>0)
         D((y(1,2)+1):x(1,2))=0;
    end
    if (L(1,2)<0)
        N((x(1,2)+1):y(1,2))=0;
    end
    clear x y L;

    syms s;
    L=size(D);
    P=L(1,2);
    j=1;q=1;

    if H==1%升幂
    for i=1:P
        if N(i)~=0
            A(j)=N(i)*s^(i-1);
            j=j+1;
        end
        if D(i)~=0
            B(q)=D(i)*s^(i-1);
            q=q+1;
        end

    end
    end

    if H==0%降幂

    for i=P:-1:1
        if N(i)~=0
            A(j)=N(i)*s^(i-1);
            j=j+1;
        end
        if D(i)~=0
            B(q)=D(i)*s^(i-1);
            q=q+1;
        end

    end
    end

    M(1,:)=A(1,:);   %第1次计算时的 被除数的多项式的因子构成的矩阵
    U(1,:)=B(1,:);%第1次计算时的 除数的多项式的因子构成的矩阵
    w(1)=M(1,1)/U(1,1);
    W(1)=w(1,1);%第1次计算时的 商
    W(1)

    x=size(M);y=size(U);
    L=size(M)-size(U);
    if (L(1,2)>0)
         U((y(1,2)+1):x(1,2))=0;
    end
    if (L(1,2)<0)
        M((x(1,2)+1):y(1,2))=0;
    end
    clear x y L;

    Z(1,:)=M(1,:)-U(1,:)*W(1);%第1次计算时的 余数多项式的因子构成的矩阵
    %z(1)=sum(M(1,:)')'-sum(U(1,:)')'*W(1);
    k=2;

    while sum(Z(k-1,:)')~=0
        M(k,:)=U(k-1,:);
        L=size(Z);
        clear U;
        U(k,:)=Z(k-1,2:L(1,2));
        clear L;
        w(k)=M(k,1)/U(k,1);
        W(k)=w(k);

        x=size(M);y=size(U);
        L=size(M)-size(U);
        if (L(1,2)>0)
         U(:,(y(1,2)+1):x(1,2))=0;
        end
        if (L(1,2)<0)
        M(:,(x(1,2)+1):y(1,2))=0;
        end
        clear x y L;

        Z(k,:)=M(k,:)-U(k,:)*W(k);
        W(k)
        k=k+1;
    end
end

验证

当在命令窗口输入如下代码时:

>> D=[0 2 0 1];
>> N=[9 0 10 0 1];
>> lianfenshi(N,D,1);

计算截图如下:
在这里插入图片描述

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值