Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2016, 17:50   #1
lbAdl
 
Регистрация: 03.05.2016
Сообщений: 9
По умолчанию Нахождение нескольких неизвестных в уравнении

Есть уравнение: X/70*Y/8*Z/8=156.428571428571 необходимо найти комбинацию из целых X, Y, Z, при которых значение будет максимально близкое к искомому. Сделал а Экселе таблицу на несколько десятков тысяч строк с вариантами перемножения, но необходимой точности не достиг. Причём X, Y, Z - должны быть в интервале от 70 до 110. Да и знаменатель 8 тоже можно поварьировать, но это уже за пределом возможностей Экселя (таблица с множетелями будет на сотни тысяч строк, а то и больше). Посему обращаюсь сюда за помощью.

В идеале нужна простейшая визуальная программка, с заданием интервала числителей и знаменателей, чтобы она перебором находила необходимую комбинацию, максимально близкую к искомому числу. Дробей не обязательно 3, желательно иметь возможность выбирать их количество.

Доктор, мне можно помочь?

Последний раз редактировалось Вадим Мошев; 03.05.2016 в 20:45.
lbAdl вне форума Ответить с цитированием
Старый 03.05.2016, 18:09   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

VBA в помощь, 3 вложенных цикла, до 70000 итераций, не так уж и много
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.05.2016, 19:02   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

x = 96
y = 100
z = 73
так штоли?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.05.2016, 20:37   #4
lbAdl
 
Регистрация: 03.05.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
x = 96
y = 100
z = 73
так штоли?
ага. уже и сам нашёл, через Эксель. Просто первый интервал был 80-110, а когда пост писал, то сделал 70-100, но не думал, что попаду.

А ты как нашёл? На будущее нужно =) А то интервалы могут быть пошире и неизвестных поболе и Эксель уже не поможет.

Последний раз редактировалось lbAdl; 03.05.2016 в 20:47.
lbAdl вне форума Ответить с цитированием
Старый 03.05.2016, 20:47   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А ты как нашёл?
блин, не поверишь! чисто от балды:
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.05.2016, 21:04   #6
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Не сразу заметил, что надо целые, поэтому написал в общем виде.
VBA не владею, поэтому на Pascal / Delphi.
Код:
function fErr(x,y,z:Double):Double;
begin
 Result:=Abs(x*y*z/4480-156.428571428571);
end;
procedure TForm1.Button4Click(Sender: TObject);
var ix,iy,iz,n:Integer;
   t1,t2,step,er,erMin,x0,y0,z0,x,y,z:Double;
begin
 t1:=70;
 t2:=110;
 step:=0.1;   //  заменить на 1
 n:=Round((t2-t1)/step);
 erMin:=100500;
 for ix:=0 to n do
  for iy:=0 to n do
   for iz:=0 to n do
    begin
     x:=t1+step*ix;
     y:=t1+step*iy;
     z:=t1+step*iz;
     er:=fErr(x,y,z);
     if er<erMin then
      begin
       erMin:=er;
       x0:=x;
       y0:=y;
       z0:=z;
      end;
    end;
 Memo1.Lines.Add('X = '+FloatToStr(x0));
 Memo1.Lines.Add('Y = '+FloatToStr(y0));
 Memo1.Lines.Add('X = '+FloatToStr(z0));
 Memo1.Lines.Add('ошибка ='+FloatToStr(erMin));
end;
Нашел еще одно не целое решение:
X = 80
Y = 87.6
X = 100

Возможно их там много не целых, отличаются в последнем знаке.

Если целые, то сделать step:=1; Тогда находит:
X = 73
Y = 96
X = 100
ошибка =4.28573843080926E-13

PS Циклы у меня - не оптимально устроены в смысле скорости вычисления. Просто так короче.

Последний раз редактировалось type_Oleg; 03.05.2016 в 21:08.
type_Oleg вне форума Ответить с цитированием
Старый 03.05.2016, 21:05   #7
lbAdl
 
Регистрация: 03.05.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
блин, не поверишь! чисто от балды
да ладно
lbAdl вне форума Ответить с цитированием
Старый 03.05.2016, 21:19   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
да ладно
честное пионерское!

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 03.05.2016, 21:20   #9
lbAdl
 
Регистрация: 03.05.2016
Сообщений: 9
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
поэтому на Pascal / Delphi.
Онлайн компилер ругается на последнюю строчку http://pascalabc.net/WDE/ - Встречен конец файла, а ожидалось begin
lbAdl вне форума Ответить с цитированием
Старый 03.05.2016, 21:25   #10
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от lbAdl Посмотреть сообщение
Онлайн компилер ругается на последнюю строчку http://pascalabc.net/WDE/ - Встречен конец файла, а ожидалось begin
Ну поставьте в конце end. - обязательно с точкой.
Код:
// .....
 Memo1.Lines.Add('ошибка ='+FloatToStr(erMin));
end;
end.
И как так вообще что-то откомпилировалось? Надо же и Form, и Button4, и Memo1. Или создали проект ?
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять нахождение min среди двумерного массива, на нахождение min в каждой сточке admokep Общие вопросы C/C++ 1 10.01.2015 09:48
ОДЗ в уравнении Александрq Помощь студентам 1 15.10.2012 00:37
Системы нелинейных уравнении над полем классов вычетов (Delphi или Pascal) popondopulus_1 Помощь студентам 0 26.02.2012 19:43
поиска неизвестных в pascal ank1ne Паскаль, Turbo Pascal, PascalABC.NET 6 09.09.2011 16:37
Задача где неизвестных больше чем известных. poolt Microsoft Office Excel 17 01.12.2010 02:28