求解一个未知数的方程,作为函数给出

Solving an equation of one unknown, given as a function

我有一项家庭作业,但我似乎不知道该怎么做。除了 r,我什么都给了。我需要使用这个公式,因为它已保存为上一个练习中的函数。函数为:

function t = annuitet( g , T , G , r , n )
%Et annuitetslån
%g  termingebyr på kr for hvert terminforfall
%T  annuitetslån på kr
%G  etablerings gebyr
%r  årlig rente
%n  antall terminer (=antall år ganger 12)

t = g + ((T+G)*((r/12)/100))/(1-(1+(r/12)/100)^(-n*12));

end

不要介意它是挪威语。

我得到的是:

T = 2000000
n = 20
G = 3000
g = 50
t = 9500

我知道 r 必须是 1.26%,但我终其一生都想不出如何操纵它来制作一个可以让它工作的脚本。

目前有:

T = input('Tast inn lånebeløp (kr):');
n = input('Løpetid (år):');
G = input('Etableringsgebyr (kr):');
g = input('Termingebyr (kr):');

disp('Absolutt minste terminbeløp (Rente = 0 %): 8396 kr');
t = input('Tast inn terminbeløpet du kan klare (kr):');

提前感谢任何 hints/tips :)

您正在尝试求解一个包含 1 个未知数的方程式。在数值上解决这个问题的方法是为残差定义一个方程(即 "how bad is my error given some guess for r"),然后尝试最小化所述残差。

一种方法是使用 fzero。另一种方法是使用一些精细网格(例如 0.001:0.001:100)猜测 r,然后查看哪个 r 给你的残差最小。另一种方法是做前者,然后绘制它("graphical solution" 之类的)。

由于这是家庭作业,我将解决方案的其余部分作为 "hidden" 文本。我鼓励您阅读文档并尝试自己弄清楚,然后当您成功时,将其与我的答案进行比较:)

祝你好运!

r_sol = fzero(@(r)t-annuitet( g , T , G , r , n ), 1000);
-> r_sol = 1.264530947561246