Finding the equation of a line passing 2 points

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 Commento

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

Accedi per commentare.

 Risposta accettata

Try polyfit:
coefficients = polyfit([x1, x2], [y1, y2], 1);
a = coefficients (1);
b = coefficients (2);

5 Commenti

Thank you, it works. I meant exactly such a function!
if using
[p,s,mu] = polyfit(x,y,1)
, you get different p(1) and p(2). Example:
x = [0,1];
y = [0,1];
For p = polyfit (x,y,1) or [p,S]=polyfit(x,y,1), you get p(1)=1, p(2)=0 which is expected;
for [p,S,mu] = polyfit(x,y,1), you'll get p(1) = 1, p(2) = 1, now p(2) is 1, not 0 anymore;
did I miss something?
You can use s and mu for extreme data sets and it will give you more accurate results but for many ordinary cases it's not needed. You get the coefficients, p, for the scaled and centered versions of x and y rather than the actual x and y. If you used s and mu to get p, then you'll also have to use s and mu in polyval().
When I use polyfit, It tells me that "x1" does not exist.
@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.

Accedi per commentare.

Più risposte (3)

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 il 15 Set 2022
Modificato: Alok Mishra il 15 Set 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 Commenti

Thanks.
May I ask how do it works when x1,x2,y1and y2 are vector?
@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.

Accedi per commentare.

Categorie

Scopri di più su Sparse Matrices in Centro assistenza e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by