2016-06-27 13 views
0

Gemäß meiner Sprachkenntnisse ist mein Code korrekt geschrieben. Aber es gibt mir keine richtige Lösung (Handlung). Als ich das gleiche System von ODEs in Mathematica gelöst hatte, habe ich die richtige Lösung und beide Lösungen sind völlig verschieden. Ich schreibe ein Forschungsprojekt, also brauche ich einen richtigen Code in Python. Könnten Sie mir bitte den Fehler meines Codes mitteilen? python code solution Mathematica solutionErgebnis der gekoppelten ODE in Python-Code unterscheidet sich von Mathematica

import numpy as np 
import matplotlib.pyplot as plt 
import scipy.integrate as si 
##Three system 
def func(state, T): 
    H = state[0] 
    P = state[1] 
    R = state[2] 
    Hd = -(16./3.)*np.pi*P 
    Pd = -4.*H*P 
    Rd = H*R 
    return Hd,Pd,Rd 
T = np.linspace(0.1,0.9,50) 
state0 = [1,0.0001, 0.1] 
s = si.odeint(func, state0, T) 
h = np.transpose(s) 
plt.plot(T,h[0]) 
plt.show() 

Mathematica Code

Clear[H,\[Rho],a] 
Eq1=(H'[t] == -16 \[Pi] \[Rho][t]/3) 
Eq2= (\[Rho]'[t] == -4 H[t] \[Rho][t]) 
Eq3 = (a'[t] == H[t] a[t]) 
sol=NDSolve[{Eq1,Eq2, Eq3, 
    H[0.1]==0.1, \[Rho][0.1]==0.1, a[0.1]==0.1}, 
     {H[t],\[Rho][t],a[t]}, {t,0.1, 0.9}] 
Plot[Evaluate[{H[t]}/.sol],{t,0.1,0.9}] 

enter image description here

+0

für Anfänger haben Sie eine andere Ausgangsbedingung und eine andere Zeit zu tun main, und dann bin ich mir sicher, dass du mehr als 10 Punkte brauchst, um irgendeine Art von Genauigkeit zu erhalten. Sie haben auch einen anderen Ausdruck für H '.. die Python-Version hat eine zusätzliche' 1/R^2 'Begriff – agentp

+0

Vertrauen Sie mir, ich habe es für 1000 Punkte sogar, und mit und ohne 1/R ** 2 –

+0

Ist es möglich um die Frage zu bearbeiten, kann ich Ihnen genau das gleiche wie Mathematica zeigen (es ist irrtümlicherweise falsch!) –

Antwort

0

Beide Codes sind richtig, ich mein Laptop nur ein- und ausgeschaltet es wieder, und es gibt mir das richtige Ergebnis (als Mathematica)