您现在的位置是:首页 > Javascript
当前栏目
Matlab批量拟合曲线并绘制在一张图上
2023-04-18 16:10:54 时间
简单的拟合
在命令行输入
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:70
mx = 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
相关文章
- 前端面试 【JavaScript】— typeof 是否能正确判断类型?
- 前端面试 【JavaScript】— instanceof 能否判断基本数据类型?
- 前端面试 【JavaScript】— 能不能手动实现一下 instanceof 的功能?
- 前端面试 【JavaScript】— Object.is和=== 有什么区别?
- 前端面试 【JavaScript】— JS中类型转换有哪几种?
- 前端面试 【JavaScript】— == 和 ===有什么区别?
- 前端面试 【JavaScript】— 对象转原始类型是根据什么流程运行的?
- JavaScript 的 parseInt() 函数
- javascript实现两个数字进行组合
- JS监听键盘按键
- 大前端开发中的路由管理之五:Flutter篇
- Javascript的DOM操作
- 在Vue项目中使用WebSocket技术
- 新手向:前端程序员必学基本技能——调试JS代码
- React 毁了 Web 开发!
- 「JS 逆向百例」cnki 学术翻译 AES 加密分析
- 商标注册域名后缀用什么?商标和域名有哪些区别?
- 网站建设流程是怎样的?需要看重哪些细节?
- 网站域名商标注册流程是什么?网站域名商标有什么用?
- 如何建设一个实用性强的网站 网站上线后如何运营