Title: DASAR KOMPUTER
1MK Dasar Komputer (ENG12615 - 2 SKS)
MATLAB M-File dan Operasi Larik
Ir. Abdul Wahid, MT.
Dept. of Chemical Engineering Faculty of Eng.,
University of Indonesia 2007
Home
24 SCRIPT M-FILE
MATLAB Programming
Ir. Abdul Wahid, MT.
Dept. of Chemical Engineering Faculty of Eng.,
University of Indonesia
3Daftar Isi
- Strategi Penulisan Program
- Script dan M-File
- Membuat M-File
- Memanggil M-File
- Simulasi dengan M-File
- Prioritas Pengerjaan di MATLAB
- Echo On dan Echo Off
- Kegunaan Komentar dalam M-File
- Fungsi-fungsi yang Berguna pada M-File
- Contoh Penggunaan Fungsi
- Perintah Input
- Fungsi Input dan Fungsi Lain
- Efek Perintah Echo pada M-File
4Strategi Penulisan Program
- Jika masalah yang dihadapi sederhana, mengetikkan
beberapa perintah langsung di jendela Command
memang cukup cepat dan efektif - Jika
- jumlah perintahnya sangat banyak, atau
- ingin mengubah nilai beberapa variabel dan
kemudian mengulang kembali perhitungannya, cara
di atas membosankan - Ada sarana untuk
- mengetikkan deretan perintah dalam suatu teks
file - kemudian memerintahkan MATLAB untuk membuka file
tersebut - menjalankannya seolah-olah diketikkan langsung di
jendela Command - File seperti itu dinamakan file script atau
M-file
5Script dan M-File
- Kata script berarti bahwa MATLAB hanya membaca
dari script yang ditemukan dalam file - Kata M-file berasal dari aturan bahwa nama file
script harus diakhiri dengan ekstensi .m,
misalnya contoh1.m
6Membuat M-File
- Pilih New dari menu File dan pilih M-file
- Cara lain klik ikon New M-file pada toolbar
- Suatu jendela editor teks ditampilkan
7Memanggil M-File
- Untuk memanggil M-file yang sudah dibuat, tinggal
ketikkan nama M-file itu di jendela Commad, maka
MATLAB akan mengeksekusi semua perhitungan yang
sudah ditulis di M-file - Eksekusi (running) juga bisa dilakukan dengan
mengklik ikon (Run) pada toolbar
gtgt asam n 59
8Simulasi dengan M-File
- Dengan M-file kita bisa melakukan simulasi suatu
perhitungan - Jika suatu variabel diubah harganya, apa yang
terjadi? - Dengan melakukan eksekusi, jawaban atas
pertanyaan tersebut akan terjawab langsung - Dengan M-file, perintah-perintah akan disimpan
dalam disk untuk sesi MATLAB berikutnya
9Prioritas Pengerjaan di MATLAB
- MATLAB memprioritaskan variabel-variabel aktif
dan perintah-perintah MATLAB standar sebelum nama
M-file - Jika asam bukan nama suatu variabel aktif atau
suatu perintah standar MATLAB, MATLAB membuka
file asam.m (jika ada) dan mengerjakan
perintah-perintah yang ditemukan dalam file
tersebut - Perintah-perintah yang ada di M-file dapat
mengakses semua variabel yang ada di ruang kerja
MATLAB dan semua variabel yang dibuat oleh
perintah dalam M-file menjadi bagian dari ruang
kerja MATLAB - Biasanya perintah yang dibaca dari M-file tidak
ditampilkan jika sedang dievaluasi
10Echo On dan Echo Off
- Perintah echo on membuat perintah-perintah yang
ditemui dalam M-file ditampilkan lagi saat
dikerjakan - Sebaliknya jika ada perintah echo off
11Kegunaan Komentar dalam M-File
- Kegunaan komentar menjadi jelas dalam penggunaan
M-file - Komentar memungkinkan kita untuk
mendokumentasikan perintah-perintah yang terdapat
dalam script sehingga dapat mengingat yang
dikerjakan perintah-perintah tersebut jika pada
suatu saat membuka kembali script tersebut - Penggunaan titik koma pada akhir perintah
mengatur penampilan dari hasil suatu perintah
sehingga hasil-hasil yang penting yang ditampilkan
12Fungsi-fungsi yang Berguna pada M-File
disp(ans) Menampilkan hasil tanpa menampilkan nama variabel
echo Mengatur jendela command dalam penampilan kembali perintah yang sedang dikerjakan
input Meminta pemakai untuk memberikan input
keyboard Memberikan kontrol pada keyboard sementara waktu. Ketikkan Enter untuk kembali
pause Berhenti sampai pemakai menekan kembali sembarang tombol
pause(n) Berhenti selama n detik
waitforbuttonpress Berhenti sampai ada penekanan tombol mouse atau tombol keyboard
13Contoh Penggunaan Fungsi
gtgt kons_awal cara biasa untuk menampilkan
hasil kons_awal 90 gtgt disp(kons_awal)
menampilkan hasil tanpa menampilkan nama
variabel 90
14Perintah Input
contoh1.m script file untuk masalah konsentrasi
asam Kons_awal90 Kons_min50
lostinput('Masukkan konsentrasi asam yang
hilang setiap pencelupan ')/100 nfloor(log(Kons
_awal/Kons_min)/log(1lost))
Kalau M-file ini dijalankan, maka hasilnya
Masukkan konsentrasi asam yang hilang setiap
pencelupan 1 lost 0.0100 n 59
15Fungsi Input dan Fungsi Lain
gtgt contoh1 Masukkan konsentrasi asam yang hilang
setiap pencelupan round(sqrt(13))3 lost
0.0700 n 8
16Efek Perintah Echo pada M-File
echo on contoh1.m script file untuk masalah
konsentrasi asam Kons_awal90 Kons_min50
lostinput('Masukkan konsentrasi asam yang
hilang setiap pencelupan ')/100 nfloor(log(Kons
_awal/Kons_min)/log(1lost)) echo off
17- gtgt contoh1b
- contoh1.m script file untuk masalah konsentrasi
asam - Kons_awal90
- Kons_min50
- lostinput('Masukkan konsentrasi asam yang hilang
setiap pencelupan ')/100 - Masukkan konsentrasi asam yang hilang setiap
pencelupan 25 - lost
- 0.2500
- nfloor(log(Kons_awal/Kons_min)/log(1lost))
- n
- 2
- echo off
185 FILE CONTROL
MATLAB Programming
Ir. Abdul Wahid, MT.
Dept. of Chemical Engineering Faculty of Eng.,
University of Indonesia
19Daftar Isi
- Fungsi Sistem File
- Contoh Fungsi Sistem File
- Alamat Pencarian MATLAB
- MATLAB dalam Kondisi Awal
20Fungsi Sistem File
- MATLAB menyediakan sejumlah fungsi sistem file
dan perintah-perintah yang memungkinkan - Menampilkan daftar nama file
- Menghapus dan melihat isi M-file
- Melihat atau mengubah direktori atau folder aktif
- Dapat juga melihat dan memodifikasi Alamat
Pencarian MATLAB yang dinamakan matlabpath - Fungsi-fungsi MATLAB sesungguhnya adalah M-file
yang tersimpan dalam disk - Jika yakin keberadaan suatu fungsi namun MATLAB
tidak menemukannya, kemungkinan besar fungsi
tersebut tidak berada di matlabpath
21Contoh Fungsi Sistem File
Addpath dir1 Menambahkan direktori dir1 pada awal matlabpath
cd Menampilkan direktori atau folder aktif saat ini
Pcd Menyimpan data direktori atau folder aktif dalam variabel P
cd path Mengubah direktori atau folder ke direktori atau folder yang diberikan oleh path
delete test.m Menghapus M-file bernama test.m
exist(cow, file) Mengecek ada atau tidaknya file cow.m pada matlabpath
ls Sama dengan dir
tempdir Nama direktori sementara
22Alamat Pencarian MATLAB
- Umumnya jika mengetikkan gtgtcow, inilah yang
dikerjakan oleh MATLAB - Mengecek apakah cow suatu variabel dalam ruang
kerja MATLAB jika tidak - Mengecek apakah cow suatu fungsi standar MATLAB
jika tidak... - Mengecek apakah suatu M-file yang bernama cow.m
ada dalam direktori yang sedang aktif jika
tidak - Mengecek apakah cow,m ada di suatu tempat dalam
alamat pencarian MATLAB, dengan mencari pada path
sesuai urutan yang ada
23MATLAB Dalam Kondisi Awal
- Saat MATLAB mulai dijalankan, MATLAB mengeksekusi
dua file script, matlabrc.m dan startup.m - File matlabrc.m dibuat sendiri oleh MATLAB dan
sebaiknya jangan dimodifikasi - Perintah-perintah dalam M-file ini mengatur
ukuran window, penempatannya, dan sejumlah
fasilitas lainnya - File startup.m biasanya berisi perintah-perintah
untuk menambahkan berbagai fasilitas yang
dirancang sendiri oleh pemakai
246 ARRAY OPERATION
MATLAB Programming
Ir. Abdul Wahid, MT.
Dept. of Chemical Engineering Faculty of Eng.,
University of Indonesia
25Daftar Isi
- Pendahuluan
- Array Sederhana
- Berbagai Cara Penulisan
- Pengalamatan Array
- Orientasi Array
- Matematika Array-Skalar
- Matematika Array-Array
- Array dengan Elemen Bilangan Satu atau Bilangan
Nol - Memanipulasi Array
- Pencarian Sub-Array
- Pembandingan Array
- Ukuran Array
- Array Multidimensi
- Contoh 1 Peluruhan Radioaktif Menggunakan Array
- Contoh 2 Perhitungan Konsentrasi dengan
Matematika Array - Contoh 3 Mencari Suatu Penyelesaian Menggunakan
Vektor
26Pendahuluan
- Semua komputasi yang dikerjakan sejauh ini hanya
melibatkan bilangan tunggal yang disebut skalar - Operasi skalar merupakan dasar matematika
- Jika ingin melakukan operasi yang sama pada
beberapa bilangan, perulangan operasi skalar akan
menghabiskan waktu dan tidak praktis - Untuk mengatasi masalah ini MATLAB menyediakan
operasi array (larik) data
27Array Sederhana
- Y sin(x) 0 x ?
- Harus dibuat x secara inkremental, misal dengan
kenaikan 0.1? - x 0, 0.1?, 0.2?, , ?
- Dengan MATLAB
- x0 0.1pi .2pi .3pi .4pi .5pi .6pi .7pi
.8pi .9pi pi - y sin(x)
28Pembentukan Array
x2 2pi sqrt(2) 2-3 menciptakan vektor baris x yang memuat elemen elemen yang diberikan
xawal akhir membuat vektor baris x dimulai dari awal, kenaikan satu diakhiri pada atau sebelum akhir
xawalkenaikanakhir membuat vektor baris x diawali dengan awal kenaikan sebesar kenaikan diakhiri pada atau sebelum akhir
xlinspace(awal,akhir,n) menciptakan vektor baris x diawali dengan awal, berakhir dengan akhir mempunyai n elemen
xlogspace(awal,akhir,n) menciptakan vektor kolom dengan elemen elemen berjarak logaritmis dimulai dengan 10 diakhiri dengan 10 mempunyai n elemen
29Berbagai Cara Penulisan
- x0 0.1pi .2pi .3pi .4pi .5pi .6pi .7pi
.8pi .9pi pi - x0 0.1 .2 .3 .4 .5 .6 .7 .8 .9 1pi
- x00.11pi
- xlinspace(0,1,11)pi
30Pengalamatan Array
- x(1,6) ? ? 1.5708
- gtgt sin(x(1,6))
- ans
- 1
- gtgt sin(x(1,9))
- ans
- 0.5878
31Orientasi Array
- gtgt x2x' transpose dari x
- x2
- 0
- 0.3142
- 0.6283
- 0.9425
- 1.2566
- 1.5708
- 1.8850
- 2.1991
- 2.5133
- 2.8274
- 3.1416
gtgt ysin(x2) y 0 0.3090
0.5878 0.8090 0.9511 1.0000
0.9511 0.8090 0.5878 0.3090 0.0000
32Operator Titik Transpose
- Sebagai tambahan, pada MATLAB disediakan operator
titik transpose dengan diawali titik. - Operator titik transpse ini diinterprestasikan
sebagai transpose konjugasi non-kompleks. - Jika suatu array merupakan array kompleks,
transpose () memberikan transpose konjugasi
kompleks, yaitu tanda dari bagian imajiner yang
berubah sebagai akibat operasi transpose. - Tetapi titik transpose melakukan transpose pada
array namun tidak melakukan konjugat pada dirinya.
33Contoh Operasi Titik Transpose
- gtgt A3 2i 31 2 i4i 1 1
- A
- 3.0000 0 2.0000i 3.0000
- 1.0000 2.0000 0
1.0000i - 0 4.0000i 1.0000 1.0000
- gtgt BA'
- B
- 3.0000 1.0000 0 -
4.0000i - 0 - 2.0000i 2.0000 1.0000
- 3.0000 0 - 1.0000i 1.0000
gtgt CA.' C 3.0000 1.0000
0 4.0000i 0 2.0000i
2.0000 1.0000 3.0000
0 1.0000i 1.0000
34Matematika Array-Skalar
- gtgt m11 2 3 4 56 7 8 9 10
- m1
- 1 2 3 4 5
- 6 7 8 9 10
- gtgt m211 12 13 14 1516 17 18 19 20
- m2
- 11 12 13 14 15
- 16 17 18 19 20
gtgt m3m13-4 m3 -1 2 5 8
11 14 17 20 23 26
35Matematika Array-Array (1)
- Jika operasi array dilakukan pada dimensi yang
tidak sama susah untuk didefenisikan. - Jika dua vektor mempunyai dimensi yang sama,
penambahan, pengurangan, perkalian, dan pembagian
berlaku pada elemen ke elemen. - Perkalian bisa menggunakan , pembagian
menggunakan garis miring kiri atau kanan,
pemangkatan array dengan simbol
36Matematika Array-Array (2)
Data ilustrasi aa1 a2 an, bb1 b2 ..bn, clta skalargt Data ilustrasi aa1 a2 an, bb1 b2 ..bn, clta skalargt
Penambahan skalar aca1c a2c anc
Perkalian skalar aca1c a2c anc
Penambahan array aba1b1 a2b2 anbn
Perkalian array a.ba1b1 a2b2 anbn
Pembagian kanan array a./ba1/b1 a2/b2 an/bn
Pembagian kiri array a.\ba1\b1 a2\b2 an\bn
Pemangkatan array c.aca1 ca2 can a.ca1c a2c anc a.ba1b1 a2b2 anbn
37Matematika Array-Array (3)
- gtgt m5m1m2
- ??? Error using gt
- Inner matrix dimensions must agree.
- gtgt m5m1.m2
- m5
- 11 24 39 56 75
- 96 119 144 171 200
- gtgt m5m1./m2
- m5
- 0.0909 0.1667 0.2308 0.2857
0.3333 - 0.3750 0.4118 0.4444 0.4737 0.5000
38Array dengan Elemen Bilangan Satu atau Bilangan
Nol
- gtgt ones(5)
- ans
- 1 1 1 1 1
- 1 1 1 1 1
- 1 1 1 1 1
- 1 1 1 1 1
- 1 1 1 1 1
- gtgt ones(2,5)
- ans
- 1 1 1 1 1
- 1 1 1 1 1
gtgt zeros(3,4) ans 0 0 0 0
0 0 0 0 0 0 0 0
39Memanipulasi Array (1)
- MATLAB menyediakan cara mudah untuk menyisipkan,
mengambil dan mengatur kembali sebagian dari
matriks dengan mendefenisikan subscript yang
berkaitan. - Saat mengakses sesuatu menjadi matriks kosong ,
sesuatu itu akan terhapus, mengakibatkan matriks
berkurang menjadi apa yang tertinggal. - Penggunaan indeks tungggal pada matriks lebih
mudah. - Jika indeks tunggal digunakan, indeks dihitung
setiap kolom ke bawah dimulai dengan kolom
pertama. - Selain menggunakan subcript untuk mengamati
matriks, dapat juga digunakan array logika, jika
ukuran array logika sama dengan yang di amati. - Array logika adalah suatu array khusus dengan
presisi ganda dalam MATLAB
40Memanipulasi Array (2)
A(r,c) mengamatai subarray dalam A dengan indeks baris yang diingini dalam r dan kolom yang diingini dalam c
A(r,) mengamati subarray dalam A dengan indeks baris yang diamati dalam r dan semua kolom diambil
A(,r) mengamati subarray dalam A dengan semua baris diambil dan indeks kolom yang diingini dalam r
A( ) mengamati semua elemen dalam A sebagai vektor kolom diambil kolom perkolom
A( i ) mengamati subarray dalam A dengan indeks tunggal i dianggap A merupakan vektor kolom a( )
A(x) mengamati subarray dalam A dengan array logika x x harus mempunyai ukuran sama dengan A
41Memanipulasi Array (3)
- gtgt m6ones(3)
- m6
- 1 1 1
- 1 1 1
- 1 1 1
- gtgt m6(2,3)0
- m6
- 1 1 1
- 1 1 0
- 1 1 1
gtgt m6(2,3)7 m6 1 1 1 1
1 7 1 1 1
42Pencarian Sub-Array (1)
- Seringkali perlu mengetahui indeks elemen sustu
array yang memenuhi suatu ekspresi relasi. - Dalam MATLAB masalah ini diselesaikan dengan
fungsi find yang menghasilkan indeks
elemen-elemen yang padanya nilai ekspresirelasi
benar - Jika suatu fungsi MATLAB menghasilkan dua atau
lebih variabel, variabel-variabel itu akandisusun
dalam tanda kurung kotak disisi kiri tanda sama
dengan.
43Pencarian Sub-Array (2)
- gtgt kfind(abs(m3)gt5)
- k
- 2
- 4
- 6
- 7
- 8
- 9
- 10
44Pembandingan Array (1)
- Suatu saat didalam matrriks diperlukan
perbandingan dua array. - Fungsi isequal menghasilkan nilai logika Benar(1)
jika dua array mempunyai dimensi sama dengan
elemen- elemennya identik, jika tidak isequal
akan menghasilkan nilai logika Salah(0). - Fungsi ismember mengenali elemen-elemen identik
dari dua array. - Ismember menghasilkan nilai logoka benar untuk
indeks-indeks yang ada dalam argumen kedua.Kedua
argumen tidak harus mempunyai nilai yang sama.
45Pembandingan Array (2)
isequal(A,B) benar (Benar) jika A dan B identik
ismember (A,B) benar (Benar ) jika suatu elemen A adalah juga elemen B
intersect (A,B) nilai-nilai interaksi A dengan B
setdiff(A,B) nilai-nilai A yang tidak terdapat dalam B
setxor (A,B) nilai-nilai ekslusif OR A dengan B
union (A,B) nilai-nilai hasil penggabungan A dengan B
46Pembandingan Array (3)
gtgt A 1 2 3 4 5 6
7 8 9 B -1 -2 -3 -4
-5 -6 -7 -8 -9 C Columns 1
through 6 1 2 3 4 5 6
Columns 7 through 9 7 8 9 ans
0 ans 0 ans 1 ans 0 ans
0 0 0 0 0 0 0 0
0 ans 1 1 1 1 1 1
1 1 1
- A1 2 34 5 67 8 9
- BA.(-1)
- C19
- isequal(A,C)
- isequal(A,B)
- isequal(A,A)
- isequal(C,C')
- ismember(A,B)
- ismember(A,C)
47Ukuran Array (1)
whos Menampilkan variabel yang ada dala ruang kerja MATLAB beserta ukurannya
ssize(A) Menghasilkan vekror baris s, dengan elemen pertama adalah jumlah baris, dan elemen kedua adalah jumlah kolom A
r,csize(A) menghasilkan dua skalar r dan c yang memuat jumlah baris dan kolom A
rsize (A,1) menghasilkan jumlah baris A dalam variabel r
csize (A,2) menghasilkan jumlah kolom A dalam variabel c
nlength(A) menghasilkan max(sixe(A)) dalam variabel n jika A bukan matriks kosong
48Ukuran Array (2)
49Array Multidimensi (1)
ssize(A) untuk A n dimensi, menghasilkan vektor baris n elemen dengan elemen ke I adalah ukuran dimensi ke I dari A
ndims jumlah dimensi A yaitu length(size(A))
permute(A,order) ekuivalen dari dot transpose untuk n dimensi
ipermute(A,order) balikan dari permute(A,order)
shiftdim(A,n) menaikkan imensi A sejumlah bilangan bulat n
squeeze (A) menghapus dimensi singleton, menghapus dimensi-dimensi yang lebih dari tiga
50Array Multidimensi (2)
- gtgt dcat(3,a1,b1,c)
- d(,,1)
- 1 0
- 0 1
- d(,,2)
- 2 2
- 2 2
- d(,,3)
- 16 1
- 1 16
- gtgt a11 00 1
- a1
- 1 0
- 0 1
- gtgt b12 22 2
- b1
- 2 2
- 2 2
- gtgt c16 11 16
- c
- 16 1
51Contoh 1 Peluruhan Radioaktif Menggunakan Array
- Elemen radioaktif polonium mempunyai waktu paruh
140 hari, yang berarti bahwa, karena radioaktif
meluruh, jumlah polonium yang tertinggal setelah
140 hari adalah setengah dari jumlah semula. Jika
dimiliki 10 gram polonium hari ini, berapa banyak
yang tersisa pada akhir setiap minggu selama 10
minggu? - Menggunakan solusi pada Bab 2
- Jumlah_tertinggalsemula0.5(waktu/waktu_paruh)
52MATLAB Contoh 1 radioaktif.m
Peluruhan Radioaktif semula10
waktu_paruh140 waktu7770 akhir dari
sepuluh minggu pertama Jumlah_tertinggalsemula0.
5.(waktu/waktu_paruh) titik tidak boleh
lupa plot(waktu/7,Jumlah_tertinggal) xlabel('Jumla
h Minggu'), ylabel('Jumlah Polonium Tersisa')
53Contoh 2 Perhitungan Konsentrasi dengan
Matematika Array
- Sebagai bagian dari suatu proses pembuatan suku
cadang di suatu pabrik otomatis, suku cadang
tersebut dicelupkan kedalam air agar dingin,
kemudian dicelup di bak air asam untuk
membersihkannya. Setelah beberapa lama maka
konsentrasi larutan asam akan menurun karena
penambahan air saat pencelupan dan larutan yang
terbuang saat suku cadang tadi diambil dari bak.
Untuk memelihara kualitas, keasaman larutan asam
tidak boleh kurang dari suatu batas minimum.
Dimulai dengan konsentrasi asam 90 maka jika
konsentrasi minimum 50, air yang ditambahkan ke
dalam bak asam adalah 1 dari volume bak dan 1
dari larutan terbuang saat suku cadang
dikeluarkan. Berapa banyak suku cadang dapat
dicelupkan ke bak air asam sebelum keasaman
larutan dalam bak ada di bawah batas minimum? - Solusi sama dengan Bab 2
54MATLAB Contoh 2 asam.m
Penentuan Konsentrasi Asam Kons_awal90
Kons_min50 lost110 1 sampai 10 dengan
kenaikan 1 nfloor(log(Kons_awal/Kons_min)./log(1
lost/100)) ingat titiknya stem(lost,n) xlabel('
persentase yang hilang setiap kali
pencelupan') ylabel('jumlah pencelupan') title('Co
ntoh Pencelupan Bak Air-Asam')
55Contoh 3 Mencari Suatu Penyelesaian Menggunakan
Vektor
- Soal minggu ini di suatu sekolah adalah
menemukan semua bilangan lebih kecil dari 1000
yang habis dibagi 7, tetapi punya sisa pembagian
1 jika dibagi dengan 2, 3, 4, 5 dan 6 - Tidak terdapat penyelesaian analitis untuk
masalah ini. Jadi semua bilangan tersebut harus
ditemukan lewat pencarian. Jika Anda memulainya
dengan semua kelipatan 7 yang kurang dari 1000,
semua bilangan yang tidak memenuhi syarat
berikutnya dapat dibuang, sehingga menghasilkan
solusi yang diinginkan
56MATLAB Contoh 3 lipat7.m
Kelipatan 7 kurang dari 1000 habis dibagi 7,
sisa 1 jika dibagi 2, 3, 4, 5 dan 6 n771000
semua kelipatan 7 yang kurang dari
1000 numberlength(n) jumlah penyelesaian yang
mungkin n(rem(n,2)1) membuang yang bukan
solusi numberlength(n) n(rem(n,3)1)
mengesetnya sama dengan matriks
kosong numberlength(n) n(rem(n,4)1)
fungsi rem menghitung sisa hasil
bagi numberlength(n) n(rem(n,5)1) numberle
ngth(n) n(rem(n,6)1) numberlength(n) n
gtgt number 142 number 71 number
24 number 12 number 2 number
2 n 301 721