二分法与牛顿迭代作业
二分法
利用matlab 编程实现二分法,并验证程序
程序如下
function solve(fx,a,b,n,tol)%定义函数名为solve ,变量fx 为待求函数推导而来,且满足fx=0;a b 为每次计算区间的两端数值,n 为最大运算次数,tol 代表误差
x=a;
fa=eval(fx);%求出给定区间左侧对应函数值
x=b;
fb=eval(fx); %求出给定区间右侧对应函数值
disp(' [n a b c fc]');%工作区预先显示标头
for i=1:n%限制循环次数最大为n
c=(a+b)/2;x=c;fc=eval(fx);%c为区间中点,fc 为中点处对应的函数值
X=[i,a,b,c,误差];
disp(X),%显示循环次数及对应的a b c及误差的值
if fc*fa
b=c;
else a=c;
end%二分法每次求取区间端点数值
if (b-a)
break
end%如果计算结果达到精度要求则停止运算给出结果 end%函数定义完成
根据要求进行函数计算,对课后习题6进行解答。则给出函数为x^2-6=0,求其在给定区间(2,2.5)区间上所对应的解。
运算结果如下:
容易知道方程的解为2.449
牛顿迭代法
利用MATLAB 编程实现牛顿迭代法并验证程序。
程序如下:
function newton (fx,dfx,x0)%创建牛顿迭代法函数newton ,其中fx 为待求函数,dfx 为所给函数的导数,x0为初始值
x=x0;
a=eval(fx);
b=eval(dfx);%分别求得对应点处fx 与dfx 的值
disp('[ n x x1 误差 ]’) x1=x-a/b;
n=1;%初始迭代次数为1
while (abs(x1-x)>=tol)&(n
x1=x-a/b;
X=[n,x,x1,abs(x1-x)];
disp(X);%分别列出每次的运算结果
n=n+1;
end
x1
disp('n =');disp(n-1); %分别列出最终的近似值以及运算次数
运行结果如下
容易知道在误差为1e-14的情况下使用牛顿迭代法,需要运行6次,且最终的结果为2.[1**********]317
通过两种方法的对比可以知道,牛顿迭代法能够更快的逼近结果