Elektrik Mühendisliği · Sayı 388 · 1992 / 4
SİMGESEL İŞLEM
Bilgisayar, yazılım ve internet Teknik / bilimsel makale
- Yıl
- 1992
- Sayfa
- 3
- Okuma süresi
- 9 dk
- Görüntülenme
- 0
Konu
Bilgisayar, yazılım ve internet
İlgili: Mühendislik eğitimi
Anahtar kelimeler
- simgesel programlama
- bilgisayarlı cebir
- LISP
- MACSYMA
- MATHEMATICA
- MAPLE
Özet
Yazıda, sayısal programlama dillerinden farklı olarak değişkenlerin kendi kendine simge olarak tanımlı kaldığı simgesel (bilgisayarlı cebir) programlama dilleri tanıtılmakta; bu sistemlerin yaptığı işlemler, gelişim tarihi ve MACSYMA, MAPLE, MATHEMATICA gibi örnekleri anlatılmaktadır.
Tam metin
Metin PDF'ten otomatik çıkarılmıştır; tablo, şekil ve formüller eksik ya da hatalı olabilir. Özgün dizgi için PDF'e bakın.
(SY MBOUC MANIPULATION)
B İLİMSEL AMAÇLARLA kulla nılan FORTRAN, BASIC, PASCAL ve benzeri diller sa yısal işlemlere yöneliktir. Bu dillerde, belirli ölçülerde karakter tü rü verileri işleme olanağı varsa da, bu dilleri simgesel programlama dil leri adı ile bilinen dillerden ayıran en önemli husus, kullanılan her değiş kenin değerinin kullanımdan önce tanımlı olması gereğidir. Bu tanım lama, atama, belirtme deyimi ile ta nımlama, giriş, üst ve altprogramlar arasında iletişim gibi yöntemlerden biri ile o değişkene sayısal, mantık sal ya da karakter şeklinde bir de ğer vermek suretiyle gerçekleşir. İş lemler ise değişkenlere atanmış bu lunan değerler arasında yapılır. Ti cari uygulamalarda kullanılan veri işlemeye yönelik COBOL, genel amaçlı PL/1 yahut C gibi dillerde de veri yapılarının kullanımdan önce değer verilerek tanımlanması esası vardır, bu dillerde kendi kendine ta nımlı veri yapıları yer almaz. Cebir de kullandığımız bir x değişkeni ise başka bir değer atanmamışsa x simgesi olarak tanımlıdır. Bu tür kendi kendisi olarak da tanımlı de ğişkenleri içeren, bu değişkenler üzerinde işlemlere olanak veren dil ler simgesel programlama dilleridir. Bu değişkenlere bir başka değer atanmadığı takdirde o değişken kendi adı ile tanımlanır, değişkene atanabilecek değerler ise yukarıda belirtilen sayısal ya da benzeri ifa delerle sınırlı olmayıp bir başka sim gesel değer, yahut simgesel değer lerden oluşan bir ifade olabilir. Gele neksel programlama aritmetik gibi düşünülürse, simgesel programla ma cebirin karşılığıdır. Bu nedenle simgesel programlamaya "bilgisa yarlı cebir", simgesel programlama sistemlerine de "cebirsel programla ma sistemleri" adı da verilir. Simge sel Programlama olarak çevirmiş ol duğum "Symbolic Programming" deyimi bazan makine dili ile çevirici dili arasında bir adım olan, işlemleri çağrıştıran simgesel işlem kodları ve simgesel adresler içeren, ancak makro deyimleri içermeyen dil için de kullanılır, burada deyim bu an lamda kullanılmayacaktır.
228 ELEKTRİ K MÜHENDİSLİĞİ
Prof. Dr. Avadis HACINLIY AN
Bunu bir basit örnekle anlamaya ça lışalım. N inci mertebeden Cheby
shev polinomu şu tür bir ifade ile ta Boğaziçi Üniversitesi Faik Bölümü nımlanabilir:
T(0) 1 :T(1) = X
FOR I 2 TO N: T (l)= 2*X*T (1 1) T (I 2) : NEXT I
Geleneksel bir programlama dilinde bu işlemin yapılabilmesi için önce N ve X' e birer sayısal değer atanmalı dır, bulunan sonuç da sayısal bir de ğerdir. Örneğin N=5, X=7 değerlerini atarsak işlem sonunda T (5)= 18817 şeklinde sayısal bir değer buluruz. Simgesel programlamada ise X'e herhangi bir değer atamazsak X kendisi yani X simgesi olarak tanım lanır. İşlemler ise cebir kuralları ile gerçekleştirilerek T (5) = 16*X5 2O'X3+5*X cebirsel ifadesi simgesel bir sonuç olarak elde edilir. Bu sonu cu bulduktan sonra X'e sayısal, sim gesel bir değer, hatta y+3 gibi bir di ğer simgesel bir ifade bile atayabili riz. Bu nedenle de X'in bellekte kap layacağı yer önceden kestirilemez, hatta işlemler sırasında değişebilir.
Simgesel programlama sistemlerinin gerçekleştirdiği başlıca işlemler şu şekilde özetlenebilir:
1. İstenen duyarlıkta tamsayı ve reel sayılı işlemler. Alışılagelmiş dillerde, tamsayı ve reel sayıların duyarlığı, kullanılan bilgisayar sistemindeki ke lime boyutuna bağlı olarak bir yada birkaç sınırlı değer alabilir. Simgesel programlama dillerinde ise bu duyar lılık kullanıcı tarafından tanımlanabil mektedir. Bu sistemlerde 100! ifade si 178 basamaklı bir tamsayı olarak hesaplanır, bilgisayarın tamsayı ya hut reel sayı duyarlılık limiti bu sonu cu etkilemez. Bu özellik nedeniyle normal dillerde yer alan sayı tipleri nin çoğuna burada ihtiyaç yoktur, tamsayı, rasyonel sayı ve reel sayı tipleri yeterlidir.
2. Polinomların açılımı ve terimleri nin kullanıcının belirteceği esaslara göre sıralanması, rasyonel fonksi yonların ortak payda üzerine alınma sı veya kısmi kesirlere ayrılması: Bu işlemler belki de simgesel program lama sistemlerinin sağladığı en önemli kolaylıktır, uzun hesapları ko laylaştırarak hatalardan arındırılma sına yardımcı olur.
3. Polinomların çarpanlara ayrılma sı: Bu işlem kesirlerin sadeleştirilme si, entegrasyon gibi işlemler için de gereklidir. Son yıllarda, bu zor işle min gerçekleştirilmesine yönelik yeni
algoritmalar geliştirilmektedir.
4. Sadeleştirme, yerine yerleştirme, kalıp uydurma (pattern matching), işlemleri kullanıcının isteğine göre gerçekleştirilmekte, yerine yerleştir me işlemi yerel (örneğinx sin (x) ifa desinde x yerine y+4 değerini yer leştirme), global ancak belirli bir de ğişken için (örneğin tüm ifadelerde x yerine y+4 değerini yerleştirme), ya da tüm değerler için global olarak (örneğin tüm argümanlar için Sin2 + Cos2 ifadesinin Ve eşitlenmesi) ger çekleştirilebilir.
5. Analitik türev ve entegral almak amacı ile bu sistemlerde analizde bi linen türev alma formülleri yer al maktadır. Tipik bir uygulama, bir ifa denin, bağımlı olduğu ve bir başka değişken atanmadığı için kendi ken dine tanımlı olan bir argümanına gö re kısmi türevinin alınmasıdır. Bu iş lem tekrarlanarak birden çok değiş kene göre istenen mertebeden tü revler alınabilir. Her fonksiyonun, belirli hesaplar sonucu bulunan ve aynı cinsten fonksiyonlar yardımı ile ifade edilebilen türevi olmasına kar şın, aynı niteliklere sahip entegrali olmadığından entegral alma işlemi biraz daha zordur. Risch tarafından bulunan bir algoritma yardımı ile be lirli tipte entegrallerin simgesel ola rak hesaplanması sağlanmıştır. Tab lolardan arama yolu ile entegrallerin hesaplanması da zaman zaman başvurulan bir yöntemdir. Öte yan dan, simgesel yolla hesaplanan en tegrallerin değerlerinin çoğu zaman entegrallerde yer alan parametrele rin değerine bağlı olduğu, simgesel programlama sistemlerinin bazan bu parametrelerin değerleri üzerinde belirli önkabuller yaptığı da bilinmek tedir. Dikkat edilmezse, bu önkabul ler hatalara yol açabilir.
6. Cebirsel programlama sistemle rinde belirli fonksiyonlar (örneğin tri gonometrik, hiperbolik, üstel veya lo garitmik fonksiyonlar, seriye açma, limit alma, rasyonel ifadelerin topla mının hesabı gibi prosedürler) yer almakta, fonksiyonların belirli özellik leri sistem tarafından kullanılabil mektedir. Bunun dışında yeni fonksi yonların tanımlanması için gereken olanaklar da sistemlerde yer almak tadır. Tüm sistemlerde, bu fonksi yonların sağladığı kuralların yerel yahut global olarak tanımlanması
mümkündür. Bu sistemlerin çoğun da, prosedürel ve fonksiyonel müm kündür. Bu sistemlerin çoğunda, prosedüre! ve fonksiyonel program lama olanakları da mevcuttur.
7. Sembolik matrislerle hesap yapı labilmektedir. Matrislerle dört işlem, transpoze, determinant ve ters mat ris alma, mümkün olan durumlarda özdeğer ve özvektörlerin hesaplan ması gibi işlemler bu sistemlerin tü münde tanımlıdır.
8. Sistemlerin çoğunda diferansiyel denklemlerin entegralini alma, özel fonksiyonlarla hesap yapma, iki ya hut üç boyutta grafik çizme, kısmi di feransiyel denklemlerin simetri grup larını hesaplama, diferansiyel geo metri hesapları yapma, Pade yaklaş tırımı oluşturma, analitik olarak he saplanamayan sonuçları nümerik olarak hesaplama, yüksek enerji fizi ği, optimizasyon gibi alanlardaki he saplar için olanaklar mevcuttur. Bu dillerin tümünde ku"anıcı fonksiyon ları tanımlamak suretiyle sistemin uygulama alanı genişletilebilir. Bir çoğunda da metin düzenleyici prog ramlarına (TeX veya LafeX gibi) grafik ve simgesel sonuç aktarma, sayısal hesaplama amaçlı dillere (özellikle FORTRAN yahut C) formül aktarma olanağı yer alır.
İlk simgesel programlama sistemleri büyük bilgisayarlara yönelikti. Kişisel bilgisayarların gelişmesi nedeniyle simgesel programlama sistemleri günümüzde kişisel bilgisayarlardan süperbikjisayarlara kadar her tür sis temde uygulanmıştır. 32 bitlik iç mi mari, büyük miktarda (mümkünse görüntü) bellek adresleyebilme ye terli olmaktadır. Özelilkle 80386SX ya da üstü işlemcisi olan IBM uyum lu kişisel bilgisayarlarla Macintosh sınıfı bilgisayarlar, bilinen tüm sim gesel programlama sistemlerini des tekleyebilmektedir.
Simgesel programlama sistemlerin de bir sonuca varmak için gereken adım sayısını önceden kestirmek mümkün değildir. Ayrıca, başlangıç değerleri ve son sonuç basit olmakla birlikte sonuca erişmek için karma şık, uzunluğu ve dolayısı ile bellekte kaplayacağı yeri önceden kestirile meyen ara değerlerin hesaplanması gerekebilir. Bu nedenle, simgesel programlama uygulamaları yüksek bellek sığaları ile dinamik bellek ata
388 E L E K T R İ K MÜHENDİSLİĞİ
ma ve serbest bırakma, uzunluğu di namik olarak değiştirilebilen yiğit (stack), değişken uzunluklu verileri temsil edebilen ilişkilendirilmiş liste (linked üst), ikili ya da çoklu ağaç gi bi yapılara ihtiyaç gösterir. En başa rılı simgesel programlama sistemleri bu yapıların en doğal olarak yer aldı ğı LISP ve C gibi dillerle geliştirilmiş tir. Nitekim, bilinen genel amaçlı simgesel programlama sistemlerinin tümü bu iki dilden biri ile yazılmıştır. Yerine koyma, çarpanlara ayrıma, simgesel entegral alma, kalıp uydur ma, sadeleştirme algoritmaları önemli ölçüde yapay us kabiliyetine ihtiyaç gösterir, bu nedenle simgesel programlama sistemleri yapay usta kine paralel bir gelişme göstermiştir. Simgesel programlama sistemlerin den birçoğunun temeli olan LISP, yaygın olarak yapay us uygulamala rında kullanılan bir dildir. Başarılı bir simgesel hesap, kullanıcıya her an müdahale ve yönlendirme imkanı ta nıyan etkileşimli bir uygulama da ge rektirdiği için bu sistemlerin hemen tümü etkileşimli bir ortam sağlar, ço ğunda "batch job" niteliğindeki ko mut dizilerini de birlikte işleme ola nağı vardır.
Simgesel programlama sistemlerini üç sınıfta toplamak mümkündür, bunlardan ilki LISP diline dayalı ge nel amaçlı sistemlerdir, örnek olarak kişisel bilgisayarlarda uygulanan MUMATH ve bu sistemden geliştiri len DERIVE, Hearn tarafından geliş tirilen, bazı eksikliklerine rağmen yaygın bir kullanım alanı bulan RE DUCE, bu tür sistemlerin en büyüğü ve genel amaçlısı olarak bilinen MACSYMA verilebilir. İkinci sınıfta C diline dayalı genel amaçlı sistemler toplanabilir, bunun en yaygın iki ör neği de Wolfram tarafından geliştiri len SMP ve MATHEMATICA ile Wa terloo Üniversitesi tarafından gelişti rilen MAPLE'dir. Genel sistemler, çeşitli uygulamalara açık oldukların dan bazı özel hesaplar için yeterli hız yahut kapasite sağlayamamakta dırlar. Genel amaçlı dillerdeki kısıtlar nedeniyle özel uygulamaların he saplama gereksinmelerini kolayca karşılamaya yönelik, ancak sınırlı iş lemleri gerçekleştirebilen özel amaç lı sistemler de geliştirilmiştir, bunlar üçüncü sınıfta toplanabilir, örnek olarak sayısal uygulamalara bazı simgesel olanaklar eklemek amacı ile geliştirilen FORTRAN ve PL/1 ta
banlı FORMAC, teorik fizikte yer alan Feynman diyagramlarının he sabı için geliştirilen Fortran tabanlı ASHMEDAI ve CDC Çevirici dili (COMPASS) tabanlı SCHOONS HIP, tensör hesapları için geliştirilen LISP tabanlı ORTHOCARTAN, rela tivite ve gökmekaniği uygulamaları na yönelik CAMAL ve ALAM sayıla bilir. Günümüzde teorik fizikte önem kazanan Virasoro Cebirlerinin tem sillerini bulmak için gereken büyük tamsayıların çarpanlara ayrılması, nonkomütatif hesapların yapılması işlemleri genel amaçlı simgesel programlama dilleriyle yeterince hız lı bir şekilde yapılamadığından C di liyle özel programlar yazılmaktadır.
80386 tabanlı IBM uyumlu veya Ma cintosh uyumlu, en az 4 MByte ger çek belleği olan kişisel bir bilgisayar, bu dillerin hemen hemen tümünün kullanılması için yeterlidir. Ayrıca, iş istasyonları, "mainframe" ve süper bilgisayarlarda da simgesel prog ramlama uygulamaları yapılmakta dır. Simgesel programlamanın ilk uygulamaları için başlangıçta ancak büyük çaptaki bilgisayarlar yeterli olabiliyordu. Bilgisayar donanımın daki gelişmeler, simgesel programla manın genellikle vektör veya paralel programlamaya uygun olmaması gi bi nedenler uygulamaları iş istasyon larına ve kişisel bilgisayarlara kay dırmıştır.
uygulanmıştır. CP/M işletim sistemi ni kullanan 64 KByte'lik bilgisayarlar için geliştirilen, MULISP diline dayalı olan MUMATH, daha sonra kişisel bilgisayarlara uygulanmıştır. Bu sis temin grafik özellikler ve bazı sayı sal hesap olanakları da içeren, an cak programlama olanakları sınırlı olan bir şekli DERIVE adı ile gelişti rilmiştir, kullanılan simgesel hesap algoritmaları bakımından etkin, kü çük sistemlere uygunluğu ve ucuzlu ğu nedeniyle çok yaygın olarak kul lanılan bir diğer sistemdir.
Simgesel programlama sistemleri, uzun ve karmaşık hesapların yapıl ması, cebirsel, sayısal ve grafik özelliklerinin birleştirilmesi nedeniyle araştırmalarda önemli kolaylıklar sağlamış, eğitimde çığır açmış, mü hendislik ve fen disiplinlerindeki bil gisayar öğretimini programlama eği timi yerine paket programlardan ya rarlanma gibi daha çağdaş bir yakla şıma yönlendirirken programlama mantığını da basit bir dü zeyde veril mesine ola nak sağla mıştır. Gide rek artan bir kullanım ala nı bulacağı açıktır.
Uluslararası literatürde MATHEMA TICA, MACSYMA ve MAPLE dille rindeki uygulamalara sık sık rastlan maktadır. Bu diller kaynak kodu se viyesinde kullanıcıya açık değildir. Geliştirilen ilk genel amaçlı dillerden biri olan REDUCE ise, grafik özellik lerinin bulunmaması nedeniyle, kul lanımı yukarıdaki üç dil kadar yay gınlaşamamış, buna karşı, kaynak kodunun kullanıcıya açık olması, di ğer diller gibi simgesel programlama mantığına daha uygun olan (C ye benzer) fonksiyonel programlama yerine (PASCAL ve FORTRAN'a benzer) prosedürel programlamaya yakınlığı nedeniyle belirli kullanıcı gruplarında kabul görmüştür. Ülke mizde de en yaygın kullanılan sis tem REDUCE'dir, hatta bu dilde programlamayı tanıtan Türkçe bir ki tap bile yayınlanmıştır. REDUCE, 640 K Byte'lik IBM uyumlu kişisel bilgisayarlardan CRAY süperbilgisa yarlarına kadar uzanan bir platforma
KAY NAKLAR
LAnthony C. Hearn, "REDUCE User's Manual Version 3.4" CP78 Sayılı RAND Yayını, Santa Monica, California (Temmuz 1991 baskısı)
2 Gerhard Rayna, "REDUCE, Sohvvare lor Algebraic Computation" Springer Verlag Yayınevi, New York, (1987).
3 Stephen Vvolfram, "Mathematica, A System lor Doing Mathematics by Computer" 2. Baskı, Addison VVesley Yayınevi, Redvvood City, California, (1991).
4. Roman Maeder, "Programming in Mathematica" Addison VVesley Yayıne vi, Redvvood City, California (1989).
5. J. F. Ogilvie "Computer Algebra İn Modern Physlcs" Computers in Physics, Cilt 3, Sayı 1, s 66 74 (1989).
6. V. Haktanır, B. Şahin ve E. Kıral,
"MATHCAD ve REDUCE" Ekonomist
Yayınevi,
Ankara
(1991).
A A A 388 E L E K T R İ K
2 3 0 MÜHENDİSLİĞİ