我有一个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怎么办?
答案 0 :(得分:0)
有可能。在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中)对其的首次调用,因此可能无法获得需要检索的值。