数值求解方程

时间:2013-11-26 16:47:33

标签: c# newtons-method

要在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();

1 个答案:

答案 0 :(得分:1)

您的循环每次执行相同的计算,因为迭代之间adfn都不会发生变化。我确信自己多年前实际上已经实现了一个Newton-Raphson方法,但是我不记得它在没有查找的情况下检查你的算法是否正确。

我希望您希望在每次迭代时更新fdndfn - 尽管您的方法的伪代码声明不明确,因为它意味着每次迭代只更新整个解决方案,而实际上每个术语都需要更新,或者你只需​​要永远添加∆xn的起始值。我认为解决方案是在循环内移动第二,第三和第四行。

这有意义吗?

(看起来好像你期望C#与符号数学一起工作,情况并非如此.C#在方法体内基本上是程序,所以做出一项任务语句fn = some terms;发生一次,当程序遇到该行时。该变量中没有知道如何计算它,它只是一个带有数字的框。)