牛顿迭代法实验报告

合集下载

MATLAB二分法和牛顿迭代法实验报告

MATLAB二分法和牛顿迭代法实验报告
(1)计算f(x)在有解区间[a, b]端点处的值。
(2)计算 在区间中点处的值 。
(3)判断若 ,则 即是根,否则检验:
①若 与 异号,则知道解位于区间 ,
②若 与 同号,则知道解位于区间, ,
反复执行步骤2、3,便可得到一系列有根区间:
(4)当 ,则 即为根的近似值。
Newton迭代法原理:设已知方程 的近似根 ,则在 附近 可用一阶泰勒多项式 近似代替.因此,方程 可近似地表示为 .用 表示 的根,它与 的根差异不大.
3.在MATLAB命令行窗口求解方程f(x)
4.得出计算结果
设 ,由于 满足 解得
重复这一过程,得到迭代格式
实验所用软件及版本:MATLAB R2014a
主要内容(要点):
实验过程记录(含:基本步骤、主要程序清单及异常情况记录等):
二分法:
1.在MATLAB编辑器中建立一个实现二分法的M文件bisect.m
2.在MATLAB命令行窗口求解方程f(x)
3.得出计算结果
数学应用软件大型实验实验报告
实验序号:日期:年月日
班级
姓名
学号
实验
名称
二分法和Newton迭代法
问题背景描述:
分别编写一个用二分法和用Newton-Raphson法求连续函数的零点通用程。
实验目的:
用以求方程x^2-3*x+exp(X)=2的正根(要求精度ε=10^-6)。
实验原理与数学模型:
二分法原理:如果函数y=f(x)在闭区间[a,b]上连续,且已知函数在两端点的函数f(a)与f(b)取异号,即两端点函数值的乘积f(a)*f(b)<0,则函数y=f(x)在区间(a,b)内至少有一个零点,即至少存在一点c,使得f(x)=0的解。

牛顿迭代、割线法、二分法算法实验报告

牛顿迭代、割线法、二分法算法实验报告

三、牛顿法计算实验
3.1 牛顿法算法思想和简要描述 我们有一个函数 f,其零点由数值计算得出,设 r 是 f 的一个零点,x 是 r 的一个近似。若 f 的二阶导数存在并且连续,则有泰勒定理,得 0=f(r)=f(x+h)=f(x)+hf ’(x)+o(h^2) 其中 h=r-x。若 h 较小(即 x 在 r 附近) ,则有理由略去 o(h^2)项并且 在余下方程中求 h。即得到 h=-f(x)/f ’(x)。故 x-f(x)/f ’(x)是比 x 更好的一个 近似。牛顿法从 r 的一个估计 x0 开始,得到更加准确的近似值 xn。递推 式定义为: f(xn ) xn+1 = xn − ′ f (xn ) 3.2 MATLAB 运行牛顿法程序 牛顿法求解 f=x^3-9 的根 参数设置:x0 设置为函数 f 零点的近似。 n 设置为牛顿法 for 语句迭代次数。 alpha 设置为最后结果 f(x)的精度。 delta 设置为最后结果 x 的精度。 (若 alpha,delta 都符合设置的计算精度时,结束迭代并得 出计算结果,否则一直迭代到 n 次) 设置初始值:设置参数 x0 分别为为 3;迭代次数 n 为 50 次;alpha 和 delta 都设置为 0.001。 列出计算结果: >> newton(f,50,3,0.001,0.001) n x f(x) delta alpha 1.0000 2.3333 3.7037 0.6667 3.7037 2.0000 2.1066 0.3483 0.2268 0.3483 3.0000 2.0804 0.0043 0.0262 0.0043 Elapsed time is 0.166680 seconds.
4.0000 2.0625 2.1250 5.0000 2.0625 2.0938 6.0000 2.0781 2.0938 7.0000 2.0781 2.0859 8.0000 2.0781 2.0820 9.0000 2.0801 2.0820 10.0000 2.0801 2.0811 11.0000 2.0801 2.0806 12.0000 2.0801 2.0803 13.0000 2.0801 2.0802 14.0000 2.0801 2.0801 elapsed time is 0.316426 seconds.

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告

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计算方法迭代法牛顿法二分法实验报告

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],再进行下一轮的计算。

直到新的区间的长度小于规定的误差阈值为止。

本实验将通过对复杂方程的二分计算来评估二分法的性能。

三、实验结果通过对一系列测试函数的计算,我们得到了迭代法、牛顿法和二分法的计算结果,并进行了比较。

牛顿迭代法实验

牛顿迭代法实验

100
1000 10000
6.00
7.10 6.11
27.00
29.70 30.84
31.00
29.10 30.06
36.00
34.10 32.99
13/16
实验结论:方程 z3 – 1 = 0 在复平面上有三个根
z1 1
取正方形区域 {( x, y ) | 2 x 2, 2 y 2} 内任意点确定复数 z0 x iy 为牛顿迭代法初值
设 x*是方程 f(x)=0 的根, x0是x*的近似值. 在 x0 附近,对函数做局部线性化


f ( x) f ( x0 ) f ( x0 )( x x0 ) f ( x0 ) f ( x0 )( x x0 ) 0 f ( x0 ) x1 x0 f ( x0 )
8/16
实验绘图主程序 function A0=Newtonlab(n) if nargin==0,n=101;end t=linspace(-2,2,n); [x,y]=meshgrid(t); X=roots([1,0,0,-1]); [A0,A1,A2,A3]=Nlab(x,y,X); A=A0+2*A1+3*A2+4*A3; figure(1),pcolor(x,y,A),shading interp figure(2),pcolor(x,y,A0), shading interp
10/16
利用矩阵统计各区域百分比程序
[m,n]=size(A0); N=m*n; II=find(A0==1);N0=length(II); II=find(A1==1);N1=length(II); II=find(A2==1);N2=length(II); II=find(A3==1);N3=length(II); format bank results=100*[N0,N1,N2,N3]/N

Newton迭代法数值分析实验报告

数值分析实验报告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迭代公式中,程。

数值分析 数值分析 Newton迭代法求解非线性方程实验

intf("%Lf\n",u[k][j]);
}//计算出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++)

牛顿迭代上机实习报告

实习报告一、实验目的通过上机实习,利用计算机编程进行数值分析课程中关于牛顿迭代法的求解。

由于所需迭代次数较多、数据运算复杂,手工求解非常困难甚至无法进行,通过计算机编程实现相应的算法可以大大提高计算效率和准确率。

二、实验原理牛顿法是求方程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. π在数学、物理、工程等领域具有广泛的应用,掌握计算π的方法具有重要意义。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用牛顿迭代法求非线性方程的根
一、 实验题目
求方程()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。

相关文档
最新文档