Марков снял сапоги и, вздохнув, лег на диван.
Ему хотелось спать, но, как только он закрывал глаза, желание спать моментально проходило. Марков открывал глаза и тянулся рукой за книгой. Но сон опять налетал на него, и, не дотянувшись до книги, Марков ложился и снова закрывал глаза. Но лишь только глаза закрывались, сон улетал опять, и сознание становилось таким ясным, что Марков мог в уме решать алгебраические задачи на уравнения с двумя неизвестными.
Даниил Хармс. «Сон дразнит человека»
Система алгебраических уравнений с двумя неизвестными для многих литераторов является вершиной математической премудрости. Вот еще одна цитата, дополняющая эпиграф первого этюда книги, – беседа чеховских персонажей: отставного губернского секретаря Удодова, его сына Пети и горе-репетитора Егора Зиберова, ученика VII класса гимназии:
Теперь по арифметике... Берите доску. Какая следующая задача?
Петя плюет на доску и стирает рукавом. Учитель берет задачник и диктует:
– «Купец купил 138 арш. черного и синего сукна за 540 руб. Спрашивается, сколько аршин купил он того и другого, если синее стоило 5 руб. за аршин, а черное 3 руб.?» Повторите задачу.
Петя повторяет задачу и тотчас же, ни слова не говоря, начинает делить 540 на 138.
– Для чего же вы это делите? Постойте! Впрочем, так... продолжайте. Остаток получается? Здесь не может быть остатка. Дайте-ка я разделю!
Зиберов делит, получает 3 с остатком и быстро стирает.
«Странно... – думает он, ероша волосы и краснея. – Как же она решается? Гм!.. Это задача на неопределенные уравнения, а вовсе не арифметическая...»
Учитель глядит в ответы и видит 75 и 63.
«Гм!.. странно... Сложить 5 и 3, а потом делить 540 на 8? Так, что ли? Нет, не то».
– Решайте же! – говорит он Пете.
– Ну, чего думаешь? Задача-то ведь пустяковая! – говорит Удодов Пете. – Экий ты дурак, братец! Решите уж вы ему, Егор Алексеич.
Егор Алексеич берет в руки грифель и начинает решать. Он заикается, краснеет, бледнеет.
– Это задача, собственно говоря, алгебраическая, – говорит он. – Ее с иксом и игреком решить можно. Впрочем, можно и так решить. Я, вот, разделил... понимаете? Теперь, вот, надо вычесть... понимаете? Или, вот что... Решите мне эту задачу сами к завтраму... Подумайте...
Лучше один раз увидеть [протокол решения задачи], чем сто раз услышать [о возможностях пакета] – следуя такому «расширению» пословицы, рассмотрим решение в среде Mathcad классической задачи теоретической механики из раздела «Статика» – задачи о равновесии балки.

Раз уж мы залезли в мистику (в описание магических свойств числа семь), то подошла пора рассказа о великолепной семерке
Mathcad – о семи видах графиков, используемых для визуального отображения различных зависимостей. Типов графиков в Mathcad, конечно, намного больше, но на панели инструментов имеется ровно семь кнопок для создания семи типов графиков. Мистика, да и только.
Графики очень помогают решать поставленные задачи. На рис. 1.8, например, начальные приближения к корню системы брались вблизи точек пересечения линий на графике. Глядя на выражение, можно узреть там корни, минимумы, максимумы и прочие интересные точки, только обладая сильно извращенным математикой воображением. На графике же все видно как на ладони.
К сожалению, графики, помещенные в книге, черно-белые. Их можно было бы расцветить, как это имеет место на экране дисплея, но цена книги от этого резко увеличилась бы. А ведь она адресована студентам и инженерам (см. название). Сейчас автор пишет книгу под условным названием «Mathcad для «новых» русских» с цветными иллюстрациями. Есть уже первые задачи для нее – задача о купце и сукне (см. рис. 1.14), задача о качестве менеджера (рис. 4.6 и 4.17) и задача о финансовой пирамиде (рис. 5.4) и др.
Но вернемся к графике.
Если нажать соответствующую кнопку панели инструментов (см. рис. 1.2 и 1.3), то раскроется панель графики с девятью новыми кнопками (см. рис. 1.17).
Нажимая на них, можно построить семь типов графиков. Сделаем это для иллюстрации решения задачи о балке, схема которой помещена на рис. 1.12.
На рис. 1.17-1.19 и 1.21-1.25 графически отображены реакции опор балки в зависимости от угла ее наклона при фиксированных других параметрах. Функциональные зависимости x, y и P (реакции опор – см. пункт 2 на рис. 1.17, пункт 5 на рис. 1.20, пункт 8 на рис. 1.24 и пункт 9 на рис. 1.25) взяты из главы 7, где наша система, описывающая равновесие балки, решается аналитически (см. рис. 7.9).
В математике есть основополагающее понятие – соотношение: имеется два множества; каждому элементу первого множества соотносят элемент второго множества. Частным случаем такого соотношения является функция одного аргумента – каждому значению угла (первое множество) соответствует значение, например, синуса (второе множество), косинуса и т.д. Читатель средних лет тут сразу вспомнит знаменитые таблицы Брадиса с такими «множествами» углов, синусов, логарифмов и других нужных для расчетов данных. Естественно, Mathcad не хранит множество углов и множество соответствующих им синусов, а рассчитывает эту тригонометрическую функцию по определенному алгоритму. Насколько он точен и быстр – это второй вопрос.
Можно говорить о двух множествах чисел, одном множестве функций и еще об одном множестве переменных и о множестве значений определенного интеграла: каждой четверке элементов первых четырех множеств соответствует один элемент пятого множества. Здесь речь идет об операторе определенного интеграла с четырьмя операндами, который также есть в среде Mathcad.
Лет двадцать назад наметилось некое несоответствие в трактовке терминов «функция», «оператор» математиками и программистами[24].
Математик, читая эту книгу, может сделать абсолютно законный вывод, что автор не вполне понимает, что такое оператор и что такое функция. Более того, в самом программировании нет полного единства в определении этих основополагающих понятий. То, что мы называем оператором в среде Mathcad, в среде языка BASIC называется иначе, и наоборот. Так, в среде языка BASIC есть очень удобный оператор Swap(a, b), меняющий в переменных a и b их содержимое. Этот оператор ничего не возвращает и, следовательно, с точки зрения пользователя Mathcad не может называться оператором. С другой стороны, операторы и функции Mathcad сами по себе тоже могут ничего не возвращать, а просто находиться в Mathcad-документе и ждать, когда с ними что-нибудь сделают. Например, поместят в левый операнд оператора вывода числового значения. Вот тогда-то они начнут возвращать то, что записано в приложениях 2 и 3.
A naturalist interested in a real-world phenomenon has no ability to appeal straight to the Creator (God or Nature, according to your choice) but has to ask the research object itself – that is, carry out an experiment by perturbing this object and investigating its reaction.
A program has its own creators, the authors. Their names are not always specified on boxes, disks and in the documentation, but they do exist. Hence – theoretically – it should be unnecessary to experiment with programs. All questions that may arise ought to be answerable either by the documentation or the authors themselves. But – in practice – if a user wishes, for instance, to identify the measurement unit (degrees or radians) of a sine function, they won't rummage in the documentation. They will simply define x:= sin(90) and observe the x variable value.
Such experiments are carried out hourly by users, who appeal to the documentation only in extremely complicated cases, as a rule when they're not satisfied with their own answer. And it's rather problematic to appeal to the creator. The program dealers, not the authors, run the support hotline; and readers well know that this isn't the same thing. The hotline operator will most likely offer to test the program and try to find out the answer, and ask you to ring back in a couple of days. And it would often be ineffective to ask the authors, who have forgotten their offspring and are entirely engrossed in a new project. Even if that isn't so, they can't be expected to remember all the properties and nuances of their creation.
That is why users usually forget that a program is a product of human intelligence and skills, supposing – at an emotional level – that it's a fruit of the efforts of an anonymous and unattainable Creator who doesn't have a support hotline. Here, most probably, lies a philosophical explanation (but by no means justification) of the widespread practice of illegal program copying. We're not talking about deliberate larceny, like creating Chinese-Bulgarian CD-ROMs labelled "Everything for your Office".[1] Here, we are dealing with relatively honest people, installing a program on their computer from the above-mentioned CD-ROM in order to understand its nature and to share their knowledge, for instance with students.
Из круглой жестянки по несложной технологии изготавливается пожарное ведро (см. пункт 1 на рис. 2.1): вырезается сектор, затем полученная выкройка сворачивается в конус (точка a подтягивается к точке c), а шов сваривается (паяется).
Суть задачи. Мебельная фабрика может выпускать стулья двух типов ценою в 8 и 12 условных единиц (у.е.[15]). Под этот заказ выделены материальные и людские ресурсы. Кроме того, известно, сколько досок, ткани и времени идет на изготовление каждого стула:
| Стул | Расход досок, м | Расход ткани, м2 | Расход времени, чел.-час. | ||||
| Первый | 2 | 0.5 | 2 | ||||
| Второй | 4 | 0.25 | 2.5 | ||||
| Ресурс | 490 | 65 | 320 |
Спрашивается, как нужно спланировать производство стульев, чтобы наделать их либо количеством, либо ценой поболее. Это и отображено в отчете о решении задачи на рис. 2.9.
На рис. 2.10 решается одна из разновидностей задач линейного программирования – транспортная задача: необходимо ежедневно с первого склада перевозить в два магазина 50 телевизоров[16], а со второго склада – 70. При этом первый магазин продает в день 40 телевизоров, а второй – 80 (50+70-40). В транспортной задаче неравенства в ограничениях заменены равенствами. Получается система линейных алгебраических уравнений, но не с одним, как в задаче о купце и сукне (см. рис. 1.6 и рис. 1.7) или в задаче о балке (см. рис. 1.15 и рис. 1.16), а с множеством решений, одно из которых оптимизирует целевую функцию. Известны затраты на перевозку одного телевизора со складов в магазины[17]
(четыре константы: 1200 у.е. при перевозке одного телевизора с первого склада в первый магазин, 1600 – с первого склада во второй магазин, 800 – со второго склада в первый магазин и 1000 – со второго склада во второй магазин).
Open the first page of any Western publication and you will notice the prohibition on duplication, whether chapters or pages, of the book. (I originally wrote "the formidable warning will strike your eye", but in the interest of neutrality replaced it with "you will notice"). Everyone is quite aware that only commercial duplication is meant here. Both Western and Russian libraries are quite legally equipped with photocopiers, which allow a book or a magazine to be 'xeroxed' from cover to cover, except maybe the very page with the formidable, but probably futile, warning. It is possible to duplicate the printed matter in every possible way for educational and scientific purposes (to copy an extract to an exercise book, for example).
Moreover, any hindrance for this kind of information distribution is regarded as a direct infringement of the rights of the author: not of the copyrights[3] but specifically "the rights of the author". But behind this phraseology is the fact that almost without exception, it is not the author controlling the copyright, but the publisher. The authorial rights are like human ones given 'from heaven', which can't be transferred to anyone. It is the copyright owner who is disappointed by the appearance of 'black' books on the market. The author (owner of the author's rights) may be at first flattered, but then he becomes worried about the future, but as a rule ephemeral, loss of profit[4].
The vagueness of the borders between commercial and non-commercial use can be illustrated by another fact. Suppose a graduate student has Xeroxed enough articles of other authors, and has sculpted from them a dissertation (let's be more tactful – a part of the dissertation) then received a scientific degree, and afterwards, with its help, a high-paid post in a firm or university. Even if "has sculpted from them" is replaced with "has used them as research material", the essence of the matter doesn't change: the knowledge is the most precious article in the civilised market.
Computer users are among the most avid reading public nowadays: not only adverts for romantic novels are flashing by in the Metro, but also those for various User Guides or "Excel for Dummies". This applies not only to printed matter but also to software, which is a programming product (production, products and similar are all marketing expressions). Studying a program is just as interesting and useful, culturally and educationally, as studying a book. A misfortune for programs, but perhaps a hidden blessing, is their easy copying. They can be duplicated much more easily than books. Furthermore, even the most ingenious programs are obsolete before the copyright expires, in contrast to the works of classical literature. Nowadays anyone nowadays can publish the undying compositions of Pushkin and Shakespeare.
Есть особый род шутников (к ним относит себя и автор), получающих удовольствие от попыток розыгрыша компьютера. «Много ты, машина, о себе воображаешь. Посмотрим-ка, проглотишь ли ты вот это?!», – так или примерно так думают они, вводя в ЭВМ заведомо «неправильную» информацию. Анализ реакции компьютера (программной среды) на подобные шутки пользователя может дать не меньше, чем классический разбор программы.
В этюде будет рассмотрено решение в среде Mathcad задач из области вычислительной математики. Примеры взяты не из пакета Mathcad (хотя там есть схожие задачи), а из других источников, и подобраны так, чтобы можно было показать не только легкость и изящество их решения, но и возникающие при этом осложнения и пути их преодоления. К примерам, которые прилагают к пакетам фирмы-разработчики, следует относиться с большой опаской. Тут можно вспомнить эпохальную вычислительную машину «Наири», в матобеспечении которой была программа «Поиск минимума функций». Так вот, после опробования слово функций (множественное число) в ее названии приходилось менять на слово функции (единственное число), так как минимум искался только у приложенной к программе функции и больше ни у какой другой.
Есть особый род извращенцев… Автору не хватило духа вынести этот термин в заголовок этюда, и он заменил его нейтральным, производным от латинского derivatio (отклонение). Читатель, может быть, до этого места книги не доберется, а об авторе подумает черт знает что. Так вот, есть особый род дериваторов, получающих удовольствие от попыток решения задач программными средствами, для этих целей прямо не предназначенными.
– А вы ноктюрн сыграть смогли бы на флейте водосточных труб?!
– А вы тра-та-та та-та-ра-та бы в среде программы тра-та-та?!
После выстрела и команды «Искать!» собака может вернуться к охотнику с тремя результатами:
1. Собака приносит подстреленную дичь.
2. Собака, израсходовав отпущенный лимит времени или услышав призывный сигнал охотника, возвращается с пустыми руками, пардон, зубами.
3. Охотник получает «трофей» – стреляный пыж или рваный башмак, но собачьи глаза и собачий хвост выдают собачью хитрость.
Есть особый род эстетов, получающих удовольствие от попыток облагораживания технического текста цитатами из художественной литературы. Но не этот смысл слова «эстет» подчеркнут в названии этюда. Автору уже не раз доводилось признаваться своим читателям, что для него в программной среде важны не только чисто технические параметры (быстродействие, богатство встроенных функций и т.д.), но и «красота» программы. Под красотой же следует понимать не только цветовую палитру или изящество окон и иконок, но и то наслаждение, которое программа может доставлять при решении даже простейших задач. И не только своими новыми, ранее неведомыми возможностями, но и своими... ошибками. Автор попытался было описать всю эту гамму чувств, но его опередил Карел Чапек своим рассказом «Игла», где необыкновенно точно передан дух расчетов – и не важно, проводятся ли они на бумаге или на компьютере. Помимо этого, чапековский отрывок поможет понять, при чем тут охотник:
Когда я работал в бухгалтерии и составлял, бывало, полугодовой отчет, подчас случалось, что цифры не сходятся. Однажды в наличности не хватило трех геллеров. Конечно, я мог просто положить в кассу эти три геллера, но это была бы неправильная игра. С бухгалтерской точки зрения это было бы неспортивно. Надо найти, в каком счете допущена ошибка, а счетов у нас было четырнадцать тысяч. И скажу вам, когда я брался за баланс, мне всегда хотелось, чтобы там обнаружилась какая-нибудь ошибка. Тогда я, бывало, оставался на службе хоть на всю ночь. Положу перед собой кучу бухгалтерских книг и берусь за дело. И для меня колонки цифр становились не цифрами, они преображались просто необыкновенно. То мне казалось, что я карабкаюсь по этим колонкам вверх, словно на крутую скалу, то я спускаюсь по ним, как по лестнице[35], в глубокую шахту. Иногда я чувствовал себя охотником, который продирается сквозь чащу цифр, чтобы изловить пугливого и редкого зверя – эти самые три геллера. И до того мне в такие минуты становилось хорошо от этого ощущения движения и силы, такое я чувствовал вокруг себя волнующее приволье, словно и в самом деле переживал необыкновенное приключение. Целыми ночами я мог охотиться за тремя геллерами, и когда находил их, то даже не думал, что это лишь жалкие гроши. Это была добыча, и я шел спать, торжествующий и счастливый...
There are always articles in the Russian press about the routine dispersal of pirate CD-ROMs of popular computer programs, by traders in Moscow outside the OMON (civilian police headquarters); somewhere at the All-Russian Exhibition Centre (formerly the NKVD building); in the Mitino district; and near the Gorbunov Palace of Culture (a favourite location called "Gorbushka").
One's first reaction is: "At last!" But later, other ideas surface. When people with machine guns at the ready are examining a hawker's documents in a pedestrian subway, nine out of ten passers-by assume not that they're enforcing law and order, but collecting a cut to turn a blind eye. The tenth passer-by believes that the small fry will be hauled in again, while the real organisers of illegal trade will get off with a mild scare. God forbid the idea that any problem can be solved purely by police action in our country! It has not proved a workable approach so far, and even when it appeared so, historically it led us down the path of the Gulag labour camps. Furthermore, the possibility is always looming.
Чтобы приготовить рагу из зайца, нужно иметь как минимум зайца. Чтобы обработать (сгладить, аппроксимировать, интерполировать, экстраполировать и т.д.) экспериментальные данные, нужно иметь как минимум эти данные.
Чаще всего экспериментальные данные представляют собой набор пар чисел (Xi, Yi), где Yi – экспериментальные значения некоторой искомой функции, а Xi – значения аргумента.
Пары экспериментальных данных перед дальнейшей обработкой желательно отсортировать по возрастанию значений X. Это можно сделать вручную, переставив местами две первых пары, как в нашем случае (пункт 1 рис. 4.1), или (при объемных массивах данных) автоматически через функцию csort (пункт 2 рис. 4.2), возвращающую упорядоченную матрицу по отмеченному номеру столбца (у нас это нуль[4]
– второй аргумент функции csort). Для этого оба вектора-столбца X и Y сливаются в матрицу M с двумя столбцами, которая после сортировки расчленяется на те же, но уже упорядоченные векторы-столбцы. Это приходится делать из-за того, что некоторые функции Mathcad (например, linfit, о которой речь пойдет ниже) отказываются иметь дело с неотсортированным вектором. Да и вообще, как говорят немцы, Die Ordnung muß sein! – Должен быть порядок!
Встроенные функции intercept (to intercept по-английски – отложить отрезок на линии) и slope (наклон) решают самую простую и самую распространенную задачу линейного сглаживания[5]
экспериментальных данных методом
наименьших квадратов (см. пункт 3.1).
Исследователю, обрабатывающему на компьютере свои экспериментальные точки, нет дела до всех этих методологических тонкостей. Не напороться бы на фактическую ошибку, и на том спасибо. Уже упоминавшийся KISS – принцип программирования призывает пользователя прибегать к закрытым алгоритмам только в крайних случаях. При поиске сглаживающего полинома Р-й степени при Р, равном единице (линейная задача), можно обойтись без функций intercept и slope, вспомнив, что эта оптимизационная задача сводится к решению системы двух линейных алгебраических уравнений. Полином более высокой степени потребует решения более объемной, но все той же линейной системы.
Потребность в замене сомножителей Xk полинома более сложными формулами вызвала к жизни функцию linfit (LINear FITting – линейное сглаживание).
При обработке данных эксперимента, разбросанных «как попало», часто хочется плюнуть на критерии оптимизации и просто провести линию (кривую или, на худой конец, ломаную, состоящую из прямых отрезков) непосредственно через точки. Благо в среде Mathcad есть для этого инструментарий: средства линейной интерполяции (функция linterp – рис. 4.7) и интерполяции сплайном (interp – рис. 4.8) – линейным (lspline), параболическим (pspline) и кубическим (cspline).
На рис. 4.10 показано, как функция lspline может сгладить уже не линией, а поверхностью
экспериментальные точки двухфакторного эксперимента с помощью двухмерной сплайн-интерполяции. У нас есть уже не вектор, а матрица M экспериментальных точек, зависящих от двух переменных эксперимента: давления пара и его температуры.
Качество есть качество. Качество нельзя измерить[15], но можно оценить. Существуют две формы оценки качества: лингвистическая и количественная. В первом случае качество определяют словами: например, «качество высокое», «среднее», «низкое» и т.д. Во втором случае качество оценивают по некоторой условной шкале числом K (0 ? K ? M, где M - высший балл в числовой оценке качества). Например, «пять», как в российской, или 100 как в английской школах.
Для оценки качества привлекаются эксперты. Экспертной оценке качества могут быть подвергнуты товары и услуги, проекты и законы, знания и квалификация, выступления фигуристов, гимнастов или вокалистов и многое другое.
В повседневной жизни при принятии решения можно исходить из лингвистической оценки качества: мы покупаем хороший чай или инструмент высокого качества
(если позволяют средства). Однако есть такие задачи, в решении которых лучше руководствоваться количественной оценкой качества. Кроме того, обычно лингвистические оценки строятся на основе экспертных количественных оценок. Так, качество выпускника английского университета и достоинство диплома, который он получает, определяется по следующей шкале:
| Средний балл в интервале оценок
по 100-бальной шкале | Достоинство диплома
(лингвистическая оценка) | ||
| 90 - 100 | С отличием | ||
| 85 - 90 | Первой ступени А | ||
| 80 - 85 | Первой ступени Б | ||
| 70 - 80 | Второй ступени | ||
| менее 70 | Обычный |
Независимо от объекта, качество которого подлежит экспертной оценке, методика ее получения в основе своей одинакова.
Рассмотрим задачу оценки деловых качеств руководителя (менеджера). Для оценки потребуются модель качества менеджера, эксперты и математическая обработка результатов работы экспертов.
Модель качества специалиста может быть представлена в виде некоторого набора важнейших качественных параметров (качеств), характеризующих его профессиональный уровень, личностные, деловые качества и предопределяющих успешную работу в рассматриваемой сфере деятельности.
|
Принадлежность качества кандидату |
Оценка в баллах |
|
отсутствует |
1 |
|
проявляется в слабой степени |
2 |
|
проявляется |
3 |
|
проявляется явно |
4 |
|
присуще в полной мере |
5 |
Police raids on the black-market software dealers – and this was mentioned in the mass media – were initiated by Russian computer companies, who had noticed illegal copies of their software on hawkers' stands. It's worth noting that the office workers of these companies have cut their teeth professionally on pirate copies of others' programs. They have, of course, been installing these illegal programs with the aim of general education and science, but consider the following. It's alleged that the Moscow department of a certain renowned computer company was behind the police raids. A department of that very company followed up with a lengthy series of copyright infringement trials. This renowned company would be advised to understand the Windows interface copyright before going off to inform on someone else. Have you ever seen the principal of this firm? Does he look like a man who has been robbed?
The Biblical story tells that Jesus Christ rescued an unfaithful wife from mob law, having appealed for someone without sin to cast the first stone at the miserable woman. I have a similar feeling, that our press (the voice of the crowd) attempts to invoke mob law against our miserable domestic program users[5]. In doing so, a hawker from Gorbushka and a high school teacher are quite often lumped into the same category.[6] Yes, they both indeed have illegal copies in their hands, but they should be named and, especially, judged in a different manner, considering all the above angles. The Gorbushka traders are not concerned with copyright law at all. They should be prosecuted under quite different measures and articles of law – such as infringement of trade regulations, or even larceny and robbery. The Russian software manufacturers – and not only Russian – have got into a vicious circle. On the one hand, it's valid to protect your own rights by all possible means, but on the other, you can scarcely claim the moral high ground if you have repeatedly infringed someone else's rights and will continue to do so (if your son, for instance, 'skims' virtual games from black-market disks at home).
Одно из основных потребительских качеств компьютера – это отношение цены к производительности. С подобным критерием можно подойти и к примерам, входящим в пакеты программ. Только вместо производительности нужно рассматривать занимательность задачи, а вместо цены – размер соответствующего файла. В этом смысле рекордсмен пакета Mathcad– задача «Эпидемия». Ее уникальность еще и в том, что она – единственная, автор которой (John Truxal) отмечен в разделе Acknowledgments документации пакета Mathcad.
Суть задачи. В городе, население которого составляет 20 000 человек (см. пункт 1 на рис. 5.1), появляются 50 инфекционных больных, что вызывает эпидемию. Предположим, что прирост больных за день пропорционален произведению числа здоровых (еще не переболевших и не приобретших иммунитет) на число больных. Коэффициент пропорциональности Пр интегрирует разного рода меры профилактики. Если, к примеру, жители города будут носить марлевые повязки или сделают прививки, то этот коэффициент уменьшится. Спрашивается, как развивается эпидемия: как изо дня в день меняется число больных.
Описанная задача об эпидемии сводится к решению задачи Коши для системы двух обыкновенных дифференциальных уравнений (ОДУ) первого порядка относительно двух неизвестных функций Больные(t) и Здоровые(t).
Больные’(t) = Больные(t) × (Пр × Здоровые(t)-1)
Здоровые(t) = -Пр × Больные(t) × Здоровые(t)
В пункте 2 на рис. 5.1, по сути, реализован метод Эйлера[3] с единичным шагом интегрирования Dt.
Больные(t+1)
= Больныеt + Dt × Больные¢t
Здоровые(t+1)
= Здоровыеt + Dt × Здоровые¢t
Заглядывая вперед, в этюд 6 (вернее, готовя читателя к нему), покажем, как вектор-выражение пункта 2 на рис. 5.1 реализуется средствами программирования (цикл с параметром):
for t Î 1..13
| Больныеt+1 ¬ Пр×Здоровыеt ×Больныеt | |
| 3доровыеt+1 ¬ 3доровыеt - Пр×Здоровыеt ×Больныеt |
В среде Mathcad до версий PLUS 5.0 дифференциальные уравнения без особых ухищрений можно было решать только методом Эйлера, который имеет низкую точность и производительность (плата за простоту). Инструментарий для решения дифференциальных уравнений (систем) различного порядка и различными методами появился в арсенале Mathcad PLUS 6.0. В него входят 13 встроенных функций (Bustoer, bustoer, bvalfit, multigird, relax, Rkadapt, rkadapt, rkfixed, sbval, Stiffb, stiffb, Stiffr и stiffr), работа одной из которых (rkfixed – метод Рунге ¾ Кутты (rk) четвертого порядка с фиксированным (fixed) шагом интегрирования) показана на рис. 5.2. У этой функции пять аргументов: вектор начальных значений искомых решений, абсцисса начальной точки интегрирования, абсцисса конечной точки интегрирования, число шагов интегрирования и функция-вектор правых частей системы. Функция rkfixed возвращает в матрицу (у нас она имеет имя Z) с P+1 столбцами и n строками (P – количество уравнений или порядок уравнения) таблицу решений системы: первый (вернее, нулевой) столбец – это значения аргумента t (их задает пользователь через величины tнач, tкон[4] и n), а последующие столбцы – значения ординат решения.
А теперь наши читатели получат домашнее задание.
Даны математическая модель развития финансовой пирамиды и ее реализация по разностной схеме. Необходимо составить и решить систему дифференциальных уравнений, описывающих развитие эпидемии, пардон, финансовой пирамиды.
К задачам, решаемым на персональном компьютере, не в последнюю очередь относятся и финансовые, связанные с ведением бюджета семьи, фирмы, завода и т.д. Итак, финансы. Компьютер может помочь учитывать, сохранять и приумножать их минимум тремя способами:
1. На компьютере заводится электронная версия бухгалтерской книги, куда записываются все доходы и расходы. Для этих целей годятся такие программы, как Excel, Lotus 1-2-3, QuattroPro (электронные таблицы), 1C:Бухгалтерия (специализированные пакеты[9]) и т.д. Пакет Mathcad, кстати, ведет свою родословную от электронных таблиц, которые также можно считать «волшебной» счетной доской. Первое его отличие состоит в том, что в среде электронных таблиц знак «равно» ставится перед выражением, а в среде Mathcad – после. Второе отличие в том, что Mathcad поддерживает графический режим интерфейса: = 5×25 + 3Ù12 (Excel); 5×25 + 312 = (Mathcad). Третье отличие, максимально приближающее стиль Mathcad к стилю написания формул на обычном листе бумаги, заключается в том, что формулы и константы электронных таблиц жестко привязаны к сетке столбцов и строк. Об этом мы подробно поговорим в приложении 7, когда будем описывать методику совместной работы Mathcad и Excel.
2. Компьютер подсоединяется к банковской электронной сети так, что домашняя хозяйка или бухгалтер фирмы могут сами проводить необходимые платежи, не выходя из дома. Здесь на первый план выступает проблема безопасности: платежное поручение должно быть зашифровано и сопровождаться электронной подписью. Об этом мы еще поговорим в этюде 7.
3. На компьютере можно смоделировать и просчитать ту или иную финансовую операцию (покупка облигаций или акций, открытие счета или взятие кредита в банке и т. д.) и посмотреть, во что это выльется.
При работе в среде Mathcad всегда ощущалась потребность в программировании для расширения и совершенствования базового набора математических инструментов – операторов и функций. Искушенные пользователи решали эту проблему тремя путями.
Путь 1. В самых первых версиях Mathcad были[2] две функции (if и until), позволявшие через различные хитрости и трюки реализовывать две основные алгоритмические конструкции – выбор (if) и повторение (until). Хитрить же приходилось из-за неспособности функций if и until иметь в качестве аргументов блок составных операторов. Поэтому для реализации даже несложного алгоритма нужно было подключать механизм вложенных функций и
операторов, что нередко превращало программу
в настоящую криптограмму, в которой даже сам автор разбирался с трудом.
Вот как выглядит поиск корня уравнения методом половинного деления (рис. 6.1) с использованием функции if и until (автор А.Шевченко). Читатель, забегая вперед, может сравнить «программу» на рис. 6.1 с программой (без кавычек) на рис. 6.20, реализующей практически тот же алгоритм.
С первого взгляда на Mathcad возникает вопрос: почему в него не был встроен какой-либо известный и широко используемый язык программирования, а разработан новый, ни на что не похожий[4]? Электронные таблицы Excel, текстовый редактор Word и базы данных Access (Microsoft Office) используют встроенный BASIC[5], что кажется естественным даже для самых непримиримых противников этого языка. Но после детального знакомства с языком Mathcad удивление сменяется пониманием и даже удовлетворением. Становится очевидным, что в рамки традиционных языков с их программами в текстовом формате невозможно втиснуть богатый набор инструментария Mathcad, который реализован не только и не столько в виде функций, сколько в общепринятом в математике виде[6].
В Mathcad, по сути, не встроен язык программирования, а просто снято вышеупомянутое ограничение на использование составных операторов в теле алгоритмических управляющих конструкций выбора (if) и повторения (until).
Кроме того, введено понятие локальной
переменной, добавлен цикл с параметром for, операторы досрочного выхода из цикла break и continue, а также оператор досрочного выхода из программы return. Алгоритмические конструкции в среде Mathcad вводятся не традиционным набором через клавиатуру ключевых слов if, then, else, while и т.д., а нажатием одной из кнопок панели программирования (Programming):
Кнопки программирования (см. рис. 6.2) по своей сути дополняют традиционные встроенные операторы (+, -, *, ¸ ...) и функции (sin, cos, log ...), с помощью которых пользователь формирует выражения, значение которых присваивается константам, переменным и функциям пользователя.
Эта тройка переменных может задаваться, естественно, и программно.
Рекурсивная функция – это такая функция, которая вызывает сама себя в момент ее создания[22]. Рекурсия – очень мощный и удобный инструмент решения задач. Так, например, один из самых быстрых алгоритмов сортировки массива использует рекурсию. Вычислить детерминант квадратной матрицы также помогает рекурсия и т.д.
Языки программирования в своем развитии обычно проходят три стадии:
1. Рекурсия невозможна.
2. Рекурсия не разрешена, но применяется по принципу: «Если нельзя, но очень хочется, то можно». Так, на старых версиях языка BASIC рекурсия реализовывалась через оператор ON N GOTO, передающий управление программой на N-ю строку.
3. Рекурсия разрешена.
Mathcad вторую стадию проскочил (условно проскочил – это мы еще отметим, разбирая рис. 6.13).
И вот уже трещат морозы
И серебрятся средь полей...
(Читатель ждет уж рифмы розы;
На вот, возьми ее скорей!)
Читатель ждет уж примеров рекурсии в среде Mathcad? Скорее всего, нет. Традиционные примеры (розы-морозы) ему оскомину набили. Но мы попробуем что-нибудь свеженькое. Например, двустороннюю (ретроспективную) рекурсию.
Как запомнить число e (основание натурального логарифма) с девятью цифрами после запятой? Очень просто – две целых семь десятых плюс два раза Лев Толстой – 2.718281828, то есть к числу 2.7 нужно приписать два раза год рождения классика (1828). Остается самая малость – запомнить, в каком году родился Лев Толстой, или, на худой конец, сообразить, что это случилось в прошлом веке[23], чтобы вспомнить хотя бы три знака числа e после запятой: 2.718. Ретроспектива, обращенная в XIX век, поможет запомнить довольно-таки точное значение одной из фундаментальных констант математики.
Как запомнить, что факториал нуля равен не нулю (типичная ошибка), а единице? Очень просто. Нужно применить ретроспективный метод поиска факториала числа: сообщить машине факториал какого-либо положительного числа N (5! = 120, например) и то, что факториал предыдущего числа N-1 равен факториалу первого (N!), разделенному на N. Факториал пяти (120) – это такая же тривиальная истина, как и то, что Лев Толстой родился в XIX веке, а грубая оценка числа е – 2.7.
По знаменитой формуле Н.Вирта программа – это сумма алгоритма и структуры данных. Алгоритм программы в среде Mathcad задается нажатием десяти кнопок на панели программирования (рис. 6.2), отвечающих за циклы, альтернативы и прочее. Структура данных в среде Mathcad также проста. Там есть только вещественные переменные двойной точности, которые могут превращаться в комплексные или целочисленные, группироваться в векторы и матрицы (простые и вложенные), принимать, если надо, текстовые значения.
В седьмой части этюда автор расскажет в стиле римейк об особенностях языка Mathcad.
Почему римейк? Во-первых, см. предисловие. Во-вторых, у автора сохранился файл с текстом статьи «Turbo Pascal 7.0. Взгляд со стороны» (КомпьютерПресс, № 7’93), которая и подвергается римейку (remake – переработка). В-третьих, язык Mathcad, как и язык Pascal, оказался окутан паутиной старых догм[33]
структурного программирования, о которых писалось в упомянутой статье. Это делает римейк не только простым, но уместным и естественным.
Итак, remake.
Попробуем на простых примерах показать, что ввод в язык Mathcad операторов break, continue и return (см. выше) – только полшага в сторону повышения гибкости управляющих конструкций этого языка программирования.
Проблему метки, вернее, проблему избавления от метки, мы рассмотрим на примере решения старинной английской задачи о рыбаках и рыбке:
«Три рыбака легли спать, не пересчитав и не поделив улова. Ночью один из рыбаков проснулся и решил уйти, забрав свою долю. Но число рыб не делилось на три. Тогда он, не долго думая, выбросил одну рыбку, а из остатка забрал треть. Второй и третий рыбак поступили аналогичным образом – ушли по-английски и по-джентельменски, выбросив по одной рыбке и оставив спящим товарищам четное число рыб. Спрашивается, какое минимальное число рыб в улове отвечает условию задачи».
Пусть читатель сначала попробует решить эту задачу без компьютера. Компьютер же мы привлечем к этой работе для двух целей. Во-первых, на задаче о рыбаках и рыбке мы рассмотрим некоторые методы структурирования
программ в среде Mathcad – методы освобождения программ от меток и «втискивания» их в узкие рамки структурных управляющих конструкций, описанных выше (см. рис. 6.2). Во-вторых, мы покажем, что задача о рыбаках и рыбке до сих пор решалась неправильно...
Эту задачу в среде Mathcad можно решить, не прибегая к средствам программирования.
Программа на рис. 6.26 ищет минимум функции одной переменной методом золотого сечения[41]. В ней используется вспомогательная функция с именем Зол_Сеч, позволяющая отрезок a-b (отрезок неопределенности) поделить в золотом соотношении. Вывод этой функции через решение уравнения золотой пропорции средствами символьной математики (см. этюд 7) представлен в пункте 1 рис. 6.26.
На рис. 6.27 представлена созданная с помощью программирования функция minimum, возвращающая координаты точки минимума функции многих переменных (ее имя – аргумент y) и начинающая поиск от начальной точки приближения (вектор x). Алгоритм поиска минимума прост. От точки начального приближения по всем координатам делается шаг D (третий аргумент функции minimum). В новых местах[44]
вычисляются значения минимизируемой функции. Туда, где функция имеет минимальное значение, делается переход, данная точка становится новой точкой приближения к минимуму, а все вышеописанные действия («ощупывание» функции вблизи точки приближения) повторяются. Если окажется, что вблизи новой точки приближения все новые значения функции увеличиваются, то шаг поиска (D) уменьшается вдвое, а все действия повторяются. Поиск заканчивается, когда значение D становится меньше TOL (системная переменная Mathcad, регулирующая точность вычислений).
Применение средств программирования позволяет по-новому решить нашу задачу о краске (см. рис. 3.11 в этюде 3). При единственности решений, оптимизирующих либо объем, либо стоимость краски, разливаемой в барабаны двух типов, можно найти не одно, а ряд решений, где объем меньше максимального не более, чем на 2%, а при поиске максимума цены – на 0.5%.
Для производства четырех видов компьютеров (С1, С2, С3 и С4) имеются[48]
комплектующие пяти видов. Необходимо спланировать выпуск компьютеров (найти значение переменных С1, С2, С3 и С4) так, чтобы:
их число было максимально;
их стоимость была максимальна.
Исходные данные по задаче сведены в таблицу:
| №
компьютера | Стоимость (у. е.) | Число единиц комплектующих, идущих на один компьютер | |||||||||||
| 1 | 2 | 3 | 4 | 5 | |||||||||
| 1 | 600 | 1 | 0 | 4 | 0 | 3 | |||||||
| 2 | 2500 | 1 | 0 | 8 | 0 | 8 | |||||||
| 3 | 25 000 | 0 | 1 | 0 | 4 | 15 | |||||||
| 4 | 60 000 | 0 | 1 | 0 | 8 | 64 | |||||||
| Есть комплектующих: | 100 | 20 | 500 | 100 | 1200 |
Подобная задача реально стоит перед людьми, собирающими компьютеры «на коленках» отверточным способом: челноки привезли детали: 1 и 2 – это, к примеру, центральные процессоры двух типов, 3 и 4 – микросхемы памяти, а 5 – платы связи с периферией; компьютеру нужно, конечно, и многое другое, но это другое (корпуса, винчестеры) имеется в избытке. Из комплектующих нужно собрать компьютеры, максимизируя вышеотмеченные целевые функции.
А теперь автор представляет на суд читателя свою любимую задачу – задачу о трехсторонней дуэли. Вот ее условия.
Сэм, Билл и Джон договорились сразиться на дуэли втроем по следующим правилам:
жеребьевка определяет, кто стреляет первым, вторым и третьим;
дуэлянты располагаются на одинаковых расстояниях друг от друга (по углам равностороннего треугольника);
обмениваются выстрелами по очереди, определенной жребием, пока двое не будут убиты;
очередной стреляющий может стрелять в любого из живых.
Известно, что Сэм – снайпер и никогда не промахивается с данной дистанции, Билл поражает мишень в 80% случаев, а Джон – в 50%. Какова наилучшая стратегия для каждого из участников и каковы вероятности их выживания, если они следуют оптимальным стратегиям?
В этой дуэли у Сэма и Билла могут быть две тактики поведения. Нулевая – это когда стреляющий ничего не знает о меткости соперников и целит в первого подвернувшегося. Первая – когда дуэлянту известно о том, кто как стреляет, и он метит в соперника с наивысшими стрелковыми качествами в надежде остаться tête-à-tête с наихудшим стрелком.
Джон может следовать и второй тактике. Чтобы получить наивысшие шансы выйти победителем из дуэли, он должен намеренно стрелять в воздух, пока двое его соперников живы. Ведь очередной стреляющий будет бить не в него, а в более меткого противника. После того как Сэм или Билл будет убит, Джон должен показать все, на что он способен. В такой ситуации его шансы выжить составляют 50%, если он остался наедине с Сэмом, и еще больше ¾ если с Биллом.
Участник дуэли, прежде чем выстрелить, должен, во-первых, определить самого меткого соперника, в которого нужно стрелять, руководствуясь первой тактикой поведения. Для этого предназначена функция Самый_меткий (см. пункт 2 на рис. 6.36), возвращающая номер противника с наивысшими стрелковыми качествами. В ней перебором всех участников дуэли (цикл for) учитываются, естественно, только живые противники (СтатусПротивник
= “жив”) и не сам стреляющий (Противник ¹ Стрелок).
(Translation into English by R.Girvin)
(Russian Text)
This optimization task was easily manageable either numerically (see Etude 2) or analytically (see Etude 7). In those, we learned how to maximise the volume of a bucket given a chosen manufacturing technology: cutting a sector from a metal disk and folding the remainder into a cone. But that way the bucket lost not only optimality, but also the status of bucket: it turned into a fire bowl! It was also impossible to put on a floor, and would be useless for any purpose except as a Vietnamese hat. In our rush for Number (the volume of the bucket) we have lost Essence (the function of a bucket, its capacity for conveniently carrying liquid).
The author recalls a cartoon film based on a Norwegian fable about a goat that learned to count, and decided to count all the farm animals: "I am one; the hen is two; the pig is three, etc." But as all the animals were moving around, the process soon turned into uproar. "Oh, have you counted me?!" "Keep still, or else..!" But everything ended happily, both for the goat and the fable.
In this story, as with any other fairy tale, there's a deep wisdom. It's necessary for us to count things, but as we interact with them we can run into a conflict. Not only does Nature dislike sharp corners, but also enumeration, which in a number of cases simply kills her. This can be observed not only in biology and physics, where the tools of knowledge frequently unrecognizably spoil the object of research, but also in computer science. This applies not only when applying computers to natural sciences applications, but also when applying computers to computers.
To establish a diagnosis, a doctor has no need to know the exact numerical value for a patient's body temperature (36.6C, 38.9C, etc). It's enough to express the thermometer indications by ranges, on which 'medics' have agreed beforehand: "low", "normal", "raised", "mild fever", "high fever". The borders of these estimates, though precisely fixed, are nevertheless imprecise – 'fuzzy'. This comes not merely from modern representations in terms of fuzzy set theory (FST) but also in terms of practical reality: thermometer error, measurement technique, and so on. A graduate of a medical school can tell you, without even pausing to think, where the division between high and very high temperature lies. The skilled doctor can decide this without consciously thinking of the number, while diagnosing better than the beginner.





Эта оптимизационная задача хорошо решается и численно (см. этюд 2), и аналитически (см. этюд 7). В ней под оптимизацией мы понимали максимизацию
объема ведра при выбранной технологии его изготовления (вырезание сектора из круглой заготовки). Но при этом ведро теряло не только свою оптимальность, но и свое звание ведра: оно превращалось в пожарный тазик (его тоже нельзя поставить на пол и использовать не по назначению) или во вьетнамскую шляпу. Мы гнались за Числом (объем ведра) и потеряли Суть (функцию ведра – емкость для удобной переноски жидкости).
Тут автору вспоминается мультфильм о козленке, который научился считать и всех встречных-поперечных пересчитывал: «Я – это раз, петух – это два, свинья – это три и т.д.» У козленка из-за этого со всей пересчитанной живностью возникали крупные неприятности: «Ах! Ты меня сосчитал?! Ну, держись!» Но все кончилось хорошо. На то она и сказка.
В этой истории, как и в любой другой запоминающейся сказке, есть глубокий смысл. Стоит нам что-то пересчитать, как мы вступаем с этой пересчитанной субстанцией в глубокий конфликт. Природа не любит не только острых углов, но и счёта, который в ряде случаев просто убивает ее. Это можно наблюдать не только в биологии и физике, где инструменты познания часто неузнаваемо портят сам объект исследования, но и в computer science. И не только в области приложения компьютеров (счёта, грубо говоря) к решению естественнонаучных задач[54], но и в области применения компьютеров к самим компьютерам.
Врачу для установления диагноза незачем знать числовое значение температуры тела больного – 36.6, 38.9 и т.д. Достаточно выразить показания термометра диапазонами (категориями), о которых медики договорились заранее – «температура пониженная», «нормальная», «повышенная», «высокая», «очень высокая» («жар»)[55]. Границы этих оценок хоть и четко зафиксированы, но тем не менее размыты – «пушисты». Это определяется не только современными представлениями ТНМ, но и погрешностью самого термометра, методикой измерения температуры и др. Выпускник медицинского вуза не задумываясь скажет вам, где лежит граница между высокой и очень высокой температурой. Опытный же врач может этого и не знать, хотя диагнозы он выставляет не хуже начинающего доктора. Даже параметры больного, выраженные не в вещественном, а в булевом виде (реакция Вассермана, наличие палочки Коха, анализ на СПИД и т.д.), имеют «пушистые» границы. Об этом хорошо знают лаборанты, проводящие анализы. Если заглянуть в любой справочник терапевта, где описаны симптомы болезней, то, как правило, конкретных чисел (температура тела, артериальное давление, содержание гемоглобина в крови и т.д.) там не увидишь. Одни слова – повышено, понижено и т.д. Программы выставления диагноза по введенным в компьютер параметрам больного не получили широкого практического применения. Одна из трудностей в этом деле – перевод параметра (числа) в симптом (категорию).
Ниже приводится ряд программ, написанных на языке Mathcad и решающих самые разнообразные задачи (tutti-frutti по-итальянски – всякая всячина): оптимизация, головоломка, статистика, теория вероятностей...
We can imagine A and B sitting down to pass the time of day – in our case, not on a simple pipe, but on a fire bucket. We'll now explain the 'universal' meaning of these parametrical factors A and B (more correctly A_r, B_r, A_h, B_h, A_v and B_v) included in the approximation expressions of stages 2, 5 and 8 (fig. 6.41-43).
Viewing the fuzzy set as a statistical distribution, A represents the 'spread' of the distribution, and B the parameter value giving the peak of the distribution. Imagine we carry out a global statistical experiment. We measure for all adult humans some parameter – weight, height, intelligence, etc – whether represented numerically or estimated by some criterion (genius, talented, very clever, simply clever... down to idiot). The data points we shall transform into a curve (see sections 1-3 in figures 6.41, 6.42
and 6.43) where the X-axis is the measured human parameter, and the Y-axis the percentage of people with a given value of that parameter. We carry out this statistical exercise separately for men (M) and women (F). What do we get?
Case 1: AM = AF, but BM > BF:

Curves turn out like this for parameters – such as height, weight, strength of muscles, etc – pertaining particularly to men rather than women. This is related to evolution: sexual dimorphism is related to the general trend in species size. If the male body is larger than the female, the next generation tends to be larger. With spiders, for example, the male is much smaller than the female, and so – thank God – spiders are smaller now than the geological past.
Case 2: AM < AF, but BM = BF:

The curve looks like this for a parameter – intelligence – whose importance applies equally to both sexes, and has not varied for millennia. Many consider it quite proven, that if modern humans were suddenly stripped of education and culture, we would be no more intelligent (maybe even less so) than the Ancient Greeks. It's not known why, but there is a greater spread for men: there are more men of genius (Nobel prizewinners, inventors, writers and artists – at the right edge of the diagram) only because there are also more men of extremely subnormal intelligence (the left edge). The average woman is cleverer the average man: the centre of the "female" distribution is raised at the expense of a smaller spread. The areas of both curves is, however, identical: no offence intended to anyone, but we believe that the Lord God or Nature (whichever you believe in) has shown consideration in distributing intelligence equally to both halves of humanity.
We can try to apply the theory of fuzzy sets, as described in Etude 3, to the problem of computer piracy. The law divides all people into two precise sets: {legal users of programs} and {illegal users – pirates}. In real life, it's much more complex: computer users fall into two fuzzy sets, with a great variety of motives. At one extreme are people trading 'black' disks at Gorbushka (the left-hand axis of the diagram above); at the other are those who work only with legal copies and have never broken any license agreement (the right-hand axis). Again, it's possible to construct a humpbacked statistical curve, this time above an axis "sinner ... saint" describing the condition of the computer market in a particular country. Where does the maximum of this curve lie, and how is it shifting with time?
Сидели они не на простой трубе, а на пожарной, точнее – на пожарном ведре: сейчас будет рассказано об «общечеловеческом» смысле параметрических коэффициентов A и B (вернее Ar, Br, Ah, Bh, Av и Bv), входящих в аппроксимирующие выражения пунктов 2, 5 и 8 (рис. 6.41-43).
Давайте проведем глобальный статистический эксперимент – у всех взрослых людей на земле измерим какой-либо параметр: вес, рост, ум и т.д. ¾ словом все то, что можно измерить числом или оценить критерием (гений, талант, очень умный, просто умный... совсем дурак).
Полученные точки превратим в кривые (см. пункты 1-3 на рис. 6.41-43), где по оси X отложим параметр человека, а по оси Y – процент людей с данным параметром. При этом статобработку проведем отдельно для мужчин (м) и женщин (ж). Что мы получим?
Случай 1: Ам
= Аж, но Вм > Вж:

Такие кривые получаются для тех параметров, значение которых у мужчин больше, чем у женщин (рост, вес, сила мышц и т.д.). Это связано с эволюцией – если мужская особь крупнее женской, то новые поколения укрупняются. У пауков, например, самцы намного меньше самок – пауки сейчас, слава Богу, более мелкие, чем в доисторические времена.
Случай 2: Ам
< Аж, но Вм = Вж:

А так будут выглядеть кривые для параметров, значения которых у человека за последние несколько тысяч лет не менялись – ум, например. Многие вполне обоснованно полагают, что современный человек, если убрать налет образованности и культуры, ненамного умней древнего грека. Среди мужчин гениев[66]
(нобелевских и прочих лауреатов, великих изобретателей, писателей[67]
и художников – см. правый край графика) больше лишь потому, что и дураков среди мужчин достаточно (левый край графика). Но средняя женщина умнее среднего мужчины – центр «женской» кривой приподнят за счет меньшего разброса по краям: площади фигур под графиками одинаковы – никого не обижая, будем считать, что Господь Бог или Природа (кто как для себя считает) одинаково наделили умом обе половины человечества.
Теорию нечетких множеств, как уже было отмечено в этюде 3, можно попытаться приложить и к проблеме компьютерного пиратства. Закон делит всех людей на два четких множества: «множество легальных пользователей программ» и «множество нелегальных пользователей (пиратов)». В реальной жизни все намного сложней: нечетких множеств людей, причастных к компьютерам, великое множество (извините за тавтологию). Есть множество торгующих на «Горбушке» «черными» дисками (левый край оси – см. графики выше) и есть множество тех, кто принципиально работает только с легальными копиями и никогда не подаст руки согрешившим – нарушившим какое-либо лицензионное соглашение (правый край оси). Можно опять же над осью «грешник-праведник» построить горбатые статистические кривые, описывающие состояние компьютерного рынка в конкретной стране. Где находится максимум этой кривой, куда и с какой скоростью он перемещается во времени?
Естествоиспытатель, желающий познать окружающий мир, не может прямо обратиться к Создателю
– к Богу или к Природе, кто как для себя считает, а должен задавать вопросы самому объекту исследования, то есть должен проводить эксперимент – вносить в объект возмущения и фиксировать реакцию на них.
У программы есть авторы. Их имена далеко не всегда указаны на коробках, дисках и в документации, но они есть. Следовательно, какие-либо эксперименты над программами излишни. Возникающие вопросы нужно адресовать либо документации, либо самим авторам. Но! Если пользователю, к примеру, потребуется уточнить, в градусах или в радианах измеряется аргумент синуса, то он не будет рыться в документации, а просто напишет x:=sin(90) и посмотрит, чему окажется равна переменная x. Подобные эксперименты пользователи ставят ежечасно, обращаясь к документации только в особо сложных случаях и, как правило, не находя там ответа. Обращение же к Создателю проблематично. На hot-line сидят не авторы, а продавцы программ, что, как понимает читатель, далеко не одно и то же. Консультант фирмы скорее всего попросит вас перезвонить через пару дней, за которые он проведет свой эксперимент над программой и попытается найти ответ. Да и обращение к самому автору часто ничего не дает, так как он уже забыл свое детище и всецело поглощен новым проектом. Если даже это не так, то автор может и не помнить всех свойств, а уж тем более нюансов своего творения.
Из-за этого при работе с программами пользователь часто забывает, что это продукт ума и рук человеческих (Природа сотворенная), полагая (на уровне эмоций), что это плод работы анонимного и недоступного Создателя (Природа творящая), у которого нет hot-line. Здесь, по-видимому, и кроется философское объяснение
(но ни в коем случае не оправдание) широкого распространения нелегального копирования программ. Имеются в виду не китайско-болгарские компакт-диски типа «Все для офиса» – воровство есть воровство[68]. Речь идет об относительно честных людях, ставящих на свой компьютер программу с того же лазерного диска, чтобы познать Природу и передать свои знания, например, студентам.
Откройте первую страницу любого западного издания и вы увидите предупреждение о том, что эту книгу (ее отдельные главы или страницы) запрещено копировать. Автор сначала написал «и вам бросится в глаза грозное предупреждение», но потом заменил на нейтральное «вы увидите». Все прекрасно понимают, что имеется в виду копирование в коммерческих целях. Как на Западе, так и у нас в библиотеках вполне легально стоят копировальные аппараты, на которых «ксерят» книги и журналы от корки до корки, исключая разве что ту самую страницу с грозным, а по сути пустым предупреждением. Снимать копии с печатной продукции любыми доступными способами (выпиской цитаты в тетрадку, например) можно в образовательных и научных целях. Более того, если кто-то препятствует такому способу распространения информации, то это расценивается как прямое нарушение прав автора. Не авторских прав[70], а именно «прав автора». За этой стилистикой скрывается то, что авторскими правами почти всегда распоряжается не автор, а издатель. Права же автора, это как права человека, которые «от Бога» и которые невозможно передать кому-либо. Появление на рынке «черных» копий книги расстраивает обладателя авторских прав. Автор же (обладатель прав автора) сначала радуется этому, а потом уж огорчается по поводу потери будущей и, как правило, эфемерной прибыли[71]. Размытость границы между коммерческим и некоммерческим использованием копий можно видеть и в другом. Аспирант «наксерил» чужих статей, слепил из них диссертацию (скажем мягче – часть диссертации), получил ученую степень, а через нее – высокооплачиваемое место на фирме или в университете. Даже если слово «слепил из них» заменить на «которые помогли ему написать», то суть дела не меняется: знания – это самый дорогой товар на цивилизованном рынке.
Такой подход к книжной продукции пользователи ЭВМ (а это сейчас самая читающая публика – в метро мелькает не только дамский роман, но и какой-нибудь User’s Guide или «Excel для «чайников») перенесли и на программные продукты (продукция, продукты – это все рыночные термины). Изучить программу так же интересно и полезно (в общекультурном, образовательном плане), как и книгу. Беда, а быть может, и счастье программ лишь в том, что копировать их намного проще, чем книги. Кроме того, даже самые гениальные программы, в отличие от классической литературы, умирают раньше срока завершения действия авторских прав. Пушкина или Шекспира сейчас кто угодно может издавать.
В печати то и дело мелькают сообщения о том, что где-то на ВВЦ (бывшая ВДНХ), в Митино и у ДК им. Горбунова («Горбушка») ОМОН разогнал торговцев пиратскими CD-ROM с записями популярных программ для ЭВМ[72]. Первая реакция на это: «Наконец-то!» Но потом приходят другие мысли. Когда люди с автоматами наперевес проверяют документы у лоточников в подземном переходе, то девять прохожих из десяти думают не о том, что наводится порядок, а о том, что просто собирается дань. Десятый прохожий думает о том, что опять «заметут» всяких мелких сошек, а организаторы нелегальной торговли отделаются легким испугом. Боже упаси решать у нас какую-либо проблему чисто полицейскими мерами. До сих пор из этого ничего толкового не получалось, а если проблема и решалась, то выходил какой-то ГУЛАГ. Кроме того, здесь плавно выходит на первый план
Милицейские рейды на рынки программ, и это отмечалось в печати, были проведены по наводке сотрудников российских компьютерных фирм, увидевших на лотках незаконные копии своих программных продуктов. Сотрудников, заметим, профессионально выросших на тех же пиратских копиях, правда, чужих программ. Нелегально ставили они их на свои компьютеры, конечно, в общеобразовательных и в научных целях, но... см. выше. К милицейским рейдам, говорят, приложило руку и московское отделение одной знаменитой компьютерной фирмы. Той самой, за которой тянется длинный шлейф судебных процессов по поводу нарушения чужих авторских прав. Знаменитой фирме можно посоветовать сначала разобраться с вопросами об авторских правах на оконный интерфейс, а потом уже «стучать куда следует». Вы видели главу этой фирмы? Похож он на человека, которого обокрали?
Библейское предание говорит о том, что Христос спас неверную жену от самосуда толпы, призвав первым бросить в несчастную женщину камень того, кто сам безгрешен. У автора такое чувство, что какое-то подобие самосуда над несчастными отечественными пользователями программ пытается совершить наша пресса (глас толпы)[73]. При этом на одну доску нередко ставятся и торговец с «Горбушки», и вузовский преподаватель[74]. Да, и у того и у другого на руках нелегальные копии, но называть и, главное, судить их нужно по-разному, с учетом вышеизложенных аспектов. Торговцы с «Горбушки» вообще не имеют никакого касательства к закону об авторском праве. К ним нужно применять другие мерки и другие статьи закона – те, где говорится о нарушении правил торговли или даже о воровстве и разбое. Производители программных продуктов у нас в России (да и не только у нас) попали в какой-то заколдованный круг. С одной стороны, хочется защитить свои права всеми возможными средствами, а с другой – не имеешь на то морального права, ибо сам такие же, но чужие права неоднократно нарушал и будешь нарушать впредь – сын, например, дома скачивает с «черных» дисков игрушки.
Если программу воруют... Нет, камень бросать не будем и скажем по-другому. Если программу копируют без ведома автора или того, кому принадлежит copyright, то нужно не огорчаться, а радоваться. Автору, конечно, а не продавцу. Защищать же программу следует активными (хороший послепродажный сервис[75], электронный ключ, наконец), а не фискальными средствами. Аналогия из области адюльтера – пиратства на семейном фронте[76]. Если у вас красивая жена, то на нее засматриваются (и не только) окружающие. Бороться с изменами следует активными методами – подарки, признания, короче, хороший послесвадебный сервис, пояс верности (электронный ключ), на худой конец[77]. Слежкой тут делу не поможешь. Тем более противно, когда осуждают чужих жен, да еще пытаются при этом писать какие-то «залесские» декларации и статьи.
Открыв любой номер любого компьютерного издания, можно наткнуться на статью, касающуюся проблемы нелегального копирования и распространения программ. Данное письмо также затрагивает эту тему, но несколько в ином ключе. Здесь нет попытки кого-то осудить или оправдать. Автор просто пытается рассмотреть проблему в необычных аспектах: философском, религиозном, общекультурном, милицейском, моральном и даже... сексуальном.
Каждый, кто когда-либо серьезно занимался программированием, знает, что написать программу можно за несколько минут. Но на поиск ошибки в ней могут уйти часы, дни, недели...
Английский эквивалент термина отладка – a debugging заслуживает отдельного разговора. A bug по-английски – жучок, а приставка de означает удаление. Сам термин debug дословно можно перевести как обезжучивание. Эта калька с английского не такая уж бессмысленная. Один из первых компьютеров стал барахлить из-за того, что в его электронных внутренностях запутался таракан, закоротил контакты, обуглился и, как некий связист-камикадзе, замкнул их, внеся тем самым изменения в электронную схему машины.
К сожалению, пакет Mathcad не оборудован штатными средствами отладки. А к ним обычно относят следующую тройку инструментов:
1. Трассировка программы (Trace), когда после ее запуска цветом или жирным выделением отмечаются выполняющиеся операторы. Так можно проверить соответствие порядка выполнения операторов задуманному алгоритму. Программу можно выполнять и пошагово – очередной оператор выполняется после нажатия программистом какой-либо оговоренной клавиши. При этом можно «заходить» или не «заходить» в функции или процедуры. Не заходят в них в тех случаях, когда они отлажены и оттестированы отдельно (заранее).
Система Mathcad, выполняя операторы документа, своеобразно трассирует их. Если какой-либо оператор выполняется достаточно долго (суммируются элементы объемного вектора, например), то он оконтуривается и штрихуется зеленым цветом. Это можно было бы назвать трассировкой, если такое выделение операторов велось бы и в теле программ с циклами и альтернативами. Но система Mathcad рассматривает программу как единый оператор (второй атрибут программирования) и не подсвечивает операторы в нем, а оконтуривает и подсвечивает всю программу: «Ждите ответа!»
2. Пошаговое выполнение операторов обычно сопровождают просмотром (Watch) текущих значений всех или некоторых переменных. При этом на дисплей выводится специальное окно, где отмечаются имена переменных, их тип, текущее значение и др.
Программист, написав и отладив программу, как правило, на этом не успокаивается и начинает ее улучшать – оптимизировать. Таким программистам можно посоветовать повесить на стене перед глазами такой листочек:
«За все нужно платить!»
«Лучшее ¾ враг хорошего!»
«Не до жиру, быть бы живу!»
Далее в тексте читатель будет встречать подобные тривиальные истины, некоторые из них он может также вывешивать в виде плаката[89].
Поговорим о том, что можно улучшить в программах – хотя бы в тех, которые помещены в этой книге.
Программы можно оптимизировать по разным параметрам. Вот три основополагающих:
Время выполнения программы;
Объем программы: место, занимаемое ею в ОЗУ компьютера, длина файла с исходным текстом программы, хранимого в архивной памяти.
Читабельность программы; степень ее открытости для изучения другими людьми и для доработки самим автором или кем-то другим.
Последнее качество в отличие от двух первых не так просто выразить числом, на которое можно целенаправленно влиять. Но мы уже рассмотрели понятие удобное
пожарное ведро и знаем, как нечеткие
величины можно обрабатывать четкими методами (см. рис. 6.41-6.45). Открытость программ очень важна в среде Mathcad, так как этот пакет интенсивно используется в сфере образования. Все три параметра (и еще какие-то другие) можно объединить в один интегральный и применить к нему метод экспертных оценок с функциями принадлежности какого-либо элемента (параметра) нечеткому множеству «оптимально-неоптимально».
Все три вышеотмеченные качества взаимосвязаны. Только в очень неряшливо написанной программе все параметры можно улучшить. Обычно же бывает так, что, улучшая читабельность программы человеком, мы ухудшаем ее «читабельность» компьютером: комментарии в программе (в нашем случае – текстовые константы) не только увеличивают объем программы, но и замедляют ее прогонку.
Вот другой пример. Если в программе на рис. 4.10 (сплайн-интерполяция) исходные векторы и матрицы термодинамических параметров водяного пара переместить в файл на диске, а в программе оставить операторы его считывания (функция READ), то объем программы существенно уменьшится, но читабельность ее при этом ухудшится (самое интересное уйдет с экрана дисплея), а время ее выполнения изменится.