0

我正在尝试将下面的 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 时,这似乎需要做很多工作,因为它涉及到对更多 octave 库函数的大量调用。它首先计算 Vandermonde 矩阵,然后对其执行一些 QR 分解,并计算向量的范数等......

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

任何指针都会很有用。

4

1 回答 1

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

于 2011-05-12T14:44:26.757 回答