Həftə 9 · 18/23
Simulyasiya: riyaziyyatı AI-a düzgün demək
7 dəqiqəlik oxu
Filmdəki partlayış gözə inandırıcı gəlir, amma fizika hesablanmır — effektdir. Mühəndis simulyasiyası isə əksinə: qanunu hesablayır və nəticə gözə bəzən yöndəmsiz görünür.
AI-a qanunu, vahidləri və zaman addımını deməsən, effekt yazır. Modeli çəkmədən ayırıb bilinən cavabla yoxlayanda fərq dərhal görünür.
vy += g * dt; // dt in milliseconds, g in m/s^2 -> 1000x wrong
// and dt changes with the screen's refresh rateÇox deyilən söz: «Topun düşməsini animasiya et» demək kifayətdir.
Animasiya görünüşü təqlid edir, simulyasiya isə qanunu hesablayır. AI-a qanunu, vahidləri, zaman addımını və inteqrasiya üsulunu deməsən, göz üçün inandırıcı, amma fizikaca səhv hərəkət yazar. Modeli (saf funksiya) çəkmədən (canvas/SVG) ayır, sonra modeli bilinən cavablarla yoxla. Ekranda düzgün görünmək sübut deyil.
Sənin kulvarında
Qrafik və animasiya
Veb-də «simulyasiya» çox vaxt bir qrafik və ya animasiyadır. Qayda eynidir: hesablama saf funksiyada, çəkmə ayrı; və eyni giriş həmişə eyni şəkli verməlidir — yoxsa xətanı təkrarlamaq olmur.
Fikir eynidir, rəqəmlər və alətlər fərqli. Seçimin brauzerində yadda qalır və bütün dərslərə tətbiq olunur.
Akkumulyator ilə sabit addım
Fizika sabit dt ilə irəliləyir, ekran isə öz tezliyi ilə çəkir. Tab dəyişəndən sonra gələn nəhəng dt-ni məhdudlaşdır.
Sən bunu istə
const DT = 1 / 120; // seconds
let acc = 0;
function frame(elapsedSeconds) {
acc += Math.min(elapsedSeconds, 0.25); // clamp after a tab switch
while (acc >= DT) { state = step(state, DT); acc -= DT; }
draw(state);
}Əvvəl vahidlər və işarələr
Koddan əvvəl düsturu, vahidləri və işarə qaydasını yaz. Buraxılan fotonun enerjisi müsbətdir: E(yuxarı) − E(aşağı). Tərsi hər oxunu mənfi edir.
AI belə yazır
const released = E(low) - E(high); // always negativeSən bunu istə
// eV; E(n) = -13.6 / n^2; released photon energy > 0
const released = E(upper) - E(lower);Qızıl yoxlamalar
Modeli qapalı düsturla həlli olan halda və saxlanma qanununda yoxla. dt-ni yarıya endir: nəticə yaxınlaşmırsa, inteqrasiya səhvdir.
Sən bunu istə
expect(range(v, angle), closeTo(v ** 2 * Math.sin(2 * angle) / g, 0.01));
expect(energyDrift(60), lessThan(0.01)); // under 1% over 60 sDiff oxuyanda soruş: AI-a de: qanunu, vahidləri və inteqrasiya üsulunu yaz, sonra modeli bilinən iki cavabla yoxla.
Terminlər
İndi sən yoxla
1144 Hz monitorda top 60 Hz-dəkindən fərqli hərəkət edir, tab dəyişəndən sonra isə döşəmədən keçir. Niyə?
function frame(now) {
const dt = now - last; last = now; // milliseconds
vy += g * dt; // g = 9.81 m/s²
y += vy * dt;
requestAnimationFrame(frame);
}2Hansı prompt düzgün rəqqas (pendulum) verir?
Hazır prompt
İngiliscədir, çünki terminlər ingiliscədir. Tərcümə etsən də terminləri saxla.
Build <simulation> with the model separate from the drawing.
- First state the law(s) as equations, with units, and the sign conventions.
- Model: a pure function step(state, dt) -> state, with a fixed timestep
and a named integration method (say why that one).
- Randomness only through a seeded RNG, so any run can be replayed.
- View: draws the state and never changes it.
- Checks: compare the model against at least two known answers
(a closed-form case, a conservation law) within a stated tolerance,
and show the result with dt halved.Öz kodunda
- 1Layihəndəki bir simulyasiya və ya hesablamanı seç (yoxdursa, sadə atılan cisim qur).
- 2step funksiyasını saf funksiya kimi ayır.
- 3İki qızıl yoxlama yaz: məsələn, düz yerdə uçuş məsafəsi v²·sin2θ/g, və enerji 60 saniyədə 1%-dən çox dəyişmir.
- 4dt-ni yarıya endir: nəticə yaxınlaşırmı?
Bunu görəndə bitib: Model iki bilinən cavabla yoxlanılır və eyni seed eyni nəticəni verir.
Daha dərinə
Oxumaq üçün