当我使用牛顿方法查找方程组的根时,我得到以下错误信息:
“警告:矩阵接近单数或严重缩放。结果可能不准确.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
答案 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]
开始,一切都可能正常。
一些初始条件也会触发导数为零的多元等价物(这也会使牛顿方法爆炸)。