
2个回答
展开全部
%%以下是不动点主程序
function [xc,num,eps] = fpi(g,x0,phi,step)
if nargin<3
phi = 1e-6;
end
if nargin<4
step = 100;
end
preNum=x0;
num = 0;
eps = 1;
while eps>phi
afterNum=g(preNum);
eps = abs(afterNum-preNum);
preNum = afterNum;
num = num+1;
if num > 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之间来回折腾。可自行验证
有问题请留言
function [xc,num,eps] = fpi(g,x0,phi,step)
if nargin<3
phi = 1e-6;
end
if nargin<4
step = 100;
end
preNum=x0;
num = 0;
eps = 1;
while eps>phi
afterNum=g(preNum);
eps = abs(afterNum-preNum);
preNum = afterNum;
num = num+1;
if num > 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之间来回折腾。可自行验证
有问题请留言

2023-08-25 广告
"整定计算的工作步骤,大致如下:1.确定整定方案所适应的系统情况。2.与调度部门共同确定系统的各种运行方式。3.取得必要的参数与资料(保护图纸,设备参数等)。4.结合系统情况,确定整定计算的具体原则。5.进行短路计算。6.进行保护的整定计算...
点击进入详情页
本回答由北京埃德思远电气技术咨询有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询