Ошибка метода при использовании пакета diffrentialEquations.jl Julia

Я пытаюсь решить дифференциальное уравнение ode45 с помощью пакета DifferentialEquation.jl, но получаю ошибку метода.

using DifferentialEquations

M = 400; m = 35;
C = 3e3; c = 300;
K = 50e3; k = 200e3;
A = 0.05; L = 0.5; vh = 13.9

MM = [M 0;
      0 m] # mass matrix

CC = [C -C;
     -C C+c] # damping matrix

KK = [K -K;
     -K K+k] # stiffness matrix

w(t) = A*sin(2*pi*vh*t/L)
wd(t) = A*2*pi*vh*t/L*cos(2*pi*vh*t/L) # dw/dt

n = 2 # number of (original) equations
Mi = MM^(-1)
AA = [zeros(n,n) eye(n); -Mi*KK -Mi*CC]

f(t) = [0; c*wd(t)+k*w(t)] # force vector
g(t,y) = AA*y+[zeros(n,1); Mi*f(t)]

y0 = zeros(4) # initial conditions
tspan = (0.0, 0.5) # time span

prob = ODEProblem(g, y0, tspan) # defining the problem
solve(prob) 

Код дает ошибку, которая говорит:

MethodError: невозможно convert объект типа Array{Float64,2} к объекту типа Array{Float64,1} Это могло возникнуть в результате вызова конструктора Array{Float64,1}(...), поскольку конструкторы типов возвращаются для преобразования методы.

Я не понимаю, что я могу делать неправильно, хотя я полагаю, что ошибка может быть связана с y0 (так как typeof(y0) = Array{Float64,1}), и ошибка возникает в строке, где функция solve() является.

Спасибо за любую помощь заранее!

1 ответ

Решение

Непроверенная догадка: измениться:

g(t,y) = AA*y+[zeros(n,1); Mi*f(t)]

чтобы:

g(t,y) = AA*y+[zeros(n); Mi*f(t)]

Первый создаст двумерную матрицу с одним столбцом. Последний создаст одномерный вектор. Сообщение об ошибке, которое вы видите, состоит в том, что он получает двумерный массив в месте, где он ожидает одномерный.