作业帮 > 综合 > 作业

用不动点迭代法求某函数的近似解的matlab程序怎么写?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/05 08:29:04
用不动点迭代法求某函数的近似解的matlab程序怎么写?
还有怎么求迭代次数和怎么要求精确度.
%%以下是不动点主程序
function [xc,num,eps] = fpi(g,x0,phi,step)
if nargin step
disp('超过迭代次数,可能不收敛')
break;
end
end
xc = afterNum;
==================
下面是该程序的用法,比如我们想要求x^3+x-1=0的根,按如下的步骤进行:
1、首先将其转换成x=g(x)的形式,比如我将其转换成 x = (1-x)^(1/3)这种开立方的形式
2、将这种形式写成函数,即此时有g(x) = (1-x)^(1/3),将下面的代码保存成g.m文件:
  function y = g(x)
  y = nthroot(1-x,3);
3、调用上面的主程序,后面两个参数是可选的,第三个参数表示你要求的最低精度,默认值为1e-6,第四个参数表示最大迭代次数,默认是100次.
  [xc,num,eps] = fpi(@g,0.8)
获得结果如下:(xc就是根,num是实际迭代次数,eps是根的精度)
xc =
0.6823
num =
38
eps =
9.5514e-07
================
以下是几点说明:
① 不动点的形式也可能有其它种形式,比如x=1-x^3,但是它不收敛,具体原因请参考数学书,这里可以提示一下,在根附近的其导数的绝对值大小1
② 所取的初始值最好在根附近,别太远.不动点法在离根较远时可能不收敛(虽然在根附近会收敛),上面的程序若取初值为1的话,最后并不收敛,会在0与1之间来回折腾.可自行验证
有问题请留言