|
Òåêñò ïîäïðîãðàììû è âåðñèé de94r_c.zip, de94d_c.zip, de96r_c.zip, de96d_c.zip, de90r_c.zip, de90d_c.zip, de92r_c.zip, de92d_c.zip |
Òåêñòû òåñòîâûõ ïðèìåðîâ tde94r_c.zip, tde94d_c.zip, tde96r_c.zip, tde96d_c.zip , tde90r_c.zip, tde90d_c.zip, tde92r_c.zip, tde92d_c.zip |
Âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà
Âûïîëíÿåòñÿ îäèí øàã ÷èñëåííîãî èíòåãðèðîâàíèÿ ñèñòåìû M îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà
Y ' = F( X, Y ) ,
Y = ( y1, ..., yM ) , F = ( f1 ( X, y1, ..., yM ), ..., fM ( X, y1, ..., yM ) )
ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà.
Ïî çàäàííîìó çíà÷åíèþ YX ðåøåíèÿ â óçëå Xn âû÷èñëÿåòñÿ çíà÷åíèå ýòîãî ðåøåíèÿ â óçëå Xn + H. Âñå êîìïîíåíòû ðåøåíèÿ âû÷èñëÿþòñÿ ñ êîíòðîëåì òî÷íîñòè ïî ìåðå ïîãðåøíîñòè, êîòîðûé çàêëþ÷àåòñÿ â ñëåäóþùåì. Åñëè íåêîòîðàÿ êîìïîíåíòà ïðèáëèæåííîãî ðåøåíèÿ ïî àáñîëþòíîé âåëè÷èíå íå ìåíüøå íåêîòîðîé çàäàííîé êîíñòàíòû P (íàçûâàåìîé ãðàíèöåé ïåðåõîäà), òî êîíòðîëü òî÷íîñòè äëÿ ýòîé êîìïîíåíòû âåäåòñÿ ïî îòíîñèòåëüíîé ïîãðåøíîñòè, èíà÷å - ïî àáñîëþòíîé. Çíà÷åíèå H ìîæåò áûòü ìåíüøå èëè ðàâíî çíà÷åíèþ øàãà èíòåãðèðîâàíèÿ, çàäàâàåìîìó ïîëüçîâàòåëåì ïðè îáðàùåíèè ê ïîäïðîãðàììå.
Àðòåìüåâ Ñ.Ñ., Äåìèäîâ Ã.Â. A - óñòîé÷èâûé ìåòîä òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà òî÷íîñòè ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêèõ ñèñòåì îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé. Íåêîòîðûå ïðîáëåìû âû÷èñëèòåëüíîé è ïðèêëàäíîé ìàòåìàòèêè. Íîâîñèáèðñê: "Íàóêà", 1975.
Ñîâðåìåííûå ÷èñëåííûå ìåòîäû ðåøåíèÿ îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé. Ïîä ðåä. Äæ.Õîëëà è Äæ.Óàòòà. Ì.: "Ìèð", 1979.
int de94r_c(real *f, S_fp fj, S_fp fx, integer *m,
integer *jstart, real *hmin, real *eps, real *p, real *yx, real *x,
real *h, logical *bul, real *xp, real *yp, real *a, real *a1,
real *a2, real *rab, real *r1, real *r2, real *r3, real *r4,
real *yd, integer *ierr)
Ïàðàìåòðû
| f - |
èìÿ ïîäïðîãðàììû âû÷èñëåíèÿ çíà÷åíèé ïðàâîé
÷àñòè äèôôåðåíöèàëüíûõ óðàâíåíèé. Ïåðâûé îïåðàòîð
ïîäïðîãðàììû äîëæåí èìåòü âèä: int f (float *x, float *y, float *dy, int *m). Çäåñü x, y - çíà÷åíèÿ íåçàâèñèìîé è çàâèñèìîé ïåðåìåííûõ, ñîîòâåòñòâåííî. Âû÷èñëåííîå çíà÷åíèå ïðàâîé ÷àñòè äîëæíî áûòü ïîìåùåíî â dy; â ñëó÷àå ñèñòåìû óðàâíåíèé, ò.å. êîãäà m ≠ 1, ïàðàìåòðû y è dy ïðåäñòàâëÿþò îäíîìåðíûå ìàññèâû äëèíîé m (òèï ïàðàìåòðîâ x, y è dy: âåùåñòâåííûé); |
| fj - |
èìÿ ïîäïðîãðàììû âû÷èñëåíèÿ çíà÷åíèé ýëåìåíòîâ ìàòðèöû ßêîáè
∂f / ∂y
ïðàâîé ÷àñòè ñèñòåìû. Ïåðâûé îïåðàòîð ïîäïðîãðàììû äîëæåí èìåòü âèä: int fj (float *x, float *y, float *z, int *m). Çäåñü x, y - çíà÷åíèÿ íåçàâèñèìîé è çàâèñèìîé ïåðåìåííûõ, ñîîòâåòñòâåííî.  ñëó÷àå ñèñòåìû óðàâíåíèé, ò.å. êîãäà m ≠ 1, ïàðàìåòð y ïðåäñòàâëÿåò ñîáîé îäíîìåðíûé ìàññèâ äëèíû m, à ïàðàìåòð z - äâóìåðíûé ìàññèâ ðàçìåðà m * m. Çíà÷åíèÿ ýëåìåíòîâ ìàòðèöû ßêîáè ∂f / ∂y ïðàâîé ÷àñòè ñèñòåìû äîëæíû áûòü ïîìåùåíû â ìàññèâ z, ïðè ýòîì ÷àñòíàÿ ïðîèçâîäíàÿ îò ïðàâîé ÷àñòè i - ãî óðàâíåíèÿ ïî j - îé ïåðåìåííîé y ( j ) çàïîìèíàåòñÿ â ýëåìåíòå z ( i, j )(òèï ïàðàìåòðîâ x, y è z: âåùåñòâåííûé); |
| fx - |
èìÿ ïîäïðîãðàììû âû÷èñëåíèÿ çíà÷åíèé ÷àñòíûõ
ïðîèçâîäíûõ ïî x ïðàâîé ÷àñòè ñèñòåìû
∂f / ∂x.
Ïåðâûé îïåðàòîð ïîäïðîãðàììû äîëæåí èìåòü âèä: int fx (float *x, float *y, float *z1, int *m). Çäåñü: x, y - çíà÷åíèÿ íåçàâèñèìîé è çàâèñèìîé ïåðåìåííûõ, ñîîòâåòñòâåííî.  ñëó÷àå ñèñòåìû óðàâíåíèé, ò.å. êîãäà m ≠ 1, ïàðàìåòðû y è z1 ïðåäñòàâëÿþò ñîáîé îäíîìåðíûå ìàññèâû äëèíîé m. Çíà÷åíèÿ ÷àñòíûõ ïðîèçâîäíûõ ïî x ïðàâîé ÷àñòè ñèñòåìû ∂f / ∂x äîëæíû áûòü ïîìåùåíû â ìàññèâ z1; ïðè ýòîì ÷àñòíàÿ ïðîèçâîäíàÿ îò ïðàâîé ÷àñòè i - ãî óðàâíåíèÿ çàïîìèíàåòñÿ â ýëåìåíòå z1 ( i ) (òèï ïàðàìåòðîâ x, y è z1: âåùåñòâåííûé); |
| m - | êîëè÷åñòâî óðàâíåíèé â ñèñòåìå (òèï: öåëûé); |
| jstart - | öåëûé óêàçàòåëü ðåæèìà èñïîëüçîâàíèÿ ïîäïðîãðàììû, èìåþùèé ñëåäóþùèå çíà÷åíèÿ: |
| 0,+1 - | âûïîëíèòü îäèí øàã èíòåãðèðîâàíèÿ ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé äëÿ çíà÷åíèé íåçàâèñèìîé è çàâèñèìîé ïåðåìåííûõ è øàãà èíòåãðèðîâàíèÿ, çàäàííûõ ïàðàìåòðàìè x, yx è h, ñîîòâåòñòâåííî; |
| -1 - | ïîâòîðèòü ïîñëåäíèé øàã èíòåãðèðîâàíèÿ ñ íîâûìè çíà÷åíèÿìè ïàðàìåòðîâ h è/èëè hmin; |
| íà âûõîäå èç ïîäïðîãðàììû jstart ðàâåí + 1; | |
| hmin - | ìèíèìàëüíîå çíà÷åíèå àáñîëþòíîé âåëè÷èíû øàãà, êîòîðîå ðàçðåøàåòñÿ èñïîëüçîâàòü ïðè èíòåãðèðîâàíèè äàííîé ñèñòåìû óðàâíåíèé (òèï: âåùåñòâåííûé); |
| eps - | äîïóñòèìàÿ ìåðà ïîãðåøíîñòè, ñ êîòîðîé òðåáóåòñÿ âû÷èñëèòü âñå êîìïîíåíòû ðåøåíèÿ (òèï: âåùåñòâåííûé); |
| p - | ãðàíèöà ïåðåõîäà, èñïîëüçóåìàÿ ïðè îöåíêå ìåðû ïîãðåøíîñòè ðåøåíèÿ (òèï: âåùåñòâåííûé); |
| yx, x - | çàäàííûå âåùåñòâåííûå çíà÷åíèÿ ðåøåíèÿ è ñîîòâåòñòâóþùåå åìó çíà÷åíèå àðãóìåíòà; â ðåçóëüòàòå ðàáîòû ïîäïðîãðàììû â x ïîëó÷àåòñÿ íîâîå çíà÷åíèå àðãóìåíòà, â yx - ñîîòâåòñòâóþùåå çíà÷åíèå ðåøåíèÿ; â ñëó÷àå ñèñòåìû óðàâíåíèé, ò.å. êîãäà m ≠ 1, yx çàäàåòñÿ îäíîìåðíûì ìàññèâîì äëèíû m; |
| h - | âåùåñòâåííàÿ ïåðåìåííàÿ, ñîäåðæàùàÿ çíà÷åíèå øàãà èíòåãðèðîâàíèÿ; åñëè äëÿ ýòîãî çíà÷åíèÿ øàãà òî÷íîñòü ïðèáëèæåííîãî ðåøåíèÿ äîñòèãàåòñÿ, òî èìåííî îí è ðåàëèçóåòñÿ ïîäïðîãðàììîé, èíà÷å ýòîò øàã óìåíüøàåòñÿ ïîäïðîãðàììîé äî òåõ ïîð, ïîêà íå áóäåò äîñòèãíóòà çàäàííàÿ òî÷íîñòü eps; íà âûõîäå èç ïîäïðîãðàììû h ñîäåðæèò ðåêîìåíäóåìîå ïîäïðîãðàììîé çíà÷åíèå ñëåäóþùåãî øàãà èíòåãðèðîâàíèÿ, îïðåäåëÿåìîå åþ ñ öåëüþ äîñòèæåíèÿ áîëåå ýêîíîìíîãî ñïîñîáà èíòåãðèðîâàíèÿ; |
| bul - | ëîãè÷åñêàÿ ïåðåìåííàÿ, çíà÷åíèå êîòîðîé ïðè îáðàùåíèè ê ïîäïðîãðàììå ïîëàãàåòñÿ ðàâíûì TRUE_, åñëè çàäàííûé â h øàã âûâîäèò â êîíåö èíòåðâàëà èíòåãðèðîâàíèÿ, è FALSE_ â ïðîòèâíîì ñëó÷àå; â ðåçóëüòàòå ðàáîòû ïîäïðîãðàììû bul ðàâíî FALSE_, åñëè âìåñòî èñõîäíîãî øàãà èíòåãðèðîâàíèÿ áûë ðåàëèçîâàí ìåíüøèé øàã; â ïðîòèâíîì ñëó÷àå, ò.å. êîãäà áûë âûïîëíåí èìåííî çàäàííûé ïðè îáðàùåíèè â h øàã, çíà÷åíèå ïàðàìåòðà bul íå ìåíÿåòñÿ; |
| xp, yp - | âåùåñòâåííàÿ ðàáî÷àÿ ïåðåìåííàÿ è îäíîìåðíûé ðàáî÷èé ìàññèâ äëèíû m, ñîîòâåòñòâåííî; çíà÷åíèÿ ïàðàìåòðîâ xp, yp íà âûõîäå èç ïîäïðîãðàììû ðàâíû òåì çíà÷åíèÿì, êîòîðûå èìåëè ïàðàìåòðû x, yx ïðè âõîäå â íåå (ò.å. ïðåäûäóùèé óçåë è ðåøåíèå â íåì); |
|
a - a1, a2 | âåùåñòâåííûå äâóìåðíûå ðàáî÷èå ìàññèâû ðàçìåðà m * m; |
| rab - | âåùåñòâåííûé îäíîìåðíûé ðàáî÷èé ìàññèâ äëèíû 5 * m; íà âûõîäå èç ïîäïðîãðàììû â ïåðâûõ m ýëåìåíòàõ ýòîãî ìàññèâà ñîäåðæèòñÿ ïîãðåøíîñòü âû÷èñëåííîãî ïðèáëèæåííîãî ðåøåíèÿ, ïîëó÷åííàÿ ïî ïðàâèëó Ðóíãå; |
|
r1, r2 - r3, r4 yd | âåùåñòâåííûå îäíîìåðíûå ðàáî÷èå ìàññèâû äëèíû m; |
| ierr - | öåëàÿ ïåðåìåííàÿ, çíà÷åíèå êîòîðîé â ðåçóëüòàòå ðàáîòû ïîäïðîãðàììû ïîëàãàåòñÿ ðàâíûì 65, åñëè êàêàÿ - íèáóäü êîìïîíåíòà ðåøåíèÿ íå ìîæåò áûòü âû÷èñëåíà ñ òðåáóåìîé òî÷íîñòüþ eps; â ýòîì ñëó÷àå ïîñëåäíèé øàã èíòåãðèðîâàíèÿ ñèñòåìû ìîæíî ïîâòîðèòü îáðàùåíèåì ê ïîäïðîãðàììå ñ íîâûìè çíà÷åíèÿìè ïàðàìåòðîâ h, hmin è çíà÷åíèåì jstart = - 1. |
Âåðñèè
| de96r_c - |
âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ
æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé
ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî
ïîðÿäêà. Îòëè÷èå ïîäïðîãðàììû de96r_c îò ïîäïðîãðàììû
de94r_c ñîñòîèò â òîì, ÷òî ïðè îáðàùåíèè ê ïîäïðîãðàììå
de96r_c íå òðåáóåòñÿ çàäàâàòü ïîäïðîãðàììó âû÷èñëåíèÿ
ìàòðèöû ßêîáè ñèñòåìû è ïîäïðîãðàììó âû÷èñëåíèÿ
÷àñòíûõ ïðîèçâîäíûõ ïðàâîé ÷àñòè ñèñòåìû ïî x . Âñå
÷àñòíûå ïðîèçâîäíûå îò ïðàâîé ÷àñòè âû÷èñëÿþòñÿ â
ïîäïðîãðàììå de96r_c ñ ïîìîùüþ ðàçíîñòíûõ îòíîøåíèé.
Ïåðâûé îïåðàòîð ïîäïðîãðàììû de96r_c èìååò âèä:
int de96r_c (real *f, integer *m, integer *jstart, real *hmin,
real *eps, real *p, real *yx, real *x, real *h, logical *bul,
real *xp, real *yp, real *a, real *a1, real *a2, real *rab, real *r1,
real *r2, real *r3, real *r4, real *yd, integer *ierr)
Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de96r_c
îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ ïîäïðîãðàììû de94r_c
îòñóòñòâèåì ïàðàìåòðîâ fj è fx.
Ïàðàìåòðû ïîäïðîãðàììû de96r_c èìåþò òîò æå ñìûñë, ÷òî
è îäíîèìåííûå ïàðàìåòðû ïîäïðîãðàììû de94r_c;
|
| de90r_c - |
âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ
àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ
óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà.
Äàííàÿ ïîäïðîãðàììà ïðåäíàçíà÷åíà äëÿ èíòåãðèðîâàíèÿ
ñèñòåì óðàâíåíèé, â ïðàâûå ÷àñòè êîòîðûõ íå âõîäèò
íåçàâèñèìàÿ ïåðåìåííàÿ x ,
ò.å. ñèñòåì âèäà y' = f (y) .
Ïåðâûé îïåðàòîð ïîäïðîãðàììû de90r_c èìååò âèä:
int de90r_c (real *f, S_fp fj, integer *m, integer *jstart,
real *hmin, real *eps, real *p, real *yx, real *x, real *h,
logical *bul, real *xp, real *yp, real *a, real *a1, real *a2,
real *rab, real *r1, real *r2, real *yd, integer *ierr)
Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de90r_c
îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ de94r_c îòñóòñòâèåì
ïàðàìåòðîâ fx, r3, r4.
Ïàðàìåòðû ïîäïðîãðàììû de90r_c èìåþò òîò æå ñìûñë, ÷òî
è îäíîèìåííûå ïàðàìåòðû ïîäïðîãðàììû de94r_c, êðîìå
ïàðàìåòðà rab. Â ïîäïðîãðàììå de90r_c ïàðàìåòð rab
ïðåäñòàâëÿåò îäíîìåðíûé âåùåñòâåííûé ðàáî÷èé ìàññèâ äëèíû
4 * m;
|
| de92r_c - |
âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ
æåñòêîé àâòîíîìíîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ
óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà
÷åòâåðòîãî ïîðÿäêà. Äàííàÿ ïîäïðîãðàììà ïðåäíàçíà÷åíà
äëÿ èíòåãðèðîâàíèÿ ñèñòåì óðàâíåíèé, â ïðàâûå ÷àñòè
êîòîðûõ íå âõîäèò íåçàâèñèìàÿ ïåðåìåííàÿ x, ò.å.
ñèñòåì âèäà y' = f (y) .
Îòëè÷èå ïîäïðîãðàììû de92r_c îò
ïîäïðîãðàììû de94r_c ñîñòîèò â òîì, ÷òî ïðè îáðàùåíèè
ê ïîäïðîãðàììå de92r_c íå òðåáóåòñÿ çàäàâàòü ïîäïðîãðàììó
âû÷èñëåíèÿ ìàòðèöû ßêîáè ñèñòåìû
∂f / ∂y
è ïîäïðîãðàììó âû÷èñëåíèÿ ÷àñòíûõ ïðîèçâîäíûõ
∂f / ∂x .
Ïåðâûé îïåðàòîð ïîäïðîãðàììû de92r_c èìååò âèä:
int de92r_c (real *f, integer *m, integer *jstart, real *hmin,
real *eps, real *p, real *yx, real *x, real *h, logical *bul,
real *xp, real *yp, real *a, real *a1, real *a2, real *rab,
real *r1, real *r2, real *yd, integer *ierr)
Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de92r_c
îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ ïîäïðîãðàììû de94r_c
îòñóòñòâèåì ïàðàìåòðîâ fj, fx, r3, r4.
Ïàðàìåòðû ïîäïðîãðàììû èìåþò òîò æå ñìûñë, ÷òî è â
ïîäïðîãðàììå de94r_c, êðîìå ïàðàìåòðà rab. Â ïîäïðîãðàììå
de92r_c ïàðàìåòð rab ïðåäñòàâëÿåò îäíîìåðíûé âåùåñòâåííûé
ðàáî÷èé ìàññèâ äëèíû 4 * m;
|
| de94d_c - | âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de94r_c; ïðè ýòîì ïàðàìåòðû hmin, eps, p, yx, x, h, xp, yp, a, a1, a2, rab, r1, r2, r3, r4, yd è ïàðàìåòðû x, y, dy, z, z1 â ïîäïðîãðàììàõ f, fj, fx äîëæíû èìåòü òèï double; |
| de96d_c - | âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de96r_c; ïðè ýòîì ïàðàìåòðû hmin, eps, p, yx, x, h, xp, yp, a, a1, a2, rab, r1, r2, r3, r4, yd è ïàðàìåòðû x, y, dy â ïîäïðîãðàììå f äîëæíû èìåòü òèï double; |
| de90d_c - | âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de90r_c; ïðè ýòîì ïàðàìåòðû hmin, eps, p, yx, x, h, xp, yp, a, a1, a2, rab, r1, r2, yd è ïàðàìåòðû x, y, dy, z â ïîäïðîãðàììàõ f, fj äîëæíû èìåòü òèï double; |
| de92d_c - | âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé àâòîíîìíîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de92r_c; ïðè ýòîì ïàðàìåòðû hmin, eps, p, yx, x, h, xp, yp, a, a1, a2, rab, r1, r2, yd è ïàðàìåòðû x, y, dy â ïîäïðîãðàììå f äîëæíû èìåòü òèï double. |
Âûçûâàåìûå ïîäïðîãðàììû
| aig2r_c - | îáðàùåíèå âåùåñòâåííîé ìàòðèöû ìåòîäîì Æîðäàíà ñ âûáîðîì âåäóùåãî ýëåìåíòà ïî âñåé ìàòðèöå. Âûçûâàåòñÿ ïðè ðàáîòå ïîäïðîãðàìì de90r_c, de92r_c, de94r_c, de96r_c; |
| aig2d_c - | îáðàùåíèå âåùåñòâåííîé ìàòðèöû, çàäàííîé ñ óäâîåííîé òî÷íîñòüþ, ìåòîäîì Æîðäàíà ñ âûáîðîì âåäóùåãî ýëåìåíòà ïî âñåé ìàòðèöå. Âûçûâàåòñÿ ïðè ðàáîòå ïîäïðîãðàìì de90d_c, de92d_c, de94d_c, de96d_c; |
| utde20_c - | ïîäïðîãðàììà âûäà÷è äèàãíîñòè÷åñêèõ ñîîáùåíèé ïðè ðàáîòå ïîäïðîãðàìì de90r_c, de92r_c, de94r_c, de96r_c; |
| utde21_c - | ïîäïðîãðàììà âûäà÷è äèàãíîñòè÷åñêèõ ñîîáùåíèé ïðè ðàáîòå ïîäïðîãðàìì de90d_c, de92d_c, de94d_c, de96d_c. |
| Êðîìå òîãî, ïðè ðàáîòå ïîäïðîãðàììû de90r_c âûçûâàþòñÿ ðàáî÷èå ïîäïðîãðàììû de92rs_c, de92rk_c; ïðè ðàáîòå ïîäïðîãðàììû de92r_c âûçûâàþòñÿ ðàáî÷èå ïîäïðîãðàììû de92rs_c, de92rk_c, de84rj_c; ïðè ðàáîòå ïîäïðîãðàììû de94r_c âûýûâàþòñÿ ðàáî÷èå ïîäïðîãðàììû de96rs_c, de92rk_c; ïðè ðàáîòå ïîäïðîãðàììû de96r_c âûçûâàþòñÿ ðàáî÷èå ïîäïðîãðàììû de96rs_c, de92rk_c, de84rj_c, de96rx_c; ïðè ðàáîòå ïîäïðîãðàììû de90d_c âûçûâàþòñÿ ðàáî÷èå ïîäïðîãðàììû de92ds_c, de92dk_c; ïðè ðàáîòå ïîäïðîãðàììû de92d_c âûçûâàþòñÿ ïîäïðîãðàììû de92ds_c, de92dk_c, de84dj_c; ïðè ðàáîòå ïîäïðîãðàììû de94d_c âûçûâàþòñÿ ïîäïðîãðàììû de94ds_c, de92dk_c; ïðè ðàáîòå ïîäïðîãðàììû de96d_c âûçûâàþòñÿ ïîäïðîãðàììû de96ds_c, de92dk_c, de84dj_c, de96dx_c. |
Çàìå÷àíèÿ ïî èñïîëüçîâàíèþ
|
 îáùåì ñëó÷àå çàäàííàÿ òî÷íîñòü íå ãàðàíòèðóåòñÿ. Ïðè ðàáîòå ïîäïðîãðàììû è åå âåðñèé çíà÷åíèÿ ïàðàìåòðîâ m, hmin, eps, p ñîõðàíÿþòñÿ. Ïðè ðàáîòå ïîäïðîãðàìì f, fj, fx çíà÷åíèÿ ïàðàìåòðîâ m, x, y íå äîëæíû èçìåíÿòüñÿ. Ïðè âûïîëíåíèè èç òî÷êè xn îäíîãî øàãà h ìåòîäà òèïà Ðîçåíáðîêà â ïîäïðîãðàììå de94r_c è åå âåðñèÿõ âû÷èñëÿþòñÿ ÷åòûðå çíà÷åíèÿ ïðàâîé ÷àñòè ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé. Ñðåäè ýòèõ çíà÷åíèé åñòü îäíî, êîòîðîå äîëæíî âû÷èñëÿòüñÿ ïðè çíà÷åíèè íåçàâèñèìîé ïåðåìåííîé x, ðàâíîì xn - h. Ýòî çíà÷åíèå àðãóìåíòà xn íàõîäèòñÿ ñëåâà îò òî÷êè xn ïðè h > 0 è ñïðàâà îò òî÷êè xn ïðè h < 0. Ýòî ñëåäóåò ó÷èòûâàòü ïðè ñîñòàâëåíèè ïîäïðîãðàììû f âû÷èñëåíèÿ ïðàâîé ÷àñòè ñèñòåìû. Åñëè ïðàâàÿ ÷àñòü ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé íå îïðåäåëåíà äëÿ x < xn ïðè èíòåãðèðîâàíèè ñëåâà íàïðàâî (h > 0) èëè äëÿ x < xn ïðè èíòåãðèðîâàíèè ñïðàâà íàëåâî (h < 0), òî ïîïûòêà âû÷èñëèòü ïðàâóþ ÷àñòü äëÿ óêàçàííîãî çíà÷åíèÿ àðãóìåíòà x ìîæåò ïðèâåñòè ê àâîñòó.Åñëè ïðè ðåøåíèè ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé íå çàäàþòñÿ ïîäïðîãðàììû fj âû÷èñëåíèÿ ìàòðèöû ßêîáè è fx âû÷èñëåíèÿ ÷àñòíûõ ïðîèçâîäíûõ ïî x ïðàâîé ÷àñòè ñèñòåìû (ò.å. ïðîèçâîäèòñÿ îáðàùåíèå ê ïîäïðîãðàììàì de92r_c, de96r_c, de92d_c, de96d_c), òî âñå ÷àñòíûå ïðîèçâîäíûå ïî y è ïî x â ýòèõ ïîäïðîãðàììàõ àïïðîêñèìèðóþòñÿ öåíòðàëüíûìè ðàçíîñòíûìè îòíîøåíèÿìè. Çàìåíà òî÷íûõ çíà÷åíèé ïðîèçâîäíûõ ðàçíîñòíûìè àïïðîêñèìàöèÿìè ìîæåò ïðèâåñòè ê ðîñòó ïîãðåøíîñòè ïðèáëèæåííîãî ðåøåíèÿ ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé ïî ñðàâíåíèþ ñ òåì, ÷òî áûëî áû, åñëè áû âñå ÷àñòíûå ïðîèçâîäíûå âû÷èñëÿëèñü òî÷íî ñ ïîìîùüþ ïîäïðîãðàìì fj è fx. Äàæå åñëè áóäåò ìàëà ïîãðåøíîñòü àïïðîêñèìàöèè ÷àñòíûõ ïðîèçâîäíûõ (íàïðèìåð, åñëè ïðàâàÿ ÷àñòü ñèñòåìû ÿâëÿåòñÿ ëèíåéíîé ôóíêöèåé ñâîèõ àðãóìåíòîâ, òî ïîãðåøíîñòü àïïðîêñèìàöèè ÷àñòíûõ ïðîèçâîäíûõ ðàâíà íóëþ), ìîæåò îêàçàòüñÿ çíà÷èòåëüíîé âû÷èñëèòåëüíàÿ ïîãðåøíîñòü, îñîáåííî, êîãäà âû÷èñëåíèÿ âûïîëíÿþòñÿ ñ îäèíàðíîé òî÷íîñòüþ. Ïðè ýòîì âû÷èñëèòåëüíàÿ ïîãðåøíîñòü ìîæåò äàæå ïðåâîñõîäèòü âåðõíèé ïðåäåë ïîãðåøíîñòè ïðèáëèæåííîãî ðåøåíèÿ, çàäàííûé ïðè îáðàùåíèè ê ïîäïðîãðàììå ïàðàìåòðîì eps.  ýòîì ñëó÷àå öåëåñîîáðàçíî èñïîëüçîâàòü íå ïîäïðîãðàììû de92r_c, de96r_c, à èõ âåðñèè, âûïîëíÿþùèå âû÷èñëåíèÿ ñ óäâîåííûì ÷èñëîì çíà÷àùèõ öèôð, ò.å. ïîäïðîãðàììû de92d_c, de96d_c. Åñëè ÷àñòíûå ïðîèçâîäíûå ïî x îò ïðàâîé ÷àñòè ñèñòåìû âû÷èñëÿþòñÿ ñ ïîìîùüþ öåíòðàëüíûõ ðàçíîñòíûõ îòíîøåíèé (ò.å. êîãäà ïðîèçâîäèòñÿ îáðàùåíèå ê ïîäïðîãðàììàì de96r_c, de96d_c), òî çíà÷åíèÿ ïðàâîé ÷àñòè ñèñòåìû, íåîáõîäèìûå äëÿ àïïðîêñèìàöèè ýòîé ïðîèçâîäíîé, áóäóò âû÷èñëÿòüñÿ ñ ïîìîùüþ ïîäïðîãðàììû f ïðè çíà÷åíèÿõ àðãóìåíòà x, íàõîäÿùèõñÿ ïî ðàçíûå ñòîðîíû îò òî÷êè xn, à èìåííî, ïðè xn - Δ, xn + Δ ãäå Δ - çíà÷åíèå, çàäàâàåìîå ïàðàìåòðîì eps. Åñëè ïðàâàÿ ÷àñòü ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé íå îïðåäåëåíà äëÿ x < xn ïðè èíòåãðèðîâàíèè ñëåâà íàïðàâî èëè äëÿ x > xn ïðè èíòåãðèðîâàíèè ñïðàâà íàëåâî, òî ïîïûòêà âû÷èñëèòü ïðàâóþ ÷àñòü äëÿ óêàçàííîãî çíà÷åíèÿ àðãóìåíòà x ìîæåò ïðèâåñòè ê àâîñòó. |
Ðåøàåòñÿ çàäà÷à Êîøè
y1' = - 100y1
y2' = - 100y1 - 2y2 + 20e - 100x + 2e - x cos x
y3' = - 100y1 + 9998y2 - 9990y3 - 10y4 + 20e - 100x + 2e - x cos x
y4' = - 100y1 + 9988y2 + 20y3 - 10010y4 + 20e - 100x + 2e - x cos x
x = 0 , y1(0) = 10 , y2(0) = 11 , y3(0) = 111 , y4(0) = 111 .
Òî÷íîå ðåøåíèå çàäà÷è èìååò âèä:
y1 = 10e - 100x
y2 = 10e - 100x + e - x cos x + e - x sin x
y3 = y2 + 100e - 10000x cos 10x
y4 = y3 + 100e - 10000x sin 10x
Ìàòðèöà ßêîáè ïðàâîé ÷àñòè ñèñòåìû èìååò âèä:
- 100 0 0 0
- 100 - 2 0 0
- 100 9998 - 9990 - 10
- 100 9988 20 - 10010
×àñòíûå ïðîèçâîäíûå ïî x ïðàâîé ÷àñòè ñèñòåìû èìåþò âèä:
0
- 2000e - 100x - 2e - x (cos x + sin x)
- 2000e - 100x - 2e - x (cos x + sin x)
- 2000e - 100x - 2e - x (cos x + sin x)
Íèæå ïðèâîäÿòñÿ ôðàãìåíò âûçûâàþùåé ïðîãðàììû äëÿ de94r_c, ïîäïðîãðàììû f, fj, fx è ðåçóëüòàòû ñ÷åòà, ïîëó÷åííûå ïîñëå íåñêîëüêèõ îáðàùåíèé ê ïîäïðîãðàììå de94r_c.
int main(void)
{
/* Builtin functions */
double exp(double), cos(double), sin(double);
/* Local variables */
extern int de94r_c(U_fp, U_fp, U_fp, int *, int *, float *, float *,
float *, float *, float *, float *, logical *,
float *, float *, float *, float *, float *,
float *, float *, float *, float *, float *,
float *, int *);
static float hmin;
static int ierr;
static float a[16] /* was [4][4] */;
extern int f_c();
static float h__;
static int m;
static float p, x, a1[16] /* was [4][4] */,
a2[16] /* was [4][4] */,
r1[4], r2[4], r3[4], r4[4], y1, y2, y3, y4;
extern int fj_c();
static int ih;
static float yd[4];
extern int fx_c();
static float xp, yp[4], yx[4];
static int jstart;
static float rab[20];
static logical bul;
static float eps;
m = 4;
x = 0.f;
yx[0] = 10.f;
yx[1] = 11.f;
yx[2] = 111.f;
yx[3] = 111.f;
hmin = 1e-10f;
eps = 1e-4f;
p = 1e3f;
jstart = 0;
h__ = .01f;
ih = 0;
L100:
++ih;
de94r_c((U_fp)f_c, (U_fp)fj_c, (U_fp)fx_c, &m, &jstart, &hmin, &eps, &p,
yx, &x, &h__, &bul, &xp, yp, a, a1, a2, rab, r1, r2, r3, r4, yd,
&ierr);
/* B›—ˆC‹EHˆE TO—HOƒO PE˜EHˆŸ CˆCTEM›: */
y1 = (float)exp(x * -100.f) * 10.f;
y2 = y1 + (float)exp(-x) * ((float)cos(x) + (float)sin(x));
y3 = y2 + (float)exp(x * -1e4f) * 100.f *
(float)cos(x * 10.f);
y4 = y3 + (float)exp(x * -1e4f) * 100.f *
(float)sin(x * 10.f);
printf("\n %16.7e %16.7e ", y1, y2);
printf("\n %16.7e %16.7e \n", y3, y4);
printf("\n %16.7e %16.7e ", yx[0], yx[1]);
printf("\n %16.7e %16.7e \n", yx[2], yx[3]);
printf("\n %16.7e \n", x);
printf("\n %16.7e \n", h__);
/* PAC�E—ATKA �OƒPE˜HOCTˆ �Pˆ�‹ˆ†EHHOƒO PE˜EHˆŸ */
printf("\n %16.7e %16.7e ", rab[0], rab[1]);
printf("\n %16.7e %16.7e \n\n", rab[2], rab[3]);
switch (ih) {
case 1: goto L101;
case 2: goto L102;
case 3: goto L103;
case 4: goto L104;
case 5: goto L105;
case 6: goto L106;
}
L101:
h__ = 1e-8f;
goto L100;
L102:
h__ = -1e-8f;
goto L100;
L103:
jstart = -1;
goto L100;
L104:
jstart = -1;
h__ = -1e-8f;
goto L100;
L105:
h__ = .01f;
goto L100;
L106:
return 0;
} /* main */
int f_c(float *x, float *y, float *dy, int *m)
{
/* Builtin functions */
double exp(double), cos(double);
/* Local variables */
static float t1;
/* Parameter adjustments */
--dy;
--y;
/* Function Body */
dy[1] = y[1] * -100.f;
t1 = (float)exp(*x * -100.f) * 20.f +
(float)exp(-(*x)) * 2.f * (float)cos(*x);
dy[2] = dy[1] - y[2] * 2.f + t1;
dy[3] = dy[1] + y[2] * 9998.f - y[3] * 9990.f - y[4] * 10.f + t1;
dy[4] = dy[1] + y[2] * 9988.f + y[3] * 20.f - y[4] * 10010.f + t1;
return 0;
} /* f_c */
int fj_c(float *x, float *y, float *df, int *m)
{
#define df_ref(a_1,a_2) df[(a_2)*4 + a_1]
/* Parameter adjustments */
df -= 5;
--y;
/* Function Body */
df_ref(1, 1) = -100.f;
df_ref(1, 2) = 0.f;
df_ref(1, 3) = 0.f;
df_ref(1, 4) = 0.f;
df_ref(2, 1) = -100.f;
df_ref(2, 2) = -2.f;
df_ref(2, 3) = 0.f;
df_ref(2, 4) = 0.f;
df_ref(3, 1) = -100.f;
df_ref(3, 2) = 9998.f;
df_ref(3, 3) = -9990.f;
df_ref(3, 4) = -10.f;
df_ref(4, 1) = -100.f;
df_ref(4, 2) = 9988.f;
df_ref(4, 3) = 20.f;
df_ref(4, 4) = -10010.f;
return 0;
} /* fj_c */
#undef df_ref
int fx_c(float *x, float *y, float *dx, int *m)
{
/* Builtin functions */
double exp(double), cos(double), sin(double);
/* Parameter adjustments */
--dx;
--y;
/* Function Body */
dx[1] = 0.f;
dx[2] = (float)exp(*x * -100.f) * -2e3f -
(float)exp(-(*x)) * 2.f * ((float)cos(*x) +
(float)sin(*x));
dx[3] = dx[2];
dx[4] = dx[2];
return 0;
} /* fx_c */
Ðåçóëüòàòû:
ïîñëå ïåðâîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.997558891759 + 00 1.099755889174 + 01
y3 y4
1.085857138761 + 02 1.085880963993 + 02
yx(1) yx(2)
9.997558891700 + 00 1.099755889169 + 01
yx(3) yx(4)
1.085857138677 + 02 1.085880963909 + 02
x h
2.441406250001 - 06 2.441406250001 - 06
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
- 9.701276818918 - 13 - 2.910383045670 - 12
rab(3) rab(4)
7.823109626764 - 09 7.784304519497 - 09
ïîñëå âòîðîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.997548894156 + 00 1.099754889414 + 01
y3 y4
1.085759455506 + 02 1.085783375935 + 02
yx(1) yx(2)
9.997548894098 + 00 1.099754889408 + 01
yx(3) yx(4)
1.085759455420 + 02 1.085783375847 + 02
x h
2.451406249999 - 06 2.000000000004 - 08
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
0.000000000000 + 00 0.000000000000 + 00
rab(3) rab(4)
- 7.761021455135 - 12 - 1.552204291027 - 11
ïîñëå òðåòüåãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.997558891759 + 00 1.099755889174 + 01
y3 y4
1.085857138761 + 02 1.085880963993 + 02
yx(1) yx(2)
9.997558891613 + 00 1.099755889160 + 01
yx(3) yx(4)
1.085857138667 + 02 1.085880963901 + 02
x h
2.441406249998 - 06 - 2.000000000004 - 08
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
- 9.701276818918 - 13 - 9.701276818918 - 13
rab(3) rab(4)
- 2.328306436536 - 11 - 1.552204291027 - 11
ïîñëå ÷åòâåðòîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.997568889303 + 00 1.099756888929 + 01
y3 y4
1.085954831772 + 02 1.085978561790 + 02
yx(1) yx(2)
9.997568889157 + 00 1.099756888914 + 01
yx(3) yx(4)
1.085954831680 + 02 1.085978561698 + 02
x h
2.431406249996 - 06 - 4.000000000008 - 08
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
- 1.940255363783 - 12 - 1.940255363783 - 12
rab(3) rab(4)
- 1.552204291027 - 11 - 1.552204291027 - 11
ïîñëå ïÿòîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.997558891759 + 00 1.099755889174 + 01
y3 y4
1.085857138761 + 02 1.085880963993 + 02
yx(1) yx(2)
9.997558891613 + 00 1.099755889160 + 01
yx(3) yx(4)
1.085857138667 + 02 1.085880963901 + 02
x h
2.441406249998 - 06 - 2.000000000004 - 08
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
- 9.701276818918 - 13 - 9.701276818918 - 13
rab(3) rab(4)
- 2.328306436536 - 11 - 1.552204291027 - 11
ïîñëå øåñòîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
y1 y2
9.995118379389 + 00 1.099511837936 + 01
y3 y4
1.062995982552 + 02 1.062342483763 + 02
yx(1) yx(2)
9.995118379200 + 00 1.099511837916 + 01
yx(3) yx(4)
1.062995982379 + 02 1.062342483588 + 02
x h
4.882812499996 - 06 2.441406250001 - 06
Ðàñïå÷àòêà êîíòðîëüíîãî ÷ëåíà ïîãðåøíîñòè:
rab(1) rab(2)
- 1.940255363783 - 12 - 2.910387045670 - 12
rab(3) rab(4)
7.644606133297 - 09 7.590278983110 - 09