matlab 线性拟合

0,18},{20,17.586},{40,17.136},{60,16.704},{100,15.84},{130,15.192},{160,14.544},{190,13.896} 8组数据进行线性和指数拟合,以第一组数据为例其中0为海水测量深度 18为海水温度 最好能有图 谢谢时间紧迫 16号前必须要啊 否则有可能毕业不了各位大虾们救命啊
第二个指数曲线 不是拟合方程是不是应该是指数式的啊
最好能将结果(图 代码 以及方程贴到word里 发送到我邮箱[email protected]里)

线性拟合如下:

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

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,这个不影响结果的

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-13

matlab中线性拟合可以使用多项式拟合函数polyfit()实现,其调用格式为
 P = polyfit(X,Y,N)
其中,X,Y是需要拟合的数据,N是拟合的多项式的最高次数,P是拟合的多项式的系数。
实例演示如下:
1、示例数据
x=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2]
y=[-8,-236,-415,-562,-701,-860,-961,-1082,-1188,-1304,-1405,-1534]
拟合方程:y=a+bx
2、matlab代码
>> x=[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0,1.1,1.2];
>> y=[-8,-236,-415,-562,-701,-860,-961,-1082,-1188,-1304,-1405,-1534];
>> p = polyfit(x,y,1)
>> plot(x,y,'o',x,polyval(p,x))
3、结果及说明
p =
  1.0e+003 *
   -1.3253    0.0068
表示拟合的线性公式为

y
=
-1325.3x+6.8

第2个回答  2010-06-14
最小二乘法直线
clear all
clc
x=[1 2 3 4 6 8 10];
y=[109.78 80.35 58.81 43.04 23.05 12.35 6.61];
a=polyfit(x,y,1);
x1=0:0.01:11;
y1=polyval(a,x1);
plot(x,y,'b*',x1,y1,'r','linewidth',3,'markersize',18) %作二维图形曲线图和点图。
legend('原始点','拟合曲线') %显示图例
axis([0,11,1,110]) %显示坐标轴的长度
h=legend('Actual','Predicted');
xlabel('Time(h)','fontsize',24,'fontweight','bold')
ylabel('Drug concentration(ug/ml)','fontsize',24,'fontweight','bold')
title('curve fitting(parabola)','fontsize',26,'fontweight','bold')
set(gca,'linewidth',2.5,'fontsize',24,'fontname','Arial','ytick',[50 100 150])
set(gcf,'color','w')
axis([0 12 0 155])

最小二乘法曲线拟合

clear all
clc
xdata=[1 2 3 4 6 8 10];
ydata=[109.78 80.35 58.81 43.04 23.05 12.35 6.61];
x0=[0,0,5];
b=lsqcurvefit(@nhfun,x0,xdata,ydata)
t1=0:0.01:12;
c1=b(1)+b(2)*t1+b(3)*t1.^2;
plot(xdata,ydata,'*',t1,c1,'linewidth',3,'markersize',18)
function y=nhfun(x,xdata)
y=x(1)+x(2).*xdata+x(3)*xdata.^2;
改一下数据和方程就好了
指数你就把function 改成x(1)*exp(x(2)*xdata)
第3个回答  2019-07-19
对上述的两列数据进行多项式拟合,使用polyfit函数就可以,我们依次把各种次数都来拟合一下,结果一看便知:
一次多项式拟合(y=a1*x+b):
a1=0.033686757990868
b=0.516278538812787
二次多项式拟合(y=a1*x^2+a2*x+b):
a1=-0.000036213214245
a2=0.045307231192030
b=-0.096059630138556
三次多项式拟合(y=a1*x^3+a2*x^2+a3*x^+b):
a1=-0.000000056761080
a2=-0.000008613967773
a3=0.041645897184442
b=0.018065089350326
到这里差不多就看出来了吧,一次多项式拟合的结果可以说就已经很不错了,二次多项式的二次项系数太小了,也就是说明二次项对于y的影响是微乎其微的,虽然说能通过方差检验证明其在95%的置信水平下对y的影响显著,但是在实际情况中,我们一般会选取一次多项式,下面附一次多项式的各个检验统计量:
Linear
model
Poly1:
f(x)
=
p1*x
+
p2
Coefficients
(with
95%
confidence
bounds):
p1
=
0.03369
(0.03097,
0.03641)
p2
=
0.5163
(0.05116,
0.9814)
Goodness
of
fit:
SSE:
0.5078
R-square:
0.9935
Adjusted
R-square:
0.9924
RMSE:
0.2909
第4个回答  2010-06-15
指数拟合,设y=Ce^(Ax)
function z=E(u)
A=u(1);
C=u(2);
Z=(C-18).^2+(C.*ecp(20A)-17.586.^2+(C.*exp(40*A)-17.136).^2+......+(C.exp(190*A)-13.896).^2;
再然后用fmins('E',[1,1])求Z的最小值
可以得到A和C的值
相似回答