Интегралы Python - PullRequest
       36

Интегралы Python

2 голосов
/ 15 декабря 2010

Я пытаюсь решить интеграл от (2**(1/2)*y**(1/2)/2)**2 от 0 до 5 (также показано здесь ).Я использовал

func = lambda y: (  2**(1/2) * y**(1/2)/2  )**2 and a == 0 and b == 5
from scipy import integrate
integrate.quad(func, a b)

Почему-то я продолжаю получать значение 1,25, а Вольфрам говорит, что оно должно быть 6,25?Кажется, я не могу указать на ошибку.

ps извините за ошибку, katrie, я забыл, что python использует, а не && для логического И


решено: это глупая ошибка типа int / float.всем спасибо.

Ответы [ 3 ]

3 голосов
/ 15 декабря 2010

Хорошо, позвольте мне написать вашу функцию в обычной математической записи (я не могу думать в Python).Мне не нравится **, так как это сбивает с толку:

(2**(1/2)*y**(1/2)/2)**2      =>
(2^(1/2) * (1/2) * y^(1/2))^2 =>
2 * (1/4) * y                 =>
y / 2

Итак, интегрировать, антидифференцировать (я просто думаю вслух):

antidifferentiate(y / 2) = y^2 / 4

Поэтому

integral('y / 2', 0, 5) =
5^2 / 4 - 0^2 / 4 =
25 / 4 = 
6.25

Верно.Вы пытались заменить 1/2 на 0.5?Его можно интерпретировать как отношение двух целых чисел, которое округляется в большую сторону.

Попробуйте это (как предложили другие):

func = lambda y: (2**(0.5) * y**(0.5) / 2.0)**2.0 & a == 0 & b == 5

from scipy import integrate
integrate.quad(func, a b) # What's 'a b'? Maybe 'a, b' would work?

Удачи!

2 голосов
/ 15 декабря 2010

Проблема в том, что Python видит (1/2) и вычисляет его с целочисленным делением, получая ноль.

0 голосов
/ 15 декабря 2010

Ну, какое это должно быть значение?Кроме того, вы должны поставить больше скобок в вашем уравнении.Я понятия не имею, что будет проанализировано (2**(1/2)*y**(1/2)/2)**2.

...