MATLAB中利用cftool导出代码实现一张图中拟合多条平滑曲线

MATLAB中自带的cftool拟合工具箱不能将多条曲线同时画在同一副图中,而常规的plot()函数又不能拟合平滑直线,接下来总结一种可以利用cftool导出的代码,在一张图中拟合多条平滑曲线。

首先输入所要拟合的数据,如x, y, x1, y1, x2, y2等等。

之后打开cftool工具箱,使用数据拟合曲线,在拟合方式一栏选择Smoothing Spline。可以得到图像。

之后在文件菜单栏中点击Generate Code,之后将在工作空间里看到导出的m文件。

function [fitresult, gof] = createFit(x, y)
%CREATEFIT(X,Y)
%  Create a fit.
%
%  Data for 'untitled fit 1' fit:
%      X Input : x
%      Y Output: y
%  Output:
%      fitresult : a fit object representing the fit.
%      gof : structure with goodness-of fit info.
%
%  另请参阅 FIT, CFIT, SFIT.

%  由 MATLAB 于 22-Dec-2015 00:27:49 自动生成


%% Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( x, y );

% Set up fittype and options.
ft = fittype( 'smoothingspline' );

% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft );

% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'y vs. x', 'untitled fit 1', 'Location', 'NorthEast' );
% Label axes
xlabel( 'x' );
ylabel( 'y' );
grid on


也就是说,其实也可以通过编写函数来实现拟合平滑曲线,但是由cftool工具箱导出的代码可以减少自己的工作量,减少由于MATLAB语言不熟练导致效率低下的工作。

之后在这个m文件的适当位置加入拟合多条曲线的代码,就可以实现与cftool拟合平滑曲线效果相同的多条曲线了。

以下是我修改的代码,注意注释。

function [fitresult, gof] = e1(x, y, x1, y1, x2, y2)     %将需要绘制图像的数据加入参数中
%CREATEFIT(X,Y)
%  Create a fit.
%
%  Data for 'untitled fit 1' fit:
%      X Input : x
%      Y Output: y
%  Output:
%      fitresult : a fit object representing the fit.
%      gof : structure with goodness-of fit info.
%
%  另请参阅 FIT, CFIT, SFIT.

%  由 MATLAB 于 21-Dec-2015 23:23:33 自动生成


%% Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( x, y );
[xData1, yData1] = prepareCurveData( x1, y1 );%第二条曲线需要的代码,注意改变参数
[xData2, yData2] = prepareCurveData( x2, y2 );%第三条曲线需要的代码,注意改变参数

% Set up fittype and options.
ft = fittype( 'smoothingspline' );%顾名思义,将拟合方式设置为光滑曲线

% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft );
[fitresult1, gof1] = fit( xData1, yData1, ft );%第二条曲线需要的代码,注意改变参数
[fitresult2, gof2] = fit( xData2, yData2, ft );%第三条曲线需要的代码,注意改变参数

% Plot fit with data.
figure( 'Name', 'fit 1' );
h = plot( fitresult, xData, yData );
hold on;%加入hold on 可以使之后的曲线画在同一张图中
h1 = plot( fitresult1, xData1, yData1, 'o'  );%绘制第二条曲线,注意参数
hold on;%作用同上
h2 = plot( fitresult2, xData2, yData2, 'o'  );%绘制第三条曲线,注意参数
hold on;

% Label axes
xlabel( 'x' );
ylabel( 'y' );
grid on

保存之后,在命令行窗口中运行该m函数文件,即可得到在一张图中同时拟合三条光滑曲线。
 

同理,其他拟合方式也可以使用相同的方式达到多条曲线同时拟合的图像。

  • 34
    点赞
  • 241
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值