matlab中的求商,考尔型电路设计中求连分式商的Matlab实现
2014.1.8
今天上午到下午成功编写了一个我所谓的求连分式商的matlab程序,是因为我发现在电网络理论中发现那个计算比较繁琐。于是我就想编个电脑程序帮我计算吧。
在电网络理论中,课本后面的综合设计部分的要求是当给出一个网络函数时F(s)时,需要用实际的电路去实现那个网络函数。一般用到的是考尔型电路去实现。下图所示就是考尔型电路。

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

而计算这些参数要用到“辗转相除”的方法,从而才能的到上面的连分式形式。
比如一个网络函数:
下面的图片是教材上关于此题的解法。目的就是求出右边的那几个数,
,
,
,
。这几个参数分别对应上图电路中的参数。此计算还是比较繁琐。于是我就想编程实现。
因为以前都是用C语言编写,不怎么熟悉Matlab语言,所以中间出了很多问题,但是毕竟算法都已经摆在那里的,剩下的只是程序实现。所以经过单步调试慢慢的就成功了。只要用心,冷静下来思考不急不躁什么都可以完成的。

Matlab的源程序如下:
function g = 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 x y 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 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);
计算出的结果如下:

和书本方法计算结果是完全一致的!小有成就感啊!哈哈
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
