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
是否有更简洁的方法来编写此代码?
答案 0 :(得分:2)
每当你发现自己在MATLAB中将一个向量分解为单独的变量时,你可能为自己做更多的工作。 MATLAB针对涉及向量和矩阵的操作进行了优化,使用vectorization通常可以为您提供更高效,更简洁的代码。
根据您的评论,您似乎最终想要评估多项式y = a0 + a1*x + a2*x^2 + ... + am*x^m
,其中系数a0
到am
是您想要从列向量初始化的变量{ {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
。您只需flip从y
索引的子向量中的元素顺序:
afit