matlab如何拟合直线并且根据坐标轴交点求出斜率?

就是有几个已知的数据点,假设为(1,1),(2,2),(3,3),然后要求是用直线拟合并且算出该直线和X轴、Y轴的交点,还有求出斜率,具体怎么实现?

这个问题不难,只需要用到plotfit函数

polyfit的使用方法:

[p,s] =polyfit(x,y,n)

其中,x为准备拟合的自变量

      y为应变量,

      n为拟合的次数

      p是拟合得到的多项式的系数矩阵,其元素依次为从最高次系数到0次系数(也就是常数项).

      s用来计算拟合误差.

一般缺省s项直接:p=polyfit(x,y,n)


注:另外其中还用到函数y1=polyval(p,x),用法很好理解,看例子就能懂,具体自行百度或看matlab帮助。

 

下面直接上例子:

clear;clc;                             %不解释

a1=5:15;                               %自变量

a2=[89 78 71 59 44 32 22 10 -1 -5 -10];%因变量

xishu=polyfit(a1,a2,1)                 %拟合得到各项系数

k=xishu(1)                             %一次项系数即斜率

b=xishu(2)                             %零次项系数即截距

a_nihe=polyval(xishu,a1);              %得到自变量对应的拟合函数值

 

plot(a1,a2,'k*',a1,a_nihe,'r-')        %画图

legend('原始数据','拟合直线')           %图中注释

axis([0 15 -50 150])                   %限制方框大小

set(gca,'box','off')                   %不解释

set(gcf,'color',[1,1,1])               %白底

gridon                                %添加网格

拟合结果:斜率:-10.573;截距:141.09。

斜率和坐标轴焦点都是可以直接得到的,所以不需要“根据坐标轴交点求出斜率”。若需要横轴焦点请自行根据相关公式求解。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-02-27

clc

clear all

x=1:9;

y=10-x;

ep=[];

plot(x,y,'color','black')%画一个通过(1,9)(9,1)两个点的直线line1,黑色的线

hold on

for i=1:9

    ep(1,i)=rand(1,1)-0.5;

    ep(2,i)=rand(1,1)-0.5;

end

plot(x+ep(1,x),y+ep(2,x),'*')%沿line1取9个取样点,在x轴和y轴上分别偏差(-0.5,0.5)之间,蓝色的点

hold on

x1=x+ep(1,x);

y1=y+ep(2,x);

s=size(x);

s=s(2);

d=0;

m=0;

sx=x1(1);

sy=y1(1);

for i=1:s-1

    sx=x1(i+1)+sx;%将所有取样点的x加起来

    sy=y1(i+1)+sy;%将所有取样点的y加起来

    for h=i+1:s

        d=(y1(i)-y1(h))/(x1(i)-x1(h))+d;%将所有取样点之间的斜率加起来

        m=m+1;

    end

end

d=d/m;%求所有斜率的平均值

sx=sx/s;%求所有取样x的平均值

sy=sy/s;%求所有取样y的平均值

y2=d*x-d*sx+sy;%以取样x的平均值,取样y的平均值为通过点,取样斜率的平均值为斜率画一条逼近直线,红色的线

plot(x,y2,'color','red')

本回答被提问者和网友采纳