liushuiwuxin 发表于 2009-3-24 23:08

两变数牛顿迭代的荒谬问题

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 编辑 ]

yufeng 发表于 2009-3-25 08:02

检查程序 他是不会计算错的 可能是程序有问题 看看是否是你需要的思路

liushuiwuxin 发表于 2009-3-25 08:45

程序已经都在上面了 是我从书上抄下来的一个例子,也差不多是我需要的

wanyeqing2003 发表于 2009-3-25 08:49

有些书上的东西可能会有错误。一般来说,经典方法是不会有问题的。

liushuiwuxin 发表于 2009-3-25 08:55

我抄的程序全部在上面,那位可不可以帮忙检查一下,看是那里出错了。我昨晚检查了一晚上就是不知道那里出错了。

ChaChing 发表于 2009-3-25 11:41

牛顿迭代学生时代玩过, 但时间久远已经模糊了! 又懒得查证
书上的例子也是针对两个变数吗? 单变数牛顿迭代可以使用在两变数吗?

[ 本帖最后由 ChaChing 于 2009-3-25 22:51 编辑 ]

liushuiwuxin 发表于 2009-3-25 12:29

是的呀,我这是照搬的,一字不差!:@Q

wanyeqing2003 发表于 2009-3-25 13:36

你把迭代精度放宽一点试试。

liushuiwuxin 发表于 2009-3-25 16:33

有试过   还是一样会出错。运行的结果都是有的   只是结果根本一点可信度都没有

ChaChing 发表于 2009-3-25 19:26

刚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 编辑 ]

ChaChing 发表于 2009-3-25 22:56

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 编辑 ]

ChaChing 发表于 2009-3-25 23:02

回复 7楼 liushuiwuxin 的帖子

若真是那本书原有的例子, 且楼主没误用的话!
那真想建议LZ换一本了, 有点不负责!:@)

liushuiwuxin 发表于 2009-3-26 09:03

差不多是这样啦?非常感谢!!
页: [1]
查看完整版本: 两变数牛顿迭代的荒谬问题