【问题标题】:Matlab newton method with finite differences具有有限差分的 Matlab 牛顿法
【发布时间】:2023-01-02 20:07:38
【问题描述】:

你好,所以我想在我的程序中得到一些帮助,我仍然不明白我的问题出在哪里,因为它有点乱。所以它由主程序组成 `

function x = NewtonM(funcF,JacF)
    x= zeros(2,1);
    x(1) = 1
    x(2) = 5
    k = 1;
    kmax = 100;
    TOL = 10^(-7);
    while k < kmax
    s = J(x)\(-F(x));
    x= x + s
    if (norm(s,2)< TOL)
        break;
    endif
end

`

这些是其他功能

`

function y = F(x)
x1 = x(1);
x2 = x(2);
y = zeros(2,1);
y(1) = x1+x2-3;
y(2) = x1^2 + x2^2 -9;
end

`

`

function z = Z(x)
x1 = x(1);
x2 = x(2);
z = zeros(3,1);
z(1) = x1+x2-3+10^(-7);
z(2) = (x1+10^(-7))^2 + x2^2 -9;
z(3) = x1^2 + (x2+10^(-7))^2 -9;
end

`

`

function J = J(x)
x1 = x(1);
x2 = x(2);
J = zeros(2,2);
J(1,1) = (Z(1)-F(1))/(10^(-7))
J(1,2) = (Z(1)-F(1))/(10^(-7))
J(2,1) = (Z(2)-F(2))/(10^(-7))
J(2,2) = (Z(3)-F(2))/(10^(-7))
end

`

also this is my current errors errors vol 2

【问题讨论】:

  • 发生错误的行也很重要!您可以将错误与行信息共享为文本吗?
  • @AnderBiguri 错误行实际上并没有给我一个很好的指示,因为照片中提到的那些行没有什么可以修复的。
  • 它的 100% 始终是错误所在的行。您可能不明白为什么,但几乎可以肯定,当错误发生时,您可以了解一些事情。您还需要说明您是如何调用它的,错误发生在 ff() 中,此处未显示
  • @AnderBiguri 这也是你要求的link
  • 请edit你的问题,永远不要将文本作为图像共享,它是文本。

标签: matlab newtons-method


【解决方案1】:

问题是您在函数J 中仅使用一个输入来调用Z 和F。

然后,您要做的第一件事是尝试将输入解释为一个 2 值数组 (x1,x2),但它们不存在,因为您将 x 定义为例如1,通过Z(1)。

我想知道您是否打算使用 z=Z(x) 而不是使用 Z(1) 等,然后在 J 中使用 z(1)。

【讨论】:

  • 就是这样,我实际上在想这可能是问题所在,但有时错误就在我们眼前。先生,感谢您与我分享的知识。
猜你喜欢
  • 2019-06-19
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2011-06-26
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多