Newton迭代法与有限差分迭代法求解方程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
非线性方程的数值解法作业
1.问题表述
设20()12
f x x x ⎧=-⎨=⎩,试用Newton 迭代法与有限差分迭代法求解方程,并画出对比图像。迭代停止条件为61|()|(10)2
f x -<,即误差不超过61(10)2-。 2.MATLAB 程序
利用牛顿法求解非线性函数的根求解f(x)=x^2-1=0的根
初始值x0=2
实现方法:牛顿法,有限差分牛顿法
%% 主程序
function main
szfun1=zeros(1,50);
szfun2=zeros(1,50);%预存|f(xk)|的数组
% 牛顿法
tic,[szfun1,k1]=newton;s1=toc
hold on;
rx1=1:1:k1-1;
szfun1=szfun1(1:length(rx1));
plot(rx1,szfun1,':^b');
% 有限差分牛顿法
tic,[szfun2,k2]=YQCF_newton(1.2);s2=toc
rx2=1:1:k2-1;
szfun2=szfun2(1:length(rx2));
plot(rx2,szfun2,':or');
title('两种数值方法比较');
xlabel('迭代次数k');ylabel('|f(x)|函数值');
legend(['牛顿法','time:',num2str(s1)],['
有限差分
','time:',num2str(s2)]);
end
%% 牛顿法迭代格式
function [szfun1,k1-1]=newton
x0=2;xk=x0;k1=1;fk=abs(fun(xk));
while fk>1/2*10^-6
df=dfun(xk);%函数的导数值
%避免导数过小
if df<10^-10
df=df+1/2*rand(1);
end
xk_1=xk-fun(xk)/df;%牛顿迭代公式 xk=xk_1;%更新点
fk=abs(fun(xk));
szfun1(k1)=fk;
k1=k1+1;
end
end
%% 有限差分法迭代格式
function [szfun2,k2-1]=YQCF_newton(h) % h 初始迭代的步长
x0=2;xk=x0;k2=1;fk=abs(fun(xk)); while fk>1/2*10^-6
df=wfun(xk,h);%函数的导数值
%避免导数过小
if df<10^-10
df=df+1/2*rand(1);
end
xk_2=xk-fun(xk)/df;%牛顿迭代公式 xk=xk_2;%更新点
fk=abs(fun(xk));
szfun2(k2)=fk;
k2=k2+1;h=rand(1)*h;
end
end
%% 辅助函数
function y=fun(x)
y=x^2-1;
end
% 函数导数
function dirv_y=dfun(x)
dirv_y=2*x;
end
% 差商带微商
function wy=wfun(x,h)
if h<10^-10
h=h+1/2*rand(1);
end
wy=(fun(x+h)-fun(x))/h;
end
3.程序结果
表1:
图1:
4.结果分析
由程序结果可知:对于Newton法,达到问题要求的精度只需要4步,运行时间为0.0037,收敛速度很快;对于有限差分法,达到问题要求的精度只需要6步,运行时间为0.0039,收敛速度比newton慢些。综上可知:Newton法收敛速度比有限差分法快。