Π’Π΅ΠΎΡΠΈΡ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΡΠ΅Π½ΠΊΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ f (x) ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ S (x) Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΅Π΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ². Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΠΎΡΠ΅Π½ΠΊΠ°Ρ Π±ΡΠ΄ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΠΈΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ. ΠΡΠ»ΠΈ ΡΠ°Π·ΡΡΠ²Π½Π° Π²ΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ, ΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ ΡΠΏΠ»Π°ΠΉΠ½Π° Π²Π±Π»ΠΈΠ·ΠΈ ΡΠΎΡΠ΅ΠΊ ΡΠ°Π·ΡΡΠ²Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
Π’Π΅ΠΎΡΠΈΡ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΡΠ»ΠΈ ΠΏΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ Π·Π°Π΄Π°ΡΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅ Π΄ΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°, ΡΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π·Π°Π΄Π°Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΡ ΠΊ ΡΠΏΠ»Π°ΠΉΠ½Π°ΠΌ Ρ ΠΌΠ΅Π½ΡΡΠ΅ΠΉ Π³Π»Π°Π΄ΠΊΠΎΡΡΡΡ (Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ Π΄Π΅ΡΠ΅ΠΊΡΠΎΠΌ), Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ²ΡΡΠ°ΡΡ ΠΈΠ· ΡΡΠ΅ΠΏΠ΅Π½Ρ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΏΠΎΡΠΎΠ±, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΄Π° Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΠΉ ΠΏΡΡΠ΅ΠΌ Π²Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ·Π»ΠΎΠ² ΡΠΏΠ»Π°ΠΉΠ½Π°, Π½Π΅ ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ ΡΠ·Π»Π°ΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΏΠ»Π°ΠΉΠ½Π°ΠΌΠΈ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ. ΠΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΡΠ°Π΅ΠΌΡΡ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΡΡΠ΅ΠΌ, Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΊ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΡΡ ΠΏΡΠ°Π²ΡΡ ΡΠ°ΡΡΠ΅ΠΉ.
ΠΡΡΡΡ Π½Π° ΠΎΡΡΠ΅Π·ΠΊΠ΅ [a, b] ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ f (x) ΠΏΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ, r = 0,1,2, Π½Π° ΡΠ΅ΡΠΊΠ΅ Π: a==b. ΠΠ±ΡΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°ΠΊΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠΏΠ»Π°ΠΉΠ½Ρ ΠΏΡΡΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Ρ ΡΠ·Π»Π°ΠΌΠΈ Π½Π° ΡΠ΅ΡΠΊΠ΅ Π, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½Ρ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π²Π²Π΅Π΄Π΅ΠΌ Π½Π° [a, b] Π΅ΡΠ΅ ΠΎΠ΄Π½Ρ ΡΠ΅ΡΠΊΡ.
Π΄ = {,.
Π³Π΄Π΅ .
ΠΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½ S (x) Π΄Π΅ΡΠ΅ΠΊΡΠ° 1 Ρ ΡΠ·Π»Π°ΠΌΠΈ Π½Π° ΡΠ΅ΡΠΊΠ΅, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠΉ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ.
Π΄Π»Ρ (1).
Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ.
Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ (1) Π½Π° ΠΊΠΎΠ½ΡΠ°Ρ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΎΠ² [, Π΄Π°ΡΡ N Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌ, ΠΏΠΎ 6 ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ, Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΡΠΏΠ»Π°ΠΉΠ½Π°, ΡΠ΅ΡΠ°Ρ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΈ.
Ρ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
.
ΠΡΠ΅Π½ΠΊΠ° ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎΡΡΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ.
ΠΡΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΎΡΠ΅Π½ΠΊΡ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ f (x) ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ S (x) Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π΅Π΅ Π΄ΠΈΡΡΠ΅ΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ²ΠΎΠΉΡΡΠ². Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΠΎΡΠ΅Π½ΠΊΠ°Ρ Π±ΡΠ΄ΡΡ Π·Π°Π²ΠΈΡΠ΅ΡΡ ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°. Π ΡΠΈΠ»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ .
Π’Π΅ΠΎΡΠ΅ΠΌΠ° 1. ΠΡΠ»ΠΈ S (x) ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΠ΅Ρ Π½Π° ΡΠ΅ΡΠΊΠ΅ Π ΡΡΠ½ΠΊΡΠΈΡ f (x), ΡΠΎ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ ΠΎΡΠ΅Π½ΠΊΠΈ.
(1).
Π³Π΄Π΅ ΠΏΡΠΈ Π΄Π°Π½Ρ Π² ΡΠ°Π±Π»ΠΈΡΠ΅ 1.
ΠΠ»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. |
ΠΠ»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. |
; |
; |
ΠΡΠΈΠ΄Π°Π²Π°Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡΡΠ½ΠΈΡΡ Ρ Π°ΡΠ°ΠΊΡΠ΅Ρ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ Π² ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΡ ΡΡ ΠΎΡΠ΅Π½ΠΊΠ°Ρ ΠΎΡ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ Π² ΠΎΡΠ΅Π½ΠΊΠ°Ρ ΠΌΠ°Π»ΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ ΠΎΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ ΠΏΡΠΈ.
ΠΡΠΈΠΌΠ΅ΡΡ.
Π€ΡΠ½ΠΊΡΠΈΡ |sin (x)|, h = 0.2.
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· Π³ΡΠ°ΡΠΈΠΊΠ°, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠ±ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠ΅, Π³ΡΠ°ΡΠΈΠΊ ΡΠΏΠ»Π°ΠΉΠ½Π° ΠΈΡΠΏΡΡΡΠ²Π°Π΅Ρ ΡΠ΅ΡΡΡΠ·Π½ΡΠ΅ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊ ΡΠΎΡΠΊΠ΅ ΡΠ°Π·ΡΡΠ²Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΠ»Π΅Π²Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½Π°Π΄ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π° ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ. Π ΡΠ°ΠΊΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ ΠΏΡΠΈΠ²Π΅Π»ΠΈ Π½Π΅ΡΠΎΡΠ½ΠΎΡΡΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠΈΡΠ΅Π» Ρ ΠΏΠ»Π°Π²Π°ΡΡΠ΅ΠΉ Π·Π°ΠΏΡΡΠΎΠΉ, ΠΏΠΎΡΠΎΠΌΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π°Π΄ΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
Π’Π° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, Π½ΠΎ Ρ ΡΠ°Π³ΠΎΠΌ h=0.025.
ΠΠ° Π³ΡΠ°ΡΠΈΠΊΠ΅ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΡΠ°Π³Π° Π΄Π°Π»ΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, Ρ ΠΎΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΡ ΡΠ°Π²Π½ΠΎ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° C#.
class ExtraSpline: Builder.
{.
public double a1;
public double a2;
ExtraSplineSegment[] segments;
List points;
int n;
public ExtraSpline (int _n, List _points, double _a1, double _a2).
{.
n = _n;
a1 = _a1;
a2 = _a2;
points = _points;
segments = new ExtraSplineSegment[n-1];
for (int i = 0; i < n-1; ++i).
{.
segments[i]. x = points[i]. x;
segments[i]. f = points[i]. y;
segments[i]. f1 = points[i]. y1;
segments[i]. f2 = points[i]. y2;
//Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ h.
segments[i]. h = points[i + 1]. x — points[i]. x;
//Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ c1 ΠΈ Ρ2.
segments[i]. c1 = c_function (a1, a2, segments[i]. f, segments[i]. f1, segments[i]. f2, points[i + 1]. y, points[i + 1]. y1, points[i + 1]. y2, segments[i]. h);
segments[i]. c2 = c_function (a2, a1, segments[i]. f, segments[i]. f1, segments[i]. f2, points[i + 1]. y, points[i + 1]. y1, points[i + 1]. y2, segments[i]. h);
segments[i]. a = a_function (segments[i]. c1, segments[i]. c2, points[i + 1]. y2, segments[i]. f2, segments[i]. h);
}.
}.
public double Interpolate (double x).
{.
if (segments == null).
{.
return double. NaN; // ΠΡΠ»ΠΈ ΡΠΏΠ»Π°ΠΉΠ½Ρ Π΅ΡΡ Π½Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ NaN.
}.
int n = segments. Length;
ExtraSplineSegment s;
if (x <= segments[0]. x) // ΠΡΠ»ΠΈ x ΠΌΠ΅Π½ΡΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ΅ΡΠΊΠΈ x[0] - ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»-ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°.
{.
s = segments[1];
}.
else if (x >= segments[n — 1]. x) // ΠΡΠ»ΠΈ x Π±ΠΎΠ»ΡΡΠ΅ ΡΠΎΡΠΊΠΈ ΡΠ΅ΡΠΊΠΈ x[n — 1] - ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»-ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°.
{.
s = segments[n — 1];
}.
else // ΠΠ½Π°ΡΠ΅ x Π»Π΅ΠΆΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π³ΡΠ°Π½ΠΈΡΠ½ΡΠΌΠΈ ΡΠΎΡΠΊΠ°ΠΌΠΈ ΡΠ΅ΡΠΊΠΈ — ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π±ΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π½ΡΠΆΠ½ΠΎΠ³ΠΎ ΡΠ»-ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π°.
{.
int i = 0;
int j = n — 1;
while (i + 1 < j).
{.
int k = i + (j — i) / 2;
if (x <= segments[k]. x).
{.
j = k;
}.
else.
{.
i = k;
}.
}.
s = segments[j];
}.
double dx = x — s. x;
double res = 0;
res = (s.a * dx * dx * dx) / 6 + (s.f2 * dx * dx) / 2 + (s.f1 * dx) + s. f + (s.c1 * (dx — a1 * s. h) * (dx — a1 * s. h) * (dx — a1 * s. h)) + (s.c2 * (dx — a2 * s. h) * (dx — a2 * s. h) * (dx — a2 * s. h));
return (double)res;
}.
public double c_function (double a1, double a2, double fi, double fi1, double fi2, double fii, double fii1, double fii2, double hi).
{.
double c = 0;
c = (1/(a1*a2*(a2-a1)*hi*hi)) * (((fi-fii)/hi)+(((1+a2)*fi1+(1+a1)*fii1)/3) +(((a2*fi2) — (a1*fii2))*hi/6));
Console.Write («h:»);
Console.WriteLine (hi);
Console.Write («c:»);
Console.WriteLine (c);
return c;
}.
public double a_function (double c1, double c2, double fii2, double fi2, double h).
{.
double a = 0;
a = ((fii2 — fi2)/h — 6*a2*c1 — 6*a1*c2);
return a;
}.
}.
ΠΠ΅ΡΠΎΠ΄ ΡΡΠ΅ΡΠ° Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠΊΠ°ΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ/ΠΈΠ»ΠΈ Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠΈ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΠ»Π°ΠΉΠ½Π°.
Π’Π΅ΠΎΡΠΈΡ ΠΈ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅.
ΠΡΡΡΡ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠΎΠ², ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄:
(1).
Π ΡΠ·Π»Π°Ρ ΡΠ΅ΡΠΊΠΈ.
(2).
ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΈΠ· ΡΡΠ»ΠΎΠ²ΠΈΡ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΡΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΠ·Π»Π°Ρ ΠΈ ΠΈΠ· Π³ΡΠ°Π½ΠΈΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ Π½ΡΠ»Π΅Π²ΡΡ ΠΊΡΠΈΠ²ΠΈΠ·Π½Ρ ΡΠΏΠ»Π°ΠΉΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠ°Ρ ΠΎΡΡΠ΅Π·ΠΊΠ°:
ΠΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ³ΠΎΠ½ΠΊΠΈ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π²ΡΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ°ΡΡΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ΅Ρ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½Π°:
(5).
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ°Π·ΡΡΠ²ΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠ±ΠΎΡ ΡΠ·Π»ΠΎΠ² ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠ².
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π΅ΡΠ»ΠΈ ΡΡΠ΅ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ΡΠΏΠΈΡ ΡΠ°Π·ΡΡΠ² Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠΊΠ°Ρ ΠΎΡΡΠ΅Π·ΠΊΠ° [a, b], ΡΠΎ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΠΈ ΡΡΠΈ ΡΠΎΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΊΠ»ΡΡΠΈΡΡ Π² ΡΠΈΡΠ»ΠΎ ΡΠ·Π»ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ.
ΠΡΠ»ΠΈ ΡΠ°Π·ΡΡΠ²Π½Π° Π²ΡΠΎΡΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ, ΡΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ ΡΠΏΠ»Π°ΠΉΠ½Π° Π²Π±Π»ΠΈΠ·ΠΈ ΡΠΎΡΠ΅ΠΊ ΡΠ°Π·ΡΡΠ²Π°, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡΠΈΠ½ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡ. ΠΠ±ΡΡΠ½ΠΎ ΡΠ·Π»Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠΎΡΠΊΠΈ ΡΠ°Π·ΡΡΠ²Π° Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ Π²Π½ΡΡΡΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ°, ΡΠ°ΠΊΠΎΠ³ΠΎ, ΡΡΠΎ, Π³Π΄Π΅.
ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π·ΡΡΠ²Π½Π°, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΡ ΠΎΡΡΠ΅Π·ΠΎΠΊ Π°ΠΏΠΏΡΠΎΠΊΡΠΈΠΌΠ°ΡΠΈΠΈ Π½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΈ, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½Π°, ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΡΠΈΡ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠΎΠ² ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠΏΠ»Π°ΠΉΠ½.
Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΡΡΠ»ΠΎΠΆΠ½ΡΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ Π·Π° ΡΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΡΠ·Π»ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄ΡΡΠ³ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΠ΅ΡΠ° ΡΠ°Π·ΡΡΠ²ΠΎΠ² ΠΊΠ°ΠΊ ΡΠ°ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΠ°ΠΊΠΈ ΠΈ Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²ΠΎ Π²Π²Π΅Π΄Π΅Π½ΠΈΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠΊΠ°ΡΠΊΠ° Π² ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ (2−5) Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΠ»Π°ΠΉΠ½Π°.
ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΡΠ°Π·ΡΡΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡΠΊΠ°Ρ ΠΎΡΡΠ΅Π·ΠΊΠ° [a, b] Π²Π½Π΅ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½Π°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½Π° ΠΈ/ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΠ»Π΅Π²Π° ΠΎΡ ΡΠΎΡΠΊΠΈ ΡΠ°Π·ΡΡΠ²Π° ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅ΠΌ ΡΠ°Π²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΡΡΠΎΠΌ ΡΠ·Π»Π΅ ΡΠ»Π΅Π²Π°, Π° Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΡΠΊΠ°ΡΠΊΠ° ΠΎΡΠ½ΠΎΡΠΈΠΌ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌΡ ΡΠΏΠ»Π°ΠΉΠ½Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² Π² ΡΠ·Π»Π°Ρ , ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ ΡΠ°Π·ΡΡΠ²Π°ΠΌ, Π²ΠΌΠ΅ΡΡΠΎ (2−5) ΠΈΠΌΠ΅Π΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ:
Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ΅ΡΠ° ΡΠ°Π·ΡΡΠ²ΠΎΠ² ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ·Π»ΠΎΠ² ΠΈ Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅ΠΉ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠ΅ΠΉ Π²ΠΎΠ·Π»Π΅ ΡΠ°Π·ΡΡΠ²Π°, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠ².
ΠΡΠΈΠΌΠ΅ΡΡ ΠΠ»Ρ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Π²Π·ΡΡΠ° ΠΊΡΡΠΎΡΠ½ΠΎ-Π·Π°Π΄Π°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈ x2,4.
y = -x2.
ΠΡΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½ h = 0.2.
Π ΡΡΠΎ ΡΠΆΠ΅ ΡΠΏΠ»Π°ΠΉΠ½, Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΊΠ°ΡΠΊΠ°, ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°ΠΌ Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ, Ρ ΠΎΡΡ ΠΈ Π½Π΅ ΡΡΠ»ΠΈ, Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΠ»ΠΈΡΡ.
Π’Π° ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, Π½ΠΎ Ρ ΡΠ°Π³ΠΎΠΌ h = 0.025.
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½.
Π‘ΠΏΠ»Π°ΠΉΠ½ Ρ ΡΡΠ΅ΡΠΎΠΌ ΡΠΊΠ°ΡΠΊΠ°, Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠ°Π³ΠΎΠΌ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ ΡΠ»Π΅Π²Π° ΠΎΡ ΡΠΎΡΠΊΠΈ ΡΠ°Π·ΡΡΠ²Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ, Π° ΡΠΏΡΠ°Π²Π° Ρ ΠΎΡΡ ΠΈ ΠΎΡΡΠ°Π»ΠΈΡΡ, Π½ΠΎ ΡΡΠ°Π»ΠΈ Π·Π°ΠΌΠ΅ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅.
ΠΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π½Π° C#.
class SplineD: Builder.
{.
SplineSegment[] segments;
List points;
int n;
/// ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ SplineBuilder.
/// ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ·Π»ΠΎΠ² ΡΠ΅ΡΠΊ.
/// ΠΠ½Π°ΡΠ΅Π½ΠΈΡ Π² ΡΠ·Π»Π°Ρ .
public SplineD (int _n, List _points, List _extremums).
{.
double D = 0;
n = _n;
points = _points;
foreach (PointExtremum p in _extremums).
{.
int k = n — 1;
for (int i = 0; i < k; ++i).
{.
if (p.p.x > points[i]. x && p.p.x < points[i + 1]. x).
{.
points.Insert (i+1,p.p);
k++;
break;
}.
}.
}.
n = points. Count;
segments = new SplineSegment[n];
for (int i = 0; i < n; ++i).
{.
segments[i]. x = points[i]. x;
segments[i]. a = points[i]. y + D;
}.
segments[0]. c = 0;
segments[n — 1]. c = 0;
double[] alpha = new double[n — 1];
double[] beta = new double[n — 1];
alpha[0] = beta[0] = 0.0;
for (int i = 1; i < n — 1; ++i).
{.
foreach (PointExtremum pex in _extremums).
{.
if (pex.p.x == points[i]. x).
{.
D = pex. D;
}.
else.
{.
D = 0;
}.
}.
double hi = points[i]. x — points[i — 1]. x;
double hi1 = points[i + 1]. x — points[i]. x;
double A = hi;
double C = 2.0 * (hi + hi1);
double B = hi1;
double F = 6.0 * ((points[i + 1]. y — points[i]. y + D) / hi1 — (points[i]. y — points[i — 1]. y) / hi);
double z = (A * alpha[i — 1] + C);
alpha[i] = -B / z;
beta[i] = (F — A * beta[i — 1]) / z;
}.
for (int i = n — 2; i > 0; —i).
{.
segments[i]. c = alpha[i] * segments[i + 1]. c + beta[i];
}.
for (int i = n — 1; i > 0; —i).
{.
double hi = points[i]. x — points[i — 1]. x;
segments[i]. d = (segments[i]. c — segments[i — 1]. c) / hi;
segments[i]. b = hi * (2.0 * segments[i]. c + segments[i — 1]. c) / 6.0 + (points[i]. y — points[i — 1]. y + D) / hi;
}.
}.
public List getPoints.
{.
get { return points; }.
}.
public SplineSegment[] getSpline.
{.
get { return segments; }.
}.
public double Interpolate (double x).
{.
if (segments == null).
{.
return double. NaN; // ΠΡΠ»ΠΈ ΡΠΏΠ»Π°ΠΉΠ½Ρ Π΅ΡΡ Π½Π΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½Ρ — Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ NaN.
}.
int n = segments. Length;
SplineSegment s;
if (x <= segments[0]. x) {.
s = segments[1];
}.
else if (x >= segments[n — 1]. x) {.
s = segments[n — 1];
}.
else.
{.
int i = 0;
int j = n — 1;
while (i + 1 < j).
{.
int k = i + (j — i) / 2;
if (x <= segments[k]. x).
{.
j = k;
}.
else.
{.
i = k;
}.
}.
s = segments[j];
}.
double dx = x — s. x;
return s. a + (s.b + (s.c / 2.0 + s. d * dx / 6.0) * dx) * dx;
}.
}.
ΠΡΡΠ΅ΠΊΡ ΠΠΈΠ±Π±ΡΠ° Π΄Π»Ρ ΡΠΏΠ»Π°ΠΉΠ½ — ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ.
ΠΡΡΡΡ — ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΈΠ΄Π°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠΏΠ»Π°ΠΉΠ½ Π΄Π»Ρ. ΠΡΡΡΡ ΠΈ — ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½ Ρ ΡΠ·Π»Π°ΠΌΠΈ), ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΠΈΡΡΡΡΠΈΠΉ Π² ΡΠΎΡΠΊΠ°Ρ , Ρ. Π΅.; Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π°Π»Π³Π΅Π±ΡΠ°ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΎΡΠ»Π΅Π½ΠΎΠΌ ΡΡΠ΅ΡΠ΅ΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠΌ ΠΊΡΠ°Π΅Π²ΡΠΌ ΡΡΠ»ΠΎΠ²ΠΈΡΠΌ ΠΈΠ»ΠΈ ΠΈ (. Π’ΠΎΠ³Π΄Π° Π² ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ ΡΠΎΡΠΊΠΈ a ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ΅ΠΊΡ ΠΠΈΠ±Π±ΡΠ°, ΡΠΎΡΠ½Π΅Π΅.
Π’Π΅ΠΎΡΠ΅ΠΌΠ°. ΠΠ»Ρ.
Π‘Π»Π΅Π΄ΡΡΠ²ΠΈΠ΅. ΠΠ»Ρ ΠΈΠΌΠ΅Π΅ΠΌΠΏΡΠΈ (ΡΠΈΡΠ»ΠΎ ΡΠ·Π»ΠΎΠ²).
ΠΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ ΡΠ΅ΡΠ΅Π· Q ΠΊΠ»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΡΡΠΎΡΠ½ΠΎ-Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΡΡ Π½Π° ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΊΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ Π½Π° Π½Π΅ΠΌ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·ΡΡΠ²ΠΎΠ² I ΡΠΎΠ΄Π°,. ΠΠ»Ρ Π»ΡΠ±ΠΎΠΉ ΡΠΏΡΠ°Π²Π΅Π΄Π»ΠΈΠ²ΠΎ.
Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΡΠΎ ΠΈΠ· ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΡΡ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ ΠΏΠ°ΡΠ°Π±ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠ² ΠΏΡΠΈ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΊΠ΅ Π΄Π»Ρ Π»ΡΠ±ΠΎΠΉ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ:
Π’Π΅ΠΎΡΠ΅ΠΌΠ°. ΠΡΡΡΡ, ΡΠΎΠ³Π΄Π° Π΄Π»Ρ ΠΏΠ°ΡΠ°Π±ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΈ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΏΠ»Π°ΠΉΠ½-ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ ΠΏΡΠΈ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΊΠ΅ ΠΈ ΠΏΡΠΈ Π½ΡΠ»Π΅Π²ΡΡ ΠΊΡΠ°Π΅Π²ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ Π΄Π»Ρ Π²ΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΠΏΠ»Π°ΠΉΠ½Π° Π² ΠΊΠΎΠ½ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΈΠΌΠ΅Π΅ΠΌ ΡΡ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠΏΠ»Π°ΠΉΠ½Π° ΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ (- ΡΠΈΡΠ»ΠΎ ΡΠ·Π»ΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ).
Π ΡΠΎΡΠΊΠ°Ρ ΡΠ°Π·ΡΡΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ ΡΡΡΠ΅ΠΊΡ ΠΠΈΠ±Π±ΡΠ° Π²Π΅Π»ΠΈΡΠΈΠ½ΠΎΠΉ ΡΠΊΠ°ΡΠΊΠ° Π΄Π»Ρ ΠΏΠ°ΡΠ°Π±ΠΎΠ»ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΈ Π΄Π»Ρ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠ².
ΠΡΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΠΎΠ»ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΎ ΡΠΊΠ°ΡΠΊΠ°ΠΌΠΈ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ Π²Π±Π»ΠΈΠ·ΠΈ ΡΠΎΡΠΊΠΈ ΡΠ°Π·ΡΡΠ²Π° ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ, Π°ΠΌΠΏΠ»ΠΈΡΡΠ΄Π° ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈ Π½Π΅ Π·Π°ΡΡΡ Π°Π΅Ρ, Π° ΡΡΡΠ΅ΠΌΠΈΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅. ΠΡΠΎ ΡΠ²Π»Π΅Π½ΠΈΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΎΠΌ ΠΠΈΠ±Π±ΡΠ°.
ΠΠ»Ρ ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠΏΠ»Π°ΠΉΠ½Π° Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ ΡΡΡΠ΅ΠΊΡ ΠΠΈΠ±Π±ΡΠ° ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΡΠΎΡΠΊΠ° ΡΠ°Π·ΡΡΠ²Π° Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°.
ΠΡΡΠΈΠ»Π»ΡΡΠΈΡ ΠΎΡΠ»Π°Π±Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ. ΠΡΠΈ ΠΈΠΌΠ΅Π΅ΠΌ ΡΡΠΌΠΈΡΠΎΠ² ΠΊΡΠ±ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠ»Π°ΠΉΠ½, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅ΡΡ.
ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠ»Π°ΠΉΠ½ Π΄Π»Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΎΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π²ΡΡΠ΅, h=0.2.
Π ΡΡΠΎ ΡΠΏΠ»Π°ΠΉΠ½ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ Π΄Π»Ρ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΠ· Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π²ΠΈΠ΄Π½ΠΎ, ΡΡΠΎ Ρ ΡΠΏΠ»Π°ΠΉΠ½Π° Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ·Π»Π°ΠΌΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡ ΠΎΡΡΠΈΠ»Π»ΡΡΠΈΠΈ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΠΎΡΠΊΠΈ ΡΠ°Π·ΡΡΠ²Π°, ΠΎΠ΄Π½Π°ΠΊΠΎ Π²ΠΈΠ΄Π½Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ ΠΏΡΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΡΠ»Π΅Π²Π° ΠΊ ΡΠΎΡΠΊΠ΅ ΡΠ°Π·ΡΡΠ²Π°.