MATLAB最小二乘拟合

news/2024/10/23 5:33:10/

最小二乘拟合

  • 线性最小二乘拟合
    • 非线性最小二乘法

线性最小二乘拟合

1、polyfit
例:a= polyfit(x0,y0,m)
其中,输入参数x0,y0为要拟合的数据,m为拟合多项式的次数(一般不超过3次),输出参数a为拟合多项式的次数(从0次开始)

%例:
clc;clear
x=[19,25,31,38,44];
y=[19.0,32.3,49.0,73.3,97.8];
ab=polyfit(x,y,2)
x0=19:0.1:44;
y0=ab(3)+ab(2)*x0+ab(1)*x0.^2;
plot(x,y,'o',x0,y0,'r')

2、polyval
例:y=polyval(a,x)
其中,输入参数a为拟合多项式的次数,输入参数x为所要求y值的x值,输出参数y为所要求的值。
例:某乡镇企业1990-1996年的生产利润如下
年份 1990 1991 1992 1993 1994 1995 1996
利润(万元) 70 122 144 152 174 196 202
试预测1997和1998年的利润。

%代码如下
x0=[1990 1991 1992 1993 1994 1995 1996];
y0=[70 122 144 152 174 196 202];
a=polyfit(x0,y0,1)
y97=polyval(a,1997)
y98=polyval(a,1998)

非线性最小二乘法

1、lsqcurvefit
已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),求系数向量x(当然对于不同的函数用法可以求得别的东西)

%格式
x = lsqcurvefit ('fun',x0,xdata,ydata);
x =lsqcurvefit ('fun',x0,xdata,ydata,options);
x = lsqcurvefit ('fun',x0,xdata,ydata,options,'grad');
[x, options] = lsqcurvefit ('fun',x0,xdata,ydata,);
[x, options,funval] = lsqcurvefit ('fun',x0,xdata,ydata,);
[x, options,funval, Jacob] = lsqcurvefit ('fun',x0,xdata,ydata,);

参数说明:
x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;
lb、ub为解向量的下界和上界lb≤x≤ub,若没有指定界,则lb=[ ],ub=[ ];
options为指定的优化参数;
fun为待拟合函数,计算x处拟合函数值,其定义为 function F = myfun(x,xdata)
resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和;
residual=fun(x,xdata)-ydata,即在x处的残差;
exitflag为终止迭代的条件;
output为输出的优化信息;
lambda为解x处的Lagrange乘子;
jacobian为解x处拟合函数fun的jacobian矩阵。
2、lsqnonlin
已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),求系数向量x(当然对于不同的函数用法可以求得别的东西) (差不多,感觉一般会用lsqcurvefit)

%格式x=lsqnonlin('fun',x0);x= lsqnonlin ('fun',x0,options);x= lsqnonlin ('fun',x0,options,'grad');[x,options]= lsqnonlin ('fun',x0,);[x,options,funval]= lsqnonlin ('fun',x0,);

在这里插入图片描述

%用lsqcurvefit函数
%先编写函数文件fun.m
function f=fun(x,tdata,cdata)
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)-cdata
%其中x(1)=a,x(2)=b,x(3)=k;
%输入命令
tdata=[100:100:1000]
cdata=1e-3*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
x0=[0.2,0.05,0.05];
x=lsqcurvefit('fun',x0,tdata,cdata)
f=fun(x,tdata,cdata)
end
%用lsqnonlin
%编写函数文件fun.m
function f=fun(x)
tdata=100:100:1000;
cdata=1e-3*[4.54,4.99,5.35,5.65,5.90,6.10,6.26,6.39,6.50,6.59];
f=x(1)+x(2)*exp(-0.02*x(3)*tdata)-cdata
%输入命令:
x0=[0.2,0.05,0.05];
x=lsqnonlin('fun',x0)
f=fun(x)
end

http://www.ppmy.cn/news/213808.html

相关文章

Python中使用正则表达式以及正则表达式匹配规则

前排提要: 本博客介绍在Python下使用正则表达式从给定的字符串中获取到想要的字符串。 1 导库 import re 2 使用模板 re_pattern re.compile(pattern, flags0) result re.findall(re_pattern,string) 3 说明 参数描述pattern匹配的正则表达式,…

y97.第六章 微服务、服务网格及Envoy实战 -- xDS API与动态配置(八)

7.5 回顾:Envoy的配置方式 Envoy的架构支持非常灵活的配置方式:简单部署场景可以使用纯静态配置,而更复杂的部署场景则可以逐步添加需要的动态配置机制; 纯静态配置:用户自行提供侦听器、过滤器链、集群及HTTP路由(http代理场景),上游端点的发现仅可通过DNS服务进行,且…

基于vivoY97的Adb驱动程序的安装

为了能够实现vivoY97手机能够和电脑进行有线以及无线的数据传输,需要安装USB驱动以及Adb驱动。 所有驱动的下载地址:https://download.csdn.net/download/lykymy/11074161 具体的配置步骤如下所示: 手机端 点击“设置”点击“更多设置”点…

MIME 对照表 02

废话不多说,直接看! 媒体类型文件扩展名说明application/msworddoc微软 Office Word 格式(Microsoft Word 97 - 2004 document)application/vnd.openxmlformats-officedocument.wordprocessingml.documentdocx微软 Office Word 文…

网站性能优化从入门到粗通(PHP 篇)

本文来自作者 蒋岩 在 GitChat 上分享 「网站性能优化从入门到粗通(PHP 篇)」,「阅读原文」查看交流实录。 「文末高能」 编辑 | 哈比 题外话:本次 Chat 的主题是入门到粗通,所以内容对于老司机来说会比较 Low&#xf…

还在纠结offer选择吗?也许你该看看这篇文章!

前言 金秋已至,又是一年收获的季节。相信很多同学都已经收获了一些公司的offer了,offer虽好,但最终也只能选择一个,那么如何理性地选择offer,也成为了困扰很多同学的问题了。今天我们就给大家分享一篇关于该话题的文章…

视频编码完全指南

点击上方“LiveVideoStack”关注我们 翻译 | Alex 技术审校 | 袁荣喜 本文来自OTTVerse,作者为Krishna Rao Vijayanagar。 视频编码是一门在减少视频数据体积大小或码率的同时而不对其质量产生不良影响(在人类的视觉感知下)的科学。对视频进行…

你为什么成为一名程序员?

兄弟姐妹们,还记得自己成为一名程序员的初心吗?遥想公瑾当年,不,遥想我当年,似乎是“命中注定”走上这条路的。因为不在计划之内嘛,所以走了很多弯弯路。 路漫漫其修远兮,我们就来上下求索一下…