计算方法实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算方法实验一
1.迭代函数对收敛性的影响
实验目的:初步了解非线性方程的简单迭代法及其收敛性,体会迭代函数对收敛性的影响,知道当迭代函数满足什么条件时,迭代法收敛。
实验内容:用简单迭代法求方程 012)(3=--=x x x f 的根。
方案一: 化012)(3=--=x x x f 为等价方程 )(213x x x φ==
∆+= 方案二: 化012)(3=--=x x x f 为等价方程 )(123
x x x φ==∆-=
实验要求:
(1)分别对方案一、方案二取初值00=x ,迭代10次,观察其计算值,并加以分析。
(2)用MATLAB 内部函数solve 直接求出方程的所有根,并与(1)的结果进行比较。
2. 初值的选取对迭代法的影响
实验目的:通过具体的数值实验,体会选取不同的初值对同一迭代法的影响。 实验内容:用牛顿迭代法求方程 013
=--x x 在x =1.5附近的根。
实验要求:
(1)对牛顿迭代公式: 131231----=+k k k k k x x x x x ,编写程序进行实验,分别取00=x ,5.10=x 迭代10次,观察比较其计算值,并分析原因。
(2)用MATLAB 内部函数solve 直接求出方程的所有根,并与(1)的结果进行比较。
1. 收敛性与收敛速度的比较
实验目的:通过用不同迭代法解同一非线性方程,比较各种方法的收敛性与收敛速度。 实验内容:求解非线性方程 0232=-+-x e x x 的根,准确到10
6-。
实验要求:
(1) 用你自己设计的一种线性收敛的迭代法求方程的根,然后用斯蒂芬森加速迭代计算。输出迭代初值、各次迭代值及迭代次数。
(2)用牛顿迭代法求方程的根,输出迭代初值、各次迭代值及迭代次数,并与(1)的结果比较。
(3)用MATLAB内部函数solve直接求出方程的所有根,并与(1)、(2)的结果进行比较。
相关MATLAB函数提示:
参考程序
function [p0,err,k,y]=newton(f,df,p0,delta,epsilon,max1)
%Input - f is the object function
% - df is the derivative of f
% - p0 is the initial approximation to a zero of f
% - delta is the tolerance for p0
% - epsilon is the tolerance for the function values y
% - max1 is the maximum number of iterations
%Output - p0 is the Newton-Raphson approximation to the zero
% - err is the error estimate for p0
% - k is the number of iterations
% - y is the function value f(p0)
%If f and df are defined as M-file functions use the @ notation
% call [p0,err,k,y]=newton(@f,@df,p0,delta,epsilon,max1).
%If f and df are defined as anonymous functions use the
% call [p0,err,k,y]=newton(f,df,p0,delta,epsilon,max1).
% NUMERICAL METHODS: Matlab Programs
% (c) 2004 by John H. Mathews and Kurtis D. Fink
% Complementary Software to accompany the textbook:
% NUMERICAL METHODS: Using Matlab, Fourth Edition
% ISBN: 0-13-065248-2
% Prentice-Hall Pub. Inc.
% One Lake Street
% Upper Saddle River, NJ 07458
for k=1:max1
p1=p0-f(p0)/df(p0);
err=abs(p1-p0);
relerr=2*err/(abs(p1)+delta);
p0=p1;
y=f(p0);
if (err