2016-11-16 3 views
2

나는 (f(t) * g(t))^a과 같은 간단한 방정식을 가지고 있는데, 여기서 a은 매개 변수이고 fg은 t의 함수입니다. 내가 복제하기 위해 노력하고있어 방법은Sympy가 값을 잘못 대체하는 이유는 무엇입니까?

  1. f(t), g(t), f'(t)으로 표현해야하는 t에 대한 표현을 차별화하고,`g '(t). 최대 위의 간단한 예에서, 그 결과 지금

    a * (f(t) * g(t))**(a - 1) * (f'(t) * g(t) + f(t) * g'(t)) 
    
  2. 해야한다, 우리는이 특정 문제에 대한 약간의 지식 하나 개의 특정 정상 상태 값 만에서, 우리가 알고 (경제 문제)를 사용 f(t)g(t)의 값을 갖는다. 그들이 f(tss) = 1이고 g(tss) = 100이라고 가정 해 봅시다. 여기에서 tss은 정상 상태 값이며, 임의로 tss = 7으로 설정합니다. 이들은 이고 f와 g의 일반적인 기능적 형태는 아닙니다입니다.

  3. 일단이 값으로 대체하면 두 개의 미지수가있는 수식이 있습니다. f'(tss)g'(tss)의 값입니다. 이 시점에서 파생물인지 아닌지는 중요하지 않습니다. 그들은 단지 미지의 것이고 다른 방정식도 있습니다.이 방정식과 결합하면 scipy.optimize.fsolve 또는 sympy의 해법 중 하나를 사용하여 해결할 수있는 비선형 시스템을 제공합니다.

질문은 제가 1 단계와 2 단계에서 멈췄습니다. 아래 코드는 값을 올바르게 대체하지 않는 것 같습니다.

from sympy import * 
t = symbols('t') 
a = symbols('a') 
f, g = symbols('f g', cls=Function) 
eq = (f(t) * g(t))**a 
eq_diff = eq.diff(t) 
output = eq_diff.evalf(subs={f:1, g:100, a:0.5}) 
output 

이 전혀 값을 대체하지 않는 ![derivatives

출력한다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

다시 말하지만, 이것은 단순한 수학적 예일 뿐이지 만 문제를 잘 보여줍니다.

+0

'd '는 어디에서 왔습니까? – user2357112

+0

@ user2357112 Typo. 나는 그것을 고쳤다. 값은 여전히 ​​올바르게 대체되지 않습니다. –

답변

1

은 당신이 뭔가를 할 수 있습니다 :

fd, gd = symbols('f_d, g_d') #values of steady-state derivatives 
output.subs({f(t).diff(t):fd, g(t).diff(t):gd, f(t):1, g(t):100, a:Rational(1,2)}) 

5*f_d + g_d/20

+0

대체 구문에 대한 [기타 대답] (http://stackoverflow.com/a/40626765/2766558)이 맞지만 파생어를 대체하기 위해 아이디어를 확실히 사용하고 있습니다. 그러면 제 시스템에 연결하는 간단한 방정식이 생깁니다. 고맙습니다! –

1

sympy 1.0 문서는 다수의 대체 용 튜플에서 보여 저 심볼 변수 대한 교체를 수행

output = eq_diff.subs([(f, 1), (g, 100), (a, 0.5)]) 

를 상기 F, g 기대 이유

그래도 대체 할 함수 이름은입니까?

0

설정 단지 함수 이름 f 그것을 대체하지 않습니다. {f(t): 1} 또는 {f(t).diff(t): 1}과 같이 전체 표현식이 필요합니다 (전자는 미분을 0으로 대체합니다).

관련 문제