Scilab
Rozdział 6 Funkcje
Rozdział 6.1 Wstęp
W każdym języku programowaniu np. w C++, Pascal a nawet w Asemblerze istnieją takie obiekty jak funkcje. Dotyczy to także Scilaba i one bardzo ułatwiają życie programistom. Jeżeli już jesteśmy przy innych językach, to Scilab (i Matlab) jest bezkonkurencyjny jako narzędzie do wykonywania obliczeń. Nawet rozwiązywaniem równań różniczkowych, którymi zajmiemy się później.
Gdy raz nauczysz się robić kotlety schabowe, to nie będzie problemu z każdym następnym. Podobnie jest z programowaniem. Gdy raz rozwiążesz jakiś problem w postaci iluś tam linii programu, to zapiszesz je jako funkcję. Potem nie musisz już pracowicie wpisywać wielu linii programu, tylko jedną funkcję. Wygląda ona jak zwykła instrukcja. Ile roboty zaoszczędzimy! I nie martwimy się, że coś w tym kawałku programu nie zadziała. Przecież wielokrotnie już to wcześniej sprawdzałeś.
Rozdział 6.2 Najprostsza funkcja z jednym wejściem i wyjściem
Chcemy np. obliczyć kwadrat z jakiejś liczby np. x1=2. Wejściem jest tu np. x1=2 a wyjściem y=x²=2²=4
Program P6-1
clear;clc; function y=kwadrat(x) y=x^2 endfunction x1=4 z=kwadrat(x1) disp("Kwadratem liczby ",x1,"jest ",z) x2=5 z=kwadrat(x2) disp("Kwadratem liczby ",x2,"jest ",z)
Opis programu
Funkcję
z=kwadrat(x1)
traktujemy podobnie jak instrukcję w której
– z dana wyjściowa
– kwadrat nazwa funkcji
– (x1) dana wejściowa
Gdy program w trakcie wykonywania napotka funkcję
z=kwadrat(x1)
to:
– skoczy do definicji tej funkcji tj. do function y=kwadrat(x)
– wykona to co jest definicji funkcji między linami function y=kwadrat(x) a endfunction
czyli podstawi pod x wartość z x1 =4
x=x1²=2²=4
Następnie wykona instrukcję wyświetlającą
W wyniku działania funkcji powstał taki oto tekst
“Kwadratem liczby “
4.
“jest “
16.
“Kwadratem liczby “
5.
“jest “
25.
Tu akurat funkcja składa się tylko z jednej instrukcji y=x² i użycie funkcji nie daje żadnych korzyści. Ale gdy funkcja ma tysiące linii z różnymi inputami, wykresami albo nawet z takimi fontannami jak media mp4 ?
A to już jest inna postać rzeczy. Funkcja się opłaca.
Rozdział 6.3 Prosta funkcja z 2 wejściami i 2 wyjściami
Funkcja [x,y]=dziwadlo(a, b) jest tak prosta, że nie wiadomo po co to.
A po to to, żeby zrozumieć samą ideę funkcji z wieloma wejściami i wyjściami.
Program P6-2
clear,clc function [x,y]=dziwadlo(a,b) x=a+b y=a-b endfunction [q,z]=dziwadlo(4,7) disp(q) disp(z)
Opis programu
Funkcję
[x,y]=dziwadlo(a,b)
traktujemy podobnie jak instrukcję w której
-[x,y] 2 dane wyjściowe
– dziwadlo nazwa funkcji
– (a,b) 2 dane wejściowe
Gdy program napotka funkcję
[q,z]=dziwadlo(4,7) to:
– skoczy do definicji tej funkcji tj. do [q,z]=dziwadlo(a,b)
– wykona to co jest definicji funkcji między linami [q,z]=dziwadlo(a,b) a endfunction
czyli obliczy x i y:
x=4+7=11
y=4-7=-3
Następnie wykona 2 instrukcje wyświetlające
disp(q)// tu pod q podstawi x=11
disp(z)// tu pod z podstawi y=-3
W wyniku działania funkcji powstał taki oto tekst
11.
-4.
Rozdział 6.4 Bardziej skomplikowana funkcja z 3 wejściami i 2 wyjściami
Jest nią np. funkcja obliczająca pierwiastki x1,x2 równania kwadratowego a*x²+b*x+c=0
Program P6-3
clear,clc; function [p,q]=rozwkwadr(a,b,c) d=b^2-4*a*c p=(-b+sqrt(d))/(2*a) q=(-b-sqrt(d))/(2*a) if d>0 then disp('pierwiastki rzeczywiste i różne') elseif d==0 then disp('pierwiastki rzeczywiste i jednakowe') elseif d<0 then disp('pierwiastki zespolone') end endfunction [x1,x2]=rozwkwadr(1,-5,6) disp('x1=',x1) disp('x2=',x2)
Funkcja [x1,x2]=rozwkwadr(1,-5,6) szuka pierwiastków równania 1*x²-5*x+6=0
Po wykonaniu programu powstał tekst
“pierwiastki rzeczywiste i różne”
“x1=”
3.
“x2=”
2.
Zmień w programie funkcję na [x1,x2]=rozwkwadr(1,-4,+4) która szuka pierwiastków równania 1*x²-4*x+4=0
Po wykonaniu programu powstał tekst
“pierwiastki rzeczywiste i jednakowe”
“x1=”
2.
“x2=”
2.
Zmień w programie funkcję na [x1,x2]=rozwkwadr(1,-2,+5) która szuka pierwiastków równania 1*x²-2*x+5=0
Po wykonaniu programu powstał tekst
“pierwiastki zespolone”
“x1=”
1. + 2.i
“x2=”
1. – 2.i
Program obliczył, że są 2 pierwiastki zespolone. I tu byłem mile zaskoczony. Scilab jako wyspecjalizowany program do obliczeń, po obliczeniu delty jako liczby ujemnej, sam podjął decyzję, że ma do czynienia z liczbami zespolonymi. Nie wiem czy C++ też by tak zrobił. Czy nie musiałby się wspomagać bibliotekami.