modelica - 如何为 Wolfram SystemModeler 编写脚本以运行多个模拟?
问题描述
我想用我的模型改变两个参数运行大约 100 次模拟,f
并TLoad
跟踪相电流currentSensor.i[1]
等的变化。
现在我坚持使用 Wolfram 网站上的文档,因为没有明确说明如何使用 SystemModeler 编写脚本。例如,我在 Wolfram 网站上找到了这个链接,其中包含一些代码,但没有解释我应该在哪个命令行中使用它。
我下载了 WolframScript 程序并尝试用它打开我的模型,wolframscript -file SMPM_VoltageSource_Inverter.mo
但它说ToExpression::sntx: Invalid syntax in or before ...
我的模型模拟完全正常并且在 SimulationCenter 中没有任何错误。
有人可以向我解释一下:
- 是否可以编写脚本?
如果是:
- 如何模拟我的模型?
- 如何对
f
和进行参数扫描TLoad
?是否如链接中所述? - 是否可以将数据导出
currentSensor.i[1]
为 csv 文件?怎么做?
感谢您的任何帮助!
解决方案
抱歉,我不了解 wolfram,但对于 OpenModelica,以下工作:
// to load Model from file use
// loadFile("fileName.mo");
loadString("
model M
parameter Real a = 1;
Real x;
equation
x = a * sin(time);
end M;
"); getErrorString();
buildModel(M); getErrorString();
for a in {1,2,3,4} loop
str_a := String(a); getErrorString();
system("./M -override a=" + str_a); getErrorString();
// for windows use
//system("M.exe -override a=" + str_a); getErrorString();
system("mv M_res.mat " + "M_" + str_a + ".mat");
end for;
将它放在一个名为 example 的文件中,model.mos
并从终端或命令行调用它,具体取决于您的操作系统,omc model.mos
如果您安装了 OpenModelica。这应该生成一个csv。
编辑:我意识到原来只是保存了 x 的最后一个值,你可能想要完整的输出。因此我更改了.mos
-file。每个不同的结果都将保存在不同的文件中,如果要将其更改为 csv,则只需更改生成的 xml。
推荐阅读
- ruby-on-rails - Rendering collections within collection in Rails
- kotlin - 使用 readLine 按用户输入搜索列表
- tcl - 如何打印服务调用返回的错误信息?
- node.js - 错误:超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调
- kotlin - MVP + Dagger2 + Kotlin:lateinit 属性 Presenter 尚未初始化
- flask - 在烧瓶中我自己的装饰器中从路由函数获取参数
- html - Html 表格 - 当表格宽度为 100% 时如何滚动 TD 宽度?
- javascript - 在反应问题中加载lottie-web动画
- realm - 如何使用 GraphQL 创建/改变一行,其中一个字段是 Realm 中的引用
- ruby-on-rails - Ruby on Rails - best_in_place 的 WYSIWYG 矩阵编辑器