Równanie liniowe z jedną niewiadomą


Tematy pokrewne Podrozdziały  

 

Algorytm

Funkcja liniowa posiada następujący przepis:

f(x) = ax + b

 

Nazwa funkcji liniowej pochodzi stąd, iż jej wykres jest linią prostą.

Miejsce zerowe xo funkcji liniowej obliczamy analitycznie:

 

f(xo) = axo + b
f(xo) = 0

axo + b = 0  /  + (-b)
axo = - b  /  : a
xo = -   b   ,  a 0
a

 

Jeśli współczynnik a jest równy 0, to na wartość funkcji nie mają wpływu jej argumenty - mówimy wtedy, iż jest to funkcja stała. Jej wykresem będzie linia prosta równoległa do osi OX. Odległość tej prostej od osi OX jest równa współczynnikowi b. Jeśli współczynnik b jest również równy 0, to funkcja przyjmuje wartość 0 dla wszystkich swoich argumentów - rozwiązaniem jest cały zbiór liczb rzeczywistych, czyli brak jednoznacznego rozwiązania. Jeśli b jest różne od 0, to funkcja nie posiada miejsca zerowego. gdyż dla żadnego swojego argumentu nie przyjmuje wartości 0.

Jeśli współczynnik a jest różny od 0, miejsce zerowe wyznaczamy zgodnie z wyprowadzonym wzorem.

Ponieważ współczynnik a mógł być uzyskany na drodze wcześniejszych obliczeń numerycznych i może zawierać błędy zaokrągleń, to przy porównaniu z zerem musimy zastosować podane we wstępie zasady. Otóż zamiast zwykłego sprawdzania, czy:

 

a = 0

 

zastosujemy test:

 

| a | < ε

 

gdzie ε jest wybraną dokładnością przyrównania do 0. Sądzę, iż ε = 0.0000000001 powinno być w większości typowych przypadków wystarczająco dokładne (jeśli nie, to należy je odpowiednio dostosować).

 

Specyfikacja problemu

Dane wejściowe

a,b - współczynniki a,b R

Dane wyjściowe

xo - miejsce zerowe:  xo lub informacja, iż rozwiązanie nie istnieje

Zmienne pomocnicze

ε - dokładność porównania z zerem. ε R,  ε = 0.0000000001

 

Lista kroków

K01: Czytaj a i b
K02: Jeśli | a | < ε , to idź do K06
K03:
xo  -   b 
a
K04: Pisz xo
K05: Zakończ
K06: Pisz "Brak miejsca zerowego"
K07: Zakończ

 

Schemat blokowy

Wykonanie algorytmu rozpoczynamy od odczytania współczynników a i b wchodzących w skład przepisu funkcji liniowej:

f(x) = ax + b

 

Następnie sprawdzamy, czy współczynnik a jest równy (dostatecznie bliski) zeru.

Jeśli nie, to wyznaczamy miejsce zerowe xo i wypisujemy je kończąc algorytm.

Jeśli tak, to funkcja f(x) nie posiada jednoznacznego miejsca zerowego (dla b różnego od 0 miejsce takie nie istnieje). Wypisujemy odpowiedni tekst i kończymy algorytm.


 

Programy

W celu uruchomienia przykładów zastosuj projekt aplikacji konsoli (ang. Console Application).

 

Efekt uruchomienia programu

Znajdowanie miejsca zerowego dla f(x) = ax + b
----------------------------------------------
(C)2006 mgr Jerzy Wałaszek     I LO w Tarnowie

Podaj współczynniki a i b

a = 12

b = -3

----------------------------------------------
WYNIK

x0 = 0,2500

----------------------------------------------
Koniec. Naciśnij klawisz Enter...

 

Free Pascal
// Program oblicza miejsce zerowe dla funkcji liniowej
// f(x) = ax + b
//----------------------------------------------------
// (C)2006 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// im. Kazimierza Brodzińskiego
// w Tarnowie
//----------------------------------------------------

program mzfl1;

const
  EPS = 0.0000000001; // dokładność porównania z zerem

var
  a,b,x0 : double;

begin
  writeln('Znajdowanie miejsca zerowego dla f(x) = ax + b');
  writeln('----------------------------------------------');
  writeln('(C)2006 mgr Jerzy Walaszek     I LO w Tarnowie');
  writeln;
  writeln('Podaj wspolczynniki a i b');
  writeln;
  write('a = '); readln(a);
  writeln;
  write('b = '); readln(b);
  writeln;
  writeln('----------------------------------------------');
  writeln('WYNIK');
  writeln;

  if abs(a) < EPS then
    writeln('Brak miejsca zerowego')
  else
  begin
    x0 := - b / a;
    writeln('x0 = ',x0:10:4);
  end;

  writeln;
  writeln('----------------------------------------------');
  writeln('Koniec. Nacisnij klawisz Enter...');
  readln;
end.
Code::Blocks
// Program oblicza miejsce zerowe dla funkcji liniowej
// f(x) = ax + b
//----------------------------------------------------
// (C)2006 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// im. Kazimierza Brodzińskiego
// w Tarnowie
//----------------------------------------------------

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cmath>

using namespace std;

int main()
{
  const double EPS = 0.0000000001;
  double a,b,x0;

  cout << setprecision(4)      // 4 cyfry po przecinku
       << fixed;               // format stałoprzecinkowy

  cout << "Znajdowanie miejsca zerowego dla f(x) = ax + b\n"
          "----------------------------------------------\n"
          "(C)2006 mgr Jerzy Walaszek     I LO w Tarnowie\n\n"
          "Podaj wspolczynniki a i b\n\n"
          "a = ";
  cin >> a;
  cout << "\n\nb = ";
  cin >> b;

  cout << "\n\n----------------------------------------------\n"
          "WYNIK\n\n";

  if(fabs(a) < EPS)
    cout << "Brak miejsca zerowego\n";
  else
  {
    x0 = - b / a;
    cout << "x0 = " << setw(10) << x0 << endl;
  }

  cout << "\n----------------------------------------------\n\n";

  system("pause");

  return 0;
}
FreeBASIC
' Program oblicza miejsce zerowe dla funkcji liniowej
' f(x) = ax + b
'----------------------------------------------------
' (C)2006 mgr Jerzy Wałaszek
' I Liceum Ogólnokształcące
' im. Kazimierza Brodzińskiego
' w Tarnowie
'----------------------------------------------------

const EPS As Double = 0.0000000001 ' dokładność porównania z zerem

Dim As double a,b,x0

print "Znajdowanie miejsca zerowego dla f(x) = ax + b"
print "----------------------------------------------"
Print "(C)2006 mgr Jerzy Walaszek     I LO w Tarnowie"
Print 
print "Podaj wspolczynniki a i b"
Print 
Input "a = ", a
Print 
Input "b = ", b
Print 
print "----------------------------------------------"
print "WYNIK"
Print 

if abs(a) < EPS then
  Print "Brak miejsca zerowego"
Else
  x0 = - b / a
  print Using "x0 = #####.####";x0
End If

Print 
print "----------------------------------------------"
print "Koniec. Nacisnij klawisz Enter..."

Sleep

End
JavaScript
<html>
  <head>
  </head>
  <body>
    <div align="center">
      <form style="BORDER-RIGHT: #ff9933 1px outset;
                   PADDING-RIGHT: 4px;
                   BORDER-TOP: #ff9933 1px outset;
                   PADDING-LEFT: 4px;
                   PADDING-BOTTOM: 1px;
                   BORDER-LEFT: #ff9933 1px outset;
                   PADDING-TOP: 1px;
                   BORDER-BOTTOM: #ff9933 1px outset;
                   BACKGROUND-COLOR: #ffcc66" name="frmprg">
        <h3 id="out_t" style="TEXT-ALIGN: center">
          Znajdowanie miejsca zerowego dla <i>f(x) = ax + b</i>
        </h3>
        <p style="TEXT-ALIGN: center">
          (C)2006 mgr Jerzy Wałaszek&nbsp;&nbsp;&nbsp;&nbsp; I LO w Tarnowie
        </p>
        <hr>
        <p style="TEXT-ALIGN: center">
          Podaj wartości współczynników <i>a</i> i <i>b</i>:
        </p>
        <p style="TEXT-ALIGN: center">
          <i>a</i> =
<input type="text" name="inp_a" size="20" value="25" style="text-align: right">
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          <i>b</i> =
<input type="text" name="inp_b" size="20" value="-5" style="text-align: right">
        </p>
        <p style="TEXT-ALIGN: center">
<input type="button" value="Oblicz miejsce zerowe" name="B1" onclick="main()">
        </p>
        <hr>
        <p style="TEXT-ALIGN: center">
          <b>WYNIK:</b>
        </p>
        <p style="TEXT-ALIGN: center" id="t_out">.</p>
      </form>

<script language=javascript>

// Program oblicza miejsce zerowe dla funkcji liniowej
// f(x) = ax + b
//----------------------------------------------------
// (C)2006 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// im. Kazimierza Brodzińskiego
// w Tarnowie
//----------------------------------------------------

function main()
{
  var EPS = 0.0000000001;
  var a,b,x0,t;

  a = parseFloat(document.frmprg.inp_a.value);
  b = parseFloat(document.frmprg.inp_b.value);

  if(isNaN(a) || isNaN(b))
    t = "<b><font color=red>Złe współczynniki</font></b>";
  else
  {
    if(Math.abs(a) < EPS)
      t = "<b><font color=red>Brak miejsca zerowego</font></b>";
    else
    {
      x0 = - b / a;
      t = "x<sub>o</sub> = " + x0;
    }
  }
  document.getElementById("t_out").innerHTML = t;
}

</script>
    </div>
  </body>
</html>

 

Tutaj możesz przetestować działanie prezentowanego skryptu:

Znajdowanie miejsca zerowego dla f(x) = ax + b

(C)2006 mgr Jerzy Wałaszek      I LO w Tarnowie


Podaj wartości współczynników a i b:

a =       b =


WYNIK:

.

 

Zadania

Zadanie 1

Zaproponuj implementację opisanego tutaj algorytmu w formie procedury usługowej. Zastanów się dobrze, w jaki sposób procedura ma pobierać dane oraz jak zwracać wyniki obliczeń do wywołującego ją programu.

 



List do administratora Serwisu Edukacyjnego I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo  , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

(C)2014 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.