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

Почему создается вечный цикл

30.03.2021, 21:55. Показов 1523. Ответов 7

Студворк — интернет-сервис помощи студентам
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
45
46
47
48
49
50
51
52
53
54
55
56
57
def f(x):
    return (x ** 2 - 1) ** 2
 
 
def fp(x):
    return 4 * x * (x ** 2 - 1)
 
 
def fpp(x):
    return 4 * (3 * x ** 2 - 1)
 
 
print('метод оптимізації з використанням кубічної апроксимації')
x = 0
d = 1
e1 = 1e-3
e2 = 1e-3
y = fp(x)
L = x - d
R = x + d
while (fp(L) * y) > 0 and (fp(R) * y) > 0:
    L = L - d
    R = R + d
if (fp(L) * y) < 0:
    R = x
else:
    L = x
 
n = 0
while abs(f(x)) > e1 or abs(fp(x)) > e2:
    z = 3 * (f(L) - f(R) / (R - L)) + fp(L) + fp(R)
    b = 0
    if L > R:
        b = (z ** 2 - fp(L) * fp(R)) ** (1 / 2)
    elif L < R:
        b = -(z ** 2 - fp(L) * fp(R)) ** (1 / 2)
 
    m = (fp(R) + b - z) / (fp(R) - fp(L) + 2 * b)
    #вот здесь
 
    if m < 0:
        x = R
    else:
        if m > 1:
            x = L
        else:
            x = R - m * (R - L)
            print('n =', n)
 
    while f(x) > f(L):
        x = x - 0.5 * (x - L)
    if fp(L) * fp(x) < 0:
        R = x
    else:
        L = x
    n += 1
print('n =', n, 'f =', f(x), 'x =', x)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.03.2021, 21:55
Ответы с готовыми решениями:

Почему не создается json и csv файлы?
Сделал парсер, для одного сайта он работает без проблем, по тому же алгоритму сделал для другого и никаких ошибок не выдает, но ничего не...

Почему не работает цикл for in range . То есть он не повторяет вложенный в него цикл while
import random res = 0 ore = 0 for i in range(10): while res != 3 and ore != 3: coin = random.randint(0, 1) ...

Почему в библиотеке К создается только 21 элемент
import random K={} Nominal= Suit= for i in range(4): for j in range(9): K=+Suit]

7
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
30.03.2021, 21:58
Потому что условие не выполняется
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
30.03.2021, 22:00  [ТС]
окей,тогда почему при х = 2 пишет такое
if m > 0:
TypeError: '>' not supported between instances of 'complex' and 'int'
0
 Аватар для Matrix3007
198 / 164 / 41
Регистрация: 13.05.2019
Сообщений: 844
30.03.2021, 22:14
Frostep23, По-моему, описание ошибки говорит само за себя
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
30.03.2021, 23:54
Цитата Сообщение от Frostep23 Посмотреть сообщение
if m > 0:
Очевидно, что m вычисляется как комплексное число. Нельзя сравнивать КЧ и ДЧ (действительное).
Нельзя сравнивать два КЧ. Можно сравнивать их части по отдельности: действительную и мнимую: m.real и m.image.
Вопрос почему формула дает такое число нужно задать себе.
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.03.2021, 10:10
Лучший ответ Сообщение было отмечено Frostep23 как решение

Решение

Frostep23, неверно закодил кубическую аппроксимацию - нет спуска к минимуму...

Добавлено через 5 часов 45 минут
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
def f(x):
    return (x ** 2 - 1) ** 2
 
 
def fp(x):
    return 4 * x * (x ** 2 - 1)
 
def _x(x1, x2):
    z = 3*(f(x1) - f(x2))/(x2 - x1) + fp(x1) + fp(x2)
    
    if x1 < x2:
        b = (z ** 2 - fp(x1) * fp(x2)) ** (1 / 2)
    else:
        b = -(z ** 2 - fp(x1) * fp(x2)) ** (1 / 2)
        
    m = (fp(x2) + b - z) / (fp(x2) -fp(x1) + 2*b)
 
    xx = x2 if m<0 else x1 if m>1 else x2 - m*(x2 - x1)
    
    return xx
 
 
 
print('метод оптимізації з використанням кубічної апроксимації')
n = 0
# у данной ((x ** 2 - 1) ** 2) функции два минимума
x = -1000.012
d = 1
e1 = 1e-3
e2 = 1e-3
 
# определение диапазона для x
y = fp(x)
if y < 0:
    x += 2*d
    y1 = fp(x)
    while y*y1 > 0:
        y = y1
        x += 2*d
        y1 = fp(x)
    L = x - 2*d
else:
    x -= 2*d
    y1 = fp(x)
    while y*y1 > 0:
        y = y1
        x -= 2*d
        y1 = fp(x)
    L = x + 2*d
R = x
 
# спуск к минимуму
while True:
    n += 1
    x = _x(L, R)
 
    while f(x) > f(L):
        x = x - (x - L)/2
    
    if abs(fp(x)) > e1 or abs((x - L) / x) > e2:
        if fp(x)*fp(L) < 0:
            R = L
            L = x
        else:
            L = x
    else:
        break
 
 
print('n =', n, 'f =', f(x), 'x =', x)
0
0 / 0 / 0
Регистрация: 15.11.2019
Сообщений: 29
31.03.2021, 10:36  [ТС]
Благодарю, но мне не ясно почему x = -1000.012
я пытался использовать х = 2..5 и выбивала ошибка, почему так?
0
Эксперт Python
8849 / 4501 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
31.03.2021, 10:47
Frostep23, х - любое число, кроме 0
Ноль нельзя, потому что в этой точке третий экстремум - максимум

Добавлено через 2 минуты
При х меньше этого максимума "спустится к первому минимуму, при больше - ко второму
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.03.2021, 10:47
Помогаю со студенческими работами здесь

Непонятно почему вечный цикл
Собственно дело вот в чём, если в мейне ввести не цифру, а букву (cin&gt;&gt;k), то цикл резко ломается к чертям, просто вечно выводит сообщения,...

Вечный цикл
вы в вечном цикле выводите число и спрашиваете у пользователя больше меньше или равно ( = &gt; &lt; ). Если пользователь отввечает равно...

Вечный цикл
является ли этот цикл зацикленным(вечным)? while(1){ for(i=8;i&lt;=190;i++){ if (GetAsyncKeyState(i) == -32767)...

Вечный цикл и графика
Вообщем такая беда, я создал графику, на ней кнопки, вызываем в main нашу графику guiWindow-&gt;show(); а на графике кнопки, которые по...

ffprobe выдает вечный цикл
Скажите почему команда: ffprobe -i &quot;Мой фаил.mp4&quot; -show_streams выдает вечный цикл, см. скрин Как это исправить? Мне...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru