matlab中这个方法还有其他近似方法吗?

发布于 2024-11-06 22:13:16 字数 441 浏览 3 评论 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 时,这似乎需要大量工作,因为它涉及对其他八度库函数的大量调用。它首先计算范德蒙德矩阵,然后对其进行一些 QR 分解,并计算向量的范数等...

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

任何指针都会有用。

I am trying to convert below matlab/octave function to C(Conventional way - understand the matlab function and code it in C from scratch). It is fitting a data to a gaussian curve using polynomial fitting.

   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);

But when I checked the functions polyfit, that seemed a lot of work as it involves lot of calls to further octave library functions. It computes a Vandermonde matrix first, then performs some QR decomposition of it, and computes norm of the vector etc...

  1. What other options/processing I can utilize to have similar functionality(approximation of the actual operation happeneing above) but with some simpler curve fitting or interpolation methods.

Any pointers would be useful.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

别把无礼当个性 2024-11-13 22:13:16

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

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 编码器

Besides the point of the practical value of fitting such a polynomial to a gaussian, you can just analyze the behavior of your code:

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

The output of this section will always be the same, so you can execute this in MATLAB or Octave and just extract the polynomial P for usage in your C code where you include it as a constant. It's less flexible than rewriting everything in C, but it's also faster.

Otherwise, you might want to take a look at BLAS: BLAS defines an API for libraries used for linear algebra such as LAPACK (which is used by MATLAB). I suspect a lot of these libraries will implement the basic operations you need.

Addition:
If you have no little experience with numerical computing or just want a lot of work taken out of your hands, you might want to consider Matlab Coder.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文