A explicação do script a seguir está no artigo Como Calcular a Redução de Prazo de Financiamento na Tabela Price Após Amortização Extra
options(digits=10)
PV=120000.00 #valor do emprestimo
i=(1.07)^(1/12)-1 #convertendo taxa anual para mensal
n=120 #tempo em meses
npa=6 #amortizacao extra a partir da 6a parcela
Vamort=20000.00 #Valor da amortizacao extra
Juros=c(rep(0,n)) #inicializacao do vetor de juros
Amort=c(rep(0,n)) #inicializacao do vetor de amortizacao
Saldo=c(rep(0,n)) #inicializacao do vetor do saldo devedor
#calculo do PMT
PMT=round(PV*(1+i)^n*i/((1+i)^n-1),2)
PMT
Juros[1]=PV*i
Amort[1]=PMT-Juros[1]
Saldo[1]=PV-Amort[1]
for (j in 2:n){
Juros[j]=i*Saldo[j-1]
Amort[j]=PMT-Juros[j]
Saldo[j]=Saldo[j-1]-Amort[j]
}
Price=cbind(Juros,Amort,Saldo)
round(Price,2)
#amortizacao extra apos o pagamento da npa parcela
PV=Saldo[npa-1]-Vamort #saldo devedor referente a (npa-1)a parcela
R=PMT/PV
n1=ceiling(log(R/(R-i))/log(1+i))
n1
#proxima prestacao apos amortizacao
PMT=round(PV*(1+i)^n1*i/((1+i)^n1-1),2)
print(c(PV,PMT))
j1=n-n1+1
j1
#zera os vetores entre npa e (j1-1)
for (j in npa:(j1-1)){
Juros[j]=0
Amort[j]=0
Saldo[j]=0
}
Juros[j1]=PV*i
Amort[j1]=PMT-Juros[j1]
Saldo[j1]=PV-Amort[j1]
for (j in (j1+1):n){
Juros[j]=i*Saldo[j-1]
Amort[j]=PMT-Juros[j]
Saldo[j]=Saldo[j-1]-Amort[j]
}
Price=cbind(Juros,Amort,Saldo)
round((Price),2)