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两者区别并不太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。

程序如下:附件中data.txt必须和程序放在同一文件夹中。

load data.txt

y=data(:,1)

x=1:1:length(y)

a1=polyfit(x',y,5)

syms X

f3=vpa(poly2sym(a1,X),4)%多项式5次拟合结果

x1=1:0.1:356

h1=polyval(a1,x1)

plot(x,y,'.',x1,h1,'r')

xlabel('x')

ylabel('y')

title('拟合拟合曲线')

legend('原始数据点','拟合')

结果:

f3 =

 

- 5.582e-10*X^5 + 6.199e-7*X^4 - 0.0002665*X^3 + 0.05546*X^2 - 5.605*X + 237.2

例7 用下面表6 中的数据拟合函数c(t) = a + be−0.02kt中的参数a,b, k 。

表6

j t 100 200 300 400 500 600 700 800 900 1000

j c 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59

解 该问题即解最优化问题:

Σ=

− = + −

10

1

0.02 2 min ( , , ) ( )

i

j

kt F a b k a be j c

(1)编写M文件fun1.m定义函数F(x,tdata):

function f=fun1(x,tdata)

f=x(1)+x(2)*exp(-0.02*x(3)*tdata)%其中x(1)=a,x(2)=b,x(3)=k

(2)调用函数lsqcurvefit,编写程序如下:

td=100:100:1000

cd=[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(@fun1,x0,td,cd)


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存