我在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)
任何帮助了解造成这种情况的原因都将非常感激。
答案 0 :(得分:1)
你是否真的试着看看这些奇怪的部分是什么?
例如,在评估你F中的最后一个词时,我得到:
9000946589363061/9007199254740992 = 0.9993 = A1,这应该是什么!我不确定为什么Matlab用这个表达式替换0.993,但我猜它不应该以任何方式改变你的结果。
您可以尝试使用simplify和simplifyFraction函数以及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?