Форум сайта python.su
Ув. форумчане, подскажите, есть уравнение тиипа:
2*x+3*y+3*z+4*t = 1000
у каждой переменной есть интервал, допустим (1-5 с шагом 0.1)
как вывести возможные значения?
Офлайн
Написал пока вот так.. но цифры лошадиные, искать будет долго, перебирает уже часа два
import numpy as np
for x in np.arange (118537.84, 118539.84, 0.01 ):
for y in np.arange (4120.60, 4122.60, 0.01 ):
for z in np.arange (405.96, 407.96, 0.01 ):
for t in np.arange (10283.78, 10285.78, 0.01 ):
if (((42*x)+(902*y)+(12178*z)+(868*t)) == 22903674.11):
print (x,y,z,t)
Офлайн
как вывести возможные значения?а почему вы уверены, что точности 0.1 достаточно? А если решения имеют вид
Офлайн
kanonirov
какая вообще задача перед вами стоит изначально?
Офлайн
FishHookБухгалтерше нужно какие-то копейки найти, дала мне эти цифры:
kanonirov какая вообще задача перед вами стоит изначально?
Где х=(118538,84±1 с шагом 0,01) Где y=(4121,60±1 с шагом 0,01) Где z=(406,96±1 с шагом 0,01) Где t=(9965,12±1 с шагом 0,01)
Отредактировано FishHook (Сен. 23, 2021 18:45:08)
Офлайн
kanonirovну вобщем и целом можно обойтись без четвертого цикла, меняем формулу на t
Написал пока вот так.. но цифры лошадиные, искать будет долго, перебирает уже часа два
[code python][/code]
Офлайн
kanonirovЕсли с копейками работаешь, домножь их сначала до целых, потом проводи вычисления в целых числах, а результат потом подели обратно. Иначе в результате компьютерных округлений значения могут пропадать.
Бухгалтерше нужно какие-то копейки найти, дала мне эти цифры:
Офлайн
Похоже задачу давала не бугалтерша а препод по математике. Изучаемая тема диофантовы уравнения.
И цифры не лошадиные, а правильно подобранные, чтобы брутофорсом всякая школота не могла задачу решить. Правая часть превышает MAX_INT чтобы нельзя было на C перебирать. Респект преподу!!
Т.е. надо чуток мозгами пошевелить.
То что с плавающими числами точное сравнение не следует использовать это азы. В первом приближении можете считать что точное равенство никогда не выполняется. Даже если вы случайно найдете решение то не заметите это из за округлений. Надо переводить в целые числа коэффициенты.
Приводить поиск к интервалу 1-N
Упростить уравнение… И далее использовать теоремы
Отредактировано doza_and (Сен. 24, 2021 08:40:21)
Офлайн
doza_andК сожалению не так хорошо питон знаю, и тем более математику)
в
Офлайн
kanonirovТогда вам просто не следует браться за такие задачи.
К сожалению не так хорошо питон знаю,
Офлайн