-4

用 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();
4

1 回答 1

1

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

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

这有意义吗?

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

于 2013-11-26T20:26:40.057 回答