Matlab 最小二乘法拟合非线性函数

1、最小二乘原理

  参考资料:

  1、http://blog.csdn.net/lotus___/article/details/20546259

  2、http://blog.sina.com.cn/s/blog_5404ea4f0101afth.html

2、matlab实现最小二乘法

利用matlab的最小二乘拟合函数对非线性函数进行拟合,具体地拟合的函数:

[q r] = lsqcurvefit(fun, q_0, xdata, ydata);输入参数:fun:需要拟合的函数,假定有n个需要拟合的参数,那么 q = [q1,q2,...,qn]q_0:表示用户给定的一个起始点xdata:函数的自变量ydata:函数的因变量输出参数:q:表示求解得到的最优参数r:表示最小二乘的目标函数值,即残差。

实现代码

close
x = 1:1:100;
a = -1.5;
b = -10;
y = a*log(x)+b;
plot(x,y);

yrand = y + 0.5*rand(1,size(y,2));
plot(x,yrand,‘ro‘);

%%最小二乘拟合
xf=log(x);
yf=yrand;
f=inline(‘a(1)+a(2).*x‘,‘a‘,‘x‘);
[q,r]=lsqcurvefit(f,[1,0],xf,yf)
plot(x,yrand,‘ro‘,‘LineWidth‘,2) %绘制图表
hold on;

%%绘制拟合曲线
yn = q(1)+q(2)*log(x);
hold on;
plot(x,yn,‘b‘,‘LineWidth‘,2);

%%设置Legend
hleg = legend([‘原始函数(y=‘ num2str(b,3) ‘+‘ num2str(a,3) ‘ln(x)‘ ‘)数据‘],[‘拟合结果:y=‘ num2str(q(1),3) ‘+‘ num2str(q(2),3) ‘ln(x)‘],‘Location‘,‘NorthEast‘);%本身不能设置字体的大小,需要通过set进行设置
set(hleg,‘FontSize‘, 15, ‘FontAngle‘,‘italic‘,‘FontWeight‘,‘bold‘,...
     ‘TextColor‘,[.6,.2,.1],‘Color‘,[1,1,1]);%Color为设置坐标的背景颜色

 %%设置标题
 title(‘最小二乘拟合:y=a+b*ln(x)‘,‘Color‘,‘k‘,‘FontSize‘,20);

 %%坐标轴标题设置
 xlabel(‘x‘,‘Color‘,‘k‘,‘FontSize‘,15);%横轴标题
 ylabel(‘y‘,‘Color‘,‘k‘,‘FontSize‘,15);%纵轴标题

%%保存图像
set(1, ‘InvertHardCopy‘, ‘off‘);%设置的背景色有效,如果为on则图形不保存背景色,maltab 默认为 on
filename = ‘lnx‘;
print(1, ‘-djpeg‘, filename);%其他格式 -djpeg,-dpng,-dbmp,-dtiff,-dgif

拟合结果

如下图所示

时间: 2024-10-11 23:53:21

Matlab 最小二乘法拟合非线性函数的相关文章

最小二乘法拟合非线性函数及其Matlab/Excel 实现(转)

1.最小二乘原理 Matlab直接实现最小二乘法的示例: close x = 1:1:100; a = -1.5; b = -10; y = a*log(x)+b; yrand = y + 0.5*rand(1,size(y,2)); %%最小二乘拟合 xf=log(x); yf=yrand; xfa = [ones(1,size(xf,2));xf] w = inv(xfa*xfa')*xfa*yf';%直接拟合得到的结果 参考资料: 1.http://blog.csdn.net/lotus_

tensorflow神经网络拟合非线性函数

本实验通过建立一个含有两个隐含层的BP神经网络,拟合具有二次函数非线性关系的方程,并通过可视化展现学习到的拟合曲线,同时随机给定输入值,输出预测值,最后给出一些关键的提示. 源代码如下: # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np import matplotlib.pyplot as plt plotdata = { "batchsize":[], "loss":[] } d

MATLAB实例:非线性曲线拟合

MATLAB实例:非线性曲线拟合 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 用最小二乘法拟合非线性曲线,给出两种方法:(1)指定非线性函数,(2)用傅里叶函数拟合曲线 1. MATLAB程序 clear clc xdata=[0.1732;0.1775;0.1819;0.1862;0.1905;0.1949;0.1992;0.2035;0.2079;0.2122;0.2165;0.2208;0.2252;0.2295;0.2338;0.238

非线性函数的最小二乘拟合——兼论Jupyter notebook中使用公式 [原创]

突然有个想法,利用机器学习的基本方法——线性回归方法,来学习一阶RC电路的阶跃响应,从而得到RC电路的结构特征——时间常数τ(即R*C).回答无疑是肯定的,但问题是怎样通过最小二乘法.正规方程,以更多的采样点数来降低信号采集噪声对τ估计值的影响.另外,由于最近在捣鼓Jupyter和numpy这些东西,正好尝试不用matlab而用Jupyter试试看.结果是意外的好用,尤其是在Jupyter脚本中插入LaTeX格式的公式的功能,真是太方便了!尝试了直接把纸上手写的公式转换到Jupyter脚本中的常

Python闲谈(二)聊聊最小二乘法以及leastsq函数

1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一点”视角与“多点→一线”视角 最小二乘法非常简单,我把它分成两种视角描述: (1)已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解: (2)已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k

遗传算法的C语言实现(一):以非线性函数求极值为例

以前搞数学建模的时候,研究过(其实也不算是研究,只是大概了解)一些人工智能算法,比如前面已经说过的粒子群算法(PSO),还有著名的遗传算法(GA),模拟退火算法(SA),蚁群算法(ACA)等.当时懂得非常浅,只会copy别人的代码(一般是MATLAB),改一改值和参数,东拼西凑就拿过来用了,根本没有搞懂的其内在的原理到底是什么.这一段时间,我又重新翻了一下当时买的那本<MATLAB智能算法30个案例分析>,重读一遍,发现这本书讲的还是非常不错的,不仅有现成算法的MATLAB实现,而且把每一种算

最小二乘法拟合java实现源程序(转)

因为我所在的项目要用到最小二乘法拟合,所有我抽时间将C++实现的程序改为JAVA实现,现在贴出来,供大家参考使用./** * <p>函数功能:最小二乘法曲线拟合</p> * @param x 实型一维数组,长度为 n .存放给定 n 个数据点的 X 坐标 * @param y 实型一维数组,长度为 n .存放给定 n 个数据点的 Y 坐标 * @param n 变量.给定数据点的个数 * @param a 实型一维数组,长度为 m .返回 m-1 次拟合多项式的 m 个系数 * @

python最小二乘法拟合

知道函数形式,python用最小二乘法拟合函数参数 例子: #-*- coding: utf-8 -*- #最小二乘拟合 #知道函数形式了,拟合函数的参数 #通过leastsq函数对带噪声的实验数据x, y1进行数据拟合,可以找到x和真实数据y0之间的正弦关系的三个参数: A, k, theta import numpy as np from scipy.optimize import leastsq import matplotlib.pyplot as pl def func(x,p): "

MATLAB中的常用函数

MATLAB中的常用函数 1. 特殊变量与常数 主题词 意义 主题词 意义 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN 非数 nargin 输入参数个数 nargout 输出参数的数目 pi 圆周率 nargoutchk 有效的输出参数数目 realmax 最大正浮点数 realmin 最小正浮点数 varargin   实际输入的参量 varargout 实际返回的参量     2.