实验二迭代法初始值与收敛性 (3)
- 格式:doc
- 大小:128.50 KB
- 文档页数:4
实验二:迭代法、初始值与收敛性一:实验要求考虑一个简单的代数方程210,x x --=针对上述方程,可以构造多种迭代法,如211111,1,1n n n n n nx x x x x x +++=-=+=+等。
在实轴上取初值,分别用以上迭代做实验,记录各算法的迭代过程。
二:实验要求及实验结果(1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放入初始值,反复实验。
请读者自行设计一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。
(2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初值是否有差异?实验内容:ⅰ)对211n n x x +=-进行迭代运算,选取迭代次数n=20;分别选择初值-0.6, 1.6进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:%迭代法求解 %令x=x^2-1 clearn=30; x=-0.5;x1=x^2-1; for i=1:nx1=x1^2-1;xx(i)=x1;endm=linspace(0,29,n);plot(m,xx) title('x=-0.5')2468101214161820-1-0.9-0.8-0.7-0.6-0.5-0.4-0.3-0.2-0.10x=-0.602468101214161820-1-0.500.511.5x=1.6如上图所示,选取初值分别为-0.6、1.6时,结果都是不收敛的。
分析:2()1n g x x =-,'()2g x x =,要想在某一邻域上'()21,[1,1]g x x x =<∀∈-则但是()[1,1]g x ∉-,所以不存在某个邻域使得该迭代公式收敛。
即迭代公式对任何初值都是发散的。
ⅱ)对111n nx x +=+进行迭代运算,选取迭代次数n=30;分别选择初值=-0.7, 2.1进行实验,并画出迭代结果的趋势图。
数学实验题目4 Newton 迭代法摘要0x 为初始猜测,则由递推关系产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。
当0x 距*x 较近时,{}k x 很快收敛于*x 。
但当0x 选择不当时,会导致{}k x 发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
前言利用牛顿迭代法求的根程序设计流程问题1(1 程序运行如下:r = NewtSolveOne('fun1_1',pi/4,1e-6,1e-4,10) r = 0.7391(2 程序运行如下:r = NewtSolveOne('fun1_2',0.6,1e-6,1e-4,10) r = 0.5885问题2(1 程序运行如下:否 是否是是定义()f x输入012,,,x N εε开 始1k =01()f x ε<0100()()f x x x f x =-'102||x x ε-<k N =输出迭代失败标志输出1x输出奇 异标志结 束01x x = 1k k =+ 否r = NewtSolveOne('fun2_1',0.5,1e-6,1e-4,10)r = 0.5671(2)程序运行如下:r = NewtSolveOne('fun2_2',0.5,1e-6,1e-4,20)r = 0.5669问题3(1)程序运行如下:①p = LegendreIter(2)p = 1.0000 0 -0.3333p = LegendreIter(3)p = 1.0000 0 -0.6000 0p = LegendreIter(4)p =1.0000 0 -0.8571 0 0.0857p = LegendreIter(5)p = 1.0000 0 -1.1111 0 0.2381 0②p = LegendreIter(6)p = 1.0000 0 -1.3636 0 0.4545 0 -0.0216r = roots(p)'r= -0.932469514203150 -0.6612 0.9324695142031530.6612 -0.238619186083197 0.238619186083197用二分法求根为:r = BinSolve('LegendreP6',-1,1,1e-6)r = -0.932470204878826 -0.661212531887755 -0.2386200573979590.2386 0.661192602040816 0.932467713647959(2)程序运行如下:①p = ChebyshevIter(2)p = 1.0000 0 -0.5000p = ChebyshevIter(3)p = 1.0000 0 -0.7500 0p = ChebyshevIter(4)p = 1.0000 0 -1.0000 0 0.1250p = ChebyshevIter(5)p = 1.0000 0 -1.2500 0 0.3125 0②p = ChebyshevIter(6)p = 1.0000 0 -1.5000 0 0.5625 0 -0.0313r = roots(p)'r = -0.965925826289067 -0.7548 0.9659258262890680.7547 -0.258819045102521 0.258819045102521用二分法求根为:r = BinSolve('ChebyshevT6',-1,1,1e-6)r = -0.965929926658163 -0.7755 -0.2588289221938780.2588 0.7020 0.965924944196429与下列代码结果基本一致,只是元素顺序稍有不同:j = 0:5;x = cos((2*j+1)*pi/2/(5+1))x =0.965925826289068 0.7548 0.258819045102521-0.258819045102521 -0.7547 -0.965925826289068(3)程序运行如下:①p = LaguerreIter(2)p = 1 -4 2p = LaguerreIter(3)p = 1 -9 18 -6p = LaguerreIter(4)p = 1 -16 72 -96 24p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000②p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000r = roots(p)'r =12.6432 7.8891 3.5964257710407111.4520 0.263560319718141用二分法求根为:r = BinSolve('LaguerreL5',0,13,1e-6)r = 0.263560314567722 1.4789 3.5964257656311507.0720 12.6490(4)程序运行如下:①p = HermiteIter(2)p = 1.0000 0 -0.5000p = HermiteIter(3)p = 1.0000 0 -1.5000 0p = HermiteIter(4)p = 1.0000 0 -3.0000 0 0.7500p = HermiteIter(5)p = 1.0000 0 -5.0000 0 3.7500 0②p = HermiteIter(6)p = 1.0000 0 -7.5000 0 11.2500 0 -1.8750r = roots(p)'r =-2.3587 2.3588 -1.3358490740136961.335849074013698 -0.4367 0.4366用二分法求根为:r = BinSolve('HermiteH6',-3,3,1e-6)r =-2.3516 -1.335849********* -0.43630.4366 1.335848983453244 2.3504所用到的函数function r = NewtSolveOne(fun, x0, ftol, dftol, maxit)% NewtSolveOne 用Newton法解方程f(x)=0在x0附近的一个根%% Synopsis: r = NewtSolveOne(fun, x0)% r = NewtSolveOne(fun, x0, ftol, dftol)%% Input: fun = (string) 需要求根的函数及其导数% x0 = 猜测根,Newton法迭代初始值% ftol = (optional)误差,默认为5e-9% dftol = (optional)导数容忍最小值,小于它表明Newton法失败,默认为5e-9 % maxit = (optional)迭代次数,默认为25%% Output: r = 在寻根区间内的根或奇点if nargin < 3ftol = 5e-9;endif nargin < 4dftol = 5e-9;endif nargin < 5maxit = 25;endx = x0; %设置初始迭代位置为x0k = 0; %初始化迭代次数为0while k <= maxitk = k + 1;[f,dfdx] = feval(fun,x); %fun返回f(x)和f'(x)的值if abs(dfdx) < dftol %如果导数小于dftol,Newton法失败,返回空值r = [];warning('dfdx is too small!');return;enddx = f/dfdx; %x(n+1) = x(n) - f( x(n) )/f'( x(n) ),这里设dx = f( x(n) )/f'( x(n) )x = x - dx;if abs(f) < ftol %如果误差小于ftol,返回当前x为根r = x;return;endendr = []; %如果牛顿法未收敛,返回空值function p = LegendreIter(n)% LegendreIter 用递推的方法计算n次勒让德多项式的系数向量Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)%% Synopsis: p = LegendreIter(n)%% Input: n = 勒让德多项式的次数%% Output: p = n次勒让德多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %P0(x) = 1p = 1;return;elseif n == 1 %P1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为P0pMid = [1 0]; %初始化三项递推公式中项为P1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Pn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = (2*i+3)/(i+2) * pMidCal - (i+1)/(i+2) * pBkCal; %勒让德多项式三项递推公式Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德多项式最高次项系数归一化function p = ChebyshevIter(n)% ChebyshevIter 用递推的方法计算n次勒让德-切比雪夫多项式的系数向量Tn+2(x) = 2*x*Tn+1(x) - Tn(x)%% Synopsis: p = ChebyshevIter(n)%% Input: n = 勒让德-切比雪夫多项式的次数%% Output: p = n次勒让德-切比雪夫多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %T0(x) = 1p = 1;return;elseif n == 1 %T1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为T0pMid = [1 0]; %初始化三项递推公式中项为T1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Tn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = 2*pMidCal - pBkCal; %勒让德-切比雪夫多项式三项递推公式Tn+2(x) = 2*x*Tn+1(x) - Tn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德-切比雪夫多项式最高次项系数归一化function p = LaguerreIter(n)% LaguerreIter 用递推的方法计算n次拉盖尔多项式的系数向量Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)*Ln(x)%% Synopsis: p = LaguerreIter(n)%% Input: n = 拉盖尔多项式的次数%% Output: p = n次拉盖尔多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %L0(x) = 1p = 1;return;elseif n == 1 %L1(x) = -x+1p = [-1 1];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [-1 1]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal1 = zeros(1,i+3); %构造用于计算的x*Ln+1(x)pMidCal1(1:i+2) = pMid;pMidCal2 = zeros(1,i+3); %构造用于计算的Ln+1(x)pMidCal2(2:i+3) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Ln(x)pBkCal(3:i+3) = pBk;pFwd =( (2*i+3)*pMidCal2 - pMidCal1 - (i+1)*pBkCal )/ (i+2); %拉盖尔多项式三项递推公式Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)^2*Ln(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function p = HermiteIter(n)% HermiteIter 用递推的方法计算n次埃尔米特多项式的系数向量Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)%% Synopsis: p = HermiteIter(n)%% Input: n = 埃尔米特多项式的次数%% Output: p = n次埃尔米特多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %H0(x) = 1p = 1;return;elseif n == 1 %H1(x) = 2*xp = [2 0];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [2 0]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Hn+1(x)pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Hn(x)pBkCal(3:i+3) = pBk;pFwd =2*pMidCal - 2*(i+1)*pBkCal; %埃尔米特多项式三项递推公式Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function r = BinSolve(fun, a, b, tol)% BinSolve 用二分法解方程f(x)=0在区间[a,b]的根%% Synopsis: r = BinSolve(fun, a, b)% r = BinSolve(fun, a, b, tol)%% Input: fun = (string) 需要求根的函数% a,b = 寻根区间上下限% tol = (optional)误差,默认为5e-9%% Output: r = 在寻根区间内的根if nargin < 4tol = 5e-9;endXb = RootBracket(fun, a, b); %粗略寻找含根区间[m,n] = size(Xb);r = [];nr = 1; %初始化找到的根的个数为1maxit = 50; %最大二分迭代次数为50for i = 1:ma = Xb(i,1); %初始化第i个寻根区间下限b = Xb(i,2); %初始化第i个寻根区间上限err = 1; %初始化误差k = 0;while k < maxitfa = feval(fun, a); %计算下限函数值fb = feval(fun, b); %计算上限函数值m = (a+b)/2;fm = feval(fun, m);err = abs(fm);if sign(fm) == sign(fb) %若中点处与右端点函数值同号,右端点赋值为中点b = m;else %若中点处与左端点函数值同号或为0,左端点赋值为中点a = m;endif err < tol %如果在a处函数值小于tolr(nr) = a; %一般奇点不符合该条件,这样可以去除奇点nr = nr + 1; %找到根的个数递增k = maxit; %改变k值跳出循环endk = k + 1; %二分迭代次数递增endendfunction X = powerX(x,a,b)% powerX 对给定向量(x1, x2,..., xn)返回增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)%% Synopsis: X = powerX(x,a,b)%% Input: x = 需要返回增幂矩阵的向量% a,b = 寻根区间上下限%% Output: X = 增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)if round(a) ~= a | round(b) ~= berror('a,b must be integers');elseif a >= berror('a must be smaller than b!');endx = x(:)';row = b-a+1;col = length(x);X = zeros(row, col);for i = b:-1:aX(b-i+1,:) = x.^i;Endfunction [f, dfdx] = fun1_1(x)f = cos(x) - x;dfdx = -sin(x) - 1;function [f, dfdx] = fun1_2(x)f = exp(-x) - sin(x);dfdx = -exp(-x) - cos(x);function [f, dfdx] = fun2_1(x)f = x - exp(-x);dfdx = 1 + exp(-x);function [f, dfdx] = fun2_2(x)f = x.^2 - 2*x*exp(-x) + exp(-2*x);dfdx = 2*x - 2*exp(-x) + 2*x*exp(-x) - 2*exp(-2*x);function y = LegendreP6(x)p = LegendreIter(6);X = powerX(x,0,6);y = p*X;function y = ChebyshevT6(x)p = ChebyshevIter(6);X = powerX(x,0,6);y = p*X;function y = LaguerreL5(x)p = LaguerreIter(5);X = powerX(x,0,5);y = p*X;function y = HermiteH6(x)p = HermiteIter(6);X = powerX(x,0,6);y = p*X;思考题(1)由于Newton法具有局部收敛性,所以在实际问题中,当实际问题本身能提供接近于根的初始近似值时,就可保证迭代序列收敛,但当初值难以确定时,迭代序列就不一定收敛。
迭代函数对收敛性的影响一、实验目的:初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。
、实验内容:用简单迭代法求方程f(x) =2x3 _x _1 = 0的根。
方案一:化f (x)二2x3 - x -1 = 0为等价方程X = 3"0^ △0(x)\ 2 =万案二:化f (x) = 2x —x—^^=0为等价方程x 二2x3」(x) 、实验要求:(1)分别对方案一、方案二取初值X。
=0,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB^部函数solve直接求出方程的所有根,并与(1)的结果进行比较。
四、迭代法程序fun ctio n[k,pia ncha,xdpia ncha,xk]=diedai(x0,k)x(1)=x0;for i=1:kx(i+1)=fu n1(x(i));pia ncha=abs(x(i+1)-x(i));xdpia ncha=pia ncha/(abs(x(i+1))+eps);i=i+1;xk=x(i);[(i-1) pia ncha xdpia ncha xk]endif (pia ncha>1)&( xdpia ncha>0.5)&(k>3)disp('此迭代序列发散,请重新输入新的迭代公式')return;endif (pia ncha<0.001)&( xdpia ncha<0.0000005)&(k>3)disp('此迭代序列收敛,且收敛速度较快')return;endp=[(i-1) pia ncha xdpia ncha xk]'五、实验结果:方案一:3化f(x)=2x-X-1 = 0为等价方程xfjx)建立M文件fun 1.m的文件function y1=fu n1(x)y1= ((x+1) ./2 ) 9(1/3)在MATLAB窗口输入程序>> [k,pia ncha,xdpia ncha,xk]=diedai(0,10)运行后输出结果y1 =0.7937ans =1.0000 0.7937 y1 =0.9644ans =2.0000 0.1707 y1 = 0.9940ans =3.0000 0.0297 y1 =0.9990ans =4.0000 0.0050 y1 = 0.9998ans =5.0000 0.0008 y1 =1.0000ans =6.0000 0.0001 y1 = 1.0000ans =7.0000 0.0000 y1 = 1.0000ans =8.0000 0.0000 y1 =1.0000ans =9.0000 0.0000 y1 =1.0000ans =10.0000 1.0000 0.7937 0.1770 0.9644 0.0298 0.9940 0.0050 0.9990 0.0008 0.9998 0.0001 1.0000 0.0000 1.0000 0.0000 1.0000 0.0000 1.00000.0000 0.0000 1.0000此迭代序列收敛,且收敛速度较快k =10 pia ncha = 1.0685e-07 xdpia ncha =1.0685e-07 xk =1.000033x = 2x -仁〕(x)2、方案二: 化f (x) = 2x …X - 1 = 0为等价方程 (1)建立 M 文件fun,m 的文件function y 仁fu n1(x) y1=2.*(x93)-1(2 )在MATLAB 窗口输入程序>> [k,pia ncha,xdpia ncha,xk]=diedai(0,10) (3 )运行后输出结果 y1 =-1y1 =-3y1 =-55y1 =-332751 ans =1.0e+05 *y1 =-I nfans =8 Inf NaN -Infy1 =-I nf ans =9 NaN NaN -Inf y1 =-I nf ans =10 NaN NaN -Inf p = 10 NaN NaN -I nfk = 10 pia ncha =NaN xdpia ncha = NaN xk =-I nf0.0000 3.3270 y1 =-7.3687e+16 ans =1.0e+16 * 0.0000 7.3687 y1 =-8.0019e+50 ans =1.0e+50 * 0.0000 8.0019 y1 =-1.0247e+153 ans =1.0e+153 * 0.0000 1.0247 0.0000 -3.32750.0000 -7.36870.0000 -8.00190.0000 -1.0247ans =1.0000 1.0000 1.0000 -1.0000ans =2.0000 2.00000.6667 -3.0000ans =3.0000 52.00000.9455 -55.00003、用MATLAB^部函数solve直接求(1 )输入程序>> x=solve('2.*(x.A3)-x-1=0')运行后输出的结果x =1.-.50000000000000000000000000000000+.50000000000000000000000000000000*i-.50000000000000000000000000000000-.50000000000000000000000000000000*i从表1可以看出,方案一收敛很快,偏差和偏差的相对误差几乎为零;方案二根本不收敛,它的偏差piancha已经NaN且相对误差xdwucha的知也已经NaN由此可见,迭代序列的敛散性与迭代公式有关,也与相邻两次迭代的偏差和偏差的相对误差有关,他们的值越小,迭代序列的收敛速度越快。
实验报告一一、实验目的理解线性方程组直接法与迭代法思想,掌握常用算法的设计,掌握用MATLAB 实现的数值解法。
二、实验题目实验一 线性方程组迭代法实验 1、 迭代法的收敛速度用迭代法分别对n=20,n=200解方程组,b Ax =其中nn A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------------=431513143151513143151513143151513143151314(1) 选取不同的初值0x 和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;(2) 取定初值0x 和右端向量b,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
2、 SOR 迭代法松弛因子的选取用逐次超松弛(SOR )迭代法求解方程组,b Ax =其中 .5555551221212211212212121221121221212200199198321⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----------=x x x x x x A (1) 给定迭代误差,选取不同的超松弛因子1>ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论;(2) 给定迭代误差,选取不同的低松弛因子1<ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论。
三、实验原理Jacobi 迭代法算法:步1 取初始点()0x ,精度要求ε,最大迭代次数N ,置0:=k ;步 2 由()n i x a b a x ni j j j ij i ii k i,,1,1,11 =⎪⎪⎭⎫⎝⎛-=∑≠=+ 或()b D x A D D x k 111)(--++-= 计算()1+k x ; 步3 若()()ε≤-∞+k k xx1,则停算,输出()1+k x作为方程组的近似解; 步4 若N k =,则停算,输出迭代失败信息;否则置1+=k k ,转布2。
迭代法解一元三次方程的应用一元三次方程是数学中常见的高次方程之一,解一元三次方程可以使用不同的方法,其中迭代法是一种常用的数值计算方法。
本文将介绍迭代法解一元三次方程的原理和具体应用。
1. 迭代法解一元三次方程的原理迭代法是一种通过逐步逼近的方法求解方程的数值解。
对于一元三次方程ax^3 + bx^2 + cx + d = 0,我们可以通过迭代的方式逐步逼近方程的解x。
具体而言,可以通过以下步骤进行迭代计算:(1) 选择一个初始值x0;(2) 根据迭代公式x_{n+1} = f(x_n),计算下一步的迭代值x_{n+1},其中f(x)为方程ax^3 + bx^2 + cx + d的一个函数;(3) 判断迭代值x_{n+1}与x_n的差值是否满足收敛条件,如果满足,则认为x_{n+1}是方程的近似解;如果不满足,则返回第(2)步继续迭代计算。
2. 迭代法解一元三次方程的具体应用迭代法解一元三次方程在实际应用中具有广泛的应用价值。
以下是一些相关领域中的具体应用案例:2.1 金融工程学在金融工程学中,迭代法可用于求解期权定价模型中的一元三次方程。
期权定价模型通常涉及到高次方程的求解,通过迭代法可以得到方程的数值解,进而计算出期权的价格。
2.2 物理学在物理学中,迭代法常被用于求解一元三次方程模型。
例如,在自由落体运动的模型中,通过迭代法可以求解出物体运动的轨迹方程,进而可以对物体的运动进行预测和分析。
2.3 工程学在工程学中,迭代法常用于求解电路网络中复杂电流电压分布的方程。
通过将电路网络建模为一元三次方程,利用迭代法可以逐步逼近得到电路中各节点的电流和电压数值解,从而可以有效分析和设计电路。
2.4 经济学在经济学研究中,迭代法被用于求解一元三次方程模型,用于分析和预测经济变量的变化趋势。
例如,对于经济增长模型中的一元三次方程,可以通过迭代法求解得到经济增长率的数值解,进而进行经济政策的制定和评估。
3. 迭代法解一元三次方程的优缺点迭代法解一元三次方程具有以下优点和缺点:3.1 优点(1) 对大部分情况可行:迭代法可用于求解各种类型的一元三次方程,在实际应用中通用性较高;(2) 数值解精度高:通过逐步逼近的方式,迭代法可以得到一定精度的方程数值解。
收敛性与收敛速度的比较实验目的:通过用不同迭代法解同一非线性方程,比较各种方法的收敛性与收敛速度。
实验内容:求解非线性方程 0232=-+-x e x x 的根,准确到106-。
实验要求:(1) 用你自己设计的一种线性收敛的迭代法求方程的根(利用算法4.1(简单迭代法)计算);(2)用斯蒂芬森加速迭代(算法4.2)计算。
输出迭代初值、各次迭代值及迭代次数。
(3)用牛顿法(算法4.3)求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)、(2)的结果比较。
(4)用MATLAB 内部函数solve 直接求出方程的所有根,并与(1)、(2)、(3)的结果进行比较。
实验程序:(1) 简单迭代法:初值选用0.5 format longc=10.^(-6);x0=0.5;syms x fxfx=(x.^2-exp(x)+2)/3;j=1;fx0=(x0.^2-exp(x0)+2)/3while(abs((x0-fx0)/fx0)>c)x0=fx0;fx0=(x0.^2-exp(x0)+2)/3j=j+1;endj结果:fx0 =0.200426243099957fx0 =0.272749065098375fx0 =0.253607156584130 fx0 =0.258550376264936 fx0 =0.257265636335094 fx0 =0.257598985162190 fx0 =0.257512454514832 fx0 =0.257534913615251 fx0 =0.257529084167956 fx0 =0.257530597238330 fx0 =0.257530204510457fx0 =0.257530306445639j =12j =12迭代次数:12(2)斯蒂芬森加速迭代法:format longc=10.^(-6);y=0.5;syms x fx gx hxfx=(x.^2-exp(x)+2)/3;gx=(fx.^2-exp(fx)+2)/3;hx=x-(fx-x).^2/(gx-2*fx+x);j=1;fy=(y.^2-exp(y)+2)/3;gy=(fy.^2-exp(fy)+2)/3;hy=y-(fy-y).^2/(gy-2*fy+y)while((abs(y-hy)/hy)>c)y=hy;fy=(y.^2-exp(y)+2)/3;gy=(fy.^2-exp(fy)+2)/3;hy=y-(fy-y).^2/(gy-2*fy+y)j=j+1;endj结果:hy =0.258684427565791hy =0.257530317719808hy =0.257530285439861j =3迭代次数:3(3)牛顿法format longc=10.^(-6);x0=0.5;syms x fxfx=x-(x.^2-3*x-exp(x))+2/(2*x-exp(x)-3);j=1;fx0=(x0.^2-exp(x0)+2)/3while((abs(x0-fx0)/fx0)>c)x0=fx0;fx0=x0-(x0.^2-3*x0-exp(x0)+2)/(2*x0-exp(x0)-3) j=j+1;end结果:fx0 =0.200426243099957fx0 =0.257208351085202fx0 =0.257530275750830fx0 =0.257530285439861迭代次数:4(4)solve函数直接求根x=solve('x^2-3*x+2-exp(x)=0')x =0.25753028543986076045536730493724用solve方法直接求根收敛速度较快,迭代次数较少。
迭代法实验报告迭代法实验报告引言:迭代法是一种常见的数值计算方法,通过反复迭代逼近解的过程,来解决一些复杂的数学问题。
本实验旨在通过实际操作,深入理解迭代法的原理和应用,并通过实验数据验证其有效性。
一、实验目的本实验的主要目的有以下几点:1. 掌握迭代法的基本原理和步骤;2. 熟悉迭代法在数值计算中的应用;3. 理解迭代法的收敛性和稳定性;4. 验证迭代法在实际问题中的有效性。
二、实验原理迭代法是一种通过不断逼近解的方法,其基本原理可概括为以下几步:1. 选择一个初始值作为迭代的起点;2. 根据问题的特点和要求,构造一个递推公式;3. 通过不断迭代计算,逐步逼近解;4. 判断迭代过程是否收敛,并确定最终的解。
三、实验步骤1. 选择合适的初始值。
初始值的选择对迭代的结果有重要影响,通常需要根据问题的特点进行合理选取。
2. 构造递推公式。
根据问题的数学模型,建立递推公式,将问题转化为迭代求解的形式。
3. 进行迭代计算。
根据递推公式,进行迭代计算,直到满足收敛条件或达到预定的迭代次数。
4. 判断迭代结果。
根据实际问题的要求,判断迭代结果是否满足精度要求,并进行相应的调整和优化。
四、实验结果与分析通过实验操作,我们得到了一组迭代计算的结果。
根据实验数据,我们可以进行以下分析:1. 收敛性分析。
通过观察迭代过程中的数值变化,我们可以判断迭代法的收敛性。
如果数值逐渐趋于稳定,且与理论解的误差在可接受范围内,说明迭代法收敛。
2. 稳定性分析。
迭代法的稳定性是指在初始值变化时,迭代结果是否保持稳定。
通过改变初始值,我们可以观察迭代结果的变化情况,从而评估迭代法的稳定性。
3. 精度分析。
迭代法的精度取决于迭代过程中的误差累积情况。
通过与理论解的比较,我们可以评估迭代法的精度,并对迭代过程进行优化。
五、实验结论通过本次实验,我们深入了解了迭代法的原理和应用,通过实际操作验证了迭代法在数值计算中的有效性。
实验结果表明,迭代法在解决复杂数学问题中具有较高的准确性和稳定性,能够满足实际应用的需求。
实验实验题一实验题1 水手、猴子和椰子问题:五个水手带了一只猴子来到南太平洋的一个荒岛上,发现那里有一大堆椰子。
由于旅途的颠簸,大家都很疲倦,很快就入睡了。
第一个水手醒来后,把椰子平分成五堆,将多余的一只给了猴子,他私藏了一堆后便又去睡了。
第二、第三、第四、第五个水手也陆续起来,和第一个水手一样,把椰子分成五堆,恰好一只给猴子,私藏一堆,再去入睡。
天亮以后,大家把余下的椰子重新等分成五堆,每人分一堆,正好余一只再给猴子。
试问原来共有几只椰子?试分析椰子数目的变化规律,利用逆向递推的方法求解这一问题。
实验题2 设,。
(1)从I0尽可能精确的近似值出发,利用递推公式:计算从I1到I20的近似值:(2)从I30较粗糙的估计值出发,用递推公式:计算从I1到I20的近似值:(3)分析所得结果的可靠性以及出现这种现象的原因。
实验题3 递推计算的稳定性计算积分其中a为参数,分别对a =0.05及a =15按下列两种方案计算,列出其可靠性进行分析比较,说明原因。
方案I 用递推公式递推初值可由积分直接得。
方案II 用递推公式根据估计式或取递推初值为或计算中取n =13开始。
实验课题4 三种求ln2的算法比较按下列三种方案构造逼近ln2的数列,用以求出ln2的近似值,要求精度。
观察和比较三种计算方案的收敛速度。
方案I 利用级数设则可取。
方案II 对方案I中的数据,按下列公式生成新数列。
称为数列的埃特金(Aitken)外推数列。
可以证明。
因此可取。
方案III 利用级数设则可取。
实验课题5 值的计算下面给出了三种求的近似值的计算方案,试比较它们的收敛速度和精度。
方案I 利用逼近单位圆半周长的方法。
单位圆半周长的值为,图1所示为一单位半圆,设为将半圆弧分成等份得以的角,其对应的弦线长度是。
则这样的弦线之和为(1-5)P n就是单位圆半周长的一个近似值由三角公式知(1-6)记,则由式(1-5),(1-6)可建立如下迭代公式(1-7)(1-8)则P n就是的逼近值。
数值分析中的迭代方法与收敛性分析迭代方法是数值分析中一种重要的算法,用于求解数值问题。
迭代方法基于一个初始猜测解,并通过不断迭代逼近真实解。
本文将介绍迭代方法的基本原理以及如何进行收敛性分析。
一、迭代方法的原理迭代方法的基本原理是通过不断更新猜测解来逼近真实解。
假设我们要求解一个方程f(x)=0,其中f(x)表示一个函数。
我们可以通过选择一个初始猜测解x0,然后使用迭代公式x_{k+1}=g(x_k)来生成下一个近似解x_{k+1},其中g(x_k)是一个迭代函数。
通过不断迭代,我们希望逐渐接近真实解。
二、常见的迭代方法在数值分析中,有许多常见的迭代方法被广泛应用于求解不同类型的数值问题。
以下是几种常见的迭代方法:1. 不动点迭代法不动点迭代法通过将方程f(x)=0转化为等价的x=g(x)的形式来求解。
其中g(x)是一个迭代函数,可以通过不断迭代x_{k+1}=g(x_k)逼近真实解。
不动点迭代法的收敛性通常需要满足收敛性条件,如Lipschitz条件或收缩映射条件。
2. 牛顿迭代法牛顿迭代法通过利用函数的导数信息来加速收敛速度。
迭代公式为x_{k+1}=x_k-\frac{f(x_k)}{f'(x_k)},其中f'(x_k)表示函数f(x_k)的导数。
牛顿迭代法的收敛性通常需要满足局部收敛性条件,如满足Lipschitz条件和拟凸性条件。
3. 雅可比迭代法雅可比迭代法用于求解线性方程组Ax=b,其中A是系数矩阵,b是常数向量。
迭代公式为x_{k+1}=D^{-1}(b-(L+U)x_k),其中D、L和U分别是矩阵A的对角线、下三角和上三角部分。
雅可比迭代法的收敛性要求系数矩阵A满足严格对角占优条件。
三、迭代方法的收敛性分析在使用迭代方法求解数值问题时,我们需要进行收敛性分析,以确定迭代方法是否能够逼近真实解。
常用的迭代收敛性分析方法包括:1. 收敛域分析收敛域分析用于确定迭代方法的收敛域,即迭代过程中能够保证收敛的初始猜测解的范围。
实验二:迭代法、初始值与收敛性
一:实验要求
考虑一个简单的代数方程
210,x x --=
针对上述方程,可以构造多种迭代法,如211111,1,n n n n n
x x x x x +++=-=+
=记录各算法的迭代过程。
二:实验要求及实验结果
(1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放入初始值,反复实验。
请读者自行设计
一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。
(2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初值是否有差异?
实验内容:
ⅰ)对211n n x x +=-进行迭代运算,选取迭代次数n=20;分别选择初值-0.6, 1.6进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下: %迭代法求解
%令x=x^2-1
clear
n=30;
x=-0.5;
x1=x^2-1;
for i=1:n
x1=x1^2-1;
xx(i)=x1;
end m=linspace(0,29,n);
plot(m,xx)
title('x=-0.5')
x=-0.6
x=1.6
如上图所示,选取初值分别为-0.6、1.6时,结果都是不收敛的。
分析:2()1n g x x =-,'()2g x x =,要想在某一邻域上'()21,[1,1]g x x x =<∀∈-则但是()[1,1]g x ∉-,所以不存在某个
邻域使得该迭代公式收敛。
即迭代公式对任何初值都是发散的。
ⅱ)对111n n
x x +=+进行迭代运算,选取迭代次数n=30;分别选择初值=-0.7, 2.1进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:
%迭代法求解
%令x=x^2-1
clear
n=20;
x=-0.5;
x1=1+1./x;
for i=1:n
x1=1+1./x1;
xx(i)=x1; end
m=linspace(0,29,n);
plot(m,xx,'b')
title('x=-0.5')
x=-0.7x=2.1
如上图所示,选取初值分别为-0.7、2.1时,结果都是收敛。
分析:1()1,n g x x =+设 '21()[1.65,],[1.65,],()g x x g x x ∈+∞∀∈+∞=-在[1.65,]+∞上有界,且
'2
1()1,[1.65,]g x x x =<∀∈+∞则由迭代式对任意初始值0[1.65,]x ∈+∞1()1,n g x x =+产生的序列都收敛。
同时由1()1,n g x x =+
可以看到,在0[,]x ∈-∞+∞选取初值,在进行n 次迭代后,都会存在一个 1.65n x >,此时n x 相当于是在[1.65,]+∞范围内的初始值,迭代公式产生的序列收敛。
所以初值的选取对数列的收敛性没有影响。
ⅲ)对1n x +=n=20;分别选择初值=-0.6,2.1进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:
%迭代法求解
%令x=sqrt(1+x)
clear
n=20;
x=-0.5;
x1= sqrt(1.+x);
for i=1:n
x1= sqrt(1+x1);
xx(i)=x1; end
m=linspace(0,29,n);
plot(m,xx,'b')
title('x=-0.5')
x=-0.6
如上图所示,选取初值分别为-0.6、2.1时,结果都是收敛。
分析:()1g x =
设 '()[1,],[1,],()g x x g x ∈-+∞∀∈-+∞=在[1,]-+∞实
数域上有界,且'()1,[1,]
g x x =<∀∈-+∞则由迭代式对任意初始值0[1,]x ∈-+∞()g x =产生的序列都收敛。
同时由()g x =可以看到,在0[,1]x ∈-∞-选取初值,对迭代结果所产生的虚数的实部和虚部也是收敛的。
如初值选取x=-3,得到20次的迭代结果如下:实部收敛于1.618,虚部收敛于0,
Columns 1 through 5
1.1688 + 0.6050i 1.4867 + 0.2035i 1.5782 + 0.0645i 1.6058 + 0.0201i 1.6143 + 0.0062i
Columns 6 through 10
1.6169 + 0.0019i 1.6177 + 0.0006i 1.6179 + 0.0002i 1.6180 + 0.0001i 1.6180 + 0.0000i
Columns 11 through 15
1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i
Columns 16 through 20
1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i
x=-3
上图是初值选取为-3的迭代结果趋势图,可以看出,当迭代结果为虚数时,迭代结果最终还是收敛的。
在进行n 次迭代后,实部都会存在一个1n x >-,此时n x 相当于是在[1,]-+∞范围内的初始值,迭代公式产生的序列收敛。
所以初值的选取对数列的收敛性没有影响。
(3) 线性方程组迭代法的收敛性是不依赖初值的选取的。
比较线性与非线性问题迭代的差异,有何结论和问题。
ⅰ)对线性方程1212()()()f ax bx af x bf x +=+,设()f x ax b =+,则'()f x a =。
若线性方程的迭代是收敛的,则有'()1,11f x a a =<-<<对()f x ax b =+而言,在[,]-∞+∞上,都有,()[,]x f x ∈-∞+∞,
所以,对任何初值,方程的迭代都是收敛的,不受初值的影响。
若线性方程的迭代是发散的,则对任何初值都发散,方程迭代的收敛性也不受初值的影响。
ⅱ)对非线性方程的迭代,就复杂的多。
对于方程迭代发散的方程而言,无论初值如何选择,收敛性是不会改变的。
方程的迭代还是发散。
对方程迭代收敛的情况而言,若想要使得初值的选择不会影响收敛性,那必须要使得,()[,]x f x ∈-∞+∞并且在某一定点的邻域内'()1f x <,情况是很复杂的。