《第五讲非线性方程模型实验购房贷款的利率》由会员分享,可在线阅读,更多相关《第五讲非线性方程模型实验购房贷款的利率(37页珍藏版)》请在金锄头文库上搜索。
1、第五讲 非线性方程模型实验 购房贷款的利率 实验目的 实验内容 2、学会用Matlab代数方程的数值解. 1、学会用Matlab求代数方程的解析解. 1、求代数方程的解析解. 4、实验作业. 2、求代数方程的数值解. n问题:如下是一则房产广告。不难算出 ,你向银行共借了25.2万,30年内共要还 51.696万,约为当初借款的两倍,这个案 例中贷款年利率是多少? 建筑面 积 总价30%首付70%按揭月还款 86.98m236万10.8万30年1436元 分析 n有人可能会这样算 年利率=(51.696-25.2)/30/25.2=3.5% 错的,因为你并不是等到30年后一次性 还款。 设xk
2、第k个月的欠款数;a月还款数 ;r为月利率,我们得到迭代关系式 xk+1=(1+r)xk-a (2.1) 那么 xk=(1+r)xk-1-a=(1+r)2xk-2-(1+r)a-a= = =(1+r)kx0-a(1+r)k-1/r n根据a=0.1436,x0=25.2,x360=0得到 n25.2(1+r)360-0.1436(1+r)360-1/r=0 (2.2) n关于月利率r的高次代数方程。 n年利率R=12r. 非线性方程(组)简介 若方程是未知量x的多项式,称为高次代数方程 ;若方程包含x的超越函数,称为超越方程。 一元非线性方程的一般形式为 f(x)=0 (2.3) 若对于数a有
3、f(a)=0,则称 a 为方程(2.3)的解或 根,也称为函数f(x)的零点。方程的根可能是实数 也可能是复数。相应地称为实根和复根。如果对于 数a有f(a)=0,f (a)0,则a称为单根,如果有k1,f(a)=f (a)=f(k-1)(a)=0 但f(k)(a)0,称为k重根,对于高次 代数方程,其根的个数与其次数相同(包括重数) ,至于超越方程,其界可能是一个或几个甚至无穷 多,也可能无解。 常见的求解问题有如下两重要求:一种是要求定出在给 定范围内的某个解,而解的粗略位置事先从问题的物理背 景或应用(作图等)其他方法得知;另一种是定出方程的 全部解,或者给定区域内的所有解,而解的个数未
4、知。除 少数特殊的方程可以利用公式直接求解(如4次以下代数 方程),一般都没有解析求解方法,只能靠数值方法求得 近似解。常见的数值方法有二分法等。 n元非线性方程组的一般形式为 fi(x1,x2,xn)=0, i=1,m (2.4) 非线性方程组的解极少能用解析法求得。常用的数值方 法是Newton法、拟Newton法和最优化方法等。 解方程和方程组的MATLAB命 令 roots 求多项式的根 fsolve 方程(组)数值解 fzero 求一元函数实根 solve 符号方程(组)求解 1. 多项式的根 roots(p) 多项式p的所有复根。例 x3+2x2-5的根 roots(1 2 0 -
5、5) ans = -1.6209 + 1.1826i -1.6209 - 1.1826i 1.2419 2. 一元函数零点 n fzero(F,X,tol) n F为字符串表示的函数或M函数名; n x为标量时,作为迭代初值;X为向量 a,b时,返回F在a,b中的一个零点,这 时要求F在a,b两点异号;tol为精度(缺损 值1e-4). 例: y=sin(x)-0.1x fzero(sin(x)-0.1*x,6) ans = 7.0682 fzero(sin(x)-0.1*x,2,6) ans = 2.8523 注:fzero 只能求零点附近变号的根,试用fzero求解(x- 1)2=0, 看
6、看发生了什么? 3. 非线性方程组求解 fsolve 用法与fzero类似,例:解方程组 写M函数eg2_1fun.m function y=fun(x) y(1)=4*x(1)-x(2)+exp(x(1)/10-1; y(2)=-x(1)+4*x(2)+x(1)2/8; 然后用 x,y,f=fsolve(eg2_2fun,0,0) x = 0.2326 0.0565 y = 1.0e-006 * 0.0908 0.1798 f = 1 注:X返回解向量,y返回误差向量,f0则解收敛。 或直接用 x,y,f=fsolve(4*x(1)-x(2)+exp(x(1)/10-1,-x(1)+4*x(
7、2)+x(1).2/8,0,0) x = 0.2326 0.0565 y = 1.0e-006 * 0.0908 0.1798 f = 1 注意:fsolve采用最小二乘优化法,稳定性比fzero好,但fsolve 可能 陷入局部极小。试用fsolve解x2+x+1=0,看会发生什么?不要完全 相信计算机。 4.解析求解solve 例 解 ax2+bx+c=0 solve(a*x2+b*x+c,x) ans = 1/2/a*(-b+(b2-4*a*c)(1/2) 1/2/a*(-b-(b2-4*a*c)(1/2) x,y=solve(4*x-y+exp(x)/10=1,-x+4*y+y2/8=
8、0,x,y) x = .23297580773115396971569236570313 y = .58138324907069742242891748561961e-1 注意所得的解与fsolve的不同。 注意:虽然solve可用于求数值解,但速度很慢,且有很大的局 限性,不提倡使用。 数值解法:图解法和迭代法 n1. 图解法 例 解方程 sin(x)=0.1x (2.5) 显然,解在-10,10内,函数y=sinx-0.1x的零点就是(2.5) 的解 , 作出y=sinx-0.1x 在-10,10范围内的图象(图2.1),可看出根的大致位置。 作图可使用如下MATLAB语句: close;
9、fplot(sin(x)-0.1*x,-10,10);grid; 可知8.5,7,3,0 附近各有一解。 (在figure窗口用matlab的zoom命令演示) 2、迭代法(牛顿法,切线法) n求f(x)=0的解,从几何上说xk+1为用f(x)在 xk处的切线代替f(x)求得的解,故也称为 切线法。当初值x0与真解足够靠近, Newton迭代法敛。单根快,重根慢。迭 代格式: 例 求如下方程的正根(要求精度=10-6) x2-3x+ex=2 解:令f(x)=x2-3x+ex-2,f(0)=-12, f(x)0,f(x)0,即f(x)单调上升,根在 0,2,先用图解法找初值。 fplot(x2-
10、3*x+exp(x)-2,0,2);grid on; 唯一正根在1附近,取x0=1,迭代格式 M脚本eg2_2.m clear,e=1e-6;format long; x1=1 x0=x1+2*2;%使while成立 while(abs(x0-x1)e) x0=x1,x1=x0-(x02-3*x0+exp(x0)-2)/(2*x0-3+exp(x0) end;format 得x1 = 1.44623868596643 贷款利率问题求解 考虑方程(2.2). 常识上,r应比当时活期存款月利率略高。用 活期存款月利率0.0198/12作为迭代初值,用fzero求解。 (使用Matlab) r=fz
11、ero(25.2*(1+x)360-(1+x)360-1)/x*0.1436,0.0198/12), R=12*r r = 0.0046 R = 0.0553 练习 n1、作出f(x)=xsin(1/x)在-0.1,0.1 内的图,可见在x=0 附近f(x)=0有无穷多个解,并设法求出它的解。 n2、(月还款额)作为房产公司的代理人,你要迅速 准确回答用户各方面的问题。现在有个客户看中了贵 公司一套建筑面积为120m2,单价5200元/m2的房子。他 计划首付30%,其余70%用20年按揭贷款(年利率 5.58%)。请你提供下列信息:房屋总价格、首付款额 、月付还款额。 补充:混沌 线性迭代要
12、么收敛于它的不动点,要 么趋于无穷大;而不收敛的非线性迭 代可能会趋于无穷大,也可能趋于一 个周期解,但也可能在一个有限区域 内杂乱无章地动弹,由确定性运动导 致的貌似随机的现象称为混沌现象。 下面就Logistic迭代研究这一现象。 1. 昆虫数量的Logistic模型 xk表示第 k代昆虫数量(1表示最大值)。 (2.7) 式反映了下一代对上一代的既依赖又竞 争的关系。当上一代很少,繁殖能力不够, 从而后代很少;当上一代很多,会吃掉很多 食物,后代难以存活,从而后代很少。 a为 资源系数,0 a 4保证了 xk 在区间(0,1)上 封闭。 2. 平衡与稳定 称 a为映射g(x)的平衡解或不
13、动点,若g(x)=ax(1-x). 解方程 x=ax(1-x) 得(2.7)式两个不动点0和1-1/a. 若初始值恰好为不动点 ,迭代式(2.7)的只永不改变。如果对于不动点x0附近的 初始值,(2.7)收敛与此不动点,我们称这一不动点是 稳定的。 当0x1,在0,1内只有一个不动点0,且由 |g(0)|=a1, 不动点0不再稳定,而由|g(1-1/a)|=|2-a|1可 知1a3,出现两个周期2解,可以证 明3aa ,(2.4)是的迭代序列几乎 杂乱无章,即所谓混沌。 下列例子可形象地显示上述现象。 例 (分叉图)对 a在0,4的不同值,画出 Logistic迭代的极限形态图。 如下M文件对于每一个a值,随机产生一个初 值。文件显示前20步迭代的变化。最后用第 180200步迭代值表示极限形态,最后结果见图2-3 。 %M脚本2_3.m clear;close;a=0:0.01:4; M=length(a);K=200;X=zeros(K,M);x(1,:)=rand(1,M); for m=1:M,for k=1:K-1 x(k+1,m)=a(m)*x(k,m)*(1-x(k,m); end,end for k=1:20, plot(a,x(k,:),.);title(k=,int2str(k);pause(2); end; plot(a,x(180:K,: