您的位置:首页 > 编程语言 > MATLAB

信用卡分期手续费率与贷款利率间的相互转换

2016-10-08 16:17 239 查看

背景

近期遇到的一个真实事件:

中信银行给我打电话,说我的信用卡欠款可以分期归还,手续费折算到每月大约是0.57%。手续费需要在第一个月全额支付。比如我分期12000元,则第一个月应还:

1000+(12000×0.0057×12)=1820.8

从第二个月开始,每个月还1000

另一方面,蚂蚁花呗贷款日息是万2,也就是10000块钱每日利息2块钱,月利率大约是0.6%。

问题来了,中信银行的信用卡欠款,是分期比较划算,还是从蚂蚁花呗借款(12个月,按月等额本息还款)来还划算?

我第一感觉是手续费率较低,当时正好钱荒,所以当场就办理了分期。回头一想似乎不对,于是拿出手机打开支付宝算了算:



总利息是480.03元,而前述手续费是820.80元,比较下来等额本息要少还不少利息。

其实仔细想想就能明白,无论等额本金还是等额本息还款,用来计算利息的本金都是逐月减少,但用来计算分期手续费的本金则是始终等于借款总额,这个差异点使得分期手续费率与贷款利率之间不能直接比较。

既然不能直接比较,它们之间应如何转换?本文就这个问题做了些探讨。先说下结论,在分期手续费率不高(月费率小于1%)的情况下,通常可以直接按照2倍来估算对应的贷款利率(此时等额本金、等额本息差别不大)。此结论有助于在不同资金操作方式间进行比较。

约定

月手续费率:x

月贷款利率:y

月份数:m

总利息:P

借款总数:A

等效贷款数:A′

解释下借款总数与等效贷款数之间的关系:一般银行的手续费分为首月付清或者末月付清,而不是逐月支付

- 如果是首月付清手续费,则用户实际可用款项是借款总数减去手续费,而不是全部借款,此时相当于贷款A′=A−A×m×x

- 如果是末月付清手续费,则等效贷款数等于借款总数A′=A

基于以上讨论,引入“贷借比”k=A′A

k={1−mx1(首月付清手续费)(末月付清手续费)

推导

所谓手续费率与贷款利率的“等效关系”是基于以下条件:双方所计算出来的应付总利息相等

分期手续费率总利息:

P=A×m×x

等额本金

如果是贷款且使用等额本金方式还款,则应付利息为:

第1个月:A′y=A′ymm

第2个月:(A′−A′m)y=A′y(m−1)m



第n个月:(A′−A′(n−1)m)y=A′y(m+1−n)m



总利息:P=A′y[m+(m−1)+...+1]m=A′y(m+1)2

所以应有:

Amx=A′ym+12



y=2mxk(m+1)

等额本息

等额本息下,每月还款额是

X=A′y(1+y)m[(1+y)m−1]

推导过程不赘述,参考这里

总利息:

P=mX−A′=A′{my(1+y)m[(1+y)m−1]−1}



Amx=A′{my(1+y)m[(1+y)m−1]−1}



kmy(1+y)m−k[(1+y)m−1]−mx[(1+y)m−1]=0



kmy(1+y)m−(k+mx)(1+y)m+(k+mx)=0(1)

我数学知识忘得差不多了…以上表达式无法直观的看出符号解y=f(x),只好求助于matlab。

代码

matlab是处理数学问题和绘制函数图像首选。

等额本金

function [y] = principal(x, m, pre_pay)
%Matching principal

if pre_pay
k = 1 - x .* m;
else
k = ones(1, length(x));
end

y = 2 * m .* x ./ (k .* (m + 1));
end


等额本息

等额本息换算公式较为复杂,(1)并非标准的多项式形式,我们做个转换:

令t=1+y,则(1)转换为

km(t−1)tm−(k+mx)tm+(k+mx)=0



kmtm+1−(km+k+mx)tm+(k+mx)=0(2)

(2)是标准的多项式形式,可以用matlab的roots函数求解,需要过滤掉复数解以及t=1的解(注意到roots是求数值解,有一定误差,所以实际代码中采用了更宽松的判断条件)。

function [y] = interest(x, m, pre_pay)
%Matching interest

if pre_pay
k = 1 - x .* m;
else
k = ones(1, length(x));
end

rows = length(x);
p = zeros(rows, m + 2);
p(:, 1) = k .* m;
p(:, 2) = -(k .* m + k + x .* m);
p(:, m + 2) = k + x .* m;

y = [];
for i = 1:rows
t = roots(p(i, :));
t_rows = 1;
for j = 1:length(t)
if isreal(t(j)) && t(j) > 1 + x(i)
y(t_rows, i) = t(j) - 1;
t_rows = t_rows + 1;
end
end
end

end


结论

以分12期为例。在matlab中使用以下代码来看y=f(x)图形变化趋势

x = linspace(0, 0.04);
y1 = principal(x, 12, 1);
y2 = principal(x, 12, 0);
y3 = interest(x, 12, 1);
y4 = interest(x, 12, 0);
y5 = x .* 2;
figure;
plot(x, y1, 'r', x, y2, 'g', x, y3, 'b', x, y4, 'c', x, y5, 'k.'), grid;
xlabel('手续费率');
ylabel('等效利率');
legend('等额本金,手续费首月付清', '等额本金,手续费末月付清', '等额本息,手续费首月付清', '等额本息,手续费末月付清', '2倍手续费率', 'Location', 'northwest');




可以看到,等效的贷款利率通常远高于对应的分期手续费率。在分期手续费率较小时,等效贷款利率约2倍于手续费率。

开篇提到中信银行的分期月手续费率为0.57%(首月支付),那么对应的等额本息等效月利率是

>> interest(0.0057, 12, 1)

ans =

0.0111


即1.11%。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息