字典翻译 问答 其它 matlab:用牛顿法和割线法求方程x^3-6x^2+9x-2=0在区间[3,4]上的近似根。且满足精度|x*-xk|
问题标题:
matlab:用牛顿法和割线法求方程x^3-6x^2+9x-2=0在区间[3,4]上的近似根。且满足精度|x*-xk|
问题描述:

matlab:用牛顿法和割线法求方程x^3-6x^2+9x-2=0在区间[3,4]上的近似根。且满足精度|x*-xk|

唐桢安回答:
  以下保存为文件newtonqx.m   function [k,xk,yk,piancha]=newtonqx(x0,tol,gmax)   global fnq dfnq   x(1)=x0;   for i=1:gmax   x(i+1)=x(i)-fnq(x(i))/(dfnq(x(i)+eps)); %牛顿迭代公式 x(n+1)=x(n)-f(xn)/f'(xn), 为避免除以0,加上一个eps   piancha = abs(x(i+1)-x(i)); %计算迭代精度   i=i+1;   xk=x(i); %计算下一步   yk=fnq(x(i));   if( piancha<tol ) %满足迭代精度,则结束迭代   k=i-1;   xk=x(i);   yk=fnq(x(i));   break;   end   end   if i>gmax %迭代次数超过设定,结束迭代   disp('超过最大迭代次数')   k=i-1;   xk=x(i);   yk=fnq(x(i));   %[i-1 xk yk piancha];   return;   end   以下存为文件gexian.m   function [k,xk,yk,piancha]=gexian(x01,x02,tol,gmax)   global fnq dfnq   x(1)=x01;   x(2)=x02;   for i=2:gmax   %割线法迭代公式: x(n+1)=x(n)- f(x(n))*( x(n)-x(n-1))/(f(x(n))-f(x(n-1) )   % 即用x(n),x(n-1)上的差商替代导数f'(xn)   u(i)=fnq(x(i))*(x(i)-x(i-1));   v(i)=fnq(x(i))-fnq(x(i-1));   x(i+1)=x(i)-u(i)/(v(i));   piancha=abs(x(i+1)-x(i)); %计算迭代精度   %计算下一步   i=i+1;   xk=x(i);   yk=fnq(x(i));   %是否满足精度要求,是则停止迭代   if(piancha<tol)   k=i-2;   xk=x(i);   yk=fnq(x(i));   return   end   end   以下为主程序   % 分别用牛顿法和割线法求解方程 x^3-6x^2+9x-2=0在区间[3,4]上的近似根。   % 要求满足精度|x*-xk|<(1/2)*10^-4   clc;   clear all;   % 将待求解方程及其导函数定义为全局变量,以便在子函数中引用   global fnq dfnq   fnq = @(x) x^3 - 6*x^2 + 9*x - 2; %原方程   dfnq = @(x) 3*x^2 - 12*x + 9; %导函数   tol = (1/2)*10^-4; %精度要求   x0 = 3.5; %求解起始点=区间中点   gmax = 1e3; %求解最大迭代次数   x01 = 3; %求解区间   x02 = 4;   [k,xk,yk,piancha]=newtonqx(x0,tol,gmax);   fprintf('n牛顿法:%.5fn', xk);   [k,xk,yk,piancha]=gexian(x01,x02,tol,gmax);   fprintf('n割线法:%.5fn', xk);   运行结果:   牛顿法:3.73205   割线法:3.73205
点击显示
其它推荐
热门其它推荐
  • 其它