Òåêñò ïîäïðîãðàììû è âåðñèé
de95r_c.zip  de95d_c.zip  de91r_c.zip  de91d_c.zip  de93r_c.zip  de93d_c.zip  de97r_c.zip  de97d_c.zip
Òåêñòû òåñòîâûõ ïðèìåðîâ
tde95r_c.zip  tde95d_c.zip  tde91r_c.zip  tde91d_c.zip  tde93r_c.zip  tde93d_c.zip  tde97r_c.zip  tde97d_c.zip

Ïîäïðîãðàììà:  de95r_c (âåðñèè: de91r_c, de93r_c, de97r_c)

Íàçíà÷åíèå

Âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà

Ìàòåìàòè÷åñêîå îïèñàíèå

Ðåøàåòñÿ çàäà÷à Êîøè äëÿ ñèñòåìû M îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà

                             Y '   =   F(X,Y)  , 
       Y   =   ( y1,...,yM )  ,   F   =   ( f1( X, y1,..., yM ),..., fM( X, y1,..., yM ) ) 

ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà.

Ðåøåíèå âû÷èñëÿåòñÿ â îäíîé òî÷êå XK, êîòîðàÿ ÿâëÿåòñÿ êîíöîì èíòåðâàëà èíòåãðèðîâàíèÿ. Äëÿ âñåõ êîìïîíåíò ðåøåíèÿ îñóùåñòâëÿåòñÿ êîíòðîëü òî÷íîñòè ïî ìåðå ïîãðåøíîñòè, êîòîðûé çàêëþ÷àåòñÿ â ñëåäóþùåì. Åñëè íåêîòîðàÿ êîìïîíåíòà ïðèáëèæåííîãî ðåøåíèÿ ïî àáñîëþòíîé âåëè÷èíå íå ìåíüøå íåêîòîðîé íàïåðåä çàäàííîé êîíñòàíòû P (íàçûâàåìîé ãðàíèöåé ïåðåõîäà), òî êîíòðîëü òî÷íîñòè äëÿ ýòîé êîìïîíåíòû âåäåòñÿ ïî îòíîñèòåëüíîé ïîãðåøíîñòè, èíà÷å - ïî àáñîëþòíîé.

Àðòåìüåâ Ñ.Ñ., Äåìèäîâ Ã.Â. A - óñòîé÷èâûé ìåòîä òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà òî÷íîñòè ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêèõ ñèñòåì îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé/_htm_c/ Íåêîòîðûå ïðîáëåìû âû÷èñëèòåëüíîé è ïðèêëàäíîé ìàòåìàòèêè. Íîâîñèáèðñê: "Íàóêà", 1975.

Ñîâðåìåííûå ÷èñëåííûå ìåòîäû ðåøåíèÿ îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé/ Ïîä ðåä. Äæ.Õîëëà è Äæ.Óàòòà. Ì.: "Ìèð", 1979.

Èñïîëüçîâàíèå

    int de95r_c (real *f, real *fj, real *fx, integer *m, real *xn,
                 real *yn, real *xk, real *hmin, real *eps, real *p, real *h__,
                 real *y, real *r__, 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 - êîëè÷åñòâî óðàâíåíèé â ñèñòåìå (òèï: öåëûé);
xn, yn - íà÷àëüíûå çíà÷åíèÿ àðãóìåíòà è ðåøåíèÿ; â ñëó÷àå ñèñòåìû óðàâíåíèé (ò.å. m ¹ 1) yn ïðåäñòàâëÿåò îäíîìåðíûé ìàññèâ äëèíû m (òèï: âåùåñòâåííûé);
xk - çíà÷åíèå àðãóìåíòà, ïðè êîòîðîì òðåáóåòñÿ âû÷èñëèòü ðåøåíèå çàäà÷è Êîøè (êîíåö èíòåðâàëà èíòåãðèðîâàíèÿ); xk ìîæåò áûòü áîëüøå, ìåíüøå èëè ðàâíî xn (òèï: âåùåñòâåííûé);
hmin - ìèíèìàëüíîå çíà÷åíèå àáñîëþòíîé âåëè÷èíû øàãà, êîòîðîå ðàçðåøàåòñÿ èñïîëüçîâàòü ïðè èíòåãðèðîâàíèè äàííîé ñèñòåìû óðàâíåíèé (òèï: âåùåñòâåííûé);
eps - äîïóñòèìàÿ ìåðà ïîãðåøíîñòè, ñ êîòîðîé òðåáóåòñÿ âû÷èñëèòü âñå êîìïîíåíòû ðåøåíèÿ (òèï: âåùåñòâåííûé);
p - ãðàíèöà ïåðåõîäà, èñïîëüçóåìàÿ ïðè îöåíêå ìåðû ïîãðåøíîñòè ðåøåíèÿ (òèï: âåùåñòâåííûé);
h - âåùåñòâåííàÿ ïåðåìåííàÿ, ñîäåðæàùàÿ íà÷àëüíîå çíà÷åíèå øàãà èíòåãðèðîâàíèÿ; ìîæåò çàäàâàòüñÿ ñ ó÷åòîì íàïðàâëåíèÿ èíòåãðèðîâàíèÿ, ò.å. ïîëîæèòåëüíûì, åñëè xn < xk, îòðèöàòåëüíûì, åñëè xn > xk, èëè áåç âñÿêîãî ó÷åòà â âèäå àáñîëþòíîé âåëè÷èíû;
y - èñêîìîå ðåøåíèå çàäà÷è Êîøè, âû÷èñëåííîå ïîäïðîãðàììîé ïðè çíà÷åíèè àðãóìåíòà xk; äëÿ ñèñòåìû óðàâíåíèé (êîãäà m ¹ 1) çàäàåòñÿ îäíîìåðíûì ìàññèâîì äëèíû m.  ñëó÷àå ñîâïàäåíèÿ çíà÷åíèé ïàðàìåòðîâ xn è xk çíà÷åíèå y ïîëàãàåòñÿ ðàâíûì íà÷àëüíîìó çíà÷åíèþ yn (òèï: âåùåñòâåííûé);
r - îäíîìåðíûé ðàáî÷èé ìàññèâ âåùåñòâåííîãî òèïà äëèíû 3*m*m + 11*m + 1;
ierr - öåëàÿ ïåðåìåííàÿ, çíà÷åíèå êîòîðîé â ðåçóëüòàòå ðàáîòû ïîäïðîãðàììû ïîëàãàåòñÿ ðàâíûì 65, åñëè êàêàÿ - íèáóäü êîìïîíåíòà ðåøåíèÿ íå ìîæåò áûòü âû÷èñëåíà ñ òðåáóåìîé òî÷íîñòüþ eps; â ýòîì ñëó÷àå èíòåãðèðîâàíèå ñèñòåìû ìîæíî ïîâòîðèòü îáðàùåíèåì ê ïîäïðîãðàììå ñ íîâûìè çíà÷åíèÿìè ïàðàìåòðîâ h è hmin.

Âåðñèè

de97r_c -

âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà. Îòëè÷èå ïîäïðîãðàììû de97r_c îò ïîäïðîãðàììû de95r_c ñîñòîèò â òîì, ÷òî ïðè îáðàùåíèè ê ïîäïðîãðàììå de97r_c íå òðåáóåòñÿ çàäàâàòü ïîäïðîãðàììó âû÷èñëåíèÿ ìàòðèöû ßêîáè ñèñòåìû è ïîäïðîãðàììó âû÷èñëåíèÿ ÷àñòíûõ ïðîèçâîäíûõ ïðàâîé ÷àñòè ñèñòåìû ïî  x. Âñå ÷àñòíûå ïðîèçâîäíûå îò ïðàâîé ÷àñòè âû÷èñëÿþòñÿ â ïîäïðîãðàììå de97r_c ñ ïîìîùüþ ðàçíîñòíûõ îòíîøåíèé. Ïåðâûé îïåðàòîð ïîäïðîãðàììû de97r_c èìååò âèä:

int de97r_c (real *f, integer *m, real *xn, real *yn, real *xk,
             real *hmin, real *eps, real *p, real *h__, real *y, real *r__,
             integer *ierr) 
Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de97r_c îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ ïîäïðîãðàììû de95r_c îòñóòñòâèåì ïàðàìåòðîâ fj è fx. Ïàðàìåòðû ïîäïðîãðàììû de97r_c èìåþò òîò æå ñìûñë, ÷òî è îäíîèìåííûå ïàðàìåòðû ïîäïðîãðàììû de95r_c;
de91r_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà. Äàííàÿ ïîäïðîãðàììà ïðåäíàçíà÷åíà äëÿ èíòåãðèðîâàíèÿ ñèñòåì óðàâíåíèé, â ïðàâûå ÷àñòè êîòîðûõ íå âõîäèò íåçàâèñèìàÿ ïåðåìåííàÿ  x, ò.å. ñèñòåì âèäà y ' = f (y). Ïåðâûé îïåðàòîð ïîäïðîãðàììû de91r_c èìååò âèä:
int de91r_c (real *f, real *fj, integer *m, real *xn, real *yn,
             real *xk, real *hmin, real *eps, real *p, real *h__, real *y,
             real *r__, integer *ierr)

Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de91r_c îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ de95r_c îòñóòñòâèåì ïàðàìåòðà fx. Ïàðàìåòðû ïîäïðîãðàììû de91r_c èìåþò òîò æå ñìûñë, ÷òî è îäíîèìåííûå ïàðàìåòðû ïîäïðîãðàììû de95r_c, êðîìå ïàðàìåòðà r.  ïîäïðîãðàììå de91r_c ïàðàìåòð r ïðåäñòàâëÿåò îäíîìåðíûé âåùåñòâåííûé ðàáî÷èé ìàññèâ äëèíû 3m2 + 8m + 1.

de93r_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà. Äàííàÿ ïîäïðîãðàììà ïðåäíàçíà÷åíà äëÿ èíòåãðèðîâàíèÿ ñèñòåì óðàâíåíèé, â ïðàâûå ÷àñòè êîòîðûõ íå âõîäèò íåçàâèñèìàÿ ïåðåìåííàÿ  x, ò.å. ñèñòåì âèäà y ' = f (y). Îòëè÷èå ïîäïðîãðàììû de93r_c îò ïîäïðîãðàììû de95r_c ñîñòîèò â òîì, ÷òî ïðè îáðàùåíèè ê ïîäïðîãðàììå de93r_c íå òðåáóåòñÿ çàäàâàòü ïîäïðîãðàììó âû÷èñëåíèÿ ìàòðèöû ßêîáè ñèñòåìû f / y è ïîäïðîãðàììó âû÷èñëåíèÿ ÷àñòíûõ ïðîèçâîäíûõ f / x. Âñå ÷àñòíûå ïðîèçâîäíûå îò ïðàâîé ÷àñòè âû÷èñëÿþòñÿ â ïîäïðîãðàììå de93r_c ñ ïîìîùüþ ðàçíîñòíûõ îòíîøåíèé. Ïåðâûé îïåðàòîð ïîäïðîãðàììû de93r_c èìååò âèä:
int de93r_c (real *f, integer *m, real *xn, real *yn, real *xk,
             real *hmin, real *eps, real *p, real *h__, real *y, real *r__,
             integer *ierr) 

Ñïèñîê ôîðìàëüíûõ ïàðàìåòðîâ ïîäïðîãðàììû de93r_c îòëè÷àåòñÿ îò ñïèñêà ïàðàìåòðîâ ïîäïðîãðàììû de95r_c îòñóòñòâèåì ïàðàìåòðîâ fj è fx. Ïàðàìåòðû ïîäïðîãðàììû de93r_c èìåþò òîò æå ñìûñë, ÷òî è îäíîèìåííûå ïàðàìåòðû ïîäïðîãðàììû de95r_c, êðîìå ïàðàìåòðà r.  ïîäïðîãðàììå de93r_c ïàðàìåòð r ïðåäñòàâëÿåò îäíîìåðíûé âåùåñòâåííûé ðàáî÷èé ìàññèâ äëèíû 3m2 + 8m + 1.

de95d_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de95r_c; ïðè ýòîì ïàðàìåòðû xn, yn, xk, hmin, eps, p, h, y, r è ïàðàìåòðû x, y, dy, z, z1 â ïîäïðîãðàììàõ f, fj è fx äîëæíû èìåòü òèï double;
de97d_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de97r_c; ïðè ýòîì ïàðàìåòðû xn, yn, xk, hmin, eps, p, h, y, r è ïàðàìåòðû x, y, dy â ïîäïðîãðàììå f äîëæíû èìåòü òèï double;
de91d_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåãðèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de91r_c; ïðè ýòîì ïàðàìåòðû xn, yn, xk, hmin, eps, p, h, y, r è ïàðàìåòðû x, y, dy, z â ïîäïðîãðàììàõ f è fj äîëæíû èìåòü òèï double;
de93d_c - âû÷èñëåíèå ðåøåíèÿ çàäà÷è Êîøè äëÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà â êîíöå èíòåðâàëà èíòåðãèðîâàíèÿ ìåòîäîì òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà ñ ïîâûøåííîé òî÷íîñòüþ. Ïåðâûé îïåðàòîð ïîäïðîãðàììû èìååò òîò æå âèä, ÷òî è â ïîäïðîãðàììå de93r_c; ïðè ýòîì ïàðàìåòðû xn, yn, xk, hmin, eps, p, h, y, r è ïàðàìåòðû x, y, dy â ïîäïðîãðàììå f äîëæíû èìåòü òèï double.

Âûçûâàåìûå ïîäïðîãðàììû

       de94r_c -        de94d_c   âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ñ îáûêíîâåííîé è ïîâûøåííîé òî÷íîñòüþ. Âûçûâàþòñÿ ïðè ðàáîòå ïîäïðîãðàìì de95r_c è de95d_c ñîîòâåòñòâåííî;
       de96r_c -        de96d_c   âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ñ îáûêíîâåííîé è ïîâûøåííîé òî÷íîñòüþ. Âûçûâàþòñÿ ïðè ðàáîòå ïîäïðîãðàìì de97r_c è de97d_c ñîîòâåòñòâåííî;
       de90r_c -        de90d_c   âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ñ îáûêíîâåííîé è ïîâûøåííîé òî÷íîñòüþ. Âûçûâàþòñÿ ïðè ðàáîòå ïîäïðîãðàìì de91r_c è de91d_c ñîîòâåòñòâåííî;
       de92r_c -        de92d_c   âûïîëíåíèå îäíîãî øàãà ÷èñëåííîãî èíòåãðèðîâàíèÿ àâòîíîìíîé æåñòêîé ñèñòåìû îáûêíîâåííûõ äèôôåðåíöèàëüíûõ óðàâíåíèé ïåðâîãî ïîðÿäêà ìåòîäîì òèïà Ðîçåíáðîêà ñ îáûêíîâåííîé è ïîâûøåííîé òî÷íîñòüþ. Âûçûâàþòñÿ ïðè ðàáîòå ïîäïðîãðàìì de93r_c è de93d_c ñîîòâåòñòâåííî;
      utde20_c -       utde21_c   ïîäïðîãðàììû âûäà÷è äèàãíîñòè÷åñêèõ ñîîáùåíèé. Ïîäïðîãðàììà utde20_c âûçûâàåòñÿ ïðè ðàáîòå ïîäïðîãðàìì de91r_c, de93r_c, de95r_c, de97r_c; ïîäïðîãðàììà utde21_c âûçûâàåòñÿ ïðè ðàáîòå ïîäïðîãðàìì de91d_c, de93d_c, de95d_c, de97d_c.

Çàìå÷àíèÿ ïî èñïîëüçîâàíèþ

 

 îáùåì ñëó÷àå çàäàííàÿ òî÷íîñòü íå ãàðàíòèðóåòñÿ.

Ïðè ðàáîòå ïîäïðîãðàììû è åå âåðñèé çíà÷åíèÿ ïàðàìåòðîâ m, xn, yn, xk, hmin, eps, p ñîõðàíÿþòñÿ. Ïðè ðàáîòå ïîäïðîãðàìì f, fj è fx çíà÷åíèÿ ïàðàìåòðîâ m, x, y íå äîëæíû èçìåíÿòüñÿ.

Åñëè ïîñëå ðàáîòû ïîäïðîãðàììû íåò íåîáõîäèìîñòè èìåòü íà÷àëüíîå çíà÷åíèå ðåøåíèÿ yn, òî ïàðàìåòðû yn è y ïðè îáðàùåíèè ê íåé ìîæíî ñîâìåñòèòü. Ïðè ýòîì ñëåäóåò èìåòü â âèäó, ÷òî â ñëó÷àå àâàðèéíîãî âûõîäà èç ïîäïðîãðàììû, ò.å. ñî çíà÷åíèåì ierr = 65, çíà÷åíèå ïàðàìåòðà yn áóäåò èñïîð÷åíî.

 ïîäïðîãðàììå de95r_c è åå âåðñèÿõ èñïîëüçóåòñÿ îäíîøàãîâûé ìåòîä òèïà Ðîçåíáðîêà ÷åòâåðòîãî ïîðÿäêà òî÷íîñòè. Íà êàæäîì øàãå h èíòåãðèðîâàíèÿ, âûïîëíÿåìîì èç òåêóùåãî óçëà èíòåãðèðîâàíèÿ xn, âû÷èñëÿþòñÿ ÷åòûðå çíà÷åíèÿ ïðàâîé ÷àñòè ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé. Ñðåäè ýòèõ çíà÷åíèé åñòü îäíî, êîòîðîå äîëæíî âû÷èñëÿòüñÿ ïðè çíà÷åíèè íåçàâèñèìîé ïåðåìåííîé  x, ðàâíîì  xn - h. Ýòî çíà÷åíèå àðãóìåíòà íàõîäèòñÿ ñëåâà îò òî÷êè  xn ïðè  h > 0 è ñïðàâà îò òî÷êè  xn ïðè  h < 0.

 ÷àñòíîñòè, ïðè âûïîëíåíèè ïåðâîãî øàãà  h èç íà÷àëüíîé òî÷êè  xn (íàïîìíèì, ÷òî àáñîëþòíàÿ âåëè÷èíà ïåðâîãî øàã  h áåðåòñÿ ðàâíîé àáñîëþòíîé âåëè÷èíå çíà÷åíèÿ, çàäàííîãî ïàðàìåòðîì h ïðè îáðàùåíèè ê ïîäïðîãðàììå, à çíàê ïåðâîãî øàãà îïðåäåëÿåòñÿ ñîîòíîøåíèåì çíà÷åíèé ïàðàìåòðîâ xn è xk) çíà÷åíèå  xn - h íå áóäåò ïðèíàäëåæàòü èíòåðâàëó èíòåãðèðîâàíèÿ, îãðàíè÷åííîìó çíà÷åíèÿìè, çàäàííûìè ïàðàìåòðàìè xn è xk ïðè îáðàùåíèè ê ïîäïðîãðàììå de95r_c (èëè åå âåðñèÿìè). Ýòî ñëåäóåò ó÷èòûâàòü ïðè ñîñòàâëåíèè ïîäïðîãðàììû f âû÷èñëåíèÿ ïðàâîé ÷àñòè ñèñòåìû. Åñëè ïðàâàÿ ÷àñòü ñèñòåìû íå îïðåäåëåíà äëÿ  x, íå ïðèíàäëåæàùèõ èíòåðâàëó èíòåãðèðîâàíèÿ, òî ïîïûòêà âû÷èñëèòü ïðàâóþ ÷àñòü äëÿ óêàçàííîãî çíà÷åíèÿ àðãóìåíòà  x ìîæåò ïðèâåñòè ê àâàðèéíîìó ïðåðûâàíèþ.

Åñëè ïðè ðåøåíèè ñèñòåìû äèôôèðåíöèàëüíûõ óðàâíåíèé íå çàäàþòñÿ ïîäïðîãðàììû fj âû÷èñëåíèÿ ìàòðèöû ßêîáè è fx âû÷èñëåíèÿ ÷àñòíûõ ïðîèçâîäíûõ ïî  x ïðàâîé ÷àñòè ñèñòåìû (ò.å. ïðîèçâîäèòñÿ îáðàùåíèå ê ïîäïðîãðàììàì de93r_c, de97r_c, de93d_c, de97d_c), òî âñå ÷àñòíûå ïðîèçâîäíûå ïî  y  è ïî  x  â ýòèõ ïîäïðîãðàììàõ àïïðîêñèìèðóþòñÿ öåíòðàëüíûìè ðàçíîñòíûìè îòíîøåíèÿìè. Çàìåíà òî÷íûõ çíà÷åíèé ïðîèçâîäíûõ ðàçíîñòíûìè àïïðîêñèìàöèÿìè ìîæåò ïðèâåñòè ê ðîñòó ïîãðåøíîñòè ïðèáëèæåííîãî ðåøåíèÿ ñèñòåìû äèôôåðåíöèàëüíûõ óðàâíåíèé ïî ñðàâíåíèþ ñ òåì, ÷òî áûëî áû, åñëè áû âñå ÷àñòíûå ïðîèçâîäíûå âû÷èñëÿëèñü òî÷íî ñ ïîìîùüþ ïîäïðîãðàìì fj è fx. Äàæå åñëè áóäåò ìàëà ïîãðåøíîñòü àïïðîêñèìàöèè ÷àñòíûõ ïðîèçâîäíûõ (íàïðèìåð, åñëè ïðàâàÿ ÷àñòü ñèñòåìû ÿâëÿåòñÿ ëèíåéíîé ôóíêöèåé ñâîèõ àðãóìåíòîâ, òî ïîãðåøíîñòü àïïðîêñèìàöèè ÷àñòíûõ ïðîèçâîäíûõ ðàâíà íóëþ), ìîæåò îêàçàòüñÿ çíà÷èòåëüíîé âû÷èñëèòåëüíàÿ ïîãðåøíîñòü, îñîáåííî, êîãäà âû÷èñëåíèÿ âûïîëíÿþòñÿ ñ îäèíàðíîé òî÷íîñòüþ. Ïðè ýòîì âû÷èñëèòåëüíàÿ ïîãðåøíîñòü ìîæåò äàæå ïðåâîñõîäèòü âåðõíèé ïðåäåë ïîãðåøíîñòè ïðèáëèæåííîãî ðåøåíèÿ, çàäàííûé ïðè îáðàùåíèè ê ïîäïðîãðàììå ïàðàìåòðîì eps.  ýòîì ñëó÷àå öåëåñîîáðàçíî èñïîëüçîâàòü íå ïîäïðîãðàììû de93r_c, de97r_c, à èõ âåðñèè, âûïîëíÿþùèå âû÷èñëåíèÿ ñ óäâîåííûì ÷èñëîì çíà÷àùèõ öèôð, ò.å. ïîäïðîãðàììû de93d_c, de97d_c.

Ïðèìåð èñïîëüçîâàíèÿ

 
   Ðåøàåòñÿ çàäà÷à Êîøè

      y1'  =  -100 y1 
      y2'  =  -100 y1  - 2 y2  + 20 e - 100 x + 2 e - x cos x 
      y3'  =  -100 y1  + 9998 y2 - 9990 y3 - 10 y4  + 20 e - 100 x + 2 e - x cos x 
      y4'  =  -100 y1  + 9988 y2  + 20 y3 - 10010 y4  + 20 e - 100 x + 2 e - x cos x  

      0 £ x £ 10 ,  y1(0) = 10 ,  y2(0) = 11 ,  y3(0) = 111 ,  y4(0) = 11   

   Òî÷íîå ðåøåíèå çàäà÷è èìååò âèä:

      y1  =  10 e -100 x 
      y2  =  10 e - 100 x + e - x cos x + e - x sin x 
      y3  =  y2  + 100 e - 10000 x cos 10x 
      y4  =  y3  + 100 e - 10000 x sin 10x 

   Ìàòðèöà ßêîáè ïðàâîé ÷àñòè ñèñòåìû èìååò âèä:

        |   -100       0            0             0      
        |   -100      -2            0             0      
        |   -100       9998     -9990     -10     
        |   -100       9988      20          -10010   

   ×àñòíûå ïðîèçâîäíûå ïî  x ïðàâîé ÷àñòè ñèñòåìû èìåþò âèä:

        |                            0                 
        |   -2000 e - 100 x - 2 e - x (cos x + sin x)
        |   -2000 e - 100 x - 2 e - x (cos x + sin x)
        |   -2000 e - 100 x - 2 e - x (cos x + sin x)

Íèæå ïðèâîäÿòñÿ ôðàãìåíò âûçûâàþùåé ïðîãðàììû äëÿ de95r_c, ïîäïðîãðàììû f, fj, fx è ðåçóëüòàòû ñ÷åòà, ïîëó÷åííûå ïîñëå íåñêîëüêèõ îáðàùåíèé ê ïîäïðîãðàììå de95r_c.

int main(void)
{
    /* Builtin functions */
    double exp(double), cos(double), sin(double);

    /* Local variables */
    extern int de95r_c(U_fp, U_fp, U_fp, int *, float *, float *, float *,
                       float *, float *, float *, float *, float *, float *,
                       int *);
    static float hmin;
    static int ierr;
    extern int f_c();
    static float h__;
    static int m;
    static float p, r__[93], y[4], y1, y2, y3, y4;
    extern int fj_c();
    static int ih;
    extern int fx_c();
    static float xk, xn, yn[4], eps;

    m = 4;
    xn = 0.f;
    yn[0] = 10.f;
    yn[1] = 11.f;
    yn[2] = 111.f;
    yn[3] = 111.f;
    hmin = 1e-10f;
    eps = .01f;
    p = 1e3f;
    xk = 10.f;
/*  B›—ˆC‹EHˆe TO—HOƒo PE˜EHˆŸ CˆCTEM›: */
    y1 = (float)exp((float)(xk * -100.f)) * 10.f;
    y2 = y1 + (float)exp((float)(-xk)) * ((float)cos(xk) + (float)sin(xk));
    y3 = y2 + (float)exp((float)(xk * -1e4f)) * 100.f *
         (float)cos((float)(xk * 10.f));
    y4 = y3 + (float)exp((float)(xk * -1e4f)) * 100.f *
         (float)sin((float)(xk * 10.f));

    printf("\n %16.7e %16.7e ", y1, y2);
    printf("\n %16.7e %16.7e \n", y3, y4);
    ih = 0;
l10:
    ++ih;
    h__ = .01f;
    de95r_c((U_fp)f_c, (U_fp)fj_c, (U_fp)fx_c, &m, &xn, yn, &xk, &hmin, &eps, &p,
            &h__, y, r__, &ierr);

    printf("\n %7.1e \n", eps);
    printf("\n %16.7e %16.7e ", y[0], y[1]);
    printf("\n %16.7e %16.7e \n", y[2], y[3]);
    printf("\n %16.7e \n", h__);
    eps *= .01f;
    if (ih < 3) {
        goto l10;
    }
    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((float)(*x * -100.f)) * 20.f +
         (float)exp((float)(-(*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 */


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((float)(*x * -100.f)) * -2e3f -
            (float)exp((float)(-(*x))) * 2.f * ((float)cos(*x) +
            (float)sin(*x));
    dx[3] = dx[2];
    dx[4] = dx[2];
    return 0;
} /* fx_c */


 Ðåçóëüòàòû: 

              y1                                   y2 
      0.000000000000+00    -6.279230870976-05 
              y3                                   y4 
     -6.279230870976-05    -6.279230870976-05 

      ïîñëå ïåðâîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
      EPS = 1.0-02 
              y(1)                                 y(2) 
      7.146873880164-13    -6.764660892966-05 
              y(3)                                 y(4) 
     -6.764660892122-05    -6.764660892966-05 
      H = 2.560000000001+00 
   
      ïîñëå âòîðîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
      eps = 1.0-04 
              y(1)                                 y(2) 
      6.621227792960-20    -6.330159900469-05 
              y(3)                                 y(4) 
     -6.330159900392-05    -6.330159900414-05 
      h = 2.560000000001+00 

      ïîñëå òðåòüåãî îáðàùåíèÿ ê ïîäïðîãðàììå -
      eps = 1.0-06
              y(1)                                 y(2) 
      0.000000000000+00    -6.286382905407-05 
              y(3)                                 y(4) 
     -6.286382905418-05    -6.286382905407-05 
      h = 1.280000000001+00 
   
      ïîñëå ÷åòâåðòîãî îáðàùåíèÿ ê ïîäïðîãðàììå -
      eps = 1.0-08 
              y(1)                                 y(2) 
      0.000000000000+00    -6.279451115976-05 
              y(3)                                 y(4) 
     -6.279451115976-05    -6.279451116020-05 
      h = 3.200000000002-01