ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »