割线法与隐函数图像.docxVIP

  • 9
  • 0
  • 约4.22千字
  • 约 10页
  • 2019-02-13 发布于广东
  • 举报
专业     序号   姓名      日期     实验3 割线法 【实验目的】 学会分别用单点割线法和双点割线法来求解方程的根 【实验内容】 用割线法求方程在区间(1,1.5)内之间的根()。 【方法】 双点割线法: 设a,b为迭代初值,求两点(a,f(a)) 与 (b,f(b)) 的连线(割线)与 x 轴的交点记为 c, 再把迭代初值换成 b,c,重复计算. 单点割线法: 设a,b为迭代初值,求两点(a,f(a)) 与 (b,f(b)) 的连线(割线)与 x 轴的交点记为 c, 但只把一个迭代初值a换成c或把b换成c,来看结果是否不同。 【程序如下】: function mysecant f = inline(x^4+2*x^2-3-x); a =1.5;b =1; delta = 1e-9; epsilon = 1e-9; max1 = 20; [c,err,iter,yc] = secant(f,a,b,delta,epsilon,max1) % --------------------------------------------------------- function [c,err,iter,yc] = secant(f,a,b,delta,epsilon,max1) % [c,err,iter,yc] = secant(f,a,b,delta,epsilon,max1) % 输入: f 连续函数 % % a,b 迭代初值 % % delta,epsilon 容差 % % max1 最大迭代次数 % % 输出: c 近似根 % % err 误差 % % iter 迭代次数 % % yc = f(c) % for k = 1:max1 ya = feval(f,a); % ya = f(a) yb = feval(f,b); c = b-f(b)*(b-a)/(f(b)-f(a)); % 割线与 x 轴交点的横坐标 err = abs(c-b); % 相邻两次迭代的误差 relerr = err/(abs(c)+eps); % 相对误差,eps 是matlab常数(机器精度)约为1e-16 % 为什么分母要加上一个小常数? yc = feval(f,c); if (errdelta) | (relerrdelta) | (abs(yc)epsilon) % |是或 break end a = b;%单点割线法时,将a用c替换,b不变 b = c; end iter = k; % % ------------------------------------- 【运行结果如下】: 双点割线法: c = 1.12412302970431 err = 4.523648122756185e-010 iter = 6 yc = -7.993605777301127e-015 单点割线法(令b为定值): c = 1.12412302972061 err = 0.12412302972061 iter = 12 yc = 1.495257251349358e-010 单点割线法(令a为定值) c = 1.12412302922453 err = 1.026502216561198e-009 iter = 17 yc = -4.403701847621733e-009 【结果分析】: 这个实验中,双点割线法显然收敛速度明显快于单点割线法,可知双点割线法的收敛速度为,确实比单一的线性收敛快,并且迭代次数更少。 由结果可知,即使是同一种你算法,单点割线法的初值不同,同样会影响迭代次数,当分别以a和b为定值时,迭代次数则分别为17和12, 实验4 绘制的隐函数的图像 【方法】 众所周知,隐函数一般是不能用显式方式表示的, 故确定隐函数的大致图像是非常重要的. 对于方程 F(x,y) = 0 如果固定 x 就是一个关于 y 的非线性方程,我们可以通过求根的方法求出 y 因此只要对 x 离散化 x(k),k = 1,2,...,再求得 y(k) ,把点( (x(k),y(k)) )连

文档评论(0)

1亿VIP精品文档

相关文档