【数学建模】——拟合算法

这篇具有很好参考价值的文章主要介绍了【数学建模】——拟合算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【数学建模】——拟合算法

拟合算法定义:与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。

插值和拟合的区别:

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

例子:

此例子中如果用插值算法,因为各点连起来需要的线段过去曲折不方便插值,所以我们可以利用拟合算法解决:

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

最小二乘法:

最小二乘法作为我们拟合算法的一个铺垫为后续的检验我们拟合的函数是否符合真实的图形而做基础条件【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

拟合值:将原xi代入到拟合的函数中得到的y^. 【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

Matlab代码实现最小二乘法来检验拟合函数:

(这里我们的代码实现是直接自己求k和b再去检验,我们也可以直接传入数据让matlab直接给我们求出来,后面我们讲曲线拟合工具箱时会讲到)

我们构造的函数是y=kx+b

  1. 传入数据画出散点【数学建模】——拟合算法,数学建模,算法,数学建模,matlab
  2. 求出n(行数)利用公式求出k和b 【数学建模】——拟合算法,数学建模,算法,数学建模,matlab
  3. Hold函数:继续在之前的图形上来画图,grid on函数:显示网格。
  4. 画出y=kx+b的函数图像

a.利用传统画法模拟生成x,y,y=kx+b,用plot画出【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

b.利用匿名函数法

匿名函数:在matlab中不能直接定一个含有未定义变量的函数方程,所以需要匿名含来解决此问题.

形式:函数名=@(自定义变量)函数方程

Eg:z=x^2+y^2 (false,xy没有被定义过)

Z=x@(x,y)x^2+y^2(true)。

匿名函数完成后再用fplot函数构图。

Fplot函数:可用于画出匿名一元函数的图像

fplot(函数名,[定义域范围])

eg:f=@(x)k*x+b; fplot(f,[2.5,7]);

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

如何让评价拟合的好坏?(出列)

拟合优度:到!

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab 【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

 

对于我们评价拟合的好坏有时需要看R^2(拟合优度),有时需要看SSE(误差)那如何区分什么时候看R^2,什么时候看SSE呢?

R^2只能用于判断线性函数时(此线性分彼线性)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

如何让判断函数是否线性:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

计算拟合有限度的代码:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

MatLab——曲线拟合工具箱

a.位置:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

b.也可以在命令行窗口输入cftool运行打开。

在拟合器中点击选择数据,会选择我们编译器中定义的变量,也可以取名字。【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

输入数据后会自动构建散点图,这样我们再从拟合类型中选择合适的方程或自定义方程(选择后会出拟合的线段,看看是否接近)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

函数图像的保存:

  1. 截图(不清晰)
  2. 导出:上方由导出->导出为窗口(会形成一个小窗口)->文件->导出设置->(如果为了图像更加清晰可以点击->渲染->分辨率->600)->导出(选择jpg

/png格式)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

Matlab拟合工具想生成图像后还可以帮你生成此图像的代码(作为自定义函数形式)

如何讲生成的代码保存的自己的代码中?

导出->生成代码【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

如何保存?

生成代码后->ctrl+s保存系统会自动以函数名定义问保存的文件名。

我们再把第一行function后面的复制到主函数中就可以应用了。

记得要把第一行后面的一些注释去掉就可以了

(类似这部分)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

函数名复制完后我们在应用和的时候只需要在定义一个变量用来存放我们在生成此图像时用到的函数(如何时系统的拟合函数在拟合工具箱会显示),在一些拟合函数中的参数也要定义上。

Eg:

如下图我们输入的时自定义函数,它会自动帮我们求出参数的值【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

在主函数应用的时候我们需要先把这些参数变量定义出来【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

                                                                                            

自己模拟数据进行演示:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

  1. randi(10,2,5):随机产生一个1-10之间的随机值正数矩阵,每次生成的数都会变

【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

也可以定义随机值的范围:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

2.rand函数产生一个0-1之间随机值的矩阵(S3,S4)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

  1. normrnd函数:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

  1. roundn函数:任意位置四舍五入

(在第几为四舍五入,第几位后面的位数全部归0)(四舍五入0.5,5,50,500……)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

例题预测美国人口:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab参考代码:

%主函数
clear;clc
%第一步传入数据
year = 1790 : 10 :2000;
populations = [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,populations,'o')
%第三步进行拟合函数利用拟合工具箱
cftool;
%拟合完成后生成的自定义函数:
[fitresult, gof] = createFit_American(year, populations)
%第四步定义变量,函数传入要预测的年份,绘制预测的图像
t = 2001:2030;
r = 0.0274;
xm = 342.4412;
predictions = xm./(1+(xm./3.9-1).*exp(-r.*(t-1790))); % 计算预测值(注意这里要写成点乘和点除,这样可以保证按照对应元素进行计算)
figure(2)
plot(year,populations,'o',t,predictions,'.') % 绘制预测结果图

 

%生成拟合图像的自定义函数
function [fitresult, gof] = createFit_American(year, populations)
%% 拟合: '美国人口'。
[xData, yData] = prepareCurveData( year, populations );
% 设置 fittype 和选项。
ft = fittype( 'xm/(1+(xm/3.9-1)*exp(-r*(t-1790)))', 'independent', 't', 'dependent', 'x' );
opts = fitoptions( 'Method', 'NonlinearLeastSquares' );
opts.Display = 'Off';
opts.StartPoint = [0.779051723231275 100];
% 对数据进行模型拟合。
[fitresult, gof] = fit( xData, yData, ft, opts );
% 绘制数据拟合图。
figure( 'Name', '美国人口' );
h = plot( fitresult, xData, yData );
legend( h, 'populations vs. year', '美国人口', 'Location', 'NorthEast', 'Interpreter', 'none' );
% 为坐标区加标签
xlabel( 'year', 'Interpreter', 'none' );
ylabel( 'populations', 'Interpreter', 'none' );
grid on

注意事项:在我们输入自定义函数后如果线段不符合点我们可以在你和选项中函数方程下面->高级选项,修改系数的值(本题的系数时r和xm我们已将xm改为100后符合线段数据)【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 

最后的结果:【数学建模】——拟合算法,数学建模,算法,数学建模,matlab

 博主主要跟着清风数学建模的课程学习,其中里面的一些图片都来源于上课视频的截图。文章来源地址https://www.toymoban.com/news/detail-562380.html

到了这里,关于【数学建模】——拟合算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数学建模:拟合算法

    🔆 文章首发于我的个人博客:欢迎大佬们来逛逛 根据1到12点间的温度数据求出温度与时间之间的近似函数关系 F ( t ) F(t) F ( t ) ,由 F ( t ) F(t) F ( t ) 推断 t =13.5 时的温度。这种根据离散数据求数据间近似函数关系的问题称为 曲线拟合问题 。 拟合问题与插值问题的区别在于

    2024年02月10日
    浏览(35)
  • 【数学建模】——拟合算法

    拟合算法定义:与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是寻求一个函数(曲线),使得该曲线在某种准则下与所有的数据点最为接近,即曲线拟合的最好(最小化损失函数)。 插值和拟合的区别: 例子: 此例子中如果用插值算法,因

    2024年02月16日
    浏览(36)
  • 数学建模-MATLAB神经网络工具箱实现数据拟合预测

    将数据集保存在矩阵data中 在APP页面找到Neural Net Fitting 3.输入与目标均为 data,Samples are 选择 Matrix rows 4.训练集和验证集的百分比可以自定义,一般默认 三种算法,各有优劣,一般默认第一个,点击Train进行训练 4.点击Performance 5.以此图为例,13.1572代表误差,误差越低越好,可

    2024年02月06日
    浏览(44)
  • 【数学建模】清风数模中正课4 拟合算法

    在插值算法中,我们得到的曲线一定是要经过所有的函数点的;而用拟合所得到的曲线则不一样, 拟合问题中,不需要得到的曲线一定经过给定的点 。 拟合的目的是寻求一个函数曲线,使得该曲线在某种准则下与所有的数据点最为接近,也就是曲线拟合地最好。 为了确定拟

    2024年02月11日
    浏览(36)
  • 【数学建模】matlab正态拟合直方图 | 获取一组数据的统计特征(平均值,方差等)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 首先给出一组数据样例: 1.1.1 平均值(期望) 获得结果: 1.1.2 中值 1.1.3 方差和标准差 A.方差 B.标准差(一般也是正态分布里面的西格玛) 1.1.4 排序 依然用之前的数据画图 从数据分布上来看大概就是个正

    2024年02月04日
    浏览(53)
  • 数学建模-插值算法(Matlab)

    注意:代码文件仅供参考,一定不要直接用于自己的数模论文中 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭 如何修改代码避免查重的方法:https://www.bilibili.com/video/av59423231   //清风数学建模 简单来说是根据已知点进行线性数据预测,但数据太少需要通过数学方

    2023年04月26日
    浏览(58)
  • 【数学建模】 MATLAB 蚁群算法

    MATLAB–基于蚁群算法的机器人最短路径规划 * https://blog.csdn.net/woai210shiyanshi/article/details/104712540?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168853912916800215023827%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257Drequest_id=168853912916800215023827biz_id=0utm_medium=distribute.pc_search_result.

    2024年02月15日
    浏览(49)
  • 【数学建模】《实战数学建模:例题与讲解》第十四讲-模拟退火、遗传算法(含Matlab代码)

    本系列侧重于例题实战与讲解,希望能够在例题中理解相应技巧。文章开头相关基础知识只是进行简单回顾,读者可以搭配课本或其他博客了解相应章节,然后进入本文正文例题实战,效果更佳。 如果这篇文章对你有帮助,欢迎点赞与收藏~ 现代优化算法,自20世纪80年代初开

    2024年02月04日
    浏览(55)
  • Matlab数学建模算法之模拟退火算法(SA)详解

    🔗 运行环境:Matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 🔐####  防伪水印——左手の明天 #### 🔐 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天分享 matlab数学建模算法 —— 模拟退火算法 💗

    2024年01月16日
    浏览(47)
  • 数学建模算法汇总(全网最全,含matlab案例代码)

      全国大学生数学建模竞赛中,常见的算法模型有以下30种: 最小二乘法 数值分析方法 图论算法 线性规划 整数规划 动态规划 贪心算法 分支定界法 蒙特卡洛方法 随机游走算法 遗传算法 粒子群算法 神经网络算法 人工智能算法 模糊数学 时间序列分析 马尔可夫链 决策树 支

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包