数学软件课程设计
题目非线性方程求解
班级数学081
姓名曹曼伦
实验目的:用二分法与Newton迭代法求解非线性方程的根;
用Matlab函数solve、fzero、fsolve求解非线性方程(组)的解。
编程实现二分法及Newton迭代法;
学会使用Matlab函数solve、fzero、fsolve求解非线性方程(组)的解。
通过实例分别用二分法及迭代法解非线性方程组并观察收敛速度。
实验内容:
比较求exp(x)+10*x-2的根的计算量。
(要求误差不超过十的五次方)
(1)在区间(0,1)内用二分法;
(2)用迭代法x=(2-exp(x))/10,取初值x=0 。
试验程序
(1)二分法:
format long
syms x
s=exp(x)+10*x-2
a=0;
b=1;
A=subs(s,a)
B=subs(s,b)
f=A*B %若f<0,则为由根区间
n=0;
stop=1.0e-5;
while f<0&abs(a-b)>=stop&n<=100;
Xk=(a+b)/2; %二分
M= subs(s, Xk);
if M* A<0
symbol=1 %若M= subs(s, Xk)为正,则与a二分
b= Xk
else
symbol=0 % 若M= subs(s, Xk)为负,则与b二分
a= Xk
end
n=n+1
end
Xk
n
(2)牛顿迭代法;
format long
syms x
s= (2-exp(x))/10; %迭代公式
f=diff(s);
x=0; %迭代初值
a=subs(f,x); %判断收敛性(a是否小于1)
s=(2-exp(x))/10;
stop=1.0e-5; %迭代的精度
n=0;
while a<1&abs(s-x)>=stop&n<=100;
x=s %迭代
s=(2-exp(x))/10;
n=n+1
end
实验结果:
(1)二分法:
symbol =1 b =0.50000000000000 n =1
symbol =1 b =0.25000000000000 n =2
symbol =1 b =0.12500000000000 n =3
symbol =0 a =0.06250000000000 n =4
symbol =1 b =0.09375000000000 n =5
symbol =0 a =0.07812500000000 n =6
symbol =1 b =0.09054565429688 n =15
symbol =1 b =0.09053039550781 n =16
symbol =0 a =0.09052276611328 n =17
Xk =0.09052276611328
n =17
(2)迭代法
由x =0.10000000000000 n =1
x =0.08948290819244 n =2
x =0.09063913585958 n =3
x =0.09051261667437 n =4
x =0.09052646805264 n =5
试验结果可见用二分法需要算17次,而用迭代法求得同样精度的解仅用5次,但由于迭代法一般只具有局部收敛性,因此通常不用二分法来求得非线性方程的精确解,而只用它求得根的一个近似解,再用收敛速度较快的迭代法求得其精确解。