kişisel web sayfası, yazılar, yorumlar, makaleler, özgeçmiş
her şey hakkında bir şey veya bir şey hakkında hiç bir şey...

VBScript ile ters sinüs hesaplama (28 Ağustos 2007)

Ortaokulda ve lisede trigonometriden her ne kadar nefret etsem de, üniversite sınavı ve daha sonrasında sırasıyla Mat 1 - 2, Mühendislik Matematiği ve Dif. Denk derslerinden geçebilmek için bu zımbırtıları öğrenmem gerektiğini anladım. Bir süre üzerinde çalıştıktan sonra, aslında ihtiyacımız olan şeyin sadece Cos, Sin, Tan ve Cot ne olduğunu bilmek olduğunu anladım.

ArcSin ile ilgili bir soru gelince aklıma gelen ilk şey, standart Atn() fonksiyonu gibi bir Asn() veya Asin() fonksiyonu olacağıydı ama Asn() ve Asin() fonksiyonlarını denememle karşıma aşağıdaki hata çıktı:

Microsoft VBScript runtime error '800a000d'
Type mismatch: 'asin'
/trigo.asp, line 24

Bunun üzerine elime kağıt ve kalemi alarak biraz trigonometri hesabına girdim. Öncelikle hesaplayabileceğim değerleri görmek istedim:

Öncelikle VBScript in ters tanjant hesaplayan bir Atn() fonksiyonu olduğunu gördüm. Bu sinüs değerinden bir tanjant değeri elde edebilirsem bu açının büyüklüğünü anlayabileceğim anlamına geliyordu.

Sinüs değerini benim yerime hesaplamakla mükellef olan VBScript motoru yönünden sorunum olmadığı açıktı. O halde aşağıdaki gibi bir dik üçgen tasarlamam gerekiyordu:

Dik kenarlar: a,b
ipotenüs: c

Kosinüs teoremi bana şunu söylüyordu:

c^2=a^2+b^2

Buradan basit bir cebir işlemi ile:

b^2=c^2-a^2 (1)

eşitliğini elde ettim.

VBScript ile q açısının sinüsünü hesaplamak basitti.

x = sin(q)

q, b kenarı ile hipotenüs arasındaki açı ise:

x = a/c

Bu eşitlikten çıkan sonuç:

a = cx (2)

(1) eşitliğinde a yerine (2) değerini yazarsak:

b^2=c^2-(c^2)(x^2)
b^2=c^2(1-X^2)
b=c(1-x^2)^(1/2)

Bizim Atn fonksiyonuna vereceğimiz değer a/b olacağından, buradaki a yerine (2) eşitliğinden ve b yerine (3) eşitliğinden değerlerini yazarsak:

a/b=cx/(c(1-x^2)^(1/2))

Burada gerekli sadeleştirmeyi yapalım:

a/b=x/((1-x^2)^(1/2))

Bu çok karışık görünebilir ancak okursak o kadar karışık olmadığını görürüz:

x bölü (1 eksi x in karesinin) karekökü

Ters sinüs fonksiyonu şu şekilde tanımlanabilir:

asn = atg(x bölü (1 eksi x in karesinin) karekökü)

Ve bu ifadeyi VBScript ile yazarsak:

Function Asn(x)
Asn = Atn(x/Sqr(1-x^2))
End Function

Bu kadarı güzel. Şimdi bu fonksiyonu test edelim. VbScript in tüm trigonometrik fonksiyonlar radyan türünde parametre aldığı için öncelikle bir iki dönüşüm fonksiyonu yazalım. Radyan için gereken bir sabit olan pi 'yi VBScript e tanıtmakla başlayalım:

Const pi = 3.1415926535897932384626433832795

Çok mu detaylı oldu dersiniz :) Windows un hesap makinesini açıp bilimsel moda geçerseniz ve pi tuşuna basarsanız bu değeri göreceksiniz.

Ardından radyan a ve dereceye dönüşümler için iki fonksiyon daha tanımlayalım:

Function toRadian(Degrees)
toRadian = Degrees * pi / 180
End Function
Function toDegrees(Radian)
toDegrees = Radian * 180 / pi
End Function

Ve son aşamada asn fonksiyonumuzu test edelim. Öncelikle q=10 gibi bir açının sinüsünü alalım.

q = 10
q = toRadian(10)
x = Sin(q)
Response.Write(x)

Elimizdeki x değişkeninde 10 derecenin sinüsü var.

Fonksiyonumuzu test edelim ve bunu da y değişkenine atayalım. Bu fonksiyon radyan türünde çıktı vereceğinden sonucu yazdığımız fonksiyon ile dereceye çevirelim:

y = Asn(x)
y = toDegrees(y)
Response.Write(y)

Sonuç gözlerinizi yaşartıyor değil mi :) Ekranda ilk baştaki q değişkenimize eşit olan 10 yazıyor.

Buradan geçen günkü matematik sınavımda matematik kitabının el değmemiş ücra köşelerinden sorular seçmek konusundaki titiz bir davranış sergileyen sayın Yrd.Doç.Dr. Nural Yüksel e saygılar sunuyorum. Hörmetler..





Geri Dön | Ana Sayfa
 
Son güncelleme: 20 Ağustos 2008 14:48
Bu sayfadaki içeriği izinsiz kopyalayan eşek kulaklıdır.
© Ali AYEN Ankara - 2007