программирование :: разное

Нарисовать уравнение


Нарисовать уравнение Эта статья адресована большей частью учащимся старших классов школ, да и всем людям, сталкивающимся с решением уравнений и неравенств одной переменной.

Будучи математиком, я не раз сталкивался с просьбами знакомых решить ту или иную бытовую задачу (расчет расстояний, скорости автомобиля, массы муки в тесте для блинов, объема воды в лежащей на боку наклоненной полупустой цистерне и т.д.). Каждый раз подобные задачи влекут за собой необходимость решать то или иное уравнение или хуже — систему с некоторой точностью. Если в классической математике к приближенному решению чего-либо относятся с недоверием, то науке, имеющей дело с реальным миром (физике, химии), часто приходится довольствоваться менее строгими результатами. На самом деле, измеряя расстояние между городами, мы вряд ли станем учитывать каждый миллиметр, а имея дело с атомами, вообще ничего абсолютно точного нельзя сказать по этому поводу, так как на пространственные характеристики будет влиять множество факторов (температура, давление и т.д.). При решении сложных физических задач профессиональными учеными используется множество математических символьных и численных пакетов: Mathematica, Maple, MathCAD. Последний особенно популярен у инженеров, так как хорошо справляется именно с численными вычислениями. Для того чтобы легко и свободно работать с этими программами, требуется довольно усердное изучение и понимание концепций, заложенных в них. Чего только стоят чистые функции и постфиксная запись в Mathematica, анимация в MathCAD или суровый скриптовый язык Maple. Да, студентов инженерных специальностей обучают этому нелегкому ремеслу, но есть немало людей, сталкивающихся с решением уравнений и не имеющих никакого представления ни об этих пакетах, ни о том, что вообще-то компьютер можно заставить помогать им и в этом. Стоимость вышеперечисленных пакетов для жителей Беларуси вряд ли актуальна, но размеры, время, потраченное на изучение, роль уже играют первого плана. Что делать школьнику и просто hi-tech домоседу, если нужно решить то или иное уравнение одной переменной или проверить, нет ли ошибки в ответе в учебнике?

Можно сделать это графическим способом и малыми затратами времени. Для этого нам понадобится программа, которая бы строила графики функций одной переменной в декартовой системе координат. Смысл подобного решения объяснять лучше всего на примере. Итак, пусть у нас есть уравнение:
f(x) = g(x),
где f(x) и g(x) — некоторые функции переменной x. Для конкретики возьмем f(x) = sin(2*x)/31, а g(x) = 3^(x^2 + 4*x). Соответственно, уравнение, которое мы будем решать, имеет вид:
sin(2*x)/31 = 3^(x^2 + 4*x)
Если рассматривать его части как функции от переменной x, что мы и сделаем, то можно построить их графики. Отдельно. Точки пересечения из (координата x0) как раз и будут решениями (см. рис. — большее окно). Почему? Если поставить этот x0 в правую часть вместо x, то функция f(x) примет некоторое значение y0. То же самое значение принимает при подстановке и функция g(x). А это как раз равенство и есть. То есть мы нашли x0 — число, которое при подстановке его в уравнение даст нам тождество, что, собственно, является определением решения уравнения.
Можно обойтись построением и одной кривой вместо двух. Достаточно перенести все в левую часть уравнения, чтобы справа остался 0:
f(x) — g(x) = 0
и построить график теперь уже только левой части. Точки пересечения с осью Ox есть наши решения. Опять по той же причине — при постановке из x-координат в уравнения получаем тождество (см. рис. — меньшее окно).

С неравенствами то же самое. Если рассмотреть все тот же f(x) > g(y), то неравенство выполнено, если часть графика f(x) находится выше графика g(x). На рисунке это для всех x из промежутка [x0, x1]. Почему я не уточняю промежуток до интервала или отрезка? Потому, что при таком способе решения этого попросту нельзя сделать. Второй недостаток этого метода: зачастую, когда решений много (особенно бесконечно), можно говорить об их наличии или отсутствии только на некотором промежутке значений аргумента. Ввиду этих недостатков данный способ решения уравнений и неравенств одной переменной годится лишь для приближенных вычислений и просто проверки наличия решений, однако даже при таком раскладе он окажет неоценимую услугу и школьнику и абитуриенту и слесарю.
Теории достаточно, теперь самое время перейти к инструментарию, так как руками строить графики сложных функций весьма и весьма накладно, если это нечто вида log(sin(x), cos(x)). Монструозные профессиональные пакеты нам придется сразу отбросить, потому как описать методику работы с одним из них, пускай даже для решения нашей маленькой задачки, песня долгая и заунывная. Остановимся мы на двухмерных математических рисовалках — программах, которые для того и написаны, чтобы легко и быстро строить графики математических функций. Во всемирной паутине подобного рода софта не счесть, однако редко попадется по-настоящему удобный инструмент. Больше всего мне понравился (ничего удивительного — я сам его автор) GraphSight v.1.2.0. Одним из key features этого проекта является возможность прямо мышкой перетаскивать и масштабировать область исследования (координатную плоскость) для детального изучения графиков. Вторая черта — все графики это реальные объекты со своими контекстными меню, реагирующие на мышь и клавиатуру и т.д. Скачать эту прелесть можно с http://www.cradlefields.com/gs/graphsgt.zip . Всего 450 Кб — и у нас в руках удобный инструмент для решения нашей задачи. Полученные с помощью программы картинки можно легко сохранить как просто картинку или распечатать. Последнее — на заметку компьютеризированным учителям. Интересно было распечатать парочку сложных графиков школьникам для пояснения, где у кого экстремумы, что такое асимптота, область значения и определения и т.д. Итак, за дело?

Функциональность самой программы описывать смысла нет, так как статья посвящена отнюдь не ей, а идее решения уравнений графическим способом, и для этой цели сгодится любая математическая рисовалка. Ежели-таки решите использовать GraphSight, то не забывайте о его главных фичах — левой кнопкой мыши область исследования перетаскивается, правой — масштабируется. Как выглядит программа, смотрите на рисунке.
Описанный подход окажет неоценимую услугу и профессионалам — часто просто на глаз прикинув значение корня с помощью рисовалки, его с помощью того же MathCAD можно приближенно вычислить сколь угодно точно, а для использования итеративных методов вычисления неплохо иметь для начала хотя бы общее представление об уравнении, дабы не решать нечто вида sin(1/x) = ln(x+1) в окрестности нуля численными методами.
Программы подобные GraphSight, если суть удобны в использовании, позволяют почувствовать, увидеть уравнения. Повозившись с графиками и привыкнув к такому представлению функций, школьник вряд ли спутает арксинус с арккосинусом. Да и уравнения вида sin(x)=x^2 + 1 будут решаться намного легче. Надеюсь, сия статья откроет некоторым, а особенно творческим, начинающим и не только математикам новый мир графического представления математических функций. Недаром девиз программы — understanding math through visualizations.

Александр Муравский alexander@cradlefields.com
Сергей Муравский terraho@tut.by




© компьютерная газета