c+=c, возвратные последовательности и золотое сечение...
Cкучая недавно на паре, увидел на мониторе у студентки такой оператор:
c=0; while (...) { c+=c; ... }
При этом она удивлялась, почему на выходе цикла получается ноль :) Пытался объяснить... Потом подумал, что при начальном
c=1;
здесь получатся степени двойки. А вот что будет при
a=b=1; while (...) { a+=b; b+=a; }
- гадать долго не приходится, увидел сразу, что получится ряд Фибоначчи!
Хорошо, конечно, что не только предел отношения двух соседних элементов даст
константу золотого сечения, но и последовательности, составленные из разностей
соседних значений цепочек a
и b
дадут то же самое:
Предел отношения соседних элементов возвратной последовательности 2 порядка
Да и любая комбинация ненулевых начальных значений a
и b
, кроме a=b=0
, даст аналогичную картину.
Сразу же возникла мысль обобщить расчёт на большее количество переменных:
a=b=с=1; while (...) { a+=b; b+=с; c+=a; }
что дало следующий предел отношения 2 соседних элементов:
Предел отношения соседних элементов возвратной последовательности 3 порядка
Интуитивно правильно я даже назвал это "обменной последовательностью 3 порядка", вот только не учёл, что надо не "обменной", а "возвратной", и они давным-давно открыты.
Сделав аналогичные расчёты для порядков 4 и 5, дальше извращаться с Экселем я не стал, ведь проще сразу написать программку, которая посчитает пределы отношения двух соседних элементов возвратной последовательности и отношения "последнего" (в смысле очередности увеличения переменных, через которые считаем) к "первому" (в том же смысле) элементу для любого порядка последовательности, скажем, от 2 до 80 включительно. К тому же, очевидно, что в итоге при высоком порядке последовательности пределы должны получиться равными 1 и 2 соответственно.
Вот программка на консольном C++:
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <alloc.h> void main () { double nmin=2,nmax=80,n,i,s,steps=700,lim1,lim2; double *a=(double *)malloc(nmax*sizeof(double)); if (a==NULL) { printf ("\nNo memory!"); exit(1); } clrscr(); for (i=nmin; i<=nmax; i++) { for (n=0; n<i; n++) a[n]=1; for (s=0; s<steps; s++) { for (n=0; n<i-1; n++) a[n]+=a[n+1]; a[i-1]+=a[0]; } lim1=a[0]/a[1]; lim2=a[i-1]/a[0]; printf ("\n%.0f\t%.15lf\t%.15lf",i,lim1,lim2); } free(a); getch(); }
Разумеется, верхняя граница цикла, в котором вычисляются элементы последовательности, также может меняться, попробовал и 50, и 100, и 500, увы,
больше 700-750 шагов комп на 32-разрядных числах не тянет... тем не менее, вот искомые пределы для возвратных последовательностей
порядка 2, 3, ..., 80 для типа данных double
при выводе 15 знаков в дробной части и 700 шагах расчёта каждой последовательности:
2 0,618033988749895 1,618033988749890 3 0,754877666246693 1,754877666246690 4 0,819172513396164 1,819172513396160 5 0,856674883854503 1,856674883854500 6 0,881271461633570 1,881271461633570 7 0,898653712628699 1,898653712628690 8 0,911592353482055 1,911592353482050 9 0,921599319633983 1,921599319633980 10 0,929570128232023 1,929570128232020 11 0,936069111077759 1,936069111077750 12 0,941469617321734 1,941469617321690 13 0,946028528280977 1,946028528284810 14 0,949928400091848 1,949928400165280 15 0,953302536865281 1,953302538268050 16 0,956250540678591 1,956250533545200 17 0,958848436939130 1,958848490631310 18 0,961155589369479 1,961155477852780 19 0,963217624192121 1,963216927002240 20 0,965072887198807 1,965071053233850 21 0,966758096116181 1,966755268680840 22 0,968293704382715 1,968296970489430 23 0,969629262173818 1,969643138267480 24 0,970877757700119 1,970858971862160 25 0,972250531720106 1,972252562525550 26 0,972959411500210 1,972982842041380 27 0,974471689395137 1,974425203454130 28 0,974692423020427 1,974750426352940 29 0,976576452645915 1,976533660474480 30 0,975998817736132 1,975973406160780 31 0,978168551730336 1,978315736283810 32 0,978374982024472 1,978128973085690 33 0,977588188985654 1,977752563391160 34 0,981025892488122 1,981174197562590 35 0,980489671588114 1,980121028184300 36 0,978308174689013 1,978370427061400 37 0,981825969478304 1,982268002165750 38 0,984526470588299 1,984330065495330 39 0,981233387955656 1,980737072985710 40 0,979014947473060 1,979158584532350 41 0,983125539172505 1,983753176406040 42 0,987652526888156 1,987725779136010 43 0,986053002926814 1,985452707969990 44 0,981132658660755 1,980617777555770 45 0,979457507517424 1,979691832810680 46 0,983841095567324 1,984629534168840 47 0,989764476643034 1,990210071244350 48 0,991208533711413 1,990897386250320 49 0,987617090324237 1,986853884271900 50 0,982327170110490 1,981675034382900 51 0,979439616706782 1,979416988198590 52 0,981619360875373 1,982325906742440 53 0,987634208055477 1,988539526211630 54 0,993074672437313 1,993547242205210 55 0,994852859229456 1,994710277394370 56 0,992899201703814 1,992281437412030 57 0,988533190205297 1,987685263832580 58 0,983516613498202 1,982763568264630 59 0,979985293932180 1,979692216079820 60 0,979892234279782 1,980276172424070 61 0,983672293654117 1,984573402610830 62 0,989454812520677 1,990403745452570 63 0,994464343876746 1,995080542786350 64 0,997197238868522 1,997396312681930 65 0,997682450465305 1,997531561413380 66 0,996408510015100 1,995968334879710 67 0,993714455756719 1,993027560805260 68 0,989909859811763 1,989059944917710 69 0,985584171938342 1,984737726617450 70 0,981731566420976 1,981125827842420 71 0,979572712856932 1,979440441689200 72 0,980062943080857 1,980504941658420 73 0,983253912574810 1,984135054174420 74 0,988038238197962 1,989037918535880 75 0,992765418474441 1,993584580802980 76 0,996273673346273 1,996792754452880 77 0,998321742069377 1,998578634326020 78 0,999246820676180 1,999328065125700 79 0,999461150387592 1,999426401646450 80 0,999196480280807 1,999059599881450
Немонотонность последовательности, видимая на графиках, построенных по по этим данным, может быть объяснена лишь погрешностями вычисления, так как тенденция к монотонности налицо... или я чего-то не понял? :)
Пределы отношения 2 соседних элементов возвратных последовательностей порядка 2,3,...,80
Возвратные последовательности - расчёты из этой статьи в Excel (69 Кб)
Тем не менее, если золотое сечение, получаемое возвратной последовательностью 2 порядка, играет такую фундаментальную роль в природе, может, предел последовательности 3 порядка и даёт те самые волшебные числа с тремя четвертями? :)
31.10.2012, 12:27 [13434 просмотра]