数值分析实习作业不同迭代法求解(简单迭代法,艾特肯加速迭代法,牛顿法弦割法)
- 格式:docx
- 大小:14.11 KB
- 文档页数:2
实验报告一:实验题目一、 实验目的掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。
二、 实验内容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是迭代次数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附近。
牛顿迭代法与其他迭代法迭代法是一种常见的数值计算方法,用于求解方程的近似解。
其中,牛顿迭代法是一种较为常用且有效的迭代法。
本文将对牛顿迭代法与其他迭代法进行比较和探讨。
一、牛顿迭代法的原理和步骤牛顿迭代法是由英国物理学家牛顿在17世纪提出的一种寻找方程近似解的方法。
其基本思想是通过不断逼近函数的零点,找到方程的根。
牛顿迭代法的步骤如下:1.选择一个初始值x0;2.根据当前的近似解x0,利用函数的导数计算切线的斜率;3.通过切线与x轴的交点得到下一个近似解x1;4.重复步骤2和步骤3,直到满足精度要求为止。
牛顿迭代法的优点在于它通常具有较快的收敛速度,尤其在接近根的地方。
然而,牛顿迭代法可能会收敛到局部极值点,而不是全局极值点,这是其存在的一个不足之处。
二、牛顿迭代法与其他迭代法的比较除了牛顿迭代法,还存在着其他常用的迭代法,比如二分法和割线法。
下面将对牛顿迭代法与这两种方法进行比较。
1. 牛顿迭代法 vs. 二分法二分法是一种简单而广泛使用的迭代法。
它通过不断将搜索区间二分来逐步逼近方程的根。
二分法的步骤如下:- 选择一个初始的搜索区间[a, b],使得方程的根位于[a, b]之间;- 计算搜索区间的中点c=(a+b)/2;- 比较函数在c处的取值与零的关系来确定下一步搜索的区间,即更新[a, b]为[a, c]或者[c, b];- 重复上述步骤,直到满足精度要求。
与牛顿迭代法相比,二分法的收敛速度较慢。
然而,二分法具有简单易懂、稳定可靠的特点,在某些情况下仍然被广泛使用。
2. 牛顿迭代法 vs. 割线法割线法是一种类似于牛顿迭代法的迭代法,它通过直线的割线逼近方程的根。
割线法的步骤如下:- 选择两个初始值x0和x1,使得x0和x1分别位于方程的根的两侧;- 计算通过(x0, f(x0))和(x1, f(x1))两点的直线的方程;- 求解该直线与x轴的交点得到下一个近似解x2;- 重复上述步骤,直到满足精度要求。
本科生实验报告实验课程数值计算方法学院名称信息科学与技术学院专业名称计算机科学与技术学生姓名学生学号指导教师实验地址实验成绩二〇一六年五月二〇一六年五月1实验一 非线性方程求根1.1问题描绘实验目的:掌握非线性方程求根的基本步骤及方法, 。
实验内容:试分别用二分法、简单迭代法、Newton 迭代法、弦截法(割线法、双点弦法),求x 5-3x 3+x-1=0在区间[-8,8]上的所有实根,偏差限为10-6。
要求:议论求解的全过程,对所用算法的局部收敛性,优弊端等作剖析及比 较,第2章算法思想2.1二分法思想:在函数的单一有根区间内,将有根区间不停的二分,找寻方程的解。
步骤:1.取中点mid=(x0+x1)/2 2.若f(mid)=0,则mid 为方程的根,不然比较与两头的符号,若与f(x0) 异号,则根在[x0,mid]之间,不然在[mid,x1]之间。
3并重复上述步骤,直抵达到精度要求,则 mid 为方程的近似解。
开始读入a,b,emid=(a+b)/2 F(a)*f(b)<0是 a=mid b=mid no |a-b|<e? yes 输出mid结束22.2简单迭代法思想:迭代法是一种逐次迫近的方法,它是固定公式频频校订跟的近似值,使之逐渐精准,最后获得精度要求的结果。
步骤:1.结构迭代公式f(x),迭代公式一定是收敛的。
2.计算x1,x1=f(x0).3.判断|x1-x0|能否知足精度要求,如不知足则重复上述步骤。
4.输出x1,即为方程的近似解。
开始输入x0,eX1=f(x0)f为迭代函数X1=x0;No|x1-x0|<eyes输出x1结束32.3Newton迭代法思想:设r是的根,选用作为r的初始近似值,过点做曲线的切线L,L的方程为,求出L与x轴交点的横坐标,称x1为r的一次近似值。
过点做曲线的切线,并求该切线与x轴交点的横坐标,称为r的二次近似值。
重复以上过程,得r的近似值序列,此中,称为r的次近似值步骤:1.计算原函数的导数f’(x);结构牛顿迭代公式2.计算,若f’(x0)=0,退出计算,不然持续向下迭代。
§2简单迭代法——不动点迭代(iterate)迭代法是数值计算中的一类典型方法,被用于数值计算的各方面中。
一、简单迭代法设方程f(x)=0 (3)在[a,b]区间内有一个根*x ,把(3)式写成一个等价的隐式方程x=g(x) (4)方程的根*x 代入(4)中,则有)(**=x g x (5)称*x 为g的不动点(在映射g下,象保持不变的点),方程求根的问题就转化为求(5)式的不动点的问题。
由于方程(4)是隐式的,无法直接得出它的根。
可采用一种逐步显式化的过程来逐次逼近,即从某个[a,b]内的猜测值0x 出发,将其代入(4)式右端,可求得)(01x g x =再以1x 为猜测值,进一步得到)(12x g x =重复上述过程,用递推关系——简单迭代公式求得序列}{k x 。
如果当k →∞时*→x x k ,}{k x 就是逼近不动点的近似解序列,称为迭代序列。
称(6)式为迭代格式,g(x)为迭代函数,而用迭代格式(6)求得方程不动点的方法,称为简单迭代法,当*∞→=x x k k lim 时,称为迭代收敛。
构造迭代函数g(x)的方法:(1)=x a x x -+2,或更一般地,对某个)(,02a x c x x c -+=≠;(2)x a x /=; (3))(21xa x x +=。
取a=3,0x =2及根*x =1.732051,给出三种情形的数值计算结果见表表 032=-x 的迭代例子问题:如何构造g(x),才能使迭代序列}{k x 一定收敛于不动点?误差怎样估计?通常通过对迭代序列}{k x 的收敛性进行分析,找出g(x)应满足的条件,从而建立一个一般理论,可解决上述问题。
二、迭代法的收敛性设迭代格式为),2,1,0()(1 ==+k x g x k k而且序列}{k x 收敛于不动点*x ,即∞→→-*k x x k (0时)因而有)3,2,1(1 =-≤-*-*k xx x x k k (7)由于),(),)((11*-*-*∈-'=-x x x x g x x k k k ξξ当g(x)满足中值定理条件时有),(),)((11*-*-*∈-'=-x x x x g x x k k k ξξ (8)注意到(8)式中只要1)(<<'L g ξ时,(7)式成立.经过上述分析知道,迭代序列的收敛性与g(x)的构造相关,只要再保证迭代值全落在[a,b]内,便得:假定迭代函数g(x)满足条件(1) 映内性:对任意x ∈[a,b]时,有a ≤g(x) ≤b ;(2) 压缩性:g(x)在[a,b]上可导,且存在正数L<1,使对任意 x ∈[a,b],有L x g <')( (9)则迭代格式)(1k k x g x =+对于任意初值0x ∈[a,b]均收敛于方程x=g(x)的根,并有误差估计式011x x LL x x kk --≤-*(10)证明 :收敛性是显然的。
实 验 报 告求解方程迭代法实验(数值分析,2学时)一 实验目的掌握方程迭代法思想,会用Aitken 法、牛顿法、弦截法求解方程。
二 实验内容1 用下列方法求方程201303==--x x x 在附近的根,要求准确到四位有效数字。
(1)牛顿法 (2)单点弦截法 (3)双点弦截法2 用Aitken 法求方程0123=--x x 在5.10=x 附近的根,精度要求为410-=ε。
三 实验步骤(算法)与结果1.用各种迭代法求解方程201303==--x x x 在处的根:(1)牛顿法的算法与结果A.根据原方程,又已知迭代公式如下:1'(),(0,1,2,()n n n n f x x x n f x +=-=……) 利用MATLAB 编写程序,如下:>> clear;>> x=2;>> for i=1:4x=x-(x^3-3*x-1)/(3*x^2-3)endB.结果由编程可算得x 的迭代值有四个x1 = 1.8889 x2= 1.8795x3 = 1.8794 x4 = 1.8794由x3、x4的值知道可取方程的跟为x=1.879(保留四位有效数字)(2) 单点弦截法的算法与结果A.根据定理2.6,单点弦截法迭代公式为:001000()()()(),(0,1,2,()()()()n n n n n n n n f x x f x x f x x x x x n f x f x f x f x +-=--==--……) 并可知所求根[]1,2α∈及3()31f x x x =--'2()33f x x =-''()6f x x =计算得''''(1)(1)0,(2)(2)0f f f f <>所以取[2,(2)]f 为不动点,利用MATLAB 编程(原文件如下):>> clear;>> x=1;>> x0=2;>> for i=1:5x=(x0*(x^3-3*x-1)-x*(x0^3-3*x0-1))/((x^3-3*x-1)-(x0^3-3*x0-1))end求得结果x1 =1.7500 x2 =1.8678 x3 =1.8784x4 =1.8793 x5=1.8794所以求得根为 1.879α=(3) 双点弦截法的算法与结果A. 单点弦截法迭代公式为:111111()()()(),(0,1,2,()()()()n n n n n n n n n n n n n f x x f x x f x x x x x n f x f x f x f x --+----=--==--……) 同理,所求根[]1,2α∈,011,2x x ==,由C 语言编程可求的结果(原文件如下):#include "stdio.h"void main(){float x1=1.0,x2=2.0,x;int i;for(i=1;i<=5;i++){x=(x1*(x2*x2*x2-3*x2-1)-x2*(x1*x1*x1-3*x1-1))/((x2*x2*x2-3*x2-1)-(x1*x1*x1-3*x1-1));printf("%f\n",x);x1=x2;x2=x;}getch();}经过五次迭代,求得五次迭代的x 的值,如下:x1 =1.750000 x2 =1.867769 x3 =1.880597x4 =1.879375 x5=1.879385所以求得根为 1.879α=2.已知迭代公式:2(())[()]()2()(())x x x x x x x ϕϕϕψϕϕϕ-=-+ 等价于:201110112x z y x x y z -=-+ 根据题意用C 语言编程(源程序如下)#include "stdio.h"#include "conio.h"#include "math.h"float fun(float x){float m;m=sqrt(x*x*x-1);return m;}main(){float x0=1.5,x,k=1.5;while(k>=0.0001){x=(x0*fun(fun(x0))-fun(x0)*fun(x0))/(x0-2*fun(x0)+fun(fun(x0)));printf("%f ",x);k=fabs(x-x0);x0=x;}getch();}得到结果:α=所以求得根为 1.4656四实验收获与教师评语1.实验的收获对于这次实验,我可以锻炼到上机实验的能力,并且第一次感受到数学知识在现实生活中的应用,也是第一次运用计算机解决数学问题。
实习报告一、实验目的通过上机实习,利用计算机编程进行数值分析课程中关于牛顿迭代法的求解。
由于所需迭代次数较多、数据运算复杂,手工求解非常困难甚至无法进行,通过计算机编程实现相应的算法可以大大提高计算效率和准确率。
二、实验原理牛顿法是求方程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时:五、实验总结通过进行上机实习,动手进行相关算法的编程实现,使我对牛顿迭代法的原理有了更加深刻的认识和理解。
【关键字】分析数值分析实验报告(3)学院:信息学院班级:计算机0903班姓名:王明强学号:课题三线性方程组的迭代法一、问题提出1、设线性方程组=x= ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )2、设对称正定阵系数阵线方程组=x = ( 1, -1, 0, 2, 1, -1, 0, 2 )3、三对角形线性方程组=x= ( 2, 1, -3, 0, 1, -2, 3, 0, 1, -1 )试分别选用Jacobi 迭代法,Gauss-Seidol迭代法和SOR方法计算其解。
二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢;3、对方程组2,3使用SOR方法时,选取松弛因子=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。
三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;gauss消去法是一种规则化的加减消元法。
它的基本思想是:通过逐次消元计算把需要求求解的线性方程转化成上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组求解转化为等价(同解)的上三角方程组的求解。
消去法是直接方法的一种。
优点:对于简单的方程组可以很快得出结果,计算中如果没有舍入误差,在稳定的方程组中容易得到精确解,理论上可以求解任何可以求出解得方程组。
缺点:数值有的时候不稳定(可采用列主元gauss消去法),既要消去,又要回代,算法实现起来比较复杂,不适用于大规模方程组。
迭代法是从某一取定的初始向量x(0)出发,按照一个适当的迭代公式,逐次计算出向量x(1),x(2),......,使得向量序列{ x(k)}收敛于方程组的精确解,这样,对于适当大的k,可取x(k)作为方程组的近似解。
优点:算法简单,程序易于实现,特别适用求解庞大稀疏线性方程组。
实习题六:用简单迭代法,艾特肯加速迭代法,牛顿法弦割法求解方程1-x-sin(x) = 0在[0,1]上的根。
简单迭代法和艾特肯加速法求解方程1-x-sin(x) = 0在[0,1]上的根。
主程序:
%利用简单迭代法求解方程1-x-sin(x) = 0在[0,1]上的根
clear
clc
format long
f = @f1;
a = 0;
b = 1;
eps = 0.5*10^(-4);
[x,time] = iteration(f,a,b,eps);
disp('利用简单迭代法求解方程1-x-sin(x) = 0在[0,1]上的根')
disp('方程1-x-sinx = 0的根是 x = ')
disp(x)
disp('迭代次数')
disp (time)
%%
%利用艾特肯加速法求解方程1-x-sin(x) = 0在[0,1]上的根
[x,time] = iteration_aitken(f,a,b,eps);
disp('利用艾特肯加速法求解方程1-x-sin(x) = 0的[0,1]上的根')
disp('方程1-x-sinx = 0的根是 x = ')
disp(x)
disp('迭代次数')
disp (time)
简单迭代法函数:
function [y,time] = iteration(f,a,b,eps)
x0 = (a+b)/2;
D = 1;
time = 0;
while abs(D)>=eps
x1 = feval(f,x0);
D = x1-x0;
x0 = x1;
time = time+1;
end
y = x0;
艾特肯加速法函数
function [y,time] = iteration_aitken(f,a,b,eps)
x0 = (a+b)/2;
D = 1;
t = 0;
while abs(D)>=eps
t = t+1;
x(t) = x0;
if t<=2
x1 = feval(f,x0);
D = x1-x0;
x0 = x1;
end
if t>2
x1 = feval(f,x0);
x0 = x1;
xx = x(t)-(x(t)-x(t-1))^2/(x(t)-2*x(t-1)+x(t-2));
D = xx-x0;
end
end
time = t;
y = xx;。