% Table of Contents
% Obiekty skalarne rzeczywiste
%     Podstawowe działania na liczbach rzeczywistych.
% Liczby zespolone
% Zmienne i obiekty symboliczne
% Funkcje
%     Rozwiązywanie prostych równań
% Wykresy
%     Wykresy funkcji jednej zmiennej o znanym wzorze
%     Wykresy krzywych parametrycznych
%     Wykresy punktowe i łamane
% Dobra praktyka: rozpoczynamy skrypt od wyczyszczenia przestrzeni roboczej i zamknięcia wszystkich obrazków.

clear; 
close all;

%% Obiekty skalarne rzeczywiste
%
% Wielkości skalarne tworzymy w następujący sposób:

a=3
b=4.1;   % średnik powoduje, że wynik operacji nie jest wyświetlany
c=pi     % stała pi
format long    % zmieniamy sposób wyświetlania wyniku
c
format short    % wracamy do typowego sposobu wyświetania liczb
c-a

%
%% Podstawowe działania na liczbach rzeczywistych.
% Działania arytmetyczne:

a+b
a-b
a*b          % mnożenie
a/b          % dzielenie
b^a          % potęgowanie
a*b+c
a*(b+c)

% Moduł - wartość bezwzględna \left|a\right| -   abs(a)

abs(-pi)

% Pierwiastek kwadratowy  \sqrt{a}  -  sqrt(a)

sqrt(10)

% Pierwiastek rzeczywisty stopnia n:  \sqrt[n]{a} -   a^(1/n)

7^(1/5)

% Funkcja wykładnicza    e^a:    exp(a),   stała e:    exp(1)

exp(2)         % e^2

% Logarytm naturalny:   log(a),   logarytm dziesiętny:    log10(a)

log(5)
log10(5)

%
%% Liczby zespolone

clear

% Liczby zespolone tworzymy używając literki i lub j do oznaczenia części urojonej

z1=1+1i
z2=2-2j

%
% Działania na liczbach i zmiennych zespolonych wykonujemy używając typowych symboli.

z1+z2
z1-z2
z1*z2
z1/z2

%
% W przypadku liczb zespolonych operator ' oznacza sprzężenie

(1+2j)'

% Należy uważać, żeby niechcący nie zapisać pod zmienną i czy j innej wielkości.

i=5
1+3i
1+3*i
clear

%
% Część rzeczywistą liczby zespolonej otrzymujemy za pomocą funkcji  real,
%  jej część urojoną za pomocą funkcji  imag.
% Moduł liczby zespolonej otrzymujemy za pomocą funkcji  abs,
% a jej argument (w radianach) za pomocą funkcji  angle.

real(1+3i)
imag(1+3i)
abs(1+3i)  % moduł
angle(1+3i)  % argument - wynik w radianach
rad2deg(angle(1+3i))  % zamiana radianów na stopnie

%
%% Zmienne i obiekty symboliczne
% Wielkość numeryczną możemy zamienić na symboliczną za pomocą operacji   sym()

 clear 

% Wartości zmiennych symbolicznych są dokładne:

sym(4.2)    % ułamek dziesiętny zostanie zamieniony na ułamek zwykły
z1=-2+2i
z3=sym(z1)
real(z3)
imag(z3)
abs(z3)
angle(z3)    % argument w radianach
rad2deg(angle(z3))   % zamiana argumentu z radianów na stopnie

%

a=sym(-1-3j)
arg_a=angle(a)
st_arg_a=rad2deg(arg_a)
abs(a)

%
% Pierwiastki z liczb zespolonych
% Przykład  \sqrt[3]{16}

16^(1/3)   % wartość przybliżona, numeryczna (dla inżynierów)
nthroot(sym(16),3)
sym(16^(1/3))   % wartość przybliżona zamieniona na najbliższy ułamek zwykły
sym(16)^(1/3)   % wartość dokładna (dla matematyków)

%
% Przykład: obliczymy   \sqrt[3]{-8j}

(-8j)^(1/3)    % dostaniemy tylko jeden z trzech pierwiastków
sym(-8j)^(1/3)
sym((-8j)^(1/3))

%
%% Funkcje
% Do tworzenia zmiennych i wyrażeń symbolicznych wykorzystujemy polecenie syms, np.

syms x
f(x)=x^3+8j    % w definicji funkcji pojawia się zadeklarowana wcześniej zmienna x
g=x^4    % przy definiowaniu nie musimy podawać argumentu, można napisać g lub g(x)
f(-2j)     % obliczenie wartości
subs(g,x,2j)     % do wyrażenia oznaczonego symbolem g podstawiamy za x wartość 2j
h=@(x) cos(3*x) % inny sposób definiowania funkcji: funkcja anonimowa, nie może być h(x) 
h(pi/4)
h(g)

%
%% Rozwiązywanie prostych równań
% Możemy rozwiązać równanie  f=0  za pomocą  operacji  solve:

solve(f)    % dostaniemy wszystkie pierwiastki wielomianu f(x)=x^3+8j

% Matlab radzi też sobie dobrze z dowolnymi równaniami wielomianowymi

solve(g==4)          % dostaniemy wszystkie pierwiastki równania x^4=4
rozw=solve(x^6==16) % dostaniemy wszystkie pierwiastki szóstego stopnia liczby 16
eval(rozw)          % polecenie eval zamienia wielkości dokładne na numeryczne

%
% Gdy chcemy wyznaczyć pierwiastki wielomianu  w\left(x\right)=a_{n\;\;} x^n +\cdots +a_1 x+a_0,
% możemy wykorzystać operację   roots([a_n ,\cdots ,a_1 ,a_0]).
% Na przykład pierwiastki wielomianu  w\left(x\right)=x^3 +8j  wyznaczymy jak niżej

r1=roots([1,0,0,8j])       %  zwraca wartości numeryczne         
r2=roots(sym([1,0,0,8j]))  % zwraca wartości dokładne, gdy współczynniki wielomianu zapiszemy w postaci symbolicznej
r3=sym(roots([1,0,0,8j]))  % uwaga na kolejność poleceń!

%
%% Wykresy
%% Wykresy funkcji jednej zmiennej o znanym wzorze
%  uzyskamy za pomocą polecenia  fplot.
% Składnia:    fplot(f,[xmin xmax]),
%    gdzie  f - wzór funkcji lub nazwa wcześniej zdefiniowanej funkcji,   [xmin xmax] - przedział argumentów

syms x
f1(x)=x/(x^2-3)
fplot(f1,[-3,3])

%
% Można narysować wykresy wielu funkcji na jednym rysunku.
% Wcześniej definiujemy funkcje lub wpisujemy ich wzory do listy rysowanych funkcji
% składnia:    fplot([f1,f2,...,fn],[xmin xmax]),
%  gdzie [f1,f2,...,fn] - lista funkcji, [xmin xmax] - wspólny przedział argumentów
% Program samodzielnie dobierze kolory wykresów.

clear;
syms x;
f1=sin(x)*x
fplot([f1,x,-x], [-3*pi,3*pi])
grid on % rysowane linie siatki

%
% Wykorzystując opcje   hold on   oraz   hold off,  możemy lepiej kontolować sposób rysowania poszczególnych wykresów
%  np. niezależnie ustalić styl i kolor linii

fplot(f1, [-3*pi,3*pi], '-r')      % linia ciagla '-'; w kolorze czerwonym 'r' (red)
grid on    % dodanie linii siatki
hold on    % dodanie kolejnych wykresow do rysunku
fplot(x,[-2*pi,2*pi],':b')   % linia kropkowa ':' w kolorze niebieskim 'b' (blue)
fplot(-x,[-2*pi,2*pi], '--g')   % linia przerywana '--' w kolorze zielonym 'g' (green)
legend('Location','north') % dodanie legendy i określenie jej położenia

hold off      % zakonczenie dołączania wykresów

%
%% Wykresy krzywych parametrycznych
% Możemy rysować krzywe o znanej parametryzacji x=x(t),  y=y(t),  dla t z przedziału [tmin, tmax]  za  pomocą operacji
%   fplot(x(t), y(t), [tmin, tmax]).
% Przykład. Wykres elipsy   \frac{x^2 }{4}+y^2 =1.  Parametryzacja tej krzywej to: x\left(t\right)=2\cos \;t,y\left(t\right)=\sin \;,t\in \left\lbrack 0,2\pi \right\rbrack

syms t
x=2*cos(t)
y=sin(t)
fplot(x,y,[0, 2*pi])
grid on
 axis equal %jednakowe skale na osiach

%
%% Wykresy punktowe i łamane
% Czasem chcemy na płaszczyźnie zilustrować dyskretny zbiór punktów.
% Gdy znamy listę punktów np. \left\lbrace \left(x_1 ,y_1 \right),\left(x_2 ,y_2 \right),\cdots ,\left(x_n ,y_n \right)\right\rbrace, to odpowiednią ilustrację na płaszczyźnie otrzymamy za pomocą operacji plot.
% Składnia  plot([x_1,x_2,..., x_n],[y_1,y_2,...,y_n],' styl_linii kolor znacznik')

X=[1,2,2,3.5,5,7]
Y=[0,-2,1,-1,2,1]
plot(X,Y,':bo')    % kolor znaczników 'b'- blue, kształt znaczników 'o'- kółka,
% styl linii ':' - punkty będą połączone kropkowanymi odcinkami 
grid on       % widoczne linie siatki

%
% Przykład: zaznaczymy na płaszczyźnie zbiór zespolonych pierwiastków wielomianu f_2 \left(x\right)=x^7 +x^5 -2x^3 +8

syms x 
f2(x)=x^7+4*x^5-2*x^3+8
s=solve(f2) % otrzymamy listę pierwiastków zespolonych 
xs=real(s); % zapisujemy listę części rzeczywistych tych pierwiastków
ys=imag(s); % zapisujemy listę części urojonych tych pierwiastków
plot(xs,ys,'r^')   % znaczniki czerwone 'r'-red, w kształcie trójkątów '^', nie podano stylu linii, 
% punkty nie będą połączone odcinkami
grid on
axis image
xlabel('Rez') 
ylabel('Imz')

% Widzimy, że mamy pary pierwiastków sprzężonych.
%