实验四 非线性方程的求根

  • 格式:docx
  • 大小:65.93 KB
  • 文档页数:4

实验名称: 实验四 方程求根 指导教师: 数值分析实验组
实验时数: 2 实验设备:安装了Matlab、C++、VF软件的计算机
实验日期:2015年 11 月 10 日 实验地点: 第五教学楼北802或902
实验目的:
1. 掌握非线性方程数值解法的基本思想和基本步骤。
2. 理解各类数值方法的优缺点,并能自行编程求解。
3. 初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,体
会不同初值对同一迭代函数的影响。
实验准备:
1. 在开始本实验之前,请回顾教科书的相关内容;
2. 需要一台准备安装Windows XP Professional操作系统和装有数学软件的计算机。
实验内容及要求

A题 求非线性方程0232xexx的根,准确到106。
(1)请自行设计一种线性收敛的迭代法求方程的根,输出迭代初值、各次迭代值及迭
代次数。
(2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的
结果比较。
(3)用MATLAB内部函数solve直接求出方程的所有根,并与(1)、(2)的结果进行
比较。

B题 求方程 013xx在x=1.5附近的根。

(1)对牛顿迭代公式: 131231kkkkkxxxxx,编写程序进行实验,分别取00x,
5.10x
迭代10次,观察比较其计算值,并分析原因。

(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。
C题 公元1225年,Lenardo宣布他求得方程
32
210200xxx

的一个根1.368808107x, 当时颇为轰动,但无人知道他是用什么方法得到的。现在,
请你试试用二分法和Newton迭代法求解上述方程能否得到这个结果。
D题 用简单迭代法求方程 012)(3xxxf的根。
方案一: 化012)(3xxxf为等价方程 )(213xxx
方案二: 化012)(3xxxf为等价方程 )(123xxx
(1)分别对方案一、方案二取初值00x,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB内部函数solve直接求出方程的所有根,并与(1)的结果进行比较。
说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表
等内容。
实验过程:
实验选题:A题

问题一:
对方程变形处理
0232xexx
232x
xex

32xxex
即迭代函数为:
3(2)xexx

132kxkkxex


设*limkkxx,由于11*2*31lim22kxkkpkkkexexxxe,故该迭代函数是线性收敛的

利用Matlab编程计算:(取初值为0.2;精度为610)
程序功能:线性迭代函数求根
clear,clc
x0=0.2%定义初值
e=10^-6;%定义精度为10的-6次方
N=500;%最大迭代次数
k=0;%迭代次数
while kx1=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)break
end
x0=x1;
k=k+1;
end
k
x1

得到结果为:
初值
迭代次数 迭代结果

0x=0.200 k=65 1
x
=2.0844 + 2.7330i

结果检验:
将迭代结果1x代入原方程0232xexx,在Matlab命令窗口输入:
abs(x1^2-3*x1+2-exp(x1)),得到5.1676e-006,结果非常接近0,比较可靠。

问题二:
牛顿法公式:1(),0,1,'()kkfxxxkfx
带入得到迭代格式为213223kkxkkkkxkxxexxxe
利用Matlab编程计算:(取初值为0.2;精度为610)
程序功能:牛顿法迭代
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 kx1=x0-feval(f,x0)/feval(df,x0);
if abs(x1-x0)break
end
x0=x1;
k=k+1;
end
k
x1

得到结果
初值 迭代次数 迭代结果
0x=0.200 k=2 1
x
=0.2575

与1问结果进行比较:
0x=0.200 k=65 1
x
=2.0844 + 2.7330i

相比之下,牛顿法初值不变,迭代次数大大减少,结果更为精确。
问题三:
用MATLAB内部函数solve直接求出方程的所有根,在命令窗口输入
solve('x^2-3*x+2-exp(x)','x')

得到结果
0.25753028543986076045536730493724
结果比较:
求出的结果与牛顿法求出的结果基本一致。

实验总结(由学生填写):通过这次实验,我学会了非线性方程数值解法的基本
思想和步骤,能自行编写迭代程序进行计算,了解了迭代方法的优缺点。