% Table of Contents
% Wykresy 2D
%     Wykresy funkcji jednej zmiennej o znanym wzorze
%     Wykresy krzywych parametrycznych
%     Wykresy krzywych opisanych równaniem
%     Wykresy punktowe i łamane
% Wykresy 3D
%     Wykresy funkcji dwóch zmiennych o znanym wzorze
%     Wykresy konturowe (poziomicowe)
%     Wykresy powierzchni opisanych równaniem
%% Lab_1 - Wykresy
%% Wykresy 2D
%% 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

clear; 
close all;

%
% Przykład: wykres funkcji f_1 \left(x\right)=\frac{x}{x^2 -3} na przedziale [-3, 3]

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;
f2=sin(x)*x
fplot([f2,x,-x], [-3*pi,3*pi])
grid on   % zaznaczone linie siatki

%
% Wykorzystując opcje   hold on   oraz   hold off, możemy nakładać kolejne wykresy do rysunku. Możemy też lepiej kontolować sposób rysowania poszczególnych wykresów
%  np. niezależnie ustalić styl i kolor linii dopisując opje: 'styl_linii kolor znacznik'

fplot(f2, [-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      % zakończenie dołączania wykresów !!bardzo ważne!!

%
%% 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(t)=2*cos(t)
y(t)=1*sin(t)
fplot(x(t),y(t),[0, 2*pi])
grid on
 axis equal % jednakowe skale na osiach dla pokazania prawdziwych proporcji

%
% Zobaczmy jak zostanie przedstawiony okrąg o promieniu r=2 z zastosowaniem polecenia axis equal oraz bez niego

 syms t
x(t)=2*cos(t);
y(t)=2*sin(t);
fplot(x(t),y(t),[0, 2*pi]); % proporcje domyślne
grid on
 
fplot(x(t),y(t),[0, 2*pi]);
grid on
axis equal  %proporcje prawdziwe

%
%% Wykresy krzywych opisanych równaniem
% Do rysowania krzywych opisanych opisanych równaniem: rownanie(x,y) służy polecenie
% fimplicit(równanie(x,y), opcje)
% Przykład: zapiszemy równanie dla rodziny elips o różnych parametrach a i b
% \frac{x^2 }{a^2 }+\frac{y^2 }{b^2 }=1, a następnie narysujemy elipsę dla wybranych wartości a i b.

clear;
close all;
syms x y a b
elipsa(a,b,x,y)=x^2/a^2+y^2/b^2==1
fimplicit(elipsa(5,3,x,y),[-6 6 -4 4], '--b', 'LineWidth',1)   

% [-6 6 -4 4] - wymiary [xmin xmax ymin ymax] obszaru wykresu
%   '--b' - wykres linią przerywaną, niebieską (blue)
% 'LineWidth',1 - daje linię grubości 1
grid on  % widoczne linie siatki
axis equal  % jednakowe skale na osiach

%
% Przykład: narysujemy fragment krzywej o równaniu x=y^2 -1, w obszarze \left\lbrack -2,3\right\rbrack \times \left\lbrack -3,3\right\rbrack.
% Wymusimy położenie osi takie, by przecinały się w punkcie (0,0).
% Wcześniej wykres musi być zapisany jako pewien obiekt graficzny, należy przypisać mu nazwę.

wykr=fimplicit(x==y^2-1, [-2 3 -3 3], 'c', 'LineWidth',1);   

grid on
ax = gca;  % przypisanie  osi dla danego wykresu 
 ax.XAxisLocation = 'origin';  % ustalenie położenia osi OX
 ax.YAxisLocation = 'origin';  % ustalenie położenia osi OY

%
%% 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 w\left(x\right)=x^7 +x^5 -2x^3 +8

syms x 
w(x)=x^7+4*x^5-2*x^3+8

s=solve(w) % 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.
%
%% Wykresy 3D
%% Wykresy funkcji dwóch zmiennych o znanym wzorze
% otrzymamy uzyskamy za pomocą polecenia  fsurf lub fmesh.
% Składnia:    fsurf(f,[xmin xmax ymin ymax],opcje),
%             fmesh(f,[xmin xmax ymin ymax],opcje),
%    gdzie  f - wzór funkcji lub nazwa wcześniej zdefiniowanej funkcji,
% [xmin xmax ymin ymax] - zakres  argumentów

clear; 
close all;
syms x y f
f(x,y)=sin(x) + cos(y)
fsurf(f,[-2*pi 2*pi])
fmesh(f,[-2*pi 2*pi])

%
%% Wykresy konturowe (poziomicowe)
% Gdy chcemy wiedzieć, jak zmieniają się wartości funkcji  w danym obszarze, możemy narysować wykres poziomicowy. W tym celu wykorzystamy operację
%    fcontour(funkcja, zakres, opcje).

syms x y f
f(x,y)=sin(x) + cos(y)
fcontour(f, [-2*pi 2*pi],'Fill','off','LevelStep',0.2); 
axis equal
grid on
colormap('jet');  % można ustalić inny sposób doboru kolorów
colorbar westoutside

%
%% Wykresy powierzchni opisanych równaniem
% Gdy chcemy zobaczyć powierzchnię - zbiór rozwiązań równania, możemy wykorzystać polecenie   fimplicit3(rownanie, opcje).
% Przykład: narysujemy elipsoidę, czyli powierzchnię opisaną równianiem
% \frac{x^2 }{a^2 }+\frac{y^2 }{b^2 }+\frac{z^2 }{c^2 }=1,\;\;\;\textrm{gdzie}\;a,b,c\in {\mathbb{R}}_+
% (wybierzemy wartości parametrów a,b,c określających wymiary powierzchni)

syms x y z a b c
elipsoida(a,b,c, x,y, z)=x^2/a^2+y^2/b^2+z^2/c^2==1
fimplicit3(elipsoida(5,2,3,x,y,z), [-6 6 -3 3 -4 4], 'FaceAlpha', 0.6)   

% [-6 6 -3 3 -5 5] - wymiary [xmin xmax ymin ymax zmin zmax] obszaru wykresu
% 'FaceAlpha', 0.6 - ustalenie współczynnika przezroczystości
grid on  % widoczne linie siatki  
xlabel('x') % oznaczenie osi
ylabel('y')
zlabel('z')
axis equal  % jednakowe skale na osiach