#!/usr/bin/python
# -*- coding: utf-8 -*-   ## Baustelle: MUSS 1. oder 2. Zeile sein
# name myrb2_2.py            # MRies, 06/2015

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate
from matplotlib.widgets import Slider

def mydu(u, t, w,fminus,s, fplus ):    # t, da odeint das braucht
	                                   # Paramater wie in args=(.. ,)
	return np.array( [  w  * u[0] - ( fminus * u[1] ) * u[0] , 
	                   -s  * u[1] + ( fplus  * u[0] ) * u[1]   ])

w      = 3;                            # Wachstumsrate
fminus = 2;                            # Gefressen-Werden-Rate
s      = 1;                            # Sterberate
fplus  = 0.5;                          # Fressrate

t = np.linspace(0,10,300)              # 100 Punkte
u0 = np.array([1.1, 0.5] )             # Startwerte

u = integrate.odeint(mydu, u0, t, args=(w,fminus,s, fplus,) )
                                # args, am Ende ein Komma
fig = plt.figure(figsize=(7,10))       # width, heigt in inch

ax_1   = plt.subplot(3,1,1)
ax_1.set_ylim([0.0,10.0])

u1g,   = plt.plot(t, u[...,0],'g+')             # erste Spalte
u2g,   = plt.plot(t, u[...,1],'rx')             # zweite Spalte

ax_2   = plt.subplot(3,1,2)
ax_2.set_ylim([0.0,5.0])

u1u2g, = plt.plot(u[...,0], u[...,1],'bx')      # Phasenbild

#plt.subplot(3,1,3)
w_axis   = plt.axes([0.15,0.3,0.75,0.03]) # Rechteck
w_slider = Slider(w_axis, 'w', 0,10, valinit=3)

fminus_axis   = plt.axes([0.15,0.25,0.75,0.03]) # Rechteck
fminus_slider = Slider(fminus_axis, 'fminus', 0,10, valinit=2)

s_axis   = plt.axes([0.15,0.2,0.75,0.03]) # Rechteck
s_slider = Slider(s_axis, 's', 0,10, valinit=1)

fplus_axis   = plt.axes([0.15,0.15,0.75,0.03]) # Rechteck
fplus_slider = Slider(fplus_axis, 'fplus', 0,10, valinit=0.5)

def update(val):                         # muss val heißen
	#global w, fminus, s, fplus          # sonst in mydu nicht geändert
	w = w_slider.val                     # alternativ als args=(.. ,)
	fminus = fminus_slider.val           # in odeint-Aufruf
	s = s_slider.val
	fplus = fplus_slider.val
	
	u = integrate.odeint(mydu, u0, t, args=(w,fminus,s, fplus,) )

	u1g.set_ydata(u[...,0])
	u2g.set_ydata(u[...,1])
	u1u2g.set_data(u[...,0],u[...,1])
	plt.draw()

w_slider.on_changed(update)
fminus_slider.on_changed(update)
s_slider.on_changed(update)
fplus_slider.on_changed(update)

plt.show()