"Вычисления, визуализация и программирование в среде MATLAB 5.x" - читать интересную книгу автора (Мартынов Н. Н., Иванов А. П.)

return else
res = n * MyRecursFact( n - 1 ); end
╟фхё№ урЁрэЄшхщ чртхЁ°хэш  Ўхяюўъш ЁхъєЁёштэ√ї т√чютют  ты хЄё  єёыютэ√щ юяхЁрЄюЁ, Єръ ъръ т√чют√ юёє∙хёЄты ■Єё  ё єьхэ№°р■∙шьшё  чэрўхэш ьш рЁуєьхэЄют, ш ъюуфр Єх фюёЄшуэєЄ чэрўхэш  1, эрўэхЄё  юсЁрЄэр  Ўхяюўър тючтЁрЄют шч ¤Єшї ¤ъчхьяы Ёют ЇєэъЎшщ ё яюёыхфютрЄхы№э√ь єьэюцхэшхь тючтЁр∙рт-
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх
195
ь√ї чэрўхэшщ эр яюёыхфютрЄхы№эю єтхышўштр■∙шхё  яюыюцшЄхы№э√х ўшёыр, ўЄю ш яЁштхфхЄ т шЄюух ъ т√ўшёыхэш■ ЇръЄюЁшрыр.
╨рчЁрсюЄрээр  ЁхъєЁёштэр  ЇєэъЎш  яЁхъЁрёэю т√ўшёы хЄ ЇръЄюЁшры√ Ёрчышўэ√ї Ўхы√ї ўшёхы:
57 )
MyRecursFact ans =
4.0527х+07с MyRecursFact( ans = 2.0044e+291
163
ш Є. ф. ╤ыхфє■∙шщ цх Ёхчєы№ЄрЄ:
MyRecursFact( 200 ) ans = Inf
ючэрўрхЄ, ўЄю ёЄюы№ сюы№°юх чэрўхэшх ЇръЄюЁшрыр эх ьюцхЄ яюьхёЄшЄ№ё  т юЄтхфхээє■ яюф ўшёыю Єшяр double ярь Є№ ъюья№■ЄхЁр, Єръ ўЄю яЁшїюфшЄё  чрьхэ Є№ шёЄшээюх ўшёыютюх чэрўхэшх эр ёшьтюышўхёъє■ ъюэёЄрэЄє Inf, ючэрўр■∙є■ льр°шээє■ схёъюэхўэюёЄ№╗, эю ёрьр ЁхъєЁёштэр  ЇєэъЎш  ЁрсюЄрхЄ яЁш ¤Єюь эюЁьры№эю. ┬ Єю цх тЁхь  Ёхчєы№ЄрЄ ёыхфє■∙хую т√чютр ¤Єющ ЇєэъЎшш ё юўхтшфэюёЄ№■ яюфЄтхЁцфрхЄ, ўЄю ёшёЄхьр MATLAB фхщёЄтшЄхы№эю эръырф√трхЄ юуЁрэшўхэшх эр уыєсшэє ЁхъєЁёштэ√ї т√чютют (¤Єю ь√ єяюь эрыш т√°х, яюфўхЁъэєт, ўЄю Єхь ёрь√ь яЁхюфюыхтрхЄё  яЁюсыхьр схёъюэхўэющ ЁхъєЁёшш) (ёь. Ёшё. 6.10).
Х> MATLAB Command Window
╨шё Ej.t Wir.J-j* Help
╗ MyRecursFact(, 520 ) .
??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLiinit',N) to change (lie limit. Be aware that exceeding yoiu available stack №Ёяёё can crash MATLAB and/or your computer.
Eiror in ==> E:\MyO\vnWork\MatlabWork\MFiles\MyReciuisFact.m On line с ==> res = n * MyRecursFact( n-1 );
2
╨шёєэюъ 6.10
╚ч ёюяєЄёЄтє■∙хую фшруэюёЄшўхёъюую ёююс∙хэш  ёыхфєхЄ, ўЄю яЁхфхы уыєсшэ√ т√чютют яю єьюыўрэш■ Ёртхэ 500. ┼ёыш эєцэю єтхышўшЄ№ ¤Єє тхышўшэє, Єю ёыхфєхЄ т√яюыэшЄ№ ъюьрэфє
set(0,'RecursionLimit' ,N)
196 ├ыртр 6. ╧ЁюуЁрььшЁютрэшх ЇєэъЎшщ эр ╠- ч√ъх
уфх N - эютюх чэрўхэшх яЁхфхыр фы  ы■с√ї ЁхъєЁёштэ√ї ЇєэъЎшщ, фхщёЄтє■∙хх т Ёрьърї Єхъє∙хую ёхрэёр ЁрсюЄ√ ё яръхЄюь MATLAB.
╟рърэўштрхь эр ¤Єюь ъЁрЄъшщ Ёрёёърч яЁю ЁхъєЁёштэ√х ЇєэъЎшш (эряюьшэрхь, ўЄю шї Ёюы№ ёє∙хёЄтхээю эшцх, ўхь т ёшёЄхьрї яЁюуЁрььшЁютрэш  эр  ч√ърї C/C++) ш яхЁхїюфшь ъ тюяЁюёє юс ¤ЇЇхъЄштэюёЄш ╠-ЇєэъЎшщ тююс∙х ш Ёрчэ√ї ЁхрышчрЎшщ рыуюЁшЄьют Ёх°хэш  юфэющ ш Єющ цх чрфрўш т ўрёЄэюёЄш.
▀ёэю, ўЄю Ёрчэ√х ЁхрышчрЎшш Ёх°хэш  юфэющ ш Єющ цх чрфрўш юЄышўр■Єё  фЁєу юЄ фЁєур ёрь√ьш ЁрчэююсЁрчэ√ьш ётющёЄтрьш, Єръшьш, эряЁшьхЁ, ъръ ЁрчьхЁ ЇєэъЎшщ, шї лўшЄрхьюёЄ№╗, ёыюцэюёЄ№ ЁрчЁрсюЄъш (т ёь√ёых тЁхьхэш, чрЄЁрўхээюь эр ЁрчЁрсюЄъє ш юЄырфъє ЇєэъЎшш). ╨рчэ√х ЁхрышчрЎшш юЄышўр■Єё  фрцх яю Єръюьє эхєыютшьюьє яюэ Єш■, ъръ лъЁрёюЄр ЁхрышчрЎшш╗. ┬ёх яхЁхўшёыхээ√х їрЁръЄхЁшёЄшъш тяюыэх юўхтшфэ√, ь√ чрщьхьё  Єюы№ъю ¤ЇЇхъЄштэюёЄ№■ (т ёь√ёых с√ёЄЁюфхщёЄтш  т√яюыэхэш  ╠-ЇєэъЎшш). ╧ръхЄ MATLAB яюёЄрты хЄ єфюсэюх ёЁхфёЄтю фы  яЁшсышчшЄхы№эюую чрьхЁр ¤Єющ їрЁръЄхЁшёЄшъш - эрсюЁ ъюьрэф tic ш toe. ▌Єю ёЁхфёЄтю яЁшьхэ хЄё  ёыхфє■∙шь юсЁрчюь:
tic, FunctionCall, toe
Єю хёЄ№ т ъюьрэфэющ ёЄЁюъх т√чют эхъюЄюЁющ ЇєэъЎшш юсЁрьы хЄё  ё фтєї ёЄюЁюэ ¤Єшьш ъюьрэфрьш, т Ёхчєы№ЄрЄх ўхую яюёых т√ўшёыхэш  ЇєэъЎшш т ъюьрэфэюх юъэю т√фрхЄё  эх Єюы№ъю Ёхчєы№ЄрЄ т√ўшёыхэш , эю ш єёыютэюх тЁхь  т√ўшёыхэш . ╧ю ¤Єюьє єёыютэюьє тЁхьхэш ьюцэю ёЁртэштрЄ№ Ёрчэ√х ЁхрышчрЎшш ЇєэъЎшщ ьхцфє ёюсющ. ╤ыхфєхЄ, юфэръю, шьхЄ№ т тшфє, ўЄю тЁхь  т√яюыэхэш  чрьхЁ хЄё  яЁшсышчшЄхы№эю ш чртшёшЄ юЄ Ё фр эхъюэЄЁюышЁєхь√ї ЇръЄюЁют, Єръ ўЄю Єръшх т√чют√ ёыхфєхЄ яютЄюЁшЄ№ эхёъюы№ъю Ёрч, р яюыєўхээ√х чрьхЁ√ єёЁхфэшЄ№.
╤хщўрё ёЁртэшь эр яЁръЄшъх фтх ЁхрышчрЎшш Ёх°хэш  чрфрўш ю т√ўшёыхэшш ЇръЄюЁшрыр: ЁрчЁрсюЄрээє■ ш яЁхфёЄртыхээє■ т√°х ЇєэъЎш■ MyFactorial, юёэютрээє■ эр юяхЁрЄюЁх Ўшъыр, ш ЇєэъЎш■ MyRecursFact, юёэютрээє■ эр ЁхъєЁёшш. ┬ Ёхчєы№ЄрЄх т√ ёэшь, ўЄю ¤ЇЇхъЄштэхх - Ўшъы√ шыш ЁхъєЁёш . ┬юЄ яЁръЄшўхёъшх Ёхчєы№ЄрЄ√ ёююЄтхЄёЄтє■∙шї чрьхЁют:
tic, MyRecursFact( 100 ), toe ans =
9.3326e+157 elapsed_time =
0.0710
tic, MyFactorial( 100 ), toe ans =
9.3326e+157 elapsed_time =
0.0700
┬шфэю, ўЄю Ёхчєы№ЄрЄ√ чрьхЁют єёыютэюую тЁхьхэш яЁръЄшўхёъш юфшэръют√х. ╥ръ ўЄю ЇєэъЎшш т√ўшёыхэш  ЇръЄюЁшрыют эр юёэютх юяхЁрЄюЁр Ўшъыр ш эр юёэютх ЁхъєЁёшш ёЁртэшь√ яю ¤ЇЇхъЄштэюёЄш.
MATLAB 5.x. ┬√ўшёыхэш , тшчєрышчрЎш , яЁюуЁрььшЁютрэшх 197
╬фэръю с√тр■Є ёыєўрш, ъюуфр Ёрчэ√х ЁхрышчрЎшш шьх■Є ъюыюёёры№эю Ёрчэ√х ¤ЇЇхъЄштэюёЄш. ╥ръшь Єшяшўэ√ь ёыєўрхь фы  ╠- ч√ър ёшёЄхь√ MATLAB  ты хЄё  тючьюцэюёЄ№ шчсхцрЄ№ шёяюы№чютрэш  юяхЁрЄюЁют Ўшъыр ё яюью∙№■ яЁшьхэхэш  юяхЁрЎшш чрфрэш  фшрярчюэр чэрўхэшщ ш фЁєушї ¤ЇЇхъЄштэ√ї уЁєяяют√ї юяхЁрЎшщ ╠- ч√ър (ьэюцхёЄтхээр  шэфхъёрЎш , эряЁшьхЁ).
┬ ўрёЄэюёЄш, ёыхфє■∙шщ ЇЁруьхэЄ:
└ = 1 : 0.1 : 2000; ЇюЁьшЁє■∙шщ тхъЄюЁ └ шч 19 991 ¤ыхьхэЄр т 10 000 Ёрч ¤ЇЇхъЄштэхх ЇЁруьхэЄр
i=l;e=l; while i<=19991, A(i)=e;e=e+0.1;i=i+l; end
юёэютрээюую эр яЁшьхэхэшш юяхЁрЄюЁр Ўшъыр фы  шэфштшфєры№эюую яЁюяшё√трэш  ¤ыхьхэЄют тхъЄюЁр └. ╧ю¤Єюьє ёютхЄє■Є яЁш яЁюуЁрььшЁютрэшш ╠-ЇєэъЎшщ ёЄрЁрЄхы№эю шчсхурЄ№ яЁшьхэхэш  ьрёёштэ√ї Ўшъышўхёъшї т√ўшёыхэшщ эр срчх юяхЁрЄюЁют Ўшъыр ╠- ч√ър. ▌Єю ьюцэю ёфхырЄ№, яЁшьхэшт тьхёЄю эшї ¤ЇЇхъЄштэ√х уЁєяяют√х юяхЁрЎшш ╠- ч√ър. ┼ёыш цх ¤Єюую ёфхырЄ№ эхы№ч , Єю хёЄ№ шчсхцрЄ№ Ўшъыют эх єфрхЄё , Єю Єюуфр ёЄюшЄ яюфєьрЄ№ ю ЁхрышчрЎшш Ўшъышўхёъшї рыуюЁшЄьют эр  ч√ърї C/C++, яюёъюы№ъє т ёшёЄхьх MATLAB шьххЄё  яЁшэЎшяшры№эр  тючьюцэюёЄ№ яюфъы■ўшЄ№ фы  ёютьхёЄэющ ЁрсюЄ√ фрцх Єръшх яЁюуЁрььэ√х ьюфєыш. ╬с ¤Єюь сєфхЄ яюфЁюсэю Ёрёёърчрэю т уы. 8.
═ръюэхЎ, Ёрёёърцхь ю яют√°хэшш ¤ЇЇхъЄштэюёЄш т√яюыэхэш  ╠-ЇєэъЎшщ чр ёўхЄ ёяхЎшры№эющ эрёЄЁющъш ёЁхф√ MATLAB. ─хыю т Єюь, ўЄю яЁш яхЁтющ чруЁєчъх ёюфхЁцшьюую ╠-Їрщыр т ярь Є№ ъюья№■ЄхЁр ёшёЄхьр MATLAB юёє∙хёЄты хЄ ёшэЄръёшўхёъшщ ЁрчсюЁ ъюфр, яхЁхтюфшЄ хую тю тэєЄЁхээшщ ЇюЁьрЄ, эрч√трхь√щ яёхтфюъюфюь шыш ╨-ъюфюь, яюёых ўхую ёюїЁрэ хЄ яюыєўхээ√щ яёхтфюъюф т ярь Єш ъюья№■ЄхЁр т Єхўхэшх тёхую ёхрэёр ЁрсюЄ√ ё яръхЄюь MATLAB. ┬ Ёхчєы№ЄрЄх яхЁт√щ т√чют ╠-ЇєэъЎшш юёє∙хёЄты хЄё  ьхфыхээхх (юс√ўэю эхэрьэюую ьхфыхээхх) яютЄюЁэ√ї т√чютют. ╠юцэю эхёъюы№ъю яют√ёшЄ№ ¤ЇЇхъЄштэюёЄ№ яхЁтюую т√яюыэхэш  ╠-ЇєэъЎшш, т√яюыэшт ъюьрэфє
pcode шь _╠-ЇєэъЎшш(Їрщыр)
▌Єр ъюьрэфр ЄЁрэёышЁєхЄ ёюфхЁцшьюх ╠-Їрщыр т яёхтфюъюф ш чряшё√трхЄ эр фшёъ Їрщы ё Єхь цх шьхэхь, эю ё Ёрё°шЁхэшхь .Ё, яюёых ўхую чруЁєчър ╠-ЇєэъЎшш сєфхЄ т√яюыэ Є№ё  шьхээю шч ¤Єюую Їрщыр ш яхЁтюх шёяюыэхэшх ЇєэъЎшш яЁющфхЄ с√ёЄЁхх. ╩Ёюьх Єюую, ьюцэю сєфхЄ ёЄхЁхЄ№ Їрщы ё Ёрё°шЁхэшхь .Є, р ёюфхЁцшьюх юёЄрт°хуюё  Їрщыр ё яёхтфюъюфюь сєфхЄ эхтючьюцэю яЁюўшЄрЄ№ т ЄхъёЄют√ї ЁхфръЄюЁрї, Єръ ъръ ЇюЁьрЄ ¤Єшї Їрщыют сшэрЁэ√щ. ┬ Ёхчєы№ЄрЄх ьюцэю сєфхЄ ёъЁ√Є№ юЄ ы■сюя√Єэ√ї уырч лЄрщэ√х╗ фхЄрыш ЁрчЁрсюЄрээ√ї трьш рыуюЁшЄьют.
198
├ыртр 6. ╧ЁюуЁрььшЁютрэшх ЇєэъЎшщ эр ╠- ч√ъх
╠-ЇєэъЎшш ё яхЁхьхээ√ь ўшёыюь тїюфэ√ї ярЁрьхЄЁют ш т√їюфэ√ї чэрўхэшщ
┬ юяЁхфхыхэш ї ╠-ЇєэъЎшщ, ъюЄюЁ√х ь√ ЁрёёьрЄЁштрыш фю ёшї яюЁ, тёхуфр с√ыю ёЄЁюую ЇшъёшЁютрээюх ъюэхўэюх ўшёыю тїюфэ√ї ярЁрьхЄЁют ш т√їюфэ√ї чэрўхэшщ. ╬фэръю с√тр■Є ёшЄєрЎшш, ъюуфр яюыхчэю шьхЄ№ юфэє ЇєэъЎш■, ъюЄюЁр  °ЄрЄэю юсЁрсрЄ√трыр с√ яхЁхьхээюх ўшёыю тїюфэ√ї ярЁрьхЄЁют ш т√їюфэ√ї чэрўхэшщ. ═ряЁшьхЁ, эхяыюїю шьхЄ№ ЇєэъЎш■, ъюЄюЁр  ьюцхЄ ёєььшЁютрЄ№ фышэ√ яЁюшчтюы№эюую ўшёыр тхъЄюЁют. ╥рър  ЇєэъЎш  фюыцэр єьхЄ№ ЁрёяючэртрЄ№ Ёхры№эюх ъюышўхёЄтю ярЁрьхЄЁют, ё ъюЄюЁ√ьш юэр т√чтрэр.