如何使用MATLAB在一个图中创建多条拟合曲线在一个图中的方法

时间:2024-03-19 09:38:52
  1. 以下是未进行拟合的原始曲线的实现代码
    x1=[0,2.95,6,7.0,13.1,15];
    x2=[0,3.1,6,7.1,12.9,15];
    y1=[410,328,350,365,250,245];
    y2=[400,320,348,362,250,245];
    plot(x1,y1);
    hold on $不更新图形的情况下画第二条曲线
    plot(x2,y2);
    如何使用MATLAB在一个图中创建多条拟合曲线在一个图中的方法
    标题
  2. 下面进行图形的拟合

点击工具➡️基本拟合➡️保形插值。

选择数据中选择data1,绘制拟合图中选择保形插值。

(这里我选择保形插值,因为我希望保留曲线的形状趋势)

如何使用MATLAB在一个图中创建多条拟合曲线在一个图中的方法

可以看到虽然保形插值曲线绘制成功了,但是是三条曲线在同一个图中,而且保形曲线只能有一条,不是我想要的两条保形曲线。

3.我们换一种方法修改代码,加入cftool

x1=[0,2.95,6,7.0,13.1,15];
x2=[0,3.1,6,7.1,12.9,15];
y1=[410,328,350,365,250,245];
y2=[400,320,348,362,250,245];
cftool

点击运行,X data选择x1,Y data 选择y1,右侧选择Interpolant,method选择shape-preserving(PCHIP).

右下角的图标中就出现了使用保形插值方法拟合的曲线,这样我们就得到了一条拟合曲线了。

怎么在图形中生成第二条曲线呢,进入第四步。

4.点击文件➡️选择 generate code导出生成这条曲线的代码。

        我们会发现下面的代码是函数形式的m文件,并不是我们经常用的.m脚本文件。所以这个函数是可以直接在脚本文件中进行调用的。

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

%  由 MATLAB 于 26-Nov-2018 11:06:07 自动生成


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

% Set up fittype and options.
ft = 'pchipinterp';

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

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

5.如何调用函数生成曲线

    按照3.4中方法我们生成这两条曲线的代码,我这里分别把函数名命名为了

function [fitresult, gof] = createFit(x2, y2)和

function [fitresult, gof] = createFit1(x1, y1)

所以只要先后调用这两个函数就可以了。具体代码如下:

x1=[0,2.95,6,7.0,13.1,15];
x2=[0,3.1,6,7.1,12.9,15];
y1=[410,328,350,365,250,245];
y2=[400,320,348,362,250,245];
createFit(x2, y2)
hold on
createFit1(x1, y1)

如何使用MATLAB在一个图中创建多条拟合曲线在一个图中的方法

至此,教程结束,欢迎大家与我交流。

微博@慕亦001