-2

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 

有没有更简洁的方法来编写这段代码?

4

1 回答 1

2

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

从您的评论看来,您最终想要评估一个 polynomial y = a0 + a1*x + a2*x^2 + ... + am*x^m,其中您的系数是您想要从列 vector 初始化的a0变量。一个更好的选择是使用向量化操作来直接计算你的多项式:amafitafit

y = sum(afit(1:(m+1)).*x.^(0:m).');

在这里,我们根据 的值进行索引 ,然后将得到的子向量逐元素乘以逐元素提升到列向量中给定的的值。值的结果向量是使用它们求和得到的结果。afitmx(0:m).'sumy

正如 Ben 指出的那样,甚至还有一个内置函数polyval可以为您执行此评估。您只需翻转从 索引的子向量中的元素顺序afit

y = polyval(flip(afit(1:(m+1)), 1), x);
于 2017-12-12T22:43:09.670 回答