matlab有用的问题

时间:2011-12-09 06:37:55

标签: matlab

让我问一下,使用Matlab解决我的特定问题是无意义的还是有些人做了类似的事情。

我有一个初始序列S(1),其中每个术语都是一个2D点。 我通过插入新的术语点S(2)来创建新序列p 在每个连续的2个学期点p(i)p(i+1)之间。 其中pf上最近索引的4个术语点的函数S(2)。 即,

p= f( p(i-1),p(i),p(i+1),p(i+2) )

函数f以类似C的风格编写 但不是纯粹的矩阵语言风格。 以同样的方式,我重复生成新的较长序列S(i+1),直到S(m)

上述内容可能含糊不清,但请提出一些建议。 我不问Matlab是否是问题的最佳选择,但是否专家不会使用Matlab来解决这个问题,或者某些问题。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

这在很大程度上取决于f。如果f可以在Matlab中高效编码,或者你愿意花时间去MEX它(Matlab C扩展),那么Matlab将会有效地执行。

代码可以像这样进行矢量化:

f = @(x) mean(x,3);
m=3;
S{1}=[1,2,3;4,5,6];
for i=2:m
    S{i} = cat(3,...
        [[0;0] S{i-1}(:,1:end-2)],...
        S{i-1}(:,1:end-1),...
        S{i-1}(:,2:end),...
        [S{i-1}(:,3:end) [0;0]]);
    S{i} = [f(S{i}) [0;0]];
    S{i} = cat(3,S{i-1},S{i});
    S{i} = permute(S{i},[1 3 2]);
    S{i} = S{i}(:,:);
    S{i}(:,end)=[];
end

答案 1 :(得分:1)

是的,Matlab似乎适合这样的任务。对于序列列表的数据结构,请考虑使用cell arrays。您可以将S作为单元格数组,S{1}将对应于您的S(1),并且可能再次成为点的单元格数组,或者如果点数只是对或三元组,则为常用矩阵数字。

作为替代方案,我认为Python在所有类型的序列方面都非常强大。