在matlab中对此方法的任何替代近似?

时间:2011-05-12 11:16:55

标签: c polynomial-math curve-fitting

我正在尝试将下面的matlab / octave函数转换为C(常规方式 - 理解matlab函数并从头开始在C中编写代码)。它使用多项式拟合将数据拟合到高斯曲线。

   function y=func(data)
   N=128;
   y1=gausswin(N,4);
   x1=[0:1/N:1-1/N]';
   P=polyfit(x1,y1,12);      
   y=polyval(P,data);

但是当我检查函数polyfit时,这看起来很多工作,因为它涉及到对更多八度音阶库函数的大量调用。它首先计算Vandermonde矩阵,然后对它进行一些QR分解,并计算向量的范数等...

  1. 我可以利用哪些其他选项/处理来获得类似功能(近似于上面发生的实际操作),但使用一些更简单的曲线拟合或插值方法。
  2. 任何指针都很有用。

1 个答案:

答案 0 :(得分:1)

除了将这样的多项式拟合为高斯的实用价值之外,您还可以分析代码的行为:

N=128;
y1=gausswin(N,4);
x1=[0:1/N:1-1/N]';
P=polyfit(x1,y1,12);

此部分的输出将始终相同,因此您可以在MATLAB或Octave中执行此操作,只需提取多项式P,以便在C代码中使用它作为常量。它不如在C中重写所有内容那么灵活,但它也更快。

否则,您可能需要查看BLAS:BLAS为用于线性代数的库定义了一个API,例如LAPACK(由MATLAB使用)。我怀疑很多这些库都会实现你需要的基本操作。

<强>加成: 如果您对数值计算没有什么经验,或者只是希望从您手中完成大量工作,您可能需要考虑Matlab Coder