Да ёклмн... ладно, пойдем испытанным способом.
cyber_uaВо-первых, начните новый проект. Далее, напишите функцию
double F(double x) которая будет вычислять вашу
— что у вас там было, я уж не помню.
Потом напишите функцию
bool Dichotomy(Func<double, double> func, ref double a, ref double b). На вход она получает функцию вида
double (double x), левый конец отрезка
a и правый конец отрезка
b.
Dichotomy должна работать следующим образом: если
— который вычисляется как
func(a), кстати — и
одного знака, она должна немедленно возвратить
false. Иначе она должна вычислить
,
и далее: если
, то
b = x, иначе
a = x. После этого она должна вернуть
true.
Теперь вы пишете функцию
bool Solve(Func<double,double> func, double a, double b, double eps, out double result). Она должна вначале определить внутренние переменные
double _a = a, _b = b; и в цикле вызывать
Dichotomy(func, _a, _b) — пока та возвращает
true и
Math.Abs(_a - _b) > eps. Если цикл закончится потому что
Dichotomy вернула
false, вы должны немедленно вернуть
false, иначе присвойте
result значение
(_a + _b) / 2 и верните
true.
Теперь напишите
Main: ввод с клавиатуры
a,
b,
eps, вызов
Solve (
bool success = Solve(f, a, b, eps, out result);), вывод результатов.
Нда, даже куски кода написал... все, вперед. К концу пары я начинаю принимать зада- простите, вспомнил свою преподавательницу численных методов
Не самые приятные воспоминания: у нее был невероятно паршивый характер, но зато она всегда рассказывала, какие функции должны быть в готовой программе, и с какими параметрами.
-- Вт окт 30, 2012 13:59:58 --Ах да, и вдогонку: текущая версия вашей программы решает уравнение
. Угадайте, какое у него точное решение.