1 KALİTE İYİLEŞTİRMEDE VERİ KÜMELEME: DÖKÜM ENDÜSTRİSİNDE BİR UYGULAMA Araş. Gör. Başak AKTEKEÖZTÜRK Bilimsel Hesaplama Anabilim Dalı, Uygulamalı Matematik Entitüsü, ODTÜ, [email protected] Prof. Dr. Gerhard-Wilhelm WEBER Uygulamalı Matematik Entitüsü, ODTÜ, [email protected] Prof. Dr. Sinan KAYALIGİL Endüstri Mühendisliği, ODTÜ, [email protected] Anahtar Sözcükler: Kalite İyileştirme, Veri Madenciliği, Kümeleme, k-Ortalamalar, Medoidler Etrafında Bölümleme (MEB), Pürüzlü (nonsmooth) Optimizasyon 1. GİRİŞ Geleneksel olarak üretim sürecinde ürünlerde oluşan hataların ve sürecin kararlılığını bozan nedenlerin bulunması ve giderilmesi için istatistiksel proses kontrolü (İPK) yöntemleri kullanılmaktadır. Ancak günümüz üretim sistemleri klasik kontrol şemalarıyla açıklanamayacak kadar karmaşıklaşmıştır. Üretim sürecinde hatalı ürünlerin oluşma nedenleri, bir üründe hatanın oluşup oluşmayacağının tahmin edilebilmesi ve hata oluşumunu en çok etkileyen üretim süreci parametrelerinin belirlenmesi veri analiziyle kolaylaşır. Bu nedenle özellikle birçok değişken tipinin büyük hacimli olarak saklandığı karmaşık verilerin analizinde başarılı bir şekilde uygulanan veri madenciliği (VM) teknikleri kullanılarak kalite verisi etkin bir şekilde izlenebilir, hatta toplanan veride gizli olan bilgi ortaya çıkartılabilir ve süreçte meydana gelecek hatalar hızlı bir şekilde saptanabilir. VM öğrenmeye dayalı bir yöntemle mevcut veride gizli olan örüntülerin keşfedilerek bilgi elde edilmesini amaçlamaktadır. Endüstriyel süreçler genellikle büyük hacimli, sürekli veya kesikli veriyi saklayan veri toplama sistemleri ile desteklenmektedirler. Karar (sınıflandırma ve regresyon) ağaçları (KA), yapay sinir ağları (YSA), destek vektör makinaları (DVM), k-ortalamalar gibi VM araçları veriden bilgi çıkarımı sağlamakta etkin ve hızlı çözümler sunabilmektedir. Temel VM fonksiyonları aşağıdaki gibi özetlenebilir [3,4]: Sınıflandırma (classification): verinin önceden tanımlanmış gruplara atanma sürecidir. (Örneğin, KA, DVM) Kümeleme (clustering): bölümlere ayırma işidir. Kümelemenin amacı, birbirlerinden farklı gruplaşmaları ve bir topluluk içinde öznitelikleriyle birbirlerine benzer üyeleri bulmaktır. Sınıflandırmanın tersine kümelemede gruplar veri incelenerek tanımlanır. (Örneğin, k-ortalamalar, MEB, Kendi Düzenleyen Haritalar (KDH)) Regresyon: bir veri elemanının gerçel değerli bir tahmin değişkeni ile eşleştirilmesidir. Doğrusal, doğrusal-olmayan ve logistik regresyon modelleri vardır. Tahmin (prediction): var olmayan veya kayıp veri değerlerinin tahmini için kullanılır. Bir sınıflandırma türü olarak da düşünülebilir. (Örneğin, KA, YSA, DVM) Genelleştirme veya tanımlama (generalization veya characterization) olarak da isimlendirilen özetleme (summarization): veriye ilişkin bilgiyi gösterir. Örneğin, ortalama, standart sapma, ortanca gibi. Zaman serisi analizi: veride gizli bir özelliğin zaman içindeki değerini inceler. Birliktelik keşfetme (association): veri içindeki ilişkileri ortaya koymak için kullanılır. Sıra keşfetme (sequence discovery): veride var olan ardışık örüntüleri belirlemeyi amaçlar. Bu örüntüler etkinliklerin zaman sırasına dayandırılır. KA, DVM gibi sınıflandırma ve tahmin amaçlı kullanılan VM yöntemleri, ürettikleri sonuçların kolay anlaşılması ve hata tahmininde kullanılabilecek güçlü modeller oluşturabilmeleri nedeniyle kalite iyileştirmede daha fazla tercih edilmektedirler. Çalışmalar ve deneyimlerimiz bu yöntemlerin özellikle gerçek veriler için kesin sonuçlar vermediği ya da tahmin gücü yüksek modeller üretemediği durumlarda, veride kümeleme yapılarak verideki homojen grupların belirlenmesinden sonra 2 incelenmesinin yararlı olduğunu göstermektedir. Bu çalışmada önce döküm fabrikasından derlenen veriler yaygın olarak kullanılan k-ortalamalar ve MEB kümeleme yöntemleri ile gruplandırılmıştır. Daha sonra, bu sonuçlar yeni bir kümeleme yöntemi olan pürüzlü optimizasyon kullanılarak değiştirilmiş k-ortalamalar yöntemi ile elde edilenlerle karşılaştırılmıştır. 2. DÖKÜM VERİSİ Veri derlenen fabrikadaki döküm süreci Şekil 1’de gösterilmektedir. Tipik olarak ergitme ve döküm aşamalarındaki parametre ayarlarına bağlı olarak değişik hata türleri oluşmaktadır. Firmanın kalite amaçlarından bir tanesi önemli süreç parametrelerini belirleyip bunları optimize ederek hatalı ürün oranını azaltmaktır. Firma bunu deney tasarımı verilerini analiz ederek başarmaktadır [1]. Şekil 1. Üretim Hattı Bu çalışmada 2006 yılının ilk beş aylık üretim döneminde firmanın maça, kalıplama ve ergitme ardışık süreçlerinden gözlemleme yoluyla elde edilen ve hata oranı yüksek olan bir ürüne ilişkin veriler kullanılmıştır. Firma belli değişkenlerin değerlerini herhangi bir veri analizinden geçirmeden saatlik, günlük ve aylık olarak bir parti malın üretimi boyunca, örnekleme yoluyla kaydetmektedir. Bu nedenle girdi parametrelerine ilişkin bu değerler verili bir partideki her ürün için sabit ve ürünün ait olduğu partinin ortalamasına eşittir. Bazı parametre değerleri ise hiç kaydedilmediğinden veri kümesinde eksik gözlem olarak işlem görmektedir. Ürünlerde temel olarak 10 değişik hata tipi gözlenmiştir. Bu hata tiplerinden en önemli olan ikisi için geliştirilen KA ve regresyon analizleri [2]’de yer almaktadır. 2.1. Veri Önişleme Verideki gözlem değerlerini (satırları) kümeleme sürecinde, süreç parametreleri (sütunlar) kullanılarak önce satırlara Temel Bileşen Analizi (TBA) yaklaşımı uygulanmıştır (Şekil 2). TBA veri kümesindeki varyasyonun çoğunu içeren değişkenleri -ki verimizde bunlar, yukarıda da belirtildiği gibi süreç parametrelerine karşılık gelmektedir- aramakta ve bu değişkenleri veri kümesinin temel bileşenleri olarak kullanıp, verinin boyutunu indirgemektedir. Bu çalışmada TBA’den elde edilen bileşenlerden veriyi en iyi temsil edenleri seçmek amacıyla Friedman endeksi kullanılmıştır [7]. Bu işlem sonucunda bulduğumuz bileşenler ile Sugar yöntemi [7] uygulandığındaki sonuçlar Şekil 3’te yeralmaktadır. Grafikteki köşelerin sayısı küme sayısını göstermektedir. Bu durumda incelenen veri kümesinde iki veya dört küme bulunduğu söylenebilir. 3 Şekil 2. Temel Bileşenler Analizi (TBA) Şekil 3. Sugar yöntemi Şekil 2’den gözlem değerlerinin çoklu doğrusal bağlantılı olduğu görülmektedir. TBA ile verinin satır bazında oldukça ilişkili olduğunu tespit ettiğimizden, eksik değerlerin yerine sütun (süreç parametrelerinin) ortalamalarının konulabileceği düşünülmüştür. Bu tarz ilişkili veri kümelerinde kümeleme yapısını daha iyi anlamak için Öklit metriğinden daha farklı bir metriğe ihtiyaç olacağı söylenebilir. Çünkü Öklid metriği birbirinden bağımsız öznitelikler görülen durumlarda daha iyi kümeleme sonuçları vermektedir. 3. K-ORTALAMALAR ve MEDOİDLER ETRAFINDA BÖLÜMLEME (MEB) K-ortalamalar yöntemi toplam n noktayı (veri satırını), k kümeye bölmek için her noktanın, başlangıçta rastgele seçilen küme merkezlerine olan Öklit uzaklıklarını yinelemeli şekilde hesaplar. İlk adımda bu şekilde yaptığı kümelemeyi, sonraki adımlarda her kümedeki noktaların ortalamasını alarak güncellediği küme merkezleriyle tekrarlamaktadır. Her yinelemede noktaların hangi küme merkezine daha yakın olduğunu bulmak için bu uzaklıkların karesini en aza indirerek, optimum küme merkezlerini bulmaya çalışır. MEB ise veri kümesinde k medoid bularak, bu k medoide olan uzaklıklarına göre toplamdaki n noktayı kümelemektedir. Burada medoid, bir kümedeki tüm noktalara olan ortalama uzaklığı (benzemezlik ölçüsü) en küçük olan küme elemanıdır. Veriyi kümelemek için her iki yöntemi de kullanmamızın nedeni, k-ortalamalar yönteminin çok yaygın olarak kullanılmasına rağmen, MEB yönteminin düzensizlik ve uç değerler (sapan gözlemler) içeren verilerde daha sağlam (robust) olmasıdır. MEB yönteminin daha sağlam olmasının nedeni ise, Öklit uzaklıkları kareleri toplamını değil, benzemezlik değerlerinin toplamını en aza indirmesidir. Medoidler düzensizliklerin ve uç değerlerin varlığından küme merkezlerine göre daha az etkilenmektedirler. 3.1. K-ortalamalar SPSS’in veri madenciliği modülü olan Clementine10.1 [6] paket programında yeralan k-ortalamalar yöntemi kullanarak elde edilen kümeler Tablo 1’de ve kümeler arası benzerlik/benzemezlik durumları Tablo 2’de yeralmaktadır. Burada 4 gruplu (k=4) kümelemede benzemezliğin, 2 ve 3 kümeli ayrıştırmalara göre, çoğunlukla birbirine daha uzak gruplamalar verdiği görülmektedir. Tablo 1. k=2, k= 3 ve k=4 için K-ortalamalar sonuçları Nesne k:2 k:3 k:4 Nesne k:2 k:3 K:4 Nesne 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 2 1 1 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 4 1 1 1 4 1 1 1 1 1 1 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 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 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 1 1 1 1 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 19 1 3 3 44 1 1 1 69 20 1 1 1 45 1 1 1 70 21 1 1 1 46 1 1 1 71 22 1 1 1 47 1 1 1 72 23 1 1 1 48 1 1 1 73 24 1 3 3 49 1 1 1 74 25 1 1 1 50 1 1 1 75 4 k:2 k:3 k:4 Nesne k:2 k:3 k:4 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 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 1 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 1 2 2 2 4 4 4 4 4 4 4 4 4 1 2 2 2 1 2 2 2 1 1 1 1 1 1 1 1 1 2 2 4 2 2 4 2 2 4 2 2 4 2 2 4 Tablo 2. k=2, k=3 ve k=4 için K-ortalamalar ile bulunan kümelerin birbirlerine uzaklıkları 2 küme 3 küme 4 küme küme_1 (70 Nesne) – küme_2 (22 Nesne) küme_1 (68 Nesne) – küme_2 (22 Nesne) küme_1 (68 Nesne) – küme_3 (2 Nesne) küme_2 (22 Nesne) – küme_3 (2 Nesne) küme_1 (68 Nesne) – küme_2 (6 Nesne) küme_1 (68 Nesne) – küme_3 (2 Nesne) küme_1 (68 Nesne) – küme_4 (16 Nesne) küme_2 (6 Nesne) – küme_3 (2 Nesne) küme_2 (6 Nesne) – küme_4 (16 Nesne) küme_3 (2 Nesne) – küme_4 (16 Nesne) 1.113769 1.111567 1.593595 1.968277 1.44533 1.593595 1.104353 2.197992 1.055844 1.95292 3.2. Medoidler Etrafında Bölümleme Çalışmamızda MEB algoritması MATLAB 7.0 [8] ile programlanmıştır. Geliştirilen program veri kümemize uygulandığında elde edilen sonuçlar Tablo 3’de yeralmaktadır. Tablo 3. k=2, k= 3 ve k=4 için MEB sonuçları Nesne 1 2 3 4 5 6 7 8 9 k:4 1 2 3 2 3 2 2 1 2 k:3 1 2 3 2 3 2 2 1 2 k:2 1 2 2 2 1 2 2 1 2 Nesne 26 27 28 29 30 31 32 33 34 k:4 2 2 3 2 2 2 2 3 2 k:3 2 2 3 2 2 2 2 3 2 k:2 2 2 2 2 2 2 2 2 2 Nesne 51 52 53 54 55 56 57 58 59 k:4 2 1 1 1 2 3 3 1 3 k:3 2 1 1 1 2 3 3 1 3 k:2 2 1 1 1 2 2 1 1 1 Nesne 76 77 78 79 80 81 82 83 84 k:4 4 4 1 1 4 1 4 4 1 k:3 1 1 1 1 1 1 1 1 1 k:2 1 1 1 1 1 1 1 1 1 10 3 3 2 35 2 2 2 60 2 2 2 85 3 3 1 11 2 2 2 36 2 2 2 61 2 2 2 86 1 1 1 12 4 1 1 37 3 3 2 62 3 3 2 87 4 1 1 13 2 2 2 38 3 3 2 63 2 2 2 88 1 1 1 14 3 3 2 39 3 3 1 64 3 3 1 89 2 2 2 15 3 3 1 40 3 3 2 65 1 1 1 90 4 1 1 16 2 2 2 41 2 2 2 66 2 2 2 91 4 1 1 17 18 19 20 21 22 23 24 25 2 2 2 3 3 3 3 2 3 2 2 2 3 3 3 3 2 3 2 2 2 2 2 2 2 2 2 42 43 44 45 46 47 48 49 50 3 2 2 2 2 2 1 3 3 3 2 2 2 2 2 1 3 3 2 2 2 2 2 2 1 2 2 67 68 69 70 71 72 73 74 75 1 1 1 1 1 1 4 4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 92 4 1 1 Burada yine 4 gruplu (k=4) kümelemede benzemezliğin, 2 ve 3 kümeli ayrıştırmalara göre çoğunlukla birbirine daha uzak gruplamalar verdiği görülmektedir. Bu durum, örnek çalışmada, 4 gruplu kümelemenin tercih edilmesine yol açmaktadır. Tablo 4. k=2, k=3 ve k=4 için MEB ile bulunan kümelerin birbirlerine olan uzaklıkları 2 küme 3 küme 4 küme küme_1 (40 Nesne) – küme_2 (52 Nesne) küme_1 (33 Nesne) – küme_2 (34 Nesne) küme_1 (33 Nesne) – küme_3 (25 Nesne) küme_2 (34 Nesne) – küme_3 (25 Nesne) küme_1 (20 Nesne) – küme_2 (34 Nesne) küme_1 (20 Nesne) – küme_3 (25 Nesne) küme_1 (20 Nesne) – küme_4 (13 Nesne) küme_2 (34 Nesne) – küme_3 (25 Nesne) küme_2 (34 Nesne) – küme_4 (13 Nesne) küme_3 (25 Nesne) – küme_4 (13 Nesne) 1.2838 1.2838 1.2729 1.1242 1.2838 1.2729 1.1374 1.1242 1.5336 1.5523 5 3.3. Kümeleme Sonuçları k-ortalamalar ve MEB yöntemleri k=2 için çalıştırıldığında elde edilen sonuçlar yapay olabileceğinden ve ayrıca Bölüm 2.1’de sözü edilen MEB ve Sugar yöntemlerinin sonuçları kullanılarak veride dört küme olduğununa karar verilmiştir. MEB algoritmasının k=4 için oluşturduğu kümeler, içerdikleri nesne sayılarının dengeli olması ve kümelerin birbirine uzaklıklarının orantılı bulunması nedeniyle (bkz. Tablo 2 ve Tablo 4) oldukça doğal görünmektedir. k=4 için çalıştırdığımız MEB ve k-ortalamalar ile bulduğumuz kümelerin çapraz tablosu Tablo 5’te verilmiştir. Tablo 5. K-ortalamalar ve MEB için çapraz tablo PAM 1.00 2.00 3.00 4.00 k-Means Total 1.00 20 0 0 0 20 2.00 10 2 6 16 34 3.00 25 0 0 0 25 Total 68 2 6 16 92 4.00 13 0 0 0 13 Tablo 5’te MEB yönteminin bulduğu ikinci kümenin, k-ortalamalardaki ikinci, üçüncü ve dördüncü kümeyi kapsadığını, k-ortalamaların hepsini bir gruba topladığı 68 nesneyi (birinci küme) daha homojen kümelere ayırdığını görüyoruz. Tablo 2 ve Tablo 4 incelendiğinde MEB yönteminin bulduğu kümelerin birbirlerine uzaklıkları, k-Ortalamalar ile bulunanan kümelerin birbirlerine uzaklıkları ile karşılaştırıldığında, MEB yönteminin veri kümemizi daha iyi grupladığını söyleyebiliriz. Sonuç olarak, MEB ile yapılan kümeleme işleminin k-ortalamalar ile yapılanın ince ayarı olduğu şeklinde de yorum yapılabilir. 4. PÜRÜZLÜ OPTİMİZASYON ile KÜMELEME K-ortalamalar yöntemi daha yakından incelenirse, bir veri kümesindeki anlamlı küme sayısını bilmediğimiz durumlarda kümeleme problemini çözmede bu yöntemin yeterli olamayacağı söylenebilir. Bu çalışmada, Bölüm 2.1’de yaptığımız önişleme sayesinde veri kümemiz için anlamlı olan küme sayısını belirlediğimizden dolayı k-ortalamalar yöntemi kullanılabilmiştir. K-ortalamalar yönteminin bu eksikliğini gidermek amacı ile sayısal bir optimizasyon yaklaşımı olan pürüzlü optimizasyon yönteminin kullanılabileceği düşünülmektedir. Bu yolla elde edilen değiştirilmiş k-ortalamalar yöntemi kümeleri adım adım hesaplama özelliği sayesinde bitirme koşulu sağlanıncaya kadar bir veri kümesinin kapsadığı kadar kümeyi belli bir toleransa göre hesaplamaya izin vermektedir [5]. Bu yöntemin yapay test verileri üzerinde k-ortalamalar yönteminden daha iyi sonuç verdiği [8]’de gösterilmiştir. Çalışmamız bu yeni yöntemin elimizdeki veri kümesinde de k-ortalamalardan daha iyi sonuç verdiğini göstermektedir (bkz. Tablo 6 ve Tablo 7). Tablo 6. k=2, k= 3 ve k=4 için Pürüzlü optimizasyon ile değiştirilmiş k-ortalamalar sonuçları k=2 küme_1: 61 nesne küme_2: 31 nesne k=3 küme_1: 61 nesne küme_2: 31 nesne küme_3: 2 nesne k=4 küme_1: 45 nesne küme_3: 2 nesne küme_2: 24 nesne küme_4: 21 nesne Tablo 7. k-Ortalamalar ve Pürüzlü optimizasyon ile değiştirilmiş k-ortalamalar için çapraz tablo k-Ortalamalar Total 1.00 2.00 3.00 4.00 Pürüzlü Optimizasyon ile Değiştirilmiş k-ortalamalar 1.00 2.00 3.00 4.00 45 0 2 21 0 2 0 0 0 6 0 0 0 16 0 0 45 24 2 21 Total 68 2 6 16 92 6 Çapraz tablo, 4 küme ile k-ortalamalar yaklaşımının verdiği küme üyeliklerinin, pürüzlü optmizasyon eşliğinde değiştirilmiş k-ortalamalar yaklaşımıyla daha farklı bir dağılım verdiğini göstermektedir. Kortalamaların iki grubu 10’dan az üye ile kurulmuşken, yeni yöntemde tek bir küme dışındakilerin hepsi 20’nin üzerinde üyeye sahiptir. 5. SONUÇ ve GELECEK ÇALIŞMA ALANI Bu çalışmada, döküm süreci çıktılarını temsil eden 92 nesnenin her birine karşılık gelen, 35 süreç değişkeninden oluşan ve eksik değerleri bulunan kalite verisini kümelemek için 3 farklı yaklaşım denenmiştir. Yeni bir kümeleme yöntemi olan pürüzlü optimizasyon kullanılarak değiştirilmiş kortalamalar yöntemi ile k-ortalamalar ve MEB yöntemleri karşılaştırılmıştır. Pürüzlü optimizasyon ile değiştirilmiş k-ortalamalar yöntemi geleneksel k-ortalamalar yaklaşımından daha iyi kümeleme yapabilmesine rağmen, veri kümemiz için, benzemezlik ve üyelik dağılımı ölçülerine göre en iyi kümelemeyi MEB yönteminin verdiği görülmektedir. Veride saklı bulunan grupları kümeleme yaklaşımları ile incelemenin önemli sonuçlarından bir tanesi de, veri kümesindeki uç değerlerin ve azınlıkta olan verilerin saptanabilmesidir. Kalite verisi açısından baktığımızda, kümeleme çalışmalarının kural kümeleri ve tahmin modelleriyle oluşturan diğer VM yöntemleri kullanımı öncesinde veri üzerinde önişleme amacıyla kullanımı önerilir. Böylece hatalar ile süreç değişkenleri arasındaki ilişkileri daha kesin bir şekilde modellemenin mümkün olabileceği düşünülmektedir. Teşekkür: Bu çalışma TÜBİTAK 105M138 kodlu proje tarafından desteklenmiştir. Doç. Dr. İnci Batmaz, Prof. Dr. Gülser Köksal ve tüm proje üyelerine katkılarından dolayı teşekkür ederiz. KAYNAKÇA [1] Bagirov, A.M., Rubinov, A.M., Soukhoroukova, N.V., and Yearwood, J., Unsupervised and supervised data classification via nonsmooth and global optimization, TOP 11, 1 (2003), 1-93. [2] Bakır, B., Batmaz, İ., Güntürkün, F.A., İpekçi, İ.A., Köksal, G., and Özdemirel, N.E., Defect Cause Modeling with Decision Tree and Regression Analysis, Proceedings of XVII. International Conference on Computer and Information Science and Engineering, Cairo, Egypt, December 08-10, 2006, Volume 17, pp. 266-269, ISBN 975-00803-7-8. [3] Cabena P., Discovering data mining: from concept to implementation. Upper Saddle River, N.J.: Prentice Hall, 1998. [4] Dunham M.H., Data mining introductory and advanced topics. Upper Saddle River, N.J.: Prentice Hall/Pearson Education, 2003. [5] Öztürk-Akteke, B., Weber, G-W., A Survey and Results on Semidefinite and Nonsmooth Optimization for Minimum Sum of Squared Distances Problem, preprint no. 1, Institute of Applied Mathematics, METU, 2006. [6] SPSS Clementine, http://www.spss.com/clementine/. [7] Sugar, C.A. and James, G. M., Finding the Number of Clusters in a Dataset: An InformationTheoretic Approach, Journal of the American Statistical Association, 98 (463), 2003, 750-763. [8] The Mathworks-MATLAB-The Language of Computing, http://www.mathworks.com/products/matlab/