Финансовые функции и рекурсия
Решение. Пусть p - процентная ставка и x=1+p/100. Считая, что современная стоимость всех внесенных в банк платежей должна равняться величине кредита, получаем:
Но t0<t1<…<tk-1 и для нахождения величины x, а значит и p, имеем уравнение:
Нам
требуется определить положительный корень многочлена f(x), стоящего в левой части последнего соотношения. Из экономических соображений вытекает, что такой корень должен существовать и быть единственным. Впрочем, с учетом того, что S>0 и an>0 (n=0. . k-1), чисто формальными рассуждениями можно установить даже более сильное утверждение. Многочлен f(x) имеет единственный неотрицательный корень x0. Модули остальных его корней не превосходят x0. Доказательство этого факта вытекает из применения теоремы Фробениуса-Перона [8, c.263; 9, стр.319, 340] к сопровождающей матрице f(x).
Схема дальнейшей нашей работы будет такой. Пусть векторы a и t - заданы соотношениями (10). Напишем рекурсивную программу-функцию vecto() формирования компонентов вектора m коэффициентами f(x), начиная от свободного члена a0 и далее по возрастающим степеням x. Затем в головной программе percent(S,a,t) для нахождения процентной ставки p воспользуемся композицией серии встроенных в Mathcad функций:
polyroots(m) – вычисление всех корней f(x);
max(v) - нахождение числа a+i×b, где a и b наибольшие соответственно из действительных частей и коэффициентов при мнимых частях компонентов v;
Re(z) - вычисление действительной части комплексного числа z.
(28)
(29)
Несколько слов об аргументах функции vecto(a,t,n,q,m). Назначение величин a, t и n ясно. Вспомогательный параметр q служит счетчиком количества сформированных в матрице m коэффициентов f(x): q=0. . tn.
Нерекурсивный вариант программ (28) -(29) может быть записан так:
(30)
Контрольные примеры.
Задача о величине процентной ставки 2
Инвестор вложил в некоторый проект pv денежных единиц (д. е) и в течение последующих nper периодов это должно приносить ему платежи по pmt д. е. Пусть платежи производятся в конце (type=1) или в начале (type=0) каждого периода. Под какой процент вложены инвестором деньги?
Решение. Данная задача может быть решена с помощью встроенной в Excel функции rate(nper,per,pv,type). Строя рекурсивные аналоги rate(), будем делать это отдельно для случаев type=0 и type=1.
A. type=0. Современная стоимость всех платежей должна быть равна pv:
(31)
Преобразуем (31) к виду
(32)
На последнее соотношение можно смотреть как на декомпозицию исходной задачи с прежними платежами и процентной ставкой, nper-1 периодом и инвестициями в pv×(1+rate/100) -pmt денежных единиц. Правда, инвестиции здесь содержат неизвестный параметр rate. Далее ясно, что при nper=1
Если считать последнее из этих соотношений базой индукции, то соответствующая программа-функция могла бы выглядеть так:
(33)
где за x обозначена величина rate(nper,pmt,pv). Мы получили, что в процессе рекурсивных вызовов функция обращается к самой себе с тем же самым набором значений параметров. Ясно, что вычисления по ней не будут иметь останова. Точнее, останов будет аварийным по переполнению стека. С подобной ситуацией мы уже сталкивались при решении задачи 10. И там для выхода из создавшейся ситуации был использован прием введения дополнительного параметра. Поступим также и здесь, заменив (33) функцией:
(34)
Теперь будем искать решения x=x* уравнения
(35)
Делать это можно, например, методом дихотомии с помощью рекурсивной функции dicho() (см. (17)).
Замечание. Обратим внимание на следующее обстоятельство. При решении уравнения g(nper,pmt,pv,x) =0 с вычислениями по (34) могут появиться “посторонние корни” - значения x* º rate1(nper,pmt,pv,x*), но не являющиеся решениями исходной задачи. Поэтому все полученные корни (35) обязаны подвергнуться проверке по данным задачи, например, на выполнимость условия (31). Ограничимся рассмотрением одного примера.
Контрольный пример.
Полученное значение x=7.35616 не является решением задачи, ибо pv=320.88289¹b.
Получили решение задачи, ибо pv=320.88289=b.
B. type=1. К началу второго периода задолженность инвестору с одной стороны равна (pv-pmt) ×(1+rate/100), а с другой стороны - должна быть погашена вторым платежом pmt. Таким образом
(36)
Далее,
(37)
Последние соотношения в (36) и (37) задают соответственно базу и декомпозицию, на основе которых после введения дополнительного параметра x и построена рекурсивная функция rate2():
Все дальнейшие действия должны быть такими же, как и в случае type=0.
Задача о количестве периодов для расчета заемщика с банком
Клиент банка получил заем в S денежных единиц при ставке p процентов. В конце каждого периода заемщик должен возвращать банку по W единиц, за исключением может быть последнего периода, когда его задолженность Z окажется меньшей W. В этом случае необходимо возвратить Z единиц. Подсчитать количество периодов, необходимых для расчета заемщика с банком.
Решение. Организуем рекурсию по величине долга в конце каждого периода. Если R=S×(1+p/100) -W£0, то полностью расплатиться удастся за один период, и условие R£0 можно взять в качестве базы рекурсии. Нетрудно понять, что при R=S долг всегда будет одним и тем же, а при R>S он будет возрастать. Таким образом, при R³S рассчитаться с долгом вообще не удастся. Пусть R<S. Декомпозицию проведем, исходя из такого утверждения. Если с долгом величиной S можно рассчитаться за k периодов, то с долгом величиной R удастся рассчитаться за k-1 период. Эти соображения и легли в основу формирования функции number(S,p,W):
Другие рефераты на тему «Экономико-математическое моделирование»:
Поиск рефератов
Последние рефераты раздела
- Выборочные исследования в эконометрике
- Временные характеристики и функция времени. Графическое представление частотных характеристик
- Автоматизированный априорный анализ статистической совокупности в среде MS Excel
- Биматричные игры. Поиск равновесных ситуаций
- Анализ рядов распределения
- Анализ состояния финансовых рынков на основе методов нелинейной динамики
- Безработица - основные определения и измерение. Потоки, запасы, утечки, инъекции в модели