380 likes | 684 Views
实验六 方程及方程组的解. 实验 6.1 线性方程组的解. 一、求线性方程组的唯一解或特解. 二、求线性齐次方程组的通解. 三、求非齐次线性方程组的通解. 实验 6.2 非线性方程的解. 一、二分法. 二、简单迭代法. 三、牛顿迭代法. 四、应用举例. 实验 6.1 线性方程组的解. 我们将线性方程组的求解分为两类:一类是求方程组的唯一解或特解,另一类是求方程组的无穷解即通解。可通过系数矩阵的秩来判断:. 若系数矩阵的秩 r = n , 则有唯一解; 若系数矩阵的秩 r < n , 则可能有无穷解;
E N D
实验六 方程及方程组的解 实验6.1 线性方程组的解 一、求线性方程组的唯一解或特解 二、求线性齐次方程组的通解 三、求非齐次线性方程组的通解 实验6.2 非线性方程的解 一、二分法 二、简单迭代法 三、牛顿迭代法 四、应用举例
实验6.1 线性方程组的解 我们将线性方程组的求解分为两类:一类是求方程组的唯一解或特解,另一类是求方程组的无穷解即通解。可通过系数矩阵的秩来判断: 若系数矩阵的秩 r=n, 则有唯一解; 若系数矩阵的秩 r<n, 则可能有无穷解; 线性方程组的无穷解=对应齐次方程组的通解+非齐次方 程组的一个特解
的解。 例1求方程组 一、求线性方程组的唯一解或特解 若AX=b是线性方程组的矩阵形式,可以直接用矩阵除法或初等变换法求线性方程组的唯一解或特解。 解:用矩阵除法求解如下:
A=[5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5 6 0 0 0 1 5]; B=[1 0 0 0 1]'; R_A=rank(A) ↙%求秩 R_A = 5 X=A\B ↙%求解 X = 2.2662 -1.7218 1.0571 -0.5940 0.3188
也可以通过初等变换方法,用函数reff求解,rref是将一个矩阵化成行最简形。也可以通过初等变换方法,用函数reff求解,rref是将一个矩阵化成行最简形。 C=[A,B]; %C为方程组的增广矩阵 R=rref(C) ↙%将C化成行最简形 R = 1.0000 0 0 0 0 2.2662 0 1.0000 0 0 0 -1.7218 0 0 1.0000 0 0 1.0571 0 0 0 1.0000 0 -0.5940 0 0 0 0 1.0000 0.3188 则R的最后一列元素就是所求之解。
的一个特解。 例2求方程组 解:用矩阵除法求解如下: A=[1 1 -3 -1;3 -1 -3 4;1 5 -9 -8]; B=[1 4 0]'; X=A\B ↙ Warning: Rank deficient, rank = 2, tol = 8.8373e-015. X = 0 0 -0.5333 0.6000
上述做法由于系数矩阵不满秩,可能存在误差,得到的只是一个特解近似值,若用rref求解,则比较精确:上述做法由于系数矩阵不满秩,可能存在误差,得到的只是一个特解近似值,若用rref求解,则比较精确: C=[A,B]; R=rref(C) ↙ R = 1.0000 0 -1.5000 0.7500 1.2500 0 1.0000 -1.5000 -1.7500 -0.2500 0 0 0 0 0 由此得解向量X=[1.2500 -0.2500 0 0]’(一个特解)。
的通解。 例3求方程组 二、求线性齐次方程组的通解 在MATLAB中,函数 null 用来求解零空间,即满足AX=0的解空间,实际上是求出解空间的一组基(基础解系)。 A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3]; format rat %指定有理式格式输出 B=null(A,‘r’) ↙%求解空间的有理基 B = 2 5/3 -2 -4/3 1 0 0 1
也可通过行最简形得到基: B1=rref(A) ↙ B1= 1 0 -2 -5/3 0 1 2 4/3 0 0 0 0 即可写出其基础解系,方程组的通解为: [2 k1 + 5/3 k2 ] [ ] [-2 k1 - 4/3 k2] [ ] [ k1 ] [ ] [ k2 ] syms k1 k2 X=k1*B(:,1)+k2*B(:,2);%通解 pretty(X) ↙%美化表达式
例4解方程组 三、求非齐次线性方程组的通解 Step1:判断AX=b是否有解,若有解则进行第二步; Step2:求AX=b的一个特解; Step3:求AX=0的通解; Step4:AX=b的通解为AX=0的通解+AX=b的一个特解。 解 :在MATLAB中建立M文件fangcheng1.m如下:
A=[1 -2 3 -1;3 -1 5 -3;2 1 2 -2]; b=[1 2 3]'; B=[A,b]; n=4; R_A=rank(A) R_B=rank(B) format rat if R_A==R_B&R_A==n %判断有唯一解 X=A\b elseif R_A==R_B&R_A<n %判断有无穷解 X=A\b %求特解 C=null(A,‘r’) %求AX=0的基础解系 else X=‘equation no solve‘ %判断无解 end
运行后结果显示: fangcheng1 ↙ R_A = 2 R_B = 3 X = equation no solve 说明该方程组无解
实验任务 解下列方程组:
则称 是这个根的一个隔离区间. 设 在区间 上连续, 且方程 取 的中 点 计算 在 内仅有一个实根 那么 若 由 与 同号, 若 即知 且 取 实验6.2 非线性方程的解 一、二分法 1.数学原理
以 作为新的隔离区间, 若 与 同号, 及 时, 且 如果以 或 作为 的近似值, 重复上述做法, 可求得 且 可求得 如此重复n次, 也有 取 由此可知, 且 误差小于 总之,当 时, 可求得
的根.确定根的存在区间 (即根的隔离区间), 用二分法求方程 根的近似值,一般分为两步: 若函数 在根的隔离区间 上单调连续,且 的图形,它与 轴的交点就是方程 用fplot函数作出 使方程 在 内有唯一根. 内方程有唯一根.我们可以反复用将根的隔离区间一分 则在 为二,其中含有根的区间为新的隔离区间的方法,最终搜索到达 到要求精度的根的近似值. 2、MATLAB实现 第一步 根的隔离 第二步根的逐次逼近
function y=erfen(fun,a,b,esp) if feval(fun,a).*feval(fun,b)<0 n=1; c=(a+b)/2; while abs(b-a)>esp if feval(fun,a).*feval(fun,c)<0 b=c;c=(a+b)/2; elseif feval(fun,c).*feval(fun,b)<0 a=c;c=(a+b)/2; else y=c; esp=10000; end n=n+1; end y=c; elseif feval(fun,a)==0 y=a; elseif feval(fun,b)==0 y=b; else disp('these,may not be a root in the intercal'); end n 打开M-edit窗口,编写二分法程序: erfen·m
正实根的隔离区间,并用二分法求方程在这个区间内根的近似值,使误差不超过正实根的隔离区间,并用二分法求方程在这个区间内根的近似值,使误差不超过 例1求方程 在 如图,方程 附近有一个重根,根的隔离区间为 在 附近有一单根,根的 隔离区间为 解 设 fplot('x^4-8.6*x^3-35.51*x^2+464.4*x-998.46',[0,10]), grid on ↙
经过15次搜索,得到方程的近似根为x=7.3485,误差不超过经过15次搜索,得到方程的近似根为x=7.3485,误差不超过 编写函数文件f.m function y=f(x) y=x^4-8.6*x^3-35.51*x^2+464.4*x-998.46; 在命令窗口输入: erfen('f',7,8,1.0e-4) ↙ n = 15 ans = 7.3485 由二分法的原理可知,当根的隔离区间较大时,收敛于根的速度很快;而当根的隔离区间较小时,靠近根的速度较缓慢,且难以满足高精度的要求.因此常用这种方法为迭代法提供初值.
简单迭代法的基本思想是将方程 改写为等价形式 选取适当的初值 迭代, ,按照 收敛于α,且函数 连续, 得到迭代序列 .若 的根.也称为 的不动点. 则 α 满足方程,即为 当方程的根难以求出时,可用 作为α的近似值,这种 称为迭代函数, 求根的近似值的方法称为简单迭代法, 称为迭代格式. 二、简单迭代法
用迭代法求方程的根的首要问题是迭代序列是否收敛.为此用迭代法求方程的根的首要问题是迭代序列是否收敛.为此 我们先从几何上观察由简单迭代格式 得到的迭代序列的收敛性. 迭代函数 的不动点,是由直线 和 由图可见,根据初始值 确定. 得 的交点 沿箭头方向得迭代 ,经直线 迭代函数上的点 ,依次进行下去,得到点列 函数上的点 点列逐渐逼近交点 因此迭代序列是收敛的.
通过上面的作图可见,迭代序列是否收敛与 的取值有关, 在下图中,按上述同样的方法产生的点列 的绝对值小于1时,迭代序列收敛;当 的绝对值大于1时, 逐渐远离交点 ,可见迭代序列是发散的. 迭代序列不收敛.
利用这两个迭代格式求方程的根,使误差不超过利用这两个迭代格式求方程的根,使误差不超过 附近有一个根.将此方程 例2已知方程 在 改写成如下两个等价形式: 构造如下两个迭代格式:
解 编写迭代法程序iterate.m : function y=iterate(x) x1=g(x); n=1; while(abs(x1-x)>=1.0e-6)&(n<=1000) x=x1; x1=g(x);n=n+1; end x1 n 编写函数文件g.m: function y=g(x) y=(0.8+x^2)^(1/3);
经过16次迭代,得到方程的近似根为x=1.4052,误差不超过经过16次迭代,得到方程的近似根为x=1.4052,误差不超过 在命令窗口输入: iterate(1.5) ↙ x1 = 1.4052 n = 16 在iterate.m文件中将g(x)改为g1(x)并编写文件g1.m: function y=g1(x) y=(x^3-0.8)^0.5;
,则 在命令窗口输入: iterate(1.5) ↙ x1 = Inf n = 20 迭代格式(2)发散. 在迭代格式(1)中,设
迭代格式 是收敛的. ,则 在迭代格式(2)中,设 ,有下面的定理 对于一般 函数 定理 设 在其不动点α的某一邻域内连续且 则在该邻域内的任意初始值 ,迭代序列 收敛于α.(证明略) 迭代格式(2)是发散的.
若 的不动点,它 的迭代函数为 设 是 也是 的不动点,因此也是它们的加权平均 的不动点. 根据上面的经验,只要选取 使 在 附近尽量小. 得 为此,令 加快迭代格式收敛速度的方法: 于是得修正迭代函数 修正迭代格式
在例3中,利用上述迭代格式求根的近似值如下:在例3中,利用上述迭代格式求根的近似值如下: g.m function y=g(x) y=x-[3*(0.8+x^2)-3*x*(0.8+x^2)^(2/3)]/[2*x-3*(0.8+x^2)^(2/3)] iterate(1.5) ↙ x1 = 1.4052 n = 2
得 令 三、 牛顿迭代法(切线法) 用曲线上一点的切线与x轴的交点来近似代替根.如图 重复这一过程得迭代格式 这种求方程近似根的方法称为牛顿迭代法.
MATLAB实现 编写牛顿迭代法程序newton.m function y=newton(x0) x1=x0-f(x0)/df(x0); n=1; while (abs(x1-x0)>=1.0e-4) x0=x1; x1=x0-f(x0)/df(x0);n=n+1; end x1 n
一辆汽车售价 元,可分m个月付款,每月需交b元,计算 这种分期付款的年利率. 利用这种方式购车,我们需要每月把b元存入汽车销售商 的账户,也就相当于汽车销售商周期的收入资金.设利率按每 月收款计算为r,为使m个月后存入银行 元,则第一个月应 该交 元,第二个月应该交 元,一 元. 一次类推第m个月应该交 四、 应用举例 由公式(1)可以计算出月利率,月利率乘以12便可以得到年利率.
在公式(1)中, 例3 若买一辆汽车32000元,可分36个月付款,每月需交1200 元;也可以向银行贷款,贷款的期限为3年,年利率为6.66%,应 该选择哪一种方式购车. 于是得 解 显然r=0是上述方程的根,但这里我们要求的是最小正根. 编写函数文件fe.m function y=fe(r) y=80*r*(1+r)^36-3*(1+r)^36+3;
确定根的隔离区间 fplot(‘fe’,[0.01,0.5]),grid on ↙ 由图知根的隔离区间[0.01,0.5].
取初值 用二分法求得 确定初值 调用二分法的程序,在命令窗口输入: erfen(‘fe’,0.01,0.5,1.0e-6) ↙ n= 20 ans= 0.0172 编写导函数文件dfe.m function y=dfe(r) y=80*(1+r)^36+36*(80*r-3)*(1+r)^35
编写牛顿迭代法程序newton.m function y=newton(r0) r1=r0-fe(r0)/dfe(r0); n=1; while (abs(r1-r0)>=1.0e-4) r0=r1; r1=r0-f(r0)/df(r0);n=n+1; end r1 n
于是求得月利率 在命令窗口输入: newtone(0.0172) ↙ r1= 0.0172 n= 2 年利率为 所以分期付款买车要付的利息高达20.64%,与3年贷款的利率比较,最好选择贷款买车.
1.求方程 的实根的隔离区间。 2.分别用二分法和迭代法求方程 在[0,1] 的实根,并比较两个迭代序列的收敛速度。 实验任务 3.商场对电脑实行分期付款销售,一台售价为8000元的电脑,可分36个月付款,每月付款300元;同时也可以到银行贷款,贷款10000元以下且三年内还清的,年利率为10%,你认为选择什么方式买电脑更省钱。