İçindekiler:

Python'da Sayısal Entegrasyon Programı Nasıl Yapılır: 10 Adım
Python'da Sayısal Entegrasyon Programı Nasıl Yapılır: 10 Adım

Video: Python'da Sayısal Entegrasyon Programı Nasıl Yapılır: 10 Adım

Video: Python'da Sayısal Entegrasyon Programı Nasıl Yapılır: 10 Adım
Video: Python İle Basit Bir Uygulama Yapma 2024, Temmuz
Anonim
Python'da Sayısal Entegrasyon Programı Nasıl Yapılır?
Python'da Sayısal Entegrasyon Programı Nasıl Yapılır?

Bu, sayısal bir entegrasyon algoritması kullanarak belirli integralleri değerlendirecek bir programın nasıl oluşturulacağı ve çalıştırılacağı hakkında bir eğitimdir. Adımları 3 bölüme ayırdım: programı yapmak için kullanılacak algoritmayı anlamak, programı Python programlama dilini kullanarak kodlamak ve programı çalıştırmak. Bu öğretici, belirli integralleri değerlendirmek için hızlı bir şekilde hesap makinesi yapması veya daha büyük ölçekli bir programda kullanmak için algoritmaya ihtiyacı olan biri için tasarlanmıştır. Temel matematik bilgisi beklenir, ancak ilgili matematiksel bilgiler gözden geçirilir. Programlama bilgisi beklenmez, ancak programlamanın gerçekte nasıl çalıştığını kısaca açıkladığım için faydalıdır.

Neye ihtiyacınız olacak:

İnternet erişimi olan bir kişisel bilgisayar

Adım 1: Algoritmayı Anlamak Bölüm 1: Belirli İntegral ve Kullanımı

Algoritmayı Anlamak Bölüm 1: Belirli İntegral ve Kullanımı
Algoritmayı Anlamak Bölüm 1: Belirli İntegral ve Kullanımı

Temel hesap bağlamında bir integralin ne olduğunu biraz bildiğinizi varsayacağım. İntegraller önemlidir çünkü sonsuz küçük bir uzunlukla çarpılan bir dizi değeri toplamanıza izin verirler; bu finans, sayı teorisi, fizik, kimya ve diğer birçok alanda faydalıdır. Ancak bu program, yalnızca sonlu bir aralık için bir eğrinin altındaki alanı hesaplamanıza izin verir veya başka bir deyişle, anti-türevleri değerlendirmez - bunun için çok daha güçlü bir algoritma gereklidir. Bu algoritma, başka bir şeye yönelik olarak belirtilen daha büyük bir programda belirli bir integrali değerlendirmeniz gerekiyorsa veya elle yapılan herhangi bir belirli integral için cevabınızı kontrol etmek istiyorsanız kullanışlıdır.

Temel bir belirli integral, bir fonksiyon tarafından tanımlanan bir eğrinin altındaki alanı temsil eder; f(x). Belirli bir integral için, iki nokta arasındaki alanı ararız (sırasıyla a ve b olarak etiketlenir). Resimde turkuaz bölge bahsettiğim alandır ve bunu belirleme denklemi o bölgede de gösterilmektedir. Resimde gösterilen işlev isteğe bağlıdır.

Adım 2: Algoritmayı Anlama Bölüm 2: Sayısal Yaklaşım

Algoritmayı Anlama Bölüm 2: Sayısal Yaklaşım
Algoritmayı Anlama Bölüm 2: Sayısal Yaklaşım

Bir bilgisayar, herhangi bir işlev için çalışacak rastgele bir işlevin altındaki alanı hesaplamak için geniş bir talimat setine ihtiyaç duyar, bu nedenle aşina olabileceğiniz analitik yöntemler, çok özel oldukları için hiçbir işe yaramaz. İntegralleri yaklaşık olarak hesaplamak için bir bilgisayarın gerçekten işleyebileceği bir yöntem, ilgilenilen alanı kullanıcı tanımlı eşit genişlikte ve değişken yükseklikte dikdörtgenlerle doldurarak ve ardından dikdörtgenin tüm alanlarını toplayarak yapılır. Dikdörtgenlerin katı özellikleri, toplam alanın bir kısmına dokunulmadan bırakacaktır, bu nedenle bu bir yaklaşım olarak kabul edilir; ancak, sınırlar (a ve b) arasına ne kadar çok dikdörtgen sığdırabilirseniz, dokunulmamış bölgeler daha seyrek hale geleceğinden, yaklaşıklık o kadar doğru olacaktır. Görevi bir bilgisayar yapacağından, istediğiniz bölgedeki dikdörtgenlerin sayısını çok büyük bir sayı olacak şekilde ayarlayabilirsiniz, bu da yaklaşıklığı son derece doğru hale getirir. Destekleyici resimde, belirlenen alandaki her dikdörtgenin eşit genişlikte olduğunu hayal edin. Microsoft Paint'te bunları eşit genişlikte yapmak için elimden geleni yaptım, ancak en iyi işi yapmadım.

Adım 3: Algoritmayı Anlamak Bölüm 3: Orta Nokta Kuralı

Algoritmayı Anlamak Bölüm 3: Orta Nokta Kuralı
Algoritmayı Anlamak Bölüm 3: Orta Nokta Kuralı

Bu kural, dikdörtgenlerin nasıl yapıldığını ve yaklaşımda nasıl kullanıldığını belirtir. "N" dikdörtgenlerden her biri eşit genişliğe sahip olmalıdır, Δx, ancak her n'inci dikdörtgen tam olarak aynı olamaz: değişen faktör, belirli bir noktada değerlendirilen fonksiyon olarak değişen yüksekliktir. Orta nokta kuralı, adını, her dikdörtgenin yüksekliğini f(x_n) olarak değerlendirdiğiniz gerçeğinden alır; burada "x_n", dikdörtgenin soluna veya sağına yerleştirildiği şekliyle her dikdörtgenin ilgili merkez noktasıdır. Orta noktayı kullanmak, sağı veya solu kullanmanızdan daha doğru bir yaklaşım sağlayacak bir ortalama uygulamaya benzer. Bu adım için destekleyici resim, orta nokta kuralının matematiksel olarak nasıl tanımlandığını özetler.

Adım 4: Program Oluşturma Bölüm 1: Python Derleyici/Düzenleyici İndirme

Artık uygulanması gereken algoritmayı anladığınıza göre, hesaplamayı sizin için yapacak bir bilgisayar edinme meselesidir. Bir bilgisayara ne yapacağını söylemenin ilk adımı, bunu yapacak araçları edinmektir. Bu algoritma herhangi bir dilde kodlanabilir; Basit olması için bu program Python dilinde kodlanacaktır. Bilgisayarınıza Python ile işlemler gerçekleştirmesi için komut vermek için, o dilde yazılmış talimatları alan ve daha sonra bilgisayarınızın anlayabileceği makine dilinde derlenecek ve böylece yapmasını söylediğiniz görevleri yerine getirebilmesi için bir düzenleyiciye ihtiyacınız olacaktır. Bu gün ve çağda, bir editör ve derleyici genellikle entegredir, ancak bu her zaman böyle değildir. Rahat ettiğiniz herhangi bir düzenleyici/derleyici kullanabilirsiniz, ancak size Python için kişisel favorimi nasıl elde edeceğinizi göstereceğim: Canopy. Halihazırda bir düzenleyiciniz/derleyiciniz varsa bu adımları atlayabilirsiniz.

  1. https://www.enthink.com/product/canopy/ adresine gidin.
  2. Canopy'yi İndir'e tıklayın
  3. İşletim sisteminize karşılık gelen indirme düğmesine tıklayın

    İndirme otomatik olarak başlayacak

  4. Yürütme dosyasını başlattıktan sonra yerleştirme talimatlarını izleyin
  5. Programı çalıştır
  6. Programın ana menüsünden "Editör"e tıklayın
  7. Ekranın ortasındaki "yeni bir dosya oluştur" u tıklayın

Bu noktadan itibaren, temel bir kelime işlem belgesine benzeyen bir imleç bulunan boş bir beyaz pencere görmelisiniz. Artık belirli integralleri çözmek için sayısal entegrasyon algoritmasını kodlamaya başlamaya hazırsınız. İlerleyen adımlarda, kopyalayacağınız bir kod parçacığı ve bu parçacığın bir bütün olarak program için ne yaptığının bir açıklaması olacaktır.

Adım 5: Programın Oluşturulması Bölüm 2: Fonksiyonları İçe Aktarma ve Değişkenleri Tanımlama

Programın Oluşturulması Bölüm 2: Fonksiyonları İçe Aktarma ve Değişkenleri Tanımlama
Programın Oluşturulması Bölüm 2: Fonksiyonları İçe Aktarma ve Değişkenleri Tanımlama

Resimdeki kodu kopyalayın.

Kendinizi kodlarken bulabileceğiniz herhangi bir program için değişkenler olacaktır. Değişken, üzerinde işlem yapılacak ve değişebilen bir değere verilen isimdir. Çoğu programlama dilinde (hepsi değilse de), program üzerinde değişiklik yapmadan önce bir değişkeni başlatmanız gerekir. Bu program için "N, " "a, " ve "b" değişkenlerini adlandırdım. Bu değerler, sırasıyla yineleme sayısını (dikdörtgenlerin AKA sayısı), alt sınırı ve üst sınırı temsil eder. Bunlara istediğiniz herhangi bir isim verebilirsiniz, ancak "Algoritmayı Anlamak Bölüm 3: Orta Nokta Kuralı" bölümünde verilen formülleri eşleştirmek için, onları aynı tutmak en iyisidir. Yalnızca belirli bir değere ayarlanmadıklarına dikkat edin. Bunun nedeni, program çalıştırıldığında program kullanıcısının değerin ne olacağını tanımlayabileceği girdiler olmalarıdır. Giriş komutundan sonra tırnak içindeki metin, programı çalıştırdığınızda size ne tür bir değer yazmanız gerektiğini söyleyen bir metin görünür. Ayrıca, giriş atamalarından önce "int" ve "float" kullanıldığını fark edeceksiniz. Bu terimler bilgisayara bu değerin ne tür bir değişken olacağını söyler. "int" bir tamsayıdır ve "kayan nokta" bir kayan nokta değeridir (yani ondalık sayı). Bunların neden bu şekilde belirlendiği açık olmalıdır.

"#" işaretinden sonra gelen herhangi bir metin, programcının kodu hümanist bir şekilde takip etmesine olanak tanıyan bir yorumdur; Kodumda, kopyalayacağınız belirli yorumlar yaptım, ancak özellikle size yardımcı olacak yorumları eklemekten çekinmeyin. Program, önünde "#" olan hiçbir şeyi komut olarak okumaz.

Kodun "matematiksel içe aktarma *" yazan kısmı, programa, bunları kendiniz programlamak zorunda kalmadan kullanılabilecek bir dizi matematiksel işlevi içe aktarmasını söyler. "*" sadece "hepsi" anlamına gelir. Kodun bu bölümünü şu şekilde okuyun: matematik kitaplığından tüm işlevleri içe aktarın. Bu, sinüs, kosinüs, log, exp, vb. gibi matematiksel işlevleri kullanmanıza olanak tanır. Bu işlevler, koda matematiksel olarak entegre edilebilir.

Adım 6: Programın Oluşturulması Bölüm 3: Entegrasyon İçin Bir İşlev Oluşturulması

Programın Oluşturulması Bölüm 3: Entegrasyon İçin Bir İşlev Oluşturma
Programın Oluşturulması Bölüm 3: Entegrasyon İçin Bir İşlev Oluşturma

Bir önceki kodun altındaki resimdeki kodu kopyalayın.

UYARI: Bu bölüm yoğun ve kafa karıştırıcı olabilecek bazı şeyleri açıklığa kavuşturmak istiyorum. Programlama hakkında konuşurken, "fonksiyon" kelimesi çok fazla ortaya çıkıyor. Bu terim aynı zamanda matematikten bahsederken çokça karşımıza çıkıyor. Yani bu noktadan sonra programlama anlamında bir fonksiyondan bahsederken "Python function" yazacağım ve matematiksel fonksiyondan bahsederken "matematiksel fonksiyon" diyeceğim. Bir noktada, söz konusu matematiksel işlevin temsili olarak bir Python işlevini kullanacağız.

Bu sonraki kod parçası, programın kalbidir. Burada, orta nokta kuralı kullanılarak sayısal entegrasyon algoritmasını gerçekleştiren bir Python işlevi tanımlanır. "def Integrate(N, a, b)" şöyle okunur: "N, " "a," ve "b" değişkenlerini kabul eden ve eğrinin altındaki alanı döndüren "Integrate" adında bir fonksiyon tanımlayın (matematiksel fonksiyon) bu da "Entegre Et" Python işlevi içinde tanımlanır. Bu Python işlevini kodlama yaparken herhangi bir şey olarak adlandırabilirsiniz, ancak gerçekten matematiksel bir işlevi entegre eden bir işlev olduğu için entegre olarak adlandırmak mantıklıdır.

Bu noktada Python'un kod bloklarını nasıl ayırdığı hakkında yorum yapmaya değer. Bir kod bloğu, belirli bir görevi yerine getiren bir bölümün tamamıdır. Farklı programlama dilleri, bu "blokları" ayırt etmenin yollarını belirleyecektir. Python için, bir blok girintilerle ayırt edilir: her görev gerçekleştiren bölümün kendi girintisi vardır ve diğer girintili blokların içinde girintili bloklar olabilir. Bu, görevler içindeki görevleri temsil eder ve esas olarak kodun yürütülmesi gereken sırayı söyler. Tanımlanmış Python işlevi "Integrate" durumunda, bu işlev içindeki her şey bir blokta girintilenir, böylece bu işlev içinde yürütülecek görevler ayırt edilir. Bu Python işlevinde, kendi görevlerini de yerine getiren girintili kısımlar vardır. Şöyle devam eder: bir komut (görev) belirlenir, iki nokta üst üste komutu izler ve komutun ne yaptığı altına girintilenir.

"Bütünle" Python işlevini tanımladıktan hemen sonra, f(x) adlı başka bir Python işlevi tanımlayacaksınız. Bu, entegre edilecek matematiksel işlevi temsil eder. İntegral etmek istediğiniz her farklı matematiksel fonksiyon için (program çalıştırıldığında tanımlanan değişkenlerden farklı olarak) değiştirmek için bu program satırına gitmeniz gerekecektir. Her Python işlevinin bir dönüş değeri olacaktır, bu, bir değer attığınızda işlevin döndürdüğü şeydir. Bu durumda, atılan değer "x" olur ve bu "x" terimi, onu ne atarsanız atın değerini alacaktır - bu geçici bir değerdir.

Ardından, bir for-döngüsü, bu öğreticinin "Algoritmayı Anlamak" bölümündeki formüllerde tanımlanan toplama işlevi görür. Bu toplama birkaç değişken daha gerektirir, bunlardan biri tüm "Entegre Et" Python işlevi için dönüş değeri görevi görecektir. For döngüsünden önce bu değişkenleri "değer" ve "değer2" olarak belirledim. for-loop'un görevi, for-loop komutunda rahatlıkla tanımlanabilen belirlenmiş bir değişken için bir dizi değer üzerinde yineleme yapmaktır; bu durumda, bu değişken "n"dir. Yinelemenin gerçekleştiği aralık 1 ila N+1'dir. Yukarıda belirtilen formüllerde tanımlanan toplamın yalnızca 1'den N'ye kadar değiştiğine dikkat etmelisiniz. Python dili sıfırdan başlayarak her yinelenen değeri saydığı için bunu bu şekilde tanımlarız, bu nedenle esasen değerlerin aralığını istediğimiz gibi kaydırmamız gerekir. Aralık. For-döngüsü daha sonra dikdörtgenin tüm yüksekliklerinin toplamına izin verir ve bu değeri benim "değer" olarak adlandırdığım değişkende saklar. Bu, şu şekilde görünen kod parçasında görülür: value += f(a+((n-(1/2))*((b-a)/N))).

Oradan, kodun bir sonraki parçası "değer2" olarak adlandırılan değişkeni kullanır ve daha sonra her bir dikdörtgenin tüm yüksekliklerinin toplamı ile her bir dikdörtgenin standartlaştırılmış genişliğinin çarpımı olarak atanır - bu bizim istediğimiz son cevabımızdır. programımız tarafından görüntülenir ve bu nedenle "Entegre Et" Python işlevinin dönüş değeridir.

Adım 7: Programın Oluşturulması 4. Bölüm: Cevabın Görüntülenmesi

Programın Oluşturulması 4. Bölüm: Yanıtın Görüntülenmesi
Programın Oluşturulması 4. Bölüm: Yanıtın Görüntülenmesi

Resimdeki kodu önceki kodun altına kopyalayın.

Artık cevabı "Entegre Et" Python işleviyle elde edebildiğimize göre, onu görüntüleyebilmek istiyoruz. Bu, kullanıcı tarafından girilen değerleri ("N, " "a, " ve "b") "Entegre Et" Python işlevine koymak ve ekrana yazdırmakla ilgilidir. Bu komut 21. satırda gösterilmektedir ve bu adımı tamamlamak için gerçekten yapmanız gereken tek şey budur. 19. ve 20. satırlardaki kod, tüm programın çıktısını "oldukça güzelleştirmek" için oradadır. "print("……………………….")" programın giriş bölümünü çıktı bölümünden ayırır ve "print("İşte cevabınız: ")" sadece cevabın alacağı bir atamadır. bu metin satırından sonra yazdırılır.

Adım 8: Programı Çalıştırma Bölüm 1: Programı Olduğu Gibi Çalıştırma

Programı Çalıştırma Bölüm 1: Programı Olduğu Gibi Çalıştırma
Programı Çalıştırma Bölüm 1: Programı Olduğu Gibi Çalıştırma

Canopy kullanmıyorsanız, muhtemelen bu adımı izlemeniz bile gerekmez ve programı çalıştırmak farklı prosedürler gerektirebilir. Canopy'de programı çalıştırmadan önce kaydetmeniz gerekir. Bir Python programı için dosya türü bir.py dosyasıdır; otomatik olarak bu şekilde kaydeder. Dosyanın kaydedileceği yeri seçin, ardından programı çalıştırabilirsiniz.

Programı Çalıştırmak:

  1. Dosya adınızın göründüğü yerin hemen üstündeki araç çubuğunda bulunan "oynat düğmesi" gibi görünen yeşil düğmeye basın (resme bakın).
  2. Program daha sonra Canopy veri analiz ortamı olarak bilinen editörün alt ekranında çalışacaktır. İstemleri benim yazdığım gibi kopyaladığınızı varsayarsak, Canopy veri analizi ortamının altında şu istemi görmelisiniz: "Kaç kez toplamak istediğinizi girin (daha fazla kez = daha doğru):." (resme bakın)
  3. Yinelemeyi kaç kez yapmak istediğinize ilişkin bir değer girin, yani 10000 (bölgenize kaç tane dikdörtgen sokmak istiyorsunuz), ardından enter tuşuna basın.
  4. 5. adımda programa kodladığınız tanıdık giriş komutları olması gereken ifadelerle birlikte daha fazla bilgi istemi görünecektir. Bunları yukarıdaki 3 numarada olduğu gibi uygun şekilde doldurun.
  5. İntegral değerlendirilmeli ve bir sonuç görünmelidir.

Programı önceki resimlerde gösterildiği gibi kodladıysanız, f(x) = x^2'yi bazı sınırlar üzerinden entegre etmiş olursunuz. x^2'nin integrali elle değerlendirilmesi kolaydır, bu nedenle programın elle belirlenen doğru analitik değere çok yakın bir cevap verdiğinden emin olmalısınız. Programı N = 10000, a = 0 ve b = 10 değerleriyle çalıştırdığımda 333.33333249999964 cevabını alıyorum. Doğru analitik cevap 333.333'tür. Bu inanılmaz derecede doğru ve hızlı. Esasen x ekseninde 0 ile 10 arasında 10.000 dikdörtgen sıkıştırdınız ve bunları x^2 eğrisinin altındaki alanı tahmin etmek için kullandınız!

Adım 9: Programın Çalıştırılması 2. Kısım: Diğer Matematiksel Fonksiyonların Entegrasyonu

Programın Çalıştırılması Bölüm 2: Diğer Matematiksel Fonksiyonları Entegre Etme
Programın Çalıştırılması Bölüm 2: Diğer Matematiksel Fonksiyonları Entegre Etme

Önceki adımda, sadık bir şekilde takip ediyorsanız, f(x) = x^2'yi entegre ettiniz. Bu programın entegre edebileceği tek matematiksel fonksiyon bu değil. 5. adımdan, Python işlevlerinin matematik kitaplığı dizisini programa aktardığınızı hatırlayın. Bu, entegre edilebilecek daha karmaşık matematiksel işlevleri kullanmanıza olanak tanır. Bir şans verelim. Elbette, istediğiniz herhangi bir işlevi kullanabilirsiniz, ancak belirli bir aralıkta entegre edildiğinde iyi bilinen bir değer veren belirli bir matematiksel işlevi entegre ederek bu kodun doğruluğunu daha fazla göstereceğim. Bu fonksiyon f(x) = Sin[x]'dir. Bu matematiksel işlev, 0'dan 2π'ye çizilen ilk eşlik eden resimde görüntülenir ve ilgi alanı turkuaz ile gölgelenir. Bu aralıkta negatif alan olduğu gibi eşit miktarda pozitif alan vardır, yani toplam alanı toplarsanız sıfır almalısınız. Bakalım bu gerçekten oluyor mu:

f(x) = Sin[x] matematiksel fonksiyonunu programa koymak:

  1. Programı yeniden çalıştırmadan önce, "#döndükten sonra işlevinizi yazın" yorumunun altına, x**2'nin bulunduğu yere: sin(x) yazın. (resme bakın).
  2. Yeşil play butonuna tekrar basarak programı çalıştırın.
  3. N değeri için 10000 yazın (kaç kez toplamak istiyorsunuz).
  4. alt sınır için "0" koyun.
  5. Üst sınır için 6.2832 koyun (yaklaşık 2π).
  6. Hangi değeri aldığınızı görün.

Bunu yaptığımda, 1.079e-10 değerini elde ettim: bu, gerçekten sıfıra yakın olan.0000000001079'a eşittir, bu nedenle doğru görünüyor ve algoritmanın negatif alanı yeterince ele aldığını gösteriyor.

Adım 10: Programı Çalıştırma Bölüm 3: Programı Genişletme

Bu noktada işiniz bitti: Python'da kodlanmış, sorunsuz çalışan ve çok doğru cevaplar veren, çalışan bir kesin integral algoritmanız var. Ancak bu program geliştirilebilir. Ben bir programcı değilim ve Python ile çok az deneyimim var. Aslında, bu öğreticiyi tamamlamak için Python'u kullanma konusunda kendimi yenilemem gerekti, ancak bu, Python'un öğrenmesi çok kolay bir dil olduğu konusunda size güven vermeli. Demek istediğim, bu programı daha verimli hale getirerek genişletebilir, belki biraz GUI uygulayabilir ve daha kullanıcı dostu hale getirebilirsiniz.

Programı genişletme konusundaki düşüncelerim:

  • Canopy etkileşimli veri analizi ortamını kullanmadan programı çalıştırmanıza izin veren bir grafik kullanıcı arabirimi uygulayın
  • Entegre edilecek matematiksel fonksiyonun programın içinde girilmesi gerekmemesini, program çalıştırıldıktan sonra girilebilmesini sağlayın (başlangıçta bunu yapmaya çalışıyordum ama çözemedim).
  • Bir "Bütünle" Python işlevi tanımlayın, böylece f(x) işlevini, içinde tanımlanmış f(x) işlevine sahip olduğu gibi alır.

Bunlar iyileştirme alanlarından sadece birkaç örnek, ancak geliştirilebilecek başka birçok alan olduğunu garanti ederim. Bu yüzden bu adımı, bu programın kusurlarına bir örnek ve belki de programı daha da geliştirmek isteyen herkes için bir alıştırma olarak bırakıyorum.

Önerilen: