题主的(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.txty=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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)