ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. 
ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C#)

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ слово delegate ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ TEquations ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ классам (Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°ΠΌ), полями ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылки Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ сигнатуры. Π’Π΅Ρ€ΠΌΠΈΠ½ сигнатура ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΈ описании класса Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° сигнатура указываСтся Π² ΡΠ°ΠΌΠΎΠΌ описании. Π’Π°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, полями Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылки… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C#) (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠŸΡ€ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΌ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ физичСских процСссов Π² Π½Π°ΡƒΡ‡Π½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π²Ρ‹ΠΊΠΈ программирования Π² ΡΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… срСдах с ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ соврСмСнных языков ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹Ρ… классов.

Π’ Π½Π°ΡΡ‚оящСС врСмя Π½Π° ΡΠΌΠ΅Π½Ρƒ ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ Win32, созданной Π² Π½Π°Ρ‡Π°Π»Π΅ 90-Ρ‹Ρ… Π³ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ основу OS Windows, ΠΏΡ€ΠΈΡˆΠ»Π° новая Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° .NET (читаСтся «Π΄ΠΎΡ‚-Π½Π΅Ρ‚»; ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти ΠΊΠ°ΠΊ «ΡΠ΅Ρ‚Π΅Π²ΠΎΠ΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅»).

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° .NET создана Π² Π½Π°Ρ‡Π°Π»Π΅ 2000;Ρ‹Ρ… Π³ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ классов. Π’ Π½Π°ΡΡ‚оящСС врСмя Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° .NET составляСт основу ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Π½ΠΎΠ²ΠΎΠ³ΠΎ поколСния. Настоящий курс Π·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ с Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ .NET ΠΈ ΡΠ·Ρ‹ΠΊΠΎΠΌ программирования C# (читаСтся «ΡΠΈ-ΡˆΠ°Ρ€ΠΏ»; ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти ΠΊΠ°ΠΊ «Π½Π° ΠΏΠΎΠ» Ρ‚ΠΎΠ½Π° Π²Ρ‹ΡˆΠ΅ си», ΠΈΠ»ΠΈ «ΡΠΈ-Π΄ΠΈΠ΅Π·»), Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ Π² Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π΅.

ΠΠ΅Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² C#. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IIntegrator.

ΠŸΡ€ΠΈ числСнной симуляции физичСских процСссов часто встрСчаСтся ситуация, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ матСматичСская модСль ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ условиями, ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ Коши. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, рассмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ класс интСгрирования систСмы Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ C#.

Π€ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Коши выглядит довольно просто.

Π”Π°Π½Π° систСма N ΠΎΠ±Ρ‹ΠΊΠ½ΠΎΠ²Π΅Π½Π½Ρ‹Ρ… Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ 1-ΠΎΠ³ΠΎ порядка Π²ΠΈΠ΄Π°.

dyi/dt = fi (t, y1, y2,…, yN).

с N Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΌΠΈ функциями yi (t).

Π”Π°Π½Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия — значСния нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ yi0 Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ t = t0.

НСобходимо ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ yi Π² Π»ΡŽΠ±ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ t.

ΠŸΡ€Π°Π²Ρ‹Π΅ части Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ. Π’ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ t, y1, y2,…, yN Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ fi ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… dyi. Π­Ρ‚ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° fi (t, y1, y2,…, yN), Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅, ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚, ΠΊΠ°ΠΊ говорят, Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

ΠŸΡ€ΠΈ составлСнии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ класс ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠΌΠ΅Π» доступ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ Число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ N;

ΠœΠ΅Ρ‚ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ fi (t, y1, y2,…, yN) Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅;

ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия;

ΠŸΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ проводится ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅;

ΠœΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСгрирования Π΄ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ;

НаконСц, ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставит ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄ΠΎΠΌ Π² Ρ…ΠΎΠ΄Π΅ процСсса интСгрирования. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊ называСмая «Ρ„ункция ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°» (callback function), ΠΈΠ»ΠΈ «ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события».

Π’ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° понадобятся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°, Π½ΠΎ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ являСтся, ΠΏΠΎΠΆΠ°Π»ΡƒΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠΌ.

Π―Π·Ρ‹ΠΊ C# позволяСт ΡƒΠΆΠ΅ Π½Π° ΡΡ‚ΠΎΠΌ, ΡΡ‚ΠΎΠ»ΡŒ ΠΎΠ±Ρ‰Π΅ΠΌ этапС программирования Π·Π°Π΄Π°Ρ‡ΠΈ, Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ классы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ позволят ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΊΠΎΠ΄Π°, Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для Π΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. На ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ сформулированных Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ «ΠΈΠ½Ρ‚СрфСйс» — ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ абстрактный класс, состоящий лишь ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² Π»ΡŽΠ±ΠΎΠΌ классС, Ρ€Π΅ΡˆΠ°ΡŽΡ‰Π΅ΠΌ ΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ.

НазовСм наш интСрфСйс IIntegrator. Π’ ΡΠ·Ρ‹ΠΊΠ΅ C# всС ΠΈΠΌΠ΅Π½Π° интСрфСйсов принято Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Π±ΡƒΠΊΠ²Ρ‹ I. Бинтаксис описания интСрфСйса выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

public interface IIntegrator.

{.

// Π—Π΄Π΅ΡΡŒ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‡Π»Π΅Π½Ρ‹ интСрфСйса.

}.

Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹Π΅ слова Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΠ»ΡƒΠΆΠΈΡ€Π½Ρ‹ΠΌ ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠΌ. ОписаниС интСрфСйса IIntegrator вмСстС с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ классами Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠΈ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ классов. Π‘Π»ΡƒΠΆΠ΅Π±Π½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ public являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² доступа. Он ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ описаниС интСрфСйса Π±ΡƒΠ΄Π΅Ρ‚ доступно Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΡΡΡ‹Π»Π°ΡŽΡ‰Π΅ΠΌΡƒΡΡ Π½Π° Ρ‚Ρƒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ это описаниС размСщаСтся.

ОписаниС Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ‡Π»Π΅Π½ΠΎΠ² интСрфСйса Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ описаниС интСрфСйса ΠΎΡ‚ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… классов, описываСмых Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅ (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅). Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠ΄Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π»ΠΈΡΡ‚ΡŒ Π½Π° Π΅Π³ΠΎ Ρ‚Ρ€Π°Π½ΡΠ»ΡΡ†ΠΈΡŽ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ послС Π΄Π²ΠΎΠΉΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ° // (double slash) ΠΈ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° строки.

Π’ ΠΈΠ½Ρ‚СрфСйсС IIntegrator Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ свойство — число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ N. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚ ΠΌΡ‹ ΠΎΠΏΠΈΡˆΠ΅ΠΌ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π»Π΅Π½ΠΎΠ² интСрфСйса — Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ свойства (property).

ushort N { get;}.

Π’Π°ΠΊ Π² C# выглядит описаниС абстрактного (Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ) свойства.

ВсС Ρ‡Π»Π΅Π½Ρ‹ интСрфСйсов ΠΈΠΌΠ΅ΡŽΡ‚ доступ public, ΠΈ ΡΡ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Π½ΠΈΠ³Π΄Π΅ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ Ρ‡Π»Π΅Π½ΠΎΠ² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся.

Бвойства Π² C# - это ΠΏΠ°Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² доступа set ΠΈ get. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступа ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ (set) ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ (get) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ свойства. ΠœΠ΅Ρ‚ΠΎΠ΄ установки set ΠΈΠΌΠ΅Π΅Ρ‚ нСявный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅ΠΌΡ‹ΠΉ слуТСбным словом value. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ value являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ Ρ‚ΠΈΠΏΠ° свойства. Он ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π² ΡΠ΅Π±Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ пСрСдаСтся свойству ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ присваивания, Ссли имя свойства находится Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°. Π’ ΡΠ·Ρ‹ΠΊΠ΅ C# ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄ простого Π·Π½Π°ΠΊΠ° равСнства =. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ запись N = 5, ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ Π² ΠΊΠΎΠ΄Π΅ C#, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ свойству с ΠΈΠΌΠ΅Π½Π΅ΠΌ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5.

Π‘Ρ€Π°Π·Ρƒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Π½Π°ΡˆΠ΅ΠΌ случаС свойства N Ρ‚Π°ΠΊΠΎΠ΅ присваиваниС оказалось Π±Ρ‹ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ. Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ свойства N ΠΎΡ‚сутствуСт ΠΌΠ΅Ρ‚ΠΎΠ΄ set. А ΡΡ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ интСрфСйсом IIntegrator прСдполагаСтся рСализация свойства N Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ. ΠœΠ΅Ρ‚ΠΎΠ΄ get свойства Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° свойства, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ «Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚» Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания, Π³Π΄Π΅ свойство находится Π² ΠΏΡ€Π°Π²ΠΎΠΉ части. НапримСр, curN = N, Π³Π΄Π΅ curN ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ (current) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойства N.

Π’ΠΈΠΏ ushort описанного свойства N ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ свойство N Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ любоС Ρ†Π΅Π»ΠΎΠ΅ Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число, мСньшСС 65 536.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ описаниС свойства числа ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ N Π² Ρ„ΠΎΡ€ΠΌΠ΅ «ΡΠ²ΠΎΠΉΡΡ‚Π²Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния» ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ классов, основанных Π½Π° ΠΈΠ½Ρ‚СрфСйсС IIntegrator (говорят, «ΠΊΠ»Π°ΡΡΡ‹, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйс»), ΡƒΠΆΠ΅ ΠΏΡ€ΠΈ своСм конструировании Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ΠΈ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ нСобходимости Π² ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ значСния числа ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Π½Π° ΠΏΡ€ΠΎΡ‚яТСнии ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ.

Π’ΠΎ ΠΆΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΈ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ свойству интСрфСйса IIntegrator.

TEquations Equations { get;}.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ свойство Equations Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ссылку Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. Π’ΠΈΠΏ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈΠΌΠ΅Π΅Ρ‚ имя TEquations ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ описан Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π²Π½Π΅ скобок, содСрТащих Ρ‡Π»Π΅Π½Ρ‹ интСрфСйса IIntegrator.

ОписаниС Ρ‚ΠΈΠΏΠ° TEquations ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄.

public delegate void TEquations.

(.

double t, //нСзависимая пСрСмСнная.

double [ ] y, //массив Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

double [ ] localVector //массив ΠΏΡ€Π°Π²Ρ‹Ρ… частСй ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

);

Π£ΠΆΠ΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ Π½Π°ΠΌ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа public ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ TEquations доступСн всСм прилоТСниям, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΠΌΡΡ Π½Π° Π³ΠΎΡ‚ΠΎΠ²ΡΡ‰ΡƒΡŽΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ слово delegate ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ TEquations ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ классам (Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°ΠΌ), полями ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ ссылки Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ сигнатуры. Π’Π΅Ρ€ΠΌΠΈΠ½ сигнатура ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠΎΠ²ΠΎΠΊΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. ΠŸΡ€ΠΈ описании класса Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° сигнатура указываСтся Π² ΡΠ°ΠΌΠΎΠΌ описании. Π’Π°ΠΊ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС, полями Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ссылки Π½Π° Π»ΡŽΠ±ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚. На ΡΡ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ void. ΠœΠ΅Ρ‚ΠΎΠ΄, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ссылаСтся Π΄Π΅Π»Π΅Π³Π°Ρ‚, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ t Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° double, Π° Π΄Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… y ΠΈ localVector Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° double ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹. На ΡΡ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ скобки [ ]. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° double хранят ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π»Π΅ΠΆΠΈΡ‚ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [5.0Π§10−324; 1.7Π§10 308].

Из ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ария ясСн смысл этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ². ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚ΠΈΠΏΠ° double пСрСдаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π΅ структуры, описанной Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ .NET ΠΏΠΎΠ΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ Double, содСрТащСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° t ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ 8 Π±Π°ΠΉΡ‚. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ‚ΠΈΠΏΠ° массива double [ ] ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ пСрСдаСтся адрСс области памяти, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ располоТСны элСмСнты массива. Π”Π»ΠΈΠ½Π° адрСса Π² ΡΠΈΡΡ‚Π΅ΠΌΠ΅ с 32-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ адрСсами 4 Π±Π°ΠΉΡ‚Π°.

Π˜Ρ‚Π°ΠΊ, свойства N ΠΈ Equations ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ систСму Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ эти свойства Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния послС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ (Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ) интСрфСйс IIntegrator. ΠŸΡ€ΠΈ этом свойство N Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, содСрТимоС 2-Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠ³ΠΎ поля структуры UInt16 Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET (ushort — псСвдоним этого Ρ‚ΠΈΠΏΠ°), Π° ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ Equations — 4-Π΅Ρ… Π±Π°ΠΉΡ‚ΠΎΠ²ΡƒΡŽ ссылку Π½Π° ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ€ класса Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° TEquations.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ IIntegrator ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ свойства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для задания Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… условий интСгрирования ΠΈ Ρ‡Ρ‚Сния нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° послС, ΠΈΠ»ΠΈ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ интСгрирования ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. ВсС эти свойства ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎ свойство, снабТСнноС индСксом. Π’Π°ΠΊΠΎΠ΅ свойство называСтся индСксатором. По ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ C# описаниС индСксатора ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½Π° интСрфСйса ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄.

double this [ushort index] { get; set;}.

Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ слово this Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈ описании индСксатора. Оно ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ имя свойства Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, свойством ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ являСтся. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° пСрСдаСтся Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈ установкС значСния ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ этого значСния. ΠŸΡƒΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, описан ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° IIntegrator (ΠΈΠ»ΠΈ класса-наслСдника ΠΎΡ‚ IIntegrator) с ΠΈΠΌΠ΅Π½Π΅ΠΌ integrator. Π’ΠΎΠ³Π΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания.

integrator[2] = -0.5;

Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ set индСксатора this, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π΅ΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° index Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 2, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -0.5 Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° value. Π’Π°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, сопоставив Π΅ΠΉ ΠΈΠ½Π΄Π΅ΠΊΡ 0, ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, сопоставив ΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΡ‹ ΠΎΡ‚ 1 Π΄ΠΎ N.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, скаТСм, Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ нСзависимой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½Π΅ΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ y3 Ρ‚ΠΈΠΏΠ° double, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания Π²ΠΈΠ΄Π°.

y3 = integrator[3];

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС Ρ‚ΠΈΠΏ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° index индСксатора (Π² Π½Π°ΡˆΠ΅ΠΌ случаС ushort), ΠΊΠ°ΠΊ ΠΈ Ρ‚ΠΈΠΏ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π² Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ double) ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌΠΈ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ index являСтся Π½Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ элСмСнта массива, Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² set ΠΈ get индСксатора.

Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ всСгда производится с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ интСрфСйс IIntegrator ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π»Π΅Π½ Ρ‚ΠΈΠΏΠ°.

double Tolerance { get; set;}.

Класс-наслСдник Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° доступа set ΠΈ get свойства Tolerance (ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ).

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅.

CallBackEventHandler CallBack { get; set;}.

ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ†Π΅ΡΡ интСгрирования Π² Ρ‚ΠΎΡ‡ΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ классом, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ интСрфСйс IIntegrator.

Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСгрирования Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ выполнСния довольно большого Ρ†ΠΈΠΊΠ»Π° вычислСний. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅ сСбС, Ρ‡Ρ‚ΠΎ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° ΠΈΠ· Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ yi (t) ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ сущСствСнного измСнСния Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ мСньший ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ интСгрирования. Π’ΠΎΠ³Π΄Π°, для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ, Ρ†ΠΈΠΊΠ» вычислСний Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ количСства шагов. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π³Π΄Π΅-Π»ΠΈΠ±ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° интСгрирования, ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΅Π³ΠΎ шагС. Π’ ΡΡ‚ΠΎΠΌ случаС класс, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ интСгрирования, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° (callback function). ΠŸΠΎΡΡ‚Π°Π²ΠΈΠ² Π²Ρ‹Π·ΠΎΠ² этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Ρ†ΠΈΠΊΠ»Π° вычислСний (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ шага Ρ†ΠΈΠΊΠ»Π°), ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ доступом ΠΊ ΡΡ‚ΠΎΠΌΡƒ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, окончания шага Ρ†ΠΈΠΊΠ»Π°). Бвойство CallBack устанавливаСт ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚Π° функция являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ класса-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ здСсь CallBackEventHandler — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ события ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°.

ОписаниС класса CallBackEventHandler слСдуСт ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π²Π½Π΅ скобок с Ρ‡Π»Π΅Π½Π°ΠΌΠΈ интСрфСйса IIntegrator.

public delegate void.

CallBackEventHandler (Object Sender, CallBackEventArgs e);

Как ΠΈ Π² ΡΠ»ΡƒΡ‡Π°Π΅ класса-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° TEquations Π² ΡΡ‚ΠΎΠΌ описании ΡƒΠΊΠ°Π·Π°Π½Π° сигнатура ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Ρ‚ΠΈΠΏΠΎΠΌ CallBackEventHandler. Богласно описанию Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° рассматриваСмого события, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Ρ‚ΠΈΠΏΠ° Object ΠΈ CallBackEventArgs ΠΈ ΡΡ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (void). Π’Π°ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² являСтся стандартным Π² ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ .NET, хотя ΠΈ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

Π’ΠΈΠΏ Object являСтся Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΌ классом — ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… классов Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Sender (ΠΏΠΎΡΡ‹Π»ΡŒΠ½Ρ‹ΠΉ) ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ любого Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΡ‹Π»ΡŒΠ½Ρ‹ΠΌ являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ событиС, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связан Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°-Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°, ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ integrator, описанный Π²Ρ‹ΡˆΠ΅. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π²Π½ΡƒΡ‚Ρ€ΠΈ своСго Ρ†ΠΈΠΊΠ»Π° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Sender ссылку Π½Π° ΡΠ΅Π±Ρ (this). НиТС ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ этот Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π°.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, Π½Π°Π·Π²Π°Π½Π½Ρ‹ΠΉ e (ΠΎΡ‚ ΡΠ»ΠΎΠ²Π° event — событиС), ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ CallBackEventArgs (Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ события ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°).

ОписаниС класса CallBackEventArgs, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΠ»ΠΈ Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²Π΅ΡΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄.

public class CallBackEventArgs: EventArgs.

{.

public bool Stop;

}.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ описания класса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΊΠ°. Имя класса-ΠΏΡ€Π΅Π΄ΠΊΠ° указываСтся послС ΠΈΠΌΠ΅Π½ΠΈ класса-наслСдника Ρ‡Π΅Ρ€Π΅Π· Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅.

Π—Π΄Π΅ΡΡŒ ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ являСтся класс EventArgs, взятый Π½Π°ΠΌΠΈ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса EventArgs ΠΈ Π΅Π³ΠΎ наслСдников ΡΠ²Π»ΡΡŽΡ‚ΡΡ стандартными ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² событий Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET. Π­Ρ‚ΠΈ классы содСрТат Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ. Класс-ΠΏΡ€Π΅Π΄ΠΎΠΊ пуст Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΏΠΎΠ»Π΅ΠΉ — абстрактноС событиС Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ…. Но ΠΊΠ»Π°ΡΡΡ‹-наслСдники ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ поля, пСрСносящиС Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΡΠΎΠ±Ρ‹Ρ‚ΠΈΠΈ.

Π’ Π½Π°ΡˆΠ΅ΠΌ случаС наслСдник CallBackEventArgs ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ Stop Ρ‚ΠΈΠΏΠ° bool. ПолС Stop ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π²Π° значСния true ΠΈ false. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ послС создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса CallBackEventArgs Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля Stop Ρ€Π°Π²Π½ΠΎ false. Но ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, написав собствСнный ΠΊΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π° true. Π’ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса IIntegrator Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ сигналом ΠΊ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΡŽ Ρ†ΠΈΠΊΠ»Π° интСгрирования. Π’ ΡΡ‚ΠΎΠΌ случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ смоТСт ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ события, мСняя ΠΏΠΎΠ»Π΅ stop ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° e ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий.

На ΡΡ‚ΠΎΠΌ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π΅ ΠΌΡ‹ Π΅Ρ‰Π΅ Ρ€Π°Π· остановимся ΠΏΡ€ΠΈ обсуТдСнии ΠΊΠΎΠ΄Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса. Π—Π΄Π΅ΡΡŒ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΡΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° событий Π΄Π΅Π»Π΅Π³Π°Ρ‚Ρƒ CallBackEventHandler, Ρ‚ΠΈΠΏΠΎΠΌ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ класс CallBackEventArgs, Π½ΠΎ ΠΈ Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄ΠΎΠΊ — класс EventArgs. Π­Ρ‚ΠΎ допускаСтся синтаксисом ΠΈ Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ся свойством контравариантности Π΄Π΅Π»Π΅Π³Π°Ρ‚Π°. ΠŸΡ€Π°Π²Π΄Π° Π² ΡΡ‚ΠΎΠΌ случаС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π»ΠΈΡˆΠΈΡ‚ сСбя возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ stop, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ отсутствуСт Ρƒ ΠΊΠ»Π°ΡΡΠ° EventArgs.

Возвратимся ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡŽ Ρ‡Π»Π΅Π½ΠΎΠ² интСрфСйса IIntegrator. ПослСдним Π΅Π³ΠΎ Ρ‡Π»Π΅Π½ΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Π΅Ρ€Π΅Ρ‚ Π½Π° ΡΠ΅Π±Ρ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΠΎ Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠΌΡƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ систСмы Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ условиями. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΡ‹ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ Π² Π²ΠΈΠ΄Π΅.

bool IntegrateTo (double tEnd);

ΠœΠ΅Ρ‚ΠΎΠ΄ IntegrateTo ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ tEnd ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true ΠΈΠ»ΠΈ false Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, остановлСно Π»ΠΈ Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ (false), ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ СстСствСнным ΠΏΡƒΡ‚Π΅ΠΌ (true) ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Ρ‹ значСния нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ tEnd.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ описанных классов Π½Π° Ρ„Π°ΠΉΠ»Π΅ IIntegrator.txt.

Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° присутствуСт строка.

using System;

Π­Ρ‚ΠΎ ссылка Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ классы ΠΈΠ· ΠΏΡ€ΠΎΡΡ‚ранства ΠΈΠΌΠ΅Π½ System. Π­Ρ‚ΠΎ пространство ΠΈΠΌΠ΅Π½ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ .NET. Π’ Ρ‡Π°ΡΡ‚ности, Π² ΠΏΡ€ΠΎΡΡ‚ранствС ΠΈΠΌΠ΅Π½ System описан ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°ΠΌΠΈ класс EventArgs.

ΠŸΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π° ΠΈΠΌΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ логичСски Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ участки ΠΊΠΎΠ΄Π°. НапримСр, ΠΎΡ‚Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° классов ΠΎΠ΄Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ классов Π΄Ρ€ΡƒΠ³ΠΎΠΉ. Π’ Ρ‡Π°ΡΡ‚ности, вСсь написанный Π½Π°ΠΌΠΈ ΠΊΠΎΠ΄ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² ΠΏΡ€ΠΎΡΡ‚ранство ΠΈΠΌΠ΅Π½ namespace Integrators. Π­Ρ‚ΠΎ имя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π΄Π°Π»ΠΈ создаваСмой Π½Π°ΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ². Для внСшнСго ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ имя интСрфСйса IIntegrator выглядит ΠΊΠ°ΠΊ Integrators.IIntegrator. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ‚ΠΎΡ‡ΠΊΠ° соСдиняСт Π² ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° класса IIntegrator ΠΈ ΠΈΠΌΡ пространства ΠΈΠΌΠ΅Π½ Integrators. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π² ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Ρ„Π°ΠΉΠ»Π΅ ΠΊΠΎΠ΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° ΠΊΠ»Π°ΡΡΡ‹ нашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΎΠ½ ΡΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Π±Ρ€Π°Ρ‚ΡŒ строку.

using Integrators;

А Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ ΠΈΠΌΠ΅Π½Π° Π½Π°ΡˆΠΈΡ… классов IIntegrator, CallBackEventHandler ΠΈ Ρ‚. Π΄.

НаконСц, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ коммСнтирования ΠΊΠΎΠ΄Π°, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ„Π°ΠΉΠ»Π΅. ΠšΡ€ΠΎΠΌΠ΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ коммСнтария, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ slash //, Π² ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, присутствуСт ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ slash ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΡƒΠ³Π»ΠΎΠ²Ρ‹ΠΌΠΈ скобками.

НапримСр,.

/// Класс Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° события, Π½Π°ΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰Π΅Π³ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ.

/// Ρ†ΠΈΠΊΠ»Π° интСгрирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага).

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ срСдой программирования для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ справочной систСмы Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ создаваСмых классов. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, давая Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π΅ΠΌ основу для справочной систСмы своСго ΠΊΠΎΠ΄Π°.

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ΡƒΠ³Π»ΠΎΠ²Ρ‹ΠΌΠΈ скобками, Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ «Ρ‚эгами». Π­Ρ‚ΠΈ тэги ΡΠ²Π»ΡΡŽΡ‚ΡΡ составной Ρ‡Π°ΡΡ‚ΡŒΡŽ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ языка общСния, Π½Π°Π·Π²Π°Π½Π½ΠΎΠ³ΠΎ XML (eXtensible Markup Language — «Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΉ язык Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΎΠΊ»). Π―Π·Ρ‹ΠΊ XML ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ срСдой для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΅Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΠ³ΠΎ языка HTML, построСнного Π½Π° Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ΄Π΅Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΎΠΊ-тэгов, язык XML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ тэги, Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ Π΅Π³ΠΎ схСмой. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, тэги языка XML ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ Π΄Π»Ρ указания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Π° Π΄Π»Ρ опрСдСлСния ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ части — Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊ Π² Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ «ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ» ΠΈ «Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ» тэги говорят ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ находится краткая справка ΠΎ ΠΊΠ»Π°ΡΡΠ΅, описанном Π½ΠΈΠΆΠ΅. Π’Π΅Π·Π΄Π΅ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΈ ссылкС Π½Π° ΠΊΠ»Π°ΡΡ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ, срСда Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ справку Π½Π° ΡΠΊΡ€Π°Π½.

ОписаниС Π»ΡŽΠ±Ρ‹Ρ… класса, ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ, свойств, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ справкой Ρ‚ΠΈΠΏΠ°. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚ΠΎΠΌΡƒ тэг позволяСт Π²Π½ΠΎΡΠΈΡ‚ΡŒ примСчания ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡƒ Ρ‡Π»Π΅Π½Ρƒ ΠΊΠΎΠ΄Π°, ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅.

/// Π₯Ρ€Π°Π½ΠΈΡ‚ Ρ„Π»Π°Π³ прСрывания интСгрирования.

/// Π‘Π»ΡƒΠΆΠΈΡ‚ для прСрывания интСгрирования, Ссли установлСно Π² true.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€

/// Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ tEnd.

/// Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ,.

/// Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ.

/// ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true,.

/// Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΡ€Π΅Ρ€Π²Π°Π½Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ события — false.

ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ описаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠΏΡ€ΠΎΠ²ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ справкой ΠΎ Π΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Ρ… (тэг.

РСализация ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π° абстрактным классом Рассмотрим ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ этап Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса IIntegrator, спроСктировав ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ абстрактный класс TIntegrator, Π½Π°ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ этот интСрфСйс.

ОписаниС класса синтаксичСски ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ интСрфСйса. Класс, ΠΊΠ°ΠΊ ΠΈ ΠΈΠ½Ρ‚СрфСйс, ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ доступа, ΠΈ Π²ΡΠ΅ Ρ‡Π»Π΅Π½Ρ‹ класса, ΠΊΠ°ΠΊ ΠΈ Ρ‡Π»Π΅Π½Ρ‹ интСрфСйса, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

public abstract class TIntegrator: IIntegrator.

{.

}.

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ класса ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ указываСтся слуТСбноС слово class. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΡƒΠΊΠ°Π·Π°Π½ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ abstract, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс TIntegrator Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Вспомним, Ρ‡Ρ‚ΠΎ Ρƒ ΠΈΠ½Ρ‚СрфСйса всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹. Абстрактный класс, ΠΊΠ°ΠΊ ΠΈ ΠΈΠ½Ρ‚СрфСйс, Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Но, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΈΠ½Ρ‚СрфСйса, абстрактный класс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ поля ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ любоС количСство ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π². Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ класса TIntegrator ΡƒΠΊΠ°Π·Π°Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΈΠ½Ρ‚СрфСйса IIntegrator. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ класс TIntegrator Π±Π΅Ρ€Π΅Ρ‚ Π½Π° ΡΠ΅Π±Ρ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ всС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°, описанныС Π² ΠΈΠ½Ρ‚СрфСйсС IIntegrator. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли наш класс TIntegrator Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ (хотя Π±Ρ‹ Π² Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅) ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Ρ‡Π»Π΅Π½ΠΎΠ² интСрфСйса IIntegrator, транслятор Π½Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠΎΠ΄.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ‡Π»Π΅Π½Ρ‹ класса TIntegrator.

Π’ Π½Π°Ρ‡Π°Π»Π΅ опишСм ряд постоянных ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² класса TIntegrator ΠΈ Π΅Π³ΠΎ наслСдников.

public const double minTolerance = 1e-15;

public const double maxTolerance = 0.01;

public const double defTolerance = 1e-6;

protected internal const double epsilon = 1e-16;

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹Π΅ поля ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ const. Π˜Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π½Π° ΡΡ‚Π°Π΄ΠΈΠΈ конструирования класса ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏΠ° Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ эти значСния фиксированы для всСх ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса ΠΈ Π΅Π³ΠΎ наслСдников, Ссли ΠΈΠΌΠ΅ΡŽΡ‚ достаточный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ Π΄Π²Π° поля minTolerance, maxTolerance ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ допустимыС значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ интСгрирования Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. ПолС defTolerance опрСдСляСт ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ Π² Π»ΡŽΠ±ΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π°, Ссли это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π·Π°Π΄Π°Π½ΠΎ явно.

Π­Ρ‚ΠΈ Ρ‚Ρ€ΠΈ постоянных поля ΠΈΠΌΠ΅ΡŽΡ‚ максимально высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа public. Они Π²ΠΈΠ΄Π½Ρ‹ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ класса TIntegrator ΠΈ Π΅Π³ΠΎ наслСдников, Π½ΠΎ ΠΈ Π²ΡΠ΅ΠΌ прилоТСниям, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ описан класс TIntegrator. Π’ Π»ΡŽΠ±ΠΎΠΉ части ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π² Ρ‡Π°ΡΡ‚ности, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

double d = TIntegrator. maxTolerance;

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ этого ΠΊΠΎΠ΄Π° помСстит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ постоянного поля maxTolerance Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ d.

Однако запись вида.

TIntegrator.maxTolerance = 0.1;

ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΠΎΡˆΠΈΠ±ΠΊΠ΅ компиляции, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ постоянного поля Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½ΠΈΠ³Π΄Π΅ ΠΈ Π½ΠΈΠΊΠ΅ΠΌ.

ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ epsilon ΠΈΠΌΠ΅Π΅Ρ‚ смысл минимальной ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅ΠΉ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса TIntegrator ΠΈ Π΅Π³ΠΎ наслСдников. ПолС epsilon ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа protected internal. Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ доступа protected internal позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π΅ epsilon Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΡΠ°ΠΌΠΎΠΌ классС TIntegrator ΠΈ Π΅Π³ΠΎ наслСдниках, описанных Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, Ρ‡Ρ‚ΠΎ класс TIntegrator.

Π”Π°Π»Π΅Π΅ Π±ΡƒΠ΄Π΅ΠΌ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ поля ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π° класса TIntegrator.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ класс TIntegrator Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° свойства N ΠΈ Equations интСрфСйса IIntegrator.

protected internal ushort n;

public ushort N { get { return n; } }.

protected internal TEquations equations;

public TEquations Equations { get { return equations; } }.

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, поля n ΠΈ equations, хранящиС Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ значСния числа ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ ΡΡΡ‹Π»ΠΊΡƒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа protected internal, Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΈΠΉ, Ρ‡Π΅ΠΌ свойства. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ свойства N ΠΈ Equations ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ лишь Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ значСния этих ΠΏΠΎΠ»Π΅ΠΉ, Π½ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΡ…. Вакая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° программирования прСпятствуСт Π±Π΅Π· Π½ΡƒΠΆΠ΄Ρ‹ Ρ€ΠΈΡΠΊΠΎΠ²Π°Ρ‚ΡŒ значСниями Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ эксплуатации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

ΠœΠ΅Ρ‚ΠΎΠ΄ доступа get Π² Ρ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ свойствС содСрТит Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get, ΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π”Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ поля.

protected internal double [ ] currY;

protected internal double currt;

Они ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для хранСния Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ (current) Π²Π΅ΠΊΡ‚ΠΎΡ€Π° нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ currY ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt. ПолС currY описано ΠΊΠ°ΠΊ ссылка Π½Π° ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° double. На ΡΡ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Π΅ скобки. Π”Π»ΠΈΠ½Π° массива Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Π°. Она устанавливаСтся послС задания числа ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½Π° числу ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ n. НумСрация элСмСнтов массива начинаСтся индСксом 0, поэтому фактичСски ΠΏΠΎΠ»Π΅ currY Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ ссылка Π½Π° ΠΌΠ°ΡΡΠΈΠ² с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ currY[0],…, currY[n — 1].

ОпишСм Π΅Ρ‰Π΅ Π΄Π²Π° поля ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°.

protected internal double stepSize;

public double StepSize { get { return stepSize; } }.

protected internal ulong equationsCallNmb;

public ulong EquationsCallNmb { get { return equationsCallNmb; } }.

ПолС stepSize Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг интСгрирования. Оно доступно Ρ‚ΠΎΠ»ΡŒΠΊΠΎ наслСдникам класса TIntegrator, описанным Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ классов (ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа protected internal Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ΡΡ‚ΠΎΠΌ). Π•Π³ΠΎ свойство StepSize доступно всСм (ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа public). Но ΡΠ²ΠΎΠΉΡΡ‚Π²ΠΎ StepSize лишь Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля stepSize, ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π΅Π³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ.

ПолС equationsCallNmb Ρ…Ρ€Π°Π½ΠΈΡ‚ показания счСтчика Π²Ρ‹Π·ΠΎΠ²Π° ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ для ΠΎΡ†Π΅Π½ΠΊΠΈ эффСктивности Ρ‚ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° интСгрирования. Π’ΠΈΠΏ ulong опрСдСляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… Ρ†Π΅Π»Ρ‹Ρ… чисСл Π±Π΅Π· Π·Π½Π°ΠΊΠ°, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΡ… 8 Π±Π°ΠΉΡ‚ памяти. ΠŸΡ€Π΅Π΄Π΅Π»Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊΠΈΡ… чисСл ΠΎΡ‚ 0 Π΄ΠΎ 18,446,744,073,709,551,615. ДоступноС всСм свойство EquationsCallNmb Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля equationsCallNmb.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ опишСм ΠΌΠ΅Ρ‚ΠΎΠ΄, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ Π² ΡΠΎΡΡ‚ояниС Π½Π°Ρ‡Π°Π»Π° интСгрирования.

protected internal virtual void Reset ().

{.

stepSize = Double. NaN; equationsCallNmb = 0;

}.

ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ virtual ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset являСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚Ρ‹ (ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹) Π² ΠΊΠ»Π°ΡΡΠ°Ρ…-наслСдниках. Π‘Π»ΡƒΠΆΠ΅Π±Π½ΠΎΠ΅ слово void (пустой Ρ‚ΠΈΠΏ) ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Reset ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ послС своСго выполнСния Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² C# Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ Π² ΠŸΠ°ΡΠΊΠ°Π»Π΅. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ хотя ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², синтаксис языка C# Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ написания ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок послС ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π’ Ρ‚Π΅Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° находится Π΄Π²Π° простых ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваиваСт полю stepSize Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Double.NaN. NaN это постоянноС ΠΏΠΎΠ»Π΅ класса Double (слуТСбноС слово double являСтся псСвдонимом класса Double), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΡΠΎΠ±ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Not a Number ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° double. ЀактичСски это Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСщСствСнного числа Ρ‚ΠΈΠΏΠ° double, ΠΈΠ»ΠΈ прСдставлСниС числа «Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π³ΠΎ значСния». Π”ΠΎ Π½Π°Ρ‡Π°Π»Π° интСгрирования Ρ€Π°Π·ΠΌΠ΅Ρ€ шага stepSize Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ шаг зависит ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… условий ΠΈ ΡΠ°ΠΌΠΈΡ… Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset Π΄Π΅Π»Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ шага stepSize Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΈ ΠΎΠ±Π½ΡƒΠ»ΡΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ equationsCallNmb.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌ индСксатор this, описанный Π² ΠΈΠ½Ρ‚СрфСйсС IIntegrator.

public double this [ushort index].

{.

get.

{.

return index == 0? currt: currY [index — 1];

}.

set.

{.

if (index == 0) currt = value;

else currY [index — 1] = value;

// Π›ΡŽΠ±ΠΎΠ΅ внСшнСС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΠΉ currt ΠΈΠ»ΠΈ currY.

// ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°ΡŽΡ‚ΡΡ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия.

// Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Reset,.

// «ΡΡ‚ΠΈΡ€Π°ΡŽΡ‰Π΅Π³ΠΎ» ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаг интСгрирования.

if (!Double.IsNaN (stepSize)) Reset ();

}.

}.

Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

index == 0? currt: currY [index — 1].

ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get называСтся условным. Π’ Π½Π΅ΠΌ находится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния ==, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠΉ «Ρ€Π°Π²Π΅Π½ Π»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ index Π½ΡƒΠ»ΡŽ»? ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ сравнСния Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false. Если это true, Ρ‚ΠΎ ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ слСдуСт Π·Π° Π·Π½Π°ΠΊΠΎΠΌ вопроса? (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС currt). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ слСдуСт Π·Π° Π·Π½Π°ΠΊΠΎΠΌ двоСточия: (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС элСмСнт массива currY [index — 1]). Π’Π°ΠΊΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ индСксатор класса Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΈ Π½ΡƒΠ»Π΅Π²ΠΎΠΌ индСксС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt, Π° ΠΏΡ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… значСниях Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ нСизвСстной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Π°ΠΊΠΎΠ΅ описаниС индСксатора ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ эффСкту. ΠŸΡƒΡΡ‚ΡŒ описан ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ integrator класса TIntegrator (Π²Π΅Ρ€Π½Π΅Π΅, наслСдника класса TIntegrator, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сам класс TIntegrator абстрактный ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²). Π’ΠΎΠ³Π΄Π° использованиС индСксатора ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

double d = integrator[5];

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ d Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ get индСксатора, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ 5 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° index. Богласно ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹ΡˆΠ΅ описанию индСксатора, это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ 4-Ρ‹ΠΉ элСмСнт массива нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ currY.

Но Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Ρƒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π° Π·Π°Π΄Π°Π½ΠΎ всСго 4 уравнСния ΠΈ ΠΌΠ°ΡΡΠΈΠ² currY ΠΈΠΌΠ΅Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΡ‚ 0 Π΄ΠΎ 3? ΠŸΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ останов ΠΏΠΎ ΠΎΡˆΠΈΠ±ΠΊΠ΅. Π’ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚, ΠΊΠ°ΠΊ говорят, ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация, связанная с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π° ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ элСмСнт массива Π²Π½Π΅ Π·ΠΎΠ½Ρ‹ Π΅Π³ΠΎ Π³Ρ€Π°Π½ΠΈΡ†.

Как Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get. Усилим условиС, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° index, подставив Π²ΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ условного выраТСния Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ условноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π°.

index<=n? currY [index — 1]: Double.NaN.

ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° get Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΈΠ΄.

return index == 0? currt: index<=n? currY [index — 1]: Double. NaN;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ индСксатор ΠΏΡ€ΠΈ любом индСксС, ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‰Π΅ΠΌ число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ (Double.NaN). Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚.

ΠŸΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ set индСксатора this.

ΠœΠ΅Ρ‚ΠΎΠ΄ set содСрТит условныС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Ρ‚ΠΈΠΏΠ° if… else ΠΈ Ρ‚ΠΈΠΏΠ° if. Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅ формулируСтся Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΡΡ‚ΠΎ условиС равСнства Π½ΡƒΠ»ΡŽ индСкса index == 0. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΡƒΡΠ»ΠΎΠ²ΠΈΠ΅! Double. IsNaN (stepSize) выполняСтся, Ссли ΠΏΠΎΠ»Π΅ stepSize являСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π½Π΅ Ρ€Π°Π²Π½ΠΎ NaN. ΠœΠ΅Ρ‚ΠΎΠ΄ IsNaN класса Double Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ логичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true ΠΈΠ»ΠΈ false Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ этого ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NaN ΠΈΠ»ΠΈ Π½Π΅Ρ‚. Π£Π½Π°Ρ€Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ отрицания ! ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true Π² false ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ условия index == 0 ΠΌΠ΅Ρ‚ΠΎΠ΄ set ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ полю Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ значСния нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ своСго ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° value. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° индСкс Π½Π΅ Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ, выполняСтся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π·Π° ΡΠ»ΠΎΠ²ΠΎΠΌ else. Π—Π΄Π΅ΡΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° value ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set пСрСдаСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ элСмСнту массива Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ currY [index — 1].

Π’ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ классС ΠΌΠ΅Ρ‚ΠΎΠ΄ set индСксатора Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ Π²ΠΈΠ΄Π° (это ΠΏΡ€ΠΈΠΌΠ΅Ρ€!).

integrator[5] = 0.1;

Π’Ρ‹Π·ΠΎΠ² этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° фактичСски сводится ΠΊ Π²Ρ‹Π·ΠΎΠ²Ρƒ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set индСксатора с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ value, Ρ€Π°Π²Π½Ρ‹ΠΌ 0.1, ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ index, Ρ€Π°Π²Π½Ρ‹ΠΌ 5.

Если индСксы массива нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ currY ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹, ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, значСниями 0…3 (систСма содСрТит Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ уравнСния), Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации.

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΠΈΠ»ΠΈΡ‚ΡŒ условиС, Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Π², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π»ΠΎ число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ n. Π­Ρ‚ΠΎ услоТнит условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if… else, ΠΏΡ€ΠΈΠ΄Π°Π² Π΅ΠΌΡƒ Π²ΠΈΠ΄.

if (index == 0) currt = value;

else if (index <= n) currY [index — 1] = value;

Π—Π΄Π΅ΡΡŒ, ΠΊΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ, ΠΏΡ€ΠΈ условии index > n ΠΌΠ΅Ρ‚ΠΎΠ΄ set Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² Π½ΠΎΠ²ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ integrator[5] = 0.1 Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… дСйствий, Ссли число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ мСньшС пяти.

Π’Π΅ΠΌ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈ свойства, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅Ρ€Π΅Π³Π°Ρ‚ΡŒ поля ΠΎΡ‚ Π½Π΅Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ³ΠΎ использования.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, ΠΏΡ€Π°Π²Π΄Π°, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΠΈΡΠ°Π½Π½Ρ‹Ρ… рСализациях ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² set ΠΈ get нСльзя с ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ сообщСниС ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации, Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π·Π±Π΅Ρ€Π΅Ρ‚ся, ΠΏΠΎΠΉΠΌΠ΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ Π΅Π΅. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ ΠΊΠΎΠ΄ выполнится Π±Π΅Π· ΠΏΠΎΠΌΠ΅Ρ… ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½ Π² Π·Π°Π±Π»ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅, считая, Ρ‡Ρ‚ΠΎ Π΅Π³ΠΎ ΠΊΠΎΠ΄ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

Π’ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ if ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset, Ссли ΠΏΠΎΠ»Π΅ stepSize ΠΈΠΌΠ΅Π΅Ρ‚ осмыслСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π΅ NaN). ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ stepSize ΠΎΡ‚ NaN фактичСски ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset Π΅Ρ‰Π΅ Π½Π΅ Π²Ρ‹Π·Ρ‹Π²Π°Π»ΡΡ. Π’Π΅ΠΌ самым ΠΌΠ΅Ρ‚ΠΎΠ΄ Reset вызываСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π»ΠΈΠ±ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΈ любом Ρ‚Π°ΠΊΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ этим ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π·Π°Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия интСгрирования.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ рассмотрСниС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‡Π»Π΅Π½ΠΎΠ² класса TIntegrator.

protected internal double tolerance;

public virtual double Tolerance.

{.

get { return tolerance; }.

set.

{.

tolerance =.

value > maxTolerance? maxTolerance :

value < minTolerance? minTolerance :

value;

}.

}.

Π’Π°ΠΊ описываСтся ΠΏΠΎΠ»Π΅ tolerance, хранящСС Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ интСгрирования, ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΅ΠΌΡƒ свойство Tolerance.

Бвойство Tolerance скрытого поля tolerance доступно всСм. Оно Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ абстрактноС описаниС свойства Tolerance интСрфСйса IIntegrator. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ virtual Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ свойства ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΎ являСтся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ set ΠΈ get ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚Ρ‹, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π² ΠΊΠ»Π°ΡΡΠ°Ρ… — наслСдниках класса TIntegrator.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set свойства Tolerance. Если ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π·Π°Π΄Π°Π΅Ρ‚ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ, Π²Ρ‹Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ постоянными полями maxTolerance ΠΈ minTolerance, Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ tolerance ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° value.

Π’ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΊΠΎΠ΄Π°, ΠΏΡ€Π΅Π΄ΡƒΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π² ΡΡ‚ΠΎΠΌ случаС Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации. Π’ΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ прСдупрСТдаСтся ΠΎ Π½Π°Ρ€ΡƒΡˆΠ΅Π½ΠΈΠΈ Π³Ρ€Π°Π½ΠΈΡ† ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ. Π’ ΡΡ‚ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

if (value > maxTolerance || value < minTolerance).

{.

throw (new ApplicationException (.

" ΠŸΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹."));

}.

tolerance = value;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ выполняСтся полная ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° value, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ. Если это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС максимально допустимого maxTolerance ΠΈΠ»ΠΈ (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ || ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «ΠΈΠ»ΠΈ» Π² C#) мСньшС минимально допустимого minTolerance, Ρ‚ΠΎ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ throw создаСт («Π²Π±Ρ€Π°ΡΡ‹Π²Π°Π΅Ρ‚») ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° throw являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ стандартного класса ApplicationException. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ создаСтся Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π° класса ApplicationException с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ-строкой «ΠŸΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.». Π­Ρ‚Π° строка Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ, ΠΈΠ»ΠΈ сообщСниС ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ΅, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰Π΅ΠΉ возникшСй ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации. ПослС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° throw Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° set прСрываСтся, ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΡ‰Π΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации, Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с Π΅Π³ΠΎ сообщСниСм. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ устанавливаСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² Ρ€Π°ΡΡ‡Π΅Ρ‚Π΅ Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡƒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ. Π‘ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций ΠΌΡ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠΌΡΡ нСсколько ΠΏΠΎΠ·ΠΆΠ΅.

ОпишСм Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса TIntegrator.

protected internal double [ ] startLocalVector;

protected internal virtual void Initialize ().

{.

// БоздаСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° currY ΠΈ.

// рСзСрвируСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ массив Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

currY = new double [n];

// Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива currY Π΄Π΅Π»Π°ΡŽΡ‚ΡΡ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ (NaN, Not a Number).

for (ushort i = 0; i < n; i++) currY [i] = Double. NaN;

// НСзависимая пСрСмСнная дСлаСтся Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ NaN.

currt = Double. NaN;

// БоздаСтся экзСмпляр ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° startLocalVector ΠΈ.

// рСзСрвируСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ массив ΠΏΡ€Π°Π²Ρ‹Ρ… частСй ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

startLocalVector = new double [n];

// ΠŸΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ «ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ».

Tolerance = defTolerance;

}.

ПолС-массив startLocalVector ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса TIntegrator ΠΈ Π΅Π³ΠΎ наслСдников. Π­Ρ‚ΠΎΡ‚ массив Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€Π°Π²ΠΎΠΉ части Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΎΡ†Π΅Π½ΠΊΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага интСгрирования.

Π’ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Initialize с ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΌ доступом ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ поля currY, currt, startLocalVector, ΠΈ tolerance ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ значСния. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Initialize число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ n ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½ΠΎ. Поля-ссылки Π½Π° ΠΌΠ°ΡΡΠΈΠ²Ρ‹ currY ΠΈ startLocalVector ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° new ΠΈ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Π° double [n]. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ числа элСмСнтов массива ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ссылку Π½Π° ΡΡ‚Ρƒ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ полю. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€ сообщаСт всю Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Π΅ΠΌΠΎΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ new.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° for (;;). ВслСд Π·Π° Π½ΠΈΠΌ находится ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΊΠΎΠ΄Π΅ это ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присваивания currY [i] = Double.NaN. Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ «ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ управляСт Ρ†ΠΈΠΊΠ»», ΠΈΠ»ΠΈ, ΠΊΠΎΡ€ΠΎΡ‡Π΅, «Ρ‚Π΅Π»ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π°».

Бинтаксис языка C# Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° Ρ‚ΠΈΠΏΠ° for (;;) ΠΈΠΌΠ΅Π» Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках Ρ‚Ρ€ΠΈ выраТСния, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с Π·Π°ΠΏΡΡ‚ΠΎΠΉ. Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан (ΠΊΠ°ΠΊ Π² Π½Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅). Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ являСтся условиСм выполнСния Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° (Π² Π½Π°ΡˆΠ΅ΠΌ случаС условиС выполнСния Ρ‚Π΅Π»Π° i < n). НаконСц, Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ†ΠΈΠΊΠ»Π° измСняСтся. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° опрСдСляСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ i++. Π’ ΡΠ·Ρ‹ΠΊΠ΅ C# опСрация i++ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ «Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊ i Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ ΠΈ ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ значСния Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ i».

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for (;;) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

сразу послС установки Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния провСряСтся условиС выполнСния Ρ‚Π΅Π»Π°. Если ΠΎΠ½ΠΎ ΡΠΎΠ±Π»ΡŽΠ΄Π°Π΅Ρ‚ΡΡ, Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ выполняСтся, Ссли Π½Π΅Ρ‚, Ρ‚ΠΎ Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся, Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ся «Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Ρ†ΠΈΠΊΠ»Π°», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΠΊΠ»Π° вмСстС с Π΅Π³ΠΎ Ρ‚Π΅Π»ΠΎΠΌ.

ПослС выполнСния Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаСтся Ρ€Π°Π·Π΄Π΅Π»Ρƒ, ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰Π΅ΠΌΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ†ΠΈΠΊΠ»Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ†ΠΈΠΊΠ»Π° мСняСтся.

Π—Π°Ρ‚Π΅ΠΌ вновь провСряСтся условиС выполнСния Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π°, ΠΈ Ρ‚. Π΄.

Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС любой ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым, Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ собой списки Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, пСрСчислСнных Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ†ΠΈΠΊΠ»Π°.

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ описаниС Ρ‡Π»Π΅Π½ΠΎΠ² класса TIntegrator.

protected internal sbyte direction;

public sbyte Direction { get { return direction; } }.

protected internal CallBackEventHandler callBack;

public virtual CallBackEventHandler CallBack.

{ get { return callBack; } set { callBack = value; } }.

ПолС direction Ρ…Ρ€Π°Π½ΠΈΡ‚ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ измСнСния нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (плюс ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈ ростС ΠΈ ΠΌΠΈΠ½ΡƒΡ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠΈ). Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ свойство Direction доступно всСм. Оно Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля direction. Π’ΠΈΠΏ sbyte ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ этого Ρ‚ΠΈΠΏΠ° Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ†Π΅Π»ΠΎΠ΅ число со Π·Π½Π°ΠΊΠΎΠΌ объСмом Π² ΠΎΠ΄ΠΈΠ½ Π±Π°ΠΉΡ‚. ΠŸΡ€Π΅Π΄Π΅Π»Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° sbyte [-128; 127].

ПолС callBack Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° Π΄Π΅Π»Π΅Π³Π°Ρ‚Π° Ρ‚ΠΈΠΏΠ° CallBackEventHandler, ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Сля ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Об ΡΡ‚ΠΎΠΌ шла Ρ€Π΅Ρ‡ΡŒ Π² ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ интСрфСйса IIntegrator. Бвойство CallBack Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ свойство интСрфСйса IIntegrator с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ ΡΠ²Π»ΡΠ΅Ρ‚ся, ΠΊΠ°ΠΊ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ. НаслСдник ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТаниС Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² set ΠΈ get.

Π”Π°Π»Π΅Π΅ размСстим ΠΈ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ описаниС конструкторов ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса TIntegrator.

protected internal TIntegrator (.

ushort N,.

TEquations Equations,.

CallBackEventHandler CallBack.

).

{.

if (N == 0).

throw (new ApplicationException («Π§ΠΈΡΠ»ΠΎ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ!?»));

n = N;

if (Equations == null).

throw (new ApplicationException («Π£Ρ€Π°Π²Π½Π΅Π½ΠΈΡ Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹!!!»));

equations = Equations;

Initialize ();

this.CallBack = CallBack;

}.

protected internal TIntegrator (ushort N, //Число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

TEquations Equations//уравнСния.

): this (N, Equations, null) { }.

Π’ ΡΠ·Ρ‹ΠΊΠ΅ C# конструкторы ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚Π΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π°, Ρ‡Ρ‚ΠΎ ΠΈ ΠΈΠΌΡ класса. По Π²ΠΈΠ΄Ρƒ это ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ с Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, содСрТащими ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа, имя ΠΈ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобках. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа описанных конструкторов ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ наслСдниками, описанными Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ (protected internal), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ класс TIntegrator абстрактный ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π•ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ доступныС всСм конструкторы. Π’Π°ΠΆΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ описания конструктора ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ конструктор Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ, Π΄Π°ΠΆΠ΅ void. ОписаниС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚ΠΈΠΏ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π’ ΠΊΠ»Π°ΡΡΠ΅ TIntegrator описаны Π΄Π²Π° конструктора. Но Ρ‡ΠΈΡΠ»ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρƒ Π½ΠΈΡ… Ρ€Π°Π·Π½ΠΎΠ΅. Π’Π°ΠΊΠΎΠΉ способ описания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ, Π½ΠΎ Ρ€Π°Π·Π½ΠΎΠΉ сигнатурой, называСтся ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΎΠΉ (overloading).

Π£ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ конструктора Ρ‚Ρ€ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° N, Equations ΠΈ CallBack. Они ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ соотвСтствСнно число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ, Π΄Π΅Π»Π΅Π³Π°Ρ‚ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΈ Π΄Π΅Π»Π΅Π³Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ этих ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² условными ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ конструктор присваиваСт ΠΈΡ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ полям. Если число ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ, ΠΈΠ»ΠΈ уравнСния Π½Π΅ Π·Π°Π΄Π°Π½Ρ‹ (это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ссылка Equations Ρ€Π°Π²Π½Π° null — это ссылка Π² «Π½ΠΈΠΊΡƒΠ΄Π°»), Ρ‚ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°ΡŽΡ‚ся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ситуации. Π’ ΡΡ‚Ρ€ΠΎΠΊΠ΅ сообщСния ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации ApplicationException присутствуСт символ. Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ для Π²Ρ‹Π²ΠΎΠ΄Π° ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… символов. НачинаСтся escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ с ΡΠΈΠΌΠ²ΠΎΠ»Π° (back slash). Π—Π° ΡΡ‚ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΡƒΠΊΠ²Ρ‹ ΠΈΠ· Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π°. Π’Π°ΠΊ символ n ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Π΄Π°Π»Π΅Π΅ строки Π² ΠΎΠΊΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку (new line).

Π”Π°Π»Π΅Π΅ вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Initialize, рассмотрСнный Π²Ρ‹ΡˆΠ΅. ПолС callBack инициализируСтся Ρ‡Π΅Ρ€Π΅Π· своС Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство CallBack, Π° Π½Π΅ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Π° ссылка Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° CallBack. Π’Ρ‚ΠΎΡ€ΠΎΠΉ конструктор ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ this (N, Equations, null), ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ, просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ конструктор, подставляя Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null — ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ CallBack отсутствуСт. Π’Π΅Π»ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ конструктора пустоС, Π½ΠΎ ΡΠΊΠΎΠ±ΠΊΠΈ {} ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ класса TIntegrator.

protected internal virtual bool DoCallBack ().

{.

CallBackEventArgs e = new CallBackEventArgs ();

callBack (this, e);

return e. Stop;

}.

Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoCallBack Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° bool. Π’Π°ΠΊ обозначаСтся логичСский Ρ‚ΠΈΠΏ, ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠΉ Π΄Π²Π° значСния true ΠΈ false. ΠœΠ΅Ρ‚ΠΎΠ΄ DoCallBack ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ классом TIntegrator для Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° callBack, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ.

Π’ Ρ‚Π΅Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoCallBack создаСтся экзСмпляр e ΠΊΠ»Π°ΡΡΠ° CallBackEventArgs, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ состояниС события, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ЀактичСски Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° e Π΅ΡΡ‚ΡŒ СдинствСнноС ΠΏΠΎΠ»Π΅ Stop логичСского Ρ‚ΠΈΠΏΠ°. ПолС Stop ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, послС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ callBack.

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° callBack ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ являСтся this. Π­Ρ‚ΠΎ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ событиС. Π’Π°ΠΊΠΎΠ²Ρ‹ΠΌ являСтся класс TIntegrator ΠΈΠ»ΠΈ Π΅Π³ΠΎ наслСдник. ΠœΠ΅Ρ‚ΠΎΠ΄ DoCallBack Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒΡΡ классом TIntegrator Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ события.

ПослС Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° callBack Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ DoCallBack стоит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° return, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoCallBack ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля e. Stop ΠΊΠ°ΠΊ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ DoCallBack. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ DoCallBack Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true, Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» интСгрирования Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π° Π΅ΡΠ»ΠΈ false, Ρ‚ΠΎ Ρ†ΠΈΠΊΠ» интСгрирования Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒΡΡ.

Π”Π°Π»Π΅Π΅ Π² ΠΊΠ»Π°ΡΡΠ΅ находятся описания Ρ‚Ρ€Π΅Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΡ… поиск ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага интСгрирования. Они содСрТат Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ поиска, Π² Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Π²Π΄Π°Π²Π°Ρ‚ΡŒΡΡ. Π˜Ρ… ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π² Ρ‚СкстС Ρ„Π°ΠΉΠ»Π° с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ класса TIntegrator. ΠŸΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ лишь Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ использования этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ².

protected internal virtual void FirstEstimate (ref double df, ref double dy).

{.

}.

protected internal virtual void SecondEstimate.

(ref double der2, double [ ] tempLocalVector).

{.

}.

double StartStepSize (double MaxStepSize).

{.

double df = 0.0, dy = 0.0, initStep;

FirstEstimate (ref df, ref dy);

double der2 = 0.0, der12, h1;

SecondEstimate (ref der2, tempLocalVector);

}.

ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ FirstEstimate ΠΈ SecondEstimate ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Они ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½ΠΎΠΉ ΠΈ Π²Ρ‚ΠΎΡ€ΠΈΡ‡Π½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠΈ (estimation) шага интСгрирования ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ся Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° StartStepSize.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ref, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ описании ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² FirstEstimate ΠΈ SecondEstimate. ΠœΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ref ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Ρ‚ΠΈΠΏΠ° double) производится ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅ (reference). По ΠΏΡ€Π°Π²ΠΈΠ»Ρƒ языка C# фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подставляСтся Π² ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ Π½Π° ΠΌΠ΅ΡΡ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅, Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ref. ИмСнно это ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° StartStepSize, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ FirstEstimate ΠΈ SecondEstimate. ΠŸΡ€ΠΈ этом фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ref Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ обращСния ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ df ΠΈ dy Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° StartStepSize ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° FirstEstimate. Π’Π°ΠΊ ΠΆΠ΅ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ der2 ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ SecondEstimate. ЗначСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами значСния df ΠΈ dy ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½ΡƒΠ»Ρ послС Π²Ρ‹Π·ΠΎΠ²Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° FirstEstimate. Π’Π°ΠΊ ΠΆΠ΅ Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° SecondEstimate ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° der2.

ΠœΠ΅Ρ‚ΠΎΠ΄ StartStepSize Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° double. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ ΠΈΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаг интСгрирования. ΠœΠ΅Ρ‚ΠΎΠ΄ StartStepSize ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ MaxStepSize, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага. Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΏΠΎ ΡΡΡ‹Π»ΠΊΠ΅, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ MaxStepSize ΠΌΠ΅Ρ‚ΠΎΠ΄ StartStepSize ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚.

Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° StartStepSize отсутствуСт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ являСтся private. Если ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ся ΠΏΡ€ΠΈ описании ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ Ρ‡Π»Π΅Π½Π° класса (описаниС «ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ»), Ρ‚ΠΎ ΠΈΠΌ ΡΠ²Π»ΡΠ΅Ρ‚ся ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ private. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ языка. Π§Π»Π΅Π½ класса с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ private доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π»Π΅Π½Π°ΠΌ этого ΠΆΠ΅ класса, ΠΈ Π½ΠΈΠΊΠΎΠΌΡƒ Π±ΠΎΠ»Π΅Π΅.

ΠŸΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π΄Π²Π° ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° класса.

public bool IntegrateTo (double tEnd).

{.

for (ushort i = 0; i < n + 1; i++).

if (Double.IsNaN (this [i])).

throw (new ApplicationException.

(«ΠΠ΅ Π·Π°Π΄Π°Π½Ρ‹ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия интСгрирования!»));

if (tEnd — currt == 0).

throw (new ApplicationException («Π¨Π°Π³ интСгрирования Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ?!»));

direction = (sbyte)(tEnd — currt > 0? 1: -1);

try.

{.

Equations (currt, currY, startLocalVector);

equationsCallNmb++;

}.

catch (Exception e).

{.

throw (new ApplicationException.

(e.Message + «ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ!»));

}.

if (Double.IsNaN (stepSize)).

{.

stepSize = StartStepSize (Math.Abs (tEnd — currt));

if (Double.IsNaN (stepSize) || Double. IsInfinity (stepSize)).

{.

throw (new ApplicationException.

(«ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ вычислСнии Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага интСгрирования!»));

}.

}.

else stepSize = Math. Abs (stepSize) * Direction;

return BasicLoop (tEnd);

}.

protected internal abstract bool BasicLoop (double tEnd);

ΠœΠ΅Ρ‚ΠΎΠ΄ IntegrateTo Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ абстрактный ΠΌΠ΅Ρ‚ΠΎΠ΄ интСрфСйса IIntegrator с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ. Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo Π΅ΡΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ tEnd, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ подставляСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΄ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ слСдуСт ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. ΠœΠ΅Ρ‚ΠΎΠ΄ IntegrateTo Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° bool, Ρ€Π°Π²Π½Ρ‹ΠΉ true, Ссли ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ «Π΅ΡΡ‚СствСнным ΠΏΡƒΡ‚Π΅ΠΌ», Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ конСчная Ρ‚ΠΎΡ‡ΠΊΠ° интСгрирования tEnd достигнута. Π’ ΡΠ°ΠΌΠΎΠΌ ΠΊΠΎΠ½Ρ†Π΅ Ρ‚Π΅Π»Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo стоит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return BasicLoop (tEnd), Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ BasicLoop.

ОписаниС ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop содСрТит ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ abstract. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π»Π° ΠΈ, собствСнно поэтому, класс TIntegrator являСтся абстрактным. ΠœΠ΅Ρ‚ΠΎΠ΄ BasicLoop Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ… класса TIntegrator. Π’Π°ΠΌ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСгрирования систСмы Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ.

Рассмотрим ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo.

ΠŸΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° класса TIntegrator ΠΈ Π΅Π³ΠΎ наслСдников вызываСтся конструктор. Π’ ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ конструктор Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Initialize, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€ΠΈΠ΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния (NaN) нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt ΠΈ Π½Π΅ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹ΠΌ функциям currY. Π­Ρ‚ΠΈ значСния ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΈΡ… Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ‚ΠΎΡ€Ρƒ this. Π‘Π²ΠΎΠΈΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ set индСксатор ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ значСния currt ΠΈ currY Π½Π° Ρ‚Π΅ Ρ‡ΠΈΡΠ»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π²Π²Π΅Π΄Π΅Π½Ρ‹ Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… условий. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ интСгрирования IntegrateTo.

ΠŸΠ΅Ρ€Π²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚, Π·Π°Π΄Π°Π½Ρ‹ Π»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия. Для этого просто провСряСтся, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π»ΠΈ поля currt ΠΈ currY. ΠŸΡ€ΠΈ этом вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ IsNaN класса Double, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ пСрСдаСтся индСксатор this Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΏΡ€ΠΈ всСх допустимых значСниях индСкса ΠΎΡ‚ 0 Π΄ΠΎ n. Если хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ, ΠΌΠ΅Ρ‚ΠΎΠ΄ IsNaN Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ true. Π­Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π΅Π½ΠΈΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации Ρ‚ΠΈΠΏΠ° ApplicationException с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм ΠΈ Ρ†ΠΈΠΊΠ» ΠΏΡ€Π΅Ρ€Π²Π΅Ρ‚ своС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ, Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΈ Π²Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ IntegrateTo. Код пСрСдаст созданный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ ΠΏΠΎΠΏΠ°Π²ΡˆΠ΅ΠΌΡƒΡΡ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ.

Если Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия Π·Π°Π΄Π°Π½Ρ‹, Ρ‚ΠΎ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚. Π”Π°Π»Π΅Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt сравниваСтся с Π΅Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ tEnd — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo. ΠŸΡ€ΠΈ совпадСнии этих Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ создаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации с ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ΠΌ «Π¨Π°Π³ интСгрирования Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ?!» ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo прСрываСтся.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

direction = (sbyte)(tEnd — currt > 0? 1: -1);

устанавливаСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля direction — Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ измСнСния нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠΎΠ² Ρ†Π΅Π»Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ 1 ΠΈΠ»ΠΈ -1 ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ int. Но ΠΏΠΎΠ»Π΅ direction ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ sbyte. Для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° int ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ Ρ‚ΠΈΠΏΠ° sbyte Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ явный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ прСобразования Ρ‚ΠΈΠΏΠΎΠ² (sbyte), ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅.

Рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΈΠ΄Π°.

try.

{.

Equations (currt, currY, startLocalVector);

equationsCallNmb++;

}.

catch (Exception e).

{.

throw (new ApplicationException.

(e.Message + «ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ!»));

}.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ производится ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации.

Π‘Π»ΠΎΠΊ, Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ слуТСбным словом try (пытайся) содСрТит ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС здСсь вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Equations, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΡ€Π°Π²ΠΎΠΉ части Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ startLocalVector. Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ currt, currY. Π—Π°Ρ‚Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика обращСния ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ equationsCallNmb увСличиваСтся Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ. Если ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация (скорСС всСго ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Equations, Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ), Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅Ρ€Π²Π°Π½ΠΎ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π² Π±Π»ΠΎΠΊ catch.

Π’ Π±Π»ΠΎΠΊΠ΅ catch происходит ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ Π² Π±Π»ΠΎΠΊ catch Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ e Ρ‚ΠΈΠΏΠ° Exception. Π­Ρ‚ΠΎ стандартный класс ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΡ€Π΅Π΄ΠΊΠΎΠΌ всСх классов, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ситуаций. Π’ Ρ‡Π°ΡΡ‚ности, ΡƒΠΆΠ΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π²ΡˆΠΈΠΉΡΡ Ρ€Π°Π½Π΅Π΅ класс ApplicationException являСтся наслСдником Exception. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Exception ΠΈ Π΅Π³ΠΎ наслСдников содСрТит ΠΏΠΎΠ»Π΅ Message, нСсущСС сообщСниС ΠΎΠ± ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации. Π’ Π±Π»ΠΎΠΊ catch ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΏΡ€ΠΈΠ±Ρ‹Π²Π°Π΅Ρ‚ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ поля Message. Π’ Π½Π°ΡˆΠ΅ΠΌ ΠΊΠΎΠ΄Π΅, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации Π²Π½ΡƒΡ‚Ρ€ΠΈ Π±Π»ΠΎΠΊΠ° catch ΠΌΡ‹ ΡΠΎΠ·Π΄Π°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации Ρ‚ΠΈΠΏΠ° ApplicationException. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ сообщСния ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΏΡ€Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ сообщСниС e. Message ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Equations, ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ своС сообщСниС «ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ!» .

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ IntegrateTo.

if (Double.IsNaN (stepSize)).

провСряСт, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг интСгрирования stepSize осмыслСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NaN поля stepSize ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ шаг Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½. Π’ΠΎΠ³Π΄Π° вызываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ StartStepSize.

stepSize = StartStepSize (Math.Abs (tEnd — currt));

Он Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΠ΅Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ шаг интСгрирования. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° StartStepSize являСтся ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаг — Π΄Π»ΠΈΠ½Π° всСго ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° интСгрирования ΠΎΡ‚ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ currt Π΄ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ tEnd.

Π’ ΠΎΡΠΎΠ±ΠΎΠΉ ситуации ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ StartStepSize Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ шага. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ шаг ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NaN ΠΈΠ»ΠΈ Π±Ρ‹Ρ‚ΡŒ бСсконСчным. Если это происходит, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo.

if (Double.IsNaN (stepSize) || Double. IsInfinity (stepSize)).

{.

throw (new ApplicationException.

(«ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ вычислСнии Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага интСгрирования!»));

}.

Π—Π΄Π΅ΡΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ IsInfinity класса Double провСряСт, ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ (шаг stepSize) бСсконСчноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

ПослСдний ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° IntegrateTo Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ интСгрирования систСмы Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ. Π’ ΠΊΠ»Π°ΡΡΠ΅ TIntegrator ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop описан ΠΊΠ°ΠΊ абстрактный ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π»Π°.

protected internal abstract bool BasicLoop (double tEnd);

Π­Ρ‚ΠΎ послСдний Ρ‡Π»Π΅Π½ класса TIntegrator. На ΡΡ‚ΠΎΠΌ описаниС класса TIntegrator Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ вСсь тСкст модуля с ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΠΌ класса TIntegrator. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρƒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… состоят Ρ‚Π΅Π»Π° Π½Π΅ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² FirstEstimate, SecondEstimate ΠΈ StartStepSize. Π’ Ρ‚Π΅Π»Π΅ этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ матСматичСским функциям, сосрСдоточСнным Π² ΠΊΠ»Π°ΡΡΠ΅ Math Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ .NET. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Abs, ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ ΠΊΠΎΡ€Π΅Π½ΡŒ Sqrt, ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ числа Pow, минимальноС Min ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Max ΠΈΠ· Π΄Π²ΡƒΡ… чисСл. Алгоритм вычислСния Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага взят ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Ρ‹ E. Hairer, S.P. Norsett and G. Wanner, Solving ordinary differential equations I, nonstiff problems, 2nd edition, Springer Series in Computational Mathematics, Springer-Verlag (1993).

http://scitation.aip.org/getabs/servlet/GetabsServlet?prog=normal&id=SIREAD000032000003000485000001&idtype=cvips&gifs=yes.

Класс RK4.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° рассмотри класс ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ‚ΠΎΡ€Π°, построСнный Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π° 4-ΠΎΠ³ΠΎ порядка ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. НазовСм Π½ΠΎΠ²Ρ‹ΠΉ класс RK4. НаслСдуСм RK4 ΠΎΡ‚ Π°Π±ΡΡ‚Ρ€Π°ΠΊΡ‚Π½ΠΎΠ³ΠΎ класса TIntegrator.

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΠ±Ρ‰ΠΈΠΉ список Ρ‡Π»Π΅Π½ΠΎΠ² класса RK4 с ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ариями Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ класса RK4 Ρ‡Π΅Ρ€Π΅Π· Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π½Π°ΡΠ»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΊΠ»Π°ΡΡΠ° TIntegrator. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, всС Ρ‡Π»Π΅Π½Ρ‹ класса TIntegrator ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ ΠΆΠ΅ Ρ‡Π»Π΅Π½Π°ΠΌΠΈ Π΅Π³ΠΎ наслСдника RK4. Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ класса RK4 ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ лишь Π½ΠΎΠ²Ρ‹Π΅ Ρ‡Π»Π΅Π½Ρ‹ ΠΈ Ρ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ класс RK4 ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚.

public class RK4: TIntegrator.

{.

/*Класс RK4 добавляСт Π½ΠΎΠ²Ρ‹Π΅ поля, описанныС Π±Π΅Π· ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° доступа ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ доступ private — Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‡Π»Π΅Π½ΠΎΠ² класса RK4. Π­Ρ‚ΠΎ ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ»Π΅ lowestAcc Ρ‚ΠΈΠΏΠ° double ΠΈ ΠΏΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… массивов tempY, tempLocalVector, oneStepLocalVector, firstHalfStepLocalVector, secondHalfStepLocalVector, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° double.

Бвойство lowestAcc Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ свойство ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Π²Ρ‹Π±ΠΎΡ€Π° ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ интСгрирования шаг ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ излишнС ΠΌΠ΅Π»ΠΊΠΈΠΌ. Π’Π°ΠΊΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ станСт Π½ΠΈΠΆΠ΅ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ значСния. ΠŸΡ€ΠΈ этом условии Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ шаг для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ счСта. Поля-массивы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° счСта Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… класса.*/.

double lowestAcc;

double [ ] tempY, tempLocalVector, oneStepLocalVector,.

firstHalfStepLocalVector, secondHalfStepLocalVector;

/*НиТС описано Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ Tolerance. Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ свойства Tolerance присутствуСт ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа override. Π­Ρ‚ΠΈΠΌ указываСтся, Ρ‡Ρ‚ΠΎ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ свойство Tolerance ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ RK4. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² set ΠΈ get свойства Tolerance Π΅ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ set ΠΈ get ΠΏΡ€Π΅Π΄ΠΊΠ°. Π­Ρ‚ΠΎ base.Tolerance. Как Π²ΠΈΠ΄Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ get свойства Tolerance просто Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ get ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ set проводится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ установка значСния ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ lowestAcc. */.

public override double Tolerance.

{.

get { return base. Tolerance; }.

set.

{.

base.Tolerance = value;

// ΠŸΠΎΡ€ΠΎΠ³ΠΎΠ²Π°Ρ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ.

lowestAcc = 0.025 * tolerance;

}.

}.

/*Π”Π°Π»ΡŒΡˆΠ΅ описываСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ Initialize, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Initialize класса TIntegrator. Код ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Initialize рассмотрим нСсколько Π½ΠΈΠΆΠ΅.*/.

protected internal override void Initialize ().

{.

//…

}.

/*ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹ класса-ΠΏΡ€Π΅Π΄ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚Ρ‹ Π² Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠ°Ρ…, Π΄Π°ΠΆΠ΅, Ссли ΠΎΠ½ΠΈ Π½Π΅ Π²Π½ΠΎΡΡΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ языка. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ конструкторы класса RK4 описаны с ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ public. Класс RK4 Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся абстрактным — ΠΎΠ½ Π½Π΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π½Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΅Π³ΠΎ конструкторы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ доступны.

Π’ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ конструкторов RK4 слСдуСт ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π²ΠΈΠ΄Π° base (N, Equations), ΠΎΡ‚Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ конструктора. Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² конструкторов ΠΏΡ€Π΅Π΄ΠΊΠ°. Π’Π΅Π»Π° Π½ΠΎΠ²Ρ‹Ρ… конструкторов RK4 Π² Π΄Π°Π½Π½ΠΎΠΌ случаС пусты, Π½ΠΎ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. */.

public RK4 (ushort N, TEquations Equations): base (N, Equations) { }.

public RK4 (ushort N, TEquations Equations,.

CallBackEventHandler CallBack).

: base (N, Equations, CallBack) { }.

/*Класс Π²Π²ΠΎΠ΄ΠΈΡ‚ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoStep, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π° 4-ΠΎΠ³ΠΎ порядка. Π’Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoStep Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. Π—Π΄Π΅ΡΡŒ лишь ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классам-наслСдникам ΠΈΠ· Ρ‚ΠΎΠΉ ΠΆΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ доступа protected internal) ΠΈ ΠΎΠ½ ΡΠ²Π»ΡΠ΅Ρ‚ся Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ.*/.

protected internal virtual void DoStep (double tStart, double currStep,.

double [ ] yStart, double [ ] yEnd).

{.

// ΠœΠ΅Ρ‚ΠΎΠ΄ Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π° 4-ΠΎΠ³ΠΎ порядка.

}.

// Класс Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop, содСрТащий Ρ†ΠΈΠΊΠ» интСгрирования.

protected internal override bool BasicLoop (double tEnd).

{.

//…

}.

}.

ΠœΠ΅Ρ‚ΠΎΠ΄ Initialize, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ классом RK4, добавляСт ΠΊ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΠΎΠΉ вСрсии ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… массивов-ΠΏΠΎΠ»Π΅ΠΉ.

protected internal override void Initialize ().

{.

base.Initialize ();

try.

{.

oneStepLocalVector = new double [n];

firstHalfStepLocalVector = new double [n];

secondHalfStepLocalVector = new double [n];

tempY = new double [n];

tempLocalVector = new double [n];

}.

catch (Exception e).

{.

throw (new ApplicationException.

(e.Message + «ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Initialize.»));

}.

}.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° base. Initialize (); Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Initialize. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΈ try ΠΈ catch, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ для обнаруТСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ситуации Π² Ρ‚ΠΎΠΌ случаС, Ссли Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ массивы Π·Π°ΠΉΠΌΡƒΡ‚ слишком ΠΌΠ½ΠΎΠ³ΠΎ памяти.

ΠœΠ΅Ρ‚ΠΎΠ΄ DoStep Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π° 4-ΠΎΠ³ΠΎ порядка (см. Π“. ΠšΠΎΡ€Π½, Π’. ΠšΠΎΡ€Π½, Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ ΠΏΠΎ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, стр. 702, Π’Π°Π±Π»ΠΈΡ†Π° 20.8−1, Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° c), которая ΠΈΠΌΠ΅Π΅Ρ‚ Π²ΠΈΠ΄.

yEnd = yStart + (k½ + k2+ k3+ k4/2) / 3, Π³Π΄Π΅.

k½ = f (tStart, yStart)*h/2;

k2 = f (tStart + h/2, yStart + k½)*h;

k3 = f (tStart + h/2, yStart + k2/2)*h;

k4/2 = f (tStart + h, yStart + k3)*h/2;

Π—Π΄Π΅ΡΡŒ функция f ΡΠ²Π»ΡΠ΅Ρ‚ся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ части ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ yi = fi (t, y1,…, yN). Бсылка Π½Π° ΡΡ‚ΠΎΡ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€ возвращаСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ equations Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ (tempLocalVetor Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ DoStep). НСзависимая пСрСмСнная tStart, Π²Π΅ΠΊΡ‚ΠΎΡ€ нСизвСстных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ yStart, шаг h, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΉ currStep, ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ yEnd ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoStep. Π‘Π°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoStep вычисляСт Π²Π΅ΠΊΡ‚ΠΎΡ€ yEnd, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ примСняя ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹.

protected internal virtual void DoStep (double tStart, double currStep,.

double [ ] yStart, double [ ] yEnd).

{.

// ΠœΠ΅Ρ‚ΠΎΠ΄ Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π° 4-ΠΎΠ³ΠΎ порядка.

// РСализуСтся Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° yEnd=yStart+(k½+k2+k3+k4/2)/3.

double HalfStep = 0.5 * currStep;

try.

{.

// tempLocalVector=f (tStart, yStart);

// k½ =tempLocalVector*currStep/2.

equations (tStart, yStart, tempLocalVector);

equationsCallNmb++;

for (ushort count = 0; count < n; count++).

{.

// k½.

yEnd [count] = HalfStep * tempLocalVector [count];

// yStart + k½.

tempY [count] = yStart [count] + yEnd [count];

};

// tempLocalVector=f (tStart+currStep/2,yStart+k½);

// k2=tempLocalVector*currStep.

equations (tStart + HalfStep, tempY, tempLocalVector);

equationsCallNmb++;

for (ushort count = 0; count < n; count++).

{.

// yS+k2/2.

tempY [count] = yStart [count] + HalfStep * tempLocalVector [count];

// k½+k2.

yEnd [count] = yEnd [count] + currStep * tempLocalVector [count];

};

// tempLocalVector=f (tStart+currStep/2,yStart+k2/2);

// k3=tempLocalVector*currStep.

equations (tStart + HalfStep, tempY, tempLocalVector);

equationsCallNmb++;

for (ushort count = 0; count < n; count++).

{.

//yStart+k3.

tempY [count] = yStart [count] + currStep * tempLocalVector [count];

//k½+k2+k3.

yEnd [count] = yEnd [count] + currStep * tempLocalVector [count];

};

// tempLocalVector=f (tStart+currStep, yStart+k3);

// k4/2=tempLocalVector*currStep/2.

equations (tStart + currStep, tempY, tempLocalVector);

equationsCallNmb++;

}.

catch (Exception e).

{.

throw (new ApplicationException.

(e.Message + «ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΡΠΌ!»));

}.

//Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ послС Π΄Π°Π½Π½ΠΎΠ³ΠΎ шага.

for (ushort count = 0; count < n; count++).

{.

// yEnd = yStart+(k½+k2+k3+k4/2)/3.

yEnd [count] = yStart [count] + 0.333 333 333 333 333 312 *.

(yEnd [count] + HalfStep * tempLocalVector [count]);

if (Double.IsNaN (yEnd [count]) || Double. IsInfinity (yEnd [count])).

throw (new ApplicationException.

(«ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° NaN ΠΈΠ»ΠΈ Infinity Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ DoStep!»));

};

}.

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π² Ρ‚СкстС Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π²Π°ΡŽΡ‚ эту Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρƒ ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ практичСски всС Ρ‚Π΅Π»ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoStep ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ΠΎ Π² Π±Π»ΠΎΠΊ try… catch. Если ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация (это, скорСС всСго, происходит Π²ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ equations), ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π±Π»ΠΎΠΊΠ° catch Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ Π½ΠΎΠ²ΡƒΡŽ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, добавляя ΠΊ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ e. Message ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΡˆΠ΅ΠΉ ситуации своС сообщСниС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop.

protected internal override bool BasicLoop (double tEnd).

{.

double currStep, currHalfStep, Divergence, maxDivergence;

bool isGoodAcc, isLastStep, isStepTooSmall;

try.

{.

// Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг currStep выбираСтся Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ.

currStep = stepSize;

// ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ…ΠΎΠ΄ΠΎΠΌ Π² Ρ†ΠΈΠΊΠ» вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

if (callBack ≠ null && DoCallBack ()) return false;

// Π¦ΠΈΠΊΠ» прохоТдСния всСго ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ шага интСгрирования.

do.

{.

// Если Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг составляСт Π±ΠΎΠ»Π΅Π΅ 80% всСго ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°,.

// ΠΎΠ½ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρƒ tEnd-FCurrt.

// Π€Π»Π°Π³ isLastStep Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°.

if ((currt + 1.25 * currStep — tEnd) * direction >= 0).

{.

// Π¨Π°Π³ являСтся послСдним.

currStep = tEnd — currt; isLastStep = true;

}.

else isLastStep = false; //Π­Ρ‚ΠΎ Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ шаг.

// Π€Π»Π°Π³ isGoodAcc Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ увСличСния шага,.

// Ссли ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ излишнС ΠΌΠ°Π»Π°.

isGoodAcc = true; //Допустим рост шага.

//ДСлаСтся ΠΎΠ΄ΠΈΠ½ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг.

DoStep (currt, currStep, currY, oneStepLocalVector);

//Π¦ΠΈΠΊΠ» Π²Ρ‹Π±ΠΎΡ€Π° шага, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ точности.

do.

{ //Π”Π΅Π»Π°ΡŽΡ‚ΡΡ Π΄Π²Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ шага.

currHalfStep = 0.5 * currStep;

DoStep (currt, currHalfStep, currY, firstHalfStepLocalVector);

DoStep (currt + currHalfStep, currHalfStep,.

firstHalfStepLocalVector, secondHalfStepLocalVector);

// ВычисляСтся макс. ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ расхоТдСниС.

// Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ шага ΠΈ Π΄Π²ΡƒΡ… ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½ΠΎΠΊ.

maxDivergence = 0.0;

for (ushort count = 0; count < n; count++).

{.

if (Double.IsInfinity (1.0 / oneStepLocalVector [count]) &&.

Double.IsInfinity (1.0 / secondHalfStepLocalVector [count])).

continue;

if (oneStepLocalVector [count] ≠ secondHalfStepLocalVector [count]).

{.

// ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ расхоТдСниС.

Divergence = Math. Abs (oneStepLocalVector [count] ;

secondHalfStepLocalVector [count]);

// ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ расхоТдСниС вычисляСтся.

// ΠΏΡ€ΠΈ достаточно большом Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠΌ.

if (Divergence > epsilon).

Divergence =.

2.0 * Divergence /.

(Math.Abs (oneStepLocalVector [count]) +.

Math.Abs (secondHalfStepLocalVector [count]));

if (Double.IsInfinity (Divergence) || Double. IsNaN (Divergence)).

throw (new ApplicationException.

(«ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡ€ΠΈ вычислСнии maxDiv»));

// ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ максимального расхоТдСния.

if (Divergence > maxDivergence) maxDivergence = Divergence;

}.

}.

//Π”Π΅Π»Π°ΡŽΡ‚ΡΡ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ.

if (maxDivergence > tolerance).

{.

isGoodAcc = false; // Рост шага Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½.

currStep = currHalfStep; // Π¨Π°Π³ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π²Π΄Π²ΠΎΠ΅.

stepSize = currHalfStep;

isLastStep = false;

firstHalfStepLocalVector.CopyTo (oneStepLocalVector, 0);

}.

isStepTooSmall = currt == 0.0 && Math. Abs (currStep) <= epsilon.

|| Math. Abs (currStep) <= Math. Abs (currt) * epsilon;

}.

// ΠŸΡ€ΠΎΡ†Π΅ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ шага продолТаСтся.

// Π΄ΠΎ Π΄ΠΎΡΡ‚иТСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ точности.

while.

(maxDivergence > tolerance && !isStepTooSmall);

if (isStepTooSmall).

{ throw (new ApplicationException («Π¨Π°Π³ слишком ΠΌΠ°Π»»)); }.

// Π’ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ достигнута. Π£ΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ скоррСктированныС значСния.

// Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΊΠΎΠ½Ρ†Π΅ сдСланного шага.

for (ushort count = 0; count < n; count++).

currY [count] =.

secondHalfStepLocalVector [count] + 0.666 666 666 666 666 624 *.

(secondHalfStepLocalVector [count] ;

oneStepLocalVector [count]);

//Если шаг Π½Π΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ.

if (!isLastStep).

{.

currt += currStep; //ИзмСнСниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

//ВызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

if (callBack ≠ null && DoCallBack ()) return false;

if (maxDivergence < lowestAcc && isGoodAcc).

{.

//Блишком ΠΌΠ΅Π»ΠΊΠΈΠΉ шаг удваиваСтся.

currStep += currStep;

if (Math.Abs (currStep) > Math. Abs (tEnd — currt)).

currStep = tEnd — currt;

stepSize = currStep;

}.

}.

//ΠŸΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠ΅ Ρ†ΠΈΠΊΠ»Π°, Ссли сдСлан послСдний шаг.

else break;

}.

while (true);

//Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ совпадаСт с ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΌ.

currt += currStep; //tEnd.

//ВызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ.

return !(callBack ≠ null && DoCallBack ());

}.

catch (Exception e).

{.

throw (new ApplicationException.

(e.Message+ «BasicLoop ΠΏΡ€Π΅Ρ€Π²Π°Π½»));

}.

}.

Π’ Π½Π°Ρ‡Π°Π»Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага stepSize Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ currStep. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля stepSize Π»ΠΈΠ±ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ унаслСдованным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ IntegrateTo, Π»ΠΈΠ±ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ ΠΎΡ‚ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°.

Π—Π°Ρ‚Π΅ΠΌ вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callBack, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ класса. Π’ ΡƒΡΠ»ΠΎΠ²Π½ΠΎΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ логичСская Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° callBack ≠ null && DoCallBack () Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ true лишь Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callBack Π·Π°Π΄Π°Π½ (ссылка Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π²Π½Π° null — ссылкС Π² «Π½ΠΈΠΊΡƒΠ΄Π°») ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ DoCallBack, Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true. Π’ ΡΡ‚ΠΎΠΌ случаС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop прСрываСтся, Π° ΡΠ°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ false. Если ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callBack Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ (Ρ‚ΠΎΠ³Π΄Π° ссылка Π½Π° Π½Π΅Π³ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null), Π»ΠΈΠ±ΠΎ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½, Π½ΠΎ DoCallBack Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послС своСго выполнСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop продолТаСтся.

Π”Π°Π»Π΅Π΅ Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ BasicLoop находится ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Ρ†ΠΈΠΊΠ»Π° do… while (true). Он ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop. Π’Π°ΠΊΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ (условиС while (true) всСгда выполняСтся) являСтся бСсконСчным Ρ†ΠΈΠΊΠ»ΠΎΠΌ, ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· Π½Π΅Π³ΠΎ производится стандартной ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ break, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ любого Ρ†ΠΈΠΊΠ»Π° Π² C#. Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° do… while происходят ΠΎΡ†Π΅Π½ΠΊΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ провСсти ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠΉ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ currt нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΎ tEnd — ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop.

Π’ Π½Π°Ρ‡Π°Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Π΄Π»ΠΈΠ½Π° всСго ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° интСгрирования |tEnd — currt| сравниваСтся с Π²Π΅Π»ΠΈΡ‡ΠΈΠ½ΠΎΠΉ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ шага |currStep|. Если шаг ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 80% Π΄Π»ΠΈΠ½Ρ‹ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°, Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ся Ρ€Π°Π²Π½Ρ‹ΠΌ всСму ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρƒ ΠΈ Ρ„Π»Π°Π³ isLastStep, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ это послСдний шаг, устанавливаСтся Π² true. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ„Π»Π°Π³Ρƒ isLastStep присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ устанавливаСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π»Π°Π³ (ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° bool) isGoodAcc, Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ увСличСния шага, Π² true.

Π—Π°Ρ‚Π΅ΠΌ, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoStep вычисляСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага currStep ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ Π ΡƒΠ½Π³Π΅-ΠšΡƒΡ‚Ρ‚Π°. Π­Ρ‚ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ возвращаСтся Π² Π²ΠΈΠ΄Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ oneStepLocalVector Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ currt + currStep.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° BasicLoop являСтся Π½ΠΎΠ²Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» do… while, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ «Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅Ρ‚» шаг currStep Π² ΡΠΎΠΎΡ‚вСтствии с Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΠΉ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒΡŽ.

Для этого с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° DoStep вычисляСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ шага Ρ‚ΠΎΠΉ ΠΆΠ΅ Π΄Π»ΠΈΠ½Ρ‹ currStep, Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ двумя ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½Ρ‹ΠΌΠΈ шагами. Π Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‚ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π°Ρ… firstHalfStepLocalVector ΠΈ secondHalfStepLocalVector. ΠœΠ΅ΠΆΠ΄Ρƒ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° secondHalfStepLocalVector ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° oneStepLocalVector, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΠ»Π½Ρ‹ΠΌ шагом, устанавливаСтся максимальноС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ расхоТдСниС maxDivergence. Если ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ расхоТдСниС ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΡƒΡŽ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΡŒ tolerance, Ρ‚ΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг currStep (ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага stepSize) ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π²Π΄Π²ΠΎΠ΅, Ρ„Π»Π°Π³ΠΈ «Ρ…ΠΎΡ€ΠΎΡˆΠ΅Π³ΠΎ приблиТСния» isGoodAcc ΠΈ «ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ шага» isLastStep «ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ся» (ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false), Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° послСднСй Ρ‚ΠΎΡ‡ΠΊΠΈ искомой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ oneStepLocalVector ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ значСния ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ послС ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π½ΠΎΠ³ΠΎ шага, firstHalfStepLocalVector.

ΠŸΡ€ΠΈ вычислСнии расхоТдСний Divergence ΠΈ maxDivergence проводится ряд ΠΎΡ†Π΅Π½ΠΎΠΊ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π²ΠΎΠ·Π±ΡƒΠ΄ΠΈΡ‚ΡŒ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΈΠ»ΠΈ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π΅Π΅ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… значСниях ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. Π’ Ρ‡Π°ΡΡ‚ности стандартный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ continue позволяСт Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ситуации ΠΎΠ±ΠΎΠΉΡ‚ΠΈ всС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΏΠΎΠΏΠ°Π² сразу Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг Ρ†ΠΈΠΊΠ»Π°.

Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ шага Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒΡΡ Π΄ΠΎ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΠΈ, устанавливаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„Π»Π°Π³Π° isStepTooSmall Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ шага.

УсловиСм окончания Ρ†ΠΈΠΊΠ»Π° ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡ шага являСтся Π»ΠΈΠ±ΠΎ условиС достиТСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ точности maxDivergence < tolerance, Π»ΠΈΠ±ΠΎ нСдопустимо ΠΌΠ°Π»ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ шага (Ρ„Π»Π°Π³ isStepTooSmall поднят).

Если шаг слишком ΠΌΠ°Π», Ρ‚ΠΎ Π²ΠΎΠ·Π±ΡƒΠΆΠ΄Π°Π΅Ρ‚ся ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ситуация с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ сообщСниСм.

ПослС Π²Ρ‹Π±ΠΎΡ€Π° шага, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° нСизвСстной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‚ΡΡ скоррСктированныС ошибкой значСния.

Π”Π°Π»Π΅Π΅ стоит условный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ», Π° Π·Π° Π½ΠΈΠΌ ΠΈ ΡΠ°ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ BasicLoop Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½, Ссли сдСланный шаг послСдний Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅. Если это Π½Π΅ Ρ‚Π°ΠΊ, Ρ‚ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ся ряд ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ….

устанавливаСтся Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ поля нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt,.

вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callBack (Ссли ΠΎΠ½ Π·Π°Π΄Π°Π½).

ΠΈ ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Ρ„Π»Π°Π³ isGoodAcc поднят (Ρ‚.Π΅. рост шага допустим) ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ расхоТдСниС maxDivergence мСньшС Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠΎΠ³Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚ΠΈ lowestAcc, Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ шаг currStep удваиваСтся ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ полю ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага stepSize. ΠŸΡ€ΠΈ этом Ссли ΡƒΠ΄Π²ΠΎΠ΅Π½Π½Ρ‹ΠΉ шаг Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚ΠΎΡ‡ΠΊΡƒ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° tEnd, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ currStep коррСктируСтся.

Π”Π°Π»Π΅Π΅ Ρ†ΠΈΠΊΠ» возвращаСтся ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ, имСя Π½ΠΎΠ²Ρ‹Π΅ значСния currt, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€ currY ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ шага currStep ΠΈ ΠΏΠΎΠ»Ρ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ шага stepSize.

ПослС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎΠ»Π΅ нСзависимой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ currt ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ tEnd, дСлая послСдний шаг, ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ callBack.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ