牛顿迭代法实验报告
- 格式:doc
- 大小:131.50 KB
- 文档页数:5
MAAB计算方法迭代法牛顿法二分法实验报告实验目的:比较MAAB计算方法中迭代法、牛顿法和二分法的优缺点,探究它们在求解方程中的应用效果。
实验原理:1、迭代法:将方程转化为x=f(x)的形式,通过不断迭代逼近方程的根。
2、牛顿法:利用函数在特定点的切线逼近根的位置,通过不断迭代找到方程的根。
3、二分法:利用函数值在区间两端的异号性质,通过不断二分缩小区间,最终逼近方程的根。
实验步骤:1、选择一元方程进行求解,并根据方程选择不同的计算方法。
2、在迭代法中,根据给定的初始值和迭代公式,进行迭代计算,直到满足预设的迭代精度要求。
3、在牛顿法中,选择初始点,并根据切线方程进行迭代计算,直到满足预设的迭代精度要求。
4、在二分法中,选择区间,并根据函数值的异号性质进行二分,直到满足预设的迭代精度要求。
5、根据计算结果,比较三种方法的求解效果,包括迭代次数、计算时间、求解精度等指标。
实验结果与分析:通过对多个方程进行测试,得到了以下实验结果:1、迭代法的优点是简单易懂,适用范围广,但当迭代公式不收敛时会导致计算结果不准确。
2、牛顿法的优点是收敛速度较快,但需要计算函数的一阶导数和二阶导数,对于复杂函数较难求解。
3、二分法的优点是收敛性较好,不需要导数信息,但收敛速度较慢。
4、对于线性方程和非线性方程的求解,牛顿法和迭代法通常比二分法更快速收敛。
5、对于多重根的方程,二分法没有明显优势,而牛顿法和迭代法能更好地逼近根的位置。
6、在不同的方程和初值选择下,三种方法的迭代次数和求解精度略有差异。
7、在时间效率方面,二分法在收敛速度较慢的同时,迭代次数较少,牛顿法在收敛速度较快的同时,迭代次数较多,而迭代法对于不同方程有较好的平衡。
结论:1、对于不同类型的方程求解,可以根据具体情况选择合适的计算方法。
2、迭代法、牛顿法和二分法各有优缺点,没有绝对的最优方法,需要权衡各种因素选择最适合的方法。
3、在实际应用中,可以根据方程的特点和精度要求综合考虑不同方法的优劣势,以获得较好的求解效果。
《机器学习》课程实验报告实验:牛顿法的实现姓名:彭文婷专业:生物技术学号:20132123012015年5月5日一、 实验内容1. 构建有效迭代公式求1020x e x +-=的解。
2. 利用牛顿法求上述方程的解。
二、 实验结果及分析1.迭代公式为X=(2-e x )/10由于e^x 大于0,则2-10x 大于0,则x 小于0.2X 小于0时,0小于e^x 小于1, 2-10x 大于2因此【0,0.2】为有根区间取初始值X 0=0X1=0.1X2=0.089482908X3=0.090639136X4=0.090512617X5=0.090526468X6=0.090524952X7=0.090525118X8=0.090525019因为X8-X7≤10-6所以X=0.0905250192.牛顿法函数为f (x) = e x +10x-2一阶导数为f ’(x )= e x +10Xn+1 = Xn-f(Xn)/f ’(Xn) = Xn-(e Xn +10Xn-2)/(e Xn +10)初始值X0=0X1=0.090909091X2=0.090525108X3=0.090525101因为X3-X2≤10-6所以X=0.090525101分析:迭代法关键在于选取收敛的迭代公式和选取适当的初始值,而牛顿法更为优化,收敛速度快。
但二者都只能得出局部最优解。
三.实验总结通过练习对迭代法和牛顿法有了更深刻的理解,原本使用计算器算的,但输入过于繁琐,后来在Excel中编辑公式计算简便了很多,但要实现计算机自动计算程还是十分困难,在以后的学习中应尽快掌握C语言编程技能。
MATLAB计算方法迭代法牛顿法二分法实验报告实验报告一、引言计算方法是数学的一门重要应用学科,它研究如何用计算机来解决数学问题。
其中,迭代法、牛顿法和二分法是计算方法中常用的数值计算方法。
本实验通过使用MATLAB软件,对这三种方法进行实验研究,比较它们的收敛速度、计算精度等指标,以及它们在不同类型的问题中的适用性。
二、实验方法1.迭代法迭代法是通过不断逼近解的过程来求得方程的根。
在本实验中,我们选择一个一元方程f(x)=0来测试迭代法的效果。
首先,我们对给定的初始近似解x0进行计算,得到新的近似解x1,然后再以x1为初始近似解进行计算,得到新的近似解x2,以此类推。
直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对复杂方程的迭代计算来评估迭代法的性能。
2.牛顿法牛顿法通过使用函数的一阶导数来逼近方程的根。
具体而言,对于给定的初始近似解x0,通过将f(x)在x0处展开成泰勒级数,并保留其中一阶导数的项,得到一个近似线性方程。
然后,通过求解这个近似线性方程的解x1,再以x1为初始近似解进行计算,得到新的近似解x2,以此类推,直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。
本实验将通过对不同类型的方程进行牛顿法的求解,评估它的性能。
3.二分法二分法是通过将给定区间不断二分并判断根是否在区间内来求方程的根。
具体而言,对于给定的初始区间[a,b],首先计算区间[a,b]的中点c,并判断f(c)与0的大小关系。
如果f(c)大于0,说明解在区间[a,c]内,将新的区间定义为[a,c],再进行下一轮的计算。
如果f(c)小于0,说明解在区间[c,b]内,将新的区间定义为[c,b],再进行下一轮的计算。
直到新的区间的长度小于规定的误差阈值为止。
本实验将通过对复杂方程的二分计算来评估二分法的性能。
三、实验结果通过对一系列测试函数的计算,我们得到了迭代法、牛顿法和二分法的计算结果,并进行了比较。
数值分析实验报告x=0.5;y=x-exp(-x);z=x-y/(1+exp(-x));k=1;while abs(z-x)>=1.0e-8 k=k+1;x=z;y=x-exp(-x);z=x-y/(1+exp(-x));endk如图所示结果为下图2、用Newton 切线法求方程310x x --=在1.5附近的一个根.主要代码:clear; x=1.5; y=x^3-x-1; z=x-y/(3*x^2-1); k=1;while abs(z-x)>=1.0e-8 k=k+1; x=z; y=x^3-x-1; z=x-y/(3*x^2-1); end k z 如图所示结果为下图3、用Newton 切线法计算3k =,4k =时,方程2(2)(3)0k x x --=在1.3附近的根(2)以及2.5附近的根(3)K=3时在1.3附近的根主要代码:clear;x=1.3;y=(x-sqrt(2))^3*(x^2-3);m=3*(x^2 - 3)*(x - 2^(1/2))^2 + 2*x*(x - 2^(1/2))^3; z=x-y/m;k=1;while abs(z-x)>=1.0e-8k=k+1;x=z;y=(x-sqrt(2))^3*(x^2-3);m=3*(x^2 - 3)*(x - 2^(1/2))^2 + 2*x*(x - 2^(1/2))^3;z=x-y/m;endk结果为下图K=4时在1.3附近的根主要代码结果为下图K=4时在2.5附近的根主要代码clear;x=2.5;y=(x-sqrt(2))^4*(x^2-3);m= 4*(x^2 - 3)*(x - 2^(1/2))^3 + 2*x*(x - 2^(1/2))^4; z=x-y/m;k=1;while abs(z-x)>=1.0e-5k=k+1;x=z;y=(x-sqrt(2))^4*(x^2-3);m= 4*(x^2 - 3)*(x - 2^(1/2))^3 + 2*x*(x - 2^(1/2))^4; z=x-y/m;endkz结果为下图K=3时在2.5附近的根主要代码结果为下图四、调试和运行程序过程中产生的问题及采取的措施:1、编译时,想用diff求出y的一阶导数,但出现错误,必须把x变成syms形式,编译过程出现错误,就采取把y的一阶导数先算出来,带入newton迭代公式中,程。
实习报告一、实验目的通过上机实习,利用计算机编程进行数值分析课程中关于牛顿迭代法的求解。
由于所需迭代次数较多、数据运算复杂,手工求解非常困难甚至无法进行,通过计算机编程实现相应的算法可以大大提高计算效率和准确率。
二、实验原理牛顿法是求方程f(x)=0近似根的重要方法,是非线性方程线性化的方法。
牛顿迭代法的一般迭代公式:x n+1=x n-f(x n)/f’(x n) n=0,1,2……牛顿迭代法就是用线性的根来逐步逼近方程f(x)=0的跟x*,因而也称为切线法。
三、实验过程1、问题题目:求f(x)=x^3+x^2-3*x-3=0在1.5附近的根,初始值取1.0,1.5,2.5,要求根的精度为0.000001。
2、实验环境本实验在C#环境下进行编程实现。
3、编程思路使用C#建立一个窗体应用程序并进行界面设计,界面包括三个文本框,分别用于输入初始值、输出迭代次数、输出近似值。
同时包括三个按钮,单击按钮时实现的功能分别是进行迭代计算、清空文本框内容以便进行下一次运算、退出程序。
单击Calculate按钮时,首先将初始值输入文本框的值赋给一个double变量,然后设计了一个使用牛顿迭代公式的循环结构,通过判断前每一次迭代后的结果和前一次迭代的值进行比较,当两者相差不超过0.000001时终止循环,并将循环的次数和最后的近似值在下面两个文本框中显示。
设计界面如图所示:所用代码如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace ZUOYE{publicpartialclass Form1 : Form{public Form1(){InitializeComponent();}privatevoid button1_Click(object sender, EventArgs e){double a = double.Parse(txtInput.Text);double b = a - (a * a * a + a * a - 3 * a - 3) / (3 * a * a + 2 * a - 3); int num = 1;for(num=1;System.Math.Abs(a-b)>0.000001;num++){double temp = b;b = temp - (temp * temp * temp + temp * temp - 3 * temp-3) / (3 * temp *temp + 2 * temp - 3);a = temp;}txtNum.Text = num.ToString();txtOutput.Text = Math.Round(b, 6).ToString();}privatevoid button3_Click(object sender, EventArgs e){this.Close();}privatevoid button2_Click(object sender, EventArgs e){txtInput.Clear();txtNum.Clear();txtOutput.Clear();}}}四、实验结果1、当初始值为1.0时:2.初始值为1.5时:3.初始值为2.5时:五、实验总结通过进行上机实习,动手进行相关算法的编程实现,使我对牛顿迭代法的原理有了更加深刻的认识和理解。
一、实验目的1. 了解π的定义及其重要性。
2. 掌握使用不同方法计算π的原理和步骤。
3. 比较不同方法计算π的精度和效率。
二、实验原理π(派)是一个数学常数,表示圆的周长与直径的比值。
在数学、物理、工程等领域中,π具有广泛的应用。
π的近似值通常取3.14159,但实际上π是一个无理数,其小数位数无限不循环。
本实验通过以下几种方法计算π的近似值:1. 牛顿迭代法2. 阿基米德法3. 蒙特卡洛法三、实验步骤1. 牛顿迭代法(1)选择初始值x0,通常取x0=3。
(2)根据牛顿迭代公式x1 = x0 - f(x0)/f'(x0)计算下一个近似值。
(3)重复步骤(2),直到满足精度要求。
2. 阿基米德法(1)在坐标轴上画一个半径为1的圆。
(2)画一个内接正六边形,计算其面积S1。
(3)画一个外切正六边形,计算其面积S2。
(4)计算π的近似值:π ≈ 6(S2 - S1)。
3. 蒙特卡洛法(1)在坐标轴上画一个半径为1的圆。
(2)随机生成N个点,计算其中落在圆内的点的数量M。
(3)计算π的近似值:π ≈ 4M/N。
四、实验结果与分析1. 牛顿迭代法选择初始值x0=3,精度要求为10^-6。
经过迭代,计算得到π的近似值为3.1415926535。
2. 阿基米德法选取内接正六边形的边长为1,外切正六边形的边长为2。
计算得到π的近似值为3.1415926535。
3. 蒙特卡洛法选取N=10000,计算得到π的近似值为3.1415926535。
三种方法计算得到的π近似值相差不大,但牛顿迭代法和阿基米德法在计算过程中具有较高的精度。
蒙特卡洛法虽然精度较低,但计算简单,适合大规模计算。
五、实验结论1. 本实验通过三种方法计算π的近似值,结果表明,牛顿迭代法和阿基米德法具有较高的精度。
2. 蒙特卡洛法虽然精度较低,但计算简单,适用于大规模计算。
3. π在数学、物理、工程等领域具有广泛的应用,掌握计算π的方法具有重要意义。
一、实验目的本次实验旨在通过牛顿迭代法求解非线性方程的根,并分析牛顿迭代法的原理、过程、优缺点以及在实际应用中的表现。
二、实验原理牛顿迭代法,又称牛顿-拉弗森方法,是一种在实数域和复数域上近似求解方程的方法。
其基本思想是利用函数的一阶导数来寻找函数的零点,即函数的根。
设函数f(x)在x0附近连续可导,且f(x0)≠0,那么牛顿迭代法的迭代公式为:x_{n+1} = x_n - f(x_n) / f'(x_n)其中,x_n表示第n次迭代得到的近似根,f(x_n)表示函数在x_n处的函数值,f'(x_n)表示函数在x_n处的导数值。
三、实验过程1. 选择初始值:根据题目要求,选择一个接近方程根的初始值x0。
2. 迭代计算:根据牛顿迭代法公式,计算x1,x2,...,直到满足误差要求。
3. 误差分析:计算每次迭代后近似根与实际根之间的误差,分析迭代过程是否收敛。
四、实验结果与分析1. 实验结果:以方程f(x) = x^3 - 3x + 2 = 0为例,选取初始值x0 = 1,经过6次迭代后,近似根x6 ≈ 1.324718,实际根为x ≈ 1.324717957244746。
2. 结果分析:(1)收敛性:从实验结果可以看出,牛顿迭代法在求解方程f(x) = x^3 - 3x + 2 = 0时具有较好的收敛性。
(2)误差分析:通过计算迭代过程中的误差,可以观察到误差随着迭代次数的增加逐渐减小,说明牛顿迭代法具有较好的精度。
(3)迭代次数:在本次实验中,经过6次迭代即可达到误差要求,说明牛顿迭代法具有较高的效率。
(4)适用范围:牛顿迭代法适用于连续可导且导数不为零的函数,对于不可导或导数为零的函数,牛顿迭代法可能无法得到有效的解。
五、实验结论1. 牛顿迭代法是一种有效的求解非线性方程根的方法,具有较好的收敛性和精度。
2. 牛顿迭代法在实际应用中具有较高的效率,适用于求解连续可导且导数不为零的函数。
用牛顿迭代法求方程的根一、 实验目的1. 用牛顿迭代法求解方程的根2. 了解迭代法的原理3. 改进和修缮迭代法二、 实验原理给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。
1. 如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2.2. 计算()()0001x f x f x x '-=. 3. 若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4.4. 令10x x =,转向1.三、 实验题目求方程()03323=--+=x x x x f 在5.1附近的根。
四、 程序代码function Newtondiedai(f,a,b) %f 为a,b 是方程根的取值区间[a ,b]x1=a;% x1,x2为迭代中的Xn.Xn+1.x2=0; %最后输出的方程的根n=100;%迭代次数eps=1.0e-6;%根的容许误差ea=1.0e-8;%|f(x)|的容许误差df=diff(sym(f));%求导%求方程某点的值f1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);%当端点的函数值为0的时候,直接输出根if(f1==0)x2=a;x2endif(f2==0)x2=b;x2endfor(i=1:n)f1=subs(sym(f),findsym(sym(f)),x1);dfx=subs(sym(df),findsym(sym(df)),x1);x2=x1-f1/dfx;%迭代方程if(abs(x2-x1)<eps||abs(subs(sym(f),findsym(sym(f)),x2)<ea)) %当根的容许误差或f(x)|的容许误差都小于设定值的时候输出迭代根x2 %输出方程最后的根i %输出迭代次数returnendx1=x2;end五、求解结果在Mtalab中输入Newtondiedai('x^3+x^2-3*x-3',1,2)输出x2 =1.73205080787106i =6在Mtalab中输入Newtondiedai('x^3+x^2-3*x-3',1.5,2)输出x2 =1.73205080756970i =4六、实验分析1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。
牛顿迭代法的实验报告牛顿迭代法是一种寻找函数零点的方法,它通过通过使用函数的导数来逼近实际零点。
在本实验中,我们使用了牛顿迭代法来求解一元高次方程的根。
实验目的:通过使用牛顿迭代法来求解一元高次方程的根,掌握牛顿迭代法的原理与应用。
实验器材与条件:- 电脑- MATLAB 软件实验原理:设函数 f(x) 在零点 x0 处有一阶导数f’(x0)不等于0,则 f(x)在点 x0 的切线方程为y = f’(x0) (x - x0) + f(x0)。
切线与 x 轴的交点为x1,有:f’(x0)(x1 - x0) + f(x0) = 0由于我们的目标是解方程 f(x) = 0,所以我们需要将上式改写成其中 x1 为由切线得到的下一个逼近值。
通过不断逼近 x1 直到误差满足一定要求,我们就可以以一个很高的精确度求解出方程的根。
实验步骤:本实验的目标是求解方程 x^3 - 2x -2 = 0 的根。
第一步,我们先定义该方程及其导数函数:syms x;f = x^3 - 2*x - 2;df = diff(f);其中 diff() 函数是 MATLAB 默认的求导函数。
第二步,我们设定初始值 x0,设定逼近误差 limit,然后进行牛顿迭代,直到误差小于 limit:x0 = 1;limit = 1e-6;diff_value = inf;while abs(diff_value) > limitx1 = x0 - subs(f, x0) / subs(df, x0);diff_value = subs(f, x1);x0 = x1;endx0通过运行上面的代码,我们可以得到方程的一个根,为 1.7693。
实验结果与分析:本实验顺利完成,我们使用牛顿迭代法成功求出了 x^3 - 2x - 2 = 0 的根,为 1.7693。
此结果与理论值非常接近,表明我们使用牛顿迭代法正确地找到了方程的根。
实验报告课程:数值计算方法与算法班级:20091113实验名称:牛顿迭代法实验姓名:张燕玲实验日期:2011年11月18日学号:2009111303 实验报告日期:2011年11月18日实验牛顿迭代法实验一、实验目的:1.熟悉和掌握牛顿迭代法2.通过实验让我们更加了解牛顿迭代法二、实验设备及实验环境:计算机;Microsoft Visual C++三、实验原理:牛顿迭代法四、程序源代码#include<stdio.h>#include<math.h>#define f(x) x-(x*x*x-3*x-2)/(3*x*x-3)#define x0 1.5#define MAXREPT 1000#define epsilon 0.001void main(){ int i;double x_k=x0,x_k1=x0;for(i=0;i<MAXREPT;i++){printf("Got...%f\n",x_k1);x_k1=f(x_k);if(x_k1-x_k<epsilon && x_k1-x_k>-epsilon){printf("!Root:%f\n",x_k1);return;}x_k=x_k1;}printf("After %d repeate,no solved.\n",MAXREPT);}五、实验结果六、实验心得体会1.经过实验,自己编程,先掌握熟悉弦截法的程序,然后根据弦截法来编出牛顿迭代法实验的程序,学以致用。
2.在编程调试的过程中发现程序的错误,在修改程序中学会了耐心以及发现自己对该单元哪一部部分知识掌握得不好。
3.通过自己编程,既掌握记住了牛顿迭代法又掌握了弦截法,一举两得。
数值分析实验报告之迭代法求非线性方程的根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根据收敛准则,判断迭代结果是否满足收敛条件。
实验十七 牛顿迭代法【实验目的】1. 了解牛顿迭代法的基本概念。
2. 了解牛顿迭代法的收敛性和收敛速度。
3. 学习掌握MATLAB 软件有关的命令。
【实验内容】用牛顿迭代法求方程0123=-++x x x 的近似根,误差不超过310-。
【实验准备】1.牛顿迭代法原理设已知方程0)(=x f 的近似根0x ,则在0x 附近)(x f 可用一阶泰勒多项式))((')()(000x x x f x f x p -+=近似代替.因此, 方程0)(=x f 可近似地表示为0)(=x p .用1x 表示0)(=x p 的根,它与0)(=x f 的根差异不大.设0)('0≠x f ,由于1x 满足,0))((')(0100=-+x x x f x f 解得)(')(0001x f x f x x -= 重复这一过程,得到迭代格式 )(')(1n n n n x f x f x x -=+ 这就是著名的牛顿迭代公式,它相应的不动点方程为)(')()(x f x f x x g -=. 2. 牛顿迭代法的几何解析 在0x 处作曲线的切线,切线方程为))((')(000x x x f x f y -+=。
令0=y ,可得切线与x 轴的交点坐标)(')(0001x f x f x x -=,这就是牛顿法的迭代公式。
因此,牛顿法又称“切线法”。
图17.1 牛顿迭代法3.牛顿迭代法的收敛性 计算可得2)]('[)(")()('x f x f x f x g -=,设*x 是0)(=x f 的单根,有0)(',0)(**≠=x f x f ,则 0)]('[)(")()('2****=-=x f x f x f x g , 故在*x 附近,有1)('<x g .根据不动点原理知牛顿迭代法收敛.4.牛顿迭代法的收敛速度定理(牛顿法收敛定理) 设)(x f 在区间],[b a 上有二阶连续导数,且满足0)()(<b f a f ,)("x f 在],[b a 上不变号,)('x f 在],[b a 上不等于0,令,)("max ,)(min x f M x f m bx a b x a ≤≤≤≤== 有Mm a b 2<-.则对任意],[0b a x ∈,牛顿迭代格式收敛于0)(=x f 在],[b a 中的唯一实根*x ,并且: (1) .12,2*02*<-=≤-x x m M q q M m x x n n (2) .221*--≤-n n n x x mM x x (3) )('2)(")(lim **2**1x f x f x x x x nn n =--+∞→,牛顿迭代法为2阶收敛. 5.迭代过程的加速对不动点方程)(x g x =,它导出的迭代过程有可能发散,也可能收敛得非常缓慢.这时,我们有没有办法改进不动点方程,让迭代过程收敛得快一些呢?(1) 一个简单办法 注意到x x =和)(x g x =都是不动点方程,他们的加权平均x x g x h )1()()(λλ-+=也是不动点方程,而且)(x h 与)(x g 有完全相同的不动点.适当选取λ的值,可以使发散的迭代过程变得收敛,使收敛慢的迭代过程变得收敛迅速.(2)加速的原因 在下面的实验中我们可以看到,)(x h 在不动点*x 附近的导数值在很大程度上决定了迭代过程的收敛性.)('x h 的绝对值越小,收敛性越好.因此,选择λ使得0)('=x h .计算得到理想的λ值为)('11x g -=λ,相应可计算出)('1)(')()(x g x xg x g x h --=. (3) λ的选取 由于理想的λ值为)('11x g -=λ,当)('x g 变换不大时可以取)('0x g 近似计算λ.(4) 回到牛顿迭代法的讨论 为求解方程0)(=x f ,可以使用不动点方程)(x f x x +=,相应的迭代函数为)()(x f x x g +=.对)(x g 进行加速)(')()]('1[1)]('1[)]([)('1)(')()(x f x f x x f x f x x f x x g x xg x g x h -=+-+-+=--=, 所以,牛顿迭代法是对基本迭代格式进行加速的结果.6. 迭代的MATLAB 命令MATLAB 中主要用for, while 等控制流命令实现迭代.【实验方法与步骤】练习1 用牛顿迭代法求方程0123=-++x x x 在5.0=x 附近的近似根,误差不超过310-.牛顿迭代法的迭代函数为1231)(')()(223++-++-=-=x x x x x x x f x f x x g , 相应的MA TLAB 代码为:>>clear;>>x=0.5;>>for i=1:3>>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1)>>end可算得迭代数列的前3项0.5455, 0.5437, 0.5437.近三次迭代,就大大超过了精度要求.练习2用牛顿迭代法求方程)0(2>=a a x .的近似正实根,由此建立一种求平方根的计算方法.由计算可知,迭代格式为)(21)(x a x x g +=.,在实验12的练习4种已经进行了讨论. 练习3用牛顿迭代法求方程1=x xe 的正根.牛顿迭代法的迭代函数为,)1(1)(')()(x x ex xe x x f x f x x g +--=-= 如果取初值为00=x ,相应的MA TLAB 代码为:>>clear;>>x=0.0;>>for i=1:6>>x=x-(x*exp(x)-1)/((x+1)*exp(x))>>end可算得迭代数列的前6项1, 0.6839, 0.5775, 0.5672, 0.5671, 0.5671,说明迭代是收敛的.如果取初值为100=x ,相应的MA TLAB 代码为:>>clear;>>x=10.0;>>for i=1:20>>x=x-(x*exp(x)-1)/((x+1)*exp(x))>>end可算得迭代数列的前20项为9.0909, 8.1900, 7.2989, 6.4194, 5.5544, 4.7076, 3.8844, 3.0933, 2.3487, 1.6759,1.1195, 0.7453, 0.5902, 0.5676, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671, 0.5671说明迭代是收敛的.如果取初值为10-=x ,或5.10-=x ,可算得(MATLAB 代码略去)迭代数列是发散的.请根据函数图形分析原因,练习4求方程x e x -=在5.0=x 附近的根,精确到510-.先直接使用x e x g -=)(的迭代格式, 相应的MA TLAB 代码为:>>n=0; eps=1.0e-5; x=0.5;>>while abs(x-exp(-x))>eps>>p(-x); n=n+1;>>end>>x, n结果为x= 0.5671, n = 17,说明迭代17次后达到精度要求.为加快收敛速度,用x x g x h )1()()(λλ-+=构造迭代格式,由实验的预备知识中可知取625.0)5.0('11≈-=g λ, 相应的MA TLAB 代码为: >>n=0; eps=1.0e-5; x=0.5;>>while abs(x-0.625*exp(-x)-0.375*x)>eps>>x=0.625*exp(-x)+0.375*x; n=n+1;>>end>>x, n结果为x= 0.5671, n = 3,说明迭代3次后达到精度要求..练习5对练习中方程x e x -=,用加快后的迭代格式)('1)(')()(x g x xg x g x h --=求在5.0=x 附近的根,精确到510-. 计算可得xxe e x x g x xg x g x h --++=--=1)1()('1)(')()(, 相应的MATLAB 代码为: >>n=0; eps=1.0e-5; x=0.5;>>while abs(x-(x+1)*exp(-x)/(1+exp(-x)))>eps>>x=(x+1)*exp(-x)/(1+exp(-x)); n=n+1;>>end>>x, n结果为x= 0.5671, n =2,说明迭代2次后达到精度要求.【练习与思考】1. 用牛顿迭代法求方程1ln =x x 的近似根.2. 为求出方程013=--x x 的根,在区间]2,1[内使用迭代函数进行迭代,记录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果.3. 使用在不动点*x 的泰勒公式,证明牛顿迭代法收敛定理.。
牛顿迭代法实训总结一、实验目的及原理通过上述牛顿迭代法实验,我们可以观察到水力坡度不仅与径向压强有关,而且还与径向剪应力和切向压强有关。
因此,当对水流进行控制时,我们必须将切向压强及径向剪应力综合考虑。
设想,将水流分为上下两层:上层为较小面积的稳定层;下层为较大面积的运动层。
如图1所示,在实际工程中,人们往往把稳定层作为输水管道的中间部分。
同时,也会在稳定层内增设一定厚度的保护层,这样可以使运动层承受一部分径向压强,而运动层内的流体又被稳定层阻挡,从而使其不能全部流出。
3))按步骤实验并记录数据,得出实验结论。
1)检查设备,了解仪器的名称、功能及用途。
2)将一支标准刻度的水压力表1支,装满标准容积的量筒2只,并注明它们的正确读数。
3)称取0。
5ln 水于两只量筒中,同时记录正确读数。
在该实验中,选择“ 0。
5— 0。
9”的一段量筒,利用它与固定管直径之比,即可调节管道的水力坡度。
4)将“ 0。
5— 0。
9”的那段量筒移至管内另一端,再次将量筒水位记录于“ 0。
5— 0。
9”处,使其“水头”恰等于管道上游最高水位加“上游水头”,此时,该段量筒就成为正确的“测量杯”。
4)设计方案,测定并记录水力坡度实验时,首先应确定被测定的水力坡度( 0。
02~0。
04)。
其次,要选择合适的管道口径,以便选用合适的刻度水压表。
一般应根据所需水头,使测定的值为工程需要的最小坡度。
5)在安全的前提下,尽可能采用多个刻度水压表。
如图2所示,将一支带有圆弧形的长柄直尺(或三角尺)装在水压力表上,将“水头”标在圆弧形水压力表下方,通过改变量尺长度的方法,使量尺圆弧半径依次变大,由此得到相应的水力坡度。
这种量尺叫做“百分表”。
如果水压力表是可调节式的,则可以通过改变量尺圆弧半径,来改变量尺水头高度,以改变水力坡度。
5)处理数据,绘出图象。
6)按步骤实验并记录数据,得出实验结论。
1)检查设备,了解仪器的名称、功能及用途。
材料科学与工程试验教学中心试验汇报课程名称试验名称牛顿迭代法方程求根专业班级学号姓名试验日期材料科学与工程试验教学中心试验汇报一.试验目经过对牛顿迭代法作编程练习与上机运算, 深入体会牛顿迭代法不一样特点二.试验原理(方法)给定初始值x0, ε为根许可误差, η为|f(x)|许可误差, N为迭代次数许可值。
①假如f′(x0)=0或迭代次数大于N, 则算法失败, 结束; 不然实施②②计算x1=x0-f(x0)/f′(x0)。
③若|x1-x0|<ε或|f(x1)|<η, 则输出x1, 程序结束; 不然实施④④令x0=x1, 转向①三.试验仪器设备及操作步骤电脑一台操作步骤: 打开电脑, 打开VB程序, 编辑程序四.试验数据及处理(N-S图和程序)Private Sub Command1_Click()Dim x0, x!, eps!, kx0 = Val(InputBox("x=0", "ÊäÈë³õÖµ", 0.5))eps = Val(InputBox("eps=", "ÊäÈëepsµÄÖµ", 0.000005)) x = x0 - f(x0) / p(x0)k = 1PrintDo While Abs(x - x0) >= epsPrint "k=" & k, "x=" & x, "f(x)" & f(x)x0 = xk = k + 1x = x0 - f(x0) / p(x0)LoopEnd SubFunction f(ByVal x!) As Singlef = x ^ 3 + x ^ 2 - 3 * x - 3End FunctionFunction p(ByVal x!) As Singlep = 3 * x ^ 2 + 2 * x - 3End Function五.试验结果分析及结论(算例及结果)六.思索题成绩指导老师日期。
用牛顿迭代法求非线性方程的根
一、 实验题目
求方程()013=--=x x x f 在5.1附近的根。
二、 实验引言
(1)实验目的
1. 用牛顿迭代法求解方程的根
2. 了解迭代法的原理
3. 改进和修缮迭代法
(2)实验意义
牛顿迭代法就是众多解非线性方程迭代法中比较普遍的一种,求解方便实用。
三、 算法设计
(1)基本原理
给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。
1.如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2.
2.计算()()
0001x f x f x x '-=. 3.若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4.
4.令10x x =,转向1.
(2)流程图
四、程序设计
program nndd01 implicit none
real,parameter::e=0.005 real,parameter::n=9 real::x1
real::x0=1.5 integer::k
real,external::f,y
do k=1,9
if (y(x0)==0) then write(*,*)"失败"
else
x1=x0-f(x0)/y(x0)
if (abs(x1-x0)<e) then write(*,*)k,x1
else
x0=x1
end if
end if
end do
end
function f(x)
implicit none
real::f
real::x
f=x*x*x-x-1
return
end function
function y(x)
implicit none
real::y
real::x
y=3*x*x-1
return
end function
五、求解结果
3 1.324718
4 1.324718
5 1.324718
6 1.324718
7 1.324718
8 1.324718
9 1.324718
六、算法评价及讨论
1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时
需要迭代6次,而输入区间左端值为1.5时,却只要4次。
初
值更接近方程根时,迭代次数越少。
2.在实验中,都是选取的区间左端值作为初次迭代值,而没有用
到右端,应该设置左右端值作为迭代初值,比较它们的迭代次
数,这样可以得到更少的迭代次数。
3.在编写代码过程中,有几点疑惑,左右两端的导数是否会影响
迭代次数,也就是选取哪个端点值迭代的问题。
4.怎么样求出方程所有的根,在根的附近,得到解后程序就结束
运行,如何将方程所有的根找出。
5.怎么进一步加速迭代将是牛顿法进一步需要改进的问题。
6.迭代过程中,导数值比较小,会导致误差比较大,如何规避。
附:
二分法程序
program erfenfa
implicit none
real::a =1.0000
real ::b=1.5000
real, parameter :: k=0.0050
real x, y1,f, y2
write(*,*)"a=, b="
read(*,*) a , b
do while (b-a>k)
y1=a*a*a-a-1
x=(a+b)/2
f=x*x*x-x-1
y2=f
if(y1*y2>0) then
a=x
else
b=x
end if
write(*,*) x , y2
end do
stop
end
一般迭代法程序
program main
implicit none
real::x0
integer::k
real::x1
integer,parameter::N=9 real,external::f
k=0
x0=1.5
do while (k<=N)
k=k+1
write(*,*) k,x0
x0=f(x0)
end do
end
function f(x)
real::x,f
f=(x+1)**(real(1)/real(3)) return
end。