怎么用matlab进行非线性的多元函数拟合?

怎么用matlab进行非线性的多元函数拟合?,第1张

方法一:

1、最常用的是多项式拟合,采用polyfit函数,在命令窗口输入自变量x和因变量y。

2、以二次多项式拟合为例,输入p=polyfit(x,y,2),如果想拟合更高次的多项式,更换括号内数字即可。

通过计算获得的p,是一个数组,对应了多项式的各项系数,以图中为例,拟合出的多项式为:y=09962x2+00053x-02833。

方法二:

1、首先,在上方工具栏选取APPS,点击curvefitting。输入自变量x和因变量y。

2、选择拟合方式,有多项式拟合polynomial,高斯拟合gaussian,幂指数拟合power等等,本次以多项式拟合为例。

3、通过数据计算,可以获得曲线参数(曲线函数中的各项系数),从而实现曲线拟合。

你可以用 fit()函数拟合,得到系数a、b的值。

数学模型应选用y=aexp(-bx)

其中:       a =      04467 ; b =       2151;

x=0:01:10;

%x的取值范围,可以为任意的。

y=exp(x);

%e指数函数

p=polyfit(x,y,5)

%五次多项式去拟合e指数函数,得到的p是五次多项式的系数。

fun=inline('a(1)+a(2)exp(-a(3)t)','a','t'); %建立函数

T=[1457 605 457 354 289 245 212 189 17 155 04 041 043 044 043 043];

t=[0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75];

a=lsqcurvefit(fun,[0,0,0],t,T); %拟合

hold on;plot(t,T,'bo'); %画原始数据点

t0=min(t):max(t);

T0=fun(a,t0);

plot(t0,T0,'r'); %画拟和曲线

hold off;disp(a) %显示A、B、R参数的值

myfun。m

function y = myfun(beta,x)

A=

B=

C=

m=beta(1);

n=beta(2);

y=A(B^m)(Cx^n)

窗口下执行以下命令

beta0=rand(1,2)

[beta,r,J]=nlinfit(x,y,@myfun,beta0);

对于还有年份的拟合问题,应按序列向量来处理,这样拟合的结果是有效的。即

x=[2009 2010 2011 2012 2013] 应改写为  x=1;5; %2009-2013年

具体实施代码如下

 x=1;5;

y=[7408 8742 9439 11308 13965];

fun=@(a,x)[a(1)exp(a(2)x)+a(3)exp(a(4)x)];

%a=a(1),b=a(2),c=a(3),d=a(4)

x0=[1 03 05 02]

a= nlinfit(x,y,fun,x0

d=a(4),c=a(3),b=a(2),a=a(1)

运行结果

d =         0116774298952341

c =         667544631579477

b =         12220839296099

a =        00444737875381383

对比图形

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12177628.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存