Matlab批量拟合曲线并绘制在一张图上
文章目录
- 简单的拟合
- 批量拟合并呈现在一张图上
- 最终结果与完整代码
简单的拟合
在命令行输入
cftool
可以启动工具箱
1.在"选择数据"中导入数据
2.选择拟合方法(matlab提供的方法或者你自己定义的函数)
matlab提供的方法:
自定义函数:(点击自定义方程后在右边的界面输入)
批量拟合并呈现在一张图上
实际处理时,我们经常遇到批量拟合并绘制曲线的情况。
比如给定10组数据,每组7个点,现在需要在一张图上绘制10条拟合曲线。应该如何绘制?
以平滑样条方法为例:
首先,指定平滑参数可以调整拟合程度和粗糙程度。
1.输入cftool打开工具箱,只选取选取一组数据拟合
2.点击生成代码
3.查看代码并做修改
function [fitresult, gof] = createFit1(tx, ty)
%CREATEFIT1(TX,TY)
% 创建一个拟合。
%
% 要进行 '无标题拟合 1' 拟合的数据:
% X 输入: tx
% Y 输出: ty
% 输出:
% fitresult: 表示拟合的拟合对象。
% gof: 带有拟合优度信息的结构体。
%
% 另请参阅 FIT, CFIT, SFIT.%% 拟合: '无标题拟合 1'。
[xData, yData] = prepareCurveData( tx, ty );% 设置 fittype 和选项。
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 0.99545;% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft, opts );% 绘制数据拟合图。
figure( 'Name', '无标题拟合 1' );
h = plot( fitresult, xData, yData );
legend( h, 'ty vs. tx', '无标题拟合 1', 'Location', 'NorthEast', 'Interpreter', 'none' );
% 为坐标区加标签
xlabel( 'tx', 'Interpreter', 'none' );
ylabel( 'ty', 'Interpreter', 'none' );
grid on
函数的这个部分是一些设置:
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 0.99545;
表示方法使用’SmoothingSpline’平滑样条,参数值设定为0.99545。
接下来进行改动:
首先去除这一行,这样就可以绘制在一张图上。
% 绘制数据拟合图。
figure( 'Name', '无标题拟合 1' );
然后在另一个文件中进行批量处理。(比如main函数)
%%读入数据
data = xlsread('mydata.xls');
%表格形式是70行2列(每组7个数)
x = data(:,1);%第一列为x
y = data(:,2);%第二列为y
%%单独绘制
for i = 1:7:(70-7)mx = x([i:i+6],1);%每7个取出一次my = y([i:i+6],1);%同上scatter(mx,my);%例如用scatter函数hold on;
end
得到10组散点
更改函数:
%%单独绘制
for i = 1:7:(70-7)mx = x([i:i+6],1);%每7个取出一次my = y([i:i+6],1);%同上createFit(mx, my)%改用上文得到的函数hold on;
end
得到图:
我们发现颜色不够好看,可以在createFit函数中做如下调整:
% 绘制数据拟合图。
col = rand(1,3);%设置随机颜色向量
h = plot( fitresult,xData, yData);
h(1).MarkerSize = 8 %更改数据点大小
h(2).Color = col; %更改曲线颜色
h(1)对应了数据点,h(2)对应曲线,对其作相应调整。
这里将Color设置成了1*3的随机数向量,所以得到了随机颜色。也可以根据自己的需求定义自己的颜色集。
最终结果与完整代码
main函数:
data = xlsread('measure.xls');
x = data(:,1);
y = data(:,2);
for i = 1:7:70mx = m1([i:i+6],1);my = m2([i:i+6],1);createFit1(mx, my) hold on
end
createFit函数:
function [fitresult, gof] = createFit(mx, my)
%CREATEFIT(MX,MY)
% 创建一个拟合。
%
% 要进行 '无标题拟合 1' 拟合的数据:
% X 输入: mx
% Y 输出: my
% 输出:
% fitresult: 表示拟合的拟合对象。
% gof: 带有拟合优度信息的结构体。
%
% 另请参阅 FIT, CFIT, SFIT.%% 拟合: '无标题拟合 1'。
[xData, yData] = prepareCurveData( mx, my );% 设置 fittype 和选项。
ft = fittype( 'smoothingspline' );
opts = fitoptions( 'Method', 'SmoothingSpline' );
opts.SmoothingParam = 0.9999992;% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft, opts );% 绘制数据拟合图。
%figure( 'Name', '无标题拟合 1' );
col = rand(1,3);
h = plot( fitresult,xData, yData);
h(1).MarkerSize = 8
h(2).Color = col;
legend( h, 'my vs. mx', '无标题拟合 1', 'Location', 'NorthEast', 'Interpreter', 'none' );
% 为坐标区加标签
xlabel( 'mx', 'Interpreter', 'none' );
ylabel( 'my', 'Interpreter', 'none' );
hold on
grid on
Matlab批量拟合曲线并绘制在一张图上相关推荐
- 如何用matlab画道路,MATLAB中如何将多条曲线画在一张图上
在用MATLAB处理数据时,有时候,为了几组不同数据之间的对比,我们需要将几组数据对应的曲线画在一张图上,该怎么处理呢? 首先,我们随机产生三组范围不同的数据,数据量都为500,他们的边界分别为[10 ...
- matlab两个曲线的名称怎么显示出来的,求MATLAB的高手,怎么把两张仿真曲线合并显示在一张图上?...
求MATLAB的高手,怎么把两张仿真曲线合并显示在一张图上? 关注:194 答案:5 手机版 解决时间 2021-02-10 14:48 提问者终究是陌生了 2021-02-09 16:38 程序 ...
- MATLAB三维绘图(四)绘制特殊的三维图
MATLAB三维绘图(四)绘制特殊的三维图 1.使用pie3绘制三维饼状图,示例: %% 绘制三维饼图 clear all; x=[0.2 0.1 0.25 0.15 0.16]; y=[3 5.5 ...
- python Matplotlib 可视化总结归纳(二) 绘制多个图像单独显示多个函数绘制于一张图
1. 绘制多个图像单独显示(subplot) import numpy as np import matplotlib.pyplot as plt #创建自变量数组 x= np.linspace(0, ...
- python 将多个模型的ROC曲线绘制在一张图里(含图例)
一. 多条ROC曲线绘制函数 def multi_models_roc(names, sampling_methods, colors, X_test, y_test, save=True, dpin ...
- matlab 速度 流场变化,[MATLAB基础] 请问怎样将两结果(流场速度和线形态)叠加到一张图上?...
请问怎样将两结果(流场速度和线形态)叠加到一张图上? 我已分别计算出流场速度和线的运动形态,都是三维的.其中流场速度是用CFD软件算的,而线的形态是在MATLAB里编程算的,现想把两结果表示在同一张图 ...
- Matlab在一张图上画多条曲线或分别画
1.在plot曲线时,有时想在一张图上重合画多条曲线,我们只需要在画图命令之前加上hold on就好,比如: t = 1:0.1:10: y1 = sin(2*pi*t); y1 = cos(2*pi ...
- 【Python画图01】一张图上两条线,坐标图例设置
一.学习背景 最近在学习python制图,准备做个模板好出图 目录 一.学习背景 二.参考 三.代码学习 1.figure语法说明 2. 一张图上2条线 3. 坐标轴取值范围.坐标轴标题.坐标轴小标 ...
- 把多个ROC曲线画在一张图上
为了展示实验效果,ROC曲线也能更直观的展示而且美观.所以我想画出ROC曲线.下面是两个方法:1)只画一个ROC曲线,2)多个ROC曲线展示在一张图上. 注:我是已经有y-pred,所以直接用即可,不 ...
最新文章
- 在MySQL数据库中,这4种方式可以避免重复的插入数据!
- androidwakelock_Android音频播放时wakelock的实现
- MySQL 5.6通过Keepalived+互为主从实现高可用架构
- 跨网段实现内网互通_【供暖站组网】冠航SD-LAN助力河北石家庄市30个供暖站异地组网实现内网互联互通...
- Linux下的图形界面编程
- 机器学习常用的算法整理:线性回归、逻辑回归、贝叶斯分类、支持向量机、K-means聚类、决策树、随机森林以及常用的应用场景整理
- c++二叉树的层序遍历_leetcode 103. 二叉树的锯齿形层序遍历
- 从零开始搭建口袋妖怪管理系统(3)-实现一个简单的SPA管理系统
- 2复数与复变函数(二)
- SetLayeredWindowAttributes 设置窗口透明
- [日常] Go语言圣经-GIF动画练习语法
- 如何安装.net framework?Win11安装net framework的方法
- Python自定义模块
- java语言数据库课程设计_数据库课程设计 人事管理系统 (一)
- 前端学习——页面布局
- 密码的输入问题(do while()和st1.equals(st2)的使用)
- 2-13 monthCalendar日历控件
- 小米平板4 android版本,小米平板4-4plus
- 速途网范锋:重要合作可能决定网络企业生死
- Configuring Add-on Service