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年了,最近为了帮 ...
随机推荐
- JavaScript实现大整数减法
继上一篇博文写了大整数加法之后,我又模拟上篇博文的算法,自己实现了大整数减法. 大整数减法相对于加法来说,稍微复杂一点.由于要考虑一些情况: 1. 两个数相减,可能会出现结果为正.负和0三种情况: 2 ...
- 冲刺One之站立会议2
在确定了总体目标之后,我们先决定了实现的具体功能,包括一个登陆界面,一个聊天室的主界面和服务器端的内容.我们今天完成了一小部分内容,把每个内容的主体框架搭建了起来. 效果如下图所示: 燃尽图2
- Task 6.4 冲刺Two之站立会议9
今天主要对昨天用户提出的意见加以改进,虽然有些不能轻易实现但是仍然查阅了很多资料.因为他目前可以实现实时通信的功能,而我们想要在这个基础上实现临时的视频聊天的功能,但是时间有点紧迫,所以还没有实现.
- 【DL.AI】《Structuring Machine Learning Projects》笔记
一.改进模型的几个方法 Collect more data Collect more diverse training set Train algorithm longer with gradient ...
- Gradle入门(6):创建Web应用项目
如果要用 Java 和 Gradle 创建一个 Web 应用项目,我们首先需要创建一个 Java 项目,下面来看看该如何去做. 创建Java项目 我们可以使用Java插件创建一个Java项目,通过添加 ...
- cobbler-web 界面技术详解
cobbler-web安装配置过程详解 (1)安装cobbler-web(测试时候,确保物理网络是在内网中进行,在外网会无法访问的哦,cobbler-web的访问入口必须有dhcpd指定的网络保持一致 ...
- 【第十周】psp
代码累计 300+575+475+353+620+703=2926 随笔字数 1700+3000+3785+4210+4333+3032=20727 知识点 机器学习,支持向量机 数据库技术 Acm刷 ...
- sguf冲销脚本的实现
1.该脚本为PCISS项目的sguf冲销脚本: DECLARE type typ_sguf_table is table of sguf_rowid_tab_1%rowtype ; sguf_tab ...
- HDU2665_Kth number
给一个数组,求区间[l,r]中第k大的数. 今天被各种数据结构虐爆了,自己还是需要学习一下函数式线段树的,这个东西好像还挺常用. 函数式线段树的思想是这样的,对于每个时间状态,我们都建立一颗线段树,查 ...
- 关于 Source Engine 2007 网络通信的分析
最近在写自己的游戏引擎,主要是参考Quake和GoldSrc和SourceEngine2007,其中SourceEngine2007代码比较新一些. 对比了这几个引擎的代码,前两者代码比较简单,基于C ...