Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2015-12-23, 10:08   #1
冲哇咔咔
初级会员
 
注册日期: 2015-12-02
年龄: 33
帖子: 1
声望力: 0
冲哇咔咔 正向着好的方向发展
警告 matlab斯蒂文森迭代精度及输出出现复数

使用斯蒂文森迭代求解非线性方程,斯蒂文森迭代公式如下:
%Steffensen迭代解非线性方程
function[r,n]=Steffensen(x0,eps)
%if nargin==2
% eps=1.0e-10; %默认迭代精度
%end
y=myf(x0);
z=myf(y);
r=x0-(myf(x0)-x0)^2/(myf(y)-2*myf(x0)+x0);
n=1;
err=0.1;

while err>eps
x0=r;
r=x0-(myf(x0)-x0)^2/(myf(y)-2*myf(x0)+x0);
err=abs(r-x0);
n=n+1;
if(n>100000)
disp('迭代步数太多,可能不收敛')
return;
end
end
end

function f=myf(x)
%f=3*x.^2-exp(x);
f=2*log(x)+log(3);
end %end f


在命令窗口输入[r,n]=Steffensen(3.5,1.0e-4)时能够输出正常的实数值,但当提高精度后例如输入[r,n]=Steffensen(3.5,1.0e-5)就开始输出0.9144+0.0000i,同是输入format long后再次运行[r,n]=Steffensen(3.5,1.0e-5),输出为0.914378007984216+0.000010915415698i,正常的迭代后解在3.7附近,求大神指教啊!
冲哇咔咔 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 16:33


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.