- 以下是未进行拟合的原始曲线的实现代码
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);
- 下面进行图形的拟合
点击工具➡️基本拟合➡️保形插值。
选择数据中选择data1,绘制拟合图中选择保形插值。
(这里我选择保形插值,因为我希望保留曲线的形状趋势)
可以看到虽然保形插值曲线绘制成功了,但是是三条曲线在同一个图中,而且保形曲线只能有一条,不是我想要的两条保形曲线。
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)
至此,教程结束,欢迎大家与我交流。
微博@慕亦001