2014 dxdy logo

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

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




На страницу Пред.  1, 2, 3, 4  След.
 
 Re: метод половинного деления
Сообщение21.10.2012, 15:40 
$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 
И что, единица или хотя бы почти единица действительно является корнем?... Исправляйте программу.

 
 
 
 Re: метод половинного деления
Сообщение21.10.2012, 17:19 
ewert в сообщении #633673 писал(а):
И что, единица или хотя бы почти единица действительно является корнем?... Исправляйте программу.

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

 
 
 
 Re: метод половинного деления
Сообщение21.10.2012, 17:24 
cyber_ua в сообщении #633675 писал(а):
вы не поняли она не останавливается вообще

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

 
 
 
 Re: метод половинного деления
Сообщение21.10.2012, 17:25 
А условие останова простое — длина отрезка должна стать меньше $\varepsilon$. После чего берите из него любую точку.

 
 
 
 Re: метод половинного деления
Сообщение21.10.2012, 17:31 
там только - 0,25 меньше заданной точности

 
 
 
 Re: метод половинного деления
Сообщение21.10.2012, 19:05 
Трудно рассчитывать, что цикл остановится по условию близкого приближения к корню, если результат к нему не приближается.

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 10:46 
cyber_ua
Я хочу напомнить, что в методе половинного деления вы работаете с отрезком. Набором из двух чисел — левым концом и правым концом. На каждом шаге одно из этих чисел изменяется. Условие останова — модуль разности этих двух чисел меньше эпсилон.

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 16:09 
ну вот я сравнивал значения полученные при расчете с заданной точностью
Изображение
останавливал в ручную так как цикл получался бесконечный , не одно из значение не было меньше 0,0001

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 16:12 
Приведите текст программы. Уже в который раз: судя по распечатке -- у Вас сам метод запрограммирован откровенно неверно.

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 16:34 
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 
Аватара пользователя
ewert в сообщении #634165 писал(а):
Приведите текст программы. Уже в который раз: судя по распечатке -- у Вас сам метод запрограммирован откровенно неверно.

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

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 17:41 
Это просто невозможно читать. Мало того, что без комментариев ни одна программа нечитабельна; но тут ещё и алгоритм, требующий не более трёх строк кода (ну ладно, пусть даже не более семи, на всякий случай) -- раздувается до трёхсот шестидесяти пяти.

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

 
 
 
 Re: метод половинного деления
Сообщение22.10.2012, 18:17 
Код:
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 
Вопрос к автору: где в вашей программе та самая функция, корень которой вы ищете?

 
 
 [ Сообщений: 48 ]  На страницу Пред.  1, 2, 3, 4  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group