【发布时间】:2019-04-08 13:31:07
【问题描述】:
TL;DR:如何在 Matlab 中管理自定义仿真运行?详细问题在最后。
我正在使用 matlab,我在其中创建了一些代码来检查各种参数对模拟系统的影响。它有很多输入和输出,但 MWE 是:
function [number2x,next_letter] = test(number, letter)
number2x = number * 2;
next_letter = letter + 1;
disp(['next letter is ' next_letter])
disp(['number times 2 is ' num2str(number2x)])
end
如果这就是所有要测试的内容,则此方法有效。然而,随着时间的推移,必须添加多个新的输入和输出。此外,由于经过测试的参数数量不断增加,因此必须创建某种日志:
xlswrite('testfile.xlsx',[num2str(number), letter,num2str(number2x),next_letter],'append');
另外,由于计算需要几个小时,并且应该在夜间运行,因此必须同时启动多个参数集。这很容易通过[x1,y1] = test(1,'a');[x2,y2] = test(2,'b'); 在一行中完成,或者在旧任务仍在运行时添加新任务。但是,这样您就无法跟踪有多少仍处于打开状态。
所以总的来说,我需要某种测试框架,它可以跟上不断变化的输入和输出,跟踪已经完成的计算,理想情况下还可以处理开放运行。
我觉得我不能是唯一一个面临这个问题的人,事实上我认为很多人都面临这个问题,以至于 Mathworks 已经想出了一个解决方案。
对于 Simulink,这是以 Simluationmanager 的形式完成的,但对于 Matlab 函数,我发现最接近的是 Testing framework(下面的示例),这似乎是用于软件开发和调试,而不是用于我正在尝试什么。并且在某个时候似乎有3rd party solutions,但他们不再继续支持这个测试框架。
function solutions = sampleTest
solutions = functiontests({@paramtertest});
end
function paramtertest(vargin)
test(1,'a');
test(2,'b');
end
function [number2x,next_letter] = test(number, letter)
number2x = number * 2;
next_letter = letter + 1;
disp(['next letter is ' next_letter])
disp(['number times 2 is ' num2str(number2x)])
xlswrite('testfile.xlsx',[num2str(number), letter,num2str(number2x),next_letter],'append');
end
或者,我可以将我的测试创建为一个类,创建一个类似于 Simulationmanager 的接口,创建许多用于管理输入和输出的函数并可视化进度,然后如果我想设置一组新参数,则生成多个实例在已经运行模拟的同时。可能,但很多工作不直接涉及模拟。
总共出现以下问题:
- 是否有内置的 Matlab 函数来管理我迄今为止完全错过的模拟?
- 测试框架可以用于此目的吗?
- 是否已经有一些框架(不是来自 Mathworks)可以处理这个问题?
- 如果我创建自己的类,多个实例可以单独运行并跟踪它们自己的进度吗?这些是同时处理的,还是 matlab 最终会按照它们开始的顺序运行?
我知道这个问题有点离题:推荐或查找工具、库或最喜欢的场外资源区域。如果觉得过分,请关注最后一个问题。
谢谢!
【问题讨论】:
标签: matlab