这是Newton-Raphson方法的正确实现吗?

时间:2012-12-01 09:43:13

标签: delphi math delphi-7

我需要实现牛顿方法,在Delphi 7中浮点之后用给定的计数计数符号查找平方根。我写了这段代码:

program NewtonMethod

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

const
  signCount = 50; //Signs after floating point count

var
  number, curRoot, prevRoot: Extended;
  precision: Extended;

function input(): Extended;
begin
  Write('x=');
  try
    Readln(number)
  except
    Writeln('Invalid input data, please try again');
    Input();
  end;
end;

begin
  input();
  curRoot := sqrt(number); //Íà÷àëüíàÿ
  precision := 1 / power(10, signCount);
  prevRoot := 0;

  repeat
    prevRoot := curRoot;
    curRoot := prevRoot - (Power(prevRoot, 2) - number) / (2 * prevRoot);
  until
    Abs(curRoot - prevRoot) < precision;

  Writeln(curRoot);
  ReadLn;
end.

请回答我的问题:

  • 这段代码是否正确?
  • 如何使用所有符号以正常(非指数)形式打印结果根?
  • 输入值可能非常大(最多200个符号)。这段代码可以与它们一起使用吗?

并建议我,如何改进我的代码?

1 个答案:

答案 0 :(得分:1)

curRoot:= SQRT(号); &LT;&LT;看起来你在这里直接计算出数字的平方根,而不是使用方法。

您应该使用其他方法选择“第一次猜测”...如果这只是为了好玩,请尝试一半的数字

您可能会发现此页面非常有用:https://en.wikipedia.org/wiki/Newton%27s_method#Square_root_of_a_number

Extended数据类型只能执行大约20个小数位。 200个小数位是一个艰难的调用,可能很难做到