MATLAB - 牛顿方法,但错误信息“奇异矩阵”

时间:2015-11-25 14:44:49

标签: matlab matrix runtime-error newtons-method

当我使用牛顿方法查找方程组的根时,我得到以下错误信息:

  

“警告:矩阵接近单数或严重缩放。结果可能不准确.RCOND = 1.625479e-33。>新的(第16行)”

我收到此错误消息的任何想法?我知道奇异矩阵和相反的事情,但这真的必须做任何事吗?如果是这样,怎么样?我可以对代码有什么不同?它表示第16行,即dx = -J\f;。但我只是跟随我的数值方法教科书。有些东西肯定是错的,但练习上写着“使用牛顿法”,所以我觉得这应该有用。我希望有人可以帮助我。

x = [0 0 pi/2]';
maxiter = 10;
iter = 0;
dxnorm = 1;
results = cell(maxiter + 1, 2); % Preallocate results array

while dxnorm > 0.5e-4 && iter <= maxiter
    f = [cos(x(1)) + cos(x(2))    + cos(x(3))-2; ...
         sin(x(1)) + sin(x(2))    + sin(x(3)); ...
         tan(x(1)) - 2.*tan(x(2)) + tan(x(3)); ...
         ];
    J = [-sin(x(1)),       -sin(x(2)),          -sin(x(3)); ...
         cos(x(1)),        cos(x(2)),           cos(x(3)); ...
         tan(x(1)).^2 + 1, -2*tan(x(2)).^2 - 2, tan(x(3)).^2 + 1 ...
         ];
    dx = -J\f;
    results{iter + 1, 1} = x;
    x = x + dx;
    dxnorm = norm(dx,inf);
    results{iter + 1, 2} = dxnorm;
    iter = iter + 1;
end
x, iter

1 个答案:

答案 0 :(得分:2)

x(3) = pi/2的初始条件导致f的第3个条目变为无限,因为tan(pi/2) = sin(pi/2)/cos(pi/2) = inf,除非 非常无穷大,因为浮点不精确,pi等不精确......所以你得到一个疯狂的大数字。

现在你有疯狂的大数字和疯狂的小数字,一切基本上都得到了!@#ed。你的雅可比矩阵被严重缩放等......

爆炸的线性方程是:

[0,    0,   -1                                       [x1      [0
 1,    1,    0                                    *   x2   =   1
 1,   -2,   266709378811357100000000000000000 ]       x3]      16331239353195370]

这些是用于数字求解线性系统的!@#$ ed up条件。

你应该怎么做?

从某个地方开始。例如。从初始条件[0,0,pi/4]开始,一切都可能正常。

一些初始条件也会触发导数为零的多元等价物(这也会使牛顿方法爆炸)。