2016-11-09 9 views
-1
def nu(r): 
    '''Returns the stellar density function.''' 
    return 1/(r * (1 + (r/a))**3) 

    mass_int = lambda r: 4 * r**2 * nu(r) 
    print(mass_int(0)) 

Это дает мне деление на нулевую ошибку, по-видимому, из-за того, что 1/r-член оценивается изолированно. Использует ли sympy, чтобы сформировать правильное алгебраическое выражение, единственный способ этого? Кажется абсурдным.Избегание деления на нулевую ошибку в функции с отменой переменных

ответ

4

Это не делает ничего плохого. Учитывая r = 0:

1/(r * (1 + (r/a))**3) 
= 1/(0 * (1 + (0/a))**3) 
= 1/(0 * (1 + 0 )**3) 
= 1/(0 *  1  **3) 
= 1/(0 *   1  ) 
= 1/0 

Так что, когда вы просите nu(0) вы получите сообщение об ошибке. Он не смотрит в будущее и делает специальные вещи алгебры, он просто порождает ошибку. Python - это не волшебство, это не абсурдно, что для этого вам понадобится sympy.

Предлагаю вам добавить специальный футляр для mass_int для r == 0.

+0

действительно, возможно, попытка/исключение ZeroDivisionError может помочь здесь ... –

0

Это не вопрос python или даже вопрос программирования. Это простая математика.

f(x) = 1/(x * (1 + x/a)**3) 
g(x) = 4x**2 

h(x) = 4x/(1 + x/a)**3 

Существует ли разница между f (g (r)) и h (r)? Есть конечно. Несмотря на то, что графики выглядят точно так же, f (g (0)) не определено, а на графике должно отображаться как точечный разрыв.

Как интеллектуальный пользователь этой функции, вы можете узнать, что существует точечный разрыв. Если вы выберете, вы можете заменить f (g (r)) на h (r). Единственное различие будет иметь желаемую функцию, определенную в 0.

Математика не делает этого самостоятельно, а нет языка программирования уменьшит состав функций для вас самостоятельно, если вы не спросите это, потому что вы пользователь, и вы должны знать, чего хотите от программы. Если вы создадите композицию функций с разрывом точки, ожидается, что вы сделали это по какой-то причине. Ожидается, что интеллект будет в программисте, а не в компиляторе. Либо составляйте и уменьшайте функцию самостоятельно, либо делайте что-то вроде симпатии. В любом случае, вы должны сделать это явным для компьютера, что эти две функции должны быть связаны друг с другом.

 Смежные вопросы

  • Нет связанных вопросов^_^