2017-05-25 15 views
4

这是一个相当普遍的问题。我试图根据实验测量的数据验证Modelica模型。在过去,我只是简单地添加了CombiTable,并将数据复制到组件中。但是,我将使用至少15列我希望匹配和比较的数据。用于校准和验证Modelica模型的测量和模拟数据比较的方法

我的问题是,您推荐什么方法,提示和技巧来比较测量和模拟数据,以便于校准和验证Modelica模型?

+1

更多选项或至少收集什么是可以在这里找到:https://stackoverflow.com/questions/36157220/unit-testing-modelica-component-library – Christoph

回答

2

我一直好奇别人是怎么做到这一点,以及...

对我来说,我创建了我把我所有的例子,做了回归测试,并吐出了上通报告的模型/失败。 “正确的”数据可以从combiTable中输入(可以根据需要选择多个维度),也可以直接作为输入变量。

回归测试是一个函数,它带有一个容差的数组。

当然,您可以使用mat文件结果(如BuildingsPy)或两者都可以将Modelica之外的东西带到Python等。

下面是代表什么对我来说,到目前为止的工作:

model TestCheck 

parameter Integer n "Length of variable vector"; 
parameter Real tolerance = 100; 

input Real[n] x_1 "Values of interest" annotation(Dialog(group="Input Variables:")); 
input Real[n] x_2 "Reference values" annotation(Dialog(group="Input Variables:")); 

Real passedTest "if 0 (false) then expected and actual values do not match within the expected error"; 

Real Error_rms "Root Mean Square error sqrt(sum(Error_abs.^2)/n)"; 
Real[n] Error_abs "Absolute error (x_1 - x_2)"; 
SIadd.nonDim[n] Error_rel "Relative error (x_1 - x_2)/x_2"; 

Boolean allPassed(start=true); 

equation 

    (Error_rms,Error_abs,Error_rel,passedTest) = ErrorTestFunction(x_1,x_2, tolerance); 

when passedTest < 1 then 
    allPassed = false; 
end when; 
end TestCheck; 
+0

嗨斯科特,非常有趣代码块。这是一个很好的检查,非常有用。您可能会发现Modelica中的'assert'函数可以很好地处理您的'passedTest'和'allPassed'变量。 –

+0

确实。不过,我还有一些额外的代码,它不会将输出发送到一个文件,然后每天晚上检查版本控制。但是,也许警告状态的断言会很有用......我也有一个红色vs绿色,在gui上显示视觉阙。 –

+0

Scott,您是否参加过上一次北美Modelica用户组会议?我记得你的介绍!你有没有任何资源可供在线参考? –

1

对于模型校准和验证,我们把模型输出到FMU和其他工具做到了,我们成功地使用例如MATLAB或Mathematica。

在过去的大学研究项目中,我们开发了基于集合边界估计复杂模型的模型参数的工具。从MATLAB优化工具箱借用的遗传算法尝试几十到几千次仿真,以获得尽可能接近的结果。后端.NET,前端HTML 5,通过REST API进行的Javascript + Jquery通信,独立的计算节点通过REST API暴露FMU。有限的演示在app.physiovalues.org