如何使用 PyFMI 定义依赖于模拟 FMU 输出的输入函数?
How to define an input function that depends on an output of the simulated FMU using PyFMI?
我有一个 FMU 可以使用 PyFMI 进行模拟。如何创建依赖于模拟 FMU 输出的输入函数?该文档仅提供依赖于外部变量的输入函数的示例,例如:
# Generate input
t = N.linspace(0.,10.,100)
u = N.cos(t)
u_traj = N.transpose(N.vstack((t,u)))
# Create input object
input_object = ('u', u_traj)
# Simulate
res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})
如果我希望我的输入函数 u_traj 依赖于模型的输出 'y' 而不是 t,我该怎么办?
有可能。在 PyFMI 中,允许将输入指定为函数而不是数据矩阵。
model = load_fmu(...)
def input_function(t):
global model
#Get values from the model using e.g. "model.get("my_parameter")"
p = model.get("my_paramater")
return t*p
input_object = ("u", input_function)
res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})
但正如我在评论中所说,这必须小心完成,因为它可能会创建循环并使问题无法解决。这也可能是因为您可能需要保护(在 input_function 中)第一次调用它,因为模型可能尚未初始化,因此您需要检索的值可能不可用。
我有一个 FMU 可以使用 PyFMI 进行模拟。如何创建依赖于模拟 FMU 输出的输入函数?该文档仅提供依赖于外部变量的输入函数的示例,例如:
# Generate input
t = N.linspace(0.,10.,100)
u = N.cos(t)
u_traj = N.transpose(N.vstack((t,u)))
# Create input object
input_object = ('u', u_traj)
# Simulate
res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})
如果我希望我的输入函数 u_traj 依赖于模型的输出 'y' 而不是 t,我该怎么办?
有可能。在 PyFMI 中,允许将输入指定为函数而不是数据矩阵。
model = load_fmu(...)
def input_function(t):
global model
#Get values from the model using e.g. "model.get("my_parameter")"
p = model.get("my_paramater")
return t*p
input_object = ("u", input_function)
res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})
但正如我在评论中所说,这必须小心完成,因为它可能会创建循环并使问题无法解决。这也可能是因为您可能需要保护(在 input_function 中)第一次调用它,因为模型可能尚未初始化,因此您需要检索的值可能不可用。