非线性方程迭代法实验题
迭代法求非线性方程的根讲解
迭代法是求解非线性方程近似根的一 种方法,这种方法的关键是确定迭代函数 (x),简单迭代法 用直接的方法从原方程 中隐含的求出x,从而确定迭代函数(x), 这种迭代法收敛速度较慢,迭代次数多, 因此常用于理论中,Newton迭代法采用另一 种迭代格式, 具有较快的收敛速度,由牛顿 迭代法可以得到很多其他迭代格式。
( p ) ( )
p!
用条件(*),则有 ( x
k
) (x )
*
( xk x * ) p
*
注意到 ( xk ) xk 1, ( x * )
( p) ( ) * p * x x ( x x ) 由上式得 k 1 k x p!
11
下一页
返回
ek 1 ( p ) ( x*) 因此对迭代误差有: p 。这表明迭代过程 p! ek
1
下一页
迭代法
• • • • • • • 一、简单迭代法的概念与结论 二、 Newton迭代法的基本思想 三、牛顿法的几何意义 四、牛顿迭代法的步骤 五、例题 六、其他注意的事项
2
一、简单迭代法的概念与结论
• 简单迭代法又称逐次迭代法,基本思想是构造不动点方程,以求 得近似根。即由方程f(x)=0变换为x=(x), 然后建立迭代格式, •
x0 均收敛。证毕。 R
下一页
14
返回
二. Newton迭代法的基本思想
• 设X K 是f(x)=0的一个近似根,把f(x)在 X K 处作泰勒展开
的邻近连续,并且 / ( x* ) ( x* ) ( p1) ( x* ) 0 (*) ( p ) ( x * ) 0
则该迭代过程在点 x * 邻近是P阶收敛的。
非线性方程求根—牛顿迭代法(新)
非线性方程求根——牛顿迭代法一、牛顿迭代法的基本思想基本思想:将非线性方程逐步归结为某种线性方程求解。
设方程f (x )=0有近似根x k (f `(x k )≠0),将f (x )在x k 展开:(ξ在x 和x k 之间)2()()()()()()2!k k k k f f x f x f x x x x x ξ'''=+-+-()()()()k k k f x f x f x x x '≈+-可设记该线性方程的根为x k +1,则()()()0k k k f x f x x x '+-=1()()k k k k f x x x f x +=-'故f (x )=0可近似表示为即为Newton 法迭代格式。
(k =0,1,……)例:用Newton 迭代法求方程310x x --=在x 0=1.5附近的近似实根。
解:32()1,()31f x x x f x x '=--=-迭代公式为312131kk k k k x x x x x +--=--计算步骤如下:(1)取初值x 0=1.5;(2)按照迭代公式计算x 1;(3)若|x 1-x 0|<=0.00001,终止迭代;否则,x 0=x 1;转(2);(4)输出迭代次数和近似根.二、牛顿迭代法的实现MATLAB求解程序设计:方程及一阶导数函数:function[fun,dfun]=fun0(x)fun=x^3-x-1;%求原函数的值dfun=3*x^2-1;%求一阶导数的值计算主程序:clearx0=1.5;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=1;while abs(x1-x0)>1e-5x0=x1;[fun,dfun]=fun0(x0);x1=x0-fun/dfun;i=i+1;enddisp('the solution is x1=')x1disp('the iter time is ')i计算结果为:the solution is x1=x1 =1.3247the iter time isi =4可见经过4次迭代即到达要求的精度,原方程的一个近似实数根为1.3247.三、牛顿迭代法的收敛性牛顿迭代法的迭代函数:)()()(x f x f x x '-=ϕ222)]([)()()]([)()()]([1)(x f x f x f x f x f x f x f x '''='''-'-='ϕ设f (x *)=0,f `(x *)≠0,则ϕ`(x *)=0,故Newton 迭代法在x *附近至少平方收敛。
数值分析第四章 解非线性方程的迭代法
即
(xk+1-α)2≈(xk-α)(xk+2-α) xk+12-2xk+1α+α2≈xkxk+2-(xk+xk+2)α+α2
解得
x k x k + 2 x k2+1 α≈ x k + 2 2 x k +1 + x k
( x k +1 x k ) 2 = xk x k + 2 2 x k +1 + x k
可见,|xk-xk-1|充分小可保证|xk-α|充分小, 而且对任 一ε>0,要使|xk-α|<ε, 只要 k > ln ε (1 L) ÷ ln L x1 x 0
证 记(x)=(x)-x,则(a)=(a)-a≥0, (b)=(b)b≤0, 由(x)的连续性,必存在α∈[a,b]使(α)=(α)-α=0, 即α=(α), 又′(x)=′(x)-1<0, 所以x=(x)的根唯一. |xk+1-xk|=|(xk)-(xk-1)| =|′(ξ)(xk-xk-1)|≤L|xk-xk-1| |xk+1-α|=|(xk)-(α)|=|′(ξ)(xk-α)|≤L|xk-α| |xk-α|=|(xk-xk+1)+(xk+1-α)| ≤|xk-xk+1|+|xk+1-α|≤L|xk-xk-1|+L|xk-α| 于是有:
k 0 1 2 3 4 5 xk 0.5 0.60653 0.54524 0.57970 0.56006 0.57117 |xk-xk-1| 0.10653 0.06129 0.03446 0.01964 0.01111 k 6 7 8 9 10 xk 0.56486 0.56844 0.56641 0.56756 0.56691 |xk-xk-1| 0.00631 0.00358 0.00203 0.00115 0.00065
牛顿迭代法的数值实验和仿真
牛顿迭代法的数值实验和仿真牛顿迭代法是一种广泛应用于求解非线性方程的方法。
它的基本思想是通过不断接近方程的根,使得函数在根附近的一段区间内表现出线性的特征,从而不断逼近方程的解。
在本文中,我们将介绍牛顿迭代法的数值实验和仿真,并通过实例来展示该方法在实际问题中的应用。
1. 牛顿迭代法的原理牛顿迭代法的原理是利用泰勒级数来逼近函数的根。
具体来说,对于非线性方程 f(x) = 0,我们首先可以通过牛顿迭代公式:$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$来计算出一个初始解 $x_0$,然后不断通过公式进行迭代,直到满足一定的收敛条件。
其中,$f'(x)$ 表示 $f(x)$ 对 $x$ 的导数,也就是函数的斜率。
这个公式的推导是通过将函数在 $x_n$ 处进行一阶泰勒展开得到的。
2. 牛顿迭代法的数值实验为了验证牛顿迭代法的有效性,我们可以进行一些简单的数值实验。
现在考虑求解方程 $x^3 - 5x^2 + 3x -7 = 0$ 在 $[1,2]$ 中的解。
我们首先可以通过图像观察到该方程在1 到2 之间有一个根。
我们可以用 Matlab 程序来实现迭代计算,代码如下:function [x,it] = newton(f,df,x0,tol,maxit)for it = 1:maxitx = x0-f(x0)/df(x0);if abs(x-x0) < tol, return, endx0 = x;enderror('Maximum number of iterations reached')在代码中,f(x) 和 df(x) 分别表示要求解的方程和其一阶导数。
tol 表示迭代的停止条件,如果$|x_{n+1}-x_n|<tol$,则停止迭代。
maxit 表示最大的迭代次数,如果迭代次数超过了该限制,则停止迭代。
我们可以通过调用该程序,输入相应的参数来进行数值实验。
非线性方程的二分法-迭代法-松弛迭代法-Aitken迭代法-Steffensen迭代法
err=input('请输入最大极限err=\n');
k=0;
y=fun(x0)
z=fun(y)
x1=x0-(y-x0)^2/(z-2*y+x0)
cha=abs(y2-y1);
y1=y2;
x2=x3;
ifk>N
disp('超过迭代次数!');
break;
end
end
x=x2;
k;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=Steffensen()
x0=input('输入初值x0=\n');
b=c;
elseifyb*yc>0
b=c;
yb=yc;
else
a3;b)/2;
k;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%
function[x,k]=diedai1()
x0=input('输入初值x0=\n');
N=input('请输入最大迭代次数N=\n');
【实验内容】
1、二分法
假定方程 在区间 内有唯一的实根 。此时, 即为有根区间。
1.1基本思想:
首先确定有根区间,然后平分有根区间,通过判断区间端点处的函数值符号,逐步将有根区间缩小,直至有根区间足够地小,便可求出满足给定精度要求的根 的近似值。
1.2算法过程:
取 ,将 代入方程 ,判断它的正负号,并用 替换与它同方向的区间端点,依次循环得到:
2、迭代法
2.1基本思想:
非线性方程组迭代法
实验二 非线性方程的数值解法1.1 实验内容和要求在科学研究和工程技术中大量的实际问题是非线性的,求非线性方程()0f x =满足一定精确度的近似根是工程计算与科学研究中诸多领域经常需要解决的问题。
实验目的:进一步理解掌握非线性方程求根的简单迭代法、埃特金Aitken 加速法、牛顿迭代法的思想和构造。
实验内容: 求方程2320x x x e -+-=的实根。
要求:(1)设计一种简单迭代法,要使迭代序列收敛,然后再用埃特金Aitken 加速迭代,计算到-8110k k x x --<为止。
(2)用牛顿迭代法,同样计算到-8110k k x x --<(3)输出迭代初值、迭代次数k 及各次迭代值,并比较算法的优劣。
1.2 算法描述普通迭代法计算步骤:(1)给定初始近似值0x ,eps 为精确度。
(2)用迭代公式x =x 2+2−e x 3进行迭代,直到-8110k k x x --<为止。
埃特金Aitken 加速迭代法计算步骤:(1)将()0f x =化成同解方程()x x ϕ=()k k y x ϕ= ,()k k z y ϕ=21()2k k k k k k k y x x x z y x +-=--+=22k k k k k kx z y z y x --+ (2)计算到-8110k k x x --<为止。
牛顿法计算步骤:给定初始近似值0x ,1ε为根的容许误差,2ε为()f x 的容许误差,N 为迭代次数的容许值。
计算00(),()f x f x '(1)如果0()0f x '=或者迭代次数大于N ,则算法失败,结束;否则执行(2)(2)按公式0100()()f x x x f x =-'迭代一次,得到新的近似值1x ,计算11(),()f x f x ' (3)如果101x x ε-<或者12()f x ε<,则迭代终止,以1x 作为所求的根,结束;否则执行(4)(4)以111(,(),())x f x f x '代替000(,(),())x f x f x ',转步骤(1)继续迭代。
7、解非线性方程的迭代法
(1.1)
2. 超越方程, 如 : x e x 0.
如果f ( x)可以分解为 f ( x) ( x x*)m g ( x), 其中0 | g ( x*) | , m为正整数. 则称x * 为f ( x)的m重零点.
此时 f ( x*) f ( x*) f ( m 1) ( x*) 0, f ( m) ( x*) 0.
k 0 1 2 3 4 5 6 7 xk 1.5 1.35721 1.33086 1.32588 1.32494 1.32476 1.32473 1.32472
3 (2) xk 1 xk 1, x0 1.5, x1 2.375, x2 12.39, .
二、不动点的存在性与迭代法的收敛性
二、斯蒂芬森迭代法
把不动点迭代与埃特金加速技巧结合,得到斯蒂芬森 ( Steffensen)迭代法 yk ( xk ), zk ( yk ),
( yk xk ) 2 xk 1 xk zk 2 yk xk
改写为另一种不动.4)
k 0 1 2 3 ׃ xk x0 x1 x2 x3 ׃ 迭代法(1) 2 3 9 87 ׃ 迭代法(2) 2 1.5 2 1.5 ׃ 迭代法(3) 2 1.75 1.73475 1.732631 ׃ 迭代法(4) 2 1.75 1.732143 1.732051 ׃
定义2 设迭代过程xk 1 ( xk )收敛于x*,误差ek xk x*, 若 lim
例6 求方程3x 2 e x 0在[3,4]中的解.
解: 取对数得x 2 ln x ln 3 g ( x), 构造迭代法 xk 1 2 ln xk ln3 2 2 ( x) , max ( x) 1, 当x [3,4], ( x) [3,4], x 3 x 4 3 由定理2迭代收敛. x0 3.5, x16 3.73307 .
实验五 用Newton法计算方程的根
五. 讨论分析当初始值选取离零点较远时将导致算法无法使用,例如第三题,将初始值改为2就无法计算出结果了,显示如下例如求020sin 35=-+-x x e x 的根,其中控制精度1010-=eps ,最大迭代次数40=M ,在steffensen 加速迭代方法的程序中,我们只需改动:it_max=40; ep=1e-10, 其余不变 。
利用以上程序,我们只需输入:phi=inline('exp(5*x)-sin(x)+(x)^3-20');[x_star,index,it]=steffensen(phi,0.5)可得:x_star = 0.637246094753909index = 0it = 41观察上述结果,index = 0,it = 41表明迭代失败,所以使用以上方法估计的时候,应该尽量估计出解的范围,偏离不应过大,距离增加迭代次数增加,也有可能迭代失败六. 改进实验建议根据上述分析,我认为,应该先对函数作一个简图,方便知道解的大概位置,然后我们才将这个大概值代入Newton 法或者Steffensen 中进行求解。
当然,我们可以用其他数学软件实现Newton 迭代法,我们可以用z-z 超级画板,其操作流程为:牛顿迭代法的公式是:x n+1=x n-f(x n)/f'(x n)。
下面我们就用牛顿迭代法设计程序求方程f(x)=ln(x)+2*x-6的近似解。
(一)观察方程f(x)=0的零点位置(1)显示坐标系的坐标刻度。
(2)作出函数y=ln(x)+2*x-6的图像,如下图所示:可以观察到方程的根在区间[2,3]上,我们可以设定近似解的初始值为2。
(二)设计求方程近似解的程序(1)在程序工作区中输入:f(x){ln(x)+2*x-6;}执行后,返回结果为:>> f(x) #这表示在计算机已经完成了函数f(x)的定义。
(2)定义f(x)的导函数g(x),在程序工作区中输入:Diff(f(x),x);执行后,返回结果为:>> 2+1/x #得到了f(x)的导函数。
5-非线性方程组的数值解法及最优化方法
1 4 0
非线性方程组的数值解法
x10=0; x20=0; k=0; while 1 k=k+1; x1k=(1+x20-0.1*exp(x10))/4; x2k=(x10-x10^2/8)/4; %雅克比迭代法 %x2k=(x1k-x1k^2/8)/4; %高斯-赛德尔迭代法 err1=abs(x1k-x10); err2=abs(x2k-x20); err=max(err1,err2); if err<=0.00000000005 break; end x10=x1k; x20=x2k; end
0.0000055305 0.0000001511 0.0000000041 0.0000000001
非线性方程组的数值解法
牛顿迭代法:根据求解非线性方程的牛顿迭代法,如果已经 k k T ,则 ,, xn 给出方程组 Fx 0 的一个近似根 xk x1k , x2 可把函数 Fx 的分量 fi x, i 1,2,, n 在 x k 处按多元函数泰 勒公式展开,取其线性部分做近似,得
(0.2325668498,0.0564514831) (0.2325670008,0.0564515487) (0.2325670050,0.0564515196) (0.2325670051,0.0564515197) (0.2325670051,0.0564515197)
0.0002023950
所以有
1 x φx 1 2 x1
0
T
取初值 x 代公式收敛。
T 0 x 0 , 0 附近 φx 1,所以迭 0,0 ,在
1 1 x 1 e 40 x2 2 1 1 x1 x2 4 16
解非线性方程组的牛顿迭代法
为克服这两个缺点,通常可用下述方法.
(1) 简化牛顿法,也称平行弦法.
xk 1 xk Cf ( xk )
其迭代公式为 (4.7)
C 0,1 ,.
迭代函数 ( x) x Cf ( x).
若在根 x * 附近成立 ( x) 1 Cf ( x) 1 ,即取 0 Cf ( x) 2,则迭代法(4.7)局部收敛.
8
xk
C 2 C
q2
k
1 q
2k
.
对任意 x0 0,总有 q 1,故由上式推知,当 k 时 xk C ,即迭代过程恒收敛. 例8 解 求 115 .
表7 6 计算结果 k 0 1 2 3 4 xk 10 10.750000 10.723837 10.723805 10.723805
f ( x) , f ( x)
由于
( x)
f ( x) f ( x) . 2 [ f ( x)]
假定 x *是 f ( x) 的一个单根,即 f ( x*) 0, f ( x*) 0 , 则由上式知 ( x*) 0 ,于是依据定理4可以断定,牛顿法 在根 x *的邻近是平方收敛的.
准备 迭代
x0 ,计算 f 0 f ( x0 ), 选定初始近似值
步骤2
按公式
x1 x0 f 0 / f 0
迭代一次,得新的近似值 x1,计算 f1 f ( x1 ), f1 f ( x1 ). 步骤3 控制
x1 满足 1 如果
f1 2 ,则终 或
5
止迭代,以 x1作为所求的根;否则转步骤4. 允许误差,而
3
又因
( x*)
f ( x*) , f ( x*)
数值分析 数值分析 Newton迭代法求解非线性方程实验
}//计算出u[i][j]并输出.
第二部分 for(i=k+1;i<n;i++)
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("%Lf\n",l[i][k]);
{s=0.0;
for(r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][k];}
l[i][k]=(a[i][k]-s)/u[k][k];
printf("l[%d][%d]%Lf\n",i,k,l[i][k]);}
}
}
六、实验结果
七、上机实验体会
在这个试验中同样叶出现了很多问题,对L,U的求解输出中,输出的位置的不同,结果也就会出差错.经过多次调整,结果总算输出了.
通过此次试验,我理解了多重循环的运用,并了解了古人的聪明智慧,]讲将复杂问题简单化,现在的大学生们,应该学习他们的创新及钻研精神。
for(k=0;k<n;k++)
{for(j=k;j<n;j++)
{s=0.0;
for (r=0;r<k-1;r++)
{s=s+l[k][r]*u[r][j];}
u[k][j]=a[k][j]-s;
printf("u[%d][%d]=%Lf\n",k,j,u[k][j]); }
for(i=k+1;i<n;i++)
改进的牛顿迭代法求解非线性方程
改进的牛顿迭代法求解非线性方程史思总 西南科技大学摘要:将非线性方程线性化,以线性方程的解逐步逼近非线性方程的解,是牛顿迭代法的基本思想。
牛顿法具有收敛快、稳定性好、精度高等优点,是目前求解非线性方程的有效方法之一。
牛顿法每次迭代时都需要计算函数值和导数值,计算量较大,当导数值提供有困难时,牛顿法将不再适用于求解非线性方程组。
针对这种情况,提出了一种改进牛顿法——弦截法。
为避免求导,弦截法采用差商近似导数,以差商方式解决求导问题。
实践证明,弦切法优于大部分迭代法,仅次于牛顿法。
关键词:牛顿法、弦截法、非线性方程、差商一、牛顿法的迭代公式设)(x f 在其零点*x 附近一阶连续可微,且0)(≠'x f ,当0x 充分接近*x 时,由Taylor 公式有:))(()()(000x x x f x f x f -'+≈ (1)以方程0))(()(000=-'+x x x f x f (2)近似方程0)(=x f ,其解)()(0001x f x f x x '-= (3) 可作为方程的近似解,重复上述过程,得迭代公式),1,0(,)()(1 ='-=+n x f x f x x n n n n (4) 该方法称为牛顿迭代法。
牛顿法是一种不动点迭代法,其迭代函数为()()()f x x x f x ϕ=-' (5) 从几何上看,牛顿法是以曲线的切线与x 轴的交点作为曲线与x 轴的交点的近似。
故牛顿法也是一种切线法。
二、牛顿法的改进——弦截法为了避免牛顿法中计算导数,弦截法中采用差商代替导数。
避免了某些情况下由于不能求取导数值而迭代失效。
2.1差商的定义设有函数012(),,,,...f x x x x 为一系列互不相等的点,称()()()i j i j f x f x i j x x -≠-为()f x 关于,i j x x 的一阶差商(也称均差),记为[,]i j f x x ,即()()[,]i j i j i j f x f x f x x x x -=- (6)2.2弦截法在牛顿迭代公式(3)中,用差商()()i j i j f x f x x x --代替导数'()n f x 得到迭代公式111()()()(1,2,...)n n n n n n n f x f x x x x x n x x -+--=--=- (7) 按式(7)计算方程的近似解称为弦截法。
不动点迭代法求方程的根
实验报告
专业班级:学号:姓名:
实验名称:用不动点迭代法解非线性方程
1.实验目的:
(1)掌握不动点迭代法求根的方法
(2)学会运用C语言编写出相应的循环程序,得出方程的解。
2.随着不断的迭代,迭代数值会越来越接近不动点值x0。程序中变量的类型小数点后的位数是一定的,所以,随着不断的迭代,会出现相等的两数,那么,此时的xk可以近似看做方程根x*。
程序流程图
N
Y
4.实验步骤或程序(经调试后正确的源程序)
主要步骤与程序代码,见附件A
附件A实验报告
(适用计算机程序设计类)
专业班级:学号:姓名:
实验步骤或程序:
程序代码:
5.程序运行结果
2.实验内容:
问题:求方程f(x)=x3-x-1=0在x0=1.5附近的根x*。
算法描述:
1)把方程改写成 的形式
2)代入x0=1.5,并反复利用迭代公式 计算
3)对上式得到的序列{xk}求极限lim xk=x*,所求得的x*即为非线性方程的根
3.实验方案(程序设计说明)
算法设计思路:
将x0代入迭代公式,作为第一次迭代结果x1。
利用牛顿迭代法求解非线性代数方程组
利用牛顿迭代法求解非线性代数方程组一、 问题描述在实际应用的很多领域中,都涉及到非线性方程组的求解问题。
由于方程的非线性,给我们解题带来一定困难。
牛顿迭代法是求解非线性方程组的有效方法。
下面具体对牛顿迭代法的算法进行讨论,并通过实例理解牛顿迭代法。
二、 算法基本思想牛顿迭代法求解非线性代数方程组的主要思想是将非线性函数线性化。
下面我们具体讨论线性化过程:令:()()()()⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=0000,,2121 n n x x x x x f x f x f x F (3-1) 则非线性方程组(3-2)()()()0,,,0,,,0,,,21212211===n n n n x x x f x x x f x x x f(3-2)可写为向量形式()0=x F (3-3)()0=x F 成为向量函数。
设()()()()k n k k x x x ,,,21 是方程组(3-2)的一组近似解,把它的左端在()()()()k n k k x x x ,,,21 处用多元函数的泰勒展式展开,然后取线性部分,便得方程组(3-2)得近似方程组()()()()()()()()()()()()()()()()()()()()()()()()()()()0,,,,,,0,,,,,,0,,,,,,1212112122121211211=∆∂∂+=∆∂∂+=∆∂∂+∑∑∑===k j nj k nk k n k nk k n k j nj k nk k k nk k k j nj k nk k k nk k x x x x x f x x x f x x x x x f x x x f x x x x x f x x x f(3-4)这是关于()()()n i x x x k i i k i ,,2,1 =-=∆的线性方程组,如果它的系数矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂n n n n n n x f x f x f x f x f xf x f x f x f212221212111(3-5) 非奇异,则可解得()()()⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡---⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂∂=⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎣⎡∆∆∆-nn n n n n n k n k k f f f x f x f x fx f x f x f x f x f x f x x x21121222121211121 (3-6) 矩阵(3-5)称为向量函数()x F 的Jacobi 矩阵,记作()x F '。
数值分析求解非线性方程根的二分法、简单迭代法和牛顿迭代法说课材料
数值分析求解非线性方程根的二分法、简单迭代法和牛顿迭代法实验报告一:实验题目 一、 实验目的掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。
二、 实验内容1、编写二分法、牛顿迭代法程序,并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 410- ,比较两种方法收敛速度。
2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。
3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭代法求这个方程的最小正根。
4、用牛顿法求方程的根,精确至8位有效数字。
比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。
三、 实验程序第1题:02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。
画图函数:function Test1()% f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0r = 0:0.01:1;y = r + exp(r) - 2plot(r, y);grid on 二分法程序:计算调用函数:[c,num]=bisect(0,1,1e-4)function [c,num]=bisect(a,b,delta)%Input –a,b 是取值区间范围% -delta 是允许误差%Output -c 牛顿迭代法最后计算所得零点值% -num 是迭代次数ya = a + exp(a) - 2;yb = b + exp(b) - 2;if ya * yb>0return;endfor k=1:100c=(a+b)/2;yc= c + exp(c) - 2;if abs(yc)<=deltaa=c;b=c;elseif yb*yc>0b=c;yb=yc;elsea=c;ya=yc;endif abs(b-a)<deltanum=k; %num为迭代次数break;endendc=(a+b)/2;err=abs(b-a);yc = c + exp(c) - 2;牛顿迭代法程序:计算调用函数:[c,num]=newton(@func1,0.5,1e-4) 调用函数:function [y] = func1(x)y = x + exp(x) - 2;end迭代算法:function[c,num]=newton(func,p0,delta)%Input -func是运算公式% -p0是零点值% -delta是允许误差%Output -c牛顿迭代法最后计算所得零点值num=-1;for k=1:1000y0=func(p0);dy0=diff(func([p0 p0+1e-8]))/1e-8;p1=p0-y0/dy0;err=abs(p1-p0);p0=p1;if(err<delta)num=k;%num为迭代次数break;endendc=p0;第2题:由题意得到算式:计算调用函数:[c,num]=newton(@func2,0.02,1e-8)程序:先用画图法估计出大概零点位置在0.02附近。
数值分析实验报告之迭代法求非线性方程的根
数值分析实验报告之迭代法求非线性方程的根1.实验目的掌握迭代法求非线性方程根的基本原理和使用方法,加深对数值计算方法的理解与应用。
2.实验原理迭代法是一种通过不断逼近的方法求解非线性方程的根。
根据不同的函数特点和问题需求,可以选择不同的迭代公式进行计算,如牛顿迭代法、二分法、弦截法等。
3.实验内容本次实验使用牛顿迭代法求解非线性方程的根。
牛顿迭代法基于函数的局部线性逼近,通过不断迭代逼近零点,直至满足收敛条件。
具体步骤如下:Step 1:选择初始点X0。
Step 2:计算函数f(x)在X0处的导数f'(x0)。
Step 3:计算迭代公式Xn+1 = Xn - f(Xn) / f'(Xn)。
Step 4:判断收敛准则,若满足则迭代结束,输出解Xn;否则返回Step 2,继续迭代。
Step 5:根据实际情况判断迭代过程是否收敛,并输出结果。
4.实验步骤步骤一:选择初始点。
根据非线性方程的特点,选择恰当的初始点,以便迭代公式收敛。
步骤二:计算导数。
根据选择的非线性方程,计算函数f(x)的导数f'(x0),作为迭代公式的计算基础。
步骤三:迭代计算。
根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),计算下一个迭代点Xn+1步骤四:判断收敛。
判断迭代过程是否满足收敛条件,通常可以通过设置迭代次数上限、判断前后两次迭代结果的差值是否足够小等方式进行判断。
步骤五:输出结果。
根据实际情况,输出最终的迭代结果。
5.实验结果与分析以求解非线性方程f(x)=x^3-x-1为例,选择初始点X0=1进行迭代计算。
根据函数f(x)的导数计算公式,得到导数f'(x0)=3x0^2-1,即f'(1)=2根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),带入计算可得:X1=X0-(X0^3-X0-1)/(3X0^2-1)=1-(1-1-1)/(3-1)=1-0/2=1根据收敛准则,判断迭代结果是否满足收敛条件。
利用牛顿迭代法求解非线性方程组
利⽤⽜顿迭代法求解⾮线性⽅程组最近⼀个哥们,是⽤⽜顿迭代法求解⼀个四变量⽅程组的最优解问题,从⽹上找了代码去改进,但是总会有点不如意的地⽅,迭代的次数过多,但是却没有提⾼精度,真是令⼈揪⼼!经分析,发现是这个⽅程组中存在很多局部的极值点,是⽤⽜顿迭代法不能不免进⼊局部极值的问题,更程序的初始值有关!发现⾃⼰好久没有是⽤Matlab了,顺便从⽹上查了查代码,⾃⼰来修改⼀下!先普及⼀下⽜顿迭代法:(来⾃百度百科)⽜顿(Newton's method)⼜称为⽜顿-拉夫逊(拉弗森)⽅法(Newton-Raphson method),它是在17世纪提出的⼀种在域和域上近似求解⽅程的⽅法。
多数⽅程不存在求根公式,因此求精确根⾮常困难,甚⾄不可能,从⽽寻找⽅程的近似根就显得特别重要。
⽅法使⽤函数f(x)的的前⾯⼏项来寻找⽅程f(x) = 0的根。
⽜顿迭代法是求⽅程根的重要⽅法之⼀,其最⼤优点是在⽅程f(x) = 0的单根附近具有平⽅收敛,⽽且该法还可以⽤来求⽅程的重根、复根,此时线性收敛,但是可通过⼀些⽅法变成超线性收敛。
另外该⽅法⼴泛⽤于计算机编程中。
设r是f(x)=0的根。
选取x0作为r的初始近似值,过点(x0,f(x0))做曲线的切线,求出该切线与x轴的交点,并求出该点的横坐标,称作x1是r 的⼀次近似。
如此就可以推导出⽜顿迭代公式。
已经证明,如果是的,并且待求的零点是孤⽴的,那么在零点周围存在⼀个区域,只要初始值位于这个邻近区域内,那么⽜顿法必定收敛。
并且,如果不为0, 那么⽜顿法将具有平⽅收敛的性能. 粗略的说,这意味着每迭代⼀次,⽜顿法结果的有效数字将增加⼀倍。
在⽹上查了⼀些代码,都是能指定某⼏个函数进⾏求导的,⽽且要是改变函数的个数,却⼜要对原始程序⼤动⼲⼽。
真的是揪⼼。
找到了这个程序,貌似在Matlab上不能很好的运⾏,对于数据的返回值为空没有做处理,后来⼜找了⼀个⽹易朋友的博客,将他的代码拿过来跑跑,还可以,但是对于不同的函数⽅程组,以及变量个数就不同了,真的是揪⼼,这个就是程序设计和编码的问题了!⾃⼰就拿来改了改,可以⽀持多⽅程组和多变量了!下⾯附上我的代码!求⼤家指导![python]1. function [r,n]=mulNewton(x0,funcMat,var,eps)2. % x0为两个变量的起始值,funcMat是两个⽅程,var为两个⽅程的两个变量,eps控制精度3. % ⽜顿迭代法解⼆元⾮线性⽅程组4. if nargin==05. x0 = [0.2,0.6];6. funcMat=[sym('(15*x1+10*x2)-((40-30*x1-10*x2)^2*(15-15*x1))*5e-4')...7. sym('(15*x1+10*x2)-((40-30*x1-10*x2)*(10-10*x2))*4e-2')];8. var=[sym('x1') sym('x2')];9. eps=1.0e-4;10. end11.12. n_Var = size(var,2);%变量的个数13. n_Func = size(funcMat,2);%函数的个数14. n_X = size(x0,2);%变量的个数15.16. if n_X ~= n_Var && n_X ~= n_Func17. fprintf('Expression Error!\n');18. exit(0);19. end20.21. r=x0-myf(x0, funcMat, var)*inv(dmyf(x0, funcMat, var));22. n=0;23. tol=1;24. while tol>=eps25. x0=r;26. r=x0-myf(x0, funcMat, var)*inv(dmyf(x0, funcMat, var));27. tol=norm(r-x0);28. n=n+1;29. if(n>100000)30. disp('迭代步数太多,⽅程可能不收敛');31. return;32. end33. end34. end % end mulNewton[python]1. function f=myf(x,funcMat, varMat)2. % 输⼊参数x为两个数值,func为1*2符号变量矩阵,var为1*2符号变量矩阵中的变量3. % 返回值为1*2矩阵,内容为数值4.5. n_X = size(x,2);%变量的个数6. f_Val = zeros(1,n_X);7. for i=1:n_X8. tmp_Var = cell(1,n_X);9. tmp_X = cell(1,n_X);10. for j=1:n_X11. tmp_Var{j} = varMat(1,j);12. tmp_X{j} = x(1,j);13. end14. f_Val(i) = subs(funcMat(1, i), tmp_Var, tmp_X);15. end16. f=f_Val;17. end % end myf[python]1. function df_val=dmyf(x, funcMat, varMat)2. % 返回值为2*2矩阵,内容为数值3. %df=[df1/x1, df1/x2;4. % df2/x1. df2/x2];5. n_X = size(x,2);%变量的个数6. df =cell(n_X, n_X);7. for i=1:n_X8. for j=1:n_X9. df{i,j} = diff(funcMat(1, i), varMat(1, j));10. end11. end12.13. df_val=zeros(n_X, n_X);14.15. for i=1:n_X16. for j=1:n_X17. tmp_Var = cell(1,n_X);18. tmp_X = cell(1,n_X);19. for k=1:n_X20. tmp_Var{k} = varMat(1,k);21. tmp_X{k} = x(1,k);22. end23. df_val(i,j) = subs(df{i,j}, tmp_Var, tmp_X);24. end25. end26. end % end dmyf。
方程求解
引例:路灯照明
3. 模型 G1 在 X 点的照度 I1 h1 2 2 E1 = 2 sin α1 , r1 = h1 + x , sin α1 = r1 h12 + x2 G2 在 X 点的照度
I2 h2 2 2 E2 = 2 sinα2 , r2 = h2 + (s − x) , sinα2 = 2 r2 h2 + (s − x)2
xm
I 11 / 3 = 1/3 s 1/3 I1 + I 2
主 页
上一页
下一页
引例:路灯照明
对于P1=2000W,P2=3000W,s=20m 可算得 I11/3=12.60,I21/3=14.42,N=27.02 xm=20×12.60/27.02=20 × 0.466=9.326 h1=xm/1.414=6.59,h2=(s-xm)/1.414=7.55
令 P1=2000W,P2=3000W,h1=5m,h2=6m,s=20m. 可求得 x =(0.028, 9.34,19.98) E =(81.98,18.24,84.48) xe = 9.34
上一页 下一页 主 页
3) 关于 h2, 最大化最暗点的照度 E(x, h2) 给定 h1, 对于每个 h2 都存在一个最小照明点 xm(h2) 求 h2*使得在其最小照明点xm(h2*)处照度最高. 即
下一页
主 页
上一页
下一页
主 页
引例:路灯照明
2) 最暗照明点
dE1 3I1h1 x =− 2 dx (h1 + x 2 )5/ 2
dE2 3I 2 h2 ( s − x) = 2 dx (h2 + ( s − x) 2 )5/ 2