调用修改Matlab结构的函数时,数据类型出现问题

jxct1oxe  于 2021-07-15  发布在  Matlab
关注(0)|答案(1)|浏览(236)

调用我编写的matlab函数时,数据类型有问题。
我的问题是:
用我编写的另一个函数,我打开并获取了Simulink文件的“inport”和“outport”块的名称和类型,并将所有这些存储在一个结构中。
所有这些工作正常。
问题出在我的第二个函数上,这个函数检索旧的结构,根据输入类型,创建并完成一个新的字段,并根据类型使用适当的测试序列(double,single,uint8,logical...)的inport相关。但问题是,当我检查用我的函数获得的序列的类型时,通过在matlab脚本中调用它,我只得到了“double”。没有布尔值,uint8,单精度等。尽管我在函数中用正确的类型填充了我的序列。

function [slxStimStruct] = slxStim(schedTime,inportType,struct)

time = 0:schedTime:10; 

N = length(inportType); 

stim = cell(1,N); % Cell array in which we will stock test sequences

for i=1:N 

    v = zeros(1,length(time)-1);

    for j=1:length(time)-1    

        if strcmp(inportType(i),'boolean')    

            v(j) = logical(randi([0 1],1));

        elseif strcmp(inportType(i),'single') 
            
            v(j) = single(randn());

然后是对所有数据类型的测试。

end
   
    end

    stim{i} = v; 

end

struct.stim = stim; 

slxStimStruct = struct;

我知道这与函数只能在局部工作的事实有关,我还认为,要解决这个问题,我应该在结构中创建一个包含测试序列可以接受的类型的字段,但我也无法做到这一点。
有人知道如何解决这个问题吗?

wvmv3b1j

wvmv3b1j1#

之后

v = zeros(1,length(time)-1);

v是一个双精度数组。该数组的所有元素都是双精度的,并且不能是其他类型。MATLAB中的每个数组都保存一种类型。
当你这样做

v(j) = single(randn());

将单精度转换为双精度以存储在双精度数组中。
如果需要不同类型的序列,请将v设为单元格数组:

v = cell(1,length(time)-1);
v{j} = single(randn());

注意索引单元格数组时使用的花括号。
单元格数组存储矩阵,每个元素都是一个独立的数组,有自己的类型。这是一个效率很低的存储值的方法,如果v很大,最好只在双精度数组中存储双精度数。

相关问题