Финансовые функции и рекурсия

(3)

Нетрудно понять, на какую посылку опирается при декомпозиции рекурсивная программа-функция waste1(sum,p,A,n), решающая ту же самую задачу о динамике вклада.

(4)

Замечание 1. Конечная формула для решения задачи 2 выглядит так:

ht=56 src="images/referats/14042/image029.png">

Выводится она следующим образом.

Одно из преимуществ “формул” waste() и waste1() в том, что они выписываются без всякого вывода и практически без затруднений.

Контрольные примеры.

Замечание 2. В связи с задачей о динамике вклада может быть поставлен и такой вопрос. Сколько лет подряд вкладчик может снимать со счета по A денежных единиц в конце каждого периода после начисления процентов, если он положил в банк сумму в S единиц при ставке p процентов. Ответ на него может дать рекурсивная функция year(S,p,A):

Здесь случай неубывания величины вклада выделен отдельно (lo³S), рекурсия организована по остаткам вклада после периодов, в которых хватило денег на очередную выплату в A единиц.

Контрольные примеры.

Задача о величине вклада после внесения (снятия) денег в конце или начале каждого периода

Вкладчик положил в банк pv денежных единиц на nper периодов при неизменной банковской ставке в rate процентов. В дальнейшем он предполагает в конце (type=0) или начале (type=1) каждого периода вносить (забирать) по pmt денежных единиц. Какой будет величина вклада через nper периодов?

Решение. Данная задача является прямым обобщением задач 1 и 2 и может быть решена с помощью встроенной в Excel функции fv(). Однако нас будут интересовать её рекурсивные аналоги. Будем считать, что знак величины pmt определяет тип операции, совершаемой вкладчиком в конце или начале каждого периода. При pmt³0 деньги вносятся на счет, а при pmt<0 деньги снимаются со счета (в Excel наоборот!). Далее, пусть знак pv определяет, имеет ли вкладчик деньги на счету или он должен банку. При pv³0 деньги на счету есть, при pv<0 имеется задолженность в |pv| денежных единиц (в Excel наоборот!).

Пусть fv(rate,nper,pmt,pv,type) - функция для решения исходной задачи. Ниже приведено два варианта (fv1(), fv2()) рекурсивной реализации fv():

Дадим пояснения к функциям fv1() и fv2(), например, при type=0. Параметризация задачи фактически осуществлена в её постановке. Базой рекурсии для обоих предложенных вариантов служит случай nper=0. Иными словами, если pv денежных единиц положить в банк и сразу же их забрать, то будет возвращена та же самая сумма. Декомпозиция для fv1() и fv2() проведена, исходя из того, что решение исходной задачи по конечному результату равносильно соответственно совокупности следующих действий. Для fv1(): “Положить на тех же условиях pv денежных единиц в банк на nper-1 период, снять всю сумму с вклада и, наконец, на тех же условиях снова положить её на один период”. Для fv2(): “Положить на тех же условиях pv денежных единиц в банк на 1 период, снять всю сумму с вклада и, наконец, на тех же условиях снова положить её на nper-1 период”. Именно это и реализовано в соответствующих программах функциях.

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

Задача о изменяющихся процентных ставках

В банк положена сумма в S денежных единиц. Пусть банк проводит начисления в процентах: в течение n0 периодов - по ставке p0, затем в течение n1 периодов - по ставке p1 и т.д. и, наконец, в течение nk-1 периодов - по ставке pk-1. Считая nj (j=0. . k-1) натуральными числами, вычислить размер вклада через n0+n1+…+nk-1 периодов.

Решение. Рассмотрим векторы длин периодов n и процентных ставок p:

n=(n0,n1,…,nk-1) T, p=(p0,p1,…,pk-1) T.

Данная задача является обобщением задачи 1 и при длине вектора n, равной единице, совпадает с ней. Пусть revise(S,p,n) - решение задачи 4. Тогда, в силу сказанного, при length(n) =1 имеем

revise(S,p,n) =invest(S,p,n),

и это соотношение может служить базой рекурсии. Декомпозицию реализуем, исходя из следующих соображений. Пусть length(n) >1 и задача 4 решена для векторов n1 и p1, полученных отбрасыванием последнего компонента соответственно у векторов n и p. Образовавшийся при этом новый размер вклада обозначим через sum. Тогда для получения решения исходной задачи с векторами n и p остается подсчитать сумму, возвращаемую при инвестировании величины sum на последние nk-1 периодов под pk-1 процентов. Иными словами, необходимо еще раз решить задачу 1, то есть вычислить значение функции invest(sum,pk-1,nk-1). Именно эти соображения и использованы при написании функции revise():

Рекурсивная функция revise1(S,p,n) построена на способе декомпозиции, вытекающем из таких соображений. Если исходную сумму S инвестировать под p0 процентов на n0 периодов, то с полученной суммой останется решить исходную задачу для векторов n и p c удаленными первыми компонентами:

Замечание. При необходимости можно было бы вывести конечную формулу для решения задачи 4. Выглядит она так:

Контрольные примеры.

Задача о изменяющихся процентных ставках и величинах снимаемых денег

Вкладчик положил в сбербанк sum денежных единиц под pk (k=0. . n-1) процентов за каждый из n последующих периодов времени. В конце каждого периода k (k=0. . n-1) после начисления pk процентов он снимает со счета Ak денежных единиц. Иными словами, допускается, вообще говоря, и изменение процентной ставки, и величины денежных единиц, снимаемых с вклада. Составить программы, отвечающие на следующие вопросы:

Имеет ли задача решение?

Если задача имеет решение, то какова величина вклада после n периодов?

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

Решение. Рассмотрим векторы процентных ставок и величин уменьшения вклада:

Страница:  1  2  3  4  5  6  7  8  9  10 


Другие рефераты на тему «Экономико-математическое моделирование»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы