一、定义
与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。
二、评价拟合的好坏
注:线性函数指的是对参数为线性
三、MATLAB中拟合工具箱的使用
1.基础操作
2.生成图片(提高清晰度)
(1)选择导出设置
(2)渲染-分辨率-600
(3)导出
3.生成代码
4.结合例子的具体使用
例子如下:
具体步骤:
打开拟合工具箱后:
(1) X data 选择 year
(2) Y data 选择 population
(3) 拟合方式选择:Custom Equation (自定义方程)
(4) 修改下方的方框为:x = f(t) = xm/(1+(xm/3.9-1)exp(-r(t-1790)))
(5) 左边的result一栏最上面显示:Fit computation did not converge:即没有找到收敛解,右边的拟合图形也表明拟合结果不理想
(6) 点击Fit Options,修改非线性最小二乘估计法拟合的初始值(StartPoint), r修改为0.02,xm修改为500(初始值为什么这么设置还不是很清楚)
(7) 此时左边的result一览得到了拟合结果:r = 0.02735, xm = 342.4
(8) 依次点击拟合工具箱的菜单栏最左边的文件—Generate Code(导出代码到时候可以放在你的论文附录),可以得到一个未命名的脚本文件
(9) 在这个打开的脚本中按快捷键Ctrl+S,将这个文件保存到当前文件夹。
(10) 在现在这个文件中调用这个函数得到参数的拟合值和预测的效果
用拟合工具箱生成的相应代码
function [fitresult, gof] = createFit(year, population)
%% Fit: 'untitled fit 1'.
[xData, yData] = prepareCurveData( year, population );
% Set up fittype and options.
ft = fittype( 'x/(1+(x/3.9-1)*exp(-r*(t-1790)))', 'independent', 't', 'dependent', 'y' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.StartPoint = [0.02 500];
% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );
% Plot fit with data.
figure( 'Name', 'untitled fit 1' );
h = plot( fitresult, xData, yData );
legend( h, 'population vs. year', 'fit fuction', 'Location', 'NorthEast', 'Interpreter', 'none' );
% Label axes
xlabel( 'year', 'Interpreter', 'none' );
ylabel( 'population', 'Interpreter', 'none' );
grid on
题目要求是预测三十年后的美国人口:
1.用拟合计算出的xm = 342.4; r = 0.02735;代入拟合函数计算预测值,放入predictions变量中
population_predict.m代码
clear;clc
year = 1790:10:2000;
population = [3.9,5.3,7.2,9.6,12.9,17.1,23.2,31.4,38.6,50.2,62.9,76.0,92.0,106.5,123.2,131.7,150.7,179.3,204.0,226.5,251.4,281.4];
%plot(year,population,'o')
cftool % 拟合工具箱
[fitresult, gof] = createFit(year, population)%单步执行所选内容即可得拟合结果图像
t = 2001:2030;
xm = 342.4;
r = 0.02735;
predictions = xm./(1+(xm./3.9-1).*exp(-r.*(t-1790))); % 计算预测值(注意这里要写成点乘和点除,这样可以保证按照对应元素进行计算)
%figure(2)
% plot(year,population,'o',t,predictions,'.') % 绘制预测结果图
2.运行后在工作区双击predictions,将其值复制粘贴到excel表格中,调整一下格式导数数据表格。
3.绘制预测曲线