是否有更简洁的方法来初始化这些变量?

时间:2017-12-12 21:41:58

标签: matlab loops if-statement control-flow variable-initialization

m为0,1,2或3:

if m==0 
    afit0=afit(1);
elseif m==1
    afit0=afit(1);
    afit1=afit(2);
elseif m==2 
    afit0=afit(1);
    afit1=afit(2);
    afit2=afit(3);
elseif m==3 
    afit0=afit(1);
    afit1=afit(2);
    afit2=afit(3);
    afit3=afit(4);
end 

是否有更简洁的方法来编写此代码?

1 个答案:

答案 0 :(得分:2)

每当你发现自己在MATLAB中将一个向量分解为单独的变量时,你可能为自己做更多的工作。 MATLAB针对涉及向量和矩阵的操作进行了优化,使用vectorization通常可以为您提供更高效,更简洁的代码。

根据您的评论,您似乎最终想要评估多项式y = a0 + a1*x + a2*x^2 + ... + am*x^m,其中系数a0am是您想要从列向量初始化的变量{ {1}}。更好的选择是使用矢量化操作直接使用afit来计算多项式:

afit

在这里,我们index y = sum(afit(1:(m+1)).*x.^(0:m).'); 基于afit的值,然后multiply生成的子向量元素由值m引发元素明确到列向量x中给出的power。得到的值向量是使用sum求和得到的结果(0:m).'

As Ben points out,甚至还有一个可以为您执行此评估的内置函数polyval。您只需flipy索引的子向量中的元素顺序:

afit