要在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();
答案 0 :(得分:1)
您的循环每次执行相同的计算,因为迭代之间a
或dfn
都不会发生变化。我确信自己多年前实际上已经实现了一个Newton-Raphson方法,但是我不记得它在没有查找的情况下检查你的算法是否正确。
我希望您希望在每次迭代时更新fdn
和dfn
- 尽管您的方法的伪代码声明不明确,因为它意味着每次迭代只更新整个解决方案,而实际上每个术语都需要更新,或者你只需要永远添加∆xn
的起始值。我认为解决方案是在循环内移动第二,第三和第四行。
这有意义吗?
(看起来好像你期望C#与符号数学一起工作,情况并非如此.C#在方法体内基本上是程序,所以做出一项任务语句fn = some terms;
发生一次,当程序遇到该行时。该变量中没有知道如何计算它,它只是一个带有数字的框。)