
题主的(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两者区别并不太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。
matlab是一个很强大的数据处理软件,是人们进行数据分析的得力助手。一般我们做社会调研或科学研究时,会得到很多实验数据。当需要研究两个变量之间的关系时,经常要用到曲线拟合。曲线拟合不仅能给出拟合后的关系式,还能用图形直观的展现出变量之间的关系。其实用matlab做曲线拟合很便捷,下面将以两个变量(y=f(x))为例详细介绍:
运行matlab软件。
在工作空间中存入变量的实验数据。具体如下:
可以直接用矩阵来存放数据,直接在命令窗口输入
x=[数据x1,数据x2,...,数据xn]
y=[数据y1,数据y2,...,数据yn]
当数据较多时,可以从excel,txt等文件中导入。
把数据存入工作空间后,在命令窗口中输入cftool,回车运行。
在这个拟合工具窗口的左边,选择变量,即分别选择x,y。
选择拟合的曲线类型,一般是线性拟合,高斯曲线,平滑曲线等,根据需要选择。
选择完后会自动完成拟合,并且给出拟合函数表达式。
下面是相应的Matlab程序function matexpfit(x,y)
%指数曲线拟合及其图示
%x,y为已知数据点且均为行向量
%拟合曲线
A=[ones(size(x))',x']B=log(y)'X=A\B
%A\B为矩阵除法求AX=B的解
fprintf('a=%f,b=%f\n',exp(X(1)),X(2))
fprintf('拟合曲线y=%fexp(%f x)\n',exp(X(1)),X(2))
clf
x0=x(1):0.01:x(length(x))
%形如X=a:h:b是从a到b,增量为h的等间隔数
y0=X(2)*exp(X(1)*x0)
plot(x,y,'o',x0,y0,'-')%绘制以(x,y)为节点的图形
title('Exp Curve Fitting') %给图形加标题
legend('Data','Curve Fitting') %给图形加图例
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)