实验四 非线性方程的求根
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
end k x1
得到结果为:
初值 迭代次数 k=65 迭代结果
x0 =0.200
结果检验:
x1 =2.0844 + 2.7330i
将迭代结果 x1 代入原方程 x 2 3 x 2 e x 0 ,在 Matlab 命令窗口输入: abs(x1^2-3*x1+2-exp(x1)),得到 5.1676e-006,结果非常接近 0,比较可靠。
*
ek 1 ek
p
e xk 3xk 2 x* xk x
1 * 2
1 ,故该迭代函数是线性收敛的。 2
6
利用 Matlab 编程计算: (取初值为 0.2;精度为 10 )
程序功能:线性迭代函数求根 clear,clc x0=0.2%定义初值 e=10^-6;%定义精度为 10 的-6 次方 N=500;%最大迭代次数 k=0;%迭代次数 while k<N
实验名称: 实验时数: 2
实验四 方程求根
指导教师:
++
数值分析实验组
实验设备:安装了 Matlab、C 、VF 软件的计算机 第五教学楼北 802 或 902
实验日期:2015 年 11 月 10 日 实验地点: 实验目的:
1. 掌握非线性方程数值解法的基本思想和基本步骤。 2. 理解各类数值方法的优缺点,并能自行编程求解。
x 3 2 x 2 10 x 20 0
的一个根 x 1.368808107 , 当时颇为轰动,但无人知道他是用什么方法得到的。现在, 请你试试用二分法和 Newton 迭代法求解上述方程能否得到这个结果。
D 题 用简单迭代法求方程 f ( x) 2 x x 1 0 的根。 方案一: 化 f ( x) 2 x x 1 0 为等价方程 x 3
实验过程:
实验选题:A 题 问题一:
对方程变形处理
x 2 3x 2 e x 0 x 2 e x 3x 2
x e x 3x 2
即迭代函数为:
( x) e x 3x 2
xk 1 e xk 3xk 2 xk x ,由于 lim 设 lim k k
3 xk xk 1 ,编写程序进行实验,分别取 x0 0 , 2 3xk 1
(1)对牛顿迭代公式: x k 1 x k
x0 1.5 迭代 10 次,观察比较其计算值,并分析原因。
(2)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1)的结果进行比较。 C题 公元 1225 年,Lenardo 宣布他求得方程
6
。
(1)请自行设计一种线性收敛的迭代法求方程的根,输出迭代初值、各次迭代值及迭 代次数。 (2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的 结果比较。 (3)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1) 、 (2)的结果进行 比较。 B题 求方程 x 3 x 1 0 在 x =1.5 附近的根。
实验总结(由学生填写) :通过这次实验,我学会了非线性方程数值解法的基本 思想和步骤,能自行编写迭代程序进行计算,了解了迭代方法的优缺点。
3. 初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,体 会不同初值对同一迭代函数的影响。
实验准备:
1. 在开始本实验之前,请回顾教科书的相关内容; 2. 需要一台准备安装 Windows XP Professional 操作系统和装有数学软件的计算机。
实验内容及要求
A题 求非线性方程 x 2 3 x 2 e x 0 的根,准确到 10
% % % %
x1=sqrt(3*x0+exp(x0)-2); x1=log(x0^2-3*x0+2); x1=exp(x0)/(x0-2)+1; x1=x0+(4+sqrt(16-4*(x0^2+2)))/2; x1=x0^2-2*x0+2-exp(x0); if abs(x1-x0)<e break end x0=x1; k=k+1;
3 3
ቤተ መጻሕፍቲ ባይዱ
3
x 1 ( x) 2
方案二: 化 f ( x) 2 x x 1 0 为等价方程 x 2 x 3 1 ( x ) (1)分别对方案一、方案二取初值 x0 0 ,迭代 10 次,观察其计算值,并加以分析。 (2)用 MATLAB 内部函数 solve 直接求出方程的所有根,并与(1)的结果进行比较。 说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表 等内容。
问题二:
f ( x) , k 0,1, f '( x) x 2 3xk 2 e xk 带入得到迭代格式为 xk 1 xk k 2 xk 3 e xk
牛顿法公式: xk 1 xk 利用 Matlab 编程计算: (取初值为 0.2;精度为 10 )
程序功能:牛顿法迭代 clear,clc x0=0.2%定义初值 e=10^-6;%定义精度为 10 的-6 次方 N=500;%最大迭代次数 k=0;%迭代次数 f=inline('x^2-3*x+2-exp(x)')%取 a=27 为例 df=inline('2*x-3-exp(x)') while k<N x1=x0-feval(f,x0)/feval(df,x0); if abs(x1-x0)<e break end x0=x1;
6
k=k+1; end k x1
得到结果
初值 迭代次数 k=2 迭代结果
x0 =0.200
与 1 问结果进行比较:
x1 =0.2575
x0 =0.200
k=65
x1 =2.0844 + 2.7330i
相比之下,牛顿法初值不变,迭代次数大大减少,结果更为精确。
问题三:
用 MATLAB 内部函数 solve 直接求出方程的所有根,在命令窗口输入 solve('x^2-3*x+2-exp(x)','x') 得到结果 0.25753028543986076045536730493724 结果比较: 求出的结果与牛顿法求出的结果基本一致。