Нечто подобное - PullRequest
       10

Нечто подобное

0 голосов
/ 01 мая 2020

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

import numpy as np
f = lambda x,t : np.cos(t)

Теперь я хочу получить символическое выражение c для f (конечная цель - получить примитив этой функции f). Так что

import sympy as sym
x_s = sym.Symbol('x')
t_s = sym.Symbol('t')
sym.integrate(f(x_s,t_s), t_s)

Но это не с ошибкой:

TypeError: l oop из ufun c не поддерживает аргумент 0 типа Symbol, который не имеет вызываемого cos method

Я хочу иметь возможность перевести любое выражение закрытой формы в sympy.

Спасибо.

Редактировать: Что я пытаюсь достичь в конце является численное решение PDE с помощью Dedalus. На данный момент мне просто нужно линейное уравнение диффузии реакции с непостоянными коэффициентами. Эта функция f (x, t) является одним из коэффициентов. Поскольку уравнение является линейным, у меня есть аналитическое решение c, которое является функцией, зависящей от примитива относительно t этой функции f (x, t). Поэтому я хочу ввести функцию f (x, t) в одном месте, а затем использовать ее для построения численного решения (в этом случае мне просто нужно вызвать решение f (x, t), а также решение analyti c (в этом случае мне нужно вызвать примитив f (x, t)).

Итак, суть: мне нужно определить лямбда-функцию, которая зависит от 2 аргументов x и t для следующей цели:

1) вычислить значения, заданные x и t. 2) преобразовать это определение функции в текст, который будет использоваться для решения числового уравнения с использованием dedalus (и заменить каждую ссылку на sym на np, иначе dedalus выдаст ошибку). 3) быть в состоянии получить примитив этой функции (поэтому я использую sympy) и затем определить лямбда-функцию этого примитива для вычисления значений для получения аналитического решения.

1 Ответ

0 голосов
/ 01 мая 2020

Вы получаете ошибку, потому что numpy`s не совместим с sympy.Symbol. Чтобы избавиться от этой ошибки, вы должны переписать свою лямбду следующим образом:

import sympy as sym
f = lambda x,t : sym.cos(t)

Де-лямбдификация выполняется следующим образом:

x_s = sym.Symbol('x')
t_s = sym.Symbol('t')
sym.integrate(f(x_s,t_s), t_s)

Когда вы вызываете f, она возвращает функцию sympy cos , PS Проверьте, действительно ли вам нужен параметр x в функции f. Итак, полный код будет:

import sympy as sym

f = lambda x,t : sym.cos(t)
x_s = sym.Symbol('x')
t_s = sym.Symbol('t')
sym.integrate(f(x_s,t_s), t_s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...