Comment résoudre une équation intégrale en python?
J'essaie de résoudre cette équation intégrale à l'aide de Python:
lorsque z varie de 0 à 1.
La scipy.quad fonction fournit la solution numérique pour un certain intervalle, mais il ne fournit pas la solution sur l'intervalle.
def f(z,Om,Ol): return 1./p.sqrt((1+z)**2 * (1+Om*z) - z*(2+z)*Ol)
quad(lambda r:f(r,Om,Ol),0,1)
(0.77142706642781111, 8.5645609096719596e-15)
Mais je ne sais pas comment faire pour en obtenir un vecteur dans cet intervalle, que vous obtenez lors de l'utilisation de scipy.odeint pour résoudre une équation différentielle.
Dans l'autre main, sympy.intégrer pouvez pas le faire. Je reçois un débordement de pile. De Plus, je ne peux pas comprendre comment remplacer les symboles par une liste,c'est à dire:
sy.integrate(x**2,x).subs(x,1)
1/3
sy.integrate(x**2,x).subs(x,[1,2])
TypeError: unhashable type: 'list'
La question est donc: est-ce que quelqu'un sait comment résoudre une équation intégrale à l'aide de python?
bienvenue à débordement de pile
comme vous parlez d'une équation intégrale: Quelle est la valeur que vous recherchez ? Voulez-vous obtenir z1 pour un D_L ?
Vous avez un z avant de l'intégrale, est-ce une faute de frappe ?
Je ne peux pas comprendre comment utiliser linalg pour résoudre une équation intégrale.
OriginalL'auteur Illa Rivero Losada | 2011-08-23
Vous devez vous connecter pour publier un commentaire.
Je comprends que vous voulez résoudre une équation différentielle
dF/dz1 = f(z1, Om, Ol)
et souhaitezF(z1)
à différents endroits. Si c'est le cas, alors la Équation Différentielle ordinaire (ODE) routines de SciPy sont la voie à suivre. Vous pourriez vérifierodeint()
, en particulier, comme il peut vous donner les valeurs de votre intégrale à des endroits que vous spécifiez.Rivero Losada: Merci. Êtes-vous essayer d'avoir Python trouver un des formules analytiques pour l'intégrale? "La résolution d'une équation intégrale", en fait, a un sens très précis (en.wikipedia.org/wiki/Integral_equation), ce qui ne semble pas s'appliquer à votre question. Si vous êtes à la recherche d'une solution analytique, un bon endroit pour poser cette question serait mathoverflow. Le cas ΩM = 0, c'est faisable (en.wikipedia.org/wiki/List_of_integrals_of_irrational_functions), mais je ne suis pas sûr au sujet du cas général...
OriginalL'auteur Eric O Lebigot
Je suppose que le z avant de l'intégrale est une faute de frappe qui devrait être z1, et vous êtes à la recherche pour le z1 donné DL.
D'abord, vous avez à mettre en œuvre la droite (rhs):
Maintenant, vous devez trouver un z0 tel que rhs(z1, ...) = DL, qui est le même que
Ce qui signifie que votre problème est réduit à trouver le zéro (il y a un seul, parce que rhs est monotone), de
Ici vous pouvez appliquer plusieurs méthodes pour la recherche de racines (voir http://en.wikipedia.org/wiki/Root-finding_algorithm) à partir de http://docs.scipy.org/doc/scipy/reference/optimize.html#root-finding
OriginalL'auteur rocksportrocker
Dans le sympy section des exemples, http://docs.sympy.org/0.7.1/modules/integrals.html, ils montrent des solutions à presque identique problèmes. Vous pouvez poster votre sympy code?
Pour scipy, avez-vous essayer d'utiliser un tuple, qui est hashable, au lieu d'une liste? par exemple:
OriginalL'auteur Profane
J'ai finalement utilisé le "quad" de la fonction avec une déclaration à résoudre mon problème:
Merci à tous pour vos idées, ils ont été vraiment utiles.
OriginalL'auteur Illa Rivero Losada