2017-08-17 47 views
0

我有一個系統的常微分方程與外部確定性輸入(控件)和隨機分量。除了初始狀態,我怎樣才能安全地(執行好的代碼樣式)通過tf.contrib.integrate.odeint()將這些額外的輸入參數傳遞給方程?如果有這樣的做法。或者在外部範圍內定義它們並從等式函數中引用它們是迄今爲止唯一的方法?我怎樣才能傳遞額外的輸入參數odeint函數TensorFlow

+0

你能構建一個非常簡單的例子問題,並添加到你如何試圖解決它的問題?像'x'= Ax + Bu + Cz',控制和'z'有一些噪音。 – LutzL

回答

0

我嘗試使用odeint求解器模擬Hindmarsh-Rose模型時遇到同樣的問題。我想在等式中注入一個電流,但不知道如何去做。 這裏一個基本的例子後:

import numpy as np 
import tensorflow as tf 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 

## Model parameters 
# v' = u - a.v^3 + b.v^2 + I -z 
# u' = c - d.v^2 -u 
# z' = epsilon_z.(s.(v-v0)-z 

#parameters for v and u terms 
a = 1.0 
b = 3.0 
c = -3.0 
d = 5.0 
v0 = -1.4 
s = 4.0 
epsilon_z = 0.002 

# init tensions 
v_init = -3.0 
u_init = 0.0 
z_init = +0.9 

#injected current that is currently fixed 
Id = 5 

# What I would like to do : 
# def I(t): 
# if 0.0 <= t < 300.0: 
#  return 0.0 
# elif 300.0 <= t < 1700.0: 
#  return Iech 
# return 0.0 

def HR_equation(state, t): 
    v, u, z = tf.unstack(state)  
    dv = -a * v*v*v + b * v*v + u - z + I 
    du = -d * v*v - u + c 
    dz = epsilon_z * (s*(v - v0)- z 
    return tf.stack([dv, du, dz]) 

init_state = tf.constant([v_init, u_init, z_init], dtype=tf.float64) 

t = np.linspace(0, 2000, num=5000) 
tensor_state, tensor_info = tf.contrib.integrate.odeint(HR_equation,   
init_state, t, full_output=True) 

sess = tf.Session() 
state, info = sess.run([tensor_state, tensor_info]) 
v, u, z = state.T 
plt.plot(v, u) 
相關問題