matlab和C语言实现最小二乘法
参考:https://blog.csdn.net/zengxiantao1994/article/details/70210662
Matlab代码:
N = ;
x = [ ];
y = [ ];
subplot(,,);
plot(x,y,'*');
% 图形的一些设置
xlabel('时间(秒)');
ylabel('位移(米)');
title('原始数据离散点')
grid on
subplot(,,);
p = polyfit(x,y,); %得出P就是线性拟合的系数
% :0.01:
x1 = ::N; %起始为0,终点为N,步长1
y1 = polyval(p,x1);
plot(x,y,'*',x1,y1,'r')
xlabel('时间(秒)');
ylabel('位移(米)');
title('红线为最小二乘法拟合')
grid on sumxyji =sum(x.*y); %向量内积
sumx = sum(x);
sumy = sum(y);
sumxx = sum(x.*x);
k = (N*sumxyji - sumx*sumy)/(N*sumxx-sumx*sumx)
b = (sumy-k*sumx)/N
效果:

自己C语言实现:
公式:

#include <stdio.h>
#include <stdlib.h> //函数功能:进行最小二乘曲线拟合(拟合y=a0+a1*x),计算出对应的系数a
//参数说明:
// n: 给定数据点的个数
// x[]: 存放给定n个数据点的X坐标
// y[]: 存放给定n个数据点的Y坐标
// k,b: 拟合多项式的系数,表示多项式的k,b
void polyfit(int n,double x[],double y[],double &k,double &b)
{ int i,j;
double sumxymultiply = 0.0;
double sumx = 0.0;
double sumy = 0.0;
double sumxx = 0.0;
for (i=;i<n;i++)
{
sumx += x[i];
sumy += y[i];
sumxymultiply += (x[i]*y[i]);
sumxx += (x[i]*x[i]);
} k = (n*sumxymultiply - sumx*sumy)/(n*sumxx - sumx*sumx);
b = (sumy-k*sumx)/n;
} void printArr(double *arr,int n)
{
for(int i=;i<n;++i)
printf("%lf ",arr[i]); printf("\n");
}
int main()
{
const int N = ; double x[N] = {,,, ,,,,};
double y[N] = {,,,,,,,};
double k,b; polyfit(N,x,y,k,b);
printf("%lf %lf\n",k,b); return ;
}
matlab和C语言实现最小二乘法的更多相关文章
- MATLAB与C语言对比实例:随机数生成
MATLAB与C语言对比实例:随机数生成 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 一.整型随机数生成函数 1.C语言程序 int intrand ...
- Matlab调用C语言函数
Matlab调用C语言函数 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y ;}现在我想要在 ...
- matlab转C语言
1.软件版本 matlab R2018a 2.步骤 (1).编写特定功能的matlab代码,以及其测试文件 (2).检查matlab代码的兼容性,确保matlab代码都能转换成C/C++代码(并不是 ...
- matlab和C语言的break及continue测试
break和continue语句 有两个附加语句可以控制while和for循环:break和continue语句.break语句可以中止循环的执行和跳到end后面的第一句执行,而continue只中止 ...
- Matlab和C语言混合编程,包含目录的设定
如果.c文件不依赖于任何第三方库,那么mex编译很简单,只需要在matlab的命令行输入 mex test.c 即可. 但是如果这个c文件使用了第三方库文件,如opencv.gsl等等,那么就需要更改 ...
- MATLAB和C语言混合编程-----Matlab7.0 编译器设置
(1) mex 命令设置 (a) 运行 Matlab ,在 Matlab 的命令窗口 (Command Window) 键入“ mex -setup ”命令后,按回车键,安装 Matlab 编译器: ...
- C语言与MATLAB接口 编程与实例 李传军编着
罗列一下以前自己学习C语言与MATLAB混编的笔记,顺便复习一遍. <C语言与MATLAB接口 编程与实例 李传军编着>(未看完,目前看到P106) 目录P4-8 ************ ...
- Matlab界面语言切换,自由显示中文或英文语言
Matlab界面语言切换,自由显示中文或英文语言分享给大家,Matlab是一款商业数学软件,广泛使用于算法的开发.数据发现和数值计算等.不同用户对Matlab显示的语言需求也不一样,一用户习惯使用中文 ...
- 接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点
不记得上一次写超过20行的matlab程序是什么时候了,大概是2013年吧,那个时候写过2篇文章,实际用到了 一些matlab的内容,超过200行的matlab程序应该要追溯到2011年了,最近为了帮 ...
随机推荐
- 团队编程--MP3播放器
设计思路: 这次的作业是一个MP3播放器,它是一个团队项目.由于我们都没接触过这类的编程.刚开始的时候我们是不知道从什么地方着手的.经过我们的商量我们决定从现在市场主流的音乐播放器上找到几个主要的功能 ...
- Beta后续感想/吐槽
感想 磨人的软工实践终于结束了 艰难的度过了一学期,还是写点什么纪念一下吧. 大一大二的时候就听说软工实践是魔鬼般的锻炼,于是当年不知天高地厚的我是很期待的,终于,我大三了. 后来,我长大了. alp ...
- DPDK flow_filtering 源码阅读
代码部分 main.c /*- * BSD LICENSE * * Copyright 2017 Mellanox. * * Redistribution and use in source and ...
- 简单实现wc.exe软件基本功能
简单实现wc.exe软件基本功能 软件需求分析: 一.基本功能 支持 -c 统计字符数(char count) 支持 -w 统计单词数(word count) 支持 -l 统计总行数(line ...
- Oracle Instant Client
下载地址: https://www.oracle.com/technetwork/database/database-technologies/instant-client/downloads/ind ...
- ArrayList底层实现
ArrayList 底层是有数组实现,实际上存放的是对象的引用,而不是对象本身.当使用不带参的构造方法生成ArrayList对象时,实际会在底层生成一个长度为10的数组 当添加元素超过10的时候,会进 ...
- STM32标准外设库、 HAL库、LL库
工作以来一直使用ST的STM32系列芯片,ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL库 三种.前两者都是常用的库,后面的LL库是ST最近才添加,目前支持的 ...
- idea建立web项目servlet映射的地址/jsp访问不到
用IntelliJ IDEA 2017新建了一个web项目,成功运行后servlet mapping的地址一直访问不到 原因:在配置tomcat的时候Server中Open browser选项勾选之后 ...
- What?
What? 本文主要讲解一下kubernetes周边的概念,可以说是一小部分的生态圈,逐渐了解一下,走进kubernetes的世界.请读者在读的时候,带着批判的态度去读. 一张概览图: 云计算: 原文 ...
- Nginx 线上配置实例
1 /etc/nginx/nginx.conf,在主配置下设置 /etc/nginx/conf.d/*.conf user nginx;worker_processes 1; error_log /v ...