Problem using DifferentialEquations.jl

Hi!

I am trying to create a function that I could use to solve a simple linear dynamic problem by using DifferentialEquations.jl.

using DifferentialEquations
using Plots

function s(f,KK,MM,al,be,n,u0,t)
    C=al*MM+be*KK
    A=[C*Mi K*Mi;eye(n) zeros(n,n)]
    b=[f(t);zeros(n)]
    g(u,p,t)=A*u+b
    prob=ODEProblem(g,u0,tspan)
    sol=solve(prob)
    h=plot(sol)
    display(h)
end

When I test the function with values something goes wrong e.g.

M=400; m=35
K=50000; k=200000
A=300

function f(t)
    [A*sin(t);0]
end

MM=M*0.5*eye(2)+0.5*m*eye(2)
KK=[K+k -K;-K  K]
Mi=inv(MM)
tspan=(0.0,2.0)
u0=zeros(4,1)
f(t)=[A*sin(t);0]
al=0.5; be=0.02; n=2
s(f,KK,MM,al,be,n,u0,tspan)

I keep getting this error message:

LoadError: e[91mMethodError: no method matching sin(::Tuple{Float64,Float64})e[0m
Closest candidates are:
sin(e[91m::Float64e[39m) at math.jl:419
sin(e[91m::Float32e[39m) at math.jl:420
sin(e[91m::Float16e[39m) at math.jl:950
...e[39m

Does anyone have any suggestions how I could try to fix this?

Welcome to the forum!

tspan is a tuple and sin does not accept tuple inputs. Change b=[f(t);zeros(n)] to b=[f.(t);zeros(n)] might help? (actually, that doesn’t work, but you may get the gist?)

Thank you for the tip! I don’t quite know what to do yet but I’ll keep working on it!

I can’t seem to make this work. I fixed some mistakes I noticed in the matrices but I don’t know what I should do about the tuple.

I’m not sure what you intend to do as your code is not self-explanatory, but below “works”. I would recommend to first test everything at the REPL, sans functions. You should also read up on arrays and vectors, you seem a bit confused about their shape, how to transform them, etc.

using DifferentialEquations
using Plots
pyplot() # otherwise you might run into world-age issues, at least if you also use pyplot

function s(f,KK,MM,al,be,n,u0,t)
    C=al*MM+be*KK
    A=[C*Mi K*Mi;eye(n) zeros(n,n)]
    b=[f.(t)..., zeros(n)...]
    g(u,p,t)=A*u+b
    prob=ODEProblem(g,u0,tspan)
    sol=solve(prob)
    h=plot(sol)
    display(h)
end

M=400; m=35
K=50000; k=200000
AA=300

MM=M*0.5*eye(2)+0.5*m*eye(2)
KK=[K+k -K;-K  K]
Mi=inv(MM)
tspan=(0.0,2.0)
u0=zeros(4)
f(t)=AA*sin(t)
al=0.5; be=0.02; n=2
s(f,KK,MM,al,be,n,u0,tspan)
1 Like

Sorry I wasn’t clearer! Thank you for helping!

1 Like