# ---
# jupyter:
#   jupytext:
#     text_representation:
#       extension: .py
#       format_name: light
#       format_version: '1.5'
#       jupytext_version: 1.14.4
#   kernelspec:
#     display_name: Python 3
#     language: python
#     name: python3
# ---

# + [markdown] slideshow={"slide_type": "notes"}
# # <center>Laboratorium 2<br>Metody Numeryczne</center>
# -

# Biblioteki niezbędne do wykonania zadania:

# +
import main

import numpy as np
import scipy
import matplotlib
import matplotlib.pyplot as plt

# + [markdown] tags=[]
# ***Zadanie 1.***  
# Zdefiniuj w notatniku funkcję $f(x)= x^{3} - 3x$ i sporządź jej wykres dla argumentów z przedziału:  
# 1. $x\in<-1,1>$  
# 2. $x\in<-5,5>$  
# 3. $x\in<0,5>$
#   
# ***Wskazówki***
# Jako argumentu funkcji można użyć numpy array.  
#
# Do wizualizacji wyników w Pythonie używa się pakietu [Matplotlib](https://matplotlib.org/). Działanie tego pakietu prezentuje przykład:
# -

x = np.linspace(-10,10)
# inicjalizacja wektora f(x) = sin(x)
y = np.sin(x)
plt.plot(x, y, label ='sin(x)')
plt.show()


# Wspierając się dokumentacją [Matplotlib](https://matplotlib.org/) dodaj do wykresu etykiety osi, tytuł, grida i legendę.

# ***Zadanie 2.***  
# Dla funkcji z zadania pierwszego używając wektora $x \in <-10,10>$ wyrysuj wykres dla argumentów:
# 1. $x\in<-1,1>$  
# 2. $x\in<-10,-1>$  
# 3. $x\in<1,10>$
#
# Używając do tego funkcji: [ylim](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.ylim.html), [xlim](https://matplotlib.org/3.3.2/api/_as_gen/matplotlib.pyplot.xlim.html), [axis](https://matplotlib.org/3.3.2/api/_as_gen/matplotlib.pyplot.axis.html)

# ***Zadanie 3.*** 
# Oblicz ilość ciepła, które wydzieli się podczas hamowania jeżeli opisuje je zależność:  
#   
# $Q = \cfrac{mv^2}{2}$  
#   
# jeżeli $m = 2500g$, $v = 60km/h$, wypisz wynik oraz podaj w kilokaloriach i dżulach. Wykreśl wykresy które zobrazują zmianę ilości ciepła w procesie hamowania dla ciała o masie $3000g$ i prędkości $v\in<200,0>km/h$, przedstawiając ciepło hamowania na pierwszym w skali liniowej na drugim w skali logarytmicznej.  
#
# ***Wsakzówka:*** Do stworzenia wykresów z osią logarytmiczną skorzystaj z funkcji: [semilogy](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.semilogy.html), [xlim](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.xlim.html?highlight=xlim#matplotlib.pyplot.xlim) i [figure](https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html?highlight=figure#matplotlib.pyplot.figure) z pakietu *Matplotlib*. 

# ***Zadanie 4.***  
# Częstą praktyką szczególnie w dziedzinie analizy danych, statystyce, uczeniu maszynowym, itp. jest tworzenie na podstawie biblioteki [Matplotlib](https://matplotlib.org/) własnych szablonów wykresów stworzonych na podstawie funkcji. Najprostszy przykład to przeładowanie funkcji plot tak by wykres miał czerwony kolor:

# + tags=[]
def my_plot(x,y,xlabel,ylabel,title,label):
    if x.shape != y.shape or  min(x.shape)==0:
        return None
    fig, ax = plt.subplots()
    ax.plot(x, y, 'r', label=label)
    ax.set(xlabel=xlabel, ylabel=ylabel, title=title)
    ax.legend()
    return fig

x = np.linspace(-10,10)
# inicjalizacja wektora f(x) = sin(x)
y = np.sin(x)
my_plot(x,y,'x','y','Funkcja sin', 'sin(x)')
# -

# Zaimplementuj funkcję *compare\_plot* w taki sposób by na jednym wykresie wyrysowane były dwie funkcje typu [plot](https://matplotlib.org/3.3.1/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot). Pierwsza ma rysować się w kolorze niebieski i grubość lini ma wynosić 4, druga natomiast w kolorze czerwonym o grubości lini 2. Domyślnie ma być dodawana legenda. Dodatkowo użytkownik ma mieć możliwość ustawienia parametrów:
# - x1 - wektor wartości osi x dla pierwszego wykresu,
# - y1 - wektor wartości osi y dla pierwszego wykresu,
# - x2 - wektor wartości osi x dla drugiego wykresu,
# - y2 - wektor wartości osi x dla drugiego wykresu,
# - xlabel - opis osi x,
# - ylabel - opis osi y,
# - title - tytuł wykresu ,
# - label1 - nazwa serii z pierwszego wykresu,
# - label2 - nazwa serii z drugiego wykresu.
#
# Jeżeli nie da się wyrysować danych należy zwrócić wartość None.

# ** Zadanie 5 **  
# Za pomocą funkcji *compare\_plot* rozwiąż graficznie równanie: $f(x) = g(x)$, gdzie:  
# $f(x) = x+2$  
# $g(x) = x^2 -2sin(x) + 3$

# ***Zadanie 6.***   
# Innym przydatnym sposobem prezentowania wykresów jest [subplot](https://matplotlib.org/3.3.2/api/_as_gen/matplotlib.pyplot.subplot.html), czyli wyrysowanie obok siebie kilku wykresów. Zaimplementuj funkcję parallel_plot tak by obok siebie wyrysowane zostały dwa standardowe ploty i użytkownik mógł podać parametry:
# - x1 - wektor wartości osi x dla pierwszego wykresu,
# - y1 - wektor wartości osi y dla pierwszego wykresu,
# - x2 - wektor wartości osi x dla drugiego wykresu,
# - y2 - wektor wartości osi x dla drugiego wykresu,
# - x1label - opis osi x dla pierwszego wykresu,
# - y1label - opis osi y dla pierwszego wykresu,
# - x2label - opis osi x dla drugiego wykresu,
# - y2label - opis osi y dla drugiego wykresu,
# - title - tytuł wykresu,
# - orientation - parametr przyjmujący wartość '-' jeżeli subplot ma posiadać dwa wiersze albo '|' jeżeli ma posiadać dwie kolumny.
#
# Jeżeli nie da się wyrysować danych należy zwrócić wartość None.
#
#  

# ***Zadanie 7.***  
# Za pomocą funkcji *parallel\_plot*  i przedstaw na jednym z nich [Spirale logarytmiczną](https://pl.wikipedia.org/wiki/Spirala_logarytmiczna) w szerokim przedziale, a w drugim w okolicy zera.

# ***Zadanie 8.***  
# Zaimplementuj funkcję *log\_plot* która będzie tworzyć wykres w skalach logaritmicznych. Skale logarytmiczne mają być ustawione zgodnie z parameterem *log\_axis* gdzie wartość:
# - 'x' oznacza skale logarytmiczną na osi x,
# - 'y' oznacza skale logarytmiczną na osi y,
# - 'xy' oznacza skale logarytmiczną na obu osiach.
#
# Dodatkowo użytkownik ma mieć możliwość ustawienia parametrów:
# - x - wektor wartości osi x,
# - y - wektor wartości osi y,
# - xlabel - opis osi x,
# - ylabel - opis osi y,
# - title - tytuł wykresu.

# **Zadanie 9.**  
# Przy pomocy funkcji *log\_plot* przedstaw różne warianty funkcji z zadania 3.

#
# Materiały uzupełniające:
# - [Scipy Lecture Notes](http://www.scipy-lectures.org/index.html)
# - [NumPy for Matlab users](https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html#numpy-for-matlab-users)
# - [Python Tutorial - W3Schools](https://www.w3schools.com/python/default.asp)
# - [NumPy](https://www.numpy.org)
# - [Matplotlib](https://matplotlib.org/)
# - [Anaconda](https://www.anaconda.com/)
# - [Learn Python for Data Science](https://www.datacamp.com/learn-python-with-anaconda?utm_source=Anaconda_download&utm_campaign=datacamp_training&utm_medium=banner)
# - [Learn Python](https://www.learnpython.org/)
# - [Wujek Google](https://google.pl) i [Ciocia Wikipedia](https://pl.wikipedia.org/wiki/Wikipedia:Strona_g%C5%82%C3%B3wna)



StarcoderdataJupyterScriptsDedupFiltered