Консультация № 175609
25.12.2009, 18:16
45.00 руб.
0 22 1
Уважаемые коллеги,
Есть формула расчета. Это расчет аннуитетных платежей по ипотеке. Впрочем, понятное дело, математикам это не важно. Сама формула вот: http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BD%D1%83%D0%B8%D1%82%D0%B5%D1%82. Из нее мы получили формулу для расчета на языке программирования Паскаль ( тут важна одна особенность - язык, видимо, такой древний, что он был изобретен ранше, чем человечество придумало корни и степени числе - он их не понимает, поэтому все исходные данные должны быть переведены в вид с логарифмами)

result1:= 12000* (0.005*exp(ln(1+0.005)*36))/ (exp(ln(1+0.005)*36)-1); - используя эту формулу в таком виде, мы получаем результат, как в примере в википедии - результат1 равен 365. Это сделанная часть математической работы.

А теперь вопрос. Для моей программы нужна обратная формула.

<известное, скажем, 365>:= 12000*(0.005/exp(ln(1+0.005)*<неизвестное, скажем, X>))/(exp(ln(1+0.005)*<неизвестное, скажем, X>)-1);

или, другими словами,

365 = 12000*(0.005/exp(ln(1+0.005)*X))/(exp(ln(1+0.005)*X)-1);

Чему тогда будет равен X:=?

Коллеги, прошу учесть два соображения. Во-первых, с математикой - туго. Мне под сорок, а в школе я учился, соответственно, 20 лет назад. Я журналист по образованию, вообще-то. А во-вторых, я не планирую на чужих формулах сдать экзамен или, тем более, въехать в рай. Просто хочу сделать очередной калькулятор ипотеки - кстати, как некоммерческий, бесплатный продукт.

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

http://www.inmast-realty.ru/calculator?action=calculator&show=LoanTerm&popup=yes&cmsrealty=user

Обсуждение

давно
Профессор
230118
3054
25.12.2009, 18:44
общий
Суховерхов А.Б.:
Удобные формулы для расчетов процентов есть в Excel - Вы с ним не знакомы?
давно
Профессор
230118
3054
25.12.2009, 19:03
общий
Суховерхов А.Б.:
0.5% - это годовая процентная ставка или месячная?
Неизвестный
25.12.2009, 19:10
общий
Суховерхов А.Б.:
А в чем сложность то?

Имеем:

result1 = 12000 * (0.005*exp(ln(1+0.005)*Х)) / (exp(ln(1+0.005)*Х) - 1)

Отсюда:

exp(ln(1+0.005)*Х) = result1 / (result1 - 12000*0.005)

или:

(1+0.005)Х = result1 / (result1 - 12000*0.005)

Тогда:

Х = log1+0.005 { result1 / (result1 - 12000*0.005) } =

= [ ln { result1 / (result1 - 12000*0.005) } ] / [ ln (1 + 0.005) ]

давно
Профессор
230118
3054
25.12.2009, 19:28
общий
25.12.2009, 22:53
это ответ
Здравствуйте, Суховерхов А.Б..

Проще всего такие подсчеты вести в программе Excel. Там есть целая группа финансовых функций. Но можно получить результат математически. Прежде всего откажемся от конкретных цифр.
Вот формула посчета помесячной выплаты
K=S*i*(1+i)n/((1+i)n-1)
где i — процентная ставка за период n, n — количество периодов на протяжении всего действия аннуитета, S- величина кредита.
В данном случае K=365, i=0.0005, S=12000
Теперь мы хотим, зная К и i, вычислить n.
(1+i)n обозначим как B - для краткости.
Получаем B/(B-1)=K/(i*S)=A
K/(i*S) тоже обозначаем как A, можем его сейчас вычислить как 365/(12000*0.005)=365/60=6,0833
B=AB-A
AB-B=A, B выносим за скобки B*(A-1)=A, B=A/(A-1)
B=A/(A-1)=K/(i*S)/(K/(i*S)-1)=K/(K-i*S)=1,196721311
Но B=(1+i)n
Тут в самом деле пора применить логарифмы, получим
ln B=n ln(1+i)
n=lnB/ln(1+i) =0,179585577/0,004987542=36,00683354
Если округлить, получим 37 месяцев или 3 года 1 месяц.
Фомула целиком n= ln(K/(K-i*S))/ln(1+i)
5
Спасибо огромное. И отдельное спасибо будет еще когда вставлю формулу в свою програмку. В Exel эта функция, конечно, есть. Но вот я занялся тем, что в учебных, да и не только учебных целях, делаю программу для того, чтобы можно было провести ряд финансовых вычислений на Дельфи. В общем, у меня все сошлось - уже есть расчет размеров платежей, расчет, сколько можно взять в кредит, зная, сколько готовы платить и в течение какого периода и т.п. Оставалось только сделать последнюю вкладку в программу, которая бы считала, за сколько времени удастся погасить кредит. У меня был выбор: или дальше изучать программирование в Delphi, или остановиться на этом и садиться за учебники по математике. Вопрос-то, может быть, и не сложный - да вот школу я закончил слишком давно - раньше бы посчитал. А оно и надо? Может быть, не так уж и плохо, когда каждый делает часть работы в соответствии с тем, что он знает?<br><br>Это мой последний комментарий к тому, что не только ленивые ученики и студенты здесь задают вопросы - еще и те, кто хочет поделиться объемом работ по специальности. <br><br>Понятно, как работают преподаватели. Понятен механизм работы программистов. Но Вы, AShotn, сегодня сделали очень важное: не знаю, как часто это бывает в жизни - я лично встретил такую ситуацию впервые - но Вы консультировали меня как абстрактный математик! Мой респект! :-)<br><br>
давно
Профессор
230118
3054
25.12.2009, 19:33
общий
Суховерхов А.Б.:
Прошу прощения, n= ln(K/(K-i*S))/ln(1+i)
давно
Профессор
230118
3054
25.12.2009, 19:53
общий
Модераторы:
Прошу поменять числ и знамен в ln(1+i)/ lnB и в последней формуле.
давно
Мастер-Эксперт
680
2811
25.12.2009, 21:02
общий
Суховерхов А.Б.:
Так Вам именно на Паскале надо? Какой именно Паскаль Вы используете?
давно
Мастер-Эксперт
680
2811
25.12.2009, 21:22
общий
Ashotn:
Ну Вы и написали.
B=A/A-1
В таком случае и без остальных выкладок B=0.

Пожалуйста, перепишите весь Ваш ответ, чтобы в нем не было нелепостей и ошибок, выложите здесь в мини-форуме. И не торопитесь, когда отвечаете - это платный вопрос, к ним предъявляются особые требования.
Кроме того, степенная функция, например, в Турбо Паскале, действительно отсутствует (только 2 степень), поэтому там есть три способа ее вычисления, о некоторых спрашивающий может не знать. Можете заодно уточнить для него и этот момент.
давно
Профессор
230118
3054
25.12.2009, 21:34
общий
Вот формула посчета помесячной выплаты
K=S*i*(1+i)n/((1+i)n-1)
где i — процентная ставка за период n, n — количество периодов на протяжении всего действия аннуитета, S- величина кредита.
В данном случае K=365, i=0.0005, S=12000
Теперь мы хотим, зная К и i, вычислить n.
(1+i)n обозначим как B - для краткости.
Получаем B/(B-1)=K/(i*S)=A
K/(i*S) тоже обозначаем как A, можем его сейчас вычислить как 365/(12000*0.005)=365/60=6,0833
B=AB-A
B(A-1)=A
B=A/(A-1)=K/(i*S)/(K/(i*S)-1)=K/(K-i*S)=1,196721311
Но B=(1+i)n
Тут в самом деле пора применить логарифмы, получим
ln B=n ln(1+i)
n=lnB/ln(1+i) =0,179585577/0,004987542=36,00683354
Если округлить, получим 37 месяцев или 3 года 1 месяц.
Фомула целиком n= ln(K/(K-i*S))/ln(1+i)
давно
Мастер-Эксперт
680
2811
25.12.2009, 22:07
общий
Ashotn:
А это:
B=AB-A
Значит, B=A(B-1)
Ну или A=B/(B-1)

Но откуда взялось B(A-1)=A? и B=A/(A-1)?

У Вас по вот этим двум строкам:
B=AB-A
B(A-1)=A
получилось B=A
давно
Профессор
230118
3054
25.12.2009, 22:18
общий
Сучкова Татьяна Михайловна:
У меня все правильно.
давно
Мастер-Эксперт
680
2811
25.12.2009, 22:20
общий
Ashotn:
Не нужно голословных утверждений. Нужен вывод, к которому ни у кого не будет претензий. Пока его нет.
давно
Профессор
230118
3054
25.12.2009, 22:21
общий
Сучкова Татьяна Михайловна:
A=B/(B-1) - это формула, из которой исходим
умножение дает B=AB-A
потом простая группировка AB-B=A, B выносим за скобки B*(A-1)=A, B=A/(A-1)
давно
Профессор
230118
3054
25.12.2009, 22:25
общий
Сучкова Татьяна Михайловна:
У меня все правильно.
давно
Мастер-Эксперт
680
2811
25.12.2009, 22:38
общий
Ashotn:
Ага, дошло. Спасибо. Давайте эту пару строк тоже запишем в ответ?

давно
Профессор
230118
3054
25.12.2009, 22:45
общий
Сучкова Татьяна Михайловна:
Мне казалось, что переход от одной строчки к другой достаточно очевиден. Но раз он неспециалист, надо написать более подробно.
Это означает, что функция y=x/(1-x) обратна сама себе. При интегрировании в Демидовиче этим пользуются.
давно
Мастер-Эксперт
680
2811
25.12.2009, 23:02
общий
Ashotn:
Абсолютно верно. Нам, нематиматикам, нужно все разжевывать ;)
Неизвестный
26.12.2009, 07:17
общий
Коллеги, ну разве так можно? Я абсолютно доволен результатом. В общем-то, мне совершенно нет необходимости в особо глубоких разъяснениях. Всего-то надо было - одну формулу, которую я просто вставил в программу:-) А вы уж между собой дискуссию такую развернули:-) Попросите Олега сделать Вам отдельный форум для внутренних разборок между консультантами - чтобы не нарушать корпоративную этику:-)

Спасибо большое, все замечательно. У меня все заработало. Результаты я проверил по еще одному калькулятору ипотеки- все сходится. Так что все отлично, работа и Вами, и мною уже выполнена.

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

Успехов! Еще раз спасибо
Неизвестный
26.12.2009, 10:58
общий
Суховерхов А.Б.:
В Делфи функция x в степени y - Power(const x, y: Extended) объявлена в модуле Math. Хотя уже наверное поздно об этом говорить
давно
Мастер-Эксперт
680
2811
26.12.2009, 17:55
общий
Суховерхов А.Б.:
Ну что Вы. Какие разборки. Для разборок форум у нас есть ;)
Добиваясь высокого качества ответов, мы исходим из того, что ответ дается не только одному спрашивающему - ответ идет в рассылку, и его прочтет (и еще несколько лет спустя читать будет) большое количество людей.
Поэтому иметь блестящий по всем показателям ответ - прежде всего в интересах самого отвечающего эксперта. Это его визитка на годы вперед (мини-форум в рассылку не идет - он как раз предназначен для обсуждения вопроса и ответов). И, конечно же, это в интересах портала.
Кроме того, отсутствие ошибок и опечаток - это требуемый минимум к ответу на платный вопрос, исправление шероховатостей после ухода в рассылку - огромный минус эксперту.
Так что мы все правильно делаем, а Ashot - молодец.

Спасибо и Вам - за внимание. Приходите к нам еще!
Неизвестный
27.12.2009, 19:43
общий
Ashotn:
Ashotn, Вы, конечно, мне полностью ответили, я получил ту формулу, которая мне нужна. Я, конечно, должен расплатиться за ответ. Тут есть одна предыстория. Чтобы задать платный вопрос, я перевел некую сумму через мобильник. Эта сумма оказалась примерно в пять раз больше объявленной, и то, что оказалось начислено, было списано в момент подачи вопроса:-) Я согласен отблагодарить Вас за старание, согласно правилам портала, но, как бы, делать это таким дурацким способом, когда что бы я ни заплатил, это достается не Вам, и даже не Олегу Калашникову, которого я лично знаю, а непонятно кому за денежные переводы, в общем-то, глупо. Поэтому подождите, плиз, пару дней, я свяжусь с Олегом и организую перечисление как-нибудь по-другому - я не думаю, что будет с этим какая-нибудь проблема, так как у меня с ним свои расчеты по хостингу. В общем, извините меня за задержку в пару дней. Я этот вопрос обещаю решить.
давно
Профессор
230118
3054
29.12.2009, 17:36
общий
Суховерхов А.Б.:
Спасибо большое! Тем более это был брак, ответ пришлось исправлять. Больше бы таких посетителей.
Форма ответа