数值分析迭代加速牛顿法及弦截法
- 格式:pptx
- 大小:441.85 KB
- 文档页数:34
Newton 快速弦截法的实验报告一:实验题目:newton法,快速弦截法。
二:实验目的:通过用MATLAB语言计算newton法,弦截法对两种方法的结果进行分析。
三:实验内容:a:了解MATLAB语言的用法b:用这两种方法求线性方程组四:实验方法与步骤:Newton法Function [x,k]=Mendnewton(f,x0,emg)[f1,d1]=feval(f,x0);k=1;x(1)=x0;x(2)=x(1)-f1/d1;while abs(f1)>emgu=1;k=k+1;[f1,d1]=feval(f,x(k));X(k+1)=x(k)-u*f1/d1;[f2,d2]=feval(f,x(k+1));While abs(f2)>abs(f1)U=u/2;X(k+1)=x(k)-u*f1/d1;[f2,d2]=feval(f,x(k+1));endend例:用牛顿下山法求方程f(x)= 的根,使精度达到10 初值分别选取为:(1)x0=-1;(2)x0=2.0;编写函数名func3.mFunction [f,d]=func3(x)F=sqrt(x^2+1)-tan(x);D1=’sqrt(x^2+1)-tan(x)’;D=subs(diff(d1));在命令窗口输入:f=@func3;[x,k]=Mendnewton(f,x0,10^-6);若选初值为x0=-1;运行结果为:迭代次数k x值f(1)=feval(f,x(k))值1 -7.069047932971935e-001 2.078789280010764e+0002 1.942400972108479e-001 8.219695728408301e-0013 1.163518073303871e+000 -7.838374932606165e-0014 1.023918977930554e+000 -2.113030290935414e-0015 9.530711345686330-001 -2.606996588743926e-0026 9.416925081385333e-001 -5.085688425774393e-0047 9.414616152761416e-001 -2.012113482496858e-0078 9.414615238528302e-001 -3.153033389935445e-014若选初值为x0=2.0;运行结果如下:迭代次数k x值f1(kfeval(f,x(k))值1 2.905969917234289e+000 3.313289980588459e+0002 3.829942435553551e+000 3.135774879468060e+0003 4.382754035040099e+000 1.572413838570136e+0004 4.474505813415593e+000 4.607393526441488e-0015 4.501556126032599e+000 -6.131570643391715e-0026 4.498750820792893e+000 -8.285614610334946e-0047 4.498711866735406e+000 -1.555631969907267e-0078 4.498711859418998e+000 -1.154631945610163e-014 快速弦截法:function [x,k]=Fast_chord(f,x1,x2,emg);k=1;y1=feval(f,x1);y2=feval(f,x2);x(k)=x2-(x2-x1)*y2/(y2-y1);y(k)=feval(f,x(k));k=k+1;x(k)=x(k-1)-(x(k-1)-x2)*y(k-1)/(y(k-1)-y2);while abs(x(k)-x(k-1))>emgy(k)=feval(f,x(k));x(k+1)=x(k)-(x(k)-x(k-1))*y(k)/(y(k)-y(k-1));k=k+1;end用快速弦截法求解方程4cos x=e 的根,要求精度为10 ,初值为:x1=45度;x2=90度编写函数文件func4.mFunction f=func4(x)F=exp(x)-4*cos(x)在命令窗口输入:f=@func4; [x,k]=Fast_chord(f,pi/4,pi/2,10^-6);运行结果如下:迭代次数k x值f1(k)=feval(f,x(k))值1 8.770025972944068e-001 -1.541498847256566e-0012 8.985446421856659e-001 -3.497120992034475e-0023 9.048658349261991e-001 4.359577241643819e-0044 9.047880039957831e-001 -1.201259723249137e-0065 9.047882178657145e-001 -4.102540529515864e-011五:结果分析与讨论:newton迭代法对算法的局部收敛性,优缺点分析如下具有收敛快,形式简单等优点,但它对初始值要求较高,需计算n+n2个函数值及导数值,求解过程计算量较大,它也是一种不动点法,是以曲线的切线与x 轴的焦点作为曲线与x轴的交点的近似值弦截法:对算法的局部收敛性,优缺点等分析如下:弦截法是两步法,他必须给出两组初始值x0,x1,通常取根的端点即可,其收敛速度大概为简单迭代法的1.618倍,从几何上看,弦截法是以曲线上两点的割线与x轴的交点,作为曲线与x轴的交点的近似值,计算结果表明:迭代5次精确度达到8位有效数字,它的收敛速度低于newton迭代法。
数学方法解决非线性方程组非线性方程组在科学、工程和数学领域中具有重要的应用价值。
解决非线性方程组是一个复杂的任务,而数学方法为我们提供了一种有效的途径。
本文将介绍一些常用的数学方法,以解决非线性方程组的问题。
1. 牛顿法牛顿法是一种常用的数值解法,用于求解非线性方程组。
它基于泰勒级数的思想,通过迭代逼近方程组的根。
具体步骤如下:首先,选择一个初始点作为近似解。
然后,根据函数的导数来计算方程组在该点的切线,找到切线与坐标轴的交点。
将该交点作为新的近似解,继续迭代,直到满足收敛条件。
牛顿法具有快速收敛的特点,但在某些情况下可能会陷入局部极小值点。
2. 雅可比迭代法雅可比迭代法也是一种常见的数值解法。
它将非线性方程组转化为线性方程组的形式,然后通过迭代来逼近解。
具体步骤如下:首先,将非线性方程组表示为矩阵形式,其中包含未知数的系数矩阵和常数向量。
然后,将方程组进行变换,使得未知数的系数矩阵变为对角矩阵。
接下来,选择一个初始解向量,并通过迭代计算新的解向量,直到满足收敛条件。
雅可比迭代法适用于大规模的非线性方程组求解,但收敛速度较慢。
3. 高斯-赛德尔迭代法高斯-赛德尔迭代法是雅可比迭代法的改进版本。
它在每次迭代中使用新的解向量来更新未知数的值,从而加快收敛速度。
具体步骤如下:首先,选择一个初始解向量。
然后,通过迭代计算新的解向量,直到满足收敛条件。
高斯-赛德尔迭代法相对于雅可比迭代法而言,可以更快地收敛到解。
它在求解非线性方程组时具有较好的效果。
4. 弦截法弦截法是一种近似求解非线性方程组的方法。
它通过线段的截断来逼近方程组的根。
具体步骤如下:首先,选择一个初始的线段,其中包含方程组的两个近似解。
然后,通过截取线段上的新点,构造新的线段。
重复这个过程,直到满足收敛条件。
弦截法是一种迭代方法,它可以在不需要计算导数的情况下逼近方程组的根。
但是,它的收敛速度比牛顿法和雅可比迭代法要慢。
总结:数学方法提供了一种有效的途径来解决非线性方程组的问题。
实验内容1 用下列方法求方程201303==--x x x 在附近的根,要求准确到四位有效数字。
(1)牛顿法。
(2)单点弦截法(3)双点弦截法2 用Aitken 法求方程0123=--x x 在5.10=x 附近的根,精度要求为410-=ε。
三 实验步骤(算法)与结果1: 用双点弦截法求方程201303==--x x x在附近的根①算法的C 语言代码:#include<stdio.h>#include<math.h>double f(double x){ double f;f=x*x-1/x;return f;}void main(){double y=0,z=0,x;printf("please enter a number near the root: ") ;scanf("%f",&x);for (y=f(x),z=f(y);fabs(z-y)>5e-5;){x=(x*z-y*y)/(x-2*y+z) ;y=f(x);z=f(y);}printf("the root is:") ;printf("X=%-10.4f\n",z);}②实验结果:如下图,按题要求输入2,则可得结果X=1.46562:用Aitken 法求方程0123=--x x在5.10=x 附近的根①算法的C 语言代码:#include<stdio.h>#include<math.h>double f(double x){double f=pow(x,3)-3*x-1;return f;}void main(){double f1,f2,x=2.0,y=1.5,z;for(;fabs(y-x)>5e-5;){f1=f(x);f2=f(y);z=y-f2*(y-x)/(f2-f1);x=y;y=z;}printf("the root is:") ;printf("X=%-10.4f\n",y);}②实验结果:如下图,在程序代码中预先设置接近于根的两个值x1=2.0与x2=1.5作为初值,则可得结果X=1.8794.。