2014 dxdy logo

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

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


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


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



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


01/10/12
35
$x^3 - 3x^2 +3x +1 = 0$
$x \in (-4,1)$
$(-4+1)/2 = -1,5 $
корень я начал искать на интервале (-1.5, 1)

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


11/05/08
32166
И что, единица или хотя бы почти единица действительно является корнем?... Исправляйте программу.

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


01/10/12
35
ewert в сообщении #633673 писал(а):
И что, единица или хотя бы почти единица действительно является корнем?... Исправляйте программу.

вы не поняли она не останавливается вообще , что бы получить правильное значение ее нужно во время остановить.

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


11/05/08
32166
cyber_ua в сообщении #633675 писал(а):
вы не поняли она не останавливается вообще

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

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


09/09/10
3729
А условие останова простое — длина отрезка должна стать меньше $\varepsilon$. После чего берите из него любую точку.

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


01/10/12
35
там только - 0,25 меньше заданной точности

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


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

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


09/09/10
3729
cyber_ua
Я хочу напомнить, что в методе половинного деления вы работаете с отрезком. Набором из двух чисел — левым концом и правым концом. На каждом шаге одно из этих чисел изменяется. Условие останова — модуль разности этих двух чисел меньше эпсилон.

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


01/10/12
35
ну вот я сравнивал значения полученные при расчете с заданной точностью
Изображение
останавливал в ручную так как цикл получался бесконечный , не одно из значение не было меньше 0,0001

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


11/05/08
32166
Приведите текст программы. Уже в который раз: судя по распечатке -- у Вас сам метод запрограммирован откровенно неверно.

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


01/10/12
35
код: [ скачать ] [ спрятать ]
Используется синтаксис 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  ;
          int i = 0;
     
           
           do {

               

                result = (x1 + x2) / 2;
                if (i > 10) break;//остановка вручную что бы остановить бесконечный цикл
                Console.WriteLine(result);
                x1 = result;
                i++;

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

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

         double value = (num1 + num2) / 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, 16:37 
Заслуженный участник
Аватара пользователя


23/08/07
5472
Нов-ск
ewert в сообщении #634165 писал(а):
Приведите текст программы. Уже в который раз: судя по распечатке -- у Вас сам метод запрограммирован откровенно неверно.

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

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


11/05/08
32166
Это просто невозможно читать. Мало того, что без комментариев ни одна программа нечитабельна; но тут ещё и алгоритм, требующий не более трёх строк кода (ну ладно, пусть даже не более семи, на всякий случай) -- раздувается до трёхсот шестидесяти пяти.

До тех пор, пока Вы не научитесь чётко отделять содержательные части своего алгоритма от служебных типа ввода-вывода -- и пока Вы не привыкнете свои действия хоть мало-мальски документировать -- ничего у Вас с программированием не выйдет. И не надейтесь.

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


05/09/12
2587
Код:
do {
                result = (x1 + x2) / 2;
                if (i > 10) break;//остановка вручную что бы остановить бесконечный цикл
                Console.WriteLine(result);
                x1 = result;
                i++;
            } while (Math.Abs(result) > Accuracy) ;
Это жесть :lol: Программа работает как и написано (что, в общем, происходит всегда) :lol:

UPD выделю отдельно суть кода автора 8-)
Код:
x1 = -1.5; x2 = 1; Accuracy = 0.0001;
do {
     result = (x1 + x2) / 2;
     x1 = result;
} while (Abs(result) > Accuracy) ;

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


04/05/09
4586
Вопрос к автору: где в вашей программе та самая функция, корень которой вы ищете?

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

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



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

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


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

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