Решение нелинейного уравнения методом Ньютона. Переписать с Pascal на C#
Формулировка задачи:
Есть примерный алгоритм программы, нужно написать его на C# и доработать так, чтобы m менялось от -79.5 до 79.5 с шагом единица.
program Newton;
function tg(x:real):real;
begin
tg := sin(x)/cos(x);
end;
function f(x:real):real;
begin
f := tg(x)-(1/x);
end;
function f1(x:real):real; {Первая производная функции}
begin
f1:= 1/(sqr(cos(x)))+(1/sqr(x));
end;
var a,b,x,eps,en:real;
i:integer;
begin
writeln ('Решение нелинейного уравнения методом Ньютона');
writeln ('tg(x)-((abs(m))/x)');
write ('Введите требуемую точность решения:');
read (eps);
writeln ('Решение:');
writeln ('Номер шага Значение X');
a:= -2;
b:= 1;
en:= abs(a-b);
x:= b;
i:= 1;
while (abs(en)>eps) do begin
x:=x-f(x)/f1(x); {Шаг метода}
writeln (i:10,x:14:3); {Вывод значения X с шагом i}
en:=abs(x-b); {Новая точность}
b:=x; {Значение границы для следующего шага}
i:=i+1; {Номер шага}
end;
end.Решение задачи: «Решение нелинейного уравнения методом Ньютона. Переписать с Pascal на C#»
textual
Листинг программы
using System;
namespace Newton
{
class Program
{
static double _a, _b, _x, _m, _eps, _en;
static int _i;
static void Main()
{
Console.WriteLine("Решение нелинейного уравнения методом Ньютона");
Console.WriteLine("tg(_x)-((abs(m))/_x)");
Console.Write("Введите требуемую точность решения: ");
_eps = double.Parse(Console.ReadLine());
Console.WriteLine("Решение:");
Console.WriteLine("Номер шага Значение X");
Console.WriteLine();
for (_m = -79.5; _m <= 79.5; _m++)
{
_a = -2;
_b = 1;
_en = Math.Abs(_a - _b);
_x = _b;
_i = 1;
Console.WriteLine("m = {0}", _m);
while (Math.Abs(_en) > _eps)
{
_x = _x - f(_x, _m) / f1(_x);
Console.WriteLine(" {0} {1}", _i++, _x);
_en = Math.Abs(_x - _b);
_b = _x;
}
Console.ReadKey();
Console.WriteLine();
}
Console.ReadKey();
}
private static double f(double x, double m)
{
return Math.Tan(x) - (m/x);
}
private static double f1(double x)
{
return 1/(Math.Sqrt(Math.Cos(x)) + 1/Math.Sqrt(x));
}
}
}