【问题标题】:Replacing For Loops in Matlab在 Matlab 中替换 For 循环
【发布时间】:2013-11-14 14:38:58
【问题描述】:

我正在尝试替换 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 循环。

【问题讨论】:

    标签: matlab loops iteration


    【解决方案1】:

    如果我理解正确你需要

    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] );
    

    【讨论】:

    • 这可行,但我正在寻找向量的迭代。
    • @Paulinchen2 不是forwhile 循环的“向量迭代”到底是什么意思?
    • 看我最后一行代码。 A(1,:)= s(1)-si(1:n+1);整个矩阵都是这样的。
    猜你喜欢
    • 1970-01-01
    • 2022-01-14
    • 2011-09-22
    • 2012-04-15
    • 2019-04-04
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多