用数学表达式指定变量的值
今天我想谈谈变量,需要通过一个仿真软件模型,其他变量的函数。万博1manbetx
让我们来一个直角三角形的简单的例子:
对于大多数仿真软件万博1manbetx的用户,如果你有一个模型需要的长度斜边或这个三角形的面积,最终你可能会编写一个脚本如下:
= 3;
b = 4;
c =√a ^ 2 + ^ 2);
面积= (a * b) / 2;
然后,在块参数,您将使用变量
c
和
区域
:
不相关的笔记关于上面的截图:
- 我喜欢使用偏见阻止这种类型的简单的例子;它接收来自尺寸零块并添加参数值。这只是试验/调试,不使用这种模式,而不是一个常数在“正常”模式。
- 黄色的矩形显示偏差块输出值端口值显示。这些都是有用的调试仿真结果没有块添加到模型中。
上面的脚本工作的时候,它会导致明显的问题。例如,如果我改变变量
一个
重新评估斜边,但忘记重新评估该区域?
虽然这是相对容易避免正常模式模拟,这可以更容易犯错误时更高级的操作,例如当使用快速启动或仿真软件的编译器。万博1manbetx
好事是,这是一个函数,可以帮助:
slexpr
使用一个表达式作为一个参数对象的价值
一个= 万博1manbetxSimulink.Parameter (3);
b = 万博1manbetxSimulink.Parameter (4);
一次
一个
和
b
创建了对象作为参数,您可以使用它们
slexpr
指定一个表达式的值其他仿真软件。万博1manbetx参数对象:
c = 万博1manbetxSimulink.Parameter (slexpr (“sqrt (b ^ ^ 2 + 2)”));
面积= Sim万博1manbetxulink.Parameter (slexpr (“(a *) * 0.5”));
然后,您可以使用变量
c
和
区域
在仿真软件万博1manbetx模型就像如果他们双重数据类型变量的例子在这篇文章的开始:
为了比较结果从这个原始用例的例子在下面这篇文章,让我们编程模拟模型,看看结果第一外港块:
= sim卡(“testMdl”);
out.yout {1} .Values.Data
ans = 5
什么变得有趣的是,一旦这个设置,您可以简单地改变原始变量的值,
一个
或
b
和变量表达式中使用它会自动看到改变。
一个。值= 8;
= sim卡(“testMdl”);
out.yout {1} .Values.Data
ans = 8.9443
利用表达式在快速重启
一个。值= 3;%恢复值或一个从最初的例子
(1:5)= Sim万博1manbetxulink.SimulationInput (“testMdl”);
为i = 1:长度()
在(我)=(我).setVariable (“一个”,我);
结束
= sim (,“UseFastRestart”,“上”,“ShowProgress”,“关闭”);
[out.yout {1} .Values.Data]
快速的加速器和仿真软件的编译器万博1manbetx
(1:5)= Sim万博1manbetxulink.SimulationInput (“testMdl”);
为i = 1:长度()
在(我)=(我).setModelParameter (“simulationmode”,“快速”);
在(我)=(我).setModelParameter (“rapidacceleratoruptodatecheck”,“关闭”);
在(我)=(我).setVariable (“一个”,我);
结束
万博1manbetxSimulink.BlockDiagram.buildRapidAcceleratorTarget (“testMdl”);
= sim (,“ShowProgress”,“关闭”);
[out.yout {1} .Values.Data]
没有
slexpr
,所有的模拟参数就会看到相同的值
c
。
因为仿真软件万博1manbetx编译器依赖于快速加速器技术,这种技术也应用在这种情况下。
模型浏览器和数据字典
现在轮到你了
你利用的可能性使用表达式作为参数对象的价值吗?在下面的评论中让我们知道。
评论
留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。