Вычисление легендарных полиномов, обучение

Я пытаюсь решить это упражнение из курса, который нашел в Интернете. (если вы узнаете вопрос, скажите мне, что вы думаете о курсе). Я ищу, как решить эту проблему, но у меня все еще возникают ошибки в моих вычислениях, и я думаю, что это в основном потому, что я не уверен в том, каким будет результат, а также как написать определенные части функции. Я смиренно приму любое любезное объяснение и совет, мне еще предстоит пройти долгий путь, так что я буду рядом.

Вот вопрос,

Полиномы Лежандра определяются:

????????(????)=∑????????=0(−1)????(2????−2????)!2????????!(????−????)!(????−2????)!????????−2????

где ???? = ???? / 2, если n четное, или (???? − 1) / 2, если ???? нечетное. ????! означает "факториал m", например 4! = 1 * 2 * 3 * 4 = 24. Вы можете вычислить это так: из математики import factorial factorial (4) 24

Вот полезная функция для вычисления ????:

import numpy as np
def M(n):
    if np.mod(n, 2) == 0:  # this means n is even.
        return int(n / 2)
    else:
        return int((n - 1) / 2)

Напишите функцию, которая вычисляет P (x, n), и постройте график функции для n = 3 и n = 4 в диапазоне от x = -1 до x = 1.

import scipy as sp
P_tot = []
x = np.linspace(-1,1,10)
n = [3,4]
def P(x,n):
    return ((-1)**M(n))*((factorial(2*n-2*M(n)))/((2**n)*factorial(M(n))*factorial(n-M(n))*factorial(n-2*M(n))))*(x**(n-2*M(n)))
x = np.linspace(-1,1,10)
n = [3,4]
Px,pn = P(x,n)
P_tot += [Px,pn]

ValueError Traceback (последний вызов последнего ValueError: истинное значение массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()

Не могу дождаться, чтобы увидеть, как легко это было, и что я упустил.

Спасибо за ваше время.


person Ruben Alfonso Casillas Pacheco    schedule 12.03.2020    source источник
comment
Вы передаете n = [3, 4] if np.mod(n, 2) == 0. Чего вы ожидали от этого?   -  person mkrieger1    schedule 12.03.2020
comment
Обычным способом записи M(n) было бы просто n//2 (при условии, что n является массивом int или NumPy с целочисленным dtype). Однако это не сработает, если n - это список целых чисел; сначала конвертируйте в массив NumPy, если вы действительно хотите работать с несколькими n одновременно. (Хотя, вероятно, проще оставить n скаляр повсюду и сгенерировать графики для n=3 и n=4 в двух отдельных вызовах.)   -  person Mark Dickinson    schedule 14.03.2020