以下是一些Octave脚本(至少大概)重现上述MATLAB脚本。您必须按照X脚本手动输入IVP = 0的解决方案到每个脚本的第2部分,但它们确实起作用。如果任何人有无法像MATLAB解决函数那样根据X解决Octave求解IVP = 0,我很乐意听到它。
这一对解决了$ \ dot {x} - 3x = t^2 $,$ x(0)= 4 $。
1部分:
syms x(t) s X;
a0 = -3;
x0 = 4;
rhs = t^2;
lhs = diff(x,t) + a0*x;
ode = lhs - rhs
Lx = X;
LDx = s*X - x0;
LHS = LDx + a0*Lx;
RHS = laplace(rhs,t,s); % The t and s in laplace aren't necessary, as they are default
IVP = LHS - RHS;
coeff = coeffs(IVP,X);
IVP = coeff*[1;X]
第2部分:
syms x(t) s X;
X = -1*((-4*s^3-2)/s^3)/(s-3)
X = partfrac(X);
sol = ilaplace(X, s, t)
check1 = diff(sol,t) - 3*sol
check2 = vpa(subs(sol, t, 0))
这对解决了$ \ DDOT {X} - 2 \点{X} - 3×= T^2个,$ X (0)= 4 $,$ \ dot {x}(0)= 5 $。
1部分:
syms x(t) s X;
a1 =-2;
a0 = -3;
x0 = 4;
xdot0 = 5;
rhs = t^2;
Dx = diff(x,t);
D2x = diff(x,t,2);
lhs = D2x + a1*Dx + a0*x;
ode = lhs - rhs
Lx = X ;
LDx = s*X - x0;
LD2x = s^2*X - x0*s - xdot0;
LHS = LD2x + a1*LDx + a0*Lx;
RHS = laplace(rhs,t,s); % The t and s in laplace aren't necessary, as they are default
IVP = LHS - RHS;
coeff = coeffs(IVP,X);
IVP = coeff*[1;X]
第2部分:
syms x(t) s X;
a1 = -2;
a0 = -3;
X = -1*((-4*s^4 + 3*s^3 - 2)/s^3)/(s^2 - 2*s - 3)
X = partfrac(X);
sol = ilaplace(X, s, t)
Dsol = diff(sol,t);
D2sol = diff(sol,t,2);
check1 = D2sol + a1*Dsol + a0*sol
check2 = vpa(subs(sol, t, 0))
check3 = vpa(subs(Dsol, t, 0))
非常感谢所有帮助和建议!这是真正的赞赏!
“几乎”作品是什么意思?顺便说一句,'收集'[看起来](https://uk.mathworks。com/help/symbolic/collect.html)来收集系数;我在符号包中发现了一个'coeffs'函数,它似乎是等价的(尽管如此,似乎在这种情况下“factor”似乎有效)。 –
根据我运行此代码时得到的错误('Python异常:AttributeError:MutableDenseMatrix没有属性is_Relational'),这可能是相关的:http://stackoverflow.com/questions/42802588/solving-two-non- linear-equations-in-octave –
非常感谢您的回复! coeffs功能的确出现在我感兴趣的地方!一个简单的矩阵乘[1; X]再现MATLAB的收集。我有一些复制了上述MATLAB脚本的脚本(大约至少),但我会在下面的“答案”中发布这些脚本。非常感谢回复! –