| [monthpay,annualpay,totalpay,balance]=mortgage(capital,rate,years,yinterest)
|
function [monthpay,annualpay,totalpay,balance]=mortgage(capital,rate,years,yinterest)
%MORTGAGE A small tool for mortgage calculation
% [monthpay,annualpay,totalpay,balance]=mortgage(capital,rate,years,yinterest)
%Input
% capital: the loaned capital
% rate (%): interest rate, either fixed or a vector of rates for different years
% years: the loan period
% yinterest: 1 - interest calculated annualy; 0 - interest calculated monthly
%Output
% monthpay: monthly payment with the same length as rate.
% annualpay: annual payment with the same length as rate.
% totalpay: total payment within the loan period.
% blance: a vector of balance at the end of each year.
%
%Examples:
% loan=75000; rate=7.5; years=25;
% [monthpay,annualpay,totalpay,balance]=mortgage(loan,rate,years)
% monthpay =
% 560.69
% annualpay =
% 6728.3
% totalpay =
% 16821e+005
% balance =
% 73897
% 72711
% 71436
% ......
% -0.000
%
% loan=75000; rate=[4.95+zeros(3,1);7.5+zeros(22,1)]; years=25;
% [monthpay,annualpay,totalpay,balance]=mortgage(loan,rate,years)
% monthpay =
% 441.23
% 441.23
% 441.23
% 549.54
% ......
% balance =
% 73418
% 71757
% 70014
% 68671
% ......
% -0.0000
%
% By Yi Cao at Cranfield University on 15/09/2007
%
if nargin<4
yinterest=1;
end
if isscalar(rate)
if yinterest
annualpay=capital*(1+1/((1+rate/100)^years-1))*rate/100;
monthpay=annualpay/12;
totalpay=annualpay*years;
balance=filter(1,[1 -1-rate/100],[capital;-annualpay(ones(years,1))]);
else
monthpay=capital*(1+1/((1+rate/12/100)^(years*12)-1))*rate/12/100;
annualpay=monthpay*12;
totalpay=annualpay*years;
mbalance=filter(1,[1 -1-rate/12/100],[capital;-monthpay(ones(years*12,1))]);
balance=mbalance(1:12:end);
end
balance=balance(2:end);
else
if numel(rate)~=years
error('specified rate mismatch specified years.')
end
if yinterest
balance=zeros(years,1);
annualpay=balance;
for k=1:years
annualpay(k)=capital*(1+1/((1+rate(k)/100)^(years-k+1)-1))*rate(k)/100;
capital=capital*(1+rate(k)/100)-annualpay(k);
balance(k)=capital;
end
monthpay=annualpay/12;
totalpay=sum(annualpay);
else
balance=zeros(years,1);
monthpay=balance;
for k=1:years
mrate=rate(k)/12/100;
monthpay(k)=capital*(1+1/((1+mrate)^((years-k+1)*12)-1))*mrate;
tmp=filter(1,[1 -1-mrate],[capital -monthpay(k,ones(12,1))]);
capital=tmp(end);
balance(k)=capital;
end
annualpay=monthpay*12;
totalpay=sum(annualpay);
end
end
|
|