
由于你没有具体的数据结构,无法为你提供具体的代码。只能将“用matlab如何将excle中的数据拟合成多元非线性函数并做出图”的实现步骤说明如下:
首先,用xlsread()函数来读取excel 的数据。并赋值给A
A=xlsread('xxxxls')
第二,由矩阵A,提取y,x1,x2,x3,。。。
y=A(:,1),x1=A(:,2),x2=A(:,3),。。。
第三,根据y,x1,x2,x3数据,初定拟合多元非线性函数的形式(此过程需要调整)
func=@(a,x) 多元非线性函数表达式
第四,用lsqcurvefit()或nlinfit()函数来拟合多元非线性函数的系数
a=lsqcurvefit(func,a0,x,y); 或 a=nlinfit(x,y,func,a0);
第五,用corrcoef()函数来判别拟合效果
y=A(:,1)
y1=func(a,x)
R2=corrcoef(y1,y); 当R2≈1,则拟合是比较合理的。
如你有具体的数据,可以复制到私信上,进一步交流。
怎么用matlab进行非线性的多元函数拟合 matlab拟合工具箱cftool %拟合数据曲线;线性最小二乘法是解决曲线拟合的最常用的方法, %1、多项式拟合函数;p=polyfit(x,y,n);求p拟合函数在xi处的近似值pi=polyval(p,xi); %2、利用常用矩阵的除法解决
可以做到!!关于参数问题 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)
A(:,1)=data(:,1)^2;
A(:,2)=data(:,2)^2;
A(:,3)=data(:,1)data(:,2);
A(:,4)=data(:,1);
A(:,5)=data(:,2);
A(:,6)=ones(16,1);%应该有16行吧
x=(A'A)\(A'data);
当然,你这个数据不理想,所以运行会产生警告,这样算出来的系数误差会很大。
不是最小二乘法,是牛顿法
用法示例如下
clc;clear;
x=[11389 10622 09822 0934 09251 09158];
y=[003 1 503 1505 1997 303];
myfunc=inline('-beta(1)log(x+beta(2))-beta(3)','beta','x');
beta=nlinfit(x,y,myfunc,[0 0 0]);
k=beta(1),a=beta(2),b=beta(3)
%test the model
xx=min(x):max(x);
yy=-klog(x+a)-b;
plot(x,y,'o',x,yy,'r')
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)