【问题标题】:Building newton iteration in MATLAB在 MATLAB 中构建牛顿迭代
【发布时间】:2020-10-20 06:38:09
【问题描述】:

我似乎收到错误“警告:矩阵对于工作精度来说是奇异的。”尝试获取 delta_x 时。它应该使用 5x1 和 5x5 矩阵。

clc; close all;  clear all; 


phi = 1;
delta_x = 1;
error = 10e-15;
x = [ 0; 0; 0; 0; 0];
n =1;
B =0.025;
while norm(phi)>= error && norm(delta_x) >= error

G = [ 40e3 -20e3 -20e3 0 1; -20e3 20e3 0 0 0; -20e3 0 20e3 0 0; 0 0 0 0 0; 0 0 0 0 0];
fx = [ 0;
    B*((-x(4)-0.7)*(x(2)-x(4))-(((x(2)-x(4))^2)/2)); 
    B*((-x(4)-0.7)*(x(3)-x(4))-(((x(3)-x(4))^2)/2)); 
    -B*((-x(4)-0.7)*(x(2)-x(4))-(((x(2)-x(4))^2)/2))- B*((-x(4)-0.7)*(x(3)-x(4))-(((x(3)-x(4))^2)/2)); 
    0];
b = [ 0; 0; 0; 200e-6; 2.5];
dfx = [ 0 0 0 0 0; 
    0 -B*(0.7+x(2)) 0 B*(0.7+x(4)) 0; 
    0 0 -B*(0.7+x(3)) B*(0.7+x(4)) 0; 
    0 B*(0.7+x(2)) B*(0.7+x(3)) -2*B*(0.7+x(2)) 0; 
    0 0 0 0 0]; 

phi = G*x + fx - b;
m = G + dfx;


delta_x = -m\phi;
x = x+delta_x;
norm_delta_x(n) = norm(delta_x);
norm_phi(n) = norm(phi);
n = n+1;
end

【问题讨论】:

    标签: matlab


    【解决方案1】:

    矩阵 5x1 和 5x5 的尺寸很好,但是您在步骤 delta_x = -m\phi 中所做的是求解矩阵 m 的逆矩阵。由于m 是一个奇异矩阵(尝试运行det(m) 会得到一个零),因此不存在逆矩阵。 Matlab 看到这一点并通过告诉您“矩阵对于工作精度来说是奇异的”来通知您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-26
      • 2019-06-19
      • 2022-01-16
      • 2012-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多