清华大学数学实验报告4————————————————————————————————作者: ————————————————————————————————日期:ﻩ电13 苗键强2011010645一、实验目的1.掌握用 MATLAB 软件求解非线性方程和方程组的基本用法, 并对结果作初步分析;2.练习用非线性方程和方程组建立实际问题的模型并进行求解。
二、实验内容题目1【问题描述】(Q1)小张夫妇以按揭方式贷款买了1套价值20万元的房子,首付了5万元,每月还款1000元,15年还清。
问贷款利率是多少?(Q2)某人欲贷款50 万元购房,他咨询了两家银行,第一家银行开出的条件是每月还4500元,15 年还清;第二家银行开出的条件是每年还45000 元,20年还清。
从利率方面看,哪家银行较优惠(简单假设:年利率=月利率×12)?【分析与解】假设初始贷款金额为x0,贷款利率为p,每月还款金额为x,第i 个月还完当月贷款后所欠银行的金额为x i,(i=1,2,3,......,n)。
由题意可知:x1=x0(1+p)−xx2=x0(1+p)2−x(1+p)−xx3=x0(1+p)3−x(1+p)2−x(1+p)−x……x n=x0(1+p)n−x(1+p)n−1−⋯−x(1+p)−x=x0(1+p)n−x (1+p)n−1p=0因而有:x0(1+p)n=x (1+p)n−1p (1)则可以根据上述方程描述的函数关系求解相应的变量。
(Q1)根据公式(1),可以得到以下方程:150p(1+p)180−(1+p)180+1=0设 f(p)=150p(1+p)180−(1+p)180+1,通过计算机程序绘制f(p)的图像以判断解p的大致区间,在Matlab中编程如下:fori = 1:25t = 0.0001*i;p(i) = t;f(i) =150*t*(1+t).^180-(1+t).^180+1;end;plot(p,f),hold on,grid on;运行以上代码得到如下图像:f(p)~p关系曲线图通过观察上图可知p∈[0.002,0.0022]。
Solution1:对于p∈[0.002,0.0022],采用二分法求解,在Matla b中编程如下:clear;clc;x0=150000;n =180;x = 1000;p0 = 0.002;p1=0.0022;while (abs(p1-p0)>1e-8)f0 = x0*(1+p0).^n+x*(1-(1+p0).^n)/p0;f1= x0*(1+p1).^n+x*(1-(1+p1).^n)/p1;p2=(p0+p1)/2;f2 = x0*(1+p2).^n+x*(1-(1+p2).^n)/p2;if (f0*f2>0 && f1*f2<0)p0= p2;elsep1 = p2;end;end;p0结果得到p0=0.078125=0.2081%.所以贷款利率是0.2081%。
Solution2:对于p∈[0.002,0.0022],采用牛顿法求解,为观测p{k}是否收敛,在Matlab中编程如下:clearclcn = 5;fori= 1:np(i) = 0.0001*(i+18);t =p(i);f(i) = t-(150*t*(1+t).^180-(1+t).^180+1)/(27000*t*(1+t).^179+150*(1+t).^180-180*(1+t).^179);g(i) = t;end;plot(p,f,p,g),hold on,grid on;运行以上代码得到如下图像:收由图像可知蓝色曲线在两线交点处斜率绝对值小于1,故p{k}敛。
取初始值p=0.0019,采用牛顿法求解,在Matlab中编程如下: p= 0.0019;for i=1:100a = p-(150*p*(1+p).^180-(1+p).^180+1)/(27000*p*(1+p).^179+150*(1+p).^180-180*(1+p).^179);p=a;endp结果得到p0=0.945915=0.2081%.所以贷款利率是0.2081%。
Solution3:采用fzero求解,在Matlab中编程如下:p= fzero(inline('150*x*(1+x).^180+1-(1+x).^180'),[0.00200,0.00225]);结果得到p0=0.945920=0.2081%.所以贷款利率是0.2081%。
【结论】贷款利率是0.2081%。
(Q2)根据公式(1),对于第一家银行提供的条件可以得到关于月利率p1的方程:1000p1(1+p1)180−9(1+p1)180+9=0对于第二家银行提供的条件可以得到关于年利率p2的方程:100p2(1+p2)20−9(1+p2)20+9=0设 f(p1)=1000p1(1+p1)180−9(1+p1)180+9,f(p2)=100p2(1+p2)20−9(1+p2)20+9。
通过计算机程序绘制f(p1)和f(p2)的图像以判断解p1和p2的大致区间,在Matlab中编程如下:clearclcfor i =1:100p(i) = 0.0001*i;t = p(i);f1(i) =1000*t*(1+t).^180-9*(1+t).^180+9;end;plot(p,f1),hold on,grid on;for i = 1:1000p(i) = 0.0001*i;t= p(i);f2(i) = 100*t*(1+t).^20-9*(1+t).^20+9;end;plot(p,f2),hold on,grid on;运行以上代码得到如下图像:f(p1)~p1关系曲线图f(p2)~p2关系曲线图通过观察以上图像可知p1∈[0.0055,0.0060], p2∈[0.060,0.065] Solution1:采用二分法求解相应的利率值,在Matlab中编程如下:clearclcp10 =0.0055;p11 = 0.0060;while(abs(p10-p11)>1e-8)f0 = 1000*p10*(1+p10).^180-9*(1+p10).^180+9;f1 = 1000*p11*(1+p11).^180-9*(1+p11).^180+9;p22=(p10+p11)/2;f2 =1000*p22*(1+p22).^180-9*(1+p22).^180+9;if (f0*f2>0 && f1*f2<0)p10 = p22;elsep11 = p22;end;end;p10clearclcp20=0.060;p21= 0.065;while (abs(p20-p21)>1e-8)f0= 100*p20*(1+p20).^20-9*(1+p20).^20+9;f1 = 100*p21*(1+p21).^20-9*(1+p21).^20+9;p22 = (p20+p21)/2;f2=100*p22*(1+p22).^20-9*(1+p22).^20+9;if (f0*f2>0 && f1*f2<0)p20 = p22;elsep21 = p22;end;end;p20结果得到p1=0.115234=0.5851%,相应的年利率为p1n=12*p1=7.021%;p2=0.77685=6.395%。
所以第一家银行的贷款年利率是7.021%,第二家银行的贷款年利率是6.395%。
Solution2:采用牛顿法求解相应的利率值,为观察p1{k}和p2{k}是否收敛,在Matlab中编程如下:clearclcn=6;fori=1:np(i)=0.0001*(i+55);t=p(i);f1(i)=t-(1000*t*(1+t).^180-9*(1+t).^180+9)/(180000*t*(1+t).^179+1000*(1+t).^180-1620*(1+t).^179);g(i)=t;end;plot(p,f1,p,g),hold on,grid on;clearclcn = 10;fori= 1:np(i) = 0.001*(i+60);t= p(i);f2(i)= t-(100*t*(1+t).^20-9* (1+t).^20+9)/(2000*t*(1+t).^19+100*(1+t).^20-180*(1+t).^19);g(i)=t;end;plot(p,f2,p,g),holdon,grid on;运行以上代码得到如下图像:由图像可知两条蓝色曲线在两线交点处斜率绝对值均小于1,故p1{k}和p2{k}均收敛。
,取初始值p=0.0056,对于p2{k},取初始值p=0.061,对于p1{k}采用牛顿法求解,在Matlab中编程如下:clearclcp =0.0056;for i = 1:100t =p;pp = t-(1000*t*(1+t).^180-9*(1+t).^180+9)/(180000*t *(1+t).^179 +1000*(1+t).^180-1620*(1+t).^179);p= pp;endpclearclcp= 0.061;for i = 1:100t = p;pp= t-(100*t*(1+t).^20-9*(1+t).^20+9)/(2000*t*(1+t).^19+100*(1+t).^20-180*(1+t).^19);p= pp;endp结果得到p1=0.284539=0.5851%,相应的年利率为p1n=12*p1=7.021%;p2=0.23863=6.395%。
所以第一家银行的贷款年利率是7.021%,第二家银行的贷款年利率是6.395%。
Solution3:采用fzero求解,在Matlab中编程如下:clearclcp1 = fzero(inline('1000*x*(1+x).^180+9-9*(1+x).^180'),[0.0056,0.0066]);p2 = fzero(inline('100*x*(1+x).^20+9-9*(1+x).^20'), [0.061,0.071]);p1p2结果得到p1=0.284532=0.5851%,相应的年利率为p1n=12*p1=7.021%;p2=0.23863=6.395%。
所以第一家银行的贷款年利率是7.021%,第二家银行的贷款年利率是6.395%。
【结论】由于第一家银行的贷款年利率是7.021%,第二家银行的贷款年利率是6.395%,所以第二家银行较优惠。