Try   HackMD

直線方程式與向量

直線方程式

國中 :

已知通過 (X1,Y1) , (X1,Y1)
設兩點通過 Y=aX+b ,其中 a,b為未知數
接者解聯立方程式,求出直線方程式

高一 :

已知 斜率 概念,透過 :
點斜式 : Y-Y0 = m(X-X0)
截距式 : X/a+Y/b=1
兩點式 : X-X1/X2-X1 = Y-Y1/Y2-Y1
求出直線方程式

高二 :

已知 向量 概念 :
透過參數式表示直線

參數式推導&範例

直線 L 方向向量 V(13,17) 過點 A(-3,-4)
P(x,y)L上任意點
AP//V
AP//tV, t為實數
OPOA = tV ,t為實數 (O為原點)
OP = OA + tV ,t為實數
P(x,y) = A(-3,-4) + t(13,17)

直線 L 的方向向量 V=(a,b),L過點P(x0,y0)
L直線參數式 : (t為參數)
x=x0+at
y=y0+bt

克拉瑪公式

推導

二元一次方程組 : (其中 X , Y 為未知數)
a1X+b1Y=c1 (1)
a2X+b2Y=c2 (2)
利用加減消去法 :
(1) × b2 - (2) × b1(a1b2−a2b1)X = (c1b2−c2b1)
(1) × a2 - (2) × a1(a2b1−a1b2)y = (c1a2−c2a1)

可得 :
∆ ⋅ X= x
∆ ⋅ Y= y

x y
\ a1a2 b1b2 \ \ c1c2 b1b2 \ \ a1a2 c1c2 \
a1b2 - a2b1 c1b2 - c2b1 a1c2 - a2c1

是否有解

  • ∆ ≠ 0 時 :
    方程組恰有一組解 : ( X,Y ) = ( x/∆ , y/∆ )
  • ∆ = ∆x = ∆y = 0 時 :
    方程組無限多組解
  • ∆ = 0 且 ∆x2 + ∆y2 ≠ 0 時 :
    方程組無解

轉為程式碼

Run my code online

#include <bits/stdc++.h>
using namespace std;
int a1,b1,c1,a2,b2,c2,delta,delta_x,delta_y;
void ans_x(){
  int dx=delta_x,d=delta;
  if(d<0&&dx<0) d=abs(d),dx=abs(dx);
  else if(d<0&&dx>0) d=-d,dx=-dx;
  int temp=gcd(d,dx);
  d/=temp,dx/=temp;
  cout<<"X: ";
  if(d==1&&dx==1) cout<<"1\n";
  else if(dx==0) cout<<"0\n";
  else{
    cout<<dx<<"/"<<d<<'\n';
  }
}
void ans_y(){
  int dy=delta_y,d=delta;
  if(d<0&&dy<0) d=abs(d),dy=abs(dy);
  else if(d<0&&dy>0) d=-d,dy=-dy;
  int temp=gcd(d,dy);
  d/=temp,dy/=temp;
  cout<<"Y: ";
  if(d==1&&dy==1) cout<<"1\n";
  else if(dy==0) cout<<"0\n";
  else{
    cout<<dy<<"/"<<d<<'\n';
  }
}
void input(){
  char none;
  string s1,s2,no;
  stringstream ss;
  cout<<"Input system of linear equations :\nin the form of : (a1,b1...need to be Integer)\na1X+b1Y=c1\na2X+b2Y=c2\n\n";
  getline(cin,s1),getline(cin,s2);
  ss.str(s1);
  ss>>a1>>none>>none>>b1>>none>>none>>c1;
  ss.clear();
  ss.str(s2);
  ss>>a2>>none>>none>>b2>>none>>none>>c2;
  ss.clear();
}
void process_data(){
  delta= a1*b2-a2*b1;
  //cout<<delta<<'\n';
  delta_x= c1*b2-c2*b1;
  //cout<<delta_x<<'\n';
  delta_y= a1*c2-a2*c1;
  //cout<<delta_y<<'\n';
}
void check(){
  if(delta!=0){
    cout<<"The system has a single unique solution.\n";
    ans_x();
    ans_y();
  }
  else{
    if(delta_x!=0||delta_y!=0){
      cout<<"The system has no solution.\n";
    }
    else{
      cout<<"The system has infinitely many solutions.\n";
    }
  }
}
int main(){
  input();
  process_data();
  check();

  return 0;
}