Рекурсивные формулы в excel

Рекурсивным называется уравнение, в котором переменная появляется по обе стороны от знака равенства. Следующие уравнения можно назвать рекурсивными:

x = 1/(х+1)
x = COS(x)
x = К0РЕНЬ(x+5)
x = 2^(1/х)
x = 5 + (1/x)

Вы можете решать рекурсивные уравнения, используя преднамеренную циклическую ссылку.

Этот метод использует итеративные вычисления. По умолчанию Excel их не выполняет, так что вам нужно изменить настройки, установив флажок Включить итеративные вычисления в разделе Формулы диалогового окна Параметры Excel (рис. 129.1).

Рис. 129.1. Для решения рекурсивных уравнений необходимо включить возможность итеративных вычислений

Рис. 129.1. Для решения рекурсивных уравнений необходимо включить возможность итеративных вычислений

Первый шаг заключается в преобразовании рекурсивного уравнения в ссылающуюся на саму себя формулу. Для решения первого уравнения введите следующую формулу в ячейку А1:
=1/(A+1). Формула сходится к 0,618033989, что является значением х, удовлетворяющим уравнению.

Excel использует итеративный процесс для вычисления решения. Максимальное количество итераций, выполняющееся для каждого вычисления, указано в разделе Формулы диалогового окна Параметры Excel. Вам, возможно, потребуется нажать F9 несколько раз, прежде чем решение перестанет изменяться.

Однако иногда этот метод не работает. Например, формула допускает возможность деления на нуль. Решение заключается в проверке на ошибки. Если формула выводит ошибку, то измените незначительно повторное значение. Так, предыдущая формула может быть переписана с использованием функции ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(1/(A1+1);A1+0.01).

Функция ЕСЛИОШИБКА работает только с Excel 2007 и более поздними версиями. Следующий вариант формулы совместим с предыдущими версиями Excel:
=ЕСЛИ(ЕОШ(1/(A1+1));A1+0,01;1/(A1+1)).

На рис. 129.2 показан рабочий лист, где вычисляется несколько рекурсивных уравнений в столбце В. Формулы в столбце D обеспечивают проверку результатов. Например, формула в столбце D2 будет следующей:
=1/(B2+1).

Формулы в столбце Е отображают разницу между значениями в столбцах В и D. Если решение верное, то столбец Е выводит 0 (или значение, очень близкое к 0).

Рис. 129.2. Для вычисления нескольких рекурсивных уравнений применяются циклические ссылки

Рис. 129.2. Для вычисления нескольких рекурсивных уравнений применяются циклические ссылки

Recursive function is a term for describing behavior of a function that calls itself from within its own code. This is necessary for solving a problem where the solution relies on the results from multiple instances of the same problem. In this guide, we’re going to show you how to create recursive functions in Excel.

Download Workbook

LAMBDA Function

Before the LAMBDA function, the only option for creating recursive calculations in Excel was using VBA. VBA allows you to create your own user defined functions. However, VBA requires some coding knowledge.

With the new LAMBDA function, you can create your own functions using only Excel formulas. Briefly, the LAMBDA function is a special function that you can use in a named range, and it allows you to use that named range as a function. It also supports recursive calculations.

To create a user defined function with LAMBDA, follow the steps below:

  1. Open the New Name dialog by following Formulas > Define Name path in the Ribbon.
  2. Type in a friendly name for your formula. To call the formula recursively, you should use this name inside your formula. For example, “MyFormula”.
  3. Enter the LAMBDA formula e.g., =LAMDBA(x,y,x+y)
  4. Click the OK button to create your user defined function.
  5. Once the named range is saved, you can use it just like any other formula.

Let us briefly explain how the LAMBDA function works. The LAMBDA function’s last argument should always be the formula itself. The arguments before the formula are the arguments which will be used in the formula.

For example, the x+y function needs 2 arguments: x and y. Thus, the first arguments in the LAMBDA function are x and y. The last argument is the formula that uses these arguments.

As of writing this article, the LAMBDA function is only available to Office 365 users.

Creating recursive functions with LAMBDA

Fibonacci sequence

Let’s see the LAMBDA function on an example. Our first example is about the Fibonacci sequence, which is a sequence of numbers where each number is the sum of the two preceding values, starting from 0 and 1.

0 1 1 2 3 5 8 13

The function below returns the nth number in a Fibonacci sequence.

The function of n depends on same function’s instances for n-1 and n-2. Thus, the function needs to be recalculated until n is equal to 2, and F(0) and F(1) return 0 and 1 respectively.

With the help of the LAMBDA function we can create this function like this:

=LAMBDA(n,IF(n<=1,n,Fib(n-1)+Fib(n-2)))

Note that we have named our function “Fib”. As a result, the function can be recalled as Fib(n-1) and Fib(n-2) in the same function. Remember to change this if your formula has a different name.

How to create recursive functions in Excel - Fibonacci

Ackermann Function and recursion

The Ackermann function, named after Wilhelm Ackermann, is a multi-variable function from natural numbers to natural numbers with a very fast rate of growth. It is accepted one of the simplest examples of a function that is computable but not primitive recursive.

Here is the equation:

If m and n values are not equal to 0 (third line), the function calls itself to calculate its second argument. The called function will call another, until the conditions in the first two rows are met.

The following is the Excel version of the Ackermann Function. We named it “Ack”.

=LAMBDA(m,n,IF(m=0,n+1,IF(n=0,Ack(m-1,1),Ack(m-1,Ack(m,n-1)))))

How to create recursive functions in Excel - Ackermann

Remove unwanted characters with a recursive function

The LAMBDA function can also be used to remove a set characters from strings. You can use functions like SUBSTITUTE and REPLACE to do this, but both functions can work with an entire string value, and not specific characters.

=LAMBDA(string,characters,IF(characters=»»,string,RemoveCharacters(SUBSTITUTE(string,LEFT(characters,1),»»),RIGHT(characters,LEN(characters)-1))))

The RemoveCharacters function replaces each character with a an empty string (“”) starting from the left. It sends the lastly calculated character set without the first character each time it runs, until there are no characters left in the set.
How to create recursive functions in Excel - Remove Characters

Цикл в excel с помощью формул

Я здесь новичок и это мой первый пост.

Помогите пожалуйста составить цикл.
Думаю, что правильнее будет через макрос, но, можно и через формулу. В них, к сожалению, не силен, опыт нулевой. Похожие темы читал на этом форуме, есть очень похожие решения, но доработать их не могу, вседствие малоопытности. Итак.

. Требуется подобрать текстовые сочетания содержимого ячеек, но не все возможные, а подчиняющиеся порядковому чередованию:

Дано: 4 столбца с текстовыми значениями, количество строк во всех столбцах разное.

Пример:
______________
| -|A1|B1|C1|D1|
|——————-
|1 | A | 1| a| X |
|2 | B | 2| b| Y |
|3 | C | _| c| Z |
|4 | D | _| d| _ |
|5 | E | _| _| _ |
———————
Хочу в итоговой колонке получить массив данных:

1 A1aX
2 A1aY
3 A1aZ
4 A1bX
5 A1bY
.
12 A1dZ
13 A2aX
.
24 A2dZ
25 B1aX
.
.
120 E2dZ

Для упрощения решения могу предложить добавить в каждый исходный столбец количество символов для равного значения строк в каждом столбце:

Впоследствии я смогу удалить из итоговой ячейки результаты, содержащие символы «$».
И сразу вопрос: можно ли создать такой макрос, который не будет зависеть от фиксированного числа строк в столбце, а будет запускать очередной цикл, когда «наткнется» на пустую ячейку?

В реальной задаче в столбце A1 будет 64 значения, в B1=32, C1=64, D1=16.
Знаю, что на лист весь вывод не поместится, поэтому, либо буду использовать в колонке A1 каждый раз по 2 значения (получится как раз 65536), либо попрошу опять же здесь помощи, чтобы реализовать переход на другой лист с помощью такого макроса (вычитал на одном из форумов):

Буду благодарен если поможете реализовать идею, и объяснить принцип действия конкретного макроса.
Прикрепил сам файл с задачей, а то строки таблицы съезжают.

Excel. Использование циклических ссылок для решения уравнений итерационным способом

Ранее я описал, как найти и исправить циклическую ссылку. Напомню, что циклическая ссылка появляется, если в ячейку Excel введена формула, содержащая ссылку на саму эту ячейку (напрямую или через цепочку других ссылок). Например (рис. 1), в ячейке С2 находится формула, ссылающаяся на саму ячейку С2.

Рис. 1. Пример циклической ссылки

Но. Не всегда циклическая ссылка является бедствием. Циклическую ссылку можно использовать для решения уравнений итерационным способом. Для начала нужно позволить Excel вести вычисления, даже при наличии циклической ссылки. В обычном режиме Excel, обнаружив циклическую ссылку, выдаст сообщение об ошибке, и потребует ее устранения. В обычном режиме Excel не может провести вычисления, так как циклическая ссылка порождает бесконечный цикл вычислений. Можно, либо устранить циклическую ссылку, либо допустить вычисления по формуле с циклической ссылкой, но ограничив число повторений цикла. Для реализации второй возможности щелкните на кнопке «Office» (в левом верхнем углу), а затем на «Параметры Excel» (рис. 2).

Скачать заметку в формате Word, примеры в формате Excel

Рис. 2. Параметры Excel

В открывшемся окне «Параметры Excel» перейдите на вкладку Формулы и отметьте «Включить итеративные вычисления» (рис. 3). Помните, что эта опция включается для приложения Excel в целом (а не для одного файла), и будет действовать, пока вы ее не отключите.

Рис. 3. Включить итеративные вычисления

На этой же вкладе, можно выбрать, как будут вестись вычисления: автоматически или вручную. При автоматическом вычислении Excel сразу рассчитает конечный результат, при вычислениях, вручную, можно будет наблюдать результат каждой итерации (простым нажатием F9 запуская каждый новый цикл вычисления).

Решим уравнение третьей степени: х 3 – 4х 2 – 4х + 5 = 0 (рис. 4). Для решения этого уравнения (и любого другого уравнения совершенно произвольного вида) понадобится всего одна ячейка Excel.

Рис. 4. График функции f(x)

Для решения уравнения нам понадобится рекуррентная формула (то есть, формула, выражающая каждый член последовательности через один или несколько предыдущих членов):

(1) x = x – f(x)/f’(x), где

f(x) – функция, задающая уравнение, корни которого мы ищем; f(x) = х 3 – 4х 2 – 4х + 5

f’(x) – производная нашей функции f(x); f’(x) = 3х 2 – 8х – 4; производные основных элементарных функций можно посмотреть здесь.

Если вы заинтересовались, откуда взялась формула (1), можете почитать, например, здесь.

Итоговая рекуррентная формула имеет вид:

(2) х = x – (х 3 – 4х 2 – 4х + 5)/(3х 2 – 8х – 4)

Выберем любую ячейку на листе Excel (рис. 5; в нашем примере это ячейка G19), присвоим ей имя х, и введем в нее формулу:

Можно вместо х использовать адрес ячейки… но согласитесь, что имя х, смотрится привлекательнее; следующую формулу я ввел в ячейку G20:

Рис. 5. Рекуррентная формула: (а) для поименованной ячейки; (б) для обычного адреса ячейки

Как только мы введем формулу и нажмем Enter, в ячейке сразу же появится ответ – значение 0,77. Это значение соответствует одному из корней уравнения, а именно второму (см. график функции f(x) на рис. 4). Поскольку начальное приближение не задавалось, итерационный вычислительный процесс начинался со значения, по умолчанию хранимого в ячейке х и равного нулю. Как же получить остальные корни уравнения?

Для изменения стартового значения, с которого рекуррентная формула начинает свои итерации, предлагается использовать функцию ЕСЛИ: [1]

Здесь значение «-5» – начальное значение для рекуррентной формулы. Изменяя его, можно выйти на все корни уравнения:

Канал в Telegram

Работа с циклом For в VBA

В этом уроке будет рассмотрена работа с циклом For в VBA. Пример работы с циклом For, так же будет продемонстрирован пример создания формул в Excel с помощью макросов.

Цикл For работает по принципу счетчика. For применяется в тех случаях, когда необходимо повторить некоторые действия заранее известное кол-во раз. Например, цикл For часто используется при чтении массивов.

Цикл For имеет следующий синтаксис:
For счетчик = начало цикла To конец цикла [Step шаг]группа операторов, команд и т.д.
Exit For
Next счетчик

  • «счетчик» — переменная, которая изменяется на указанный «шаг». Если шаг не указан, то по умолчанию берется единица.
  • «начало цикла», «конец цикла» — числа или переменные указывающие нижний предел счетчика и верхний. Остановка цикла происходит тогда, когда «счетчик» > «конец цикла» (или, если цикл обратный, т.е. с шагом -1, то «счетчик» n;
  • Cells(i, 4) — ячейка выделенного листа, i номер строки, 4 -номер столбца в который выводится результат. Обратите внимание, наш счетчик i указывает номер строки листа Excel;
  • Next i — оператор закрытия цикла и перевода указателя к For. Все что находится между For и Next выполняется в цикле;
  • CStr — функция преобразующая число в текст.

Ячейке мы присваиваем формулу созданную следующим образом «=C» & CStr(i) & «+E» & CStr((n — i) + 2). Знак & — «склеивание» символов, строк. В результате у нас получится формула «=Сn+E((n — i) + 2)» где n = 21, i — счетчик.
Страшно? Это только кажется 🙂

Все. После выполнения макроса мы получим следующий столбец (выделен), а в каждой ячейке формула:

Пример 2
Теперь рассмотрим цикл с указанным шагом. После расчета прошлого макроса мы получили три столбца, теперь нам необходимо из столбца E вычесть D, в столбец F вывести формулы вычитания. Код макроса следующий:

Sub Цикл_For_с_шагом()
Const n = 21
For i = n To 2 Step -1
Cells(i, 6) = «=E» & CStr(i) & «-D» & CStr(i)
Next i
End Sub

В данном случае все тоже самое, только цикл теперь «бежит» не от 2, а от 21 до 2 с шагом (Step) -1.
Результат выполнения получим следующий:

Цикл For, в VBA, является не единственным циклом. В дальнейшем будут рассмотрены еще пара вариантов циклов, без которых не обойтись при написании макрокоманд в Excel.

Как удалить или разрешить циклическую ссылку

Вы ввели формулу, но она не работает. Вместо этого вы получаете это сообщение об ошибке «Циклическая ссылка». Миллионы людей имеют такую же проблему, и это происходит из-за того, что формула пытается подсчитаться самой себе, и у вас есть функция, которая называется итеративным вычислением. Вот как это выглядит:

Формула =D1+D2+D3 не работает, поскольку она расположена в ячейке D3 и ссылается на саму себя. Чтобы устранить эту проблему, можно переместить формулу в другую ячейку. Нажмите клавиши CTRL + X , чтобы вырезать формулу, выберите другую ячейку и нажмите клавиши CTRL + V , чтобы вставить ее.

Другая распространенная ошибка связана с использованием функций, которые включают ссылки на самих себя, например ячейка F3 может содержать формулу =СУММ(A3:F3). Пример:

Вы также можете попробовать один из описанных ниже способов.

Если вы только что ввели формулу, начните с этой ячейки и проверьте, не ссылается ли вы на саму ячейку. Например, ячейка A3 может содержать формулу =(A1+A2)/A3. Формулы, например = a1 + 1 (в ячейке a1), также вызывают ошибки циклических ссылок.

Проверьте наличие непрямых ссылок. Они возникают, когда формула, расположенная в ячейке А1, использует другую формулу в ячейке B1, которая снова ссылается на ячейку А1. Если это сбивает с толку вас, представьте, что происходит с Excel.

Если найти ошибку не удается, на вкладке Формулы щелкните стрелку рядом с кнопкой Проверка ошибок, выберите пункт Циклические ссылки и щелкните первую ячейку в подменю.

Проверьте формулу в ячейке. Если вам не удается определить, является ли эта ячейка причиной циклической ссылки, выберите в подменю Циклические ссылки следующую ячейку.

Продолжайте находить и исправлять циклические ссылки в книге, повторяя действия 1–3, пока из строки состояния не исчезнет сообщение «Циклические ссылки».

В строке состояния в левом нижнем углу отображается сообщение Циклические ссылки и адрес ячейки с одной из них.

При наличии циклических ссылок на других листах, кроме активного, в строке состояния выводится сообщение «Циклические ссылки» без адресов ячеек.

Вы можете перемещаться между ячейками в циклической ссылке, дважды щелкая стрелку трассировки. Стрелка указывает ячейку, которая влияет на значение выбранной в данный момент ячейки. Чтобы отобразить стрелку трассировки, выберите пункт формулы, а затем — влияющие ячейки или зависимыеячейки.

Предупреждение о циклической ссылке

Когда Excel впервые находит циклическую ссылку, отображается предупреждающее сообщение. Нажмите кнопку ОК или закройте окно сообщения.

Когда вы закроете сообщение, в ячейке будет отображено либо нулевое, либо последнее вычисленное значение. И теперь, наверное, говорят: «повесить последнее вычисленное значение?» Да. В некоторых случаях можно успешно выполнить формулу, прежде чем выполнять вычисление. Например, формула, использующая функцию если , может работать, пока пользователь не введет аргумент (часть данных, которая должна выполняться правильно), которая приводит к тому, что формула будет вычислять саму себя. В этом случае Excel сохраняет значение из последнего успешного вычисления.

Если есть подозрение, что циклическая ссылка содержится в ячейке, которая не возвращает значение 0, попробуйте такое решение:

Щелкните формулу в строке формулы и нажмите клавишу ВВОД.

Внимание! Во многих случаях при создании дополнительных формул с циклическими ссылками предупреждающее сообщение в приложении Excel больше не отображается. Ниже перечислены некоторые, но не все, ситуации, в которых предупреждение появится.

Пользователь создает первый экземпляр циклической ссылки в любой открытой книге.

Пользователь удаляет все циклические ссылки во всех открытых книгах, после чего создает новую циклическую ссылку.

Пользователь закрывает все книги, создает новую и вводит в нее формулу с циклической ссылкой.

Пользователь открывает книгу, содержащую циклическую ссылку.

При отсутствии других открытых книг пользователь открывает книгу и создает в ней циклическую ссылку.

Итеративные вычисления

Иногда вам может потребоваться использовать циклические ссылки, так как они приводят к итерации функций — повторяются до тех пор, пока не будет выполнено определенное числовое условие. Это может замедлить работу компьютера, поэтому итеративные вычисления обычно отключены в Excel.

Если вы не знакомы с итеративными вычислениями, вероятно, вы не захотите оставлять активных циклических ссылок. Если же они вам нужны, необходимо решить, сколько раз может повторяться вычисление формулы. Если включить итеративные вычисления, не изменив предельное число итераций и относительную погрешность, приложение Excel прекратит вычисление после 100 итераций либо после того, как изменение всех значений в циклической ссылке с каждой итерацией составит меньше 0,001 (в зависимости от того, какое из этих условий будет выполнено раньше). Тем не менее, вы можете сами задать предельное число итераций и относительную погрешность.

Если вы работаете в Excel 2010 или более поздней версии, последовательно выберите элементы Файл > Параметры > Формулы. Если вы работаете в Excel для Mac, откройте меню Excel, выберите пункт Настройки и щелкните элемент Вычисление.

Если вы используете Excel 2007, нажмите кнопку Microsoft Office , щелкните Параметры Excelи выберите категорию формулы .

В разделе Параметры вычислений установите флажок Включить итеративные вычисления. На компьютере Mac щелкните Использовать итеративное вычисление.

В поле Предельное число итераций введите количество итераций для выполнения при обработке формул. Чем больше предельное число итераций, тем больше времени потребуется для пересчета листа.

В поле Относительная погрешность введите наименьшее значение, до достижения которого следует продолжать итерации. Это наименьшее приращение в любом вычисляемом значении. Чем меньше число, тем точнее результат и тем больше времени потребуется Excel для вычислений.

Итеративное вычисление может иметь три исход:

Решение сходится, что означает получение надежного конечного результата. Это самый желательный исход.

Решение расходится, т. е. при каждой последующей итерации разность между текущим и предыдущим результатами увеличивается.

Решение переключается между двумя значениями. Например, после первой итерации результат равен 1, после следующей итерации результат — 10, после следующей итерации результат равен 1 и т. д.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Дополнительные сведения

Примечание: Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Была ли информация полезной? Для удобства также приводим ссылку на оригинал (на английском языке).

VBA Excel. Цикл For… Next

Цикл For. Next в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла For. Next.

Цикл For. Next в VBA Excel предназначен для выполнения группы операторов необходимое количество раз, заданное управляющей переменной цикла — счетчиком. При выполнении цикла значение счетчика после каждой итерации увеличивается или уменьшается на число, указанное выражением оператора Step, или, по умолчанию, на единицу. Когда необходимо применить цикл к элементам, количество которых и индексация в группе (диапазон, массив, коллекция) неизвестны, следует использовать цикл For Each. Next.

Синтаксис цикла For. Next

В квадратных скобках указаны необязательные атрибуты цикла For. Next.

Компоненты цикла For. Next

*Если атрибут Step отсутствует, цикл For. Next выполняется с шагом по умолчанию, равному 1.

**Если не использовать в цикле свой код, смысл применения цикла теряется.

Примеры циклов For. Next

Вы можете скопировать примеры циклов в свой модуль VBA, последовательно запускать их на выполнение и смотреть результаты.

Простейший цикл

Заполняем десять первых ячеек первого столбца активного листа Excel цифрами от 1 до 10:

Простейший цикл с шагом

В предыдущий цикл добавлен оператор Step со значением 3, а результаты записываем во второй столбец:

Цикл с отрицательными аргументами

Этот цикл заполняет десять первых ячеек третьего столбца в обратной последовательности:

Увеличиваем размер шага до -3 и записываем результаты в четвертый столбец активного листа Excel:

Вложенный цикл

Внешний цикл последовательно задает индексы первых десяти строк активного листа, а вложенный цикл складывает числа в первых четырех ячейках строки с текущем индексом и записывает сумму в ячейку пятого столбца. Перед запуском вложенного цикла с накопительным сложением, пятую ячейку соответствующей строки обнуляем, чтобы в случае нахождения в ней какого-либо числа, оно не прибавилось к итоговой сумме.

Выход из цикла

В шестой столбец активного листа запишем названия десяти животных, конечно же, с помощью цикла For. Next:

Следующий цикл будет искать в шестом столбце крокодила, который съел галоши. В ячейку седьмого столбца цикл, пока не встретит крокодила, будет записывать строку «Здесь был цикл», а когда обнаружит крокодила, запишет «Он съел галоши» и прекратит работу, выполнив команду Exit For. Это будет видно по ячейкам рядом с названиями животных ниже крокодила, в которых не будет текста «Здесь был цикл».

Результат работы циклов For. Next из примеров:

Результат работы циклов For. Next

Такие данные на активном листе Excel вы получите, если последовательно запустите на выполнение в редакторе VBA все семь подпрограмм из примеров, демонстрирующих работу циклов For. Next.

Цикл с дробными аргументами

Атрибуты start, end и step могут быть представлены числом, переменной или числовым выражением:

В результате вычисления значения переменной вне цикла или выражения внутри его может получиться дробный результат. VBA Excel округлит его до целого числа, используя бухгалтерское округление:

Ранее я описал, как найти и исправить циклическую ссылку. Напомню, что циклическая ссылка появляется, если в ячейку Excel введена формула, содержащая ссылку на саму эту ячейку (напрямую или через цепочку других ссылок). Например (рис. 1), в ячейке С2 находится формула, ссылающаяся на саму ячейку С2.

Рис. 1. Пример циклической ссылки

Но!.. Не всегда циклическая ссылка является бедствием. Циклическую ссылку можно использовать для решения уравнений итерационным способом. Для начала нужно позволить Excel вести вычисления, даже при наличии циклической ссылки. В обычном режиме Excel, обнаружив циклическую ссылку, выдаст сообщение об ошибке, и потребует ее устранения. В обычном режиме Excel не может провести вычисления, так как циклическая ссылка порождает бесконечный цикл вычислений. Можно, либо устранить циклическую ссылку, либо допустить вычисления по формуле с циклической ссылкой, но ограничив число повторений цикла. Для реализации второй возможности щелкните на кнопке «Office» (в левом верхнем углу), а затем на «Параметры Excel» (рис. 2).

Скачать заметку в формате Word, примеры в формате Excel

Рис. 2. Параметры Excel

В открывшемся окне «Параметры Excel» перейдите на вкладку Формулы и отметьте «Включить итеративные вычисления» (рис. 3). Помните, что эта опция включается для приложения Excel  в целом (а не для одного файла), и будет действовать, пока вы ее не отключите.

Рис. 3. Включить итеративные вычисления

На этой же вкладе, можно выбрать, как будут вестись вычисления: автоматически или вручную. При автоматическом вычислении Excel сразу рассчитает конечный результат, при вычислениях, вручную, можно будет наблюдать результат каждой итерации (простым нажатием F9 запуская каждый новый цикл вычисления).

Решим уравнение третьей степени: х3 – 4х2 – 4х + 5 = 0 (рис. 4). Для решения этого уравнения (и любого другого уравнения совершенно произвольного вида) понадобится всего одна ячейка Excel.

Рис. 4. График функции f(x)

Для решения уравнения нам понадобится рекуррентная формула (то есть, формула, выражающая каждый член последовательности через один или несколько предыдущих членов):

(1) x = x – f(x)/f’(x), где

х – переменная;

f(x) – функция, задающая уравнение, корни которого мы ищем; f(x) = х3 – 4х2 – 4х + 5

f’(x) – производная нашей функции f(x); f’(x) = 3х2 – 8х – 4; производные основных элементарных функций можно посмотреть здесь.

Если вы заинтересовались, откуда взялась формула (1), можете почитать, например, здесь.

Итоговая рекуррентная формула имеет вид:

(2) х = x – (х3 – 4х2 – 4х + 5)/(3х2 – 8х – 4)

Выберем любую ячейку на листе Excel (рис. 5; в нашем примере это ячейка G19), присвоим ей имя х, и введем в нее формулу:

(3) =x-(x^3-4*x^2-4x+5)/(3*x^2-8*x-4)

Можно вместо х использовать адрес ячейки… но согласитесь, что имя х, смотрится привлекательнее; следующую формулу я ввел в ячейку G20:

(4) =G20-(G20^3-4*G20^2-4*G20+5)/(3*G20^2-8*G20-4)

Рис. 5. Рекуррентная формула: (а) для поименованной ячейки; (б) для обычного адреса ячейки

Как только мы введем формулу и нажмем Enter, в ячейке сразу же появится ответ – значение 0,77. Это значение соответствует одному из корней уравнения, а именно второму (см. график функции f(x) на рис. 4). Поскольку начальное приближение не задавалось, итерационный вычислительный процесс начинался со значения, по умолчанию хранимого в ячейке х и равного нулю. Как же получить остальные корни уравнения?

Для изменения стартового значения, с которого рекуррентная формула начинает свои итерации, предлагается использовать функцию ЕСЛИ: [1]

(5) =ЕСЛИ(x=0;-5;x-(x^3-4*x^2-4*x+5)/(3*x^2-8*x-4))

Здесь значение «-5» – начальное значение для рекуррентной формулы. Изменяя его, можно выйти на все корни уравнения:

Начальное значение Корень уравнения
1 0,77
-5 -1,40
8 4,63

[1] Идея подсмотрена здесь

Использование табличного процессора MS Excel при решении задач на рекурсию Текст научной статьи по специальности « Математика»

Аннотация научной статьи по математике, автор научной работы — Наталья Шамшина

Табличный процессор Excel целесообразно использовать для решения задач на рекурсию , чтобы освоить рекурсивный подход к решению математических и практических задач.

Похожие темы научных работ по математике , автор научной работы — Наталья Шамшина

Using MS Excel spreadsheet to solve problems on recursion

Excel spreadsheet useful for solving problems on recursion to learn a recursive approach to solving mathematical and practical problems.

Текст научной работы на тему «Использование табличного процессора MS Excel при решении задач на рекурсию»

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

PHYSICAL AND MATHEMATICAL EDUCATION

Has been issued since 2013.

Видається з 2013.

Шамшина Н. Использование табличного процессора MS Excel при решении задач на рекурсию // Фізико-математична освіта. Науковий журнал. — Суми: СумДПУ ім.А.С.Макаренка, 2013. — № 1 (1). — С. 57-64.

Сумский государственный педагогический университет имени А.С. Макаренко,

ИСПОЛЬЗОВАНИЕ ТАБЛИЧНОГО ПРОЦЕССОРА MS EXCEL ПРИ РЕШЕНИИ ЗАДАЧ НА РЕКУРСИЮ

Рекурсия — это тонкий и изящный инструмент, который при умелом использовании способен сослужить добрую службу программисту. Одно из важных достоинств рекурсивных алгоритмов заключается в том, что они просты и наглядны. Изящество рекурсии в программировании можно сравнить только с изяществом метода индукции в математике. «Когда изучаются циклы — основа вычислительных процессов, без рекурсивных определений не обойтись. Циклы и рекурсия — близнецы-братья» [2]. С их помощью строятся лаконичные и легко понимаемые алгоритмы, а затем и соответствующие информационные модели в виде рекурсивных программ на том или ином языке программирования [4].

Обычно начинающий программист, впервые услышавший про рекурсию, впадает в легкое замешательство. Первоначальное знакомство с ней может вызвать непонимание и легкий шок. В общеобразовательной школе изучению рекурсии уделяют мало внимания. Тема трудна и для учеников, и для учителей. Умение описывать вычислительный процесс как циклический или рекурсивный дело далеко не простое.

Между тем, немало практических задач и большинство нетривиальных (олимпиадных) задач имеют рекурсивную природу. Следовательно, необходимо не только знакомить студентов различных специальностей и старших школьников с рекурсивными алгоритмами, но и уделять внимание поиску новых методик и технологий обучения, ориентированных на прочное усвоение соответствующих знаний.

Анализ современных методологических исследований 4 показывает, что преподаватели информатики педагогических вузов и популяризаторы информационных технологий в Интернете заинтересованно относятся к данному вопросу, хотя исследований теоретического и практического характера по теме очень мало.

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

Дидактические преимущества рекурсивного подхода, по сравнению с простым описанием функций и решением с его помощью соответствующих прикладных задач, положительно оценили коллеги Тульского государственного педагогического университета имени Л.Н. Толстого. Экспериментальная группа студентов показала лучшие результаты, по сравнению с контрольной группой, при решении задач через год после освоения курса «Финансовые функции». Сделан вывод о том, что рекурсивный подход «дает возможность не только всесторонне понять содержание излагаемого материала, но сделать это быстро и эффективно. И что особенно важно, полученные знания становятся достоянием долговременной памяти» [3]. Исследования проводились с использованием экономических задач, решения которых оформлялись в виде рекурсивных программ-функций на языке программирования вычислительной среды Mathcad.

Специализированные математические програмы, языки високого уровня, а вместе с ними и основи программирования студенты изучают на старших курсах сталкиваясь при этом с некоторыми трудностями, поскольку им приходится осваивать незнакомый язык программирования и одновременно логику программы. Можно ли студентов первых курсов и старших школьников учить понятиям «рекурсия» и «циклы» как можно раньше, просто и наглядно, например, используя табличный процессор Excel? Ответ — ДА! Excel является прекрасной средой для начального обучения программированию в школе и ВУЗе.

Видимо это утверждение не слишком охотно воспринимается опытными программистами, так как автор лекций «Основы офисного программирования и документы Excel» В.А. Биллиг на страницах Интернет-Университета Информационных Технологий пишет следующее: «Я высказываю и пытаюсь обосновать здесь

«крамольную» мысль о том, что Excel является прекрасной средой начального обучения программированию в школе и в вузах» [2].

Цель данной статьи — показать дидактические возможности Excel и целесообразность его использования при решении математических и практических задач по теме «Рекурсивные вычисления».

Итак, покажем, что применяя Excel можно освоить рекурсивный подход к решению математических и практических задач. Рассмотрим конкретные задачи на рекурсию и их реализацию в программе Excel.

Рекурсией в программировании называется ситуация, в которой какая-либо подпрограмма прямо или через другие подпрограммы вызывает себя в качестве подпрограммы. Реализуемый при этом алгоритм называется рекурсивным [4].

В математике очень часто встречаются последовательности чисел, в которых каждый следующий член выражается через предыдущие. Формулы, выражающие очередной член последовательности через один или несколько предыдущих членов, называют рекуррентными соотношениями.

В арифметической прогрессии, например, каждый следующий член равен предыдущему, увеличенному на разность прогрессии: a(i) = a(i-1) + d.

При вычислении факториала n!, который определяют как произведение первых n чисел натурального ряда n!=1*2*3*. *n, также можно использовать рекуррентное соотношение, в котором n! выражается через предыдущий (n-1)!, т.е. используется рекуррентная формула:

0!=1, для любого n>0 n!=n*(n-1)!

Аналогично при вычислении суммы ряда чисел S=1+2+3+. +n можно использовать рекуррентное соотношение:

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

S(1)=1, для любого n>0 S(n)=n+S(n-1)

Важное место в математике занимает последовательность чисел известная как ряд Фибоначчи, так как проявляется в самых неожиданных ее приложениях. Строгое определение этого ряда следующее: каждое число ряда, начиная со второго, равно сумме двух предыдущих. Вот эта задача в том виде, как формулирует ее сам Фибоначчи: «Пара кроликов через месяц производит на свет другую пару, а потомство они дают со второго месяца после своего рождения. Итак, через месяц будет две пары, через два месяца — три пары, а через четыре месяца — пять, так как к паре, рожденной первой парой, добавятся первые дети от второй пары. ». Продолжая процесс, получим количество пар кроликов по месяцам: 1, 1, 2, 3, 5, 8, 13, 21, 35, 56. эти числа и представляют ряд, названный по имени автора задачи [2].

Рекуррентные соотношения, определяющие вычисление чисел Фибоначчи: F(1) = 1; F(2) = 2; при k = 3. N F(k) = F(k-2) + F(k-1)

Наличие рекуррентного соотношения позволяет использовать рекурсию. Эти и другие задачи используются при обучении программированию в темах: циклы, рекурсия. Иногда их решение вызывает у студентов некоторые трудности, поскольку им приходится осваивать незнакомый язык программирования и одновременно логику программы. В табличном процессоре Excel эти задачи решаются наглядно просто и без программирования, путем создания и копирования формул на рабочем листе.

Это возможно благодаря тому, что одним из преимуществ Excel, его важной особенностью, является применяемый способ задания ссылок на ячейки в формулах. Excel позволяет задавать разные типы ссылок на ячейки: абсолютные, относительные и полуабсолютные. Относительные ссылки — это ссылки относительно положения самого объекта-формулы. Если изменяется положение формулы, то соответственно меняется и ячейка, на которую она ссылается. Ссылки на ячейки можно задавать в двух форматах: A1 и R1C1. По умолчанию ссылки в первом формате являются относительными. Так, например, ссылка F20 является относительной и при копировании формулы (смене положения формулы) будет определять другую ячейку, в зависимости от изменения первоначального положения формулы. Чтобы сделать ссылку абсолютной, нужно добавить символы $ перед именем столбца и индексом строки: $F$20, в этом случае при смене положения формулы на листе ссылка будет указывать на ту же самую ячейку. Пример полуабсолютной ссылки: F$20, $F20.

В формулах часто используются относительные ссылки в формате R1C1, в котором явно можно указывать смещение относительно объекта-формулы, например следующим образом: =RC[-2]*RC[-1], что означает перемножить ячейки, одна из которых находится в той же строке, но на два столбца левее от формулы, а другая в той же строке, но на один столбец левее от формулы. Правило записи таких ссылок легко понять из нижеследующей таблицы:

R Абсолютная ссылка на текущую строку

С Абсолютная ссылка на текущий столбец

R2C2 Абсолютная ссылка на ячейку, расположенную во второй строке и во втором столбце

R[-1] Относительная ссылка на строку, расположенную выше текущей ячейки

С[-1] Относительная ссылка на столбец, расположенный левее текущего столбца

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО) № 1(1), 2013

R[-2]C Относительная ссылка на ячейку, расположенную на две строки выше и в том же столбце

RC [-2] Относительная ссылка на ячейку, расположенную на два столбца левее и в той же строке

R[2]C[2] Относительная ссылка на ячейку, расположенную на две строки ниже и на два столбца правее

Стиль ссылок R1C1 полезен при вычислении положения столбцов и строк в макросах.

Рассмотрим программную реализацию задачи Фибоначчи в Excel с использованием модуля VBA. При указании ссылок в формуле (Formula) задано смещение по строкам, а столбец не указан, что по умолчанию предполагает использование столбца A объекта (Range). Относительные ссылки позволяют реализовать рекурсивные вычисления.

Range(«A1») = 1: Range(«A2») = 2 Range(«A3:A20»).Formula = «=R[-2]+R[-1]»

Однако та же задача совершенно естественно решается в Excel без всякого программирования. Достаточно записать значение 1 в ячейку A1, значение 2 — в ячейку A2, формулу «=A1+A2» — в ячейку A3, после чего скопировать формулу в нужный диапазон ячеек от A4 до A20. При копировании формулы будет учтена относительность ссылок, так что в ячейке A20 соответствующая формула будет иметь вид — «=A18+A19».

Аналогично можно решить задачи для факториала, суммы ряда чисел, вычислить члены арифметической или геометрической прогрессии. Пример рабочего листа Excel з формулами и результатами расчетов приведен на рис.1 и рис.2.

А В с D E F G Н I J

1 1 1 =С1 =ФАКТР(С1) 1 =G1 =СУММ(ЇЄЇ1 :G1)

2 2 2 =D1*C2 =ФАКТР(С2) 2 =G2+H1 -Cyiv1M($G$1 :G2)

3 =А1 +А2 3 =D2*C3 =ФАКТР(СЗ) 3 =G3+H2 -CyMM($G$1 :G3) =

4 =А2+А3 Ч 4 =D3*C4 =ФАКТР(С4) 4 =G4+H3 -CyMM($G$1 :G4)

5 =АЗ+А4 И 5 =D4*C5 =ФАКТР(С5) 5 =G5+H4 -CyMM($G$1 :G5) c —

6 =А4+А5 с 6 =D5*C6 =ФАКТР(С6) Ф 6 =G6+H5 -CyMM($G$1 :G6)

7 =А5+А6 л 7 =D6*C7 =ФАКТР(С7) А 7 =G7+H6 -CyMM($G$1 :G7) J

8 =А6+А7 а 8 =D7*C8 =ФАКТР(С8) К 8 =G8+H7 =CVMM($G$1:G3)

9 =А7+А8 9 =D8*C9 =ФАКТР(С9) Т 9 =G9+H8 =CVMM($G$1:G9)

10 =А8+А9 ф 10 =D9*C10 =ФАКТР(С10) 0 10 =G10+H9 =CVMM($G$1:G10)

11 =А9+А10 и 11 =D10*C11 =ФАКТР(С11) р 11 =G11+H10 -Cyiv1M($G$1 :G11)

12 =А10+А11 б 12 =D11*012 =ФАКТР(С12) и 12 =G12+H11 -СУММ(ЇСЇ1 :G12)

13 = А11+А12 0 13 =D12*C13 =ФАКТР(С13) А 13 =G13+H12 -Cyiv1M($G$1 :G13)

14 =А12+А13 н 14 =D13*C14 =ФАКТР(С14) Л 14 =G14+H13 -CyMM($G$1 :G14)

15 =А13+А14 а 15 =D14*C15 =ФАКТР(С15) 15 =G15+H14 -CyMM($G$1 :G15)

16 =А14+А15 ч 16 =D15*C16 =ФАКТР(С16) 16 =G16+H15 -CyMM($G$1 :G16)

17 =А15+А16 и 17 =D16*C17 =ФАКТР(С17) 17 =G17+H16 -CyMM($G$1 :G17)

18 =А16+А17 18 =D17*C18 =ФАКТР(С18) 18 =G18+H17 -CyMM($G$1 :G18)

19 = А17 +А18 19 =D18*C19 =ФАКТР(С19) 19 =G19+H18 -CVMM($G$1 :G19)

20 =А18+А19 20 =D19*020 =ФАКТР(С20) 20 =G20+H19 =CVMM($G$1:G20) r ■

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

А В С D Е F G Н I J А

1 1 1 1 1 1 1 1

2 2 2 2 2 2 Зг 3

3 3 3 6 6 3 6Г 6 =

4 5 Ч 4 24 24 4 10г 10

5 8 н 5 120 120 5 15 г 15 г —

6 13 с 6 720 720 Ф 6 21 г 21

7 21 л 7 5040 5040 А 7 28 г 28 У м м

8 34 а 8 40320 40320 К 8 36 г 36

9 55 9 362880 362880 Т 9 45 г 45

10 89 Ф 10 3628800 3628800 0 10 55 г 55

11 144 н 11 39916800 39916800 Р 11 66 г 66

12 233 б 12 479001600 479001600 И 12 78 г 78 Р

13 I 377 0 13 6227020800 6227020800 А 13 91 г 91 д

14 610 н 14 87178291200 87178291200 Л 14 105 г 105

15 987 а 15 1.30767 Е+12 1.30767Е+12 15 120 г 120

16 1597 ч 16 2.09228 Е+13 2.09228 Е+13 16 136 г 136

17 2584 н 17 3.55687 Е+14 3.55687 Е+14 17 153 г 153

18 4181 18 6.40237 Е+15 6.40237 Е+15 18 171 г 171

19 6765 19 1.21Є45Е+17 1.21Є45Е+17 19 190 г 190

20 10946 20 2.4329Е+18 2.4329Е+18 20 210 210 IV

Рис. 2. Результаты расчетов

5 =А4+1 =В4*$В$1/А5 =С4+В5

6 =А5+1 =В5*$В$1/А6 =С5+В6

7 =А6+1 =В6*$В$1/А7 =С6+В7

8 =А7+1 =В7*$В$1/А8 =С7+В8

9 =А8+1 =В8*$В$1/А9 =С8+В9

10 =А9+1 =В9*$В$1/А10 =С9+В10 =

11 =А10+1 =B10*SBS1/A11 =С10+В11

12 =А11 +1 =В1ГЇВЇ1/А12 =011 +В12

13 =А12+1 =В12*$В$1/А13 =С12+В13

14 =А13+1 =В13*$В$1/А14 =С13+В14

15 =А14+1 =B14*SBS1/A15 =С14+В15

16 =А15+1 =B15*SBS1/A16 =С15+В16

17 =А16+1 =В16*$В$1/А17 =С16+В17

18 =А17+1 =B17*SBS1/A18 =017 +В18

19 =А18+1 =B18*SBS1/A19 =018+В19

Рис. 3. Вычисление ex

Значение х заносим в ячейку В1, в дальнейшем используем абсолютную ссылку на эту ячейку $B$1 при подсчете A(k). Для значений k, A(k) и Sum(Ak) заносим в строку 4 базу рекурсии, в строку 5 — формулы рекуррентного соотношения, копируем эти формулы с помощью автозаполнения вниз. Для проверки в ячейку В2 занесем формулу расчета с использованием встроенной функции EXP(x).

Изменяя в ячейке В1 значение х можно увидеть как стремится к нулю текущий член суммы ряда, насколько точность вычислений зависит от количества членов ряда, как взаимосвязаны значения х и скорость сходимости ряда. Например, если учитывать 4 десятичных разряда, при х=2,5 ряд сходится с 12 члена (k=12), при х=3 с k=13, при х=5

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

с k=21 и т.д. Одним словом, можно исследовать поведение ряда и воочию увидеть закономерности изменения. Такой подход помогает легче понять и запомнить математические понятия и зависимости.

В каких же ситуациях требуется прибегать к циклическим вычислениям? Это следует делать, если речь идет о реализации итерационного процесса, вычислениях по рекуррентным соотношениям. Иногда приходится вводить формулы, в которых одна ячейка явно или неявно ссылается на саму себя, возникают циклические ссылки. Если не предпринять специальных мер, то циклические ссылки породят бесконечные вычисления. Excel следит за тем, возникают ли циклические ссылки, и в нормальном режиме не допускает таких вычислений, требуя скорректировать формулы так, чтобы циклов не было.

Однако можно включить специальный режим вычислений, допускающий циклические ссылки. В последнем случае требуется, чтобы число повторений цикла было конечным, только тогда Excel допускает переход к новому режиму, обеспечивающему проведение циклических вычислений. Для этого достаточно на вкладке Вычисления (меню Сервис, пункт Параметры) включить флажок Итерации и при необходимости изменить число повторений цикла в окошке «Предельное число итераций». Можно также задать погрешность вычислений в окошке «Относительная погрешность», что также приводит к ограничению числа повторений цикла. По умолчанию максимальное число итераций и погрешность вычислений соответственно имеют значения 100 и 0,001.

Необходимо также учитывать при решении таких задач особенности циклических вычислений, а именно:

1. Формулы, связанные циклическими ссылками, вычисляются многократно.

2. Размещение формул на листе определяет последовательность их вычисления. Формулы вычисляются сверху вниз, слева направо.

3. Число повторений цикла определяется параметрами, заданными на вкладке Вычисления.

4. Цикл заканчивается, когда изменения значений во всех ячейках не превосходят заданной погрешности или при достижении максимального числа итераций.

Рассмотрим пример практической задачи с использованием цикла для расчета сметы работ [1, с.316]:

Допустим необходимо рассчитать цену работ, если фонд заработной платы составляет 2 000 грн., запланированные средства на служебные командировки -200 грн., затраты на материалы — 150 грн. При этом отчисления (налог) в фонд социального страхования составляет 37% заработной платы. В расчет цены закладывается прибыль предприятия — 10% от цены работ, а также накладные затраты — 10% и другие прямые затраты 2,2% от цены работ. Решения задачи в Excel показано на рис.4.

В данном примере встречается неявная циклическая ссылка: значение ячейки С9 рассчитывается как сумма ячеек С2:С8, часть из которых в свою очередь зависят от С9. Формулы в ячейках С4, С7-С9 содержат рекурсию. В обычном режиме работы Excel по данным формулам невозможно провести вычисления, программа выдает сообщение об ошибке — циклической ссылке. После перехода к новому режиму, допускающему циклические ссылки, получаем представленный на рис.5 результат.

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

1 Статті витрат % Сума _

2 Заробітна плата 2000

3 Відрахування на соц. Страхування 0,37 =С2*ВЗ

4 Накладні витрати 0,15 =С9*В4

5 Матеріали 150

6 Витрати на службові відрядження 200

7 Інші прямі витрати 0,022 =С9*В7

8 Прибуток 0,1 =С9*В8

9 Л П Ціна =СУММ(С2:С8) і 1 —

Рис. 4. Расчет сметы работ. Формулы Рабочего Листа

1 Статті витрат % Сума І

2 Заробітна плата 2 000,00 грн.

3 Відрахування на соц. Страхування 37% 740,00 грн.

4 Накладні витрати 15% 636,68 грн.

5 Матеріали 150,00 грн.

6 Витрати на службові відрядження 200,00 грн.

7 Інші прямі витрати 2,20% 93,38 грн.

8 Прибуток 10% 424,45 грн.

9 Ціна 4 244,51 грн.

Рис. 5. Результаты расчета сметы работ

Эта и подобные ей задачи часто встречаются в реальной жизни предпринимателей, бизнесменов, бухгалтеров, экономистов, и на помощь им приходит такой простой, доступный инструмент для подобных вычислений каким является Excel. Как видим, не только математические задачи приходится решать с помощью рекурсии и циклов, не только математикам и программистам необходимо понимание рекурсивных алгоритмов.

Из всего выше изложенного можно сделать выводы.

Преимущества табличного процессора Excel для обучения понятию «рекурсия» состоят в следующем:

o Excel идеально приспособлен к тому, чтобы простые рекурсивные вычисления, заданные рекуррентными соотношениями, определялись почти автоматически. В Excel при копировании формул ссылки на переменные меняются автоматически, благодаря этому реализуются рекуррентные соотношения. Достаточно скопировать формулу, чтобы реализовать рекурсивное вычисление.

о Достаточно сложные на начальном этапе обучения задачи решаются без программирования, путем задания и копирования формул на рабочем листе. Это важно для поэтапного обучения.

o Простые рекурсивные вычисления приобретают необходимую наглядность так, что ничего не остается скрытым. Можно видеть, как меняется формула, тут же в ячейке видеть значение, рассчитанное по этой формуле.

о При решении многих задач появляется совершенно новое качество, крайне важное для обучения — показан процесс решения, а не только конечный результат. Решение позволяет наглядно видеть, как сходится процесс вычислений, изучать влияние аргумента на скорость сходимости. Такое подход способствует тому, чтобы стать исследователем, вместо того, чтобы оставаться простым наблюдателем.

ФІЗИКО-МАТЕМАТИЧНА ОСВІТА (ФМО)

Рекурсивные алгоритмы и их вычисления в Excel могут служить весьма подходящим фоновым материалом для начального освоения рекурсии как достаточно общего и эффективного метода решения задач. Примеры решения задач, рассмотренные в данной статье, заставляют по-новому оценить дидактические возможности табличного процессора Excel и осознать его роль и место в построении современного курса информатики в педагогических вузах.

Задачи, которые приведены в данной статье, используются в лабораторной работе по курсу «Решение математических задач средствами Excel».

Список использованных источников

1. Баженов В.А., Венгерський П.С. Інформатика. Комп’ютерна техніка. Комп’ютерні технології. — К.: Каравелла, 2008. — 640 с.

2. Биллиг В.А Основы офисного программирования и документы Excel http://www.intuit.rU/department/office/vbaexcel/1/.

3. Добровольский Н.М., Есаян А.Р., Пихтильков С. A., Стеценко В.Я. Об одном вычислительном эксперименте. Межвузовский сборник статей. Ч.1-Тула: Изд-во Тул. гос. пед. ун-та, 1999.10 с.

4. Есаян А.Р. Фракталы и рекурсия. Учеб. пособие для студентов педвузов. — Тула, 1999. -52с.

Аннотация. Шамшина Н. Использование табличного процессора MS Excel при решении задач на рекурсию.

Табличный процессор Excel целесообразно использовать для решения задач на рекурсию, чтобы освоить рекурсивный подход к решению математических и практических задач.

Ключевые слова: табличный процессор MS Excel, рекурсия, решение задач.

Анотація. Шамшина Н. Використання табличного процесора MS Excel при розв’язуванні задач на рекурсію.

Табличний процесор Excel доцільно використовувати для розв’язування задач на рекурсію, щоб засвоїти рекурсивний підхід до розв’язування математичних і практичних задач.

Ключові слова: табличний процесор MS Excel, рекурсія, розв’язування задач.

Abstract. Shamshyna N. Using MS Excel spreadsheet to solve problems on recursion.

Excel spreadsheet useful for solving problems on recursion to learn a recursive approach to solving mathematical and practical problems.

Keywords: spreadsheet MS Excel, recursion, solving problems.

Excel. Использование циклических ссылок для решения уравнений итерационным способом

Ранее я описал, как найти и исправить циклическую ссылку. Напомню, что циклическая ссылка появляется, если в ячейку Excel введена формула, содержащая ссылку на саму эту ячейку (напрямую или через цепочку других ссылок). Например (рис. 1), в ячейке С2 находится формула, ссылающаяся на саму ячейку С2.

Рис. 1. Пример циклической ссылки

Но. Не всегда циклическая ссылка является бедствием. Циклическую ссылку можно использовать для решения уравнений итерационным способом. Для начала нужно позволить Excel вести вычисления, даже при наличии циклической ссылки. В обычном режиме Excel, обнаружив циклическую ссылку, выдаст сообщение об ошибке, и потребует ее устранения. В обычном режиме Excel не может провести вычисления, так как циклическая ссылка порождает бесконечный цикл вычислений. Можно, либо устранить циклическую ссылку, либо допустить вычисления по формуле с циклической ссылкой, но ограничив число повторений цикла. Для реализации второй возможности щелкните на кнопке «Office» (в левом верхнем углу), а затем на «Параметры Excel» (рис. 2).

Скачать заметку в формате Word, примеры в формате Excel

Рис. 2. Параметры Excel

В открывшемся окне «Параметры Excel» перейдите на вкладку Формулы и отметьте «Включить итеративные вычисления» (рис. 3). Помните, что эта опция включается для приложения Excel в целом (а не для одного файла), и будет действовать, пока вы ее не отключите.

Рис. 3. Включить итеративные вычисления

На этой же вкладе, можно выбрать, как будут вестись вычисления: автоматически или вручную. При автоматическом вычислении Excel сразу рассчитает конечный результат, при вычислениях, вручную, можно будет наблюдать результат каждой итерации (простым нажатием F9 запуская каждый новый цикл вычисления).

Решим уравнение третьей степени: х 3 – 4х 2 – 4х + 5 = 0 (рис. 4). Для решения этого уравнения (и любого другого уравнения совершенно произвольного вида) понадобится всего одна ячейка Excel.

Рис. 4. График функции f(x)

Для решения уравнения нам понадобится рекуррентная формула (то есть, формула, выражающая каждый член последовательности через один или несколько предыдущих членов):

(1) x = x – f(x)/f’(x), где

f(x) – функция, задающая уравнение, корни которого мы ищем; f(x) = х 3 – 4х 2 – 4х + 5

f’(x) – производная нашей функции f(x); f’(x) = 3х 2 – 8х – 4; производные основных элементарных функций можно посмотреть здесь.

Если вы заинтересовались, откуда взялась формула (1), можете почитать, например, здесь.

Итоговая рекуррентная формула имеет вид:

(2) х = x – (х 3 – 4х 2 – 4х + 5)/(3х 2 – 8х – 4)

Выберем любую ячейку на листе Excel (рис. 5; в нашем примере это ячейка G19), присвоим ей имя х, и введем в нее формулу:

Можно вместо х использовать адрес ячейки… но согласитесь, что имя х, смотрится привлекательнее; следующую формулу я ввел в ячейку G20:

Рис. 5. Рекуррентная формула: (а) для поименованной ячейки; (б) для обычного адреса ячейки

Как только мы введем формулу и нажмем Enter, в ячейке сразу же появится ответ – значение 0,77. Это значение соответствует одному из корней уравнения, а именно второму (см. график функции f(x) на рис. 4). Поскольку начальное приближение не задавалось, итерационный вычислительный процесс начинался со значения, по умолчанию хранимого в ячейке х и равного нулю. Как же получить остальные корни уравнения?

Для изменения стартового значения, с которого рекуррентная формула начинает свои итерации, предлагается использовать функцию ЕСЛИ: [1]

Здесь значение «-5» – начальное значение для рекуррентной формулы. Изменяя его, можно выйти на все корни уравнения:

Начальное значение Корень уравнения
1 0,77
-5 -1,40
8 4,63

[1] Идея подсмотрена здесь

7 комментариев для “Excel. Использование циклических ссылок для решения уравнений итерационным способом”

Офигенный сайт!
И как всегда когда не нужно все находишь!
Блин у меня по экономическому моделированию в Excell курсовик был в институте, вот время помню кучу потерял а тут все в одном флаконе:)
Все равно инфа пригодится, даже очень!

И нам зараза в этом гребанном институте мать их так этих учителей даже близко ничего подобного не рассказывали. Я не про этот пример говорю а про остальные..
«Вычисление стандартного отклонения для данных с тенденцией», «Нормальное распределение» и т.п.. даже объяснить не могли или не хотели как это все применять, а тут все наглядно и понятно! Огромное спасибо! Не зря я на этот сайт наткнулся, чую он мне еще окажет неплохую помощь))))

В упор не понимаю откуда берется предел для определения корней уравнения, если «Здесь значение «-5» – начальное значение для рекуррентной формулы. Изменяя его, можно выйти на все корни уравнения»

У меня график получается, который с осью Х не имеет вообще пересечений, мож где накосячила?
Пожалуйста подскажите, а то у меня взрыв мозга будет скоро…((((

Тамара, если Вы строите график на основе моих данных, откройте файл Excel; если Вы используете собственные данные, пришлите мне на mail Ваш файл, попробую помочь))

Спасибо заранее за беспокойство, вот такое уравнение у^3-20у^2-158у-420=0, если не трудно объясните пожалуйста как вы определяте предел в каких знчениях надо считать корни.

Продвинутый взгляд на рекурсию

Рекурсия является одним из наиболее мощных подходов в программировании. С ее помощью можно решать чрезвычайно сложные задачи, печатая при этом невероятно малый объем кода. Тем не менее понимание данного принципа нередко вызывает сложности, поскольку для этого требуется нестандартный взгляд на процесс выполнения команд.

Сложность примеров, описанных в данной статье, будет возрастать постепенно, начиная от самых простых и заканчивая достаточно трудными. При этом каждый из них будет сопровождаться подробной диаграммой:

  • Рекурсивный способ мышления.
  • Рекуррентные соотношения.
  • Мемоизация.
  • Стратегия “разделяй и властвуй”.

Рекурсия используется для решения задач, в которых функция вызывает сама себя в рамках собственного определения. В каждой реализации рекурсии должно присутствовать два элемента:

  • Заключительный базовый кейс или кейсы, в которых рекурсивный поиск ответа более не производится.
  • Набор правил (рекуррентных соотношений), который инициирует очередные циклы рекурсии, сводя таким образом общие кейсы к базовому.

В качестве примера давайте рассмотрим задачу по выводу развернутого варианта строки. В этом случае на выходе из вводного слова ‘hello’ должно получиться ‘olleh’. Итеративный метод решения этой задачи — применение цикла for и вывод каждого знака, начиная с последнего и заканчивая первым.

В рекурсивном же подходе мы сначала создаем функцию reverseString , получающую интересующую нас строку в качестве параметра. Если длина ввода не равна 0, то такой кейс является базовым или заключительным, и мы выводим последнюю букву, а затем инициируем еще один экземпляр reverseString для той же строки, исключив последнюю букву, поскольку ее мы уже вывели.

Обратите внимание: поскольку функция вызывается изнутри себя, она сама создает цикл for . Кроме того, наличие инструкции if перед вызовом другого экземпляра функции обязательно, в противном случае будет выброшена ошибка RecursionError или RuntimeError , поскольку скрипт не увидит конца бесконечного цикла. Данная ситуация аналогична бесконечному циклу While True .

Давайте посмотрим, как эта рекурсивная функция работает с ‘hello’:

Рекуррентность в более сложных задачах может вызвать трудности при определении двух ее компонентов — рекуррентного соотношения, т.е. соотношения между результатом задачи и результатом ее подзадач и базовым кейсом, представляющим кейс, который можно вычислить напрямую без дополнительных рекурсивных вызовов. Иногда базовые кейсы называются “нижними кейсами”, потому что они являются кейсами, в которых задача уменьшена до наименьшего масштаба.

Рассмотрите в качестве примера треугольник Паскаля, в котором каждое число является суммой двух, находящихся над ним, и который имеет по сторонам единицы. Как можно использовать рекурсию для нахождения значения любого значения в точке (i, j)? Каково будет рекуррентное соотношение и базовый/заключительный кейс?

Рекуррентное соотношение можно выразить следующим уравнением:

Это очевидно, когда смотришь на график треугольника. Еще более примечательно в этой формуле то, что если мы продолжим с ее помощью разбивать любую точку (i, j) на сумму двух других точек, то в итоге неизбежно получим базовый кейс — 1. Треугольник Паскаля начинается с единиц, и из их сумм строится весь сложный паттерн.

Как же нам это реализовать?

Для начала давайте найдем набор правил, чтобы определять, когда выполняется базовый кейс, при котором значение ячейки равняется 1. Обратите внимание, что 1-цы появляются при выполнении одного из двух условий: когда располагаются либо в первом столбце (j=0), либо по диагонали (i=j).

Теперь выполнить реализацию просто. Если условия для базового кейса выполнены, мы возвращаем базовое значение (1). В противном случае мы продолжаем уменьшать задачу до тех пор, пока не достигнем базового кейса, до которого, как мы определили, будет неизбежно разбит любой ввод.

Теперь рекурсия раскрылась для вас во всей красе. Здесь, с помощью всего пяти строк кода, мы, по сути, создаем саморазвивающееся дерево. При желании число строк кода можно даже уменьшить до трех. Вызывая функцию pascal дважды, мы инициируем две ветви поиска, каждая из которых также инициирует еще две, предполагая, что базовый кейс достигнут не был.

Такая эффективность рекурсии может показаться магической и даже может запутать. Давайте рассмотрим работу ее алгоритма на примере.

В соответствии с нашим рекуррентным соотношением (4, 2) разбивается на (3, 1) и (3, 2), которые являются двумя числами, стоящими над ней. Обратите внимание, что алгоритм на деле не знает, что значения этих ячеек представлены 3. Он просто учитывает их местоположение. Мы не знаем или даже не интересуемся никакими значениями, пока выполняются базовые условия. На основе базовых кейсов (1) мы можем вычислить другие не базовые точки, но для начала должны быть найдены все базовые.

Согласно нашему рекуррентному соотношению, кейсы итеративно разбиваются до тех пор, пока не достигается базовый (j = 0 или i = j). Поскольку нам известны значения этих базовых кейсов (1), мы можем заполнить и другие значения, зависимые от базового кейса.

Это, конечно же, очень, а возможно и чересчур подробное представление принципа работы рекурсивного алгоритма. В действительности ни один из этих трех шагов не нужно программировать, так как они выполняются скриптом автоматически. Все, что вам нужно, — это вызвать функцию внутри ее самой и обеспечить ее завершение в некоторых точках при достижении базового случая.

При вызове return pascal(i-1, j) + pascal(i-1, j-1) мы рассматриваем возврат не как процесс, а как число. Поскольку pascal(i-1, j) инициирует собственные процессы ветвления, а в итоге возвращает другое число (например, 3), будет правильным воспринимать его именно как число, а не как процесс, что может вызвать ненужную сложность и затруднение в понимании.

С некоторой точки зрения этот рекурсивный алгоритм можно назвать неэффективным. В конце концов ‘6′ разбивается на ‘3′, которое, с позиции значения, имеет идентичные разбивки, но при этом зачем-то вычисляется второй раз. Это стандартный случай в рекурсии, когда базовые кейсы одного кейса, будучи вычисленными ранее, вычисляются повторно. Для устранения этой проблемы мы используем мемоизацию.

Возьмите в качестве примера последовательность Фибоначчи, в которой первые два числа представлены 0 и 1, а последующие числа являются суммой двух, им предшествующих. На основе уже сформированного знания мы понимаем, что базовыми кейсами здесь будут 0 и 1, а рекуррентное соотношение будет выглядеть как v(i) = v(i-2) + v(i-1). В таком случае мы можем построить простую рекурсивную функцию для нахождения значения последовательности Фибоначчи в любом индексе, начиная с 0.

Обратите внимание, что хоть это и грамотное применение рекурсии, оно весьма неэффективно. 8 разбивается на 3 и 5, а 5, в свою очередь, разбивается на 3 и 2. Мы вычисляем все с самого начала и строим завершенное дерево поиска со множеством повторений.

С помощью мемоизации мы можем решить эту проблему, создав кэш. Это можно реализовать, используя словарь и сохраняя значения, заданные ранее. Например, когда индекс 6 (значение 8) разбивается на индекс 4 и индекс 5 (значения 3 и 5), мы можем сохранить значение индекса 4 в кэше. При вычислении индекса 5 как индекса 3 плюс индекс 4 мы можем извлечь индекс 4 из кэша вместо того, чтобы повторно вычислять его, создавая еще одно обширное дерево, ведущее к базовым кейсам.

Чтобы включить в нашу функцию мемоизацию, мы добавим две функциональности: во-первых, если текущий индекс был сохранен в кэше, мы будем просто возвращать его сохраненное значение; во-вторых, прежде чем продолжать уменьшать значение, мы будем добавлять это значение к кэшу,чтобы ускорить дальнейшие операции. Обратите внимание, что кэш должен быть либо глобальной переменной, либо такой, которую можно извлечь и изменить независимо от области вызова команды.

После добавления мемоизации наша рекурсивная функция стала намного быстрее и мощнее.

Рекурсия занимает центральное место среди многих наибыстрейших алгоритмов сортировки. Цель этих алгоритмов — получить список чисел и вернуть их в порядке от меньшего к большему. Поскольку очень много приложений опираются на быструю сортировку, весьма важно найти такой, который сможет сортировать списки максимально быстро. При этом некоторые из самых быстрых алгоритмов используют рекурсивный подход, называемый “разделяй и властвуй”.

В стратегии “разделяй и властвуй” изначальная задача рекурсивно разбивается на несколько подзадач. После того, как каждая подзадача достигает размера единицы (аналог базового кейса), выявляются их подрешения, которые вновь рекурсивно совмещаются для формирования окончательного решения.

Рассмотрите, к примеру, QuickSort — один из наиболее быстрых алгоритмов сортировки, который при грамотной реализации может выполняться в 2–3 раза быстрее своих соперников и предшественников.

QuickSort начинает выполнение с выбора “опоры”. В простейших реализациях и для наших целей такую опору можно выбрать произвольно. Однако в более специализированных реализациях к ее выбору уже стоит подходить осторожно.

Все элементы со значениями меньше опоры переносятся левее нее, а все, чьи значения больше — правее. Выполнить это можно, пройдя по каждому элементу и переместив те, что меньше опоры, в один список, а те, что больше нее — в другой. Заметьте, что эта операция справляется с задачей только частично.

Процесс сортировки списка на основе его опорной точки называется разделением, так как опора разделяет этот список на два раздела, иначе говоря, на две стороны. Каждый их этих разделов вызывает очередную итерацию разделения сам на себя и так продолжается до тех пор, пока раздел не достигнет базового кейса (1 единицы, просто одного числа)

После достаточного числа рекурсивных вызовов исходный список будет разделен до точки, когда эти вызовы продолжить уже невозможно. В этой точке композиция подрешений выполняется простым составлением их в горизонтальном порядке. Результат такой композиции — отсортированный список.

Обратите внимание, что QuickSort следует многим из перечисленных основ рекурсии, рассмотренных нами ранее, только на более высоком уровне. Рекуррентное соотношение является разделением компонента, а базовый кейс — это разделение размера 1. Начиная с оригинального списка, те же процессы (выбор опоры и разделение) вызываются рекурсивно до тех пор, пока результат не будет состоять только из базовых кейсов.

источники:

http://baguzin.ru/wp/excel-ispolzovanie-tsiklicheskih-ssylok-d/

http://nuancesprog.ru/p/9668/

Понравилась статья? Поделить с друзьями:
  • Рекурсивное вычисление в excel это
  • Рекламный документ в word
  • Рекуррентная формула в excel это
  • Рекламные документы в word
  • Рекламационный акт образец в формате word скачать бесплатно