SymPy - 在逆拉普拉斯变换时生成巨大的方程
SymPy - Generates huge equation while inverse laplace transform
当我用 Sympy 做一个非常简单的拉普拉斯逆变换时,我得到了一个巨大的等式。
例如:
from sympy import *
s = symbols ('s')
t = symbols ('t', positive=True) # Just to remove the Heaviside(t) equations
k, m = symbols ('k m', const=True)
A = Matrix([[0, 1], [-k/m, 0]])
I = eye(2) # Diagonalmatrix
Fi = inverse_laplace_transform((s*I-A).inv(), s, t)
print(pretty(simplify(Fi)))
现在从 Fi
得到一个巨大的方程式。为什么? Sympy 的 inverse_laplace_transform()
函数有问题吗?
拉佩斯逆变换用于将传递函数变为离散形式而不是时间连续形式。
我们可以使用这段代码代替拉普拉斯逆变换,其中 h
是采样时间。假设我们有一个传递函数 G(s),并且您想找到 G(s) 的离散等效模型。找到 G(s) 的状态 space 模型,然后 运行 这个 Octave/MATLAB 代码:
% Compute sizes
a1 = size(A,2) + size(B,2) - size(A,1);
b1 = size(A,2);
a2 = size(A,2) + size(B,2) - size(B,1);
b2 = size(B,2);
% Compute square matrix
M = [A B; zeros(a1, b1) zeros(a2, b2)];
M = expm(M*h);
% Find the discrete matrecies
Ad = M(1:size(A,1), 1:size(A,2));
Bd = M(1:size(B,1), (size(A,2) + 1):(size(A,2) + size(B,2)));
代码来源:https://github.com/DanielMartensson/Matavecontrol/blob/master/sourcecode/c2d.m
当我用 Sympy 做一个非常简单的拉普拉斯逆变换时,我得到了一个巨大的等式。
例如:
from sympy import *
s = symbols ('s')
t = symbols ('t', positive=True) # Just to remove the Heaviside(t) equations
k, m = symbols ('k m', const=True)
A = Matrix([[0, 1], [-k/m, 0]])
I = eye(2) # Diagonalmatrix
Fi = inverse_laplace_transform((s*I-A).inv(), s, t)
print(pretty(simplify(Fi)))
现在从 Fi
得到一个巨大的方程式。为什么? Sympy 的 inverse_laplace_transform()
函数有问题吗?
拉佩斯逆变换用于将传递函数变为离散形式而不是时间连续形式。
我们可以使用这段代码代替拉普拉斯逆变换,其中 h
是采样时间。假设我们有一个传递函数 G(s),并且您想找到 G(s) 的离散等效模型。找到 G(s) 的状态 space 模型,然后 运行 这个 Octave/MATLAB 代码:
% Compute sizes
a1 = size(A,2) + size(B,2) - size(A,1);
b1 = size(A,2);
a2 = size(A,2) + size(B,2) - size(B,1);
b2 = size(B,2);
% Compute square matrix
M = [A B; zeros(a1, b1) zeros(a2, b2)];
M = expm(M*h);
% Find the discrete matrecies
Ad = M(1:size(A,1), 1:size(A,2));
Bd = M(1:size(B,1), (size(A,2) + 1):(size(A,2) + size(B,2)));
代码来源:https://github.com/DanielMartensson/Matavecontrol/blob/master/sourcecode/c2d.m