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年了,最近为了帮 ...
随机推荐
- python接口测试之requests库(一)
一.requests库的安装 requests库作为第三方库,需要安装 cmd模式下,运行pip install requests 二.在学习如何发送请求之前,我们先来了解一下requests库,查看 ...
- Task 4.4二维环形数组求最大子矩阵之和
任务: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数 ...
- 使用myeclipse2014整合ss2h
使用myeclipse2014整合ssh 新建一个webproject 创建过程中注意选择生成web.Xml 先添加struts2的能力 选择都添加过滤器的选项 Core dojo Dwr spr ...
- asp.net文件上传接收不到文件 Request.files["']等于null
这个时候你应该检查下你的form表单里面是否配置了这个: enctype ="multipart/form-data" 新手容易出错哦. <form id="fo ...
- 简单的树(summary)
实验任务 可怜的 Bibi 丢了好几台手机以后,看谁都像是小偷,他已经在小本本上记下了他认为的各个地点的小偷数量. 现在我们将Bibi的家附近的地形抽象成一棵有根树.每个地点都是树上的 一个节点,节点 ...
- SQL Server 无法连接到本地服务器
未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接: 解决办法: 在服务中启动SQL Server (MSSQLSERVER)这个服务.
- charles抓取移动端app数据
pc端为mac 移动端为android pc端 1.下载charles并安装 安利一个超好的良心网站(好多好用的软件都可以在上面找到,并且免费): http://xclient.info/search ...
- Beta阶段DAY5
一.提供当天站立式会议照片一张 二.每个人的工作 1.讨论项目每个成员的昨天进展 刘阳航:改进UI,美化界面. 林庭亦:优化代码结构 郑子熙:改进UI,美化界面. 陈文俊:优化代码结构 2.讨论项目每 ...
- 初期测评 A 排序
https://vjudge.net/contest/240302#problem/A 输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0 ...
- js 时间处理函数 (判断今天是否在一段时间内)
var curTime = new Date(); //2把字符串格式转换为日期类 var startTime = new Date(Date.parse("2018-3-28 16:44& ...