




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验四 非线性方程近似解一、按揭还贷问题描述(1)小张夫妇以按揭方式贷款买了一套价值20万元的房子,首付5万元,每月还款1000元,15年还清。问贷款利率是多少?(2)某人想贷款50万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15年还清;第二家银行开出的条件是每年还45000元,20年还清。从利率方面看,哪家银行较优惠?(简单假设年利率=月利率*12)简要分析初看本题,一个简单的思路是每次测试一个利率值,以这个值为基础计算15年后所剩还款数量,通过结果判断应将利率值增大或减小,从而实现迭代。这其实是一个二重迭代的过程,之所以这样是因为不容易一眼看出本题的非线性方程。事实上,转换思路后,可以利用一个简单的方程描述整个迭代过程。这样就将二重迭代转化为了一层迭代。使得处理更加简便。方法与公式1、解题方法(1)二次迭代给定总的本金,从每一次还款中扣去这段时间中增加的利息,再将其还到本金,使本金总量逐渐减少。代码: for i = 1:time*12 less = (repay-left*interest); left = left - less;(2)方程描述虽然并不是所有本金都在还款的整个期间中产生了相应的利息,但是可以设想成这样,与此同时,还款从在相应的还款时间开始产生利息,这样可以得出,两者最终的“本息和”相等,即A(1+q)n=i=1nP(1+q)n-i其中A为总还款金额,q为了利率,P为每次还款金额。2、解方程方法(1)牛顿法xk+1=xk-f(xk)f(xk)(2)直接使用公式fzero()结果与分析1、第一问:(1)二次迭代i,q=iterate(150000,1000,15,2,0,1,100,10-6);公式表意为:总贷款量=200000-50000=150000; 每月还款100元; 还款期限15年;还款方式为按月还款;迭代区间设定为0,1;最大迭代次数为100次;精度要求为10-6;最终结果为:迭代次数:45;使用时间0.003030989435705s;利率为0.002081163889457。(2)公式A(1+q)n=i=1nP(1+q)n-i=P(1+q)n-1q由于函数中出现q在分母位置的情况,故不能将迭代区间设为0,1,为了能够更好地比较各种方法,因此,这里设置一端为1,一端尽量小。经测试,当设置值比10-15还小时,matlab自动认为其为0,故取10-15。所得结果如下:迭代次数:20使用时间不稳定,最长使用0.0066s,最短使用0.0014s。利率为0.002081163889460(3)使用自己编写的牛顿迭代公式按照书中给出的牛顿迭代公式,进行迭代。迭代次数随初值的设定而不断变化,初值的设置要求更加复杂,不能达到10-15这样小。这里仅实验了10-6的情况,事实上,此时的迭代次数已经相当大,用时也不短。具体数据如下:迭代次数:33703使用时间:1.290408747434996s利率为0.002081163888815 (4)简要小结从以上三种计算方法可以看出,各种计算方法的结果均相差不多,可见各种方法的正确性都是有保障的。与此同时不同的方法有着自己不同的特性:a.由于涉及公式的使用,第二、三种方法都出现了初值设置的问题。当然这个问题视具体情况而定,不能一概而论;b.本次实验中发现,前两种办法在给定区域较广的情况下能够较快地收敛到所求的位置,而牛顿法使用的时间反而较多。为了进一步确认,我将牛顿法的迭代初值置为1,此时共迭代395次,使用时间为0.030859880251168。可以发现仍旧较大。可见自己编写的迭代方法距matlab所用的混合方法相差较远。2、第二问 (1)月付款仍旧使用三种方法并进行比较二次迭代fzero自编牛顿法用时0.01586979988913 0.00848355965884 0.02216196240263 迭代次数47 23 170结果0.005850792582844 0.005850792582845 0.00585079258286 (2)年付款用时0.00808442389920 0.00789113683590 0.01815115453564 迭代次数442353结果0.06394877709241 0.06394877709239 0.06394877709245 从实验结果可以看出,各种方法所得的最终数据基本一致。由题目假设:年利率=月利率*12得到第一中按揭方式的年利率约为0.070209511,比第二种方法大。故第二家银行开出的条件较优惠。3、总结a.二分迭代和牛顿迭代法通常都能通过迭代收敛得到所要的结果;b.使用Matlab自带的fzero通常能够更快地得到结果,相比之下牛顿迭代法所用时间较长;程序清单1、二重迭代(1)计算剩余本金的函数function left = Return(All,repay,interest)All = 200000-50000;repay = 1000;left = All;for i = 1:15*12 less = (repay-left*interest); left = left - less;end(2)主迭代函数function i,q = iterate (All,repay,time,YearOrMonth,a,b,n,tol)interest = (a+b)/2;i=0;diff = Inf;before = Inf;while(itol) left = Return(All,repay,time,YearOrMonth,interest); if(left0) b=interest; interest = (a+interest)/2; else a=interest; interest = (b+interest)/2; end i = i+1; diff = abs(before-left); before = left;endq=interest; 2、fzero(1)函数function y = Function(x)A=500000;P=45000;n=20;y = A*(1+x)n-P*(1+x)n-1)/x;(2)调用方法tic;q,fv,ef,out = fzero(Function,1*10-15,1)time = toc;3、自编牛顿迭代法 (1)函数的导数function y = DeltaFunction(x)A=500000;P=45000;n=20;y = A*n*(1+x)(n-1)-P*(1+x)(n-2)*(n-2)*x-1)/x2;(2)迭代主方法x0 =1; n = 500000; tol = 1e-6;x = x0;i=1;diff = inf;tic;while(abs(diff)tol & itol & in) Fxk = valve(x); FDxk = Deltavalve(x); x = x - Fxk/FDxk; diff = valve(x)-Fxk; i = i+1;endtime = toc;alpha = atan(x/b);angel = alpha/pi*180;3、二分迭代法a=0.8;b=0.25;r=0.04;l0=0.5;p0=104;Gamma = 1.4;F=25;n=500;tol = 1e-6;x0 = 0;xx = l0;x = (x0+xx)/2;i=0;diff = Inf;before = Inf;tic;while(itol) deltax = valve(x); if(deltax0,xk收敛,且由图中趋势以及函数的形式可以看出,b增大后,xk将仍旧收敛,而且收敛值逐渐减小,趋近于0。(2)a=11由图可以看出,当a=11时,迭代不再收敛到一个点,而是有两个收敛的子序列,分别趋于0.794826376和0.164331679。从图中可以看出,当a=11时,对任意b,xk均收敛到两个子列中,且两个子列的极限值随着b的增加不断减小,趋于0。(3)a=15 实验结果表示,我们已经已经无法从图中准确地判断迭代是否收敛。大体上看并不收敛。至于具体情况,需要进一步分析。实验结果表示,当a=15时,对任意b,已经不存在确定收敛子列。2、观察分叉与混沌 将a设定在一个范围内变动,固定b的值。从图中可以看出,实验出现了明显的分岔与混沌的现象,通过图像以及数据结果,我们可以大体上判断分岔点的位置。改变b值继续观察。可以发现,b的更改对实验结果没有本质的影响,从坐标上看我们发现迭代值发生了变化,但是它们所构成的图像相差无几。3、计算分岔点由xk+1=a*xk*exp(-b*xk)得xk+2=a2*xk*exp(-b*xk*(1+a*exp(-b*xk)令xk+2=xk得到1=a2*exp(-b*xk*(1+a*exp(-b*xk)由稳定性有y=xk+2=1联立两个式子,进行化简,令t=b*x最终得到exp(-x(1)+1/(x(2)*(1-x(1)= 0exp(x(1)/(1-x(1)-(x(1)-1)/x(2)= 0其中x(1)= t = b*x, x(2)= a。使用fsolve方法求解,得到:x*b = 1.999999993196870a1=7.388095229933554再由y = -1,同理得到x*b=0.7016105452824621a2=12.50924139487370对于更高阶的分岔点,由于计算非常复杂,这里没有实际计算,仅从图中大致读出其值。a3=14.30a4=14.624、观察是否符合规律A=an-an-1an+1-ann=2时,A= 2.8593n=3时,A= 5.5969有向4.6692收敛的态势。5、小结 本道题应当说是这次作业中最复杂的一道,题目意思明确,但是实验过程中则需测试相当多的数据。另一方面,在计算分岔点时,由于题目所给迭代函数为超越函数,因此计算很复杂,但是这一项本身就又需要用到刚刚学习的非线性方程求解。当然,这也很好地锻炼了我们解决实际问题的能力。总体来说收获较大。程序清单1、迭代函数function y=iter(x,a,b)y=a*x*exp(-b*x);2、b为变量的迭代function chaos1(iter_fun,a,b,n)x0=1;kr=0;for bb = b(1):b(3):b(2) kr = kr+1; y(kr,1)=feval(iter_fun,x0,a,bb); for i=2:n(2) y(kr,i)=feval(iter_fun,y(kr,i-1),a,bb); endendplot(b(1):b(3):b(2),y(:,n(1)+1:n(2),k.);3、a为变量的迭代function chaos(iter_fun,a,b,n)x0=1;kr=0;for aa = a(1):a(3):a(2) kr = kr+1; y(kr,1)=feval(iter_fun,x0,aa,b); for i=2:n(2) y(kr,i)=feval(iter_fun,y(kr,i-1),aa,b); endendplot(a(1):a(3):a(2),y(:,n(1)+1:n(2),k.);4、调用脚本chaos(iter,1,17,0.02,5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钢结构防火涂料应用质量通病及防治措施
- 外卖行业疫情期间开学后的防控措施
- 校园文明行为提升管理制度及奖惩措施
- 护理文书标准更新滞后及整改措施
- 线上订购线下配送蔬菜配送服务方案及相关保证措施
- 2025年气垫输送行业投资趋势与盈利模式研究报告
- (2025年标准)家装修安全协议书
- 复课开学教师学生疫情防控执行措施
- (2025年标准)基金产品协议书
- 2025年养殖垃圾处理行业投资趋势与盈利模式研究报告
- 初中英语校本教材
- 2024年内蒙古丰镇市招聘社区工作者26人历年重点基础提升难、易点模拟试题(共500题)附带答案详解
- 生态环境执法大练兵知识考试题库(含答案)
- “案”说刑法(山东联盟)-知到答案、智慧树答案
- 课件:性传播疾病讲解
- 新能源汽车行业的营销渠道与渠道管理
- 2024年度国网基建安全(变电土建)安全准入备考试题库(附答案)
- 《HSK标准教程3》第1课
- 中国甲状腺相关眼病诊断和治疗指南2022年解读
- 石油储量与产量预测模型研究
- 《忆秦娥~ 娄山关》
评论
0/150
提交评论