2014 dxdy logo

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

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


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


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



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


01/10/12
35
venco в сообщении #634277 писал(а):
Вопрос к автору: где в вашей программе та самая функция, корень которой вы ищете?

я задаю только отрезок на котором лежит корень и просто программа делает расчет что бы вручную не делить.

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


04/05/09
4586
Понятно. Согласен с TOTAL.

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:02 


05/09/12
2587
cyber_ua в сообщении #633530 писал(а):
в общем все понятно как работать с этим методом
:o

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:08 


01/10/12
35
TOTAL в сообщении #634183 писал(а):
ewert в сообщении #634165 писал(а):
Приведите текст программы. Уже в который раз: судя по распечатке -- у Вас сам метод запрограммирован откровенно неверно.

Нет никаких признаков того, что автор понимает работу метода. Поэтому я попросил бы его рассказать про метод.

вот как я понимаю (добавил описание в виде коментов)
код: [ скачать ] [ спрятать ]
Используется синтаксис C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {


           
            Console.WriteLine(Program.FindAccuracy(10,-4,-4,1));
            Console.ReadKey();
        }


        static double FindAccuracy(double num, double degree, double num1, double num2)
        {
            double Accuracy =  Math.Pow( num,degree);
            double[] root = Program.Interval(num1,num2);// расчет интервала на котором находится корень
            double x1 = root[0], x2 = root[1];// запись интервала в переменные
            double result  ;
         
     
           
           do {

               

                result = (x1 + x2) / 2;// приближаем значение к заданной точности по формуле (a+b) /2
               
                x1 = result;// перезаписываем значение а
               

            } while (Math.Abs(result) > Accuracy) ;
            return result;
        }

        static double[] Interval(double num1, double num2)
        {

         double value = (num1 + num2) / 2;//расчет по формуле (a+b)/2
       
        double[] interval = new double[2];
       interval[0] = value;

       if (num1 > 0 && value < 0 || num1 < 0 && value > 0)// поиск интервала с разными знаками
           interval[1] = num1;

       else interval[1] = num2;

        return interval;
    }

       

    }
}

 

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:19 


05/09/12
2587
Ну и как, теперь работает?

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:28 


01/10/12
35
_Ivana в сообщении #634438 писал(а):
Ну и как, теперь работает?

эм.. т.е как?
ничего не изменилось кроме комментариев.

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:43 


05/09/12
2587
Именно. Да и комментарии скудны, неинформативны и абсолютно бессодержательны как сама программа.
Вас попросили объяснить словами сущность метода, ибо судя по программе, вы его не понимаете совершенно.

(Оффтоп)

Почему многие, кто просит помощи, сидят и ждут ответа на форуме вместо того, чтобы за 3 минуты найти в википедии и прочитать суть метода?

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 21:59 


01/10/12
35
_Ivana в сообщении #634456 писал(а):
Именно. Да и комментарии скудны, неинформативны и абсолютно бессодержательны как сама программа.
Вас попросили объяснить словами сущность метода, ибо судя по программе, вы его не понимаете совершенно.

(Оффтоп)

Почему многие, кто просит помощи, сидят и ждут ответа на форуме вместо того, чтобы за 3 минуты найти в википедии и прочитать суть метода?


-нужно выделить интервал на котором находиться корень $(a+b) /2$ , т.е интервал на котором числа разных знаков
-нужно сужать интервал [a,(a+b )/2] || [(a+b)/2,b]
-когда значение меньше заданной точности остановить цикл.

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


04/05/09
4586
cyber_ua в сообщении #634472 писал(а):
-нужно сужать интервал [a,(a+b )/2] || [(a+b)/2,b]
Где у вас в программе это самое ||?

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение22.10.2012, 22:18 


01/10/12
35
venco в сообщении #634475 писал(а):
cyber_ua в сообщении #634472 писал(а):
-нужно сужать интервал [a,(a+b )/2] || [(a+b)/2,b]
Где у вас в программе это самое ||?

да тут я чет на портачил.

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


09/09/10
3729
cyber_ua в сообщении #634472 писал(а):
т.е интервал на котором числа разных знаков

Здесь под числами имеются в виду не $a$ и $b$, а $f(a)$ и $f(b)$. Вы действительно считаете, что $f$ нигде не надо задавать? Дали отрезок, а программа сама найдет корень уравнения на нем? Какого уравнения?

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


12/09/10
1547
И здесь у Вас тоже проблема
Цитата:
-когда значение меньше заданной точности остановить цикл

Значение чего?

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение29.10.2012, 21:05 


01/10/12
35
вернулся снова к своей программе и кажется понял свою ошибку, а точнее чего я не понял.
Допустим a = -4, b = 1;
подставляем в формулу [a,(a+b )/2] || [(a+b)/2,b]
получаем $(-4+1)/2$ и получается -1,5 и вот дальше я не запутался что делать....
Понимаю что уже всех достал, но был бы пример решения разобрался бы сам.

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


27/04/09
28128
Программу следует переписать с нуля. Чтобы на этот раз она хоть как-нибудь использовала данное в условии уравнение.

 Профиль  
                  
 
 Re: метод половинного деления
Сообщение29.10.2012, 21:23 


01/10/12
35
все нашел человеческое описанние
http://www.cyberforum.ru/post2138977.html писал(а):
Идея состоит в том, что если нам даны такие точки a и b, что f(a) < 0 < f(b), то функция f должна иметь по крайней мере один ноль на отрезке между a и b. Чтобы найти его, возьмем x, равное среднему между a и b, и вычислим f(x). Если f(x) > 0, то f должна иметь ноль на отрезке между a и x. Если f(x) < 0, то f должна иметь ноль на отрезке между x и b. Продолжая таким образом, мы сможем находить все более узкие интервалы, на которых f должна иметь ноль.


-- 29.10.2012, 22:24 --

arseniiv в сообщении #637497 писал(а):
Программу следует переписать с нуля. Чтобы на этот раз она хоть как-нибудь использовала данное в условии уравнение.

Я так и делаю, теперь сам не понимаю как такую фигню мог написать=)

-- 29.10.2012, 22:49 --

вот что получилось для нахождения на определенном интервале
код: [ скачать ] [ спрятать ]
Используется синтаксис C#
 double a = 0, b = 0,x;
            if (interval[0] < 0)
            {

                a = interval[0];
                b = interval[1];
            }
            else if(interval[1] < 0) {

                a = interval[1];
                b = interval[0];
            }

         


         do{


             x = (a + b) / 2;

             if (x > 0) b = x;
             else if (x < 0) a = x;


             Console.WriteLine(x);
           
           }while(Math.Abs(x) > accuracy);
 

цикл останавливается но результат получается какой то сильно маленький
Изображение

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

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



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

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


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

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