RƏSƏDXANA

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
Bir sətirdə iki səhv: vahid uyğunsuzluğu və ekrandan asılı zaman addımı. Ekranda hərəkət yenə də «axıcı» görünür.

Ç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 negative

Sə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 s

Diff oxuyanda soruş: AI-a de: qanunu, vahidləri və inteqrasiya üsulunu yaz, sonra modeli bilinən iki cavabla yoxla.

Terminlər

fixed timestep
Simulyasiyanı ekranın kadr tezliyindən asılı olmayaraq sabit dt ilə irəlilətmək.
numerical integration
Diferensial tənliyi addım-addım həll etmək. Explicit Euler enerji «yaradır»; semi-implicit Euler və Verlet daha sabitdir.
determinism
Eyni başlanğıc + eyni seed = eyni nəticə. Onsuz xəta təkrarlanmır, test yazılmır.
dimensional analysis
Vahidləri yoxlamaq: m/s² ilə millisaniyəni vurmaq nəticəni 1000 dəfə səhv edir.
model / view separation
Model hesablayır, görünüş yalnız çəkir. Görünüş heç vaxt vəziyyəti dəyişmir.
conservation check
Enerji və ya impuls kimi saxlanmalı olan kəmiyyətin zamanla dəyişmədiyini yoxlamaq.

İ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.

prompt
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

  1. 1Layihəndəki bir simulyasiya və ya hesablamanı seç (yoxdursa, sadə atılan cisim qur).
  2. 2step funksiyasını saf funksiya kimi ayır.
  3. 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.
  4. 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