2015-04-23 4 views
0

У меня есть 2D кривой Rho (т)SymPy: заменой функции в выражение

import sympy as sy 

t = sy.Symbol('t', is_real=True) # curve parameter 
rho_x = sy.Function('rho_x', is_real=True)(t) 
rho_y = sy.Function('rho_y', is_real=True)(t) # components 
rho = sy.Matrix([rho_x, rho_y]) # curve vector 
tau = rho.diff()/rho.diff().norm() # tangent 

после того, что я хочу, чтобы оценить параметры кривой для конкретной реализации:

real_shape = {rho_x: sy.sin(t), rho_y: sy.cos(t)} 
f1 = tau.subs(real_shape) 
print f1 
f2 = sy.lambdify(t, f1) 
print f2(0.1) 

я обнаружил, что SymPy автоматически не оценивает производные функций синуса и косинуса, а после звонка print f2(0.1) появляется сообщение об ошибке:

Что не так в моем примере?

ответ

1

Вы можете позвонить по телефону doit(), чтобы оценить его.

In [49]: f1 = f1.doit() 

In [50]: f2 = lambdify(t, f1) 

In [51]: print f2(0.1) 
[[ 0.99500417] 
[-0.09983342]] 

Также обратите внимание, что вы неправильно устанавливаете допущения. Реальное допущение на t должно быть следующим:

In [52]: t = Symbol('t', real=True) 
+0

Большое спасибо. Но мне нужно было оценить выражение для каждого компонента матрицы: f1 = [e.doit() для e in f1] Код f1 = f1.doit() не работал ... Еще одна вещь print f1 [cos (t)/sqrt (sin (t) ** 2 + cos (t) ** 2), -sin (t)/sqrt (sin (t) ** 2 + cos (t) ** 2) ] –

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