奇怪的是我创建的MATLAB函数

时间:2014-08-12 21:37:40

标签: matlab function

我在MATLAB中创建一个函数来预先形成从z域到s域的双线性变换。据我所知,MATLAB内置了一个只从s到z的内置。我传递了函数5个变量,范围从-10到10但是当它显示我的等式时,它们的值大约为10 ^ 16。代码和输出如下:

功能:

function [ F ] = Bilinear1( A1, B0, B1, C0, C1 )
%%Convert from z-transform to Laplace

syms s;
T=1/60;
disp(' A1 B0 B1 C0 C1')
disp(A1)
disp(B0)
disp(B1)
disp(C0)
disp(C1)

%P = (B1*z + B0)/(z + A1);
%z = ((2+s*T)/(2-s*T));

Vol = ((B1*(2+s*T)/(2-s*T))+B0)/(((2+s*T)/(2-s*T))+A1);
Fre = ((C1*(2+s*T)/(2-s*T))+C0)/(((2+s*T)/(2-s*T))+A1);

F = Vol + Fre

end

输出:

A1 B0 B1 C0 C1

0.9993

0.3816

-0.3107

1.4454

-2.0896


F =

- (((5596314615617219*s)/1080863910568919040 + 5596314615617219/9007199254740992)/(s/60      - 2) + 1718521318749205/4503599627370496)/((s/60 + 2)/(s/60 - 2) - 9000946589363061/9007199254740992) - (((4705274087128031*s)/135107988821114880 + 4705274087128031/1125899906842624)/(s/60 - 2) + 6509326018898365/4503599627370496)/((s/60 + 2)/(s/60 - 2) - 9000946589363061/9007199254740992)

任何帮助了解造成这种情况的原因都将非常感激。

1 个答案:

答案 0 :(得分:1)

你是否真的试着看看这些奇怪的部分是什么?  例如,在评估你F中的最后一个词时,我得到: 9000946589363061/9007199254740992 = 0.9993 = A1,这应该是什么!我不确定为什么Matlab用这个表达式替换0.993,但我猜它不应该以任何方式改变你的结果。
您可以尝试使用simplifysimplifyFraction函数以及pretty prints来检查所有这些表达式是否正确!

仅供参考,在我的Matlab(R2012b)中复制和粘贴代码时,我得到F的以下输出:

F = - (((653*s)/18750 + 2612/625)/(s/60 - 2) + 7227/5000)/((s/60 + 2)/(s/60 - 2) - 9993/10000) - (((3107*s)/600000 + 3107/5000)/(s/60 - 2) + 477/1250)/((s/60 + 2)/(s/60 - 2) - 9993/10000)

显然不使用相同的整数来写相同的分数...我猜测Matlab将十进制数转换为分数,以便在syms表达式中使用它们。我不知道为什么转换对你来说不同于我!你能试试A1上的numden功能吗?

[n, d] = numden(syms(0.993))

为我返回n = 993和d = 1000,在我的输出中A1被993/1000替换。也许这个结果对你来说是n = 9000946589363061和d = 9007199254740992?