【发布时间】:2021-06-30 12:14:57
【问题描述】:
我正在尝试使用 MATLAB Coder 将 .m 脚本转换为 C++。
function P=r_p(1,var1,var3)
p=[[3,7]
[10,15]
[6,19]
[21,19]
[43,11]
[969,2]
[113,9]
[43,59]
[21,15]
[6,15]
[10,18]
[3,15]];
tmax=sum(p(:,1))+41;
coder.varsize('x');
x=ones(9,11).*[0:10:100]; % getting error in this line: [9x11]~=[1x11]. Since size of x is varying in for loop, so i should tell coder that it is variable size, So I used Varsize
for t=11:tmax
a1=(rand-0.5)*1;
a9=(rand-0.5)*1.25;
a2=(rand-0.5)*1.5;
a8=(rand-0.5)*1.75;
a3=(rand-0.5)*2.0;
a7=(rand-0.5)*2.25;
a4=(rand-0.5)*2.5;
a6=(rand-0.5)*2.75;
a5=(rand-0.5)*3;
x(1,t+1)=x(1,t)+a1;
if x(1,t+1)<(100-var1) || x(1,t+1)>(100+var1) % loop 1: x(1,11)+a1 value is is writing to x(1,12) So coder gives error "Index exceeds array dimensions. Index value 12 exceeds valid range [1-11] of array x".
x(1,t+1)=x(1,t); % In matlab it works fine, but coder throws error.
end
end
我的问题是循环 1, x(1,12)= x(1,11)+a1 在matlab中这个赋值工作正常,但是在转换它时抛出错误“索引超出数组尺寸。索引值12超出数组x的有效范围[1-11]”正如我将 x 声明为可变大小编码器应将 x(1,11)+a1 值分配给 x(1,12) 但它没有这样做,而是抛出错误。为什么?
由于 t 正在循环 1289,如果我为 x 指定边界,例如
coder.varsize('x',[1290,1290],[0,0]) 然后 Coder 在代码的其他部分给出错误,即尺寸不匹配。当然应该是因为 x 的维度与 [ones(12,9)p(1,2)/9;(P_1s+var3/100P_1s.*randn(size(P_1s) )/2)/9;zeros(30,9)].
- 将 x 声明为可变大小是否正确?如果是,那么“索引超出数组维度错误”的解决方法是什么
请告诉我,我缺少什么将其转换为 C++ 代码
【问题讨论】:
标签: arrays indexing matlab-coder