Стол, кот, черепаха, бутылка и стакан

Дано: расстояние от головы черепахи, сидящей столом, до головы кота на столе равна 170 см, расстояние от головы кота, сидящего под столом, до головы черепахи на столе — 130 см. Предлагается вычислить высоту стола. В этом случае проблем и задача решается сходу.
В сети, наполонившими вариантами решений предлагается как минимум два решения.
Первый:"Складываем"
кота, стол и вычитаем черепаху -  170 см.
Черепаха + стол- кот= 130 см.
Далее - вычеркиваем животных (плюс/минус), остается 2 стола=300, следовательно, один стол = 150 
Второй способ - визуальный:второй стол с животными ставим на первый и видим что два стола =300,следовательно один - 150.Однако с этой задачей в такой постановке - определить только высоту стола, хорошо справляются пятиклассники. Однако чем старше, тем тяжелее врубается народ (проверено на студентах 1-го курса). Особенно, как и в интернете, проблема с определением высот кота и черепахи. Бросаются найти их сразу через уравнения трех неизвестных. А надо нашли высоту стола, определяйте высоту кота - подставляя в уравнение последовательно возможные числовые значения высот черепахи и наоборот.
      Здесь понятно - есть две картинки и одна и другая дают два уравнения. Крутим, вертим, сокращаем, находим. Встает другой момент: А слабо решить задачу, когда дана одна картинка? Одно уравнение составить можно:
Стол + кот - 170 = черепаха. Одно уравнение три неизвестных.
      - Слабо?! А решение есть - с помощью  безусловной оптимизации, когда F(x,y,z) -> min -> 0.
     В нашем случае  Стол + Кот -170 - черепаха -> 0.
 Как уже сказано  дан один рисунок. Определить высоту стола, высоту кота и высоту черепахи. Неизвестных три: высота кота – х, высота стола – y, высота черепахи – z. Решаем с помощью нахождения минимума ЦФ (см. вставку верхний ряд и под ними результат перебора.
    Следующий вариант на столе стоит бутылка и под столом граненый стакан.
При употреблении напитка стоя, высота стола вполне может быть равна 150 см. Однако возьмем вариант, кода посетитель сидит, например в писательском кафе Рифей во Владивостоке.Здесь также требуется определить, чему равна высота стола, стакана и бутылки.
     Бутылка*, похоже, больше стандартной. Определить так ли это? Насколько больше?
      * Идею с бутылкой и стаканом «позаимствовали" с форума, на котором один из посетителей спрашивает: Очень интересно посмотреть на более развернутое решение примера. Наш ответ – как раз смотри выше с помощью задания целевой функции (ЦФ)и трех циклов: перебрать, сравнить и выбрать.   
       В макрокоманде (МК), используемой  для стола, кота и черепахи, изменяем область ограничений и  в ЦФ изменяем 170 на 120. В результате  получаем график ЦФ (в виде точек) и расчеты (см. под рисунком):
       Результаты получились не совсем точно, но приемлемо. Например, округляем высоту стола до 100, далее по высоте стакана(берем стандартный) вычисляем высоту бутылки. Есть много вариантов улучшить результаты численного расчета. Главное надо понимать, как это делается, например, визуализацией входных данных: область ограничения, диапазон изменения параметров U и V, построение ЦФ, с определением в какой момент она будет минимальной. 
      В МК, чтобы исключить минусовый вариант, целевую функцию возводим в квадрат, вычисляя из нее корень квадратный.
     Ниже фрагмент макропрограммы на VBS и методов системы Вектор с тремя неизвестными:
Smin=10000 ‘ заведомо большое число
For t=0.6 To 1.01 Step 1/21
Set p15 = PointOtr(p1, p5, t)
Set p37 = PointOtr(p3, p7, t)
Set p26 = PointOtr(p2, p6, t)
Set p48 = PointOtr(p4, p8, t)

For v=0.4 To 1.01 Step 1/21
Set p1537 = PointOtr(p15, p37, v)
Set p2648 = PointOtr(p26, p48, v)
For u=0.4 To 1.01 Step 1/21
Hcf = Sqr((Pt.x+Pt.y-Pt.z-120)*(Pt.x+Pt.y-Pt.z-120))   ' стремиться к нулю
if (Hcf < smin) Then
Ngpoint.ss Pt
Ngpoint.ss p(Pt.x,Pt.y,Pt.z-dlina/2)
otrezok.ss pt,p(Pt.x,Pt.y,Pt.z-dlina/2)
           Smin = dlina
So=DlinaOtr (pt,p(Pt.x,Pt.y,Pt.z-dlina))   
xmin = Pt.x
ymin = Pt.y
zmin = Pt.z
  End if
Next
  Next
Next
VBSmsg " Бутылка: x = " & xmin &  " Стол: y = " & ymin &  " Стакан: z = " & zmin
      Результаты показаны на вставке.       
Более подробно см. на сайте автора


Рецензии