草庐IT

Matlab批量拟合曲线并绘制在一张图上

yscript 2023-04-21 原文

文章目录

简单的拟合

在命令行输入

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');
%表格形式是702(每组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

有关Matlab批量拟合曲线并绘制在一张图上的更多相关文章

  1. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  2. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  3. ruby-on-rails - Rails 3 在一个查询中包含多个表 - 2

    我正在为锦标赛开发一个Rails应用程序。我在这个查询中使用了三个模型:classPlayertruehas_and_belongs_to_many:tournamentsclassTournament:destroyclassPlayerMatch"Player",:foreign_key=>"player_one"belongs_to:player_two,:class_name=>"Player",:foreign_key=>"player_two"在tournaments_controller的显示操作中,我调用以下查询:Tournament.where(:id=>params

  4. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  5. ruby - 在一个进程多个数据库连接 sinatra 应用程序中使用什么 ORM? - 2

    已检查ActiveRecord、DataMapper、Sequel:有些使用全局变量(静态变量)有些需要在使用模型加载源文件之前打开数据库连接。在使用不同数据库的sinatra应用程序中使用哪种ORM更好。 最佳答案 DataMapper专为多数据库使用而设计。你可以通过像DataMapper.setup(:repository_one,"mysql://localhost/my_db_name")这样的方式设置多个存储库。DataMapper随后会跟踪所有已在哈希中设置的存储库,您可以引用该哈希并将其用于范围界定:DataMapp

  6. ruby - 如何批量检查文件内容是否相同 - 2

    我想使用Ruby检查数千对文件中的每对文件是否包含相同的信息。有人能指出我正确的方向吗? 最佳答案 require'fileutils'FileUtils.compare_file('file1','file2')当且仅当文件file1和file2相同时返回true。 关于ruby-如何批量检查文件内容是否相同,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/33769865/

  7. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  8. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  9. ruby-on-rails - 您如何找到一天在一个月中的星期几? - 2

    我似乎无法理解这个可能很简单的问题..假设我有日期..Fri,14Sep201218:37:50+0200我如何找出这个月的这个日期是星期几?是第一个,第二个..?第三个?谢谢! 最佳答案 为什么要使用图书馆?Ruby默认有它:Weeknumber:Theweek1ofYYYYstartswithaSundayorMonday(accordingto%Uor%W).Thedaysintheyearbeforethefirstweekareinweek0.%U-Weeknumberoftheyear.Theweekstartswith

  10. ruby - 使用 Ruby 测试单元在一个脚本中并行运行多个测试 - 2

    我在一个ruby​​脚本中有4个测试,我使用命令运行它们rubytest.rb输出看起来像LoadedsuitetestStarted....Finishedin50.326546seconds.4tests,5assertions,0failures,0errors,0pendings,0omissions,0notifications100%passed我想要实现的是,并行运行所有4个测试,而不是按顺序运行。大约4个线程,每个线程运行一个测试,有效地将执行时间减少到4个测试中最慢的一个+并行执行的时间很短。我遇到了this,但这似乎并行运行多个ruby​​测试文件-假设我有test

随机推荐