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

转自:https://blog.csdn.net/zyj1286076714/article/details/50375935

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

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

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

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


   
   
  1. function [fitresult, gof] = createFit(x, y)
  2. % CREATEFIT (X,Y)
  3. % Create a fit .
  4. %
  5. % Data for untitled fit 1’ fit :
  6. % X Input : x
  7. % Y Output: y
  8. % Output:
  9. % fitresult : a fit object representing the fit.
  10. % gof : structure with goodness- of fit info.
  11. %
  12. % 另请参阅 FIT, CFIT, SFIT.
  13. % 由 MATLAB 于 22-Dec- 2015 00: 27: 49 自动生成
  14. %% Fit: ’untitled fit 1’.
  15. [xData, yData] = prepareCurveData( x, y );
  16. % Set up fittype and options.
  17. ft = fittype( ’smoothingspline’ );
  18. % Fit model to data.
  19. [fitresult, gof] = fit( xData, yData, ft );
  20. % Plot fit with data.
  21. figure( ’Name’, ’untitled fit 1’ );
  22. h = plot( fitresult, xData, yData );
  23. legend( h, ’y vs. x’, ’untitled fit 1’, ’Location’, ’NorthEast’ );
  24. % Label axes
  25. xlabel( ’x’ );
  26. ylabel( ’y’ );
  27. grid on

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

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

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



   
   
  1. function [fitresult, gof] = e1(x, y, x1, y1, x2, y2) %将需要绘制图像的数据加入参数中
  2. %CREATEFIT(X,Y)
  3. % Create a fit.
  4. %
  5. % Data for 'untitled fit 1' fit:
  6. % X Input : x
  7. % Y Output: y
  8. % Output:
  9. % fitresult : a fit object representing the fit.
  10. % gof : structure with goodness- of fit info.
  11. %
  12. % 另请参阅 FIT, CFIT, SFIT.
  13. % 由 MATLAB 于 21-Dec -2015 23: 23: 33 自动生成
  14. %% Fit: 'untitled fit 1'.
  15. [xData, yData] = prepareCurveData( x, y );
  16. [xData1, yData1] = prepareCurveData( x1, y1 );<span style= "white-space:pre"> </span>%第二条曲线需要的代码,注意改变参数
  17. [xData2, yData2] = prepareCurveData( x2, y2 );<span style= "white-space:pre"> </span>%第三条曲线需要的代码,注意改变参数
  18. % Set up fittype and options.
  19. ft = fittype( 'smoothingspline' );<span style="white-space:pre"> </span>%顾名思义,将拟合方式设置为光滑曲线
  20. % Fit model to data.
  21. [fitresult, gof] = fit( xData, yData, ft );
  22. [fitresult1, gof1] = fit( xData1, yData1, ft );<span style= "white-space:pre"> </span>%第二条曲线需要的代码,注意改变参数
  23. [fitresult2, gof2] = fit( xData2, yData2, ft );<span style= "white-space:pre"> </span>%第三条曲线需要的代码,注意改变参数
  24. % Plot fit with data.
  25. figure( 'Name', 'fit 1' );
  26. h = plot( fitresult, xData, yData );
  27. hold on;<span style= "white-space:pre"> </span>%加入hold on 可以使之后的曲线画在同一张图中
  28. h1 = plot( fitresult1, xData1, yData1, 'o' );<span style="white-space:pre"> </span>%绘制第二条曲线,注意参数
  29. hold on;<span style= "white-space:pre"> </span>%作用同上
  30. h2 = plot( fitresult2, xData2, yData2, 'o' );<span style="white-space:pre"> </span>%绘制第三条曲线,注意参数
  31. hold on;
  32. % Label axes
  33. xlabel( 'x' );
  34. ylabel( 'y' );
  35. grid on


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






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



MATLAB曲线拟合工具箱(cftool)是一个用于进行曲线拟合的工具。通过该工具箱,用户可以选择不同类型的拟合曲线,如指数逼近、傅立叶逼近、高斯逼近、插值逼近、线性拟合、多项式逼近、幂逼近、有理数逼近、平滑逼近、正弦曲线逼近和Weibull逼近等。\[1\]\[2\] 使用MATLAB曲线拟合工具箱,用户可以加载数据并选择合适的拟合曲线类型进行拟合拟合结果可以进行分析,并可以输出拟合参数。如果只想显示拟合图像,可以选择“文件”->“Print to figure”;如果想导出拟合后的曲线数据,可以选择“文件”->“Generate Code”,生成代码后可以自行修改函数名并保存,然后就可以调用了。例如,如果想导出五次多项式Polynomial逼近的结果,可以查看生成代码的信息,其fitresult是函数的输出,可以通过fitresult.p1得到p1的系数,其他系数也可以类似地得到。如果想导出拟合后的曲线数据,只需要将横坐标传给fitresult即可。\[2\]\[3\] 总之,MATLAB曲线拟合工具箱提供了丰富的拟合曲线类型和功能,可以帮助用户进行曲线拟合分析。 #### 引用[.reference_title] - *1* *2* *3* [MATLAB曲线拟合工具箱(cftool)介绍(完结)](https://blog.csdn.net/didi_ya/article/details/119042304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值