Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Autor artykułu: mgr Jerzy Wałaszek

©2020 mgr Jerzy Wałaszek
I LO w Tarnowie

W naszym serwisie jest nowszy artykuł o obliczaniu pierwiastków funkcji: "Metody numeryczne".

Równanie liniowe z jedną niewiadomą

SPIS TREŚCI
Podrozdziały

Algorytm

Funkcja liniowa posiada następujący przepis:

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

Miejsce zerowe xo funkcji liniowej obliczamy analitycznie:

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:

zastosujemy test:

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ć).

Na początek:  podrozdziału   strony 

Opis algorytmu

Specyfikacja problemu

Dane wejściowe

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

Dane wyjściowe

x0 – miejsce zerowe, x0 R

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 kroku K06
K03:
K04: Pisz x0
K05: Zakończ
K06: Pisz "Brak miejsca zerowego"
K07: Zakończ

Schemat blokowy

obrazek

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

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.

Na początek:  podrozdziału   strony 

Programy

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

C++
// 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;
}
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.
Basic
' 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>
Wynik:
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...

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:

.

Na początek:  podrozdziału   strony 

Zadania

  1. Zaproponuj implementację opisanego tutaj algorytmu w formie procedury (funkcji). Zastanów się dobrze, w jaki sposób procedura ma pobierać dane oraz jak zwracać wyniki obliczeń do wywołującego ją programu.
Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2020 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.