| |
|
|
| | Доигрался я с родным универом до состояния «полная жопа». Практически под угрозой вылета из-за одного предмета. Спасти ситуацию может один веб-скриптик. Если я его предъявлю во вторник – мне простят мои залёты.
Вроде ничего сложного – но я уже вторые сутки ебусь безрезультатно. Чувстую истина где-то рядом, но от меня ускользает. Помогите, пожалуйста – я сгораю. В крайнем случае, если кто-то может помочь быстро, но за деньги – скидывайте ваши предложения в аську 98-31-30. Как вариант можно написать программу, но GUI обязателен. К сути.
Есть цилиндрический резервуар с диаметром основания S. Он заполняется водой одним насосом с подачей Q. А опорожняется двумя насосами с подачей Q1 и Q2 соответственно.
Опорожняющие насосы включаются и выключаются датчиками уровня воды.
Изначально резервуар пуст. Как только вода доходит до датчика вкл1 – включается первый насос, а до датчика вкл2 – второй. Выключение – как только уровень воды опускается до датчика выкл2 – выключается второй насос, а до датчика выкл1 – первый.
Нам известны расстояния между датчиками включения L1 и выключения L2, подачи выкачивающих насосов Q1 и Q2, диаметр резервуара S, высота рабочей зоны (от самого верхнего датчика до самого нижнего) H, рабочий объём резервуара Wрез = S * H
Также мы знаем подачу заполняющего насоса Q в каждую конкретную минуту суток (от 00:00 до 23:59).
Она считается по формуле Q(х)=0,0087*(x/60)^4 - 0,4578*(x/60)^3 + 7,8989*(x/60)^2 - 45,912*(x/60)+ 168,75 , где x – порядковый номер минуты (от 1 до 1440).
Нужно зафиксировать время, когда были включены откачивающие насосы в течении дня. Т.е. когда работал только первый, когда первый и второй насос вместе. Когда они не работали.
Фактически первый насос включается если W (текущая заполненность резервуара) >= Wрез-L1*S (уровень воды – выше датчика вкл1). После этого резервуар будет заполняться с подачей Q=Q-Q1;
Второй насос включается если W>=Wрез (уровень воды выше датчика вкл2). Резервуар в этом случае будет заполняться с подачей Q=Q-Q1-Q2;
Второй насос выключается если W<=L2*S (уровень воды ниже датчика выключения второго насоса) Подача Q=Q-Q1;
Первый выключается если W<=0. Подача – Q.
Дабы не плодить тут свои маразмы - пишу только исходные данные.
<?
//расстояния между датчиками
$l1="0.2";
$l2="0.2";
//подачи выкачивающих насосов
$q1="150";
$q2="200";
$wrez="45"; //объём раб зоны рез
$s="30"; //диаметр основания рез
$h="1.5"; //высота раб. зоны резервуара
echo "Резервуар пуст.Начинаем заполнение <br>";
//загоняю в массив Q подачу в каждую минуту
for ($i=1; $i<=1440; $i++){
$qzap[]=0.0087* pow(($i/60),4) - 0.4578* pow(($i/60),3) + 7.8989 * pow(($i/60),2) - 45.912*($i/60)+ 168.75;
}
?>
|
Спасайте! Буду всегда должен! | |
| |
|
|
| |
|
|
| |
для: DiG
(04.05.2008 в 18:50)
| | | Нельзя ли найти, например, время включения первого откачивающего насоса приравняв интеграл функции Q(t) к объему S*(H-L1)? По-тупому, подсчитав кол-во итераций до того момента, когда объем наполневшейся воды будет равен S*(H-L1). "Равен", потому что в этой задаче, думаю ответы - целые числа? Остальное, кажется, ищется аналогично. | |
| |
|
|
| |
|
|
| |
для: DiG
(04.05.2008 в 18:50)
| | | Супер! Теперь студенты будут нанимать на работу программистов! : )))))
Тут решать не чего. Считаешь сколько за минуту натекло воды, сравниваешь с уровнем датчика,
снова считаешь, снова сраниваешь.
Если бы они хотели хоть чуточку усложнить задачу, подача воды не росла бы дискретно по минутам. Тогда бы иттерации понадобились. | |
| |
|
|
| |
|
|
| |
для: Eugene77
(05.05.2008 в 08:38)
| | | Налить и сравнить, налить и сравнить, ... - и есть итерации, т.е. повторения. Не понял что имелось ввиду. | |
| |
|
|
| |
|
|
| |
для: Atheist
(05.05.2008 в 08:58)
| | | Налил, выпил, налил, выпил - это повторения, и после некой итерации уже все по колено... Так и учимся, вот от сюда и просьбы...) | |
| |
|
|
| |
|
|
| |
для: Atheist
(05.05.2008 в 08:58)
| | | Иттерациями теоретики математических методов называют чуть-чуть другое. В иттерационных циклах, например, заранее нельзя предугадать число иттераций.
Если рассматривать данный пример, то решение можно сделать более качественным таким образом применив иттерации:
Налил
Налил
Налил
Налил
Налил
Хоп - перелил
Вздохнул, половинку отпил. И смотришь,всё ещё вода выше датчика или уже ниже.
Тут ветвление.
Это и есть начало иттераций. Либо выплюнуть четвертинку, либо отпить ещё четвертинку.
До тех пор пока не будет достигнута необходимая точность отсечки по времени. Если требуется решать задачку с точностью до секунды, то отпивать то что налилось за секунду уже не следует.
Вместо этого надо включать насос и интегрировать оба потока посекундно пока не перельёт следующий датчик.
Это один, конечно, из вариантов решения. Но довольно прозрачный для составления алгоритма.
Можно короче, но более изощрённо. Но раз сроки поджимают, лучше сделать хотя бы так без эстетства.
То Sim5: отпивать придётся всего 4 раза.
Это что может учёбе повредить?
А может и не 4 ... если профессор недоволен, то он своё возьмёт... | |
| |
|
|