实验报告二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江大学城市学院实验报告
课程名称 科学计算
实验项目名称 一元非线性方程的解法
实验成绩 指导老师(签名 ) 日期
一. 实验目的和要求
1. 用Matlab 软件掌握求解非线性方程的二分法、迭代法和牛顿法,并对结果作初步分析;
2. 通过实例练习用非线性方程求解实际问题。
二. 实验内容和原理
分析应用题2-1,2-2,2-3,2-4,2-5要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1 程序注释
对用二分法、迭代法和牛顿法求一元非线性方程数值解的Matlab 程序的每一句添上注释。 二分法: [x,n]=BisectionMethod(a,b,f,epsi,Nmax)
迭代法: [x,n]=IterationMethod(x0,g,epsi,Nmax)
Newton 法: [x,n]=NewtonMethod(x0,f,epsi,Nmax)
2-2 分析应用题 用二分法求方程2
()sin 04
x f x x =-=和()sin 0x g x e x =-=根的近似值,使误差不超过210-,输出每次二分之后解的近似结果以及二分的次数,其中()0g x =的根只需求最接近原点的那个根。
2-3 分析应用题
已知方程230x
x e -=有以下三种迭代格式,分析三种迭代格式的收敛性,求出迭代精度为610-的数值结果,并比较迭代序列的收敛速度。
1
)1n x += 2)12ln ln3n n x x +=+ 3)136n n x n n n x n x e x x x e +-=--
2-4 分析应用题
用下列方法求方程1020x
e x +-=的近似根,要求误差不超过31102-⨯,并比较计算量。 1)在区间[0, 1]上用二分法;
2)取初值0x =,并用迭代过程12(0,1,2,.......)10
k x k e x k +-==;
3)取初值00x =用牛顿法求解。
2-5 分析应用题
以定期存储为基础的储蓄帐户的累积值可由定期年金方程确定
[(1)1]n P A i i
=+- 在这个方程中,A 是帐户中的数额,P 是定期存储的数额,i 是n 个存储期间的每期利率。一个工程师想在20年后退休时储蓄帐户上的数额达到750000美元,而为了达到这个目标,他每个月能存1500美元。为实现他的储值目标,最小利率应是多少?假定利息是月复利的。
选做题
试用Newton 迭代法分别求解方程(1)
0,3,6,12m x m -==,取迭代初始值0 1.5x =,要求误差不超过510-,观察迭代序列的收敛情况,分析所发生的现象。能否改造Newton 法使
得它收敛更快?
三. 操作方法与实验步骤(包括实验数据记录和处理)
1.
(1)
以y=x.^2-3*x+2-exp(x)为例
1)二分法(文件名:bisect.m)
a)function[R]=bisect(f,a,b,e1,n)
% f 要求根函数名
% a 初试有根区间最小值
% b 初试有根区间最大值
% e 精度
% n 迭代次数
k=0;
fb=feval_r(f,b);
fa=feval_r(f,a);
x=(a+b)/2;
fx=feval_r(f,x);
while abs(a-b)>e1&k k=k+1; disp([k,x,fx,abs(a-b)]); %显示迭代过程 if fx*fa<0 b=x; fb=fx; else a=x; fa=fx; end x=(a+b)/2; fx=feval_r(f,x); end R=x; b) 二分法、牛顿法所需用的原函数(文件名Myfun.m:) function[y]=myfun(x) y=x.^2-3*x+2-exp(x) (2) 普通迭代法(文件名:DieDai.m) a) function [R]=DieDai(g,x1,N,e) %普通迭代法 % g要求根函数名 %x1迭代初值 %N迭代最大次数 %e 精度 k=0; x2=feval_r(g,x1); while abs(x2-x1)>e&k k=k+1; disp([k,x1,x2,abs(x1-x2)]); 显示迭代过程% x1=x2; x2=feval_r(g,x1); end R=x2; if k==N error('error'); % 所需迭代已达到 end b) 实现定点迭代法所需用的函数(文件名:myfun1.m) function[y]=myfun1(x) % 要求的函数方程 y=(x.^2+2-exp(x))/3 (3) 3)牛顿法(文件名:Newton.m) a)function [R]=newton(g,dg,x0,n,e) %牛顿法 %g 要求根函数名 %dg 要求根函数的导函数名 %x0 初值 %e精度 %n 迭代次数 x1=x0- feval_r(g,x0)/feval_r(dg,x0); k=0; while k k=k+1; if feval_r(dg,x0)==0 error(error) ;%导函数为0程序停止 else disp([k,x1,x0,abs(x1-x0)]);