2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


В этом разделе нельзя создавать новые темы.



Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4
 
 Re: метод половинного деления
Сообщение30.10.2012, 12:06 


16/06/10
199
cyber_ua в сообщении #637500 писал(а):
сам не понимаю как такую фигню мог написать=)
Тем не менее, Вы упорно продолжаете это делать...

cyber_ua в сообщении #637500 писал(а):
но результат получается какой то сильно маленький
Что есть полученный результат? Курс доллара на МВБ? Цена литра бензина? Корень заданного уравнения? Нет. Вы берёте интервал, по какой-то(?) логике его уменьшаете изменяя границы, интервал стремится к точке, в данном случае — к нулю. Что Вы ещё хотите?

Перечитайте ещё раз приведённую Вами цитату:"возьмем x, равное среднему между a и b..." — в программе это есть, "и вычислим f(x)." — а это где? Что такое $f(x)$? Может это из условия задачи $f(x)=0$?

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение30.10.2012, 12:31 


05/09/12
2587
И снова программа работает абсолютно правильно, как и написано. Результат сильно маленький? Так если бы он таким не был, цикл бы не останавливался. Так что все правильно.

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение30.10.2012, 12:59 
Заслуженный участник


09/09/10
3729
Да ёклмн... ладно, пойдем испытанным способом.

cyber_ua
Во-первых, начните новый проект. Далее, напишите функцию double F(double x) которая будет вычислять вашу $f(x)$ — что у вас там было, я уж не помню.

Потом напишите функцию bool Dichotomy(Func<double, double> func, ref double a, ref double b). На вход она получает функцию вида double (double x), левый конец отрезка a и правый конец отрезка b. Dichotomy должна работать следующим образом: если $f(a)$ — который вычисляется как func(a), кстати — и $f(b)$ одного знака, она должна немедленно возвратить false. Иначе она должна вычислить $x=\frac{a+b}{2}$, $f(x)$ и далее: если $f(a)f(x) < 0$, то 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 --

Ах да, и вдогонку: текущая версия вашей программы решает уравнение $x=0$. Угадайте, какое у него точное решение.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3, 4

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group