Octave jako kalkulator naukowy

Wyświetlanie wyniku obliczeń

Tuż po uruchomieniu Octave wyświetla krótki tekst, tzw. zachętę (ang. prompt) do wpisania polecenia:

>>

W starszych wersjach programu (przed wersją 4.0.0) zachęta składa się z czterech elementów: nazwy programu (octave), znaku dwukropka, numeru polecenia (tu: 1) i znaku >:

octave:1>

Rozpocznijmy od prostego zadania: ile wynosi rozwinięcie dziesiętne ułamka 1/7? W tym celu po tekście zachęty wpisujemy wyrażenie 1/7 i przyciskamy <enter>

>> 1/7

Program odpowie następująco:

ans =  0.14286

Napis ans oznacza specjalną zmienną, w której przechowywana jest wartość ostatniego wyrażenia. Sprawdźmy to, obliczając 1/ans:

>> 1/ans
ans =  7

Spróbujmy teraz obliczyć wartość 1/0.14286:

>> 1/0.14286
ans =  6.9999

Porównanie wyników obliczeń dwóch ostatnich wyrażeń musi budzić zaniepokojenie. Z jednej strony program informuje nas, że ans = 0.14286, z drugiej strony zaś twierdzi, że 1/ans oraz 1/0.14286 mają różne wartości. Gdzie tu logika?

Odpowiedź jest prosta – Octave wyświetla przybliżone wartości wyników obliczeń i wartości zmiennych. Domyślnie wyświetlane jest 5 cyfr znaczących wyniku. Jeżeli chcemy zwiększyć dokładność do 15 cyfr, co z grubsza odpowiada domyślnej dokładności obliczeń, powinniśmy wydać polecenie

>> format long

Jeśli teraz spróbujemy wyznaczyć wartość ilorazu 1/7, otrzymamy aż piętnaście poprawnych cyfr wyniku

>> 1/7
ans =  0.142857142857143
>> 1/ans
ans =  7

Zazwyczaj dokładność sięgająca piętnastu cyfr znaczących jest niepotrzebna. Aby ponownie otrzymywać skrócone wartości obliczeń, wydajemy polecenie

>> format short

Operatory arytmetyczne

Octave umożliwia wykonywanie wszystkich podstawowych operacji matematycznych. Wykaz najważniejszych operatorów rozpoznawanych przez Octave znajduje się w Tabeli 1.

Operacja Operator Przykłady
potęgowanie ** lub ^ 2**3,  2^3
mnożenie * 2 * 3
dzielenie /  lub  \ 1/7  lub  7\1
dodawanie + 2 + 2
odejmowanie 3 – 2
Tabela 1. Podstawowe operatory arytmetyczne Octave

Największą niespodziankę stanowi możliwość zapisu dzielenia w postaci y\x zamiast standardowego x/y. Jeżeli x i y są zwykłymi liczbami, wyrażenia x/y i y\x są sobie równoważne. Z tego powodu zapisu y\x używa się głównie w operacjach na macierzach, zwłaszcza przy rozwiązywaniu układów równań liniowych, gdyż w ogólnym przypadku mnożenie macierzy jest operacją nieprzemienną (tzn. dla macierzy x i y wyrażenie x*y rzadko kiedy równe jest y*x). Dla macierzy odróżnianie x/y od y\x jest bardzo ważne, ale póki nie wiemy, co to są macierze i jak się je mnoży, potraktujmy zapis  y\x jako ciekawostkę.

Wśród powyższych operatorów największy priorytet ma potęgowanie, następnie mnożenie i dzielenie, następnie dodawanie i odejmowanie. Dlatego wyrażenie 2+2**3/4 interpretowane jest jak 2 + ((2**3)/4) a nie jak np. 2 + 2**0.75.

Stałe matematyczne

Octave rozpoznaje też kilka stałych matematycznych. Najważniejsze z nich przedstawia Tabela 2.

Stała Zapis w Octave Znaczenie
π pi iloraz obwodu koła do jego średnicy
e e podstawa logarytmów naturalnych
i i lub j jednostka urojona
Tabela 2. Najważniejsze stałe w Octave

Dokładne znaczenie dwóch ostatnich stałych zostanie omówione w dalszej części kursu. Teraz wystarczy zapamiętać, że e jest pewną liczbą,

>> e
ans =  2.7183

natomiast i jest “magicznym obiektem”, który podniesiony do kwadratu daje -1:

>> i*i
ans =  -1

Jednostkę urojoną i wprowadzam w tym kursie bardzo szybko, gdyż może pojawić się jako wynik pewnych działań, które wg. kursu matematyki szkolnej są zabronione:

>> log(-1)
ans =  0.00000 + 3.14159i
>> sqrt(-1)
ans =  0 + 1i

Jak widzimy, Octave potrafi obliczać logarytmy i pierwiastki kwadratowe z liczb ujemnych. O tym, jak to jest możliwe, dowiemy się w dalszej części kursu.

Funkcje matematyczne

W Octave można posługiwać się nie tylko sinusem i logarytmem, ale niemal wszystkimi funkcjami używanymi na kursach matematyki wyższej, m.in. sin, cos, exp, sqrt, log10 i wieloma, wieloma innymi. Oto kilka przykładów użycia Octave jako zaawansowanego kalkulatora naukowego:

>> pi^2
ans =  9.8696
>> log10(1000)
ans =  3
>> log10(1e3)
ans =  3
>> sin(cos(sin(cos(1))))
ans =  0.76471
>> factorial(6)
ans =  720
>> factorial(50)
ans =   3.0414e+064
>> log10(factorial(50))
ans =  64.483

Użyta powyżej funkcja log10 oblicza logarytm dziesiętny. Zapis 1e3 oznacza 1*103 (jest to tzw. notacja naukowa). Funkcja factorial służy do obliczania silni. Innymi słowy, factorial(n) jest iloczynem wszystkich liczb naturalnych od 1 do n: factorial(n) = n! = 1*2*,...,*n.  W szczególności factorial(6) = 1*2*3*4*5*6 = 720, natomiast factorial(50) jest tak wielką liczbą, że wynik podawany jest w notacji naukowej – dlatego powinniśmy ją rozumieć. Z kolei ostatni przykład ilustruje użyteczność logarytmów dziesiętnych: skoro log10(factorial(50)) = 64.483, to 50! jest liczbą 65-cyfrową. W rzeczywistości równa jest (około) 3.0414e+064, czyli faktycznie ma 65 cyfr dziesiętnych.

Należy pamiętać, że Octave zakłada, że argumenty funkcji trygonometrycznych podawane są w radianach. Aby obliczyć np. sin(n), gdzie n jest wyrażone w stopniach, należy n pomnożyć przez π i podzielić przez 180:

>> sin(30 *  pi / 180) # sinus 30 stopni
ans =  0.50000

Warto zwrócić uwagę na to, że w Octave przecinek dziesiętny przyjmuje postać kropki: o ile w języku polskim piszemy 0,5, to zarówno w języku angielskim, jak i w Octave piszemy 0.5.

Quit

Program opuszczamy poleceniem quit

>> quit

Polecenie to jest szczególnie przydatne w wersji konsolowej programu (tzw. CLI, ang. command-line interface) działającej w terminalu uniksowym.

Quiz

  1. Jakie jest główne przeznaczenie programu Octave?
  2. Co to jest tekst zachęty?
  3. Co oznaczają operatory **, ^, *, /, \, + i ?.
  4. Jak kończy się pracę z programem Octave?

Zadania

  1. Oblicz sin(20°).
  2. Która liczba jest większa, 1011 czy 1110?
  3. Sprawdź, że pierwiastek kwadratowy (sqrt) z -1 równa się i oraz że i razy i równa się -1.
  4. Sprawdź, że Octave potrafi obliczać logarytm z liczb ujemnych.
    • Ile wynosi numeryczna wartość wyrażenia log(-1) ?
    • Na podstawie wyniku numerycznego zaproponuj wzór na log(-1).
  5. Oblicz wartość π do potęgi π z dokładnością do 10 cyfr po przecinku.
  6. Octave podaje identyczną wartość 2.7183 dla wyrażenia (1 + 1/100000)100000 oraz stałej e. Jak sprawdzić, że w rzeczywistości nie są one sobie naprawę równe?
  7. Ile dokładnie jest różnych wyników losowania totolotka (6 z 49)? Wskazówka: użyj polecenia nchoosek(n,k)
  8. Skoro już wiesz, że Octave obsługuje liczby zespolone (czyli liczby zawierające jednostkę urojoną i), sprawdź
    • ile wynosi cos(i) i czy wartość tego wyrażenia jest niewiększa od 1?
    • czy mimo wszystko sin2(i) + cos2(i) = 1?
    • czy można zaryzykować twierdzenie, że cos(i) = (e + 1/e)/2?

Zadania domowe dla wszystkich (do pokazania na zajęciach)

  1. Na podstawie wzoru \cos (x)=\frac{e^{ix}+e^{-ix}}{2} i jedynki trygonometrycznej zaproponuj analogiczny wzór na sin(x) jako wyrażenie zawierające stałe e oraz i. Do ustalenia wartości znaku ±1, posłuż się Octave.
  2. Liczba cząsteczek gazu doskonałego w 1 metrze sześciennym powietrza wynosi 2,69 * 10^{25} (kalkulatorowy zapis to 2,69e25). Załóżmy, że każdą z tych cząsteczek nagle powiększyliśmy do rozmiarów ziarnka ryżu (grain of rice) i rozsypaliśmy równomiernie po powierzchni Ziemi (łącznie z oceanami). Oszacuj, jak grubą warstwą ryżu  pokrylibyśmy naszą planetę?