Filter löschen
Filter löschen

Finding the equation of a line passing 2 points

305 Ansichten (letzte 30 Tage)
Soroush Asarzadeh
Soroush Asarzadeh am 16 Jul. 2016
Kommentiert: Image Analyst am 29 Jan. 2023
Hello, I have two points (x1,y1) and (x2,y2). Now I want to find the linear equation of a line passing through these 2 points. The equation must be like f(x)=a*x+b. Is there any function in matlab that accepts coordinates of two points an gives the related linear equation back? If not, I know that a=(y2-y1)/(x2-x1) but what is the short and easy way to find 'b'? Thanks in advance!
  1 Kommentar
Ahmed
Ahmed am 27 Dez. 2021
You can select Polynomial of degree 1 from the cftool
this will give you something like this
Linear model Poly1:
f(x) = p1*x + p2
Coefficients:
p1 = xx
p2 = xx
where xx could be any number

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Image Analyst
Image Analyst am 16 Jul. 2016
Try polyfit:
coefficients = polyfit([x1, x2], [y1, y2], 1);
a = coefficients (1);
b = coefficients (2);
  5 Kommentare
Jose
Jose am 27 Nov. 2022
When I use polyfit, It tells me that "x1" does not exist.
Image Analyst
Image Analyst am 27 Nov. 2022
@Jose then define it. Certainly you must know what points you fit the line through. So, what variable names did you use? Use those instead of x1, etc.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Star Strider
Star Strider am 16 Jul. 2016
A third (and probably the most efficient) option for this particular problem:
x = [1 2];
y = [5 4];
c = [[1; 1] x(:)]\y(:); % Calculate Parameter Vector
slope_m = c(2)
intercept_b = c(1)
slope_m =
-1
intercept_b =
6
This uses the mldivide,\ operator to do a least-squares fit of the points.

Alok Mishra
Alok Mishra am 15 Sep. 2022
Bearbeitet: Alok Mishra am 15 Sep. 2022
    function [a b c eq] = makeEquationFrom2Points(x1,y1,x2,y2)
        syms x y;
        if x1==x2 && y1==y2
            disp('Need 2 distinct points');
            a=NaN;
            b=NaN;
            c=NaN;
            eq="null";
            return;
        else if x1==x2
            b=0;
            a=1;
            c=x1;
        else
            %for lines m not_equal to inf 
            %y=mx+c
            %m is coeff(1) and coeff(2) is c 
            coefficient=polyfit([x1 x2],[y1 y2],1);
            a=-coefficient(1);
            c=coefficient(2);
            b=1;
        end
        eq=a*x+b*y==c;
    end

on workspace do:

      [a b c eq]=makeEquationFrom2Points(1,2,3,4)

Output: a =

   -1.0000

b =

     1

c =

    1.0000

eq =

y - x == 1

  3 Kommentare
navid seif
navid seif am 29 Jan. 2023
Thanks.
May I ask how do it works when x1,x2,y1and y2 are vector?
Image Analyst
Image Analyst am 29 Jan. 2023
@navid seif put the function in a loop over x1
for k = 1 : numel(x1)
if x1(k) == x2(k) && y1(k) == y2(k)
% etc.
end
end
Everything should have an index k, like a(k), b(k), etc., so that you store the results for every set of data.

Melden Sie sich an, um zu kommentieren.


Azzi Abdelmalek
Azzi Abdelmalek am 16 Jul. 2016
After you found a, You can get b from your equation y=a*x+b,

Kategorien

Mehr zu Linear Algebra finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by