Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 22:39   #1
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию Метод Дихотомми

Метод дихотомии (деления интервала поиска [a,b] пополам) реализуется следующим алгоритмом:
1. Проверяем условие |b-a|<2E, где E – заданная погрешность вычисления х .Если это условие выполняется, идем к п. 6; если не выполняется, идем к п. 2.
2. Делим интервал поиска [a,b] пополам и вычисляем две абсциссы, симметрично расположенные относительно точки x=(a+b)/2: x =(a+b-E)/2 и x =(a+b+E)/2.
3. Для этих значений x вычисляем F(x ) и F(x ).
4. Проверяем условие F(x )>F(x ). Если оно выполняется, полагаем b=x и идем к п.1. Если не выполняется, идем к п.1.
5. Полагаем a=x и идем к п.1.
6. Выводим на печать x =(a+b)/2 и вычисляем F(x ).
................................... ................................... ..................................

ответ должен быть 4.4,а выдает другой..что не так??!!!
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //погрешность вычисления
            const double epsilon = 0.001;
            double a, b;
            //интервал [0.5,1.5].
            a = 0.5;
            b = 1.5;
            while (b - a > epsilon)
            {
                double c = (a + b) / 2;
                if (f(b) * f(c) < 0)
                    a = c;
                else
                    b = c;
            }
      
            Console.WriteLine((a + b) / 2);
            Console.ReadKey();
        }
 
        static double f(double x)
        {
            double tmp = Math.Pow(2, 0.5);
            return 4 * Math.Sin(3 * x - 1) - Math.Pow(x, tmp) + 1;
        }        
    }
}
Изображения
Тип файла: jpg Снимок.JPG (18.6 Кб, 73 просмотров)
Serg94 вне форума Ответить с цитированием
Старый 21.04.2012, 23:25   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Вообще-то вы не придерживаетесь приведенного алгоритма.
Код:
Console.WriteLine((a + b) / 2);
Console.WriteLine(f((a + b) / 2));
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 21.04.2012, 23:29   #3
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вообще-то вы не придерживаетесь приведенного алгоритма.
Код:
Console.WriteLine((a + b) / 2);
Console.WriteLine(f((a + b) / 2));
так тоже неверный результат выдает!
Serg94 вне форума Ответить с цитированием
Старый 21.04.2012, 23:36   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Хорошо, тогда скажите, в чем компилируете (какой язык).

УПД C#?

УПД2 Я пропустил условие задачи
Вы ищете корень своим кодом, а не точку максимума.
Т.е. я исправил только вывод своим постом выше, но, как указал уже выше, вы НЕ выполняете алгоритм.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 21.04.2012 в 23:41.
BDA вне форума Ответить с цитированием
Старый 21.04.2012, 23:39   #5
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию ...

Цитата:
Сообщение от BDA Посмотреть сообщение
Хорошо, тогда скажите, в чем компилируете (какой язык).

УПД C#?
В С# ...
Serg94 вне форума Ответить с цитированием
Старый 21.04.2012, 23:45   #6
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию ..

я не знаю как по-другому..
Serg94 вне форума Ответить с цитированием
Старый 21.04.2012, 23:56   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //погрешность вычисления
            const double epsilon = 0.001;
            double a, b;
            //интервал [0.5,1.5].
            a = 0.5;
            b = 1.5;
            while (b - a > 2*epsilon)
            {
				double x = (a + b) / 2;
				double x1 = (a + b) / 2 - epsilon;
				double x2 = (a + b) / 2 + epsilon;
                if (f(x1)>f(x2))
                    b = x;
                else
                    a = x;
            }
      
            Console.WriteLine((a + b) / 2);
	    Console.WriteLine(f((a + b) / 2));
            Console.ReadKey();
        }
 
        static double f(double x)
        {
            double tmp = Math.Pow(2, 0.5);
            return 4 * Math.Sin(3 * x - 1) - Math.Pow(x, tmp) + 1;
        }        
    }
}
Вы случайно не DooMDiM с cyberforum?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.04.2012, 00:06   #8
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию ..

нет))ответ чуть не сходится должно быть 4.4 ,а выводит 4.2..
Serg94 вне форума Ответить с цитированием
Старый 22.04.2012, 00:11   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Значит вам дали такое же задание, как и DooMDiM'у в 2010 году.
Проверил ответ в wolframalpha:
http://www.wolframalpha.com/input/?i...+from+0+to+1.5
Ответ: 4.22019
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.04.2012 в 00:27.
BDA вне форума Ответить с цитированием
Старый 22.04.2012, 00:17   #10
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию ...

Цитата:
Сообщение от BDA Посмотреть сообщение
Значит вам дали такое же задание.
Проверил ответ в wolframalpha:
http://www.wolframalpha.com/input/?i...+from+0+to+1.5
Ответ: 4.22019
спасибо за помощь!!!!
Serg94 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор,метод вывода на экран Display, метод для преобразования в строку toString в Delphi Чумак Татьяна Помощь студентам 6 03.04.2012 11:58
исследовать метод квадратных корней и метод Холецкого для решения СЛАУ Vит@x@ Помощь студентам 0 22.11.2011 10:47
Задача Коммивояжера. Метод Монте-Карло и метод приращений. [Паскаль] U9110 Помощь студентам 4 06.04.2011 09:48
Turbo Pascal[програмыки : текстовая\метод симпсона\метод половинного деления qsccsq Помощь студентам 7 24.12.2010 05:23
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. Хомяк!!!!! Помощь студентам 4 08.07.2009 10:08