数值分析实验报告——方程求根
数值分析综合实验报告

一、实验目的通过本次综合实验,掌握数值分析中常用的插值方法、方程求根方法以及数值积分方法,了解这些方法在实际问题中的应用,提高数值计算能力。
二、实验内容1. 插值方法(1)拉格朗日插值法:利用已知数据点构造多项式,以逼近未知函数。
(2)牛顿插值法:在拉格朗日插值法的基础上,通过增加基函数,提高逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,通过不断缩小区间来逼近根。
(2)Newton法:利用函数的导数信息,通过迭代逼近根。
(3)不动点迭代法:将方程转化为不动点问题,通过迭代逼近根。
3. 数值积分方法(1)矩形法:将积分区间等分,近似计算函数值的和。
(2)梯形法:将积分区间分成若干等分,用梯形面积近似计算积分。
(3)辛普森法:在梯形法的基础上,将每个小区间再等分,提高逼近精度。
三、实验步骤1. 拉格朗日插值法(1)输入已知数据点,构造拉格朗日插值多项式。
(2)计算插值多项式在未知点的函数值。
2. 牛顿插值法(1)输入已知数据点,构造牛顿插值多项式。
(2)计算插值多项式在未知点的函数值。
3. 方程求根方法(1)输入方程和初始值。
(2)选择求解方法(二分法、Newton法、不动点迭代法)。
(3)迭代计算,直到满足精度要求。
4. 数值积分方法(1)输入被积函数和积分区间。
(2)选择积分方法(矩形法、梯形法、辛普森法)。
(3)计算积分值。
四、实验结果与分析1. 插值方法(1)拉格朗日插值法:通过构造多项式,可以较好地逼近已知数据点。
(2)牛顿插值法:在拉格朗日插值法的基础上,增加了基函数,提高了逼近精度。
2. 方程求根方法(1)二分法:适用于函数在区间内有正负值的情况,计算简单,但收敛速度较慢。
(2)Newton法:利用函数的导数信息,收敛速度较快,但可能存在数值不稳定问题。
(3)不动点迭代法:将方程转化为不动点问题,收敛速度较快,但可能存在初始值选择不当的问题。
3. 数值积分方法(1)矩形法:计算简单,但精度较低。
数值分析2024上机实验报告

数值分析2024上机实验报告数值分析是计算数学的一个重要分支,它研究如何用数值方法来解决数学问题。
在数值分析的学习过程中,学生需要通过上机实验来巩固理论知识,并学会使用相应的数值方法来解决实际问题。
本篇报告将详细介绍2024年度数值分析上机实验的内容和结果。
一、实验内容2024年度数值分析上机实验分为四个部分,分别是:方程求根、插值与拟合、数值积分和常微分方程的数值解。
1.方程求根这部分实验要求使用数值方法求解给定的非线性方程的根。
常见的数值方法有二分法、牛顿法、割线法等。
在实验过程中,我们需要熟悉这些数值方法的原理和实现步骤,并对不同方法的收敛性进行分析和比较。
2.插值与拟合这部分实验要求使用插值和拟合方法对给定的一组数据进行拟合。
插值方法包括拉格朗日插值、牛顿插值等;拟合方法包括最小二乘拟合、多项式拟合等。
在实验中,我们需要熟悉插值和拟合方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
3.数值积分这部分实验要求使用数值方法计算给定函数的积分。
常见的数值积分方法有梯形法则、辛普森法则、龙贝格积分等。
在实验过程中,我们需要熟悉这些数值积分方法的原理和实现步骤,并对不同方法的精度和效率进行比较。
4.常微分方程的数值解这部分实验要求使用数值方法求解给定的常微分方程初值问题。
常见的数值方法有欧拉法、改进的欧拉法、四阶龙格-库塔法等。
在实验中,我们需要熟悉这些数值解方法的原理和实现步骤,并对不同方法的精度和稳定性进行比较。
二、实验结果在完成2024年度数值分析上机实验后,我们得到了以下实验结果:1.方程求根我们实现了二分法、牛顿法和割线法,并对比了它们的收敛速度和稳定性。
结果表明,割线法的收敛速度最快,但在一些情况下可能会出现振荡;二分法和牛顿法的收敛速度相对较慢,但稳定性较好。
2.插值与拟合我们实现了拉格朗日插值和最小二乘拟合,并对比了它们的拟合效果和精度。
结果表明,拉格朗日插值在小区间上拟合效果较好,但在大区间上可能出现振荡;最小二乘拟合在整体上拟合效果较好,但可能出现过拟合。
数值分析课程实验报告-二分法和牛顿迭代法

用二分法和牛顿迭代法求方程的根
算法名称用二分法和牛顿迭代法求方程的根
学科专业机械工程
作者姓名xxxxxx
作者学号xxxBiblioteka xx作者班级xxxxxxxx
xx大学
二〇一五年十二月
《数值分析》课程实验报告
实验名称
用二分法和牛顿迭代法求方程的根
成绩
一、问题背景
在科学研究与工程计算中,常遇到方程(组)求根问题。若干个世纪以来,工程师和数学家花了大量时用于探索求解方程(组),研究各种各样的方程求解方法。对于方程f(x)=0,当f(x)为线性函数时,称f(x)=0为线性方程;当f(x)为非线性函数时,称式f(x)=0为非线性方程。对于线性方程(组)的求解,理论与数值求法的成果丰富;对于非线性方程的求解,由于f(x)的多样性,尚无一般的解析解法。当f(x)为非线性函数时,若f(x)=0无解析解,但如果对任意的精度要求,设计迭代方程,数值计算出方程的近似解,则可以认为求根的计算问题已经解决,至少能够满足实际要求。
fx=subs(ff,x,xk);
fa=subs(ff,x,a);
k=k+1;
iffx==0
y(k)=xk;
break;
elseiffa*fx<0
b=xk;
else
a=xk;
end
y(k)=xk;
end
plot(y,'.-');
gridon
(2)牛顿迭代法程序:
functionx=newton(xx,n)
对二分法和牛顿迭代法的观察和分析我们可以知道,二分法的优点是方法比较简单,编程比较容易,只是二分法只能用于求方程的近似根,不能用于求方程的复根,且收敛速度慢。而牛顿迭代法的收敛速度明显大于二分法的速度。
数值计算方法方程求根

数值计算⽅法⽅程求根数值计算⽅法实验报告实验内容:⽅程求根实验室:专业班级:学号:姓名:2.⽤MATBAB软件,⽤⼆分法求⽅程f(x)=x^3+4*x^2-10=0在区间[1,2]内根的近似值,为使误差不超过10^-5时所需要的⼆分次数。
function bisection_time(tolerance)a=1;b=2;k=0;while(abs(b-a)>tolerance)c=(a+b)/2;fa=a^3+4*a^2-10;fb=b^3+4*b^2-10;fc=c^3+4*c^2-10;if((fa==0)|(fc==0))disp(k);elseif(fa*fc<0)b=c;k=k+1;elseif(fc*fb<0)a=c;k=k+1;elseif(fb==0)disp(k);endendsoluntion=(a+b)/2;disp(soluntion);disp(k);运⾏结果1.36523176.取x0=1.5,⽤⽜顿迭代法求f(x)=x^3+4*x^2-10=0的跟的近似值function new(tolerance)x0=1.5;k=0;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;while(abs(x0-x1)>tolerance)x0=x1;k=k+1;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;enddisp(x1);disp(k);运⾏结果1.3652338.弦割法求⽅程f(x)=x^3-3*x^2-x+9=0在区间[-2,-1]内的⼀个实根近似值Xk,使|f(x) |<=10^-5. function xuange(k)x0=-2;x1=-1;t=0;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);while(abs(x1-x0)>k)x0=x1;x1=x2;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);t=t+1;enddisp(x1);disp(t)运⾏结果-1.52510269.⽤艾特肯算法求⽅程f (x )=x^3+4*x^2+10=0在区间[1,2]内的根的近似值(取X0=1.5,g (x )=410x ,精确到|Xk+1-Xk|<=10^-5,并与第2,3,6题的相应结果进⾏⽐较。
数值分析实验报告——方程求根

《数值分析》实验报告实验一方程求根一、实验目的:掌握二分法、Newton法、不动点迭代法、弦截法求方程的根的各种计算方法、并实施程序调试和运行,学习应用这些算法于实际问题。
二、实验内容:二分法、Newton法、不动点迭代法、弦截法求方程的根、程序的调试和运行,给出实例的计算结果。
观察初值对收敛性的影响。
三、实验步骤:①、二分法:定义:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
实现方法:首先我们设一方程400*(x^4)-300*(x^3)+200*(x^2)-10*x-1=0,并求其在区间[0.1,1]上的根,误差限为e=10^-4。
PS:本方法应用的软件为matlab。
disp('二分法')a=0.1;b=1;tol=0.0001;n0=100;fa=400*(a.^4)-300*(a.^3)+200*(a.^2)-10*a-1;for i=1:n0 p=(a+b)/2;fp=400*(p.^4)-300*(p.^3)+200*(p.^2)-10*p-1;if fp==0||(abs((b-a)/2)<tol)disp('用二分法求得方程的根p=')disp(p)disp('二分迭代次数为:')disp(i)break;end;if fa*fp>0 a=p;else b=p;end;end;if i==n0&&~(fp==0||(abs((b-a)/2)<tol)) disp(n0) disp('次二分迭代后没有求出方程的根')end;程序调试:运行结果:用二分法求得方程的根p=0.1108二分迭代次数为:14②Newton法定义:取定初值x0,找到函数对应的点,然后通过该点作函数切线,交x轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直到收敛到需要的精度。
数值方法方程求根实验报告

(1)对原方程变形为x=arctanX+π,令f(x)=x-arctanx-π,f ’(x)=221x x+ (2)选定初值x 0=4.5,构造牛顿迭代公式2211arctan x x x x x x n n +---=+π(3)在VC++6.0中编写程序如下并运行: #include<stdio.h> #include<math.h> #define ESP 1e-6 #define PI 3.1415926 void main() {double x0,x1,f,f1,a,b; printf("INPUT x0:"); scanf("%lf",&x0); a=floor(x0/PI); do {f=x0-atan(x0)-a*PI; f1=x0*x0/(1+x0*x0); x1=x0-f/f1; b=x0; x0=x1; }while(fabs(x0-b)<=ESP); printf("%f\n",x0); }2实验步骤1.1a)程序编译出错:b)找到出错位置:c)修改为“x1=0.2-0.1*exp(x0)”后调试运行为:调试成功,运行程序得出结果。
1.2a)编译运行出错:b)找到出错位置c)修改为“f=x0-atan(x0)-a*PI;”,调试运行。
运行得出结果。
3实验结论(数据及分析结果)(1)对于方程e x+10x-2=0,输入初值为0时结果如下:因为x∈(0.1),φ’(x)=-0.1e x<1,所以该迭代格式收敛。
(2)对于方程x=tgx,输入初值4.5时运行结果如下:当输入x为100时:牛顿迭代是局部收敛的,故迭代在方程的根的附近是收敛的,所以初值的选择对牛顿迭代的收敛性有影响,若初值选在根的附近则迭代收敛,若初值选择离根远则发散。
4实验小结(收获体会)通过这次实验,基本掌握了利用C语言解决数值计算中的方程求根问题,从最初的编写算法到调试再到得出结果,虽然有困难但是通过翻阅资料,查工具书等,最终顺利完成了任务,同时也加深了对于迭代法的认识。
数值分析实验报告(计算二次方程的根)

《数值分析》课程实验报告【实验内容与要求】为了精确计算所有情况下的二次方程0a 2=++c bx x的根,设a 0≠,04b 2>-ac ,构造算法和程序。
并计算下列二次方程的根:1.,032x2=--x2. ,010001.10000x2=++x3.0100001.100000x2=+-x【算法说明】1. 在a 不等于0的情况下,首先判断ac 4b 2-是否大于0,若ac 4b 2-小于0,则无实数根,若ac 4b2-大于0,则有两个不同的实数根21,x x 。
2. 在ac 4b 2-大于0的情况下,若,0b >则a b b 2ac4-x 21+-=acb b 4c 2x 22-+-=若,0b <则a b b 2ac4--x 21-=acb b 4-c 2x 22--=【源程序】#include<stdio.h> #include<math.h> void main() {double a,b,c;double x1,x2; double k;printf("请输入a,b,c: \n");scanf("%lf%lf%lf",&a,&b,&c);k=b*b-4*a*c;printf("%lf\n",k);if(a!=0)//a不为0{//判断b2-4ac是否大于0if(k<0){printf("无实数根");}else if(k>0)//当有实数根时{//判断b是否大于0if(b>0){x1=(-b+sqrt(k))/(2*a);x2=(2*c)/(-b+sqrt(k));printf("x1=%lf\nx2=%lf\n",x1,x2);}else if(b<0){x1=(-b-sqrt(k))/(2*a);x2=(2*c)/(-b-sqrt(k));printf("x1=%lf\nx2=%lf\n",x1,x2);}}}}【实验结果】该图为二次方程032x 2=--x 的两根 即:,0000000.164b 2>=-ac 000000.3,000000.1x 21=-=x该图为二次方程010001.10000x 2=++x 的两个根即:,0999999984b 2>=-ac999980.9999-,000100.0x 21=-=x该图为二次方程0100001.100000-x 2=+x 的两个根即:,0000000.9999999984b 2>=-ac 966146.99999,000010.0x 21=-=x【实验结果分析与说明】二次方程在04,0a 2>-≠ac b的情况下,若ac b 4b 2-≈,那么若,0b >则 024,-24b -x 2221≈-+-=≈--=a acb b x a b a ac b ,若,0b <则 aa acb b x a ac b b-24,024b -x 2221≈-+-=≈--=。
数值分析实验报告——非线性方程求根

数值分析实验报告——非线性方程求根一、实验目的:1.掌握求解非线性方程的常用方法;2.了解非线性方程求根问题的数值解法;3.熟悉使用数值分析软件进行非线性方程求根的实现。
二、实验原理:非线性方程指的是形如f(x)=0的方程,其中f(x)是一个非线性函数。
非线性方程求根的常用方法包括二分法、割线法和牛顿法等。
其中,二分法是通过不断缩小区间范围来逼近方程的解;割线法是通过使用割线来逼近方程的解;牛顿法则是通过使用切线来逼近方程的解。
对于给定的非线性方程,可以根据实际情况选择合适的方法进行求根。
三、实验内容:1.编写求解非线性方程的函数,包括二分法、割线法和牛顿法;2.使用编写的函数求解给定的非线性方程,比较各个方法的收敛速度和精确程度;3.根据实际情况分析和选择合适的方法进行求根。
四、实验步骤:1.针对给定的非线性方程,编写二分法的函数实现:(1)首先确定方程的解存在的区间;(2)根据方程的解存在的区间,使用二分法逐步缩小区间范围;(3)根据设定的精度要求,不断循环迭代,直至满足要求或达到迭代次数限制;2.针对给定的非线性方程,编写割线法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据割线的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;3.针对给定的非线性方程,编写牛顿法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据牛顿法的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;4.根据给定的非线性方程,分别使用二分法、割线法和牛顿法进行求解,并比较各个方法的收敛速度和精确程度;5.分析实际情况,选择合适的方法进行求解。
五、实验结果:4.通过比较,发现割线法和牛顿法的收敛速度较快,精确程度较高,因此选择割线法进行求解。
六、实验总结:通过本次实验,我掌握了求解非线性方程的常用方法,并使用数值分析软件实现了二分法、割线法和牛顿法。
数值分析原理实验报告

一、实验目的通过本次实验,掌握数值分析的基本原理和方法,了解数值分析在科学和工程领域的应用,培养动手能力和分析问题的能力。
二、实验内容1. 二分法求方程根(1)原理:二分法是一种在实数域上寻找函数零点的算法。
对于连续函数f(x),如果在区间[a, b]上f(a)f(b)<0,则存在一个根在区间(a, b)内。
二分法的基本思想是将区间[a, b]不断二分,缩小根所在的区间,直到满足精度要求。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化区间[a, b]和中间点c=a+(b-a)/2;③ 判断f(c)与f(a)的符号,若符号相同,则将区间缩小为[a, c],否则缩小为[c,b];④ 重复步骤②和③,直到满足精度要求;⑤ 输出根的近似值。
2. 牛顿法求方程根(1)原理:牛顿法是一种在实数域上寻找函数零点的算法。
对于可导函数f(x),如果在点x0附近,f(x0)f'(x0)≠0,则存在一个根在点x0附近。
牛顿法的基本思想是通过泰勒展开近似函数,然后求解近似方程的根。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化迭代次数n=0,近似根x0;③ 计算导数f'(x0);④ 求解近似方程x1=x0-f(x0)/f'(x0);⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1,n=n+1,返回步骤③。
3. 雅可比迭代法解线性方程组(1)原理:雅可比迭代法是一种解线性方程组的迭代算法。
对于线性方程组Ax=b,雅可比迭代法的基本思想是利用矩阵A的对角线元素将方程组分解为多个一元线性方程,然后逐个求解。
(2)实验步骤:① 输入系数矩阵A和常数向量b;② 初始化迭代次数n=0,近似解向量x0;③ 计算对角线元素d1, d2, ..., dn;④ 更新近似解向量x1=x0-A/d1, x2=x0-A/d2, ..., xn=x0-A/dn;⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1, x2, ..., xn,n=n+1,返回步骤③。
数值分析实验报告

数值分析实验报告实验目的:通过对数值分析实验的进行,掌握牛顿法解方程的根的求解过程和方法,通过编程实现牛顿法。
实验原理:牛顿法是一种迭代法,通过不断迭代逼近根的过程来求解方程的根。
假设f(x)在[x_0,x]中连续且有一阶连续导数,则根据泰勒展开公式,有下面的公式成立:f(x)=f(x_0)+f'(x_0)(x-x_0)+R(x)其中f(x)是方程的函数,f'(x_0)是f(x)在x_0处的导数,R(x)是无穷小量。
当x接近于x_0时,可以忽略R(x)的影响,即认为R(x)足够小可以忽略。
假设x_0是方程的一个近似根,可以得到如下的迭代公式:x_1=x_0-f(x_0)/f'(x_0)x_2=x_1-f(x_1)/f'(x_1)...在迭代的过程中,如果迭代的结果与上一次迭代的结果的误差小于设定的阈值,则可以认为找到了方程的根。
实验步骤:1.确定方程和初始近似根x_0。
2.计算f(x_0)和f'(x_0)。
3.使用迭代公式计算x的近似值x_i,直到满足终止条件(比如误差小于设定的阈值)。
4.输出计算得到的方程的根。
实验结果和分析:在实验中,我们选择了方程f(x)=x^2-2作为实验对象,初始近似根选择为x_0=1根据上述的迭代公式,可以依次计算得到x_1=1.5,x_2=1.4167,x_3=1.4142,直到满足终止条件。
通过实验计算,可以得到方程f(x)=x^2-2的两个根为x=-1.4142和x=1.4142,与理论解x=±√2比较接近,说明牛顿法可以有效地求解方程的根。
总结:通过本次实验,掌握了牛顿法解方程根的原理和实现方法,实验结果与理论解相近,验证了牛顿法的有效性。
在实际应用中,牛顿法常用于求解非线性方程和优化问题,具有较高的精度和收敛速度,但在选择初始近似根时需要谨慎,否则可能会导致迭代结果发散。
《数值分析实验》实验

数值分析实验实验1 方程求根一、实验目的:1.掌握常用的求非线性方程近似根的数值方法,用所学方法求非线性方程满足指定精度要求的数值解,比较各种方法的异同点并进行收敛性分析。
2.通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点。
3.编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。
二、实验内容:1.用二分法求方程0104)(23=-+=x x x f 在1.5附近的根。
2.用牛顿迭代法求方程033)(23=--+=x x x x f 在1.5附近的根。
3.用简单迭代法求解非线性方程3sin )1(2=-+x x 的根。
取迭代函数)1sin 3(*5.0)(2x x x --+=ϕ,精度取2101-⨯4.(选做)用牛顿法求下列方程的根: (1)02=-x e x ; (2)01=-x xe ; (3)02lg =-+x x 。
5.(选做)编写一个弦截法程序,求解题目4中的方程。
6.(选做)Matlab 函数fzero 可用于求解非线性方程的根。
例如,fzero(@(x) x^3+4*x^2-10, 1.5)可以求解题目1。
尝试用此方法求解实验中的其他题三、实验要求:1.程序要添加适当的注释,程序的书写要采用缩进格式。
2.程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
3.程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
四、实验步骤1.按照实验内容和实验要求编写代码 2.编译并运行代码 3.检查是否发生错误五、实验源代码与实验结果实验1源代码:运行结果:实验2源代码:运行结果:实验3源代码:运行结果:4(1)的源代码:运行结果:4(2)的源代码:运行结果:4(3)的源代码:运行结果:5(3)的源代码:运行结果:六、实验心得体会通过本次实验我加深了对二分法、简单迭代法、牛顿迭代法和弦截法算法思想的了解,并对各个不同方法的优劣有了更深的理解。
数值分析非线性方程求根实验

实验报告一、实验目的1.迭代函数对收敛性的影响。
2.初值的选择对收敛性的影响。
二、实验题目1.用简单迭代法求方程01)(3=--=x x x f 的根。
分别化方程为如下等价方程: 31+=x x ;13-=x x ;x x 11+=;213-+=x x x 取初值5.10=x ,精度为410-,最大迭代次数为500,观察其计算结果并加以分析。
2.①用牛顿法求方程01)(3=-+=x x x f 在0.5附近的根,分别取初值1000,100,2,1,5.0,5.0,1,2,100,10000-----=x观察并比较计算结果,并加以分析。
②用牛顿法求方程0)(3=-=x x x f 所有根。
三、实验原理简单迭代法程序,牛顿迭代法程序。
四、实验内容及结果fun=inline('x^3-x-1');dfun=inline('3*x^2-1');-1000,x1=manewton(fun,dfun,-1000,1e-4) -100,x2=manewton(fun,dfun,-100,1e-4)-2,x3=manewton(fun,dfun,-2,1e-4)-1,x4=manewton(fun,dfun,-1,1e-4)-0.5,x5=manewton(fun,dfun,-0.5,1e-4) 0.5,x6=manewton(fun,dfun,0.5,1e-4)1,x7=manewton(fun,dfun,1,1e-4)2,x8=manewton(fun,dfun,2,1e-4)100,x9=manewton(fun,dfun,100,1e-4) 1000,x10=manewton(fun,dfun,1000,1e-4)3)在MA TLAB的主程序窗口输出以下结果:ans =-1000k=21x1 =0.682327804075895ans =-100k=16x2 =0.682327803903413ans =-2k=6x3 =0.682327803828020ans =-1k=5x4 =0.682327803828020ans =-0.500000000000000k=4x5 =0.682327803903932ans =0.500000000000000k=3x6 =0.682327803828347五、实验结果分析(1)实验1中用简单迭代法求方程01)(3=--=x x x f 的根:取初始值5.10=x 的时候,等价方程2和4是不收敛的。
数值分析实验报告

数学与计算科学学院实验报告实验项目名称方程求根所属课程名称数值方法A实验类型验证型实验日期2014年10月22日姓名学号班级信息与计算科学1201班成绩当输入结果为100时运行结果如下:(2)初值的变化对牛顿迭代法收敛的影响。
附录1:源程序C程序1:#include <stdio.h>#include <math.h>#define ESP 1e-6void main (){double x0,x1,b;printf ("INPUT x0:");scanf ("%lf",&x0);do{x1=0.2-0.1*exp(x0);b=x0;x0=x1;}while(fabs(x0-b)<=ESP);printf("%f\n",x0);}C程序2:#include <stdio.h>#include <math.h>#define ESP 1e-6#define PI 3.1415926void main(){double x0,x1,f,f1,a,b;printf("INPUT x0:");scanf("%lf",&x0);a=floor(x0/PI);do{f=x0-atan(x0)-a*PI;f1=x0*x0/(1+x0*x0);x1=x0-f/f1;b=x0;x0=x1;}while (fabs(x0-b)<=ESP);printf("%f\n",x0);}附录2:实验报告填写说明1.实验项目名称:要求与实验教学大纲一致.2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求.3.实验原理:简要说明本实验项目所涉及的理论知识.4.实验环境:实验用的软、硬件环境.5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容.概括整个实验过程.对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作.对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明.对于创新性实验,还应注明其创新点、特色. 6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析.7.实验结论(结果):根据实验过程中得到的结果,做出结论.8.实验小结:本次实验心得体会、思考和建议.9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价.。
数值分析实验 实验报告

数值分析实验实验报告数值分析实验实验报告引言在现代科学与工程领域,数值分析是一项重要的技术手段。
通过数值方法,我们可以利用计算机模拟和解决各种实际问题,如物理、化学、生物、经济等领域中的方程求解、优化问题、数据拟合等。
本实验旨在通过实际案例,探讨数值分析的应用和效果。
实验一:方程求解首先,我们考虑一个简单的方程求解问题。
假设我们需要求解方程f(x) = 0的根,其中f(x)是一个在给定区间[a, b]上连续且单调的函数。
为了实现这个目标,我们可以采用二分法、牛顿法、弦截法等数值方法。
在本实验中,我们选择使用二分法来求解方程f(x) = 0。
这种方法的基本思想是通过不断缩小区间[a, b]的范围,直到找到一个近似的根。
我们首先选取一个中间点c,计算f(c)的值,然后根据f(c)与0的关系,将区间[a, b]分成两部分。
重复这个过程,直到找到满足精度要求的根。
实验二:数据拟合接下来,我们考虑一个数据拟合的问题。
假设我们有一组离散的数据点,我们希望找到一个函数,使得该函数与这些数据点的拟合误差最小。
为了实现这个目标,我们可以采用最小二乘法等数值方法。
在本实验中,我们选择使用最小二乘法来进行数据拟合。
这种方法的基本思想是通过最小化数据点与拟合函数之间的误差平方和,来确定拟合函数的参数。
我们首先选择一个拟合函数的形式,如线性函数、多项式函数等。
然后,通过最小化误差平方和的方法,计算出拟合函数的参数。
实验三:优化问题最后,我们考虑一个优化问题。
假设我们需要在给定的约束条件下,找到一个使得目标函数取得最大或最小值的变量。
为了实现这个目标,我们可以采用梯度下降法、遗传算法等数值方法。
在本实验中,我们选择使用梯度下降法来解决优化问题。
这种方法的基本思想是通过迭代的方式,不断调整变量的取值,直到找到一个满足约束条件的最优解。
我们首先计算目标函数关于变量的梯度,然后根据梯度的方向和大小,更新变量的取值。
通过不断迭代,我们可以逐步接近最优解。
数值分析实验报告(牛顿法解方程的根)

《数值分析》课程实验报告【实验内容与要求】用牛顿法求下列方程的根 1.01x =-xe2.02lg =-+x x【算法说明】牛顿法计算算法:1. 选定初始近似值0x ,计算)(f ,)(f 0000x f x f '='=2.按照公式 0001x f f x '-= 迭代一次,得到新的近似值1x ,计算)(f ,)(f 1111x f x f '='=3.如果 1x 满足1εδ<或者21f ε<,则终止迭代,以1x 作为所求的根;否则转步骤4,此处21,εε是允许误差,而⎪⎪⎩⎪⎪⎨⎧≥-<-=时x 当,x x 时x ,当x 111101c x c x δ 其中c 是取绝对误差或者相对误差的控制常数,一般可取c=1;4.如果迭代次数达到预先指定的次数N ,或者0f 1=',则方法失败,否则以),,x (111f f '代替),,x (000f f '转步骤2继续迭代。
【源程序】方程1的代码: #include<math.h> #include<stdio.h> int main() { double f,f1,x0,x1;printf("请输入x1的值:\n");scanf("%lf",&x1);do{x0=x1;f=exp(-1*x0)-x0;f1=-1*exp(-1*x0)-1;//一介导函数x1=x0-f/f1;}while(fabs(x1-x0)>=1e-5);printf("方程的值为%lf",x1);}方程2的代码:#include"stdio.h"#include"math.h"double func(double x) //函数{return log10(x)+x-2;}double func1(double x) //导函数{return 1/(x*log(10))+1;}int Newton(double *x,double precision,int maxcyc) //迭代次数{double x1,x0;int k;x0=*x;for(k=0;k<maxcyc;k++){if(func1(x0)==0.0)//若通过初值,函数返回值为0{printf("迭代过程中导数为0!\n");return 0;}x1=x0-func(x0)/func1(x0);//进行牛顿迭代计算if(fabs(x1-x0)<precision || fabs(func(x1))<precision) //达到结束条件{*x=x1; //返回结果return 1;}else //未达到结束条件x0=x1; //准备下一次迭代}printf("迭代次数超过预期!\n"); //迭代次数达到,仍没有达到精度return 0;}int main(){double x,precision;int maxcyc;printf("输入初始迭代值x0:");scanf("%lf",&x);printf("输入最大迭代次数:");scanf("%d",&maxcyc);printf("迭代要求的精度:");scanf("%lf",&precision);if(Newton(&x,precision,maxcyc)==1) //若函数返回值为1printf("该值附近的根为:%lf\n",x);else //若函数返回值为0printf("迭代失败!\n");return 0;}【实验结果】该图为二次方程01x =-xe的计算结果即:x=0.567143 迭代初始值为x1=0.5该图为二次方程02lg =-+x x 的计算结果 即x=1.755579 迭代初值为:1,最大迭代次数为56【实验结果分析与说明】对于方程f(x)=0,如果f(x)是线性方程,则求它的根是容易的,牛顿法实质上是一种线性化方法,其基本思想是将非线性方程f(x)=0,逐步归结为某种线性方程来求解。
实验一_方程求根的数值方法

实验一_方程求根的数值方法实验一方程求根的数值方法一、实验内容:1.求方程3310x x--=在02x=附近的根(根的准确值为)* 1.87938524x= ,要求计算结果准确到四位有效数字。
2.给出至少三种不同的数值方法,并写出相应的理论分析;3.编写程序,上机计算,求出数值结果,在实验报告中以表格形式列出;4.对数值实验结果进行分析,验证与前面理论分析是否一致。
二、实验报告格式1. 题目(手写);2. 数值方法和相应的理论分析(手写);3. 程序(打印);4. 数值实验结果(打印);5. 数值实验结果分析(手写)。
三、实验报告要求理论分析正确,程序运行无误。
实验报告条理清晰,手写部分字迹工整整洁。
不动点迭代法程序:function [r,n]=mulStablePoint(F,x0,eps)%非线性方程组:f%初始解:a%解的精度:eps%求得的一组解:r%迭代步数:nif nargin==2eps=1.0e-6;endx0 = transpose(x0);n=1;tol=1;while tol>epsr= subs(F,findsym(F),x0) %迭代公式tol=norm(r-x0); %norm 为矩阵的欧几里得范数n=n+1;x0=r;if(n>100000) %迭代步数控制disp('迭代步数太多可能不收敛');return;endend实验结果K Xk X*0 2.0000 1.879385241 1.9129 1.879385242 1.8888 1.879385243 1.8821 1.879385244 1.8801 1.879385245 1.8796 1.87938524牛顿法迭代程序:function [r,n]=mulNewton(F,x0,eps)if nargin==2eps=1.0e-4;endx0 = transpose(x0);Fx = subs(F,findsym(F),x0);var = findsym(F);dF = jacobian(F,var);dFx = subs(dF,findsym(dF),x0);r=x0-inv(dFx)*Fx;n=1;tol=1;while tol>epsx0=r;Fx = subs(F,findsym(F),x0);dFx = subs(dF,findsym(dF),x0);r=x0-inv(dFx)*Fx %核心迭代公式tol=norm(r-x0);n=n+1;if(n>100000)disp('迭代步数太多可能不收敛'); return;endend实验结果:K Xk X*0 2.0000 1.879385241 1.8795 1.879385242 1.8794 1.87938524弦截法代码:function root=ModifSecant(f,a,b,eps) format long;if(nargin==3)eps=1.0e-4;endf1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);if(f1==0)root=a;endif(f2==0)root=b;endif(f1*f2>0)disp('两端点函数值成绩大于0!’)return;elsetol = 1;r1 = a; %迭代初始值r2 = b; fv = subs(sym(f),findsym(sym(f)),a);while(tol>eps)f2=subs(sym(f),findsym(sym(f)),r2);root=r2-(r2-r1)*f2/(f2-fv)fr=subs(sym(f),findsym(sym(f)),root);if(f2*fr<0)tol=abs(root-r2);r1 = r2;r2 = root;fv = subs(sym(f),findsym(sym(f)),r1);elsetol=abs(root-r2);r2 = root;fv = 0.5*subs(sym(f),findsym(sym(f)),r1);endendendformat short;实验结果:K Xk X*0 2.0000 1.879385241 1.8724 1.879385242 1.8845 1.879385243 1.8793 1.879385244 1.8794 1.87938524。
(完整word版)数值分析报告-二分法和牛顿法方程求根(word文档良心出品)

《数值分析》实验报告一**: **学号: PB********实验一一、实验名称方程求根二、实验目的与要求:通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;比较二者的计算速度和计算精度。
三、实验内容:通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。
(一)二分法算法:给定区间[a,b],并设f (a )与f (b )符号相反,取δ为根的容许误差,ε为值的容许误差。
(1)令c=(a+b)/2(2)如果(c-a)< δ或)(c f <ε,则输出c ,结束;否则执行(3)(3)如果f(a)f(c)<0,则令)()(,c f b f c b ←←;否则,则令)()(,c f a f c a ←←,重复(1),(2),(3)。
(二)牛顿迭代法:给定初值0x ,ε为根的容许误差,η为)(x f 的容许误差,N 为迭代次数的容许值。
(1)如果)(x f <η或迭代次数大于N ,则算法结束;否则执行(2)。
(2)计算)('/)(0001x f x f x x -=(3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。
(4)令 = ,转向(1)。
四、实验题目与程序设计1、二分法3.1.1、用二分法求方程a. f(x)= x x tan 1--在区间[0,π/2]上的根,c. f(x)=6cos 22-++-x e x x 在区间[1,3]上的根。
源程序:3.1.1.a#include<stdio.h>#include<math.h>void main(){float a,b;double c,y,z;printf("plese input two number a and b:\n");scanf("%f%f",&a,&b);c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);while(fabs(b-a)>0.00001|| fabs(y)>0.00001){z=1/a-tan(a);if(z*y<0)b=c;elsea=c;c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);}x x 01-ε)(1x f ηx 1x 0x 1}输入0 1.5707563( /2~1.5705563)得到下表:由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x=0.8603是方程的根,结果与实际想要得到的值相当接近。
(完整word版)数值分析报告-二分法和牛顿法方程求根(word文档良心出品)

《数值分析》实验报告一**: **学号: PB********实验一一、实验名称方程求根二、实验目的与要求:通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;比较二者的计算速度和计算精度。
三、实验内容:通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。
(一)二分法算法:给定区间[a,b],并设f (a )与f (b )符号相反,取δ为根的容许误差,ε为值的容许误差。
(1)令c=(a+b)/2(2)如果(c-a)< δ或)(c f <ε,则输出c ,结束;否则执行(3)(3)如果f(a)f(c)<0,则令)()(,c f b f c b ←←;否则,则令)()(,c f a f c a ←←,重复(1),(2),(3)。
(二)牛顿迭代法:给定初值0x ,ε为根的容许误差,η为)(x f 的容许误差,N 为迭代次数的容许值。
(1)如果)(x f <η或迭代次数大于N ,则算法结束;否则执行(2)。
(2)计算)('/)(0001x f x f x x -=(3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。
(4)令 = ,转向(1)。
四、实验题目与程序设计1、二分法3.1.1、用二分法求方程a. f(x)= x x tan 1--在区间[0,π/2]上的根,c. f(x)=6cos 22-++-x e x x 在区间[1,3]上的根。
源程序:3.1.1.a#include<stdio.h>#include<math.h>void main(){float a,b;double c,y,z;printf("plese input two number a and b:\n");scanf("%f%f",&a,&b);c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);while(fabs(b-a)>0.00001|| fabs(y)>0.00001){z=1/a-tan(a);if(z*y<0)b=c;elsea=c;c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);}x x 01-ε)(1x f ηx 1x 0x 1}输入0 1.5707563( /2~1.5705563)得到下表:由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x=0.8603是方程的根,结果与实际想要得到的值相当接近。
方程求根

贵州师范大学数学与计算机科学学院学生实验报告课程名称: 数值分析 班级: 实验日期: 学 号: 姓名: 指导教师:实验成绩:一、实验名称实验四:方程求根二、实验目的及要求1. 要求学生能够用Newton 迭代法求方程的根2. 要求学生能够找出Newton 迭代法的收敛域三、实验环境每人一台微机,要求安装Windows2000或Windows XP 操作系统,Matlab 软件四、实验内容题1 求解下列方程:1) Newton 迭代法求解的第一个方程0523=--x x2) 无求根公式的五次方程0245=--x x3) 超越方程0tan =-x x要求:1) 先用图象法求初始近似,再用Newton 迭代法加工,计算结果达到5位有效数字.2) 设计一个程序找出Newton 迭代的收敛域(注:方程1)必须写实验报告)五、算法描述及实验步骤输入 '0(),(),,,f x f x x M ε;输出 方程()0f x =在0x 附近的根或失败信息; 步1 0dv ⇐;步2 对1,2,3.....,k M =执行步3——步5;步3 若'()0f x =则2dv ⇐,退出循环;否则:010'0()()f x x x f x ⇐-; 步4 1001;e x x x x ⇐-⇐;步5 若e ε≤则1dv ⇐,退出循环;步6 若1dv ⇐则输出1x ,否则若0dv ⇐则输出“迭代M 次失败”,否则输出“奇异”;六、调试过程及实验结果1输入:syms x y;x=-5:0.1:5;ezplot('x^3-2*x-5',x)hold onezplot('x',x)ezplot(‘0’,x)grid on结果如图1>> x0=2.2;tol=0.00005;M=50;>>x=Newton('x^3-2*x-5','3*x^2-2',x0,tol,M)x =2.09462输入:syms x y;x=-5:0.1:5;ezplot('x^5-4*x-2',x)hold onezplot('x',x)ezplot(‘0’,x)grid on结果如图2:>> x0=1.5;tol=0.00005;M=50;>>x=Newton('x^5-4*x-2','5*x^4-4',x0,tol,M)x =1.5185>> x0=-5;tol=0.00005;M=100;>>x=Newton('x^5-4*x-2','5*x^4-4',x0,tol,M)x =-1.2436>> x0=0;tol=0.00005;M=100;>> x=Newton('x^5-4*x-2','5*x^4-4',x0,tol,M)x =-0.5085>> x0=-pi/5;tol=0.00005;M=200; 3syms x y;x=-4*pi:0.1:4*pi;ezplot('tan(x)',x)hold onezplot('x',x)ezplot('0',x)grid on结果如图3;有无数的结果都是互为相反数>>x=Newton('x-tan(x)','-tan(x)^2',x0,tol,M)x =-9.3105e-005>> x0=pi/5;tol=0.00005;M=200;>>x=Newton('x-tan(x)','-tan(x)^2',x0,tol,M)x =9.3105e-005>> x0=-pi/2;tol=0.00005;M=200;>>x=Newton('x-tan(x)','-tan(x)^2',x0,tol,M)x =-1.5708>> x0=pi/2;tol=0.00005;M=200;>> x=Newton('x-tan(x)','-tan(x)^2',x0,tol,M)x =1.5708七、总结1、在应用Newton 程序时,第三个程序当去取一定初值时都迭代不出来,我取M 到了200次结果还是一样,不知道是什么原因;2、画图中出现很多问题,怎么加网格,怎么样连续画几个函数图在一个平面上;3、由于tan()y x =与y x =的交点很多,无法用程序表现出来;4、无法编写出Newton 迭代法的收敛域;图3八、附录(源程序清单)function x=Newton(f,df,x0,tol,M)dv=0;for k=1:Mif feval(df,x0)==0dv=2;breakelsex1=x0-feval(f,x0)/feval(df,x0);ende=abs(x1-x0);x0=x1;if e<=toldv=1;breakendendif dv==1x=x1;elseif dv==0x=['迭代',num2str(M),'次失败'];elsex='奇异'endsyms x y; x=-5:0.1:5;ezplot('x^3-2*x-5',x)hold onezplot('x',x)ezplot(‘0’,x)grid onsyms x y;x=-5:0.1:5;ezplot('x^5-4*x-2',x)hold onezplot('x',x)ezplot(‘0’,x)grid onsyms x y;x=-4*pi:0.1:4*pi;ezplot('tan(x)',x)hold onezplot('x',x)ezplot('0',x) grid on。
数值分析的实验报告

数值分析的实验报告数值分析的实验报告导言数值分析是一门研究数值计算方法和数值计算误差的学科,它在科学计算、工程技术和社会经济等领域具有广泛的应用。
本实验旨在通过对数值分析方法的实际应用,验证其有效性和可靠性。
实验一:方程求根方程求根是数值分析中的基础问题之一。
我们选取了一个非线性方程进行求解。
首先,我们使用二分法进行求解。
通过多次迭代,我们得到了方程的一个近似解。
然后,我们使用牛顿法进行求解。
与二分法相比,牛顿法的收敛速度更快,但需要选择一个初始点。
通过比较两种方法的结果,我们验证了牛顿法的高效性。
实验二:插值与拟合插值与拟合是数值分析中常用的数据处理方法。
我们选取了一组实验数据,通过拉格朗日插值法和最小二乘法进行插值和拟合。
通过对比两种方法的拟合效果,我们验证了最小二乘法在处理含有噪声数据时的优势。
同时,我们还讨论了插值和拟合的精度与样本点数量之间的关系。
实验三:数值积分数值积分是数值分析中的重要内容之一。
我们选取了一个定积分进行计算。
首先,我们使用复化梯形公式进行积分计算。
通过增加分割区间的数量,我们得到了更精确的结果。
然后,我们使用复化辛普森公式进行积分计算。
与复化梯形公式相比,复化辛普森公式具有更高的精度。
通过比较两种方法的结果,我们验证了复化辛普森公式的优越性。
实验四:常微分方程数值解常微分方程数值解是数值分析中的重要应用之一。
我们选取了一个常微分方程进行数值解的计算。
首先,我们使用欧拉方法进行数值解的计算。
然后,我们使用改进的欧拉方法进行数值解的计算。
通过比较两种方法的结果,我们验证了改进的欧拉方法的更高精度和更好的稳定性。
实验五:线性方程组的数值解法线性方程组的数值解法是数值分析中的重要内容之一。
我们选取了一个线性方程组进行数值解的计算。
首先,我们使用高斯消元法进行数值解的计算。
然后,我们使用追赶法进行数值解的计算。
通过比较两种方法的结果,我们验证了追赶法在求解三对角线性方程组时的高效性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数值分析》实验报告班级信科1501 学号150803114 姓名梁恩昊日期2017.10.3实验一________ 方程求根_______一、实验目的:掌握二分法、Newt on法、不动点迭代法、弦截法求方程的根的各种计算方法、并实施程序调试和运行,学习应用这些算法于实际问题。
二、实验内容:二分法、Newt on法、不动点迭代法、弦截法求方程的根、程序的调试和运行,给出实例的计算结果。
观察初值对收敛性的影响。
三、实验步骤:①、二分法:定义:对于区间[a, b]上连续不断且f (a)・f (b) <0的函数y=f (x),通过不断地把函数f (x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
实现方法:首先我们设一方程400*(x A4)-300*(x A3)+200*(x A2)-10*x-仁0 ,并求其在区间[0.1,1]上的根,误差限为e=10A-4。
PS:本方法应用的软件为matlab。
disp('二分法')a=0.1;b=1;tol=0.0001;n0=100;fa=400*(a.A4)-300*(a.A3)+200*(a.A2)-10*a-1;for i=1: n0 p=(a+b)/2;fp=400*(p.A4)-300*(p.A3)+200*(pA2)-10*p-1;if fp==0||(abs((b-a)/2)<tol)disp(' 用二分法求得方程的根p=')disp(p)disp(' 二分迭代次数为:')disp(i)break;end;if fa*fp>0 a=p; else b=p;end;end;if i==n0&&~( fp==0||(abs((b-a)/2)<tol)) disp( n0) disp('次二分迭代后没有求出方程的根') end;程序调试:A«^SK»■ J^+JK KL::-L4*«r-j.I JX p«I K*bl >r2ffp"iDb* p. 4)^J &6" p> 31+2D0» ■ p. Z E ]. if fji-=< 11 f*b. i 'b-» i /2 ■ <t *)14±JP •図二好去求谭才程的Mhh)dljp pj4U. ' i)勺巩妙.*nd:if e&*fp 'O E=P*194 b=1>rnd.;If UsuCSr rp=Ql II»Ife-Sl IlTil^SXr&li 4-llpi WI nsns' 「二〒迭代垢归*i X出方程茁霍r “二泌曲二讨;t3HS芳壮甘训壮匕«. n$9_曲乜竹Tfl-n:Uk r>\运行结果:用二分法求得方程的根p=0.1108二分迭代次数为:14②Newton 法Vllw M Faim0.1BQ^1104MiaawEeaE7«■IMMM sitaLWJOr-CA UJM宀li > aihJ H^.ul 囈鬥收i-1 严 f rt*b>F2, .fp=-;00rlp ■jJ-MKhri-p - 3)4 200. p. ■?” if fp=:!| I ahi lh-3l Z'<t^ll•HL13JI 均一-蹙車啤*||?星:必屮样iiusC 二特为t "tt F ' ••bcA&k 卜曲it 忸4=>.llAt fe^F.4H4 :'if i—rOtt ""(f p—-fl 11 I' ②讥=dlTpC r 二一:启Tf; 7■尢詳国••舉■亡远-" □ * * SI ■ ■ Q ■ 113知祢硝—■福鼻耕■ |ibhb-irfpte电R曰昌昌曰曰定义:取定初值xO,找到函数对应的点,然后通过该点作函数切线,交x轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直到收敛到需要的精度。
实现方法:我们与二分法一样,先设一方程400*(x A4)-300*(x A3)+200*(x A2)-10*x -仁0 ,并求其在区间[O.1,1] 上的根。
PS:本方法应用的软件为matlab。
syms x;diff(400*(x.A4)-300*(x.A3)+200*(x.A2)-10*x-1) %求导方程函数文件:function Newton=fun(a)Newton=400*(a.A4)-300*(a.A3)+200*(a.A2)-10*a-1;endfunction Newton2=dfun(b)Newton2=1600*bA3-900*bA2+400*b-10; %fun 函数的导数end主程序:x0=1;while 1x1=x0-fun(x0)/dfun(x0);if abs(x1-x0)<1e-8 || abs(fun(x1))<1e-10 break;end x0=x1; enddisp('用牛顿法求得的方程的根为:x=') disp(xl)程序调试:运行结果:用牛顿法求得的方程的根为:x=0.1108③ 、不动点迭代法:采用不动点迭代法计算x3+4x2-10=0,在区间[1,2]上的一个根PS :本方法应用的软件为 matlab 。
不动点迭代法程序: 函数文件:fun ctio n [y, n]=BDD(x,eps) if nargin==1 eps=1.0e-6;elseif nargin<1 error return end x1=gg(x); n=1;while (norm(x1-x)>=1e-6)&&(n<=10000) x=x1; x1=gg(x); n=n+1;-Lorrm' a nd 虚 ndcwWorksc^iceJCIjP Select u . VaAuoiM; wh iU 】T L=nr[l- f'jn (xO).' dfrm I'xQ ]if absixl-xflK le-B 11| ibs fur ':Ki ' I c ]e-]0 bl-=Eik q end h Ait Ji , enddivpl Fill ff- 153175*肋料加 >diT13^1>阳*科議rr 讦的万朝的博沟孟num却anb d?扫iM pz L 匸一出mffi 出ffiFR uQU30.1 lfl?Id 1QO町.111 OBl.DDDZ-e-M 4.11GBC.1WBConruiTisnd HiMHiry -« □ * X■™d:-x J=1话ih 111 =a J-£un' z.0 df un xOif IH L-T O * c I e-3 || abs—tE?M ;ETLd- B O=W ], tjud山和r 匡牛帧1我弓涉方竈片y=x;M函数:function f=gg(x)f(1)=sqrt(2.5-(xA3)/4);结果如下:>> BDD(1)n =21ans =1.3652④、弦截法:定义:弦截法是求非线性方程近似根的一种线性近似方法。
它是以与曲线弧AB对应的弦AB 与x轴的交点横坐标作为曲线弧AB与x轴的交点横坐标的近似值□来求出方程的近似解。
该方法一般通过计算机编程来实现。
弦截法的原理是以直代曲即用弦 (直线) 代替曲线求方程的近似解,也就是利用对应的弦与轴的交点横坐标来作为曲线弧与轴的交点横坐标的近似值。
实现方法:我们与二分法一样,先设一方程400*(x A4)-300*(x A3)+200*(x A2)-10*x -仁0 ,并求其在区间[0.1,1] 上的根。
PS:本方法应用的软件为matlab。
函数文件:function[p1,err,k,y]=secant(f,p0,p1,delta,max1) % f 是非线性函数%p0,p1 是初始值%delta 是给定允许误差%max是迭代次数的上限%p1是所求得的方程的近似解%err 是p1-p0 的误差估计%k 是所需要的迭代次数%y=f(p1)K=0,p0,p1,feval('f',p0),feval('f',p1)for k=1:max1 p2=p1-feval('f',p1)*(p1-p0)/(feval('f',p1)-feval('f',p0));err=abs(p2-p1);p0=p1;p1=p2;k,p1,err,y=feval('f',p1)if(err<delta)|(y==0),break,endendM文件:seca nt('400*(xA4)-300*(xA3)+200*(xA2)-10*x-1=0',0,1,1.0e-4,100);disp('用弦截法求得的方程的根为:x=')disp(p1)运行结果:用弦截法求得的方程的根为:x=0.1108四、实验中遇到的问题及解决方法:MATLAB运用不熟练,于是翻开以前的课本与ppt,并结合网上查阅的资料,才又掌握了一些基础的运用方法。
一开始忘了怎么创建函数文件,于是实现二分法的程序时变得十分麻烦。
后来复习过后,运用在牛顿法上,就简单了许多。
二分法与牛顿法是比较容易掌握并实现的,而后两个方法则是查阅了很多资料,却仍然似懂非懂,程序也是大部分参考了资料。
我将在此之后继续钻研它们,直到能熟练运用为止。