2017-01-25 15 views
1

Ich arbeite gerade an einer Reihe von Codes, die ich benutze, um eine gewöhnliche Differentialgleichung zu lösen ... Mein Code funktioniert, aber ich möchte ihn modifizieren können um die Differentialgleichung für eine Menge verschiedener konstanter Werte zu lösen. Das habe ich zur Zeit, und wenn ran funktioniert.Plotten löste gewöhnliche Differentialgleichungen über sich ändernde konstante Werte

import numpy as np 
from scipy.integrate import odeint 
import matplotlib.pyplot as plt 

def f(w, x): 
    # d1 = omega lambda 
    d1 = w 
    b2 = 0.0 

    # 0.2<c<1.4, 0.20 increments 
    c = 0.2 

    q = (1 - d1 - (2*((d1**1.5)/c)))/(2 + (3*(b2)))  

    f = (d1**2) * (1 - d1) * ((1/d1) + (2/(c * (d1**0.5))) - ((3 * b2 * q)/(d1 * (1-d1)))) 
    return f 

#determine domain, x 
x = np.linspace(-80, 80, 1000001) 

d1 = 10 ** -8 

sol = odeint(f, d1, x) 

plt.xlabel("x") 
plt.ylabel("Omega Lambda") 
plt.plot(x, sol, 'r') 
plt.show() 

jedoch Ich möchte einen Graph konstruieren, die jeder Zeile besteht, die einen Satz von verschiedenen Werten von C erzeugen würde ... die Cs Ich mag würde eine grafische Darstellung der produzieren, sind:

c = 0.2,0.4,0.6,0.8,1.0,1.2,1.4 
+0

(1) Machen Sie 'c' eine globale Variable in der Funktion' f' ('global c'). (2) Führe die 'sol = ...' und 'plt.plot ...' Zeilen deines Codes in eine 'for' Schleife mit' c'. – DyZ

Antwort

-1
import numpy as np 
from scipy.integrate import odeint 
import matplotlib.pyplot as plt 

def f(w, x , b2 , c): 
    # d1 = omega lambda 
    d1 = w 


    # 0.2<c<1.4, 0.20 increments 
    #c = 0.2 

    q = (1 - d1 - (2*((d1**1.5)/c)))/(2 + (3*(b2)))  
    f = (d1**2) * (1 - d1) * ((1/d1) + (2/(c * (d1**0.5))) - ((3*b2*q)/(d1*1-d1)))) 
    return f 

#determine domain, x 
x = np.linspace(-80, 80, 1000001) 

d1 = 10 ** -8 
b2 = 0.0 
c = [ 0.2,0.4,0.6,0.8,1.0,1.2,1.4 ] 
for i in c: 

    sol = odeint(f, d1, x, args = (b2 , i)) 
    plt.xlabel("x") 
    plt.ylabel("Omega Lambda") 
    plt.plot(x, sol, 'r') 
    plt.show() 
Verwandte Themen