20210924 UTS MA2151
20210924 UTS MA2151¶
Soal nomor 1¶
Untuk menghitung $f(x)=\sin(x)$ dapat dihampiri dengan menghitung deret $S_n(x) = x-\frac{x^3}{3!}+\frac{x^5}{5!}-\frac{x^7}{7!}+...+(-1)^{\frac{n-1}{2}}\frac{x^n}{n!}$, dengan $n$ adalah bilangan ganjil.
Buatlah algoritma untuk menghampiri nilai $f(x)=\sin(x)$, dengan masukkan $x$ bilangan real dan menggunakan deret di atas, sampai suku ke $k$ yang memenuhi $\frac{x^{k+1}}{(k+1)!}<10^{-6}$.
- Tanpa menggunakan variabel berindex/array.
- Fungsi faktorial boleh digunakan
Jawaban Soal Nomor 1 Algoritma menghampiri $sin(x)$ dengan mengunakan deret
- Deskripsi : Algoritma menghampiri nilai
sin(x)
dengan mengunakan deret - Masukkan : masukkan bilangan real
x
, dan galat yang diinginkangalat=0.000001
- Keluaran : hampiran nilai
sin(x)
- Langkah-langkah :
- masukkan bilangan real
x
- masukkan galat
galat=0.000001
- deklarasikan variabel untuk menyimpan jumlahan deret
sum=0
, - deklarasikan
i=1
sebagai variabel pangkat dan pembagi faktorial dari deret - deklarasikan index iterasi,
iter=1
- deklarasikan maksimum iterasi untuk penghenti apabila program terlalu lama,
max_iter=100000
- deklarasikan variabel boolean untuk masuk kedalam iterasi
while
,stop=False
- ketika/while
stop=False
daniter<=max_iter
:- Hitung
suku=(x**i)/faktorial(i)
- jika
suku>galat
:sum=sum+suku*(-1)**((i-1)/2)
#jumlahkan deretnya
- jika tidak (
else
):stop=True
#untuk menghentikan iterasi
i=i+2
#untuk menghitung suku berikutnyaiter=iter+1
#untuk menandakan banyak iterasi yang sudah dilakukan
- Hitung
- keluarkan hasilnya |
print("hampiran sin(",x,") =",sum)
- masukkan bilangan real
#Hampiran sin(x)
def faktorial(n):
return 1 if (n==1 or n==0) else n * faktorial(n - 1);
print("Masukkan bilangan real x yang akan dihitung nilai sin nya")
x=float(input())
stop=False
error=0.000001
sum=0
i=1
iter=1
max_iter=1000
while stop==False and i<=max_iter:
suku=x**i/faktorial(i)
if suku>error:
sum=sum+suku*(-1)**((i-1)/2)
else:
stop=True
i=i+2
iter=iter+1
print("Hampiran sin(",x,")=",sum)
Masukkan bilangan real x yang akan dihitung nilai sin nya 3.14 Hampiran sin( 3.14 )= 0.0015918867417265136
Soal Nomor 2¶
Definisikan jarak antar kata adalah banyaknya karakter yang berbeda antara kata pertama dan kata kedua di setiap posisi karakter tersebut. Contoh
- "saya" dan "sayang" memiliki jarak 2, karena terdapat 2 karakter yang berbeda di posisi 5 dan 6
- "saya" dan "bayam" memiliki jarak 2, karena terdapat 2 karakter yang berbeda di posisi 1 dan 5
- "aku" dan "kamu" memiliki jarak 4, karena terdapat 4 karakter yang berbeda di posisi 1,2,3 dan 4.
Diberikan L= list berisi 100 buah kata (misalkan list kata tersebut sudah tersedia), buatlah algoritma untuk mengeluarkan kata yang paling dekat dengan kata "komputasi" pada list tersebut.
- apabila ada lebih dari 1 kata yang memiliki jarak terdekat yang sama, maka keluarkan semua kata tersebut.
Jawaban Soal Nomor 2 Algoritma mencari kata "terdekat"
- Deskripsi : Algoritma mencari kata terdekat
- Masukkan : List database kata, dan kata yang ingin dicek
- Keluaran : kata-kata yang terdekat
- Langkah-langkah :
- masukkan
L
=list kata, misalkan kata padaL
ada sebanyak $n$. - masukkan
cek_kata
=kata yang ingin dicek - buat list tempat penyimpanan jarak antar kata, misalkan nama variabelnya
simpan_jarak
- untuk setiap $i\in \{1,2,3,...,n\}$
- hitung jarak antara
cek_kata
danL[i]
dengan fungsihitung_jarak
simpan_jarak[i]
adalah jarakcek_kata
dengan L[i]
- hitung jarak antara
- misalkan
idx={idx_1,idx_2,...,idx_k}
adalah himpunan index yang jaraknya paling kecil padasimpan_jarak
,idx
didapat dari fungsiindex_min
- untuk setiap $j\in$
idx
- keluarkan
L[j]
,print(L[j])
- keluarkan
- masukkan
Fungsi maks
: Algoritma mendapat bilangan yang lebih besar
- Deskripsi : Algoritma mendapat bilangan yang lebih besar
- Masukkan : dua buah bilangan real
- Keluaran : bilangan yang lebih besar
- Langkah-langkah :
- masukkan bilangan real
a
danb
- jika
a>b
, kembalikana
- jika tidak (else), kembalikan
b
- masukkan bilangan real
Fungsi mins
: Algoritma mendapat bilangan yang lebih kecil
- Deskripsi : Algoritma mendapat bilangan yang lebih kecil
- Masukkan : dua buah bilangan real
- Keluaran : bilangan yang lebih kecil
- Langkah-langkah :
- masukkan bilangan real
a
danb
- jika
a>b
, kembalikana
- jika tidak (else), kembalikan
b
- masukkan bilangan real
Fungsi hitung_jarak
: Algoritma hitung jarak antar kata
- Deskripsi : Algoritma hitung jarak antar kata
- Masukkan : dua buah kata,
kata1
dankata2
- Keluaran : jarak
- Langkah-langkah :
- misalkan
a
adalah panjangkata1
danb
adalah panjangkata2
- misalkan
jarak=0
- untuk setiap $i\in\{1,2,...,min(a,b)\}$
- jika
kata1[i]!
(huruf kei
darikata1
) tidak sama dengankata2[i]
(huruf kei
darikata1
)jarak=jarak+1
- jika
- karakter sisa tidak perlu diabndingkan, pasti berbeda, jadi
jarak=jarak+(maks(a,b)-mins(a,b))
- kembalikan
jarak
- misalkan
Fungsi mins_list
: Algoritma mendapatkan elemen terkecil dari list
- Deskripsi : Algoritma mendapatkan elemen terkecil dari list
- Masukkan : list bilangan
- Keluaran : elemen terkecil
- Langkah-langkah :
- misalkan
lista
adalah list bilangan - misalkan
mini
adalah elemen pertamalista
,mini=lista[1]
- misalkan
n=
banyak elemen darilista
- untuk setiap $i\in\{1,2,...,n\}$
- jika
mini>lista[i]
- timpa
mini=lista[i]
- timpa
- jika
- kembalikan
mini
- misalkan
Fungsi index_min
: Algoritma mendapatkan index dari list yang memiliki elemen terkecil
- Deskripsi : Algoritma mendapatkan index dari list yang memiliki elemen terkecil
- Masukkan : list bilangan
- Keluaran : list index elemen terkecil
- Langkah-langkah :
- misalkan
lista
adalah list bilangan - misalkan
mini
adalah elemen terkecil darilista
, dicari dengan fungsimins_list
- misalkan
n=
banyak elemen darilista
- misalkan
idx
adalah list tempat penyimpanan index elemen terkecil - untuk setiap $i\in\{1,2,...,n\}$
- jika
lista[i]!
sama denganmini
- tambahkan
i
kepadaidx
- tambahkan
- jika
- kembalikan
idx
- misalkan
def maks(a,b):
#input a,b bilangan real
#output nilai terbesar
return a if (a>b) else b;
def mins(a,b):
#input a,b bilangan real
#output nilai terkecil
return a if (a<b) else b;
def hitung_jarak(kata1,kata2):
#input string kata1 dan kata2
#output integer, jarak kata1 dan kata2
jarak=0
for i in range(mins(len(kata1),len(kata2))):
if kata1[i]!=kata2[i]:
jarak=jarak+1
return jarak+ (maks(len(kata1),len(kata2))-mins(len(kata1),len(kata2)))
def mins_list(lista):
#input list bilangan bulat
#output elemen terkecil dari list
mini=lista[0]
for i in lista:
if i<mini:
mini=i
return mini
def index_min(lista):
#input list bilangan
#output list index elemen terkecil
idx=[]
mini=mins_list(lista)
for i in range(len(lista)):
if mini == lista[i]:
idx.append(i)
return idx
L=["ku","pejamkan","mata","ini","mencoba","tuk","melupakan",
"segala","kenangan", "indah", "tentang", "dirimu", "tentang", "mimpiku",
"semakin", "aku", "mencoba", "bayangmu", "semakin", "nyata",
"entah", "dimana", "dirimu", "berada",
"hampa", "terasa", "hidupku", "tanpa", "dirimu",
"apakah", "di", "sana", "kau", "rindukan", "aku",
"seperti", "diriku", "yang", "selalu", "merindukan", "kamu"]
simpan_jarak=[]
print("Masukkan kata yang ingin dicek")
cek_kata=input()
for i in range(len(L)):
simpan_jarak.append(hitung_jarak(cek_kata,L[i]))
print("Kata pada List yang terdekat dengan",cek_kata,"dengan jarak terkecil",hitung_jarak(cek_kata,L[0]),"adalah")
for i in index_min(simpan_jarak):
print("-",L[i])
Masukkan kata yang ingin dicek ridwan Kata pada List yang terdekat dengan ridwan dengan jarak terkecil 6 adalah - indah - tentang - dirimu - tentang - nyata - dimana - dirimu - hampa - hidupku - tanpa - dirimu - apakah - di - diriku
Soal nomor 3¶
Misalkan matriks $A$ berukuran $\left(m,n\right)$, $A=\begin{bmatrix}a_{1,1}&a_{1,2}&a_{1,3}&a_{1,4}&\cdots&a_{1,n-1}&a_{1,n} \\a_{2,1}&a_{2,2}&a_{2,3}&a_{2,4}&\cdots&a_{2,n-1}&a_{2,n} \\\vdots&\vdots&\vdots&\vdots&\ddots&\vdots&\vdots \\a_{m-1,1}&a_{m-1,2}&a_{m-1,3}&a_{m-1,4}&\cdots&a_{m-1,n-1}&a_{m-1,n} \\a_{m,1}&a_{m,2}&a_{m,3}&a_{m,4}&\cdots&a_{m,n-1}&a_{m,n}\end{bmatrix}$, dengan $m,n$ adalah bilangan genap
Buatlah matriks $B$ yang berukuran $\left(\frac{m}{2},\frac{n}{2}\right)$, dengan elemen-elemen matriks $B$ adalah determinan dari submatriks berukuran $(2,2)$ dari matriks A.
$B=\begin{bmatrix}det\left(\begin{bmatrix}a_{1,1}&a_{1,2}\\a_{2,1}&a_{2,2}\end{bmatrix}\right)&det\left(\begin{bmatrix}a_{1,3}&a_{1,4}\\a_{2,3}&a_{2,4}\end{bmatrix}\right)&\cdots&det\left(\begin{bmatrix}a_{1,n-1}&a_{1,n}\\a_{2,n-1}&a_{2,n}\end{bmatrix}\right) \\\vdots&\vdots&\ddots&\vdots& \\det\left(\begin{bmatrix}a_{m-1,1}&a_{m-1,2}\\a_{m,1}&a_{m,2}\end{bmatrix}\right)&det\left(\begin{bmatrix}a_{m-1,3}&a_{m-1,4}\\a_{m,3}&a_{m,4}\end{bmatrix}\right)&\cdots&det\left(\begin{bmatrix}a_{m-1,n-1}&a_{m-1,n}\\a_{m,n-1}&a_{m,n}\end{bmatrix}\right) \end{bmatrix}$
Buatlah algoritma untuk membuat matriks B
Jawaban Soal Nomor 3 Algoritma Submatriks
- Deskripsi : Algoritma membuat submatriks
- Masukkan : Matriks berukuran
m,n
denganm,n
genap - Keluaran : submatriks berukuran
m/2,n/2
- Langkah-langkah :
- Masukkan matriks
A
berukruanm,n
. - Buat matriks
B
berukuranm/2,n/2
, sementara isi elemennya dengan 1. - untuk setiap $i\in\{0,1,2,...,(m/2-1)\}$
- untuk setiap $j\in \{0,1,2,...,(n/2-1)\} $
- isi elemen
B[i][j]
=A[2*i][2*j]
`A[2i+1][2j+1]-
A[2i+1][2j]`A[2*i][2*j+1]
- isi elemen
- untuk setiap $j\in \{0,1,2,...,(n/2-1)\} $
- Keluarkan matriks
B
- Masukkan matriks
import numpy as np
import random
random.seed(10)
print("Program Submatriks 1/4")
print("Masukkan ukuran baris matriks A (bilangan genap), m=") ; m=int(input())
print("Masukkan ukuran kolom matriks A (bilangan genap), n=") ; n=int(input())
A = np.array([[random.randrange(0, 100, 1) for j in range(n)] for i in range(m)])
print("Matriks A=") ; print(A)
B = np.array([[0 for j in range(int(n/2))] for i in range(int(m/2))])
for i in range(int(m/2)):
for j in range(int(n/2)):
B[i][j]=(A[2*i][2*j]*A[2*i+1][2*j+1]-A[2*i+1][2*j]*A[2*i][2*j+1])/4
print("Matriks B=") ; print(B)
Program Submatriks 1/4 Masukkan ukuran baris matriks A (bilangan genap), m= 4 Masukkan ukuran kolom matriks A (bilangan genap), n= 6 Matriks A= [[73 4 54 61 73 1] [26 59 62 35 83 20] [ 4 66 62 41 9 31] [95 46 5 53 17 77]] Matriks B= [[ 1050 -473 344] [-1521 770 41]]
Soal Nomor 4¶
Misalkan terdapat sebuah deret $a_1+a_2+a_3+...$ dengan
- $a_1=1$,
- $a_2=1+r$,
- $a_3=1+r+r^2$, ...,
- $a_n=1+r+r^2+...+r^n$ dengan $|r|<1$
- Bentuk rekursif dari $a_n=a_{n-1}+r^n$
Buatlah program menentukan $a_n$ dalam bentuk fungsi rekursif.
Input dari program adalah rasio $r$ dan suku $n$.
#Menghitung geometri dengan fungsi rekursif
def aa(r,n):
if(n==1):
return 1
else:
return aa(r,n-1)+r**(n-1)
print("Masukkan rasio r")
r=float(input())
print("Masukkan suku ke-n")
n=int(input())
print("Hasil =",aa(r,n))
Masukkan rasio r 0.5 Masukkan suku ke-n 8 Hasil = 1.9921875
Soal Nomor 4 (b)¶
Misalkan terdapat sebuah deret $a_1+a_2+a_3+...$ dengan
- $a_1=1$,
- $a_2=1+r$,
- $a_3=1+r+r^2$, ...,
- $a_n=1+r+r^2+...+r^n$ dengan $|r|<1$
- Bentuk rekursif dari $a_n=a_{n-1}+r^n$
Misalkan $S_n=a_1+a_2+...+a_n$ adalah jumlahan deret tersebut sampai suku ke-$n$. Bentuk Rekursifnya adalah $S_n=S_{n-1}+a_n$
(a). Buatlah program menentukan $a_n$ dalam bentuk fungsi rekursif.
(b). Buatlah program menentukan $S_n$ dalam bentuk fungsi rekursif, dengan memanfaatkan fungsi rekursif apda nomor (a).
Input dari program adalah rasio $r$ dan suku $n$.
#Menghitung geometri dengan fungsi rekursif
def aa(r,n):
if(n==1):
return 1
else:
return aa(r,n-1)+r**(n-1)
def ss(r,n):
if(n==1):
return 1
else:
return ss(r,n-1)+aa(r,n)
print("Masukkan rasio r")
r=float(input())
print("Masukkan suku ke-n")
n=int(input())
print("Hasil =",aa(r,n))
print("Hasil S =",ss(r,n))
Masukkan rasio r 0.5 Masukkan suku ke-n 8 Hasil = 1.9921875 Hasil S = 14.0078125
Comments
Post a Comment