一、实验目的
1、理解非线性方程求根方法二分法、迭代法、牛顿法的基本思想和实现原理;
2、在MATLAB软件上编程,用这三种方法求解方程f(x)=0的根,并比较三种方法的区别和优劣。
二、实验环境
MATLAB软件
三、实验原理
二分法
%程序2.1--mbisec.m
function [x,k]=mbisec(f,a,b,ep)
%用途:用二分法求非线性方程f(x)=0有根区间[a,b]中的一个根
%格式:x=mbisec(f,a,b,ep) f为函数表达式,
% a, b为区间左右端点,ep为精度,x, k分别返回近似根和二分次数
x=(a+b)/2.0; k=0;
while abs(feval(f,x))>ep|(b-a>ep)
if feval(f,x)*feval(f,a)<0
b=x;
else
a=x;
end
x=(a+b)/2.0; k=k+1;
end
迭代法
%程序2.2--miter.m
function [x,k]=miter(phi,x0,ep,N)
%用途:用简单迭代法求非线性方程f(x)=0有根区间[a,b]中的一个根
%格式:[x,k]=miter(phi,x0,ep,N) phi为迭代函数, x0为初值, ep为精度
%(默认1e-4), N为最大迭代次数(默认500), x,k分别返回近似根和迭代次数
if nargin<4 N=500;end
if nargin<3 ep=1e-4;end
k=0;
while k<N
x=feval(phi,x0);
if abs(x-x0)<ep
break;
end
x0=x;k=k+1;
end
牛顿法
%程序2.4--mnewton.m
function [x,k]=mnewton(f,df,x0,ep,N)
%用途:用牛顿法求解非线性方程f(x)=0
%格式:[x,k]=mnewton(f,df,x0,ep,N) f和df分别为表示f(x)
%及其导数, x0为迭代初值, ep为精度(默认1e-4), N为最大迭代
%次数(默认为500), x,k分别返回近似根和迭代次数
if nargin<5,N=500;end
if nargin<4,ep=1e-4;end
k=0;
while k<N
x=x0-feval(f,x0)/feval(df,x0);
if abs(x-x0)<ep
break;
end
x0=x; k=k+1;
end