07.11.2012, 02:11 | #1 (permalink) |
Новичок
Регистрация: 07.11.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Решение кубического уравнения методом хорд, 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)) #Функция для подбора промежутков (!) НЕРАБОЧАЯ (!)# 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 #Функция, которая находит корни уравнения# 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) |
07.11.2012, 02:11 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Данные топики могут вам очень хорошо помочь Приближенное решение уравнения Помогите с программой на Python Метод хорд и бисекций Паскаль. Найти корни уравнения методом хорд Решение нелинейного уравнения на Паскале |
07.11.2012, 03:49 | #2 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
Ну к примеру потому, что у вас промежуток и корни совпадают.
Корни -7, 1, 2 Ну и функция от -7, 1, 2 равна 0, а не отрицательна. и получается, что условие надо переписать: Код:
if float(fun(i)) * float(fun(i - 1)) <= 0: |
07.11.2012, 04:04 | #3 (permalink) |
Новичок
Регистрация: 07.11.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо огромное, но я уже решил проблему.
Просто я забыл, как найти промежутки монотонности. Все решается, если в функции found искать не по функции, а по ее производной. |
07.11.2012, 04:22 | #4 (permalink) |
Member
Регистрация: 27.02.2010
Сообщений: 659
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1312
|
) тоже верно
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Метки |
python |
|
|