数学建模实验——贷款计算

软件:

MATLAB:MATLAB R2012a

内容

要求输入贷款总额,贷款年利率,贷款期限,还款方式(等额本息,等额本金),输出每月还款的金额(等额本金的还款金额要求从第一月到最后一月都显示),以及还款的总额,总利息。

等额本息还款模型:
每月还款:a=xr(1+r)n/((1+r)n-1)
还款总额:A=na=n xr(1+r)n/((1+r)n-1)
总利息:s=A-x

等额本金还款模型:
每月还款:x=x/n+x*(1-(k-1)/n)r k=1,2,….,n
还款总额:A=x+x
r*(n+1)/2
总利息:s=A-x

实验代码:

loan1()函数代码:

function [ ] = loan1( x,r,n )
a=x*r*(1+r)^n/((1+r)^n-1);
fid=fopen('output.txt','w+');
for k=1:n
    fprintf(fid,'第%d月需还的金额为:%.4f\n',k,a);
end
A=n*a;
fprintf(fid,'应还的总额为:%.4f\n',A);
fprintf(fid,'还款的利息为:%.4f\n',A-x);
fclose(fid);
end

在这里插入图片描述

loan2()函数代码:

function [] = loan2( x,r,n )
fid=fopen('output.txt','w+');
for k=1:n
    s=x/n+x*(1-(k-1)/n)*r;
    fprintf(fid,'第%d月需还的金额为:%.4f\n',k,s);
end
A=x+x*r*(n+1)/2;
fprintf(fid,'应还的金额为:%.4f\n',A);
fprintf(fid,'还款的利息为:%.4f\n',A-x);
fclose(fid);
end

在这里插入图片描述

opt()函数代码:

function [] = opt( flag )
while(flag~=0)
    if flag==1
        A=input('请输入贷款金额,利率,还款月数:');
        loan1(A(1),A(2),A(3))
    else 
        A=input('请输入贷款金额,利率,还款月数:');
        loan2(A(1),A(2),A(3))
    end
    flag=input('请输入标志是否结束循环(0:结束 1:等额本息 2:等额本金):');
end
end

在这里插入图片描述

输入方式:

在这里插入图片描述

输出结果

在这里插入图片描述
在这里插入图片描述

原函数下载链接:

原函数

MATLAB中,计算等额本金(也叫等额本息递减法)的提前还款涉及一些数学计算,主要涉及到剩余贷款本金、每月还款额以及提前还款后的剩余利息。以下是简单的步骤: 1. 定义初始条件:假设原始贷款金额(P),月利率(r),贷款期限(n)(按月计数),以及每月还款额(A)。 2. 确定每月偿还的本金部分:这通常是固定的,等于月还款额除以贷款期数。 3. 计算每月的利息:剩余本金乘以月利率。 4. 初始的每月还款额 = 每月应还本金 + 每月利息 5. 如果进行提前还款,需要更新剩余本金,并相应地调整接下来的还款。例如,如果提前还款了x元,则新的剩余本金 = 原始本金 - 提前还款额,然后重新计算新的每月还款额和利息。 下面是一个基本的MATLAB函数示例,用于计算等额本金还款: ```matlab function [new_remaining_principal, new_payment] = calc_prepayment(P, r, n, A, prepayment) % 剩余本金 remaining_principal = P; % 计算每月应还本金 monthly_interest_rate = r / 1200; % 将年利率转换为月利率 principal_per_month = A; for month = 1:n interest = remaining_principal * monthly_interest_rate; current_payment = principal_per_month + interest; if prepayment > 0 % 预先还款 remaining_principal = remaining_principal - prepayment; if remaining_principal <= 0 remaining_principal = 0; end prepayment = prepayment - current_payment; if prepayment <= 0 break; end else break; % 如果没有提前还款,正常结束 end % 更新每月还款额 principal_per_month = max(remaining_principal * monthly_interest_rate, remaining_principal / n); end % 返回剩余本金和新的月还款额 new_remaining_principal = remaining_principal; new_payment = principal_per_month + (prepayment == 0 ? 0 : interest); % 如果有剩余贷款,包括利息 end ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@玉面小蛟龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值