C 中快速高效的最小二乘拟合算法?

2024-03-17

我正在尝试对两个数据数组实现线性最小二乘拟合:时间与幅度。到目前为止,我知道的唯一技术是测试 (y = m*x+b) 中所有可能的 m 和 b 点,然后找出最适合我的数据的组合,以便其误差最小。然而,我认为迭代这么多组合有时是没有用的,因为它测试了一切。有什么我不知道的技术可以加快这个过程吗?谢谢。


试试这个代码。它适合y = mx + b到你的(x,y)数据。

论据linreg are

linreg(int n, REAL x[], REAL y[], REAL* b, REAL* m, REAL* r)

n = number of data points
x,y  = arrays of data
*b = output intercept
*m  = output slope
*r = output correlation coefficient (can be NULL if you don't want it)

成功时返回值为 0,失败时返回值为 !=0。

这是代码

#include "linreg.h"
#include <stdlib.h>
#include <math.h>                           /* math functions */

//#define REAL float
#define REAL double


inline static REAL sqr(REAL x) {
    return x*x;
}


int linreg(int n, const REAL x[], const REAL y[], REAL* m, REAL* b, REAL* r){
    REAL   sumx = 0.0;                      /* sum of x     */
    REAL   sumx2 = 0.0;                     /* sum of x**2  */
    REAL   sumxy = 0.0;                     /* sum of x * y */
    REAL   sumy = 0.0;                      /* sum of y     */
    REAL   sumy2 = 0.0;                     /* sum of y**2  */

    for (int i=0;i<n;i++){ 
        sumx  += x[i];       
        sumx2 += sqr(x[i]);  
        sumxy += x[i] * y[i];
        sumy  += y[i];      
        sumy2 += sqr(y[i]); 
    } 

    REAL denom = (n * sumx2 - sqr(sumx));
    if (denom == 0) {
        // singular matrix. can't solve the problem.
        *m = 0;
        *b = 0;
        if (r) *r = 0;
            return 1;
    }

    *m = (n * sumxy  -  sumx * sumy) / denom;
    *b = (sumy * sumx2  -  sumx * sumxy) / denom;
    if (r!=NULL) {
        *r = (sumxy - sumx * sumy / n) /    /* compute correlation coeff */
              sqrt((sumx2 - sqr(sumx)/n) *
              (sumy2 - sqr(sumy)/n));
    }

    return 0; 
}

Example

你可以运行这个例子网上 http://www.tutorialspoint.com/compile_c_online.php?PID=0Bw_CjBb95KQMeXVFb1ZGRERGak0.

int main()
{
    int n = 6;
    REAL x[6]= {1, 2, 4,  5,  10, 20};
    REAL y[6]= {4, 6, 12, 15, 34, 68};

    REAL m,b,r;
    linreg(n,x,y,&m,&b,&r);
    printf("m=%g b=%g r=%g\n",m,b,r);
    return 0;
}

这是输出

m=3.43651 b=-0.888889 r=0.999192    

这是 Excel 绘图和线性拟合(用于验证)。

所有值与上面的 C 代码完全一致(注意 C 代码返回r当 Excel 返回R**2).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中快速高效的最小二乘拟合算法? 的相关文章

随机推荐

  • 独立的共享库

    我需要创建一个共享库 其自身的依赖项 包括 libc libstdc 必须静态链接到它以生成独立的二进制文件 我尝试这样做 g c fpic o foo o foo cpp g static shared o foo so foo o 失败
  • symfony 中的 Doctrine 可搜索行为与 Zend Lucene

    我需要在2个表中搜索关键字 简单的事情 我尚未决定使用其中之一吗 有什么建议吗 Thanks 正如 cuhuak 提到的 Lucene 是全文搜索 由于它是用 Java 编写的 因此您还需要一个 Java 服务器 例如 Tomcat 如果您
  • Swift 中 SQLite 项目中的 UnsafePointer 问题

    我们在 iOS 和 Swift 中实现 SQLite 不使用包装器或 Objective C 桥接 一切工作正常 除了执行查询和提取结果时 问题在于UnsafePointer
  • Nodejs回调机制——哪个线程处理回调?

    我是 NodeJS 的新手 对 Node js 的单实例模型感到好奇 在一个简单的nodeJs应用程序中 当使用回调异步处理某些阻塞操作时 运行nodeJs的主线程是否也会处理回调 如果请求是从数据库中获取一些数据 并且有 100 个并发用
  • 如何处理 REST 调用、数据持久化、同步和观察 ContentProvider

    我知道这个问题已经被问了太多次了 但我认为我想要解决的问题有点不同 也许更复杂 我将开发一个使用RESTful Web 服务并需要具备以下要求 该应用程序应该以列表和详细方式显示一些书籍及其作者和编辑 该应用程序还应该允许搜索书籍 书籍 作
  • Android - 为什么对地理围栏使用待处理意图

    我刚刚完成了 Android 上的地理围栏教程 http developer android com training location geofencing html http developer android com training
  • Swift3 的所有 UIView 中都有不同的字体,每个都有本地化

    我想使用不同的字体直至每种语言 例如 英语中的 roboto 法语中的 openSans 本土化 arrayOfTitle NSLocalizedString comment comment 0 NSLocalizedString prof
  • 如何使用c++中的sort函数对二维数组进行排序?

    我有一个n x m我需要排序的数组 但是 我只需要查看每个一维数组的第一个值即可对较大的数组进行排序 例如 考虑以下二维数组 1 2 4 4 3 5 我不关心子数组中的第二个值 我只需要查看子数组的第一个值即可对其进行排序 所以 我只会看1
  • 在文件中执行 pgsql 命令的 Shell 脚本

    我正在尝试自动化一组创建模板数据库的过程 我有一组文件 file1 file2 fileN 每个文件都包含创建 TEMPLATE 数据库所需的一组 pgsql 命令 文件 创建的 template1 sql 的内容大致如下 CREATE D
  • 如何成为 iOS 的 MDM 供应商

    对此做了很多研究 看到了几个意见 很少有人说我需要苹果企业帐户 也很少有人说我不需要 拥有 MAC 服务器会有帮助吗 我是否需要拥有企业帐户才能成为 MDM 供应商 任何指点都会很棒 我看到了MDM提供的技术业务文档 但它没有解释任何关于服
  • 我想在单击每个树节点时将信息添加到 jpanel jscrollpane 中

    我想在单击每个树节点时将要添加的信息添加到 jpanel jscrollpane 中 请 1 我想控制在Tree java中选择的树节点的状态 其中Frame java 树 java package pms import java awt
  • 有没有办法更改 Nifi 中 PublishJMS 处理器的交付模式?

    我使用 Nifi PublishJMS 处理器向 IBM MQ 发送消息 消息在 MQ 中具有持久性 持久性 我想将其更改为非持久性 Nifi PublishJms 处理器中是否有属性可以纠正此问题 或者是从MQ端完成的 我无权访问 MQ
  • 如何从Python解码pdf加密文件

    我有一个 PDF 文件和关联的密码 我想仅使用 python 将加密文件转换为清晰版本 I found here https stackoverflow com questions 6413441 python pdf library一些
  • 为什么javascript函数的返回值未定义?

    我有一个函数来检测图像的大小 我希望它返回一个包含宽度和高度的对象 在下面的代码中 sz width 和 sz heightwithin该函数保存这些值 但在返回该值后 该值是未定义的 我缺少什么 function getImgSize i
  • 如何将数据库适配器传递给另一个活动?

    我在理解 Android SDK 中的搜索对话框时遇到一些困难 我的应用程序的 主要活动 提供了一个按钮 如果用户单击此按钮 则会调用搜索对话框 然后 搜索本身在异步任务中完成 因为它可能需要一些时间 到目前为止 一切都很好 主活动还创建一
  • UITextView委托问题

    我正在尝试访问 UITextView 委托并遇到问题 我有一个带有 UITextViewDelegate 协议的 UIViewController 和一个包含 textView 的 Nib 如果我在 viewDidLoad 中设置委托 如
  • 这是以编程方式终止(取消)芹菜任务的最佳方法

    根据 Celery 的文档 我们不应该使用terminate选项中revoke 取消正在执行的任务的函数 当任务陷入困境时 终止选项是管理员的最后手段 它不是为了终止任务 而是为了终止正在执行任务的进程 并且该进程可能在发送信号时已经开始处
  • relativeSource 适用于(嵌套)子属性,而 ElementName 则不适用于

    下面代码的问题是 绑定到SomeClassProp SubTextProp不起作用 源属性未设置为文本框内容 而TextProp确实如此 XAML
  • EXC_BAD_ACCESS 当行数为​​ 0 时 UITableView 崩溃

    当我将表中的行数设置为零时 我的 UITableView 发生了一致的崩溃 它因 EXC BAD ACCESS 错误而崩溃 崩溃是 UITableView 内部的 所以我无法直接看到出了什么问题 尽管这对我来说应该是一个愚蠢的错误 堆栈跟踪
  • C 中快速高效的最小二乘拟合算法?

    我正在尝试对两个数据数组实现线性最小二乘拟合 时间与幅度 到目前为止 我知道的唯一技术是测试 y m x b 中所有可能的 m 和 b 点 然后找出最适合我的数据的组合 以便其误差最小 然而 我认为迭代这么多组合有时是没有用的 因为它测试了