matlab中,关于多元函数的拟合matlab程序如何书写?(4自变量1因变量)

matlab中,关于多元函数的拟合matlab程序如何书写?(4自变量1因变量),第1张

题主的(缓码4自变量1因变量)多元函数的拟合matlab程序。可以用nlinfit非线性回归函数来做段察(也可以用lsqcurvefit函数)。实现代码:

x1=[0.55 0.65 0.65 0.65 0.65 0.55 0.55 0.55 0.65]'

x2=[1.6 1.6 1.4 1.6 1.4 1.4 1.6 1.4 1.4]'

x3=[20 20 20 10 10 20 20 20 20]'

x4=[10 10 10 10 10 10 12 12 12]'

Y=[1.848 3.145 3.337 3.022 3.188 1.97 1.63 1.621 2.534]'

X=[x1 x2 x3 x4]

n=length(x1)

a0=rand(1,5)

func=@(a,X)(a(1)+a(2)*X(:,1)+a(3)*X(:,2)+a(4)*X(:,3)+a(5)*X(:,4))

[a,r,J] = nlinfit(X,Y,func,a0)a

Y1=func(a,X)

[Y  Y1]

运行上述代码,可以得到

a1= -1.52778571412534;a2= 11.4823809522886;a3=  -0.359047619087202 ;a4= 0.00441190476147387;a5=-0.23363095238449

多元函数表达式,y=a1+a2*x1+a3*x2+a4*x3+a5*x4

nlinfit与lsqcurvefit两者区别并不扰燃哪太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。

看你的描述,我认为你问题其实是解过约辩冲陆束(判兄或缺约束)携顷的线性方程组。

假如仅有你提供的5组(4ad+1err)数据,程序如下:

ad1=[1000 610 251 81 32]'

ad2=[479 1000 731 325 35]'

ad3=[29 315 741 1000 520]'

ad4=[24 29 259 761 1000]'

e=ones(size(ad1))

err=[13 6.5 0 -6.5 13]

ad=[ad1 ad2 ad3 ad4 e]'

format long

a=inv(ad)*err

a =

-0.02485337007149

-0.01063082921545

-0.03706276144467

-0.01084050669214

44.28052950819872

也就是说有

-0.02485337007149*ad1

-0.01063082921545*ad2

-0.03706276144467*ad3

-0.01084050669214*ad4

+44.28052950819872

=err

可以做到!!关于参数问题 help之

我一般喜欢使用nlinfit

非线性拟合,我用过很多次发现要用好她

的关键在于你要找到一个很好的初值

举个例子:

椭圆的方程可以是

ax^2+by^2+cxy+dx+ey+f=0

发现其实双曲线,抛物线和他的一样

所以你在选取初值的时候最起码初值租握带入后

是个椭圆,

不然你拟合出来不仅仅是效果差,可能就变质

你说的情况其实是解方程了(四个未知数四个方程)

对于更多的数据:

先编写函数

function f=ffun(a,x)

f=a(1)*x(:,1)+a(2)*x(:,1).^2+a(3)*x(:,2)+a(4)*x(:,2).^2

其余运行

x=[p,c]%p,c为列响量,f也为列向缓庆量

a0=[1,1,1,1]%初值扰型握取好点效果更好

a=nlinfit(x,f,'ffun',a0)


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

原文地址: http://outofmemory.cn/yw/12277438.html

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

发表评论

登录后才能评论

评论列表(0条)

保存