线性拟合如下:
------------------------------------------------------------------
x=[0 20 40 60 100 130 160 190];
y=[18 17586 17136 16704 1584 15129 14544 13896];
a=polyfit(x,y,1);
xi=0:0001:200;
yi=polyval(a,xi);
plot(x,y,'go','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',6)
xlabel('深度/m','fontsize',16);
ylabel('温度/℃','fontsize',16);
axis([0 200 12 20])
hold on
plot(xi,yi,'linewidth',2,'markersize',16)
legend('原始数据点','拟合曲线')
sprintf('直线方程:Y=%05gxX+%05g',a(1),a(2))
-----------------------------------------------------------------
指数拟合如下:
-----------------------------------------------------------------
先定义函数:
function Y=nhfun(b,x)
Y=b(1)exp(b(2)x)+b(3);
在运行程序:
x=[0 20 40 60 100 130 160 190];
y=[18 17586 17136 16704 1584 15129 14544 13896];
x0=[0,1,0] %设置初始值
b=lsqcurvefit(@nhfun,x0,x,y);
Xi=0:0001:200;
Yi=b(1)exp(b(3)Xi)+b(2);
plot(x,y,'cp','MarkerEdgeColor','k','MarkerFaceColor','g','MarkerSize',6)
hold on
plot(Xi,Yi,'linewidth',2,'markersize',16)
legend('原始数据点','拟合曲线')
sprintf('曲线方程:Y=%05g+e^(%05gxX)+(%05g)',b(1),b(2),b(3))
--------------------------------------------------------------
!!!曲线方程程序运行时会报错,是因为你的X数据中有一个为0,这个不影响结果的
图每次只能发一张,所以我发到你邮箱哈
clc;clear;close all
U=[145,185,202,22,267,298];
V=[200,400,500,600,800,1000];
H=[256,435,514,602,796,952];
[AX,H1,H2]=plotyy(U,V,U,H,'plot');
set(H1,'Marker','o','line','none','color','k')
set(H2,'Marker','','line','none','color','r')
legend('容积','实际高度')
xlabel('电压值/V')
yl1=get(AX(1),'Ylabel')
set(yl1,'string','容积/L')
yl2=get(AX(2),'Ylabel')
set(yl2,'string','实际高度/cm')
p1=polyfit(U,V,1);
p2=polyfit(U,H,1);
VV=p1(1)U+p1(2);
HH=p2(1)U+p2(2);
hold on
[AX,HH1,HH2]=plotyy(U,VV,U,HH)
set(HH1,'color','k')
set(HH2,'color','r')
clc
disp(['V=',num2str(p1(1)),'U',num2str(p1(2))])
disp(['H=',num2str(p2(1)),'U',num2str(p2(2))])
运行结果
V=5130775U-5428718
H=451123U-397716
程序如下:附件中datatxt必须和程序放在同一文件夹中。
load datatxty=data(:,1);
x=1:1:length(y);
a1=polyfit(x',y,5);
syms X
f3=vpa(poly2sym(a1,X),4)%多项式5次拟合结果
x1=1:01:356;
h1=polyval(a1,x1);
plot(x,y,'',x1,h1,'r')
xlabel('x');
ylabel('y')
title('拟合拟合曲线')
legend('原始数据点','拟合')
结果:
f3 =
- 5582e-10X^5 + 6199e-7X^4 - 00002665X^3 + 005546X^2 - 5605X + 2372
题主的(4自变量1因变量)多元函数的拟合matlab程序。可以用nlinfit非线性回归函数来做(也可以用lsqcurvefit函数)。实现代码:
x1=[055 065 065 065 065 055 055 055 065]';
x2=[16 16 14 16 14 14 16 14 14]';
x3=[20 20 20 10 10 20 20 20 20]';
x4=[10 10 10 10 10 10 12 12 12]';
Y=[1848 3145 3337 3022 3188 197 163 1621 2534]';
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= -152778571412534;a2= 114823809522886;a3= -0359047619087202 ;a4= 000441190476147387;a5=-023363095238449
多元函数表达式,y=a1+a2x1+a3x2+a4x3+a5x4
nlinfit与lsqcurvefit两者区别并不太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。
你在matlab下的commend window里输入cftool,然后在x data下选择t在y data下选择y。接着在右边的下拉框里选择custom equation,在custom equation下面输入c0+c1exp(-x/a1)+c2exp(-x/a2),然后它就输出结果了(cftool的左下边会出来结果)。我算的结果是a1=003832;a2=1194;c0=2506;c1=-0928;c2=6035;R方是09653 (你还可以在fit option里选择算法,推荐LM算法)。希望采纳哦!
x=[];
y=[];
y1=polyval(ployfit(x,y,5),x);
%拟合后各点的值
plot(x,y,'',x,y1,'--')
p=poly2sym(ployfit(x,y,5))%
拟合的多项式,其中5是拟合多项式的最高阶数!,可以改其他的数
以上就是关于matlab 线性拟合全部的内容,包括:matlab 线性拟合、用MATLAB进行线性拟合的程序代码、matlab中拟合函数程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)