Welcome to !
First thanks, because I thaught I wouldn't get out of it !
I am following python because I am a very bad programmer but I like it !
In french, we haven't yet lot of Julia's users or I haven't met them. My aim now is to try to make the portrait phase accompanying this example from python. What I live most in Julia is the easy symbolic variable writing w\_o, which makes exactly like the maths command. Surely I prefer your nativ ODE but it seems for me still harder at the time ! I have found lot of beautifull examples in julia but they are so condensed that I don't find anything I can remenber ! It's like chinese language ? I know mostly european language but I can't learn chinese because it's so well modeled ! Bu with time I hope I can progress... And thanks to all the list for helping and not feeling alone... It's a hobby for me, very important to cary on and may be translate things in french.

Le 21/06/2016 00:16, Gabriel Gellner a écrit :
Welcome by the way! I used to use Python a lot myself. Julia is great, but it does require a fair amount of extra learning due to its youth. I hope you get past the rocky start :)

```
using PyPlot
using PyCall
@pyimport scipy.integrate as integrate

function f(y, t)
    if t < 25
        return [y[2], -8*y[1] + 0.1*y[2]]
    elseif 25 < t < 45
        return [y[2], -8*y[1]]
    else
        return [y[2], -8*y[1] - 0.1*y[2]]
    end
end

t = linspace(0, 35, 1000)
y = [0.01, 0]
y1 = integrate.odeint(f, y, t)
plot(t, y1)
xlim(0, 35)
ylim(-0.2, 0.2)
```

This is what I would do to make your code work. Some of the issues was that you were using 0-based indexing (C like, python etc) so I just
changed all the lines that had things like y[0] -> y[1] and y[1] -> y[2].
Also you should be careful about following python idioms to closely in Julia. Doing things like
plt = PyPlot
is likely not the correct idea. I have shown what I consider idiomatic use of PyPlot would look like in this case.

Final question. Are you using the python integrators because you want the LSODE codes specifically? You could of course use the pure Julia package ODE.jl if you can deal with using a Runge-Kutta algorithm instead (Adams methods are coming soon!)

Here is your code using that package instead just for comparison (with some naming changes to be more awesome in my mind ;)
using ODE

```
using ODE

function f(t, y)
    if t < 25
        return [y[2], -8*y[1] + 0.1*y[2]]
    elseif 25 < t < 45
        return [y[2], -8*y[1]]
    else
        return [y[2], -8*y[1] - 0.1*y[2]]
    end
end

tspan = linspace(0, 35, 1000)
y0 = [0.01, 0]
t, y = ode45(f, y0, tspan)
plot(t, y)
xlim(0, 35)
ylim(-0.2, 0.2)
```

Good luck!

On Monday, June 20, 2016 at 1:41:41 PM UTC-7, Henri Girard wrote:

    y1 (odeint arrays has nothing inside) that's why there is an error
    but from what ?

    Le lundi 20 juin 2016 17:32:07 UTC+2, Henri Girard a écrit :

        I am trying to convert from python to julia, but I don't know
        how to use
        y1=integrate.odeint(f,t), apparently I should have add a
        derivativ ?

        --python----------------------
        from scipy.integrate import odeint
        def f(y,t):
            if t<25:
                return [y[1],-8*y[0]+0.1*y[1]]
            elif 25<t<45:
                return [y[1],-8*y[0]]
            else:
                return [y[1],-8*y[0]-0.1*y[1]]
        t=np.linspace(0,35,1000)
        # start from  y=0.01, y’=0
        y1=odeint(f,[0.01,0],t)
        plt.plot(t,y1[:,0])
        plt.title("Evolution temporelle")
        plt.xlabel("Temps t (s)")
        plt.ylabel("Intensite i (A)")
        plt.plot(0,0.01,"ro")
        #plt.savefig("RLC-demarrage.eps")
        plt.show()
        ----------ijulia----------------
        @pyimport scipy.integrate as odeint
        function f(y,t)
                  if t<25
                    return [y[1],-8*y[0]+0.1*y[1]]
                  elseif 25<t<45
                        return [y[1],-8*y[0]]
                  else
                        return [y[1],-8*y[0]-0.1*y[1]]
                  end
        end;
        t=linspace(0,35,1000)
        y=linspace(0.01,0)
        y1=integrate.odeint(f,y,t)


Reply via email to