我想以数值方式求解以下两个耦合微分方程:
d/dt Phi_i = 1 - 1/N * \sum_{j=1}^N( k_{ij} sin(Phi_i - Phi_j + a)
d/dt k_{ij} = - epsilon * (sin(Phi_i - Phi_j + b) + k_{ij}
具有定义的起始条件 phi_0(具有 N 个条目的 1-dim 数组)和 k_0(具有 NxN 个条目的 2-dim 数组)
我试过这个:使用DifferentialEquations.js,建立一个初始起始条件矩阵u0 = hcat(Phi_0, k_0) (2-dim array, Nx(N+1)),并以某种方式定义第一个方程适用于第一列(在我的代码 [:,1]) 中,第二个等式适用于其他列(在我的代码 [:,2:N+1] 中)。
using Distributions
using DifferentialEquations
N = 100
phi0 = rand(N)*2*pi
k0 = rand(Uniform(-1,1), N,N)
function dynamics(du, u, p, t)
a = 0.3*pi
b = -0.53*pi
epsi = 0.01
du[:,1] .= 1 .- 1/N .* sum.([u[i,j+1] * sin(u[i,1] - u[j,1] + a) for i in 1:N, j in 1:N], dims=2)
du[:,2:N+1] .= .- epsi .* [sin(u[i,1] - u[j,1] + b) + u[i,j+1] for i in 1:N, j in 1:N]
end
u0 = hcat(phi0, k0)
tspan = (0.0, 200.0)
prob = ODEProblem(dynamics, u0, tspan)
sol = solve(prob)
运行这行代码会导致此错误:
LoadError: DimensionMismatch ("cannot broadcast array to have fewer dimensions")in expression starting at line 47 (which is sol = solve(prob))
我是 Julia 的新手,我不确定我是否朝着正确的方向前进。请帮我!