【问题标题】:Numerically solving an equation数值求解方程
【发布时间】:2013-12-11 22:43:40
【问题描述】:

用 C# 编码的算法:

fn = f(xn)
f′n = df(xn)/dx
∆xn = -fn / f′n
Update: xn+1 = xn + ∆xn
Repeat the process until ∆xn ≤ e

我必须使用 Newton-Raphson 方法来解决,但我不知道如何做一个循环,每次都输入下一个答案。如何计算?

这是我损坏的代码

double a = 1, Lspan = 30, Lcable = 33, fn, fdn, dfn, j;
fn = (2 * a * (Math.Sinh(Lspan / 2 * a))) - Lcable;
fdn = (2 * (Math.Sinh(Lspan / 2 * a)) - ((Lspan / 2 * a) * Math.Cosh(Lspan / 2    * a)));
dfn = -fn / fdn;
do
    j = a + dfn;
while (dfn > 0.00000000001);

Console.WriteLine( " {0} ",j) ;
Console.ReadKey();

【问题讨论】:

  • 展示一些你曾尝试做某事的证据,而不是让别人为你做这件事。谢谢。
  • @Tom W 我已经更新它以显示我的代码

标签: c# newtons-method


【解决方案1】:

您的循环每次都执行相同的计算,因为adfn 在迭代之间都不会改变。我确信我自己几年前实际上已经实现了 Newton-Raphson 方法,但我对它的记忆不够,无法在不查找的情况下检查您的算术是否正确。

我希望您打算在每次迭代时更新 fdndfn - 尽管您对该方法的伪代码语句是模棱两可的,因为它暗示每次迭代时只更新整个解决方案,而实际上每个术语都需要要更新,否则您将永远添加 ∆xn 的起始值。我认为解决方案是在循环内移动第二、第三和第四行。

这有意义吗?

(看起来好像您期望 C# 使用符号数学,但事实并非如此。C# 基本上是方法体中的过程,因此进行分配语句fn = some terms; 发生一次,当程序到达该行时。该变量中不知道它是如何计算的,它只是一个带有数字的框。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2018-08-05
    • 2021-08-30
    • 1970-01-01
    相关资源
    最近更新 更多