Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 在八度音阶中,有没有一种方法可以用两个变量来解其中一个变量的方程_Matlab_Octave_Sympy_Differential Equations - Fatal编程技术网

Matlab 在八度音阶中,有没有一种方法可以用两个变量来解其中一个变量的方程

Matlab 在八度音阶中,有没有一种方法可以用两个变量来解其中一个变量的方程,matlab,octave,sympy,differential-equations,Matlab,Octave,Sympy,Differential Equations,我有一个MATLAB脚本,它使用拉普拉斯变换求解非齐次一阶线性IVP。(对于本例,设置脚本以解决IVP,) 如果我将“factor”替换为“collect”,脚本几乎可以在八度音阶上工作,符号包链接到SymPy,除了“solve”命令 是否有任何倍频程(或SymPy,如果作为一种解决方法)命令可以作为MATLAB符号工具箱的“solve”命令,这样我就可以用一个脚本通过拉普拉斯变换求解IVP,这样我就不必手动求解X,然后使用“ilaplace” 提前感谢您提供的任何帮助。以下是一些倍频程脚本,它

我有一个MATLAB脚本,它使用拉普拉斯变换求解非齐次一阶线性IVP。(对于本例,设置脚本以解决IVP,)

如果我将“factor”替换为“collect”,脚本几乎可以在八度音阶上工作,符号包链接到SymPy,除了“solve”命令

是否有任何倍频程(或SymPy,如果作为一种解决方法)命令可以作为MATLAB符号工具箱的“solve”命令,这样我就可以用一个脚本通过拉普拉斯变换求解IVP,这样我就不必手动求解X,然后使用“ilaplace”


提前感谢您提供的任何帮助。

以下是一些倍频程脚本,它们(至少大约)复制了上述MATLAB脚本。您必须在每个脚本的第2部分中手动输入IVP=0的解决方案(根据X),但它们确实起作用。如果有人在MATLAB的solve函数中用X表示八度解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]
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;

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))
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))
这对解算$\ddot{x}-2\dot{x}-3x=t^2$,$x(0)=4$,$\dot{x}(0)=5$

第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]
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;

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))
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))

非常感谢所有的帮助和建议!非常感谢

好的,我的一个学生解决了这个问题(我将在本周晚些时候与他联系,看看他是否希望公开承认他的解决方案)

您只需将
coeff*[1;X]
的结果定义为等于0的方程组,比如
IVPEQ=coeff*[1;X]==0
,然后在此方程上使用符号包命令
solve
X=solve(IVPEQ,X)

这是我以前的一阶IVP解算器的一个版本,由我的学生修改

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);
IVPEQ = coeff*[1;X] == 0;

X = solve(IVPEQ,X);

X = partfrac(X);

sol = ilaplace(X, s, t)

Dsol = diff(sol,t);
check1 = Dsol + a0*sol
check2 = vpa(subs(sol, t, 0))
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);
IVPEQ = coeff*[1;X] == 0;

X = solve(IVPEQ,X);

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))
这是第二阶IVP解算器和学生的修改

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);
IVPEQ = coeff*[1;X] == 0;

X = solve(IVPEQ,X);

X = partfrac(X);

sol = ilaplace(X, s, t)

Dsol = diff(sol,t);
check1 = Dsol + a0*sol
check2 = vpa(subs(sol, t, 0))
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);
IVPEQ = coeff*[1;X] == 0;

X = solve(IVPEQ,X);

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))

再次感谢@Tasos_papastylanou,感谢您的大力帮助

你说的“几乎”是什么意思?顺便说一句,
collect
用于收集系数;我在符号包中发现了一个
coefs
函数,它似乎是等效的(尽管在这种情况下,
factor
似乎是有效的),这可能是相关的:非常感谢您的回复!coeffs函数似乎确实符合我的兴趣!用[1;X]进行简单的矩阵乘法可以重现MATLAB的集合。我有一些复制上述MATLAB脚本的半成品脚本(至少大约),但我将在下面的“答案”中发布这些脚本。再次感谢您的回复!