Найти - Пользователи
Полная версия: Всю голову сломал. Помогите решить
Начало » Центр помощи » Всю голову сломал. Помогите решить
1 2
kanonirov
Ув. форумчане, подскажите, есть уравнение тиипа:
2*x+3*y+3*z+4*t = 1000
у каждой переменной есть интервал, допустим (1-5 с шагом 0.1)
как вывести возможные значения?
kanonirov
Написал пока вот так.. но цифры лошадиные, искать будет долго, перебирает уже часа два
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)
FishHook
как вывести возможные значения?
а почему вы уверены, что точности 0.1 достаточно? А если решения имеют вид

2*1.5554+3*9.255+3*0.89463+4*5439.99 = 1000
или вообще корни вещественые, вы вашим циклом их точно не найдете
FishHook
kanonirov
какая вообще задача перед вами стоит изначально?
kanonirov
FishHook
kanonirov какая вообще задача перед вами стоит изначально?
Бухгалтерше нужно какие-то копейки найти, дала мне эти цифры:
необходимо найти значения
42*х+902*у+12178*z+868*t=22 301 993,11
 Где х=(118538,84±1 с шагом 0,01)
Где y=(4121,60±1 с шагом 0,01)
Где z=(406,96±1 с шагом 0,01)
Где t=(9965,12±1 с шагом 0,01)
PEHDOM
kanonirov
Написал пока вот так.. но цифры лошадиные, искать будет долго, перебирает уже часа два
ну вобщем и целом можно обойтись без четвертого цикла, меняем формулу на t1000 - 2*x+3*y+3*z)/4 и смотрим попадает ли она в ваш диапазон. По крайней мере так у вас будет на один вложеный цикл меньше.
py.user.next
kanonirov
Бухгалтерше нужно какие-то копейки найти, дала мне эти цифры:
Если с копейками работаешь, домножь их сначала до целых, потом проводи вычисления в целых числах, а результат потом подели обратно. Иначе в результате компьютерных округлений значения могут пропадать.
doza_and
Похоже задачу давала не бугалтерша а препод по математике. Изучаемая тема диофантовы уравнения.
И цифры не лошадиные, а правильно подобранные, чтобы брутофорсом всякая школота не могла задачу решить. Правая часть превышает MAX_INT чтобы нельзя было на C перебирать. Респект преподу!!
Т.е. надо чуток мозгами пошевелить.

То что с плавающими числами точное сравнение не следует использовать это азы. В первом приближении можете считать что точное равенство никогда не выполняется. Даже если вы случайно найдете решение то не заметите это из за округлений. Надо переводить в целые числа коэффициенты.

Приводить поиск к интервалу 1-N

Упростить уравнение… И далее использовать теоремы
kanonirov
doza_and
в
К сожалению не так хорошо питон знаю, и тем более математику)
doza_and
kanonirov
К сожалению не так хорошо питон знаю,
Тогда вам просто не следует браться за такие задачи.
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