# 3P. Fungsi
## 3.1 Menuliskan Fungsi dalam Python
### Menuliskan Fungsi dalam Bentuk Relasi
Contoh berikut adalah kode Python untuk membuat tabel pemetaan dan mencari range dari suatu fungsi yang didefinisikan dalam himpunan pasangan terurut seperti halnya sebuah relasi.
:::info
***Contoh***
Misalkan $A = \{1, 2, 3, ..., 7\}$ dan $B = \{4, 5, 6, ..., 10\}$ dan $f: A \rightarrow B$ didefinisikan dengan $f = \{(1, 4), (2, 5), (3, 6), (4, 7), (5, 4), (6, 5), (7, 7)\}$. Buat tabel pemetaan $f$ dan tentukan range dari $f$.
***Solusi***
```python
A = {1, 2, 3, 4, 5, 6, 7} # Domain
B = {4, 5, 6, 7, 8, 9, 10} # Kodomain
# Fungsi f
f = {(1, 4), (2, 5), (3, 6), (4, 7), (5, 4), (6, 5), (7, 7)}
# Buat tabel pemetaan
print(f'| {"x":^5s} | {"f(x)":^5s} |')
for elm in sorted(f):
print(f'| {elm[0]:5d} | {elm[1]:5d} |')
print()
# Cari himpunan jelajah (range)
Range = set()
for elm in sorted(f):
Range.add(elm[1])
print('Range =', Range)
```
Kode di atas akan memberikan output:
```shell
| x | f(x) |
| 1 | 4 |
| 2 | 5 |
| 3 | 6 |
| 4 | 7 |
| 5 | 4 |
| 6 | 5 |
| 7 | 7 |
Range = {4, 5, 6, 7}
```
:::
### Menuliskan Fungsi dalam Bentuk Formula
Fungsi didefinisikan dalam Python menggunakan format syntax berikut:
```python
def <nama_fungsi>(x):
return <rumus_dari_f(x)>
```
Sebagai contoh, misalkan $f(x) = x + 1$, kita dapat mendefinisikan fungsi tersebut dalam Python seperti berikut:
```python
def f(x):
return x + 1
```
:::info
***Contoh x.x.x***
Fungsi $f: \{1, 2, 3, 4, 5\} \mapsto \mathbb{N}$ mempunyai rumus:
$$
f(x) = x^2
$$
Sajikan $f$ dalam tabel!
***Solusi***
```python
# Definisi fungsi f
def f(x):
return x ** 2
A = {1, 2, 3, 4, 5} # Domain
# Buat tabel pemetaan
print(f'| {"x":^5s} | {"f(x)":^5s} |')
for x in A:
y = f(x)
print(f'| {x:5d} | {y:5d} |')
print()
```
Output dari kode di atas:
```shell
| x | f(x) |
| 1 | 1 |
| 2 | 4 |
| 3 | 9 |
| 4 | 16 |
| 5 | 25 |
```
:::
## 3.2 Fungsi Simbolis
Kita dapat bekerja dengan fungsi secara simbolis dalam Python. Untuk bekerja dengan fungsi bentuk simbol dalam Python, kita menggunakan module `sympy` dan `numpy`. Module `sympy` adalah library yang digunakan untuk matematika simbolis, dan module `numpy` adalah library yang digunakan untuk bekerja dengan array dan juga memiliki fungsi yang bekerja dalam domain aljabar linier, transformasi fourier, dan matriks.
Ikuti langkah-langkah berikut untuk menginstalasi kedua module tersebut.
Pertama kita harus menginstalasi module `pip` terlebih dahulu:
1. Download `get-pip.py` pada https://bootstrap.pypa.io/get-pip.py

2. Pada command prompt pindah ke directory tempat `get-pip.py` disimpan (dalam contoh ini kita menyimpannya pada folder Downloads)
3. Pada windows, klik Start dan ketikkan "Manage App Execution Aliases", klik icon tersebut dan matikan Python.

4. Tutup command prompt.
5. Ketikkan `pip install sympy numpy` pada command prompt.

Anda akan mendapatkan pesan "Sucessfully installed numpy-x.xx.x sympy-x.xx.x" jika berhasil menginstalasi `sympy` dan `numpy`.
Berikut adalah contoh-contoh program yang bekerja dengan fungsi.
:::info
***Contoh 1. Mencari Domain dan Range dari Suatu Fungsi***
:::
### Mencari domain, range dari suatu fungsi
#### Contoh 1. Mencari domain, range
Diketahui Himpunan A = {1, 2, 3, 4, 5, 6, 7} dan B = {4, 5, 6, 7, 8, 9, 10}, membentuk suatu relasi fungsi dengan F = {(1,4), (2,5), (3,6), (4,7), (5,8), (6,9), (7,10)}, carilah domain dan range dari relasi fungsi F tersebut
```python
#Pendefinisian himpunan A,B,F serta variabel Domain, Range dan Invers berupa list
A = [1, 2, 3, 4, 5, 6, 7]
B = [4, 5, 6, 7, 8, 9, 10]
F = [[1,4],[2,5],[3,6],[4,7],[5,4],[6,5],[7,7]]
Domain = []
Range = []
#Domain
for i in range(len(F)):
hasil = F[i][0]
Domain.append(hasil)
#fromkeys()Returns a dictionary with the specified keys and value
Domain = list(dict.fromkeys(Domain))
#Mencetak Domain dengan mengganti tipedata menjadi set
print("Domain = ",set(Domain))
#Range
for j in range(len(F)):
hasil1 = A[j]
for i in range(len(B)):
hasil2 = B[i]
Range.append(hasil2)
#Mencetak Range dengan mengganti tipedata menjadi set
print("Range = ",set(Range))
```
OUTPUT
```
Domain = {1, 2, 3, 4, 5, 6, 7}
Range = {4, 5, 6, 7}
```
### Membuat Grafik fungsi dengan python
#### Contoh 2.Membuat grafik fungsi y = 2x+1
1. Grafik fungsi 2x+1 dimana x={-5,0,1,2,3,4,5}
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5,5,100)
y = x*2+1
plt.plot(x,y)
plt.xlabel('koordinat x')
plt.ylabel('koordinat y')
plt.title("diagram 2x-5")
plt.show()
```
Penjelasan program
* Baris 1 Import library `numpy` untuk membuat data imaginer dan menamakan ulang dengan `np`
* Baris 2 mengimport fungsi `pyplot` yang berada dalam module library `matplotlib.pyplot` dan menamakan ulang fungsi tersebut sebagai `plt` digunakan untuk impor fungsi pyplot
* Baris 4 membuat data imaginer yang dibentuk menggunakan `np.linspace()` digunakan untuk membuat array dengan nilai dalam interval.
* Baris 5 mendefinisikan nilai "y" dimana "y" adalah 2x+1
* Baris 7 untuk memvisualisasikan datanya dengan fungsi `Plt.plot`
* Baris 8 memberikan keterangan pada visualisasi diagram untuk koordinat x
* Baris 9 memberikan keterangan pada visualisasi diagram untuk koordinat y
* Baris 10 memberikan keterangan pada visualisasi judul diagram
* Baris 11 menampilkan diagram pada data yang divisualisasikan.
OUTPUT

#### Contoh 3. Membuat grafik fungsi $y = x^2 - 5$
2. Misal carilah grafik fungsi dari $f(x)=x^2-5$ dimana x={-5,0,1,2,3,4,5}
```python
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-5,5,100)
y = x**2-5
plt.plot(x,y)
plt.xlabel('koordinat x')
plt.ylabel('koordinat y')
plt.title("diagram x^2-5")
plt.show()
```
Penjelasan program
* Baris 1 Import library `numpy` untuk membuat data imaginer dan menamakan ulang dengan `np`
* Baris 2 mengimport fungsi `pyplot` yang berada dalam module library `matplotlib.pyplot` dan menamakan ulang fungsi tersebut sebagai `plt` digunakan untuk impor fungsi pyplot
* Baris 4 membuat data imaginer yang dibentuk menggunakan `np.linspace()` digunakan untuk membuat array dengan nilai dalam interval.
* Baris 5 mendefinisikan nilai "y" dimana "y" adalah x pangkat 2 dikurangi 5
* Baris 7 untuk memvisualisasikan datanya dengan fungsi `Plt.plot`
* Baris 8 memberikan keterangan pada visualisasi diagram untuk koordinat x
* Baris 9 memberikan keterangan pada visualisasi diagram untuk koordinat y
* Baris 10 memberikan keterangan pada visualisasi judul diagram
* Baris 11 menampilkan diagram pada data yang divisualisasikan.
OUTPUT

#### Contoh 4. Membuat grafik fungsi $y=x^2$
2. Grafik fungsi $y = x^2$ dimana x={2, 3, 4, 5, 6, 7, 8, 9, 10}
```python=
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(2,10,10)
y = x**2
plt.plot(x,y)
plt.xlabel('ini koordinat x')
plt.ylabel('ini koordinat y')
plt.title("diagram x^2")
plt.show()
```
Penjelasan program
* Baris 1 Import library `numpy` untuk membuat data imaginer dan menamakan ulang dengan `np`
* Baris 2 mengimport fungsi `pyplot` yang berada dalam module library `matplotlib.pyplot` dan menamakan ulang fungsi tersebut sebagai `plt` digunakan untuk impor fungsi pyplot
* Baris 4 membuat data imaginer yang dibentuk menggunakan `np.linspace()` digunakan untuk membuat array dengan nilai dalam interval.
* Baris 5 mendefinisikan nilai "y" dimana "y" adalah pangkat 2 dari X
* Baris 7 untuk memvisualisasikan datanya dengan fungsi `Plt.plot`
* Baris 8 memberikan keterangan pada visualisasi diagram untuk koordinat x
* Baris 9 memberikan keterangan pada visualisasi diagram untuk koordinat y
* Baris 10 memberikan keterangan pada visualisasi judul diagram
* Baris 11 menampilkan diagram pada data yang divisualisasikan.
**OUTPUT**

sumber = https://alvinburhani.wordpress.com/2020/10/06/membuat-grafik-fungsi-dengan-python/
https://www.dqlab.id/belajar-python-untuk-hasilkan-visualisasi-data
## Komposisi Fungsi
#### Contoh 5. Produk Fungsi
Kode berikut mencontohkan hasil kali fungsi $f \circ g$ dan $g \circ f$ dimana $f(x) = x^2$ dan $g(x) = x + 3$.
```python=
import sympy
x = sympy.symbols('x')
f = x**2
g = x + 3
print(sympy.compose(f,g)) // Memberikan output f(g(x))
print(sympy.compose(g,f)) // Memberikan output g(f(x))
```
Output dari kode di atas:
```
x**2 + 6*x + 9
x**2 + 3
```
Penjelasan kode:
- Baris 1 mengimpor module `sympy`
- Baris 3 menyatakan bahwa `'x'` adalah simbol yang ditugaskan ke variabel `x`
- Baris 4 mendefinisikan `f` adalah fungsi $x^2$
- Baris 5 mendefinisikan `g` adalah fungsi $x + 3$
- Baris 6 mencetak hasil $f \circ g$
- Baris 7 mencetak hasil $g \circ f$
## Fungsi Invers
#### Contoh 6. Fungsi Invers
Kode berikut mencari fungsi invers dari $f(x) = 2x + 6$.
```python
import sympy
x, y = sympy.symbols('x y')
print(sympy.solve(2*x + 6 - y))
```
Output:
```
[{x: y/2 - 3}]
```
#### Contoh 7. Fungsi Invers dengan `Eq` dan `solve`
Selain menggunakan
```python
print(sympy.solve(sympy.Eq(y, (4*x - 7)/(7*x + 3)), x))
[(-3*y - 7)/(7*y - 4)]
```
#### Fungsi floor() dan ceil() pada python
Program dibawah ini mencari bilangan bulat dari 1.4
#### Contoh 9. Mencari bilangan bulat dengan floor()
```python
#Import library matematika
import math
#Bulatkan angka ke bawah ke bilangan bulat terdekat
y = math.floor(1.4)
print(y)
```
OUTPUT
```
1
```
#### Contoh 8. Mencari bilangan bulat dengan ceil()
```python
#Import library matematika
import math
#Bulatkan angka ke atas ke bilangan bulat terdekat
x = math.ceil(1.4)
print(x)
```
OUTPUT
```
2
```
sumber = https://dosenit.com/python/fungsi-matematika-di-python
### Fungsi Faktorial
#### Contoh 10. Mencari nilai faktorial
program dibawah ini mencari nilai faktorial dari 6!
```python
# Mendefinisikan fungsi
def hitungFaktorial(n):
if n == 1:
return 1
else:
return n * hitungFaktorial(n-1)
# Mencari Faktorial 2
print(hitungFaktorial(6))
```
output
```
720
```
:::
Jika sudah mengikuti langkah-langkah pada video tutorial install dan konfigurasi Python3.10 selanjutnya lakukan install untuk library `numpy`
1. Pertama buka folder Python3.10 :

2. Pada *Address bar* ketikan cmd untuk membuka jendela command prompt


3. Selanjutnya, ketikan `pip install sympy numpy` pada jendela command prompt untuk menginstall library `simpy` dan `numpy`.
