小编Rya*_*ton的帖子

在matlab中具有多个匹配的switch-case用于代码生成

以下代码是有效的matlab sytax,用于检查是否b匹配中的任何元素a.但是,如果代码用于代码生成(即simulink),那么我得到错误:

'code generation only supports cell operations for varargin and varargout  
Run Code Online (Sandbox Code Playgroud)

您可以通过%#codegen在脚本顶部添加来检查这一点.)

a={2 3};
b=3;
switch b
    case a
        disp yay
    otherwise
        disp boo
end
Run Code Online (Sandbox Code Playgroud)

case在代码生成兼容代码中,我应该如何匹配语句中的多个模式?

以下内容对我不起作用:

case a(1) || a(2) %//with a=[2, 3] above, since cells not allowed

case a(:)
Run Code Online (Sandbox Code Playgroud)

matlab code-generation simulink switch-statement matlab-coder

3
推荐指数
1
解决办法
4308
查看次数

使用MATLAB功能块在Simulink中生成随机数

我试图谷歌这个问题并在这里搜索问题和答案,但我发现我的问题没有明确的答案,所以我正在制作一个新问题.希望不会太麻烦!

我正在Simulink中创建一个模拟,我有一个"MATLAB函数"-block,它应该从另一个源获取输入(我们可以认为这个源是一个"常量"-block),然后应用一个由输入上的MATLAB功能块.

我的问题是,每次运行Simulink仿真时,我都得到完全相同的随机数.我想知道是否有人可以帮助我解决我的问题?

这是代码(不是所有代码,但重要的是所有代码):

% function MC_output = randomizer(Stat_input)
%#codegen    minrand = 0.1;
    maxrand = 1.9;
    points = 10;    
    rand_numbers = Stat_input*minrand + rand(1, points).*(maxrand-minrand);
    MC_output = mean(rand_numbers);
end
Run Code Online (Sandbox Code Playgroud)

我已经读过这个解决方案:

coder.extrinsic('rng');
rng('shuffle');
Run Code Online (Sandbox Code Playgroud)

我以不同的方式使用它但没有成功.一些帮助会非常受欢迎!哦,顺便说一下,我正在使用MATLAB R2012a.

提前谢谢,尼克拉斯

random matlab simulink matlab-coder

1
推荐指数
1
解决办法
3219
查看次数

没有'new'关键字的C++中的内存分配

我有一些由MATLAB Coder生成的代码.它包括这种类型的一些变量定义:

int tmp_size[400];
Run Code Online (Sandbox Code Playgroud)

在方法范围结束之前,不会显式删除这些变量.

变量是在堆还是堆栈上分配的?这相当于以下几点吗?

int* tmp_size = new int[400];
Run Code Online (Sandbox Code Playgroud)

是否最好用内存管理来重写这些变量定义new,比如int* tmp_size = new int[400];

我注意到内存是由我的程序分配的,永远不会被释放.这可能是造成内存泄漏的原因吗?

c++ memory-leaks memory-management new-operator matlab-coder

-2
推荐指数
1
解决办法
1069
查看次数