0

我正在尝试替换 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)

我想做的是用

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 循环。

4

1 回答 1

4

如果我理解正确,您需要

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

如果必须使用循环

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

没有bsxfun也没有循环(双手绑在背后,一只眼睛闭上,3本书和一个叉子平衡在我的头上):

s = repmat( s(:), [1 n+1] ) - repmat( si(:).', [n+1 1] );
于 2013-11-14T14:42:56.267 回答