Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.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
Matrix 用Julia中的微分方程包求解矩阵ODE_Matrix_Julia_Ode_Differentialequations.jl - Fatal编程技术网

Matrix 用Julia中的微分方程包求解矩阵ODE

Matrix 用Julia中的微分方程包求解矩阵ODE,matrix,julia,ode,differentialequations.jl,Matrix,Julia,Ode,Differentialequations.jl,我想解决: [\mathbf{M}\ddot{\mathbf{U}}+\mathbf{C}\dot{\mathbf{U}+\mathbf{K}\mathbf{U}=\mathbf{p}(t)] 或者,以状态空间形式: [\dot{\mathbf{Y}}=f(\mathbf{Y},t)] 其中: [\mathbf{Y}=\left[\begin{array}{c}\mathbf{U}\\dot{\mathbf{U}\end{array}\right]] 以及: [f(\mathbf{Y},t)=\

我想解决:

[\mathbf{M}\ddot{\mathbf{U}}+\mathbf{C}\dot{\mathbf{U}+\mathbf{K}\mathbf{U}=\mathbf{p}(t)]

或者,以状态空间形式:

[\dot{\mathbf{Y}}=f(\mathbf{Y},t)]

其中:

[\mathbf{Y}=\left[\begin{array}{c}\mathbf{U}\\dot{\mathbf{U}\end{array}\right]]

以及:

[f(\mathbf{Y},t)=\left[\begin{array}{c}\dot{\mathbf{U}}\\mathbf{M}{p}(t)-\mathbf{M}{1}\mathbf{c}\dot{\mathbf{U}-\mathbf M}{-1}\mathbf K}\mathbf}右端{

我在Julia中尝试了以下代码,使用

\mathbf{M}=\left[\begin{array}{cc}2&0\0&1\end{array}\right]

\mathbf{C}=\left[\begin{array}{cc}0&0\0&0\end{array}\right]

\mathbf{K}=\left[\begin{array}{cc}96&-32-32&32\end{array}\right]

\mathbf{p}(t)=\left[\begin{array}{c}10\10\end{array}\right]

但运行这些代码行会导致此错误:

ERROR: InexactError()
我使用的是Julia版本0.5.2


请帮助我。谢谢。

您的问题是differentialsequations.jl尊重您的输入类型

u0=[0;0;0;0];
这是一个整数数组,这意味着您的问题将演变为一个整数数组。在第一步中,它发现计算返回浮点数,因此它不知道如何生成
u
,因为您说过它必须是一个整数数组。解决方法是,您的问题已打开浮点数:

u0=[0.0;0.0;0.0;0.0];
现在,这一点得到了正确的发展

但是,让我们进行另一步。Differentialsequations.jl尊重您的输入类型,因此Differentialsequations.jl只需将初始条件设置为矩阵,即可将其设置为矩阵上的问题。如果将
u0
设置为矩阵,则无需重塑:

u0=[0.0 0.0
    0.0 0.0]
一旦你这样做了,你只需要写一个直接作用于矩阵的方程。例如:

using DifferentialEquations
M = 1
K = 1
C = 1
function eq(t,u,du)
  du .= u[:,2] .- 10 - M./C.*u[:,2] - M.\K.*u[:,1]
end
u0=[0.0 0.0
    0.0 0.0]
tspan=(0.0,10.0);
prob=ODEProblem(eq,u0,tspan)
sol=solve(prob)

我不确定你要解的方程是否正确,因为它非常难读懂,但这会让你非常接近你想要的。

你的问题是微分方程。jl尊重你的输入类型

u0=[0;0;0;0];
这是一个整数数组,这意味着您的问题将演变为一个整数数组。在第一步中,它发现计算返回浮点数,因此它不知道如何生成
u
,因为您说过它必须是一个整数数组。解决方法是,您的问题已打开浮点数:

u0=[0.0;0.0;0.0;0.0];
现在,这一点得到了正确的发展

但是,让我们进行另一步。Differentialsequations.jl尊重您的输入类型,因此Differentialsequations.jl只需将初始条件设置为矩阵,即可将其设置为矩阵上的问题。如果将
u0
设置为矩阵,则无需重塑:

u0=[0.0 0.0
    0.0 0.0]
一旦你这样做了,你只需要写一个直接作用于矩阵的方程。例如:

using DifferentialEquations
M = 1
K = 1
C = 1
function eq(t,u,du)
  du .= u[:,2] .- 10 - M./C.*u[:,2] - M.\K.*u[:,1]
end
u0=[0.0 0.0
    0.0 0.0]
tspan=(0.0,10.0);
prob=ODEProblem(eq,u0,tspan)
sol=solve(prob)


我不确定你要解的方程是否正确,因为它非常难读懂,但这会让你非常接近你想要的。

你的显式方程应该是
U'=m^(-1)*(p(t)-C*U'-K*U)
。在你的版本中
m^(-1)
p(t)之前变换后的方程式和代码中都缺少
。-您应该将
Y
,而不是
\dot Y
定义为
[U;U']
。感谢您向我展示我的错误。对于您的数学编辑,还可以探索
amslatex
包,在那里您可以找到
bmatrix
环境。感谢您的建议。您的显式公式应为
U'=M^(-1)*(P(t)-C*U'-K*U)
。在您的版本中,
M^(-1)
P(t)之前变换后的方程式和代码中都缺少
。-您应该将
Y
,而不是
\dot Y
定义为
[U;U']
。感谢您向我展示我的错误。对于您的数学编辑,还可以探索
amslatex
软件包,在那里您可以找到
bmatrix
环境。感谢您的建议。太好了。非常感谢您。微分方程软件包的独特功能给我留下了深刻的印象。对不起,您能再举一个matri的例子吗cesm,C,K(不是前面示例中使用的标量)。如果你做
M
C
K
矩阵也是一样的。需要做的就是你必须更新
du
的值。任何这样做的数学陈述都是有效的。我尝试了以下代码,但结果似乎是t的所有值都是零。我在这里的某个地方错了吗?
函数eq(t,u,u,du);v=重塑(t,u,u,u,u;du;u=重塑(t[v[:,2];;-M^(-1)*,(t(t,t,u,u,u,u,u(t,t,u,u,u,u,u,u,u,u,u;v=重塑([v[[v[v[:,2:,u,u,u,u,u,u,u,u,u,u,u(t,u,u,u,u,u,u;t;t=重塑);v=重塑;v=重塑([t=重塑([v(t[v(t[t[t,t,t,t,t,t,t[t,t,t,t,t,t,t,t,t,t,t[t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t,t(续)
您没有更新
du
,您正在创建一个新的
du
。请注意,我的代码使用了
=
而不是
=
。您应该编写它,以便更新
du
而不是替换它。或者您可以使用函数签名
eq(t,u)
并返回数组进行更新(MATLAB风格),虽然这会影响性能。太好了。非常感谢。微分方程软件包的独特功能给我留下了深刻印象。对不起,请您再举一个矩阵M、C、K的例子(不是上一个例子中使用的标量)。如果你做
M
C
K
矩阵也是一样的。需要做的就是你必须更新
du
的值。任何这样做的数学陈述都是有效的。我尝试了以下代码,但结果似乎是t的所有值都是零。我在这里的某个地方错了吗?
函数等式(t,u,du);v=整形([u..],Int(长度(u)/2),2);du=整形([