Saya diminta untuk menulis artikel pendek ini oleh artikel yang baru-baru ini diterbitkan tentang HabrΓ©
Dynamics tentang penerbangan vertikal pesawat yang lebih ringan dari udara . Saya ingin menulis komentar, tetapi dengan cepat tumbuh menjadi sesuatu yang lebih dan, sepertinya, lebih bermanfaat.
Artikel asli memberikan contoh penghitungan dinamika balon atau balon di atmosfer. Dalam hal ini, baik hambatan udara dan gradien dari kepadatan dan suhu atmosfer dipertimbangkan, sehingga masalah berkurang menjadi persamaan diferensial nontrivial, yang dapat berhasil diselesaikan secara numerik menggunakan bahasa Python. Semuanya baik-baik saja dalam artikel: bola lepas landas, berhenti jika perlu, kami mendapat tinggi maksimum dan waktu naik. Butuh saya untuk meluncurkan bola lain, mengatakan, lebih banyak, memuatnya lebih menyeluruh, atau mengubah hidrogen menjadi helium - tidak masalah - mengubah parameter dalam program dan menghitung semuanya lagi. Programnya bisa dimengerti, linier, kerjanya, jadi apa yang bisa diperbaiki di sini jika modelnya tidak rumit?
Anda dapat membuat model dan perhitungan menjadi berguna secara universal, bukan untuk bola tertentu, tetapi untuk berbagai tugas. Dimungkinkan untuk memastikan akurasi perhitungan optimal dalam integrasi numerik dari persamaan diferensial. Anda dapat menghilangkan kebutuhan untuk secara manual mengatur batas dan langkah integrasi saat menghitung dalam berbagai parameter. Akhirnya, Anda bisa memberi tahu banyak tentang dinamika penerbangan bola kami tanpa solusi numerik. Dan untuk semua ini, ada satu trik lama, benar dan dapat diandalkan, yang dulu wajib untuk setiap perhitungan pada komputer dan sebelum mereka muncul, dan sekarang opsional dan sering terkait dengan sihir dan seni -
membawa persamaan ke bentuk tanpa dimensi dan skala sendiri . Saya akan menggunakan masalah aeronautika sebagai contoh dan menunjukkan bagaimana analisis masalah menjadi lebih bermakna dan elegan saat menggunakan teknik ini. Dan kemudian saya akan menjelaskan mengapa ini bisa penting bagi programmer, dan mengapa artikel ini berakhir di hub βPemrograman Fungsionalβ.
Inti dari mengurangi persamaan ke skala mereka sendiri adalah untuk menemukan dan memperkenalkan unit-unit pengukuran waktu, jarak, massa, arus dan variabel dimensi lainnya di mana tugas mengambil bentuk yang paling sederhana dan elegan. Unit seperti ini disebut skala
karakteristik atau yang
tepat dari masalah. Pada saat yang sama, jumlah parameter yang mempengaruhi solusinya berkurang secara signifikan, dan jika Anda beruntung menemukan solusi yang mirip sendiri, maka parameter tersebut dapat hilang sama sekali!
Biasanya, seseorang berkenalan dengan teknik ini ketika mereka mempelajari dinamika osilator harmonik, membawa persamaan gerak ke bentuk kanonik. Memang, apa pun osilator (besar atau kecil, frekuensi rendah atau tinggi, mekanik atau elektromagnetik), jika Anda mengukur waktu tidak dalam hitungan detik, tetapi dalam periode osilasi bebas, dan amplitudo tidak dalam meter, tetapi, katakanlah, dalam besarnya penyimpangan awal , maka persamaan untuk setiap osilator linier akan memiliki bentuk yang sama:
x β³ + 2 z e t a x β² + x = 0
Cukup mempelajari sifat-sifat solusi persamaan ini untuk mengetahui segala sesuatu tentang semua osilator gesekan kental harmonis. Tanpa gesekan, parameter benar-benar hilang dalam masalah, dan kami memperoleh, sebagai solusi, sinusoid yang patut dicontoh. Namun demikian, sinusoid lain, hingga perubahan koordinat linier sederhana, benar-benar identik, sehingga tidak ada gunanya menganalisis secara individual.
Ini juga terjadi ketika menganalisis kurva orde kedua. Setelah memeriksa parabola, hiperbola, atau elips dalam bentuk kanonik (paling ringkas), kami telah mempelajari semua sifat luar biasa mereka. Setelah itu, pengetahuan ini meluas ke sembarang kuadrat non-sepele. Selain itu, teknik yang sama digunakan dalam analisis persamaan matematika orde kedua (dalam turunan parsial).
Membawa masalah ke bentuk tanpa dimensi pada skala sendiri dalam fisika sesuai dengan pencarian bentuk kanonik atau pola dalam pemrograman. Dan, untungnya, itu dapat diungkapkan dengan algoritma yang sepenuhnya formal:
- Kami memperkenalkan faktor skala formal untuk variabel;
- kami membagi seluruh persamaan dengan kuantitas apa pun yang memiliki dimensi ketentuannya;
- dari kompleks tanpa dimensi yang dihasilkan, termasuk faktor skala, kami memilih faktor sebanyak yang kami miliki, dan menyamakannya dengan kesatuan;
- kami menyelesaikan persamaan yang dihasilkan dengan mengungkapkan faktor skala dalam hal parameter masalah, dan menggunakan kompleks yang tersisa sebagai kriteria kesamaan.
Sebagai hasilnya, kami memperoleh persamaan dalam bentuk kanonik, nilai eigen masalah, dan juga kriteria kesamaan untuk menggeneralisasi solusi ke sistem yang serupa secara fisik. Semakin banyak skala yang dapat Anda masukkan (menggunakan, misalnya, simetri), persamaan gerak akan lebih ringkas dan parameter kontrol yang lebih sedikit akan tetap ada dalam masalah. Harta nyata bagi peneliti adalah situasi ketika dimungkinkan untuk mengecualikan semua parameter masalah dan untuk menyajikan semua solusi yang mungkin dalam satu kurva. Solusi semacam itu disebut self-similar dan sangat menyederhanakan kehidupan, mengubah persamaan diferensial parsial menjadi persamaan diferensial biasa, atau bahkan menjadi persamaan aljabar. Langkah kedua dan ketiga dari algoritma di atas memerlukan seleksi dan penalaran, mereka adalah yang paling formal, tetapi bahkan jika Anda menggunakan metode brute force, pada tahap ini Anda bisa mendapatkan pemahaman sistematis yang sangat mendalam tentang masalah tersebut.
Mari kita beralih ke persamaan gerak asli yang diberikan dalam artikel di pesawat terbang, dan tunjukkan dengan contohnya bagaimana ia dapat diubah menjadi bentuk tanpa dimensi pada sisiknya sendiri. Persamaannya berbentuk:
m fracd2hdt2=βmg+gW rho0eβbhβ frac12cS rho0eβbh operatornametanda kiri( fracdhdt kanan) kiri( fracdhdt kanan)2,
dengan kondisi awal
h(0)=hβ²(0)=0.
Di sini
h - ketinggian bola,
m - massa seluruh pesawat dengan muatan,
g - percepatan gravitasi,
W - volume gas dalam bola,
c - koefisien seret,
S - area ketahanan karakteristik,
Ο0 - Kepadatan udara pada ketinggian nol,
b - koefisien dalam distribusi Boltzmann.
Langkah pertama. Kami memperkenalkan skala formal untuk waktu dan jarak:
h=h0y, quadt=t0 tau qquad(1)
dan menulis ulang persamaan gerak menggunakan stroke untuk menunjukkan turunannya:
m frach0t20yβ³=βmg+gW rho0eβbh0y kiri[1β fraccS2Wg frach20t20 operatornamesign(yβ²)(yβ²)2 kanan].
Kondisi awal dalam kasus kami sepele, sehingga dapat dihilangkan, tetapi secara umum, kami juga harus menulis ulang.
Langkah kedua, pada kenyataannya, adalah pengukuran persamaan. Semua istilah di dalamnya memiliki dimensi kekuatan dan kita bebas untuk membaginya menjadi kekuatan apa pun. Biasanya dibagi oleh kekuatan inersia - oleh faktor turunan kedua dari jarak. Dalam hal ini, sebagai parameter masalah, kriteria terkenal untuk kesamaan dinamis, seperti bilangan Reynolds atau Euler, biasanya diperoleh. Namun dalam tugas kami, kami menetapkan semua gaya yang termasuk dalam tugas untuk gravitasi
mg dan itu sebabnya. Kami terutama tertarik pada posisi keseimbangan statis - ketinggian maksimum bola pada kapasitas beban yang diberikan dan waktu transisi ke sana. Dan keseimbangan statis tidak tergantung pada sifat inersia sistem, tetapi secara langsung tergantung pada gravitasi. Jadi, kami membagi dan mengurangi apa yang mungkin:
frach0gt20yβ³=β1+ fracW rho0meβbh0y kiri[1β fraccS2Wg frach20t20 operatornamesign(yβ²)(yβ²)2 kanan].
Semuanya, persamaannya tidak berdimensi, sekarang semua variabel dan semua istilah di dalamnya hanyalah angka. Dan sekarang kita bebas memilih skala panjang dan waktu seperti itu untuk meminimalkan jumlah parameter tugas. Kami memiliki dua hal yang tidak diketahui
h0 dan
t0 dan empat kompleks tanpa dimensi:
frach0gt20, quad fracW rho0m, quadbh0, quad fraccS2Wg frach20t20
itu berarti kita bisa membuat mereka berdua menghilang hanya dengan menyamakan mereka menjadi satu. Selain itu, kompleks kedua tidak bergantung pada faktor skala besar, dan kita perlu memilih dua yang tersisa untuk dihancurkan. Dan lagi, kita beralih ke argumen tentang keseimbangan statis yang menarik minat kita. Posisi kesetimbangan ditentukan oleh pemerataan akselerasi nol, yaitu, tidak masalah bagi kita faktor mana yang akan menjadi turunan kedua dari ketinggian dan kita dapat melakukan minimalisasi jumlah parameter di sisi kanan persamaan. Jadi, kita sampai pada solusi berikut: kita memilih faktor skala sehingga kompleks ketiga dan keempat yang kita daftarkan menghilang dari persamaan. Untuk ini kami anggap
bh0=1, quad fraccS2Wg frach20t20=1
dan dapatkan skala masalahnya sendiri:
h0= frac1b, quadt0= frac1b sqrt fraccS2Wg. qquad(2)
Parameter yang tersisa dilambangkan sebagai berikut:
frach0gt20= frac1 gamma, quad fracW rho0m=B.
Ini mungkin adalah tahap paling ajaib dari transformasi kami, yang paling dekat dengan seni. Tetapi pengalaman dan beberapa alasan membantu dalam memilih skala yang tepat. Dan kemudian pengalaman yang sama ini memungkinkan kita untuk melihat fenomena serupa di berbagai bidang ilmu pengetahuan dan untuk menebak sifat karakteristik dari sistem yang kompleks.
Saya akan membiarkan diri saya menunda analisis makna fisik dari skala dan parameter yang kami peroleh, meskipun ini juga sangat menyenangkan dan menarik, tetapi saya akan segera beralih ke yang paling enak - ke persamaan tanpa dimensi pada skala sendiri:
frac1 gammayβ³=Beβy kiri(1β operatornamesign(yβ²)(yβ²)2 kanan)β1, quady(0)=yβ²(0)=0. qquad(3)
Di sini! Saya siap untuk menyelesaikan persamaan seperti itu, menganalisis dan mengintegrasikan secara numerik. Dan ketika saya memutuskan, saya dapat dengan mudah bergerak dari skala saya sendiri ke meter dan detik, dikodekan dalam rasio (1) dan (2).
Jadi mari kita mulai. Mari kita temukan, sebagai permulaan, di mana balon umum kita akan berhenti. Untuk melakukan ini, kami menyamakan dengan nol kecepatan dan percepatan dalam persamaan (3):
0=Beβyββ1,
dimana kita dapatkan
yβ= lnB.
Segera menyimpulkan: agar ketinggian maksimum ada, syaratnya
B>1ββ . Selanjutnya, kami memperkirakan berapa lama bola akan mencapai ketinggian ini. Untuk melakukan ini, kami menyamakan akselerasi ke nol dan menyelesaikan masalah Cauchy dari urutan pertama:
0=Jadilaheβy kiri(1β(yβ²)2 kanan)β1, quady(0)=yβ.
Ini diselesaikan secara analitis dengan metode pemisahan variabel, dan direduksi menjadi integral:
tauβ= intyβ0 fracBdy sqrtBey=2 operatornamearth kiri( sqrt1β frac1B kanan).
Lihat, ini mereka - buah dari timbangan yang dipilih dengan benar! Baik tinggi maksimum dan waktu karakteristik pencapaiannya hanya dinyatakan melalui parameter
B . Ini berarti bahwa kami dapat memperbaiki beberapa nilai
B>1ββ , buat serangkaian grafik untuk menyelesaikan persamaan (3) untuk nilai yang berbeda
gamma dan dengan demikian segera menggambarkan
semua opsi untuk memecahkan masalah untuk
nilai apa pun B !
Ini adalah rangkaian universal satu-parameter dari solusi yang diperoleh dengan mengintegrasikan masalah numerik (3) untuk berbagai nilai
gamma :

Setelah mencapai ketinggian kesetimbangan, balon membuat osilasi teredam untuk beberapa waktu, namun, waktu karakteristik untuk mencapai ketinggian ini diperkirakan dengan benar. Dari kriteria
gamma hanya periode osilasi dan waktu peluruhannya yang bergantung. Semakin besar parameter ini, semakin sulit sistem kami.
Tetap menerjemahkan rangkaian grafik ini ke dalam tampilan dimensional, cukup dengan mengalikan nilai di sepanjang sumbu dengan faktor skala yang sesuai. Dan sekarang percobaan numerik telah berakhir dan hasilnya telah mendapatkan makna universal. Anda dapat mengganti parameter dimensi nyata dari tugas tersebut, dan langsung mendapatkan angka pada sumbu, sudah dalam meter dan detik! Hasil seperti itu sudah dapat dipublikasikan dalam buku pedoman serius untuk para balon udara yang keras atau dalam artikel ilmiah yang menggambarkan keseluruhan fenomena dalam satu grafik.
Sekarang mari kita lihat apa yang kita dapatkan dalam bentuk parameter dan variabel. Ganti massa bola
m massa gas total
W rhog dan massa muatan
M :
m=W rhog+M=W rhog(1+ alpha),
dimana
alpha= fracMW rhog - daya dukung relatif pesawat. Selain itu, kami mengambil bola bulat dan mengekspresikan luas dan volumenya melalui jari-jari
R . Dalam representasi ini, kami mendapatkan parameter masalah:
B= frac rho0 rhog(1+ alpha), gamma= frac3cB8Rb.
Yang pertama adalah koefisien daya apung, yang tergantung pada gas yang digunakan dan beban yang diangkat, parameter yang sangat penting, mencakup semua jumlah massa. Yang kedua menunjukkan bagaimana ukuran dan bentuk bola terkait dengan gradien kepadatan di atmosfer, yaitu, bagaimana inhomogeneities atmosfer besar relatif terhadap ukuran bola.
Skala tersebut dinyatakan sebagai berikut:
h0=1/b tau0= frac12b sqrt frac3cB2gR= sqrt frac gammagb
Skala jarak hanya ditentukan oleh gradien kepadatan. Yang benar-benar benar, karena justru karena gradien ini, kenaikan bola, secara umum, berhenti di suatu tempat. Waktu karakteristik termasuk jumlah dinamis - percepatan gravitasi, rasio massa dan hambatan udara.
Tinggi dan waktu khas dari pendekatan bola
hβ=yβh0= frac1b lnB,tβ= tauβt0=2 sqrt frac gammagb operatornamearth kiri( sqrt1β frac1B kanan)
juga dinyatakan dalam parameter utama dan ruang lingkup tugas.
Sebagai contoh, mari kita lihat apa yang terjadi pada parameter fisik yang diberikan dalam artikel asli:
B=4,57 gamma=686h0=8000 m tau0=12.47 minhβ=12166.6 mtβ=13.72 min
Untuk meringkas. Setelah bekerja sedikit di atas kertas sebelum memasukkan tugas ke mesin, kami bisa mendapatkan hasil yang lebih jelas dan universal dan memperhatikan sifat paling penting dari solusi. Pada saat yang sama, kami tidak kehilangan "modularitas" dari solusi. Inilah yang saya maksud. Kami merumuskan masalah dalam istilah yang paling umum, dan kemudian, setelah mendapatkan solusi, kami mulai menambahkan "fitur" baru, misalnya, kami berbagi konsep muatan dan massa gas yang mengangkatnya. Komplikasi ini memengaruhi nilai skala, tetapi tidak mengubah sifat solusi.
Jika selanjutnya perlu menambahkan gradien suhu, ekspresi dalam eksponen akan menjadi lebih rumit, tetapi esensinya dan, yang paling penting, skalanya tidak akan berubah:
exp kiri( fracβbhT0T0βah kanan)
setelah dimensinya akan terlihat seperti ini:
exp kiri( fracβy1β psiy kanan),
dimana parameter baru
psi= fracabT0 menunjukkan bagaimana berkorelasi adalah gradien kepadatan dan suhu. Karena ini adalah parameter atmosfer yang tidak tergantung pada kita,
psi Adalah konstanta sama dengan
0,17 . Nilai konstanta, omong-omong, menunjukkan pentingnya efek gradien suhu, itu tidak besar, tetapi tidak dapat diabaikan. Rangkaian grafik akan berubah sedikit, tetapi, yang paling penting, grafik akan tetap satu-parameter.
Penggunaan skala masalah sendiri untuk perhitungan memiliki nilai tambah yang signifikan: dalam hal ini, variabel biasanya mengambil nilai "sedang", yaitu, mendekati satu. Ini sangat berguna untuk perhitungan floating point: akurasi tidak hilang dalam operasi dengan nilai yang sangat bervariasi dalam urutan besarnya. Selain itu, menjadi mungkin untuk membandingkan dengan benar peran efek individu dalam suatu tugas dengan membandingkan nilai-nilai kriteria kesamaan mereka atau nilai-nilai variabel. Misalnya nilainya
B=4,5 menunjukkan berapa kali kekuatan interaksi dengan atmosfer lebih besar daripada gravitasi. Dan kuadrat dari kecepatan kenaikan berdimensi karakteristik
(yβ/ tauβ)2 sim0,3 menunjukkan tingkat signifikansi hambatan udara dalam gerakan vertikal pesawat dibandingkan dengan daya apung, yang dinyatakan oleh unit dalam kurung.
Akhirnya, perhitungan dalam variabel dan parameter tanpa dimensi memiliki konsistensi internal tertentu dengan fakta bahwa solusi persamaan diferensial hampir selalu merupakan fungsi transendental, dan hanya kuantitas tanpa dimensi yang dapat menjadi argumen dan hasil. Komputer juga beroperasi secara eksklusif dengan jumlah - jumlah tanpa dimensi. Pengetikan statis, pada prinsipnya, memungkinkan Anda untuk memasukkan dimensi jumlah fisik pada tingkat jenis dan memeriksa program untuk kebenaran selama kompilasi, tetapi pada tahap numerik kami masih bekerja hanya dengan kuantitas itu sendiri. Kesalahan apa pun yang terkait dengan unit dan dimensi akan hilang dalam perhitungan tersebut. Adalah masuk akal untuk menyiapkan tugas untuk perhitungan, tidak termasuk yang berlebihan, dan hanya menyisakan yang paling esensial dan alami bagi pemecah masalah.
Dan apa yang akan terjadi jika kita memilih kompleks lain, atau mengaitkan semua kekuatan bukan dengan gravitasi, tetapi, katakanlah, dengan kelembaman? Dua parameter akan tetap dalam persamaan, tetapi keluarga kurva akan menjadi dua parameter, dan itu tidak dapat ditampilkan pada satu diagram. Saya akui, pada awalnya itu hanya terjadi pada saya, karena skala panjang saya mendapatkan jari-jari bola. Tetapi setelah bermain dengan kurva ini, saya melihat kesamaan geometrisnya (Anda lihat satu di semua parabola), dan analisis sepintas lebih lanjut dari kriteria dan persamaan yang diperoleh membawa saya ke simetri tersembunyi dan menyarankan seperti apa bentuk "kanonik" dari persamaan kita. Namun, ini adalah pekerjaan yang indah! Tugas itu sendiri mulai menceritakan tentang dirinya sendiri. Saya merasa senang membangun sistem tipe dan struktur data dalam sebuah program di Haskell atau C #: ketika arsitektur program sesuai dengan struktur internal tugas, semuanya menjadi sangat alami, elegan, case khusus dikerjakan secara βotomatisβ dan jumlah lapisan abstraksi berkurang.
Dimensi kuantitas fisik dalam diri mereka sangat menarik. Mereka membentuk ruang linear, dan pencarian kriteria kesamaan dapat direduksi menjadi masalah menemukan kernel dalam ruang dimensi, sehingga memformalkan proses ini. Mereka, sampai batas tertentu, memainkan peran tipe dalam komputasi fisik. Karena kompiler menggunakan pengetikan statis untuk memverifikasi kebenaran program, maka fisikawan menggunakan dimensi untuk memverifikasi perhitungan dan hasilnya.
Seperti dalam bahasa fungsional murni yang diketik dengan ketat (misalnya, dalam Haskell), kode fungsi dapat diturunkan dari jenisnya, dengan cara yang sama, berdasarkan dimensi kuantitas fisik, seseorang dapat membangun kompleks tanpa dimensi, kuantitas karakteristik dalam sistem fisik dan memperoleh hasil yang sangat berguna dan universal. Ada banyak contohnya dalam mekanika, gas, dan termodinamika, mekanika kuantum, dll. Saya merekomendasikan Anda untuk berkenalan dengan karya yang luar biasa , yang memberikan banyak contoh indah penerapan analisis dimensi untuk masalah-masalah dari teorema Pythagoras hingga osilasi bintang-bintang dan Rayleigh bertebaran di langit. Karya ini mengutip kata-kata John Wheeler, guru Richard Feynman, yang menerima nama "Aturan Wheeler":Β« , . : (! ! !) , ; . : , . , . . Β».
Saran untuk programmer ini terdengar sangat akrab: jangan mulai menulis kode fungsi tanpa harus memutuskan tanda tangan (jenis) dan perilakunya (tes); Sebelum menulis kode, Anda harus mempertimbangkan jenis, struktur data, dan hubungannya. Inilah yang tepat untuk OOP dan pemrograman fungsional - prinsip-prinsip ini tidak hanya bekerja di sana, mereka, ketika digunakan dengan terampil, mereka sendiri menyarankan solusi yang paling alami dan elegan, dan dalam kasus FP, mereka melakukan ini pada tingkat matematika yang mendalam, memungkinkan untuk membuktikan sifat-sifat program dan membebankan biaya beberapa bekerja pada keluaran properti program ke kompiler.Belajar matematika, programkan dengan indah dan bersenang-senanglah!