Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 25.02.2024
Сообщений: 1

Метод деления отрезка пополам

25.02.2024, 21:03. Показов 2137. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вася бросает мяч со скоростью 12 м/с. Под каким углом к горизонту ему нужно бросить мяч, чтобы попасть в мишень на высоту 4 м на расстоянии 10 м от Васи? В момент броска мяч находился на высоте 2 м. Используйте метод деления отрезка пополам. На python
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2024, 21:03
Ответы с готовыми решениями:

Метод деления отрезка пополам
Напишите функцию реализующую алгоритм поиска минимума функции методом деления отрезка пополам. С помощью функции найдите максимальное...

Найти корень уравнения методом деления отрезка пополам
Найти какой-нибудь корень уравнения 2*cos(5+x)–3sin(2–x)=0 на отрезке с заданной точностью E = 0.0001 методом половинного деления. ...

Алгоритм нахождения корня нелинейного уравнения методом деления пополам
Всем привет) помогите решить задачу. Нужно найти - алгоритм нахождения корня нелинейного уравнения методом деления пополам. Заранее...

33
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 09:22
GGGordey,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from math import degrees, cos, pi, tan
 
vo, h, s = 12, 2, 10
g, eps = 10, 1e-6
 
left = 0
right = pi/2
alpha = (right + left) / 2
y = lambda x: s*tan(x) - g*(s/(vo*cos(x)))**2/2
 
while abs(y(alpha) - h) > eps:
    if y(alpha) > h:
        right = alpha
    else:
        left = alpha
    alpha = (right + left) / 2
print(round(degrees(alpha), 2))
2
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 11:01
Gdez, как-то странно у вас. g округлили до целых (10 вместо 9.81), а результат округляете до сотых. Но ведь точность результата не может быть выше точности исходных данных
1
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 12:01
idealist, В школьных задачах g принимается зачастую за 10м/с2, иначе оговаривается в условиях задачи
Раз в условии нет ни слова, взял за 10.
Исправить ТС может и сам в случае надобности
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
26.02.2024, 12:07
Gdez, по условию задачи h = 4, а не 2.
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 12:14
Цитата Сообщение от Gdez Посмотреть сообщение
Раз в условии нет ни слова, взял за 10.
Так я не о том какое значение g выбрать, а о том, что в данном случае цифры результата после запятой недостоверны.

Цитата Сообщение от palva Посмотреть сообщение
по условию задачи h = 4, а не 2.
Так в момент броска h = 2.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 12:21
idealist, относительная погрешность между вычислениями при 10 и при 9.81 > 0.02, так что округление до 0.01 скорее всего допустима
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
26.02.2024, 12:27
Цитата Сообщение от idealist Посмотреть сообщение
Так в момент броска h = 2.
А-а, понятно.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 12:45
palva, интереснее была бы задача при «… В момент броска мяч находился на высоте…» допустим 10 метров
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 13:01
Цитата Сообщение от Gdez Посмотреть сообщение
относительная погрешность между вычислениями при 10 и при 9.81 > 0.02, так что округление до 0.01 скорее всего допустима
Так 0.02 от величины ответа 36 градусов - это 0.72, а не 0.01! Т.е. и в целом-то значении последняя цифра почти недостоверна.

В данном случае g имеет две значащие цифры, поэтому и в результате достоверны только две значащие цифры, остальные не представляют информационной ценности и могут быть отброшены.

Цитата Сообщение от Gdez Посмотреть сообщение
интереснее была бы задача при «… В момент броска мяч находился на высоте…» допустим 10 метров
А чем вы считаете она интереснее?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 13:05
idealist, (36.3 - 35.55) / 35.55- относительная погрешность относительно 35.55
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 13:08
Цитата Сообщение от Gdez Посмотреть сообщение
(36.3 - 35.55) / 35.55- относительная погрешность относительно 35.55
Не очень понял что вы хотите этим сказать.
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 13:39
idealist,
А чем вы считаете она интереснее?
Задача имеет два решения (две траектории). При h<0, угол броска может быть положительным и отрицательным по отношению к горизонту.
Предложенный вариант (правильнее границы углов -> left=-pi/2; right=pi/2) находит минимальный по модулю угол.
А вот как второй найти?
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
26.02.2024, 15:20
Цитата Сообщение от Gdez Посмотреть сообщение
А вот как второй найти?
Задача и так имеет два решения. Второе решение 65 градусов. Чтобы его найти надо изменить программу.
Python
1
2
3
left = pi/4
. . .
    if y(alpha) < h:
Добавлено через 19 минут
Если формула использованная в программе правильная, а именно https://www.cyberforum.ru/cgi-bin/latex.cgi?y=x\tan\alpha-\frac{gx^2}{2v_0^2}\cdot\frac{1}{\cos^2\alpha}, то заменив https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{1}{\cos^2\alpha} на https://www.cyberforum.ru/cgi-bin/latex.cgi?1+\tan^2\alpha получаем квадратное уравнение относительно тангенса. Оно может не иметь решения, если скорость маленькая и тупо не можем добросить. Одно решение, если на пределе, и два решения, если скорость достаточна.

Добавлено через 6 минут
Естественно в уравнении надо положить https://www.cyberforum.ru/cgi-bin/latex.cgi?y=2;\ x=10;\ v_0=12;\ g=10
0
26.02.2024, 16:36

Не по теме:

баллистика - она такая... формулы приводят для идеальных условий, т.е без учета площади поверхности и силы сопротивления воздуха, а когда применяют на практике - каменный цветок и не выходит... :D

0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 17:09
Лучший ответ Сообщение было отмечено Gdez как решение

Решение

Цитата Сообщение от palva Посмотреть сообщение
Задача и так имеет два решения.
Да, единственное решение имеют только точки, лежащие на траектории броска при alpha = pi/4. До остальных точек либо не можем добросить, либо они имеют по два решения - одно для угла больше pi/4, другое - для меньше.
Что-то типа такого:
Python
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
from math import degrees, cos, pi, tan
 
vo = 12
h = float(input('h = '))
s = 10
g = 9.81
eps = 1e-6
 
left = pi/4
right = pi/2
alpha = (right + left) / 2
y = lambda x: s * tan(x) - g * (s / (vo * cos(x)))**2 / 2
 
while abs(y(alpha) - h) > eps:
    if y(alpha) > h:
        left = alpha
    else:
        right = alpha
    alpha = (right + left) / 2
print(round(degrees(alpha)))
 
left = -pi/2
right = pi/4
alpha = (right + left) / 2
 
while abs(y(alpha) - h) > eps:
    if y(alpha) > h:
        right = alpha
    else:
        left = alpha
    alpha = (right + left) / 2
print(round(degrees(alpha)))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
26.02.2024, 17:25
palva,
Если формула использованная в программе правильная
http://tm.spbstu.ru/Траектория... _горизонту
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
26.02.2024, 17:28
Цитата Сообщение от Gdez Посмотреть сообщение
http://tm.spbstu.ru/Траектория... _горизонту
Gdez, ну, это нетрудно и самому вывести...
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
27.02.2024, 10:01
Вот так сообщает, если не добросить:
Python
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
from math import degrees, cos, pi, tan
 
vo = 12
h = float(input('h = '))
s = 10
g = 9.81
eps = 1e-6
 
left = pi / 4
right = pi / 2
alpha = (right + left) / 2
y = lambda x: s * tan(x) - g * (s / (vo * cos(x))) ** 2 / 2
res = []
while abs(y(alpha) - h) > eps:
    if y(alpha) > h:
        res.append(True)
        left = alpha
    else:
        res.append(False)
        right = alpha
    if len(res) == 2 and res[0] == res[1]:
        res = None
        print('Не добросить')
        break
    alpha = (right + left) / 2
if res is not None:
    print(round(degrees(alpha), 2))
 
if res is not None:
    left = -pi / 2
    right = pi / 4
    alpha = (right + left) / 2
    res = []
    while abs(y(alpha) - h) > eps:
        if y(alpha) > h:
            res.append(True)
            right = alpha
        else:
            res.append(False)
            left = alpha
        if len(res) == 100 and True not in res:
            break
        alpha = (right + left) / 2
    print(round(degrees(alpha), 2))
Цитата Сообщение от idealist Посмотреть сообщение
единственное решение имеют только точки, лежащие на траектории броска при alpha = pi/4. До остальных точек либо не можем добросить, либо они имеют по два решения - одно для угла больше pi/4, другое - для меньше.
Или другими словами каждая точка, лежащая на траектории броска при alpha = pi/4, является предельной в том смысле, что до точек правее или выше нее не можем добросить, а точки левее или ниже имеют по два решения - одно для угла больше pi/4, другое - для меньше.

Цитата Сообщение от idealist Посмотреть сообщение
либо они имеют по два решения - одно для угла больше pi/4, другое - для меньше.
Практика опровергла эту мою гипотезу!
h = 3.5
61.27
48.02

Вот правильная программа:
Python
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
from math import degrees, cos, pi, tan
 
vo = 12
h = float(input('h = '))
s = 10
g = 9.81
eps = 1e-6
 
left = pi / 4
right = pi / 2
alpha = (right + left) / 2
y = lambda x: s * tan(x) - g * (s / (vo * cos(x))) ** 2 / 2
res = []
while abs(y(alpha) - h) > eps:
    if y(alpha) > h:
        res.append(True)
        left = alpha
    else:
        res.append(False)
        right = alpha
    if len(res) == 2 and res[0] == res[1]:
        res = None
        print('Не добросить')
        break
    alpha = (right + left) / 2
if res is not None:
    print(round(degrees(alpha), 2))
 
if res is not None:
    left = -pi / 2
    right = pi / 3
    alpha = (right + left) / 2
    res = []
    while abs(y(alpha) - h) > eps:
        if y(alpha) > h:
            res.append(True)
            right = alpha
        else:
            res.append(False)
            left = alpha
        alpha = (right + left) / 2
    print(round(degrees(alpha), 2))
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
27.02.2024, 10:16
При данной начальной скорости точки (x, y), для которых ровно одно решение, составляют так называемую "параболу безопасности". Можно набрать ее в гугле. А можно взять квадратное уравнение для тангенса из #14 выше и приравнять нулю его детерминант. Получится соотношение между x и y, которое задает эту кривую. Самолет вне этой параболы находится в безопасности, а залетевший под нее рискует быть пораженным стоящей на земле зениткой.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2024, 10:16
Помогаю со студенческими работами здесь

Решение уравнений методом деления отрезка пополам
Уровень B. Составить две программы, одна из которых выделяет все интервалы, на которых находятся корни, а вторая запрашивает границы...

Решение уравнения методом деления отрезка пополам
Найти корень уравнения 0.1(x^2)-x*ln(x) = 0 на отрезке с точностью e = 10^(-5) , используя метод деления отрезка пополам.

Вычислите корень n-й степени методом деления отрезка пополам
Дано действительное число a и натуральное n. Вычислите корень n-й степени из числа Для решения используйте метод деления отрезка...

Рекурсивная программа, которая методом деления отрезка пополам находит с точностью EPS корень уравнения
Напишите рекурсивную программу, которая по заданным A, B и EPS методом деления отрезка пополам находит с точностью EPS корень уравнения...

Метод деления пополам
здраствуйте, помогите с заданием пожалуйста. нужно решить уровнение методом деления пополам с точностью 1е-5


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru