0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
1

Метод половинного деления

05.10.2022, 15:51. Показов 422. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, пожалуйста, почему ничего не выводится на консоль. Необходимо реализовать алгоритм, который представлен на рисунке.

Метод половинного деления



Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class laba4optimiz {
    public static void main(String[] args) {
        double a = 1.0, b = 3.0, x = 0.0, c1,c2, eps = 0.000001, result = 0;
        double r = eps * (b-a);
        while (Math.abs(b - a) > eps)
        {
            c1 =  (a + b - r) / 2;
            c2 =  (a + b + r) / 2;
            if(func1(c1) < func2(c2))
            {
                b = c2;
            }
            else if (func1(c1) > func2(c2)){
                a = c1;
            }
            else {
                a = c1;
                b = c2;
 
            }
        }
        System.out.println("Значение корня = " + (a+b)/2);
    }
 
    public static double func1(double x1) {
        return (-(Math.exp(-x1) * Math.log(x1)));
    }
 
    public static double func2(double x2) {
        return (-(Math.exp(-x2) * Math.log(x2)));
    }
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2022, 15:51
Ответы с готовыми решениями:

Численные методы. Метод половинного деления
Нужно различными числовыми методами найти корень функции tan(0.3x+0.4)=x^2 Вопрос скорее всего...

Метод половинного деления,хорд,ньютона,комбинированный метод
Добрый день. Помогите пожалуйста написать код на Java к функции: X^3 - 50cos(x) с интервалом -4 и...

Метод половинного деления
Всем доброго дня ! Сразу извиняюсь за такую просьбу... Перепишите код на жабу , пожалуйста uses...

Метод бисекции (половинного деления)
Создать иерархию из трех наследующих друг от друга классов:1) класс статической завершенной...

11
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 16:11 2
Danil178, накрутил ты...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class laba4optimiz {
    public static void main(String[] args) {
        double a = 1.0, b = 3.0, x = 0.0, c1,c2, eps = 0.000001, result = 0;
        double r = eps * (b-a);
        while (Math.abs(b - a) > eps)
        {
            c1 =  (a + b - r) / 2;
            c2 =  (a + b + r) / 2;
            if(func(c1) < func(c2))
            {
                b = c2;
            }
            else if (func(c1) > func(c2)){
                a = c1;
            }
            else {
                a = c1;
                b = c2;
 
            }
        }
        System.out.println("Значение корня = " + (a+b)/2);
    }
 
    public static double func(double x) {
        return (-(Math.exp(-x) * Math.log(x)));
    }
 
}
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
05.10.2022, 16:20  [ТС] 3
Catstail, по-прежнему ничего не выводит
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 16:39 4
Цитата Сообщение от Danil178 Посмотреть сообщение
по-прежнему ничего не выводит
- это неудивительно. Ведь твоя функция на отрезке [1,3] не меняет знака...
Миниатюры
Метод половинного деления  
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
05.10.2022, 16:47  [ТС] 5
Catstail, у экспоненты x должен быть отрицательным.

Метод половинного деления

Метод половинного деления
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 16:51 6
Danil178, да, мой график неправильный. Правильный ниже. И твой график тоже правильный. Но ты же ищешь корень на интервале, где функция не меняет знак!
Миниатюры
Метод половинного деления  
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 16:52 7
Попробуй:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class laba4optimiz {
    public static void main(String[] args) {
        double a = 0.5, b = 3.0, x = 0.0, c1,c2, eps = 0.000001, result = 0;
        double r = eps * (b-a);
        while (Math.abs(b - a) > eps)
        {
            c1 =  (a + b - r) / 2;
            c2 =  (a + b + r) / 2;
            if(func(c1) < func(c2))
            {
                b = c2;
            }
            else if (func(c1) > func(c2)){
                a = c1;
            }
            else {
                a = c1;
                b = c2;
 
            }
        }
        System.out.println("Значение корня = " + (a+b)/2);
    }
 
    public static double func(double x) {
        return (-(Math.exp(-x) * Math.log(x)));
    }
 
}
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
05.10.2022, 16:55  [ТС] 8
Catstail, также, ничего не выводится
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 18:41 9
Danil178, посмотрел та твой код... Он ужасен. Выкинь его. Вот нормальное деление отрезка пополам:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Main
{
    public static void main(String[] args) {
        double a = 0.5, b = 3.0, c, eps = 0.000001;
        double fa=func(a), fb=func(b),fc;
 
        if (fa*fb>0)
        {
            System.out.println("На заданном отрезке функция не меняет знак");
            return;
        }
 
        while (Math.abs(b - a) > eps)
        {
            c=0.5*(a+b);
            fc=func(c);
            
            if (Math.abs(fc) < eps) break;
            
            if (fc*fa < 0)
            {
                b=c;
                fb=fc;
            }
            else
            {
                a=c;
                fa=fc;
            }
            
        }
        System.out.println("Значение корня = " + (a+b)*0.5);
    }
 
    public static double func(double x) {
        return (-(Math.exp(-x) * Math.log(x)));
    }
}
0
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
05.10.2022, 19:01  [ТС] 10
Catstail, а вот если я беру начало отрезка a = 1 вместо 0.5, то почему значение корня равно 2.99995? корень должен находиться в интервале, где функция не меняет свой знак, я правильно понимаю?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
37175 / 20620 / 4256
Регистрация: 12.02.2012
Сообщений: 33,998
Записей в блоге: 14
05.10.2022, 19:15 11
Цитата Сообщение от Danil178 Посмотреть сообщение
а вот если я беру начало отрезка a = 1 вместо 0.5, то почему значение корня равно 2.99995?
- потому, что и в моем коде есть алгоритмическая ошибка. Вот правильный код, ломай:


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Main
{
    public static void main(String[] args) {
        double a = 1.0, b = 3.0, c, eps = 0.000001;
        double fa=func(a), fb=func(b),fc;
 
        if (Math.abs(fa) < eps) 
        {
            System.out.println("Значение корня = "+a);
            return;
        }
 
        if (Math.abs(fb) < eps) 
        {
            System.out.println("Значение корня = "+b);
            return;
        }
 
        if (fa*fb>0)
        {
            System.out.println("На заданном отрезке функция не меняет знак");
            return;
        }
 
        while (Math.abs(b - a) > eps)
        {
            c=0.5*(a+b);
            fc=func(c);
 
            if (Math.abs(fc) < eps) break;
            
            if (fc*fa < 0)
            {
                b=c;
                fb=fc;
            }
            else
            {
                a=c;
                fa=fc;
            }
            
        }
        System.out.println("Значение корня = " + (a+b)*0.5);
    }
 
    public static double func(double x) {
        return (-(Math.exp(-x) * Math.log(x)));
    }
}


Цитата Сообщение от Danil178 Посмотреть сообщение
корень должен находиться в интервале, где функция не меняет свой знак, я правильно понимаю?
- наоборот! Там, где меняет! читай!
1
0 / 0 / 0
Регистрация: 27.02.2021
Сообщений: 82
05.10.2022, 19:23  [ТС] 12
Catstail, спасибо
0
05.10.2022, 19:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2022, 19:23
Помогаю со студенческими работами здесь

Метод половинного деления (метод деления отрезка пополам)
решите нелинейное уравнение в MS Exel. Метод половинного деления (метод деления отрезка пополам)...

Метод половинного деления (метод деления отрезка пополам)
решите нелинейное уравнение в MS Exel. Метод пропорциональных отрезков (комбинированный метод хорд...

Метод половинного деления, метод касательных метод хорд
Ребят, помогите написать программу вычисления действительных корней уравнения методом половинного...

Метод хорд, метод касательных, метод половинного деления
Ребят помогите пожалуйста. Задали тему курсовой &quot;Решение нелинейных уравнений (метод хорд, метод...

Аналитический метод, метод половинного деления и метод итераций
Всем привет! Задача такая 1. Определить аналитическим путем точное решение уравнения a*x+b=0 на...

Методы одномерной оптимизации: объединить метод Свена и метод половинного деления
Здравствуйте. Кому не сложно, помогите, пожалуйста, соединить метод Свена и метод Половинного...

Найти площадь заштрихованной фигуры (метод половинного деления и метод трапеций)
Нужно найти площадь заштрихованной фигуры используя метод половинного деления и метод трапеций ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru