反拉普拉斯与 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 函数。
有两点需要考虑:
- 通过在没有第二个参数的情况下调用
poly2sym
来定义所需的变量,x
正在被使用。所以poly2sym([1 1])
returnsx + 1
。这里你想要一个带有变量 s
的多项式,因为在 ilaplace
中你声明 s
是初始变量。因此使用 poly2sym([1 1],s)
会得到 s + 1
作为结果。
- 您对第 (1) 点进行更正后的输出非常长,并且包含未解析的元素,例如
symsum
和 RootOf
,它们源自 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相比,可以说我们的结果是绝对合理的。
我在使用 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 函数。
有两点需要考虑:
- 通过在没有第二个参数的情况下调用
poly2sym
来定义所需的变量,x
正在被使用。所以poly2sym([1 1])
returnsx + 1
。这里你想要一个带有变量s
的多项式,因为在ilaplace
中你声明s
是初始变量。因此使用poly2sym([1 1],s)
会得到s + 1
作为结果。 - 您对第 (1) 点进行更正后的输出非常长,并且包含未解析的元素,例如
symsum
和RootOf
,它们源自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相比,可以说我们的结果是绝对合理的。