ПОМОЩЬ Mathematica с командой «Пока» и «Модуль» - PullRequest
0 голосов
/ 05 апреля 2011

Работает ли это уравнение для всех последовательностей f[n]?

f[n_] :=  Module[{x = intial value, y = 0, i = 0},

            While[i++ < n, {x, y} = {y, equation}]; y]

В частности, я смотрю на уравнение 6*n*f[n]=f[n-1]+n! с начальным условием f[0] = 7. Но я бы хотел, чтобы решение было общим, чтобы я мог применить его к другим уравнениям. И я хотел бы использовать Module и While.

спасибо.

Ответы [ 2 ]

7 голосов
/ 05 апреля 2011

Самый чистый и наиболее распространенный способ реализации повторяющейся последовательности - просто определить f, используя памятка , "запоминая" термины, поскольку они вычисляются для эффективности:

f[0] = 7
f[n_Integer?Positive] := f[n] = (f[n - 1] + n!)/(6 n)

Тогда:

In[29]:= Table[f[n], {n, 0, 6}]

Out[29]= {7, 4/3, 5/18, 113/324, 7889/7776, 941009/233280, 168902609/8398080}

Если вам не нужно программировать повторение самостоятельно, вы также можете использовать RecurrenceTable для непосредственного создания терминов без определения f:

In[30]:= RecurrenceTable[{a[0] == 7, 6 n a[n] == a[n - 1] + n!}, a, {n, 6}]

Out[30]= {7, 4/3, 5/18, 113/324, 7889/7776, 941009/233280, 168902609/8398080}
1 голос
/ 05 апреля 2011

Итак, вы хотите вычислить последовательность:

f(n) = (f(n-1) + n!) / (6 * n)

Один из способов ее реализации:

f[n_] := Module[{values},
       values = Table[0, {n}];
       values[[1]] = 7;
       Do[values[[i]] = (values[[i-1]] + (i-1)!) / (6 * (i-1)), {i, 2, n}]
       values];

Или эквивалентно:

f[n_] := Module[{values, i = 2},
       values = Table[0, {n}];
       values[[1]] = 7;
       While[i <= n, values[[i]] = (values[[i-1]] + (i-1)!) / (6 * (i-1)); i++];
       values];

ЕстьХотя гораздо более эффективные способы.

Я забываю различия между Боком и Модулем, но они очень похожи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...