反拉普拉斯与 Matlab

inverse Laplace with Matlab

我在使用 Matlab 查找函数的反拉普拉斯时遇到问题。我获得了以下传递函数:

我试过像

这样的方法
syms s t;
    num=[0 0 0 1.658e24 -1.163e14 6.076e15];
    den=[1 3.334e09 1.005e15 1.675e24 5.025e27 1.675e33];
    numsym=poly2sym(num);
    densym=poly2sym(den);
    transfer=numsym./densym;
    ilaplace(transfer,s,t)

但没有得到可接受的结果。意味着 Matlab 简单 returns :

我还尝试使用部分分数展开,并编写了关于极点和零点的传递函数,但是当我添加所有部分时,我没有得到原始传递函数。

syms s t;
num=[0 0 0 1.658e24 -1.163e14 6.076e15];
den=[1 3.334e09 1.005e15 1.675e24 5.025e27 1.675e33];
numsym=poly2sym(num);
densym=poly2sym(den);
transfer=numsym./densym;
[z,p,r]=residue(num,den);
transfer1=(z(1)/(s-p(1)))+(z(2)/(s-p(2)))+(z(3)/(s-p(3)))+(z(4)/(s-p(4)))+(z(5)/(s-p(5)));
transfer1=vpa(simplifyFraction((transfer1),'Expand',true),2)
the

化简后的transfer1变量是分子4阶,而原来的传递函数是2阶,有谁能帮我用什么方法求出下面表达式的传递函数,不胜感激?

我可能遗漏了一些东西,但多项式函数的逆传递函数只是多项式比率的倒数。

也就是说,如果你有 $ F \left( S \right) = \frac{ {P}{1} \left( s \right) }{ {P}{2} \left( s \right) } $ 逆由 $ F \left( S \right) = \frac{ {P}{2} \left( s \right) } { {P}{1} \left( s \right) } $.

您需要处理的是分子处多项式的零点 - 这或许可以解释 Delta 函数。

有两点需要考虑:

  1. 通过在没有第二个参数的情况下调用 poly2sym 来定义所需的变量,x 正在被使用。所以poly2sym([1 1])returnsx + 1。这里你想要一个带有变量 s 的多项式,因为在 ilaplace 中你声明 s 是初始变量。因此使用 poly2sym([1 1],s) 会得到 s + 1 作为结果。
  2. 您对第 (1) 点进行更正后的输出非常长,并且包含未解析的元素,例如 symsumRootOf,它们源自 ilaplace 背后的算法。使用命令 vpa 你可以消除它并尽可能得到一个数值结果。

代码应该是这样的:

syms s t;
num=[0 0 0 1.658e24 -1.163e14 6.076e15];
den=[1 3.334e09 1.005e15 1.675e24 5.025e27 1.675e33];
numsym=poly2sym(num,s);             % here the s as second argument
densym=poly2sym(den,s);             % here the s as second argument
transfer=numsym./densym;

timeexp = ilaplace(transfer,s,t);
timenum = vpa(timeexp);             % get numerical answer
pretty(timenum)                     % show the answer in nicer form

现在我们可以验证答案,以防您认为这可能只是一堆数字。因此,与 WolframAlpha 进行比较是有帮助的。我们需要将符号表达式转换为函数句柄来绘制结果:

timefun = matlabFunction(timenum);
a = linspace(0,1e-4,10000);
plot(a,real(timefun(a)))

结果如下:

WolframAlpha相比,可以说我们的结果是绝对合理的。