如何使用PyFMI定义依赖于模拟FMU输出的输入函数?

时间:2019-06-24 11:12:19

标签: python fmi

我有一个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怎么办?

1 个答案:

答案 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中)对其的首次调用,因此可能无法获得需要检索的值。

相关问题