• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Решение кубического уравнения методом хорд, Python

  • Автор темы Автор темы Jloku
  • Дата начала Дата начала

Jloku

Ученик
Регистрация
7 Ноя 2012
Сообщения
2
Реакции
0
Баллы
0
Решение кубического уравнения методом хорд, Python

Добрый день
Решаю лабораторную работу по числовым методам.
Столкнулся с такой проблемой:
Функции для нахождения корней работают, а вот функция для нахождения промежутков - нет, не смотря на то, что согласно словам преподавателя, она должна работать. Код прокомментирован, проблемная функция выделена. Посоветуйте, пожалуйста, как ее заменить/изменить


Код:
# -*- coding: cp1251 -*-

#Нужная нам функция#
def fun(x):
return float(x**3 + 4*(x**2) - 19*x + 14)

#Формула для метода хорд#
def promice(a,b):
return a+(fun(b)*(b-a))/(fun(b)-fun(a))

[COLOR="Red"]#Функция для подбора промежутков (!) НЕРАБОЧАЯ (!)#
def found():
#Cписок для хранения промежутков#
loop = []

for i in range(-1000, 1000, 1 ):
if float(fun(i)) * float(fun(i - 1)) < 0:
loop.append(i)
return loop[/COLOR]


#Функция, которая находит корни уравнения#
def root(a, b, eps):
while abs(b-a) > eps:
a = promice(a,b)
b = promice(b,a)
loot = b
return loot

#Функция, которая выводит на экран корни уравнения по заданным помежуткам#
def fin(eps):
print "Проводится поиск промежутков..."
loop = found()
print loop

#Переменная для "чередования" промежутков#
i = 0;

#Количество промежутков#
p = 3

##eps = float(raw_input("Epsilon: "))
while p != 0:
a = float(loop[i])
b = float(loop[i+1])
i += 2
print root(a, b, eps)

p += -1


print fin(0.01)
 
Ну к примеру потому, что у вас промежуток и корни совпадают.
Корни -7, 1, 2
Ну и функция от -7, 1, 2 равна 0, а не отрицательна.
и получается, что условие надо переписать:
Код:
if float(fun(i)) * float(fun(i - 1)) <= 0:
но тогда в функции promice будет деление на ноль так как значения промежутка a и b могут содержать корни. в общем надо играться с шагом
 
Спасибо огромное, но я уже решил проблему.
Просто я забыл, как найти промежутки монотонности.
Все решается, если в функции found искать не по функции, а по ее производной.
:closed:
 
) тоже верно
 
Назад
Сверху