问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

非线性拟合m文件是什么

发布网友 发布时间:2022-12-29 06:34

我来回答

1个回答

热心网友 时间:2023-10-25 17:43

非线性数据拟合
数学领域术语
科普中国 | 本词条由“科普中国”科学百科词条编写与应用工作项目审核
审阅专家 王慧维
实际的数据拟合问题研究中一般分为线性数据拟合和非线性数据拟合。其中,线性数据拟合通常是采用一组简单的、线性无关的基函数来*近试验数据。而对于非线性数据拟合问题,通常分为两种情形进行处理,一种是利用变量代换,将其转为线性问题再求解。另一种是不能线性化的问题,处理起来比较麻烦,可以用MATLAB等程序来实现。
中文名
非线性数据拟合
外文名
nonlinear data-fitting
分类
计算机 数学
方法
最小二乘法
工具
MATLAB等
简介定义方法MATLAB实现TA说
简介
在科学技术的各领域中,不同变量之间的相互关系通常用函数描述。有些函数关系可由经典理论分析推导得出,不仅为进一步的分析研究工作提供理论基础,也可以方便的解决实际工程问题。但是,很多工程问题难以直接推导出变量之间的函数表达式,或者即使能得出表达式,公式也十分复杂,不利于进一步的分析与计算。由于研究需要,希望能得到这些变量之间的函数关系,这时就可以利用曲线拟合方法,用已知的实验数据结合数学方法得到变量之间的近似函数表达式。而在处理实验数据时,常用的是最小二乘法。[1]
在实际的数据拟合问题研究中一般分为线性数据拟合和非线性数据拟合。其中,线性数据拟合通常是采用一组简单的、线性无关的基函数来*近试验数据。而对于非线性数据拟合问题,通常分为两种情形进行处理,一种是利用变量代换,将其转为线性问题再求解。另一种是不能线性化的问题,处理起来比较麻烦,可以用MATLAB等程序来实现。
定义
设有实验数据(
),(i=1,2,3....n),寻找函数
,使得函数在点
处的观测值与观测数据偏差的平方和达到最小。解决此类问题,有以下几个步骤:首先做出散点图,确定函数类别;根据已知数据确定待定函数的初始值,用MATLAB软件计算最佳参数;根据可决系数u,比较拟合结果。
方法
为了实现非线性数据拟合,首先要定义函数,通常采用inline定义的函数用于曲线拟合、数值计算。
步骤:1、建立M文件;
2、fun=inline('f(x)','参变量','x').
在实际问题中,有时散点图做出后未必是多项式的图形,可能像其他的曲线,这是可以猜测曲线类型,然后利用如下命令:
[beta,r,J]=nlinfit(x,y,fun,beta0)
其中,x y为原始数据,fun是在M文件中定义的函数,beta0是函数中参数的初始值;beta为函数的最优值,r是各点处的拟合残差,J为雅克比矩阵的数值。
MATLAB实现
LSQNONLIN 解决非线性最小二乘法问题,包括非线性数据拟合问题;LSQCURVEFIT 解决非线性数据拟合问题,下面给出利用这两个函数的例子。
LSQNONLIN
下面的例子说明利用LSQNONLIN函数用下面的函数进行拟合:
f = A + B exp(C*x)+D*exp(E*x)
对数据集x与y进行拟合,其中y是在给定x的情况下的期望输出(可以是方程给出数组,也可以是单独数据组成的数组)。
为了解决这个问题,先建立下面的名为 fit_simp.m的函数,它利用数据x与y,将他们作为优化输入参数传递给LSQNONLIN。利用给定的数据x计算f的值,再与原始数据y进行比较。经验值与实际计算出的值之间的差异作为输出值返回。LSQNOLIN函数就是最小化这些差的平方和。
function diff = fit_simp(x,X,Y)
A = x(1);B = x(2);C = x(3);D = x(4);E = x(5);
diff = A + B.*exp(C.*X)+D.*exp(E.*X)-Y;
下面的脚本是利用上面定义的fit_simp.m函数的一个例子:
>> X=0:.01:.5;
>> Y=2.0.*exp(5.0.*X)+3.0.*exp(2.5.*X)+1.5.*rand(size(X));
>> X0=[1 1 1 1 1]';
>> options=optimset('Largescale','off');
>> x=lsqnonlin(@fit_simp,X0,[],[],options,X,Y);
Optimization terminated successfully:
Gradient in the search direction less than tolFun
Gradient less than 10*(tolFun+tolX)
>> Y_new=x(1)+x(2).*exp(x(3).*X)+x(4).*exp(x(5).*X);
>> plot(X,Y,'+r',X,Y_new,'b');
注意:LSQNONLIN 只可以处理实数变量。在处理包括复数变量的实例的拟合的时候,数据集应该被切分成实数与虚数部分。
下面给出一个例子演示如何对复数参数进行最小二乘拟合。
为了拟合复数变量,你需要将复数分解为实数部分与虚数部分,然后把他们传递到函数中去,这个函数被LEASTSQ作为单个输入调用。首先,将复数分解为实部与虚部两个向量。其次,将这两个向量理解成诸如第一部分是实部、第二部分是虚部。在MATLAB函数中,重新装配复数数据,并用你想拟合的复数方程计算。将输出向量分解实部与虚部,将这两部分连接为一个单一的输出向量传递回LEASTSQ。
下面,给出一个例子演示如何根据两个复数指数拟合实数X与Y。
建立方程:
function zero = fit2(x,X,Y)
cmpx = x(1:4)+i.*x(5:8);
zerocomp = cmpx(1).*exp(cmpx(2).*X) +
cmpx(3).* exp(cmpx(4).*X)-Y;
numx = length(X);
zero=real(zerocomp);
zero(numx+1:2*numx)=imag(zerocomp);
Y = a*exp(b*X)+c*exp(d*X);
>> X=0:.1:5;
>> Y=sin(X);
>> Y=Y+.1*rand(size(Y))-.05;
>> cmpx0=[1 i 2 2*i];
>> x0(1:4)=real(cmpx0);
>> x0(5:8)=imag(cmpx0);
>> x=leastsq(@fit2,x0,[],[],X,Y);
>> cmpx=x(1:4)+i.*x(5:8);
>> Y1=real(cmpx(1).*exp(cmpx(2).*X)+cmpx(3).*exp(cmpx(4).*X));
>> plot(X,Y1,'r');
>> hold on
>> plot(X,Y,'+');
LSQCURVEFIT
利用此函数可以在最小二乘意义上解决非线性曲线拟合(数据拟合)问题。也就是说,给定输入数据xdata,以及观测的输出数据ydata,找到系数x,使得函数F(x,xdata)能够最好的拟合向量值。LSQCURVEFIT利用与LSQNONLIN相同的算法。它的目的在于专门为数据拟合问题提供一个接口。在拟合的时候,2维、3维或者N维参数拟合是没有什么差别的。
下面给出一个3维参数拟合的例子。待拟合函数是:
z = a1*y.*x..^2+a2*sin(x)+a3*y.^3;
function F = myfun(a, data);
x = data(1,:);
y = data(2,:);
F= a(1)*y.*x.^2+a(2)*sin(x)+a(3)*y.^3;
下面的脚本展示了这么利用上面的函数:
>> xdata= [3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4];
>> ydata= [16.5 150.6 263.1 24.7 208.5 9.9 2.7 163.9 325.0 54.3];
>> zdata= [95.09 23.11 60.63 48.59 89.12 76.97 45.68 1.84 82.17 44.47];
>> data=[xdata; ydata];
>> a0= [10, 10, 10];
>> [a, resnorm] = lsqcurvefit(@myfun,a0,data,zdata)
Maximum number of function evaluations exceeded;
increase options.MaxFunEvals
a = 0.0088 -34.2886 -0.0000
resnorm = 2.2636e+004
>> format long
>> a
a = 0.00881645527493 -34.28862491919983 -0.00000655131499
>> option=optimset('MaxFunEvals',800);
>> option=optimset('MaxFunEvals',800);
>> [a, resnorm] = lsqcurvefit(@myfun,a0, data, zdata, [], [], option)
Optimization terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
a = 0.00740965259653 -20.21201417111138 -0.00000502014964
resnorm = 2.195886958305428e+004
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
高启强与陈书婷结婚是哪一集 陈舒婷和高启强第几集结婚 高启强陈书婷结婚是第几集 高启强和陈书婷结婚是第几集 高启强和陈书婷第几集结的婚 狂飙高启强第几集和大嫂在一起的 2021年清明节时间(是公历几月几号) js中类似`${xx,xxxy}`的语句是什么意思? 用支付宝帐号注册的淘宝帐号但是淘宝显示未绑定支付宝帐号如图 银行黑户影响子女什么 上面天字下面火字是什么字? 开火上下结构念什么 开火上下结构字的介绍 15年卡宴行车记录仪app在哪里下载 怎么保存才能保存电影票的字 黄金貔貅有哪些佩戴禁忌 东芝笔记本怎么装win7系统 为什么建设银行商城融资担保公司无缘无故扣我钱 中融信融资乱扣款怎么处理 陕西中为融资担保有限公司扣款33块是怎么回事 求一篇韩语作文, 不要翻译器翻译的 。 用韩语写作文400字 H59分软硬两种状态吗? 中国电信怎么查话费 中国电信如何查话费 防范火灾风险写作文二年级 保护动物的唯美句子(69条) 保护动物的优美句子 保护动物句子84句 急求!!!谁知道上海松江区新桥镇《晶粉世家》 米粉店的外卖电话? 长沙好吃的米粉店? 莆田下花这边,有家马家米粉,谁有他们家的外卖电话? 2012年12月15日 数字电视 动作电影频道 晚上演的那个电影是什么? 怎样探索适合自己的学习方法 奇瑞旗云1用什么轮胎? 奇瑞旗云1由于换胎时轮胎装大了,后胎有点磨怎么办 旗云1外球笼的规格尺寸 以忆开头的名字唯美 怎么弄免费的QQ空间啊?具体步骤啊!越具体越好!快!急事!! 如何弄免费QQ空间 二级魔方拆散了怎么拼装? 苔菜粉条肉丸煲怎么做家常苔菜粉条肉丸煲的做法 谁能告诉我大学英语四六级报名流程,怎么报的,具体时间,详细点,谢谢,我是大一新生 键盘光效怎么调 有带猫扇的AMD显卡吗 局域网里电脑的硬件共享 手机上存有对方号码,为什么在微信上添加时却不显示对方? 手机上存有对方号码,为什么在微信上添加时却不显示对方? 为什么在别人的qq空间发表留言提示无权发表留言 为什么我的QQ空间经常提示 你无权留言 应该怎么办??? 喜马拉雅山下能种苹果嘛 喜马拉雅山下的神秘部落,不与外界通婚,却有着开放的配偶习俗