LINUX.ORG.RU

Python: «склейка нескольких» ф-ций в одну


0

1

Есть, например, ф-ция y = (5*f + x)^n, где x и n - переменные. Эта ф-ция в другой Int1 находится под интегралом. Проблема в том, что при одном вызове x,n может быть несколько, тогда под интегралом должно стоять произведение этих ф-ций!!! _не_их_значения_ со своими параметрами. Например, (параметры передаю ввиде списка - первый x, второй - n) передаю в Int1 [ [2,3], [4,5] ], значит надо под интегралом как бы «склеить» путем произведения ф-ции (чтоб не вычислялись их значения) с разными x,n - ((5*f + 2)^3)*((5*f + 4)^5).


Ответ на: комментарий от anonymous

Что, ещё один победитель. Я вот сижу и думаю, зачем я это всё сделал, потратил 20 минут, а? )

Zorn
()
Ответ на: Финал от Zorn

int(x*(2*x+2)^2,x) при x = 1 = int(4*x^3+8*x^2+4*x,x) x = 1, = 17/3

int [(1,0,1), (2,2,2)] -> [0.0,2.0,2.6666666666666665,1.0] эм... коэф. при x должен быть 0 же, не-а?

// дык не настолько сложная задача, чтобы лисп успел развернуться))

anonymous
()
Ответ на: комментарий от Zorn

Это, кстати, хацкель?

Он самый, и у меня ^n - топорно: отдельно множители, так-то кошернее т-ик Паскаля.

anonymous
()
Ответ на: комментарий от anonymous

После интегрирования 0, да. Я показал, что будет, когда запустить эту функцию при x = 1

Там будет x^4 + 8/3*x^3+2*x^2, подставляешь, получим 1+8/3+2 = 17/3

Ну ты как заметил, там лямбда возвращается, можно использовать как полноценную функцию.

// дык не настолько сложная задача, чтобы лисп успел развернуться))

ИМХО, хацкель сложнее, хотя я его не знаю, лол)

Zorn
()
Ответ на: комментарий от Zorn

Я показал, что будет, когда запустить эту функцию при x = 1

Точно, там int() снаружи еще был, пардон - не заметил.

там лямбда возвращается, можно использовать как полноценную функцию.

В данном случае ф-ия определяется лишь набором коэффициентов, ежели можно проще, почему нет?)

ИМХО, хацкель сложнее, хотя я его не знаю, лол)

В том смысле, что если бы коснулось символьных вычислений, перезаписи термов в общем виде и et cetera, хаскелл бы сильно не помог (по-крайней мере мне).

anonymous
()
Ответ на: комментарий от anonymous

В данном случае ф-ия определяется лишь набором коэффициентов, ежели можно проще, почему нет?)

Можно представить списком, только ТС'у вроде нужны были значения при конкретных x, ну вот я и сделал так.

Zorn
()
Ответ на: комментарий от drZlo

Такого чтоли хочешь?

def make_foo((x,n)):
    return "((5*f + %i)**%i)" % (x,n)


def make_n(*args):
    if len(args) > 0:
        return reduce(lambda s,t: "%s * %s" % (s,t), map(make_foo, args))

f=5

tmp=make_n((2,2),(2,3),(2,4))

tmp

'((5*f + 2)**2) * ((5*f + 2)**3) * ((5*f + 2)**4)'

exec(«t=%s» % tmp)

t

7625597484987

Norgat ★★★★★
()
Ответ на: комментарий от Zorn

Скажите, а в питоне нормально всюду сувать exec? А в вашем примере почему бы не использовать замыканий?

Автор хочет «символьное интегрирование». Ему нужно раскрывать список пар чисел в последовательность вида ((5*f + x1)**n1) * ((5*f + x2)**n2) * ((5*f + x3)**n3) и скармливать интегрирующей фиговине, причём в рантайме. Если я всё правильно понял, то замыкания тут не прокатят, т.к. они дадут лишь f1 * f2, да и то, через reduce, а нужна формула, а не функции.

Norgat ★★★★★
()
Ответ на: комментарий от Norgat

а нужна формула, а не функции

Собственно выше я уже предоставил решение. Там я представляю результат в виде списка с коэффициентами полинома полинома, а со строками мало что сделаешь (если у тебя нет в рукаве чего-то что интегрирует функции в таком строковом представлении)

Zorn
()
Ответ на: комментарий от Zorn

ты кажысь и в функции предоставил. Только это для 10 утра приколы.

Хотя лично я считаю надо это как нафтизин применять. Хоть раз в неделю. Чтоб PHP не заболеть.

Надо сделать Wiki какой по такому. Хаскеля я тоже не распарсил. Там запись несколько странна.

demmsnt
()
Ответ на: комментарий от demmsnt

Ну да, предоставил. Только я не понял, что ТС'у надо, функция или строка. Строку не ясно как интегрировать, + exec/eval ИМХО дурной тон

Zorn
()
Ответ на: комментарий от Zorn

Да и ф-цией, как demmsnt подсказал, и строкой нормально. Всем спасибо !

drZlo
() автор топика
Ответ на: комментарий от drZlo

Это обычная свертка, в чем проблема?

anonymous
()
Ответ на: комментарий от quasimoto

Этого можно избежать с ФВП.

Нельзя.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.