考尔型电路设计中求连分式商的Matl…

来源:互联网 发布:淘宝客成交计入权重吗 编辑:程序博客网 时间:2024/05/16 23:34

2014.1.8

今天上午到下午成功编写了一个我所谓的求连分式商的matlab程序,是因为我发现在电网络理论中发现那个计算比较繁琐。于是我就想编个电脑程序帮我计算吧。

在电网络理论中,课本后面的综合设计部分的要求是当给出一个网络函数时F(s)时,需要用实际的电路去实现那个网络函数。一般用到的是考尔型电路去实现。下图所示就是考尔型电路。

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

图中的参数对应下面的参数:

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

而计算这些参数要用到“辗转相除”的方法,从而才能的到上面的连分式形式。

 

比如一个网络函数:考尔型电路设计中求连分式商的Matlab实现


下面的图片是教材上关于此题的解法。目的就是求出右边的那几个数,考尔型电路设计中求连分式商的Matlab实现考尔型电路设计中求连分式商的Matlab实现考尔型电路设计中求连分式商的Matlab实现考尔型电路设计中求连分式商的Matlab实现。这几个参数分别对应上图电路中的参数。此计算还是比较繁琐。于是我就想编程实现。

因为以前都是用C语言编写,不怎么熟悉Matlab语言,所以中间出了很多问题,但是毕竟算法都已经摆在那里的,剩下的只是程序实现。所以经过单步调试慢慢的就成功了。只要用心,冷静下来思考不急不躁什么都可以完成的。

 

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

 

 

Matlab的源程序如下:

function lianfenshi(N,D)

 

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 L;

 

 

 

syms s;

L=size(D);

P=L(1,2);

j=1;q=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

 

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 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 L;

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

    W(k)

    k=k+1;

end

 

end

 

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

>> D=[0 1];

>> N=[9 10 1];

>> lianfenshi(N,D);

计算出的结果如下:

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

 

和书本方法计算结果是完全一致的!小有成就感啊!哈哈

 

0 0
原创粉丝点击