我正在尝试在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循环。
答案 0 :(得分:4)
如果我理解正确,您需要bsxfun
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] );