CTD2SAL, How to Apply

3 10 2006

Pada postingan sebelumnya, saya mencoba membuat fungsi dalam Matlab untuk menghitung salinitas dari data CTD. Pagi ini saya mendapat e-mail dari rekan kerja di Jakarta yang meminta tolong menerapkan fungsi tersebut untuk menghitung data hasil pengukuran CTD yang dia punya. Sebelumnya dia sudah mencoba menggunakan fungsi yang ada di postingan saya itu, tetapi ternyata tidak berhasil.

Apa gerangan yang terjadi sehingga terjadi kegagalan dalam menggunakan fungsi tersebut? Masalahnya sederhana sekali, fungsi yang saya contohkan hanya berlaku untuk perkalian matriks (notasi “*” dalam Matlab menandakan perkalian matriks), sementara data yang dicoba diolah olehnya dalam bentuk array. Maksud saya begini: fungsi yang saya buat tidak mendukung perkalian array (dengan notasi “.*”), dan hanya mendukung perkalian matriks saja (dengan notasi “*”).

Jika anda punya data dalam bentuk seperti ini:

% kond temp tek
53.17 27.63 10.43
53.24 27.69 11.25
53.23 27.68 12.72
53.23 27.67 13.85
53.26 27.67 14.63
53.26 27.68 15.6
53.28 27.69 16.42
53.38 27.72 17.74
53.41 27.74 18.68
53.43 27.75 19.62
53.54 27.81 20.5

maka ketika data itu dipanggil misalnya dengan perintah “load” pada Matlab dan anda definisikan sebagai variabel “ctd”, ia akan didefinisikan sebaga array 11 x 3 (11 baris dan 3 kolom). Jika anda tidak memodifikasi terlebih dahulu fungsi yang ada dalam postingan saya itu, maka anda akan mendapatkan pesan kesalahan sebagai berikut:

>> salin=sal(ctd(:,1),ctd(:,2),ctd(:,3))
??? Error using ==> *
Inner matrix dimensions must agree.

Error in ==> D:\works\sal.m
On line 19 ==> g=(c*(1.-6.5E-06*(t-2.8)+1.5E-8*(p-3000.)))/c35150;

Hal ini terjadi karena pada baris 19 fungsi sal perkalian yang terjadi adalah perkalian matriks antara c dengan (t + p), padahal c sendiri mewakili ctd(:,1), sementara t mewakili ctd(:,2), dan p mewakili ctd(:,3). Agar pesan kesalahan itu tidak terjadi, ubahlah menjadi:

g=(c.*(1.-6.5E-06*(t-2.8)+1.5E-8*(p-3000.)))/c35150;

yaitu dengan memberikan tanda titik setelah variabel c, yang memberi tahu Matlab bahwa yang hendak dilakukan adalah perkalian array. Artinya, c baris ke-1 akan dikalikan dengan t baris ke-1 ditambah p baris ke-1, dan seterusnya.

Misalkan kita punya dua matriks A dan B, maka dalam perkalian matriks: “A *B” berlaku syarat bahwa jumlah kolom matriks A harus sama dengan jumlah baris matriks B, dalam bahasa Inggris biasa dipakai istilah “the inner dimensions of the two operands must be the same“. Nah pada kode yang belum diubah di atas, perkalian antara c dengan (t + p) akan menghasilkan pesan kesalahan karena syarat perkalian matriks tersebut tidak terpenuhi.

Kembali ke fungsi untuk menghitung salinitas dari data CTD di atas, setelah kita mengubah bagian yang ditulis di atas pada fungsi “sal.m”, kita juga harus mengubah notasi perkalian dan pembagian matriks yang terdapat dalam fungsi “sal78.m” karena fungsi sal memanggil fungsi sal78 dan di sal78 ada banyak notasi perkalian dan pembagian matriks yang harus diubah terlebih dahulu ke perkalian dan pembagian array. Berikut adalah bagian-bagian itu setelah diubah:

rt35=(((1.0031E-9*t-6.9698e-7).*t+1.104259e-4).*t +2.00564e-2).*t+0.6766097;
c=((3.989e-15*p-6.370e-10).*p+2.070e-5).*p;
b=(4.464e-4*t+3.426e-2).*t+1.0;

rt=r./(rt35.*(1.0+c./(b+a.*r)));
rt=sqrt(abs(rt));
sal=((((2.7081*rt-7.0261).*rt+14.0941).*rt+25.3851).*rt -0.1692).*rt+0.0080…
+(dt./(1.0+0.0162*dt)).*(((((-0.0144*rt+ 0.0636).*rt-0.0375).*rt-0.0066).*rt-0.0056).*rt+0.0005);

si=((((2.7081*rt-7.0261).*rt+14.0941).*rt+25.3851).*rt…
-0.1692).*rt+0.0080…
+(dt./(1.0+0.0162*dt)).*(((((-0.0144*rt…
+0.0636).*rt-0.0375).*rt-0.0066).*rt-0.0056).*rt+0.0005);
dsal=((((13.5405*rt-28.1044).*rt+42.2823).*rt+50.7702).*rt…
-0.1692)+(dt./(1.0+0.0162*rt)).*((((-0.0720*rt+0.2544).*rt…
-0.1125).*rt-0.0132).*rt-0.0056);
rt=rt+(r-si)./dsal;

rtt=rt35.*rt.*rt;
c=rtt.*(c+b);
b=b-rtt.*a;
rr=sqrt(abs(b.*b+4.0*a.*c))-b;
sal=0.5*rr./a;

Selamat mencoba…


Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s




%d bloggers like this: