两变数牛顿迭代的荒谬问题
function =newd(x0,eps)%这是一个用牛顿迭代法求解非线性方程组近似解的函数%
%x0是迭代的初值向量,esp为精度。中y为近似解,n为迭代次数%
if nargin==2, eps=1.0e-6
elseif nargin<2, error; return; end
x1=x0-fnew(x0)/diff(fnew(x0)); j=1;
while(norm(x1-x0)>=1.0e-6)&(j<10000)
x0=x1; x1=x0-fnew(x0)/diff(fnew(x0)); j=j+1;
end
y=x0; n=j;
调用这个求解
function y=fnew(x)
y(1)=x(1)*x(1)-8*x(1)+x(2)*x(2)+6; y(2)=4*x(1)-8*x(2)+6;
y=;
结果是程序无限运行,如果将j<100的话,得出的结果又很荒谬。其实只需迭代10次就可以得出结果y=
我的MATLB是7.04版本的是程序的问题还是版本的问题呀?
[ 本帖最后由 ChaChing 于 2009-5-2 10:09 编辑 ] 检查程序 他是不会计算错的 可能是程序有问题 看看是否是你需要的思路 程序已经都在上面了 是我从书上抄下来的一个例子,也差不多是我需要的 有些书上的东西可能会有错误。一般来说,经典方法是不会有问题的。 我抄的程序全部在上面,那位可不可以帮忙检查一下,看是那里出错了。我昨晚检查了一晚上就是不知道那里出错了。 牛顿迭代学生时代玩过, 但时间久远已经模糊了! 又懒得查证
书上的例子也是针对两个变数吗? 单变数牛顿迭代可以使用在两变数吗?
[ 本帖最后由 ChaChing 于 2009-3-25 22:51 编辑 ] 是的呀,我这是照搬的,一字不差!:@Q 你把迭代精度放宽一点试试。 有试过 还是一样会出错。运行的结果都是有的 只是结果根本一点可信度都没有 刚google下, LZ的程序流程好像根本不正确!
还有为何要自己写, 不是有现成的!?
fsolve('fnew',)
Optimization terminated: first-order optimality is less than options.TolFun.
ans =
1.1224 1.3112
[ 本帖最后由 ChaChing 于 2009-3-25 22:50 编辑 ] function =newd(x0,eps)
if nargin<2, eps=1.0e-6;
elseif nargin>2 | nargin<1, error('input error!!'); return; end
x0=x0(:); j=1; =fnew(x0); x1=x0-jacob\fx;
while(norm(x1-x0)>=1.0e-6) & (j<10000)
x0=x1; j=j+1; =fnew(x0); x1=x0-jacob\fx;
end
y=x0; n=j;
function =fnew(x)
y(1)=x(1)*x(1)-8*x(1)+x(2)*x(2)+6; y(2)=4*x(1)-8*x(2)+6;
y=; J=;
[ 本帖最后由 ChaChing 于 2009-5-2 10:14 编辑 ]
回复 7楼 liushuiwuxin 的帖子
若真是那本书原有的例子, 且楼主没误用的话!那真想建议LZ换一本了, 有点不负责!:@) 差不多是这样啦?非常感谢!!
页:
[1]