替换Matlab中的循环

时间:2013-11-14 14:38:59

标签: matlab loops iteration

我正在尝试在Matlab中替换for循环。

 function A=ansatz(s,p,n)
 si(1:n+1)=2*((1:n+1)-1)/n-1;

 A(1,:)= s';
 for j=1:n+1
     for i=1:n+1
         A(j,i)=s(j)-si(i);
     end
 end

 A=ansatz([-1,-0.9,-0.7,0.6,1],2,4)

我要做的是用

填充矩阵A.
s(1)-si(1)   s(1)-si(2)  ... s(1)-si(n+1)
s(2)-si(1)   s(2)-si(2)  ... s(2)-si(n+1)


s(n+1)-si(1)   s(n+1)-si(2)  ... s(n+1)-si(n+1)

基本上,最后两个循环必须用向量迭代替换。我所完成的只是第一行。

A(1,:)= s(1)-si(1:n+1);

任何人都有关于如何正确迭代的提示? 编辑:可以使用for或while循环。

1 个答案:

答案 0 :(得分:4)

如果我理解正确,您需要

s = bsxfun(@minus, s(:), si(:).' )

如果必须使用循环

for ii=1:numel(s)
    A(ii,:) = s(ii) - si(1:n+1);
end

没有bsxfun而且没有循环(双手绑在后面,一只眼睛闭上,三本书和一把叉子平衡在我头上):

s = repmat( s(:), [1 n+1] ) - repmat( si(:).', [n+1 1] );