1

DifferentialEquation.jl 패키지로 ode45 미분 방정식을 풀려고하는데 메서드 오류가 발생합니다. 내가 오류가 대해서 typeof (Y0 이후 Y0 함께 할 수있는 뭔가를 (할 수도 있습니다 생각하지만,DifferentialEquations.jl Julia 패키지를 사용할 때 메서드 오류가 발생했습니다.

MethodError: Cannot convert an object of type Array{Float64,2} to an object of type Array{Float64,1} This may have arisen from a call to the constructor Array{Float64,1}(...), since type constructors fall back to convert methods.

는 내가 잘못된 일을 할 수있는 것을 얻을하지 않습니다

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) 

코드라는 오류가 있습니다) = Array {Float64,1})이며 solve() 함수가있는 행에서 오류가 발생합니다.

미리 도움 주셔서 감사합니다.

답변

2

안된 직감 : 변경 :

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

행 :

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

전 한 열에있는 2 차원 행렬을 생성한다. 후자는 1 차원 벡터를 생성합니다. 표시되는 오류 메시지는 1 차원 배열을 기대하는 곳에 2 차원 배열을 가져 오는 것입니다. 좋아

+0

그래서 난 요청 된 변경이하지만 지금은 다음과 같은 오류가 않았다 나는 더욱 혼란 스러워요 : > MethodError : 어떤 방법 매칭 interp_summary (:: OrdinaryDiffEq.InterpolationData {# gg를 배열 {배열 {Float64, 1, 1}, Array {Float64,1}, Array {배열 {배열 {Float64,1}, 1}, 1}, OrdinaryDiffEq.Tsit5ConstantCache {Float64, Float64}}) – maikkirapo

+0

그건 분명히 다른 문제입니다. [MWE] (https://stackoverflow.com/help/mcve)를 만들 수 있는지 확인한 다음 OrdinaryDiffEq.jl 또는 새로운 SO 질문에서 문제로 게시 할 수 있습니다. –

+0

@maikkirapo 그 오류는 구버전의 인쇄 오류 일뿐입니다. 필자는 JuliaPro를 사용하지 않고'Pkg.update()'를 사용할 것을 제안합니다. –