Найти - Пользователи
Полная версия: Многочлены(или как их там)
Начало » Python для новичков » Многочлены(или как их там)
1 2
Murderdoll666
Здравствуйте
Помогите справиться с проблемой.
Вообщем, надо написать код для решения многочленного уровнения
import os
n = input("Vvedite stepen: ")
if (n != int(n))or(n<=0):
print "Error Vveli ne celoe 4islo."
os._exit(1)
print "vvedi argument"
a = []
for i in range(n+1):
a.append(input("x^" + str(n-i) + " kordaja: "))
if a[i] != int(a[i]):
print "vveli ne celoe 4islo."
os._exit(1)
if a[0] == 0:
print "argument ne mozet b6t 0."
os._exit(1)
print "Vvel mnogo4len" + str(a[0]) + "*x^" + str(n),
for i in range (1,len(a)):
print " + " + str(a[i]) + "*x^" + str(n-i)


#poisk x=0
from math import*
x=0.00
nullkohad=0.00

for i in range(a[n],abs(-a[n])):# Вот дальше я уже не умею
Вообщем вводим степень, к примеру 2
потом надо ввести аргумент . Например 1 1 и -6
получаем что то типа этого:
х^2+x-6=0
Программа должна проверить все возможные варианты для х, что бы уровнение было равно нулю
Учитель посоветовал просмотреть начиная с -6 до 6.
Вот тут проблема:
Если -6, то он ещё выдаёт с -6 до 6, а если для примера ввести 6, то ничего.
И потом он должен решить со всеми данными х это уровнение.
Если с -6 он ещё выдаёт правильный ответ, то дальше уже вообще не понятно что.
Помогите решить.
print "Vvedi zna4enie argumenta:"
x=input()
lahend=0
for i in range(0,len(a)):

lahend=lahend+(a[i])*(x**(n-i))
print "x="+str(x)+ " on " +str(lahend)
так он должен решать, если х запрашивают у пользователя

А вот что дожно получиться
Введите степень: 2
х=
x^2 : 1
x^1 : 1
x^0 : -6
x = -6.0 on 24.0
x = -5.0 on 14.0
x = -4.0 on 6.0
x = -3.0 on 0.0
x = -2.0 on -4.0
x = -1.0 on -6.0
x = 0.0 on -6.0
x = 1.0 on -4.0
x = 2.0 on 0.0
x = 3.0 on 6.0
x = 4.0 on 14.0
x = 5.0 on 24.0
x = 6.0 on 36.0
За ранее спасибо. Извините, если описала так ломано, просто не училась в русской школе, не знаю точно, как называються все эти математические определения на русском
Evgeny
Не понятно, в чем ваш вопрос. Ведь все же правильно получилось. -3 и 2 - корни вашего уравнения
RaZveDchiK
Возможно это:
import os
def mn():
i = int(raw_input("vvedite stepen' mnogochlena: "))
stepen = []
koef = []
if i != 0 and i > 0:
print 'Ok'
else:
print "Stepen' ne dolzhna but' ravna 0 ili <0"
os._exit(1)
for num in range(i+1):
stepen.append(num)
stepen.reverse()
for val in stepen:
koef.append(float(raw_input("x^"+str(val)+ " :")))
diapazon = float(raw_input("diapazon -d:d (polozhitel'noe chislo): "))
for h in range(-diapazon,diapazon):
k = 0
for j in range(i+1):
k += koef[j]*pow(h,stepen[j])
print h, k
Murderdoll666
Evgeny
Не понятно, в чем ваш вопрос. Ведь все же правильно получилось. -3 и 2 - корни вашего уравнения
ДОЛЖНО получится, но на данный момент программа выдаёт другие результаты, не соответсвующие нужным.
Мой вопрос в том, как правильно сгенерировать кандитатов на проверку тоесть -6 до 6, вслучае ввода -6 или 6 и что бы программа правильно прорешала с каждым кандидатом
RaZveDchiK
пробуйте мой вариант, я его уже подправил
Murderdoll666
RaZveDchiK
Нет, извините, но Питон на этот код никак не реагирует, вроде бы должен чего-то печатать, но ничего нет

А вообще, можно ли сделать так, что начальный код, тоесть
if (n != int(n))or(n<=0):
print "Error Vveli ne celoe 4islo."
os._exit(1)
print "vvedi argument"
a = []
for i in range(n+1):
a.append(input("x^" + str(n-i) + " kordaja: "))
if a[i] != int(a[i]):
print "vveli ne celoe 4islo."
os._exit(1)
if a[0] == 0:
print "argument ne mozet b6t 0."
os._exit(1)
print "Vvel mnogo4len" + str(a[0]) + "*x^" + str(n),
for i in range (1,len(a)):
print " + " + str(a[i]) + "*x^" + str(n-i)
не менять, а продолжить решение уже на базе этого когда..учительница сказала, что начало правильное, но надо добавить абсолютное значение, что я и сделала, но это не помогла в поиске кандитатов, если свободный элемент 6, а не -6 и позже он решает не верно
Evgeny
>ДОЛЖНО получится, но на данный момент программа выдаёт другие результаты

Во-первых:

Вот чуть-чуть измененный вариант вашей программы:
n = 2
a = (1,1,-6)

for x in range(-6,7,1):
lahend=0
for i in range(0,len(a)):
lahend=lahend+(a[i])*(x**(n-i))
print "x="+str(x)+ " on " +str(lahend)
выводитится:
x=-6 on 24
x=-5 on 14
x=-4 on 6
x=-3 on 0
x=-2 on -4
x=-1 on -6
x=0 on -6
x=1 on -4
x=2 on 0
x=3 on 6
x=4 on 14
x=5 on 24
x=6 on 36

то есть, все правильно (у вас)

во-вторых:
дискриминант уравнения x^2+x+6 = 0 отрицательный, то есть, вещественных корней, тем более,
целочисленных вы тут не дождетесь. Ведь, если я правильно понял, ваша проблема была в том, что
при свободном члене -6 все работает, а при +6 - нет?

В общем, вашим методом можно решать только те уравнения, которые гарантированно имеют целочисленные
корни. Что до задания интервала поиска? Ну берите пошире, например, от -500 до 500
py.user.next
Murderdoll666
Если -6, то он ещё выдаёт с -6 до 6, а если для примера ввести 6, то ничего.
>>> k = 6
>>> r = range(-k, k + 1) if k > 0 else range(k, -k + 1)
>>> list(r)
[-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
>>> k = -6
>>> r = range(-k, k + 1) if k > 0 else range(k, -k + 1)
>>> list(r)
[-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6]
>>>
Murderdoll666
Мы на пару с моим однокурсником решили эту проблему, добавили след функцю
a.reverse()   

from math import*

lahend=[]
kand=[]

for i in range(-abs(a[0]),abs(-a[0])+1):
kand.append(i)
for i in kand:
muutuja=0
for j in range(len(a)):
muutuja=muutuja+(a[j])*(i**j)
lahend.append(muutuja)
print "x="+str(i)+ " on " +str(muutuja)
Позже добавили ещё коечто, так как надо было расшиить список кандидатов
a.reverse()   
from math import*

lahend=[]
kand=[]

for i in range(-abs(a[0]),abs(-a[0])+1):
for j in a:
kand.append(float(i)/j)
blah=sorted(kand)
for i in blah:
muutuja=0
for j in range(len(a)):
muutuja=muutuja+(a[j])*(i**j)
lahend.append(muutuja)
print " x="+str(i)+ " on " +str(muutuja)

v=[]
print "0:"

for i in range(len(lahend)):
if lahend[i]==0:
print blah[i]
ну итд
Осталась одна проблема. Если аргумент вводимый пользователем в начале равен 0, не считая первого (его программа отклоняет) остальные ведь могут быть 0-лями, то программа(последний код) находит не все х, где многочлен равен 0. Как сделать так, чтоб вслучае 0, программа искала другие варианты возможных кандидатов?
new0=0
if 0 in a:
for i in range(len(a)):
if a[i]==0:
new0=i+1

print new0

lahend=[]
kand=[]

for i in range(-abs(a[new0]),abs(-a[new0])+1):
for j in a[new0:]:
kand.append(float(i)/j)

blah=sorted(kand)
for i in blah:
muutuja=0
for j in range(new0,len(a)):
muutuja=muutuja+(a[j])*(i**j)
vastused.append(muutuja)
print "x="+str(i)+ " on " +str(muutuja)
За ранее спасибо
py.user.next
Murderdoll666
Как сделать так, чтоб вслучае 0, программа искала другие варианты возможных кандидатов?
нужно добавлять кандидата в список найденных и в цикле, который выполняется n раз, искать кандидатов, которых нет среди добавленных
n - степень многочлена
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB