Newton迭代法与有限差分迭代法求解方程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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法收敛速度比有限差分法快。

相关文档
最新文档