R语言实现线性拟合

R语言实现线性拟合,第1张

formula代表拟合的公式,如Y~X,则对因变量Y和自变量X作线性拟合拟合模型为 y=a+bx ,如Y 0+X或Y X+0则除对因变量Y和自变量X作线性拟合外,还规定改直线必过原点及拟合模型为 y=x 。

lm对象即lm函数返回的值,其属性包括

常用的有 coefficients , residuals 和 fitted.values ,分别表示拟合的得到的各系数的值、残差和预测值。

可以看出该拟合曲线为y=0.52805925 -0.02797779x

其他值的调用,包括p值,给定x预测的y值,拟合系数R方等需要通过summary函数调用

也可以直接通过 summary(line.model) 打印出大部分与回归直线相关的一些结果

clcclearclose all

U=[1.45,1.85,2.02,2.2,2.67,2.98]

V=[200,400,500,600,800,1000]

H=[25.6,43.5,51.4,60.2,79.6,95.2]

[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=513.0775*U-542.8718

H=45.1123*U-39.7716

线性拟合如下:

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

x=[0 20 40 60 100 130 160 190]

y=[18 17.586 17.136 16.704 15.84 15.129 14.544 13.896]

a=polyfit(x,y,1)

xi=0:0.001: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=%0.5gxX+%0.5g',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 17.586 17.136 16.704 15.84 15.129 14.544 13.896]

x0=[0,1,0]  %设置初始值

b=lsqcurvefit(@nhfun,x0,x,y)

Xi=0:0.001: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=%0.5g+e^(%0.5gxX)+(%0.5g)',b(1),b(2),b(3))

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

!!!曲线方程程序运行时会报错,是因为你的X数据中有一个为0,这个不影响结果的

图每次只能发一张,所以我发到你邮箱哈


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

原文地址: http://outofmemory.cn/yw/12020540.html

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

发表评论

登录后才能评论

评论列表(0条)

保存