【问题标题】:Implement solution of differential equations system using exponential matrix in Julia在 Julia 中使用指数矩阵实现微分方程组的求解
【发布时间】:2021-02-03 03:36:42
【问题描述】:

我尝试在 Julia 中重现我在图中显示并取自 Matrix Exponentiation 的示例

我向您展示了我在 Julia 中重现该练习的程度。但我不知道如何引入向量 t,对于感兴趣的范围,例如 t = -3: 0.25: 3. 在矩阵中: [exp (u1 * t 0; 0 exp (u2 * t], u1 u2 特征值。

Julia>A=[0 1;1 0]
2×2 Array{Int64,2}:
 0  1
 1  0

F=eigen(A)
Eigen{Float64,Float64,Array{Float64,2},Array{Float64,1}}
values:
2-element Array{Float64,1}:
 -1.0
  1.0
vectors:
2×2 Array{Float64,2}:
 -0.707107  0.707107
  0.707107  0.707107

D = diagm(exp.(F.values))
2×2 Array{Float64,2}:
 0.367879  0.0
 0.0       2.71828

P = F.vectors
13:06:08->>2×2 Array{Float64,2}:
 -0.707107  0.707107
  0.707107  0.707107

【问题讨论】:

  • 只需使用exp(A*t)*u0。没有更多的了。
  • 请注意,如果你看看它做了什么,它最终会做你本来想写的事情
  • 是否可以改进代码?
  • C=[0 1;1 0] x0=[1 0] ∆t = .25 T = exp(C*∆t) x = x0 x1 =x0 for i = 1:100 x = x*T #repeatedly multiply by T x1=vcat(x1, x) # & store current x1(t) in the array x1 end

标签: arrays matrix julia differential-equations exponentiation


【解决方案1】:

在网站上Fabian Dablander 代码显示在 R 中实现解决方案的代码。 这些是带给 Julia 的脚本:

using Plots
using LinearAlgebra

#Solving differential equations using matrix exponentials
A=[-0.20 -1;1 0] #[-0.40 -1;1 0.45] A=[0 1;1 0]
x0=[1 1]# [1 1] x0=[0.25 0.25] x0=[1 0]
tmax=20
n=1000
ts=LinRange(0,tmax,n)
x = Array{Float64}(undef, 0, 0)
x=x0
for i in 1:n
x=vcat(x,x0*exp(A*ts[i]))
end
plot(x)
plot(x[:,1],x[:,2])


#Solving differential equations finding eigenvalues and eigenvectors
A=[-0.20 -1;1 0] #A=[-0.40 -1;1 0.45] A=[0 1;1 0]
x0=[1 1]# [1 1] x0=[0.25 0.25] x0=[1 0]
tmax=20
n=500
# compute eigenvectors and eigenvalues
  eig = eigen(A)
  E =eig.vectors
  λ=eig.values
# solve for the initial conditon
C =E\x0'
# create time steps
ts=LinRange(0,tmax,n)
x = Array{Float64}(undef,n, size(A,2))
for i in 1:n
   x[i,:]=real.(C'*diagm(exp.(λ*ts[i]))*E)
 end
plot(x)
plot(x[:,1],x[:,2])  

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 2020-05-14
    • 2018-10-28
    • 2021-04-22
    • 2021-04-23
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    相关资源
    最近更新 更多