Как я могу заменить вывод функции на значения? - PullRequest
0 голосов
/ 03 октября 2019

Функция, которая включает в себя производное, например:

df = -2 * x * y (x) * Производное (y (x), x) - y (x) ** 2

У меня есть значение производного (y (x), x), но я не знаю, как использовать

x= sp.symbols('x  ')
y=sp.Function("y")(x)
f = sp.Function("f")(x,y)

f = -x*y**2

f_num = f.subs([(y,1),(x,2)])

df = sp.diff(f,x)

# I have to calculate df_num value by using(subs) respect 
x,y,Derivative(y(x), x)

спасибо всем, кто помогает

Ответы [ 3 ]

1 голос
/ 04 октября 2019

Обыкновенное дифференциальное уравнение дает мне f, и я попытался решить эту проблему численно, используя кубическое разложение в ряд Тейлора (TS3). Начальные значения известны x = 2 и y = 1, и мы пытаемся найти значения функции при x = 2.5.

x= sp.symbols('x ')
y=sp.Function("y")(x)
f = sp.Function("f")(x,y) # f is actually y'(derived of y )
x0 = 2
y0 =1
f = -x*y**2  # ordinary differential equation and its derivatives line 33 to 35
df = sp.diff(f,x)
dff = sp.diff(f,x,2)
y_num = []
h = 0.1 # step size
k = 0
while x0<2.5:
    f_num = f.subs([(y,y0),(x,x0)])

    df_num = df.subs(y.diff(x),f_num).subs([(y,y0),(x,x0)])

    dff_num = dff.subs(y.diff(x,2),df_num).subs(sp.Derivative(y, 
    x),f_num).subs([(y,y0),(x,x0)])

   y_num.append(y0 + h*f_num + h**2/2*df_num+h**3/6*dff_num)

   y0 = y_num[k]
   x0 = x0+h
   k=k+1
print(x0)
print(y_num)

Я не знаю, является ли это полезным постом, или я могу выразить себя правильно, носпасибо за интерес и ответы

0 голосов
/ 04 октября 2019

Вы должны быть осторожны при выполнении подпрограмм, когда присутствуют производные и функции. Краткий ответ:

df = f.diff(x)
df_num = df.subs([(y.diff(x),1), (y,1), (x,2)])

, где производная (которая зависит от y) выполняется до y, а y (зависит от x) - до x.

Дополнительные комментарии: 1) обратите внимание, что вы определяете f как f (x, y), а затем сразу же определяете его как выражение -x*y**2;первое определение не обязательно. 2) вы определяете f_num, но это не влияет на вычисление числового значения df.

0 голосов
/ 04 октября 2019

Это делает то, что вы имеете в виду?

import sympy as sp

x= sp.symbols('x')
y=sp.Function("y")(x)
f = sp.Function("f")(x,y)

f = -x*y**2

f_num = f.subs([(y,1),(x,2)])

df = sp.diff(f,x)
df = df.subs(sp.diff(y,x),1)

sp.pprint(df)
...