2016-02-05 3 views
4

Я пытаюсь создать функцию в python, которая добавит кучу математических терминов вместе, которые включают некоторое произвольное имя переменной, которое будет оцениваться после того, как вся вещь была построена , Так, например,Создайте математическую функцию с переменной «dummy», которая будет оценена позже

def transform(terms, xterm): 
    function=.5 
    step=terms 
    odd=1 
    while step>0: 
     function+=(2/odd*np.pi)*np.sin(odd*np.pi*xterm) 
     odd+=2 
     step-=1 
    return function 

test=transform(10,somexvariable) 
print test 

Это серия Фурье для определенной функции, которую я должен был выполнять в своем классе механики.

В основном я хочу, на сумму условий (скажем 5), создать переменную, которая выглядит следующим образом:

function = .5 + (2/odd*np.pi)*np.sin(odd*np.pi*xvariable) +....... 

к однако многие термины, которые я хочу, где переменная «нечетным» является единственным числом это меняется.

Ключа и сложность этой проблемы вставив некоторые фиктивные переменную I под названием «xvariable» так, что позже я могу создать массив как это:

x2 = np.arange(0,10,.05) 
y = transform(2,x2) 

Результат будет массивом этих значений х оценивается в функции, которую я создал с помощью «transform».

Уверен, что я об этом поступил неправильно, но я не могу понять, какой порядок действий вы выполняете.

Помогите пожалуйста. Благодаря!

+0

Возможно, [ 'numpy.vectorize()'] (http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.vectorize.html) является то, что вы ищете для? – fjarri

+1

'. .5'' - это строка. '0.5' - это плавающий литерал. –

+0

Вы правы ... '.5' - это артефакт моей попытки другого метода ... просто забыл снять цитаты. –

ответ

2

Я считаю, что вы ищете functools.partial. Это позволяет вам создать функцию с некоторыми предварительно заполненными аргументами.

from functools import partial 

def sum_powers(x, terms): 
    result = 0 
    for term in terms: 
     result += term ** x 
    return result 

sum_squares = partial(sum_powers, x=2) 
sum_squares(terms=[1, 2, 3]) 
# 14 

sum_cubes = partial(sum_powers, x=3) 
sum_cubes(terms=[1, 2, 3]) 
# 36 
+0

Этот код не работает для меня. Я получаю сообщение об ошибке: sum_powers() получил несколько значений для аргумента ключевого слова 'x' –

+0

Обновлено, попробуйте сейчас –

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