matlab 线性拟合

matlab 线性拟合,第1张

线性拟合如下:

------------------------------------------------------------------

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 datatxt

y=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中拟合函数程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/10092944.html

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

发表评论

登录后才能评论

评论列表(0条)

保存