ВУЗ:
Составители:
Рубрика:
28
// функция не удовлетворяет тем свойствам,
// которые гарантируют существование корня
throw new Exception("Возможно, на этом
отрезке корней нет");
}
. . .
}
Для решения уравнения достаточно иметь только одну функцию,
которая реализует общую процедуру всех методов решения уравнений.
Реализация пункта 1 процедуры в этой функции осуществляется посредством
вызова через делегат method именно того метода деления отрезка, который
был выбран при инициализации класса Solver. В указанном далее коде
использование делегатов выделено.
// метод решения уравнения
// 1 параметр – делегат функции, которая определяет уравнение,
// 2, 3 параметры - концы отрезка,
// 4 параметр - точность решения
static public double RootEquation(Function f, double a,
double b, double eps)
{
// корень гарантировано существует,
// если на концах отрезка
// функция принимает значения различных знаков.
if(f(a) * f(b) > 0)
throw new Exception("Возможно, на этом отрезке корней нет");
// цикл метода - вычисления продолжается до тех пор,
// пока на одном из концов отрезка не будет получено
// значение функции с заданной точностью
while(Math.Abs(f(a))>eps && Math.Abs(f(b))>eps)
{
// поиск точки деления отрезка - вызов делегата
double c = method(f,a,b);
// если найденная точка - корень, это решение
if(f(c) == 0)
return c;
// выбор следующего отрезка
if(f(a)*f(c) < 0)
b = c;
else
a = c;
}
// выбор приближенного значения корня
if(Math.Abs(f(a))<=eps )
return a;
else
return b;
}
// функция не удовлетворяет тем свойствам,
// которые гарантируют существование корня
throw new Exception("Возможно, на этом
отрезке корней нет");
}
. . .
}
Для решения уравнения достаточно иметь только одну функцию,
которая реализует общую процедуру всех методов решения уравнений.
Реализация пункта 1 процедуры в этой функции осуществляется посредством
вызова через делегат method именно того метода деления отрезка, который
был выбран при инициализации класса Solver. В указанном далее коде
использование делегатов выделено.
// метод решения уравнения
// 1 параметр – делегат функции, которая определяет уравнение,
// 2, 3 параметры - концы отрезка,
// 4 параметр - точность решения
static public double RootEquation(Function f, double a,
double b, double eps)
{
// корень гарантировано существует,
// если на концах отрезка
// функция принимает значения различных знаков.
if(f(a) * f(b) > 0)
throw new Exception("Возможно, на этом отрезке корней нет");
// цикл метода - вычисления продолжается до тех пор,
// пока на одном из концов отрезка не будет получено
// значение функции с заданной точностью
while(Math.Abs(f(a))>eps && Math.Abs(f(b))>eps)
{
// поиск точки деления отрезка - вызов делегата
double c = method(f,a,b);
// если найденная точка - корень, это решение
if(f(c) == 0)
return c;
// выбор следующего отрезка
if(f(a)*f(c) < 0)
b = c;
else
a = c;
}
// выбор приближенного значения корня
if(Math.Abs(f(a))<=eps )
return a;
else
return b;
}
28
Страницы
- « первая
- ‹ предыдущая
- …
- 27
- 28
- 29
- 30
- 31
- …
- следующая ›
- последняя »
