О.Л.Никольский qnx-student at yandex.ru МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ПРИМЕНЕНИЮ НАБОРА ВЫЧИСЛИТЕЛЬНЫХ АЛГОРИТМОВ ВОПРОСНО-ОТВЕТНОЙ СИСТЕМЫ WOLFRAM|ALPHA для решения задач расчётно-графической и курсовой работ дисциплин “Информатика” и “Информационные технологии” Черновой вариант 2го издания (май-2019) БРЯНСК 2019 2 ОГЛАВЛЕНИЕ ПРЕДИСЛОВИЕ............................................................................................................................ 4 1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ ........................................................................ 4 2. ОСНОВЫ РАБОТЫ В СРЕДЕ WOLFRAM|ALPHA ............................................................ 8 2.1. Расчёт по конечным формулам ............................................................................ 9 2.2. Табулирование функций ..................................................................................... 14 2.3. Построение графиков функций .......................................................................... 16 2.4. Нахождение экстремумов функций ................................................................... 22 2.5. Дифференцирование функций ........................................................................... 28 2.6. Полное исследование функций........................................................................... 30 2.7. Операции с матрицами........................................................................................ 32 2.8. Решение систем линейных уравнений............................................................... 39 2.9. Решение систем нелинейных уравнений........................................................... 41 2.10. Аппроксимация таблично заданных функций ............................................. 42 2.11. Интерполяция таблично заданных функций................................................ 50 2.12. Обработка логических выражений ................................................................ 53 2.13. Решение текстовых логических задач ........................................................... 55 2.13.1. Краткий обзор средств Wolfram|Alpha для преобразования логических формул и решения логических уравнения и неравенств ..................................... 56 2.13.2. Формализация текстовых логических задач ........................................... 60 2.13.3. Алгоритм решения распространённых логических задач методом характеристического уравнения (Шапиро [12]) ..................................................... 63 2.13.4. Примеры решения логических задач ..................................................... 64 3. 2.14. Системы счисления .......................................................................................... 84 2.15. Внутреннее представление чисел в компьютере .......................................... 86 2.16. Битовые операции ............................................................................................ 88 НАСКОЛЬКО МОЖНО ВЕРИТЬ РЕЗУЛЬТАТАМ, ВЫДАННЫМ КОМПЬЮТЕРОМ? 88 3.1. Пример 1. Экспоненциальная аппроксимация таблично-заданной функции 90 3.2. Пример 2. Экспоненциальная аппроксимация таблично-заданной функции 92 3.3. Пример 3. Минимум функции 2х переменных arctg[ln(3x2+12x+4y2-6y+36)] 94 3.4. Пример 4. Решение системы 3х линейных уравнений с 3мя неизвестными. 95 3.5. Пример 5. Интерпретация логических формул в Wolfram|Alpha .................. 96 3.6. Пример 6. Колеблющийся грузик, определение параметров механической системы по экспериментальным замерам .................................................................. 96 3.7. Пример 7. Корни нелинейного уравнения ...................................................... 101 3 3.8. Пример 8. Экстремумы функции одной переменной .................................... 105 3.9. Пример 9. Экстремумы функции двух переменных ...................................... 108 СПИСОК РЕКОМЕНДУЕМЫХ ИСТОЧНИКОВ .................................................................. 111 4 ПРЕДИСЛОВИЕ Настоящие методические указания предназначены для студентов первого курса, выполняющих задания курсовой работы и расчётно-графической работы по дисциплинам Информатика и Информационные технологии. Автор не ставил целью систематическое изложение языка Wolfram и его подмножества для интерактивной системы Wolfram|Alpha, это является предметом отдельного документа. Основной упор сделан на демонстрацию того, как можно решать с помощью системы Wolfram|Alpha задачи из тематики расчётно-графической и курсовой работ. Настоящий документ является дополнением к утверждённым методическим указаниям и заданиям по курсовой работе, поэтому не содержат индивидуальных заданий. 1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ Различного вида расчёты являются неотъемлемой чертой работы инженера. Во время учёбы студент должен освоить современные средства проведения инженерных расчётов в объёме, который позволит уверенно чувствовать себя как при выполнении учебных заданий, так и в процессе самостоятельной профессиональной работы. Современная вычислительная техника и программное обеспечение предлагают широкий круг средств для вычислений, начиная с самых простых, и до трудоёмких и сложных, используемых как профессионалами в области инженерии, так и специалистами в области математики, физики, биологии и других фундаментальных наук. Выбор компьютерных программ для использования в учебном процессе – задача, не имеющая единого оптимального решения. С одной стороны, программы должны иметь простой и интуитивно понятный интерфейс пользователя и иметь необходимый для учебных целей функционал. С другой стороны, программы должны быть доступными по условиям лицензирования как для учебного заведения, так и для каждого из студентов. С точки зрения первого 5 набора требований наилучшим решением является выбор математического пакета Mathcad. К сожалению, этот пакет очень дорогой, в особенности для индивидуального использования студентами. По доступности для бесплатного использования хорошо подходит математическая программа SMath Studio, имеющая удобный, схожий с пакетом Mathcad, интерфейс. Но возможности этой программы значительно уступают возможностям пакета Mathcad даже для решения некоторых стандартных задач вычислительной математики, входящих в задание на курсовую работу. Некоторые задачи курсовой работы можно решать в среде табличных процессоров, входящих в состав как платных, так и свободных офисных пакетов. Общим недостатком таких процессоров является ограниченная с точки зрения спектра решаемых вычислительных задач функциональность. В настоящее время прогресс в развитии интернет технологий привёл к появлению большого количества доступных онлайн сервисов для различного вида работ на компьютере, включая расчёты. Для вычислений можно отметить полнофункциональные математические программы с веб-интерфейсом – Maple (https://maple.cloud/), Matlab (https://www.mathworks.com/products/matlab-online.html), Maxima (https://www.rollapp.com/app/maxima), а также онлайн-калькуляторы для решения конкретных задач из узких областей математики (корни уравнений, аппроксимация, задачи алгебры логики и т.п.). Удобным средством является онлайновая программа компьютерной алгебры MathStudio (http://mathstud.io/). Наилучшей доступностью, удобством и большими вычислительными возможностями выделяется Wolfram|Alpha, вопросно-ответная система, база знаний и webинтерфейс к программному пакету Mathematica - системе компьютерной алгебры, ориентированной на выполнение символьных и численных расчётов профессионалами-математиками и специалистами в других сферах науки, где требуется применение широкого спектра современных математических и вычислительных методов. Wolfram|Alpha можно использовать как совершенно 6 бесплатно (с ограниченной функциональностью и результатами, включая результаты вычислений в виде картинок), так и на платной основе. Для студента бесплатная версия системы Wolfram|Alpha позволяет: Пользоваться совершенно свободно в любой момент, если есть доступ к Интернету, Провести практически любые вычисления по формулам и решить большинство задач вычислительной математики из тем курсовой работы и задачи расчётно-графической работы, а также многие другие задачи вычислительной математики, суть которых студент понимает. Поэтому система Wolfram|Alpha может быть эффективным программным инструментом для решения учебных задач и использоваться самостоятельно или совместно с другими программами для верификации полученных результатов и решения тех задач, которые другим доступным программам не под силу. Нужно всегда помнить, что нет ни одной компьютерной программы, которая бы стопроцентно работала без ошибок (см. раздел 3 настоящего документа). Известны случаи, когда при выполнении заданий курсовой работы использованные студентами программы, включая Mathcad, Smath Studio и MS Excel молча (т.е. никак не сообщая о возможных ошибках) выдавали неверный результат, который потом подводил студента при защите курсовой работы. Совместное использование Wolfram|Alpha и других программ рекомендуется во всех случаях, когда результаты расчётов не могут быть проверены прямо (например, подстановкой найденного корня в левую часть уравнения или сопоставлением найденного экстремума с графиком функции), а также во всех случаях, когда требуются детальные графики функций одной и двух переменных. Хотя Wolfram|Alpha в общем случае способен решить любые учебные задачи, описываемая в настоящих методических указаниях его бесплатная онлайн версия ограничена по времени вычислений и объёму исходных данных. Иногда программа отказывается выдавать 7 результат, ссылаясь на превышения времени вычислений или на непонимание вашего задания. В этих случаях при выполнении заданий курсовой работы рекомендуется самостоятельно частично изменить числа в задании, либо сократить их количество (например, уменьшить количество пар точек таблично заданной функции для подбора аппроксимирующих или интерполирующих зависимостей). При выполнении расчётов с помощью любой компьютерной программы следует учитывать, что практически все (за исключением редких специальных случаев) инженерные расчёты являются приближёнными. Погрешности возникают на всех этапах компьютерного эксперимента – неточности исходных данных, приближений при выборе модели, принципиальной неточности численных методов и машинной арифметики нецелых чисел, в т.ч. из-за ограниченности разрядной сетки компьютера. Элементарная теория погрешности позволяет оценить точность результатов ручных вычислений по простым формулам. Для решаемых с помощью компьютера стандартных задач вычислительной математики, требующих многих тысяч арифметических операций для получения результата, оценить его погрешность элементарными средствами невозможно. Поэтому следует придерживаться такого правила: число – конечный результат вычислений - не должно иметь больше значащих цифр, чем было задано для исходных данных. Значащей цифрой приближенного числа называется всякая цифра в его десятичном представлении, отличная от нуля, и нуль, если он содержится между значащими цифрами или является представителем сохраненного десятичного разряда. Пример; для числа 0,002080 первые три нуля не являются значащими. Если число представлено в стандартном виде десятичной дроби, то нули, стоящие справа, всегда являются значащими цифрами. Если число записано в экспоненциальном виде, нули справа от цифры в числе могут быть как значащими, так и незначащими. Например, число 1,200·100 имеет четыре значащих цифры, поэтому при записи его без 8 степени оно имеет вид 1,200, в котором два нуля справа от цифры 2 являются значащими. Аналогично, число 1,2·104 имеет две значащих цифры (т.к. при обычной записи оно имеет вид 12000, в котором три нуля справа от цифры 2 являются незначащими, т.к. стоят взамен неизвестных точных цифр), число 1,20 104 имеет три значащих цифры. В инженерной практике обычно используют три значащих цифры. 2. ОСНОВЫ РАБОТЫ В СРЕДЕ WOLFRAM|ALPHA Вопросно-ответная система Wolfram|Alpha запускается в браузере по веб-адресу http://www.wolframalpha.com/. После загрузки страницы появляется следующий графический интерфейс пользователя: Математические запросы к системе Wolfram|Alpha формулируются на естественном языке с использованием распространённой математической нотации и зарезервированных лексем языка Wolfram. Язык запросов не строгий, поэтому не бойтесь экспериментировать в формулировке того, что вам нужно посчитать. Wolfram|Alpha всегда показывает в привычной нам математической записи, как она нас поняла. Если оказывается, что нас запрос был понят неправильно, его легко ввести снова в переформулированном 9 виде. Более того, для решения многих задач (например, нахождения экстремумов функций) можно использовать разные варианты запросов, используя различные лексемы (maximize/minimize, extrema, stationary point calculator, …). На данный момент система не поддерживает русский язык, хотя изредка умеет сообщать о том, что не поняла запроса, по-русски Отсутствие русификации не должно препятствовать её использованию студентами, т.к. набор английских слов, необходимых для формулировки вычислительных задач, ограничен, и ниже пояснён примерами. Wolfram|Alpha, как система основанная на компьютерной алгебре, выдаёт результат преимущественно в точном символьном виде. Для числовых результатов, там, где это возможно, результат представляется в виде рационального числа-дроби, где числитель и знаменатель – целые числа. Например, корни системы уравнений 3x+7y=8, 18x-14y=-4 будут представлены в виде рациональных чисел x=1/2, y=13/14. Представить такие числа в виде десятичных дробей с разумной точностью не составляет труда. 2.1. Расчёт по конечным формулам Вычислить значение выражения 2 ∗ sin + 1.5 ∗ при x=0.7. 10 Слово evaluate (вычислить) вводить не обязательно, как не обязательно ставить знак операции умножения. Система поймёт нас, если мы введём запрос так: При вводе формул можно использовать следующие операции [3]: +, -, *, /, % (остаток от деления нацело), ^ (возведение в степень). Доступны константы π = 3.14 и e = 2.71828… и стандартные функции ln()=log(), sin(), cos(), tan(), cot(), log10(), log[b,z] - логарифм числа z по основанию b. Функция sqrt() возвращает квадратный корень аргумента, cbrt() – кубический корень. Для извлечения корней более высокой степени используется фраза типа “nth root of Z” – корень nой степени из Z. Показатели степени: √ √ √ “forth root of” x, “sixth root of” x, “seventh root of” x, WolframAlpha (в отличие от MS Excel) при необходимости использует комплексные числа. В частности, при взятии корня нечётной степени n из отрицательного числа x по запросу x^1/n как результат будет выдан алгебраический корень – комплексное число. 11 Во всех заданиях по информатике предполагается, что все функции действительные. Для получений действительных значений заданных функций следует правильно записывать извлечение кубических корней – арифметический (действительный) корень третьей степени из отрицательного аргумента выдаётся по запросу cbrt(x). Пример для функции , подкоренное выражение которой отрицательно на части области определения [-3;5], приведен ниже: 12 13 Можно вычислить значение выражения сразу для нескольких значений аргумента: Количество цифр результата задаётся с использования слова digits: Запрос Интерпретация Результат 7 digits of sqrt(2)+sqrt(3) sqrt(e) to 11 digits Если нужно задать число цифр дробной части результат вычислений, можно использовать функцию Floor(): Запрос Интерпретация Результат Floor(pi, 1E-2) 3.14 Floor(sqrt(2)+sqrt(3), 0.0001) 3.1462 Floor(1/333, 0.0001) 0.003 13 14 2.2. Табулирование функций Составить таблицу значений функции x2sin(x-π/3)/(x/2) для значений x от 0.75 до 5 с шагом 0,25: 15 Хотя для результата можно задать произвольное количество цифр, значения функции в таблице содержат столько цифр, сколько соответствует возможностям конкретной компьютерной платформы. Вычисления с такими числами, как правило, проводятся быстрее. Возможен также такой вариант: Заданная функция Интервал x Шаг изменения x Значения функции Здесь N[…] – встроенная функция языка Wolfram, возвращающая численное значение выражения, опционально с заданной точностью. Если не использовать N[…],Wolfram|Alpha всегда, когда это возможно, возвращается результат в точном символьном виде. Примеры: Точные символьные результаты В числовом виде точностью по умолчанию Точность 3 цифры 16 2.3. Построение графиков функций Построить график функции (1.5 − 0.7 ) в диапазоне -3≤ x ≤ 1.9. Используем форму запроса “plot f(x), x from a to b”, где f(x) - заданная функция от аргумента x , a и b – границы для аргумента: Можно строить графики функций, заданных разными выражениями на различных участках области определения, используя слово Piecewise (“кусочная” функция). Пример для функции −( + 2) при ≤ −2 f(x)= 0 при − 2 < < 2 ( − 2) при ≥ 2 17 18 Обычно задавать границы изменения x не требуется, программа сама выбирает оптимальные точки. 19 Для построения нескольких графиков в одной системе координат выражения функций записываются подряд через запятую или слово vs (сокращение от versus). Пример для функций sin(√7 ) + 19cos( ) и Пример для функций ,* ' ' 3cos( ). , + ,( ) и 2-.,(0,5 ). 20 Построение графика таблично заданной функции 21 Для построения графика функции 2х переменных используется ключевое слово plot3d: 22 2.4. Нахождение экстремумов функций Найти максимум функции x*(1-x)*ex в диапазоне -3≤ x ≤ 2. Используем общую форму запроса maximize x(1-x)e^x, where x from -3 to 2 функция границы аргумента аргумент функции 23 Для поиска минимума используется ключевое слово minimize. Найти минимум функции sin 2 − / 0 1 в диапазоне 0<x<7: 24 Если нужно найти предыдущий минимум (см. график), задаём соответствующий диапазон независимой переменной: 25 Минимум функции двух переменных ищется так же, как одной переменной: Все экстремумы функции можно найти, использую запрос с ключевым словом extrema. Чтобы посмотреть численные значения глобальных минимума и максимума, нажимаем кнопки Approximate form. 26 Можно также запросить вычисление стационарных точек функции с помощью запроса stationary point of...: 27 28 2.5. Дифференцирование функций Используются ключевые слова derivative (производная), differentiate (дифференцировать), или общепринятая математическая символика дифференцирования d/dx. Помимо символьного выражения производной, Wolfram|Alpha выдаёт график производной, её альтернативные формы записи, нули производной и т.п. 29 30 Производные порядка n находятся запросом d^n/dx^n f(x): Просто находить частные производные: 2.6. Полное исследование функций Подробно с примерами на русском языке процедура исследования функций описана на портале WolframAlpha по-русски. Некоторые ссылки на полезные страницы: 31 Как найти критические точки первого рода функции f(x) (на этой странице есть несколько ссылок на начальные этапы исследования функции) http://www.wolframalpha-ru.com/2012/08/fx_14.html Как найти точки перегиба функции f(x) в Wolfram|Alpha http://www.wolframalpha-ru.com/2012/10/wolframalpha_10.html Как найти критические точки второго рода функции f(x) в Wolfram|Alpha http://www.wolframalpha-ru.com/2012/09/fx-wolframalpha.html Калькулятор стационарных точек функций в Вольфрам Альфа http://www.wolframalpharu.com/search/label/%D0%98%D1%81%D1%81%D0%BB%D0%B5%D 0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20% D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B9 Математика, статистика, анализ данных в 32 2.7. Операции с матрицами Матрица записывается построчно, каждая строка матрицы и сама матрица заключаются в фигурные скобки. Элементы строки и строки разделяются запятыми. Нумерация строк и столбцов начинается с 1!. Для получения основных характеристики матрицы она вводится сама по себе без всяких ключевых слов: 33 Определитель матрицы (слово det или determinant): Арифметические операции с матрицами записываются так же, как для скаляров (вместо знака умножения “*” можно ставить точку “.”): Строка ввода полностью: {{3,-3,5,2},{-1,-9,2,5},{7,2,-5,-1}}*{{2,-9,8,7},{9,-3,-1,0},{7,5,-1,8}, {8,4,2,1}}+{{5,1,8,-7},{3,4,-1,-4},{2,6,10,1}}-5. 34 Ещё один пример операций с матрицами (сравни с результатом, выдаваемым математической системой SMath Studio): Строка ввода ((3,-3,5,2),(-1,-9,2,5),(7,2,-5,-1), (2,5,7,0)) . ((2,1,1,3), (1,2,2,5), (6,2,1,1), (1,1,1,2)) ^ (-1) + ((5,1,8,-7), (3,4,-1,-4), (2,6,10,1),(1,4,8,2)) – 5. Результат Вычисление в Smath Studio: 35 Транспонирование матрицы Обратная матрица: 36 Система наряду с inv понимает слово inverse, можно также писать {…}-1. Получить 2ю строку матрицы Получить элемент на пересечении 2й строки и 3го столбца матрицы 37 Удалить 3ю строку матрицы Добавить строку к матрице Удалить строки 2..4 матрицы Заменить 2ую строку матрицы 38 Получить 1й столбец матрицы. К сожалению, это выходит за пределы возможностей бесплатной версии Wolfram Alpha, но легко может быть сделано в интерактивном онлайн-режиме в программируемом блокноте облачной версии системы Wolfram Mathematica: a) Вводим запрос в Wolfram|Alpha. Система не выдаёт ответ, а приводит интерпретацию запроса (правильную) и пример, как это можно сделать в платной PRO-версии Wolfram|Alpha. b) Щёлкаем по кнопке Open code , в браузере открывается интерактивный блокнот 39 Все выражения в блокноте можно редактировать и затем запускать вычисления нажатием кнопки или комбинацией клавиш Shift-Enter. После вычисления получаем искомый ответ: c) Получим теперь второй столбец матрицы Если требуется добавить, удалить, заменить столбцы матрицы средствами Wolfram|Alpha, можно сначала транспонировать матрицу, затем проделать требуемые операции со строками (которые являются столбцами исходной матрицы), и снова транспонировать матрицу. 2.8. Решение систем линейных уравнений Найти корни следующей системы линейных уравнений: 2x+3y-6z=1, x+y+z=2, -3x+18y-7z=3 Запрос и решение выглядят так: 40 Можно строку запроса записать в более общих формах, используя ключевое слово solve (решить): solve 2x+3y-6z=1, x+y+z=2, -3x+18y-7z=3, или solve {2x+3y-6z=1, x+y+z=2, -3x+18y-7z=3} Корни в виде десятичных дробей рассчитываются отдельно или вместе: Проверка найденных корней (для 1го уравнения): 41 Для решения систем уравнений, заданных в матричном виде, используется запрос LinearSolve: 2.9. Решение систем нелинейных уравнений Найти корни следующей системы линейных уравнений: Система берёт на себя анализ областей, в которых корни существуют, поэтому, хотя задача нелинейная, вводить приближённые значений искомых корней не обязательно (эта задача 42 сама по себе сложная в случае трёх и более уравнений). Запрос и решение (две пары корней для этой систlistмы) выглядят так (уравнения соединяются связкой “И” – “&&”): 2.10. Аппроксимация таблично заданных функций Графическое изображение таблично заданной функции (корреляционное поле в терминах статистического анализа) строится следующим образом: 43 График исходной функции позволяет оценить вид искомой аппроксимирующей зависимости и выбрать наиболее подходящую формулу fa(x), значения которой при заданных x наименее отличаются (в смысле метода наименьших квадратов) от заданных значений y. Подобрать аппроксимирующую зависимость по методу наименьших квадратов позволяет функция fit. Пары исходных точек можно задавать, заключив их в круглые или фигурные скобки. Числа внутри пары и сами пары разделяются запятыми. Можно задать вид желаемой аппроксимирующей зависимости с помощью ключевого слова перед fit: linear fit подбирает линейную функцию ax+b, b*x exponential fit подбирает экспоненциальную зависимость a*e , log fit подбирает логарифмическую зависимость a*ln(b*x), 2 quadratic fit подбирает полином второй степени ax +bx+c, cubic fit подбирает полином третьей степени, polynomial of degree n fit подбирает полином заданной степени n, fit подбирает наилучшую(ие) с точки зрения Wolfram аппроксимирующую(ие) зависимость(и). Пример 1. Аппроксимировать полиномом 5ой степени. таблично заданную функцию 44 Пример 2. Подобрать логарифмическую аппроксимирующую зависимость для пяти пар точек таблично заданной функции: 45 46 Для тех же исходных данных подобрать наилучшие на взгляд Wolfram|Alpha аппроксимирующие зависимости: Если нет других критериев выбора (например, теоретических представлений о взаимосвязи аппроксируемых данных), из представленных результатов выбираем тот, у которого больше скорректированный коэффициент детерминации “adjusted R2”, в данном случае кубический полином. В тех случаях, когда подбираемая аппроксимирующая зависимость не является стандартной, и не известна Wolfram|Alpha, можно использовать целый ряд встроенных функций системы, 47 например, NonlinearModelFit(), FindFit(), и т.д. Вот как решается задача идентификации по экспериментальным данным параметров a и b колеблющегося грузика, движения которого описываются зависимостью f(t)=e-atcos(bt): Полностью строка ввода выглядит так: findfit[{{0,1.1},{2,-0.03},{4,-0.42},{6,0.04},{8,0.17},{10,0.02},{12,-0.1},{14,0.02},{16,0.06}}, [exp[-ax]*cos[bx]],{a,b},x] Экспериментальные пары точек сглаживающая зависимость искомые параметры аргумент сглаживающей зависимости График заданных точек: 48 График аппроксимирующей кривой Ручное наложение двух графиков: 49 Решение этой же задачи с помощью функции NonlinearModelFit[…]: Интересно, для этой задачи не подходит функция Fit[…], она возвращает в точности введённое выражение. К сожалению, возможности системы Wolfram|Alpha в решении задач нелинейной аппроксимации ограничены, так как нет возможности полностью использовать возможности соответствующих функций нелинейной регрессии (в частности, задавать начальные значения искомых параметров). Так, для многих наборов исходных данных в заданиях курсовой работы система будет отказываться решать задачу под разными предлогами – “не понимает вашего запроса”, “превышено время вычислений”, строка запроса превышает допустимую длину, и т.п. В этих случаях можно 50 попытаться сократить количество вводимых пар точек, как показано в примере ниже, но и это не всегда гарантирует получение результата. Пример. Задан набор пар точек {0,1.02},{7,0.41},{14,-0.44},{21,-0.76},{28,-0.27},{35,0.35},{42,0.54},{49,0.26},{56,0.25},{63,-0.52},{70,-0.27},{77,0.25},{84,0.54},{91,0.19},{98,-0.21},{105,-0.24},{112,0.07},{119,0.05},{126,0.31},{133,0.13},{140,-0.14},{147,-0.09}. Сокращаем его так, чтобы строка запроса поместилась в отведённом поле Wolfram|Alpha: FindFit[{{0,1.02},{7,0.41},{14,-0.44},{21,-0.76},{28,-0.27},{35,0.35},{42,0.54}, {49,0.26},{56,-0.25},{63,-0.52},{70,-0.27},{77,0.25},{84,0.54},{91,0.19},{98,-0.21}, {105,-0.24}}, e^-ax*cos(bx),{a,b},x] Получаем результат: 2.11. Интерполяция таблично заданных функций В отличие от задачи аппроксимации задача интерполяции подбирает аналитическую зависимость, значения которой равны исходным значениям таблично заданной функции при соответствующих x. На графике аппроксимирующая кривая проходит вблизи заданных точек, а интерполирующая – точно через них. Наиболее просто осуществляется полиномиальная интерполяция, она сводится к процедуре решения системы линейных уравнений с 51 неизвестными – коэффициентами полинома. Получаемый полином имеет степень на единицу меньше, чем количество заданных пар точек. Запросы к системе начинаются со слов interpolating polynomial или interpolate: Чтобы посчитать значение полинома при промежуточных значениях x, щёлкаем по выражению полинома, при этом полином записывается в окне ввода системы. К полиному дописываем нужное значение x, и, запустив вычисления, получаем интерполированное число: 52 Интерполяционный полином можно найти также, если явно задать подбор аппроксимирующей полиномиальной зависимости (fit) со степенью на единицу меньше, чем количество заданных точек: 53 2.12. Обработка логических выражений Система WolframAlpha успешно справляется с построением таблиц истинности и упрощением логических выражений. Логические операции задаются так: Логическая операция 2∧4 2 ∨4 2⊕4 27 Ввод в строке запроса к Wolfram|Alpha В символьной форме В текстовой форме P && Q, P & Q P || Q, P | Q P and Q P or Q P xor Q not P ~P, !P 2 →4 2 ⟷4 54 P => Q P <=> Q P implies Q P equivalent Q Обрабатывающий запросы пользователей искусственный интеллект системы Wolfram|Alpha имеет некоторый особенности. Чтобы он лучше понимал ваши запросы, рекомендуется обозначать логические переменные строчными согласными буквами, a, b, c и т.д. Логические операции (связки) можно вводить как в символьном, так и в текстовом виде. Символьная форма ввода предпочтительна, т.к. сокращает длину вводимого выражения. Иногда искусственный интеллект системы Wolfram|Alpha отказывается понимать вводимую формулу, в этом случае он становится более понятлив, если сначала ввести ту же формулу с операциями, записанными в текстовом виде. Приоритеты логических операций в Wolfram|Alpha чётко не прописаны, поэтому нужный порядок вычисления логического выражения следует задавать с помощью скобок (круглых или квадратных). Особенно внимательными надо быть, когда в выражении присутствует операция Xor (исключающее или), Wolfram|Alpha может выполнять её перед операциями конъюнкции и даже отрицания. Для обработки и преобразования логических выражений следует вначале вводить их без всяких фраз запроса. Во многих случаях в ответной информации вы найдёте то, что вам нужно, включая минимальные формы (ДНФ, КНФ и другие) и диаграммы ЭйлераВенна. Если надо только упростить логическую формулу, запрос начинается со слова simplify. Для построения таблицы истинности логическое выражение предваряется словами “truth table”. 55 2.13. Решение текстовых логических задач Wolfram|Alpha, среди громадного числа математических алгоритмов, содержит также и средства для решения задач в рамках логики высказываний и логики первого порядка. Это даёт возможность пользователю Wolfram|Alpha переложить на компьютер преобразование и обработку формализованной записи логических задач, часто весьма громоздкой для ручного счёта. 56 2.13.1. Краткий обзор средств Wolfram|Alpha для преобразования логических формул и решения логических уравнения и неравенств Простейший способ решения логической задачи – построение таблицы истинности левой части характеристического уравнения и анализ таблицы с поиском строк, удовлетворяющих условиям задачи. Этот способ неудобен, и даже может быть неприемлем, если число искомых логических переменных велико (5 и более). В этом случае следует пользоваться набором средств системы Mathematica, непосредственный доступ к которым предоставляет Wolfram|Alpha: SatisfiableQ[…] – возвращает значение True, если имеется комбинация переменных , удовлетворяющих (т.е. обращающих в истину) логическое выражение. Пример: SatisfiabilityCount[…] – возвращает количество комбинаций переменных, удовлетворяющих логическое выражение. Пример: SatisfiabilityInstances[…] – возвращает один или несколько наборов переменных, удовлетворяющих логическое выражение. Пример (): 57 Boole[…] – возвращает 1, если выражение в скобках истинно, иначе 0. Пример: Reduce[…] – находит решение системы уравнений и неравенств в переменных, принадлежащих различным доменам. Примеры: 58 MatrixForm[…] и Matrix […], выводит список, являющийся аргументом этой функции, в удобном матричном виде. Списки являются результатами обработки данных многих встроенных функций Wolfram|Alpha, например, SatisfiabilityInstances[…]. Пример: MatrixForm[Boole[SatisfiabilityInstances[[a &&( b => !c)] && [ (c => a) && !b], {a,b,c},10]]] Совершенные дизъюнктивную (СДНФ) и конъюнктивную (СКНФ) нормальные формы легко записать по наборам переменных, удовлетворяющих соответственно исходному логическому выражению и его отрицанию. Пример: найти СДНФ и СКНФ логического выражения (: ∧ ;7 ∨ <) ∧ (:7 ∨ ;) ∨ <̅ . 59 СДНФ = (: ∧ ; ∧ с) ∨ (: ∧ ; ∧ <̅) ∨ ?: ∧ ;7 ∧ <̅@ ∨ (:7 ∧ ; ∧ < ) ∨ (:7 ∧ ; ∧ <̅) ∨ ?:7 ∧ ;7 ∧ <@ ∨ (:7 ∧ ;7 ∧ <̅) (1) (2) (3) (4) (5) (6) (7) СКНФ = :7 ∨ ; ∨ с . Если задача имеет несколько решений (а это следует всегда предполагать), недостаточно найти упрощённую форму левой части характеристического уравнения. Все возможные решения даёт только совершенные нормальные формы (СДНФ и СКНФ) характеристического уравнения. Введённые в Wolfram|Alpha запросы направляются и обрабатываются на серверах, на которых установлена система компьютерной алгебры Mathematica. Степень загрузки серверов существенно влияет на поведение Wolfram|Alpha. Если загрузка сервера велика, Wolfram|Alpha проявляет удивительную тупость, много шансов, что вы либо совсем не получите ответа (причём отказ может выглядеть по-разному: Wolfram вас не понимает, или просит 60 ввести запрос на естественном языке, или зацикливается, и т.п.), либо получите ответ “через раз”. Например, очень полезная для решения систем уравнений и неравенств функция FindInstance[…] выдаёт результат только в редких случаях (когда повезёт), даже для простых примеров из справочной системы. Из опыта общения с Wolfram|Alpha могу посоветовать работать с ним по утрам, вечером он обычно заторможен. Скорость вашего доступа к Интернету также может являться узким местом. 2.13.2. Формализация текстовых логических задач Естественный язык обладает богатым набором средств выражения мыслей. Обратной стороной медали является нечёткость многих высказываний, которые могут быть поняты разными людьми по-своему. Чтобы естественные формулировки были доступны для анализа средствами математической логики, условия задачи должны быть чётко сформулированы на языке логики. Ниже приведены некоторые правила и примеры формализации естественных высказываний на языке пропозициональной логики. Список наиболее часто встречающихся выражений, соответствующих логическим связкам A B A B AB AиB Не только A, но и B B, несмотря на A Как A, так и B A вместе с B A, в то время как B Если A, то B A только тогда, когда B B тогда, когда A Коль скоро A, то B В случае A имеет место B Для B достаточно A Для A необходимо B A, только если B B, если A A влечет B A имплицирует B A, если и только если B Если A, то B, и обратно A, если B, и B, если A A B A ( A B) A B A или B, или оба A или B A, если не B A и/или B (в юридических текстах) Не A (или то, что получится в результате вставки частицы «не» перед глаголом – основным или вспомогательным) A не имеет места A не верно Ни A, ни B A либо B, но не оба Или A, или B Либо A, либо B [иногда] 61 Для A необходимо и достаточно B A равносильно B A тогда и только тогда, когда B A, если не B [иногда] A, кроме случая, когда B [иногда] A или B [иногда] Для импликации полезно помнить следующие правила: Если об утверждении говорится, что оно необходимо, то это утверждение записывается справа от знака импликации, в качестве заключения. Формулой это записывается так: А В. Эту формулу можно прочитать: "Для А необходимо В", или "A только тогда, когда B". Достаточное условие записывается слева от знака импликации, формулой В А и читается "В достаточно для А". В условиях некоторых задач может быть задано несколько высказываний, о которых сказано, что из них только некоторое количество истинно. Например, заданы высказывания a и b, о которых известно, что из них только одно истинно. Это условие формализуется следующим образом: : ⊕ ; = (: ∧ ;7) ∨ (:7 ∧ ;). Такая запись показывает, что значение "истина" принимает или высказывание a или высказывание b, но не оба. Обратите внимание, что условие “только один из трёх“ неправильно записывать в виде : ⊕ ; ⊕ <, правильная формула (: ∧ ;7 ∧ <̅) ∨ (:7 ∧ ; ∧ <̅) ∨ (:7 ∧ ; ∧ <̅). Если всё-таки удобно использовать форму : ⊕ ; ⊕ <, её следует объединить с условием невозможности одновременной истинности всех трёх переменных 77777777777 : ∧ ; ∧ < , т.е. 77777777777 (: ⊕ ; ⊕ <) ∧ : ∧;∧< Если заданы высказывания a, b, c, d, из которых только одно истинно, то это соответствует следующей формуле: ?: ∧ ; ∧ < ∧ A̅ @ ∨ (: ∧ ; ∧ <̅ ∧ A ) ∨ ?: ∧ ;7 ∧ < ∧ A@ ∨ (:7 ∧ ; ∧ < ∧ A ). Условие “только два из четырёх“ формализуется следующим образом: (: ∧ ; ∧ <̅ ∧ A̅ ) ∨ (: ∧ ;7 ∧ < ∧ A̅ ) ∨ (: ∧ ;7 ∧ <̅ ∧ A) ∨ (:7 ∧ ; ∧ < ∧ A̅ ) ∨ (:7 ∧ ; ∧ <̅ ∧ A) ∨ (:7 ∧ ;7 ∧ < ∧ A). 62 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 0 0 1 1 0 1 0 0 0 a;7 <̅d :7bcA̅ ab<̅A̅ 0 0 1 1 a;7 cA̅ 0 0 1 0 :7b<̅d 0 0 0 1 :7;7 cd 0 0 0 0 СДНФ a b c d 2 из 4х В общем случае истинности k переменных из n формула представляет собой СДНФ, получаемую из соответствующей таблицы истинности по общим правилам, и содержит n!/(n-k)! слагаемых (количество размещений из n по k). Например, для условия “только два из четырёх“ получаем Общая формула для условия “только два из четырёх“ формализуется следующим образом: (:7 ∧ ;7 ∧ < ∧ A) ∨ (:7 ∧ ; ∧ <̅ ∧ A) ∨ (:7 ∧ ; ∧ < ∧ A̅ ) ∨ (: ∧ ;7 ∧ <̅ ∧ A) ∨ (: ∧ ;7 ∧ < ∧ A̅ ) ∨ (: ∧ ; ∧ <̅ ∧ A̅ ). Следует также различать условия задач “иногда говорит правду, иногда - ложь” и “одно из двух высказываний истинно, а второе ложно”. В первом случае, если не известно, сказал ли в этот раз человек правду или ложь, нужно в решении проверять обе возможности. Во втором случае оба высказывания соединяются логической связкой исключающее или. Не всякая текстовая логическая задача поддаётся эффективной формализации, в некоторых случаях формальное описание получается таким громоздким и сложным, что решить систему логических уравнений обычными средствами не получается, для них разработаны особые методы, которые здесь не рассматриваются. На другом полюсе находятся те задачи, решение которых становится понятным уже на этапе формализации. Ниже приведены примеры 63 распространённых логических задач школьной информатики, поддающихся формализации и решению средствами Wolfram|Alpha. 2.13.3. Алгоритм решения распространённых логических задач методом характеристического уравнения (Шапиро [12]) 1. Кодирование: обозначение искомых с помощью булевых переменных (принимающих значения 0, 1) и описание содержания этих переменных. 2. Запись условия в виде системы логических уравнений, в правых частях которых – единицы. 3 а м е ч а н и е. Если правая часть уравнения - нуль, то отрицанием левой части она приводится к единице. 3. Образование конъюнкции левых частей системы и приравнивание ее единице. Полученное уравнение называется характеристическим. Оно равносильно исходной системе уравнений: каждое решение системы является решением характеристического уравнения, и наоборот. О б о с н о в а н и е. Пусть некоторый кортеж значений переменных является решением системы уравнений. При подстановке в характеристическое уравнение он обращает каждый сомножитель конъюнкции в единицу, следовательно, и конъюнкция равна единице. Верно и обратное - каждое решение характеристического уравнения (обращающее конъюнкцию в единицу) обращает в единицу все сомножители конъюнкции, следовательно, удовлетворяет системе уравнений. 4. Приведение левой части характеристического уравнения к ДНФ (в частности, к СДНФ). З а м е ч а н и е (Шапиро). При раскрытии скобок в левой части характеристического уравнения по второму распределительному закону значительные упрощения получаются за счет использования законов противоречия, исключенного третьего, исключения повторений (сомножителей, слагаемых), а также поглощения: Последнее словесно читается так: в ДНФ слагаемое, входящее в состав другого слагаемого, уничтожает (поглощает) последнее. Например, 64 При использовании Wolfram|Alpha нет необходимости делать это вручную. 5. Приравнивание каждого слагаемого ДНФ, независимо от других, единице и извлечение из уравнений (левые части которых конъюнкции переменных или их отрицаний) значений переменных. Каждый их набор является решением задачи. О б о с н о в а н и е. Каждый набор найденных значений переменных обращает вдиницу хотя бы одно слагаемое дизъюнкции и одновременно дизъюнкцию, т. е. является решением характеристического уравнения. З а м е ч а н и е. Если после упрощений в ДНФ осталось одно слагаемое, задача имеет единственное решение, если более одного несколько решений. В случае, когда в левой части характеристического уравнения все слагаемые уничтожаются, задача не имеет решения, противоречива (данные не совместны). Возможен также подход на основе характеристических уравнений второго типа - образованием дизъюнкций левых частей уравнений системы, правые части которых - нули, и приведением ее к КНФ. 2.13.4. Примеры решения логических задач Все задачи взяты из Интернета и приведены здесь с небольшими редакторскими изменениями, не искажающими их смысл. ЗАДАЧА 1 Сколько и каких различных решений имеет уравнение ((J → K) → (M ∧ N ∧ L)) ∧ ((J ∧ ¬K) → ¬ (M ∧ N ∧ L)) ∧ (M → J) = 1 где J, K, L, M, N – логические переменные? Решение Решение этой задачи иллюстрирует применение различных средств Wolfram|Alpha. Запись левой части исходного уравнения на языке Wolfram|Alpha: ((j => k) => (m && n || l)) && ((j && !k) => !(m && n && l)) && (m => j) Упрощение исходного выражения 65 Результат упрощения j Xor (j && k) Xor (j && m && n && l) Сколько различных решений имеет уравнение? SatisfiabilityCount[((j => k) => (m && n && l)) && ((j && !k) => !(m && n && l)) && (m => j)] Какие наборы переменных j,k,l,m,n являются решениями? Вывод значений логических переменных, являющихся решениями исходного уравнения, в виде 0-ложь и 1-истина: Boole[SatisfiabilityInstances[j Xor (j && k) Xor (j && m && n && l), {j,k,l,m,n},8]] 66 Представление корней уравнения в удобном виде: column[Boole[SatisfiabilityInstances[j Xor (j && k) Xor (j && m && n && l), {j,k,l,m,n},8]],5] ЗАДАЧА 2 Мама, прибежавшая на звон разбившейся вазы, застала всех трех своих сыновей в совершенно невинных позах: Саша, Ваня и Коля делали вид, что происшедшее к ним не относится. Однако футбольный мяч среди осколков явно говорил об обратном. – Кто это сделал? – спросила мама. Коля не бил по мячу, – сказал Саша. – Это сделал Ваня. Ваня ответил: – Разбил Коля, Саша не играл в футбол дома. Так я и знала, что вы друг на дружку сваливать будете, рассердилась мама. Ну, а ты что скажешь? – спросила она Колю. Не сердись, мамочка! Я знаю, что Ваня не мог этого сделать. А я сегодня еще не сделал уроки, – сказал Коля. Оказалось, что один из мальчиков оба раза солгал, а двое в каждом из своих заявлений говорили правду. Кто разбил вазу? 67 Решение Обозначения: С - вазу разбил Саша В - вазу разбил Ваня К - вазу разбил Коля Утверждения мальчиков (*П – правда, *Л - ложь): Саша: СП=!К && В, СЛ ложь !(!К В)=К || !В Ваня: ВП=К && !С, ВЛ ложь !(К && !С)=!К || С Коля: КП=!В, КЛ ложь !(!В)=В Возможные варианты СП и ВП и КЛ !К && В && К && !С && B, simplify !k && b && k && !c && b даёт FALSE СП и ВЛ и КП !К && В && (!К||С) && !В, simplify !k && b && (!k||c) && !b даёт FALSE СЛ и ВП и КП (К || !В) && К && !С && !В, simplify (k || !b) && k && !c && !b даёт !b&&!c&&k , т.е. не Ваня, не Саша, а Коля разбил вазу. ЗАДАЧА 3 В соревновании по настольному теннису в полуфинал вышли четыре спортсмена: Антон, Василий, Семен и Егор. Собравшиеся перед телевизором семья высказала такие предположения относительно результатов соревнований: Папа: Антон – первый, а Егор - последний. Мама: Егор – первый, а Семен - второй. Сын: Первый – Василий, а Семен - третий. Когда награждали победителей, оказалось, что каждый из членов семьи был прав только в одном своем утверждении. Какие места заняли Антон, Василий, Семен и Егор? Решение Обозначения простых высказываний: A Антон первый B Егор четвёртый C Егор первый D Семён второй E Василий первый F Семён третий 68 Высказывания членов семьи: Папа: A && E Мама: C && D Сын: E && F Запрет попадания спортсменов на одно и то же место: Антон, Егор и Василий на первое место (A && !C && !E) || (!A && C && !E) || (!A && !C && E) Егор на второе и четвёртое место B Xor C Семён на второе и третье место D Xor F Все условия вместе: (A xor B) && (C xor D) && (E xor F) && ((A && !C && !E) || (!A && C && !E) || (!A && !C && E)) && (B xor C) && (D xor F) Результат упрощения означает: A ложно - Антон не 1, B истинно - Егор 4, C ложно - Егор не 1, D истинно - Семён 2, E истинно - Василий 1 F ложно - Семён не 3 Ответ: Егор 4, Семён 2, Василий 1, Антону остаётся 3. ЗАДАЧА 4 В процессе составления расписания уроков учителя высказали свои пожелания. Учитель математики высказал пожелание проводить первый или второй урок, учитель информатики – первый и третий, а 69 учитель физики – второй или третий урок. Сколько существует возможных вариантов расписания и каковы они? Решение Обозначения пожелания учителей: Учитель математики: a - математика первый урок, b математика второй урок, Учитель информатики: с - информатика первый урок, d информатика третий урок, Учитель физики: h - физика второй урок, k - физика третий урок. Условия непопадания разных предметов на одно время: Математика и информатика !(a && c), Математика и физика !(b && h), Информатика и физика !(d && k) Все условия вместе: [(a Xor b) && (c Xor d) && (h Xor k) && !(a&&c) && !(b&&h) && !(d&&k) Сколько вариантов расписания существует? SatisfiabilityCount[(a Xor b) && (c Xor d) && (h Xor k) && !(a&&c) && !(b&&h) && !(d&&k), {a,b,c,d,h,k}] Какие варианты расписания существуют? Boole[SatisfiabilityInstances[(a Xor b) && (c Xor d) && (h Xor k) && !(a&&c) && !(b&&h) && !(d&&k), {a,b,c,d,h,k}, 2]] Ответы: МФИ и ИМФ 70 ЗАДАЧА 5 Два старых друга, Джек и Боб, встретились после долгого перерыва. Состоялся такой разговор: Джек: Привет, ну как ты? Боб: Неплохо, я женился, и у меня уже три ребёнка. Джек: Здорово! А сколько им лет? Боб: Произведение их возрастов равно 72, а сумма их возрастов равна дню твоего рождения. Джек: Круто…! Но я всё равно не понял. Боб: Мой старший сын только что начал заниматься в музыкальной школе. Джек: Ну теперь всё понятно! Какого возраста дети у Боба? Дополнительные сведения, косвенно упомянутые в условии задачи, и известные всем: Занятия музыкой начинаются с 8 лет, День рождения находится в пределах от 1 до 31 Решение Обозначения: a, b, c – возрасты детей. Условия задачи: a*b*c = 72 a+b+c <= 31 a=8 a > b >c >0 Ответ: 8, 3 и 3 года. ЗАДАЧА 6 Друзья Андрея, Владимира (В) и Сергея (С) обсуждали их шансы на победу в шахматном турнире. Первый сказал, что победит Андрей или Сергей, второй заявил, что ни Андрею, ни Владимиру победы не 71 видать. Третий был уверен, что победит Андрей или Владимир. В итоге оказалось, что угадал один из них. Кто из трех шахматистов победил? Решение Обозначения логических переменных: A=1 победил Андрей В=1 победил Владимир С=1 победил Сергей Высказывания болельщиков: 1. A ∨C , на языке Wolfram|Alpha A||C 2. 777777777 D ∨ E = D̅ ∧ E7, на языке Wolfram|Alpha !(A || B) = !A && !B 3. A ∨B, на языке Wolfram|Alpha A||B Формулировка высказываний 1 и 3 допускает одновременное занятие 1го места шахматистами A, C и A, B. Чтобы исключить эту возможность, вводится дополнительное условие “только один из трёх”: 4. (D ∧ E7 ∧ F̅ ) ∨ (D̅ ∧ E ∧ F̅ ) ∨ (D̅ ∧ E7 ∧ F) , на языке Wolfram|Alpha [A && !B && !C || !A && B && !C || !A && !B && C] Условие задачи, что оказался прав только один из трёх болельщиков, записывается аналогично: 5. (1*27*37)+ (17*2*37)+ (17*27*3), или 7777777777 7777777777 (D ∨ F ) ∧ (D ∨ E) ∧ (D ∨ E)] [(D ∨ F) ∧ (D ∨ E) ∧ (D ∨ E)]∨ [(D ∨ F) ∧ (D̅ ∧ E7) ∧ 7777777777 (D ∨ E)] ∨ [7777777777 На языке Wolfram|Alpha [(A||C)&&(A||B)&&!(A||B)] || [!(A||C)&&(!A&&!C)&&!(A||B)] || [!(A||C)&&(A||B)&&(A||B)] Упрощение даёт !A && !C Вместе условия 4, 5 [A && !B && !C || !A && B && !C || !A && !B && C] && !A && !C упрощаются до D̅ ∧ E ∧ F̅, это означает, что победу одержал Владимир. 72 ЗАДАЧА 7 Три ученика, Саша, Коля и Вова, прогуляли информатику. Когда их спросили, кому пришла в голову эта идея, они ответили следующее: Саша: «Я никогда не призывал к прогулу, это была идея Коли». Коля: «Я никогда не предложил бы это первым, во всем виноват Вова». Вова: «Эта идея пришла в голову Коле. Я просто пошел за компанию». Внутренним чутьем учитель почувствовал, что двое учеников говорят правду наполовину, а один – лжет. Кто из учеников был инициатором прогула? Решение Обозначим логические переменные: В = 1 – Вова инициатор, К = 1- Коля инициатор,, S =1 - Саша инициатор. (*П-правда, *ПП-полуправда, *Л-ложь) J *В J , ВЛ=77777777 Высказывание Вовы: ВП= К*E7 , ВПП=К*В V К К ∗ E7 , 7777777 J *В, КПП= К*В V К J *В J , КЛ= K J ∗ E, Высказывание Коли: КП= К J V S*К, СЛ=7777777 JL ∗ K . Высказывание Саши: СП= L̅*К, СПП= L̅*К 73 Запишем эти высказывания на языке Wolfram|Alpha. Так как Wolfram|Alpha чаще рассматривает в качестве переменных строчные буквы, будем дальше использовать их вместо заглавных (иначе Wolfram может отказаться понимать наши запросы) Вова: ВП= k&&~b, ВПП=(k&&b) || (~k&&~b), ВЛ=~(k&&~b), Коля: КП=~k&&b, КПП=(k&&b) || (~k&&~b), КЛ=~(~k&&b), Саша: СП=~s&&k, полуправда (s&&k) || (~s&&~k), СЛ=~(~s&&k). Возможны следующие варианты полуправды двух учеников и лжи третьего: 1. Саша и Коля говорят полуправду, Вова лжёт ((s&&k) || (~s&&~k))&&((k&&b) || (~k&&~b))&&~(k&&~b), упрощение даёт !b&&!k&&!s 2. Саша и Вова говорят полуправду, Коля лжёт ((s&&k) || (!s&&!k))&&((k&&b) || (!k&&!b))&&!(!k&&b), упрощение даёт !b&&!k&&!s 3. Вова и Коля говорят полуправду, Саша лжёт: ((k&&b) || (~k&&~b))&&((k&&b) || (~k&&~b))&& ~(~k&&b) Дополнительно нужно задать условие, что инициатором прогула был один из трёх учеников: J *L̅ V E7 *K*L̅ V E7 *K J *S, 4. B*K на языке Wolfram|Alpha (b&&!k&&!s) || (!b&&k&&!s) || (!b&&!k&&s) Решением задачи будет тройка переменных b, k, s, одновременно удовлетворяющих условию 4 и одному из условий 1, 2, 3. 1ое условие (s && k || ~s && ~k) && (k && b || ~k && ~b) && (~k || ~b) даёт !b&&!k&&!s 2ое условие ((s && k) || (~s && ~k)) && ((k && b) || (~k && ~b)) && ~(~k && b) даёт !b&&!k&&s 3е условие 74 ((k&&b) || (~k&&~b))&&((k&&b) || (~k&&~b))&& ~(~s&&k) даёт (b&&k&&s || !b&&!k) При каких значениях переменных s, k, b эти условия истинны? Совместно 4 и 1: [(b&&!k&&!s) || (!b&&k&&!s) || (!b&&!k&&s)] && !b&&!k&&!s является противоречием (тождественно ложно), т.е. не решает задачу Совместно 4 и 2: [(b&&!k&&!s) || (!b&&k&&!s) || (!b&&!k&&s)] && !b&&!k&&s упрощается до !b && !k && s, откуда следует ответ задачи: инициировал прогул Саша. Совместно 4 и 3: [(b&&!k&&!s) || (!b&&k&&!s) || (!b&&!k&&s)] && (b&&k&&s || !b&&!k) также упрощается до !b && !k && s, откуда следует тот же ответ: инициировал прогул Саша. Ответ: Саша ЗАДАЧА 8 На одной улице в ряд стоят 4 дома, в которых живут 4 человека: Семен (S), Николай (N), Артур (A) и Роман (R). Известно, что каждый из них владеет ровно одной из следующих профессий: Врач (V), Художник (H), Егерь (G) и Тренер (T), но неизвестно, кто какой, и неизвестно, кто в каком доме живет. Однако известно, что 75 Запись на естественном языке 1. Егерь живет левее Тренера; 2. Врач живет правее Тренера; 3. Художник живет не с краю; 4. Егерь живет рядом с Художником; 5. Роман живет рядом с Тренером; 6. Семен – не Егерь; 7. Артур живет правее Романа; 8. Семен живет не рядом с Романом. Формализованная запись G<T V>T H>1 and H<4 |G-H|=1 |R-T|=1 S!=G A>R |S-R|>1 Выясните, кто какой профессии, и кто где живет. И дайте ответ в заглавных буквах имён людей слева направо по номерам занимаемых ими домов. Решение Переменные S, N, A, R, V, H, E, T – номера домов (целые положительные числа), в которых живут соответствующие люди. Вначале найдём номера домов, в которых живут персонажи разных профессий, решив систему первых четырёх условий: Reduce[G<T&&V>T&&1<H<4&&|G-H|==1, {G,T,V,H}, Integers] Из первого результата следует единственный соответствующий условиям задачи вариант расселения: G=1, H=2, T=3, V=4, т.е. Егерь 76 1, Художник 2, Тренер 3, Врач 4. Все остальные результаты не подходят, поскольку номера домов получаются либо вне пределов допустимого диапазона 1..4, либо являются нецелыми. Найдём теперь номера домов, в которых живут персонажи с разными именами, решив систему условий 5-8 с учётом известных значений переменных G, H, T, V: Reduce[{5>S>1,5>A>R>0,|S-R|>1,|R-3|=1},{S,A,R},Integers] Первый результат не подходит, т.к. получается A не целое. Из второго результат следует, что S=4, R=2, A=3, N=1. Ответ: НРАС. ЗАДАЧА 9 (Шапиро) Пятеро друзей решили записаться в кружок любителей логических задач: Андрей (А), Борис (B), Виктор(V), Григорий (G), Дмитрий (D). Но староста кружка предложил им выдержать вступительный экзамен. «Вы должны приходить к нам по возможности больше вечеров, однако в разных сочетаниях, соблюдая следующие условии: 1. Если A приходит вместе с D, то B должен присутствовать. 2. Если D отсутствует, то B должен быть, а V пусть не приходит. 3. A и B не могут одновременно ни присутствовать, ни отсутствовать. 4. Если придет D, то G пусть не приходит. 77 5. Если B отсутствует, то D должен присутствовать, но это в том cлучае, если не присутствует V. Если же V присутствует при отсутствии B, то D приходить не должен, а G должен прийти». Сколько вечеров и в каком составе друзья могли прийти? 78 Решение Обозначения. 1, если человек присутствует на вечере X= (X = A, B, V, G, D) 0 – в противном случае Система логических уравнений: 1. a && d => b, упрощение !a||b||!d 2. !d => b && !v, упрощение (b &&!v) || d 3. !(a <=> b) , упрощение (!a || !b) && (a || b) 4. d => !g, упрощение !d || !g 5. (!b => (!v => d)) && (v && !b) => !d && g, упрощение (b||!d||!v) && (b||g||!v) Левая часть характеристического уравнения [a && d => b]&&[ !d => b && !v]&&[!(a <=> b)]&&[ d => !g]&&[ (!b => (!v => d)) && (v && !b) => !d && g] В упрощённом виде: Количество решений: 79 Корни характеристического уравнения: MatrixForm[Boole[SatisfiabilityInstances[[a && d => b]&&[ !d => b && !v]&&[!(a <=> b)]&&[ d => !g]&&[ (!b => (!v => d)) && (v && !b) => !d && g], {a,b,d,g,v},4]]] Ответы: 4 вечера в следующих составах: b,d,v b,d b,g b ЗАДАЧА 10 Первый вариант условия задачи Аня, Вика и Сергей решили пойти в кино. Максим высказал предположение: 1. Аня пойдет в кино, если пойдут Вика и Сережа, 2. Аня и Сережа в кино пойдут вместе или оба останутся дома, 3. Чтобы Сережа пошел в кино, необходимо, чтобы пошла Вика. Когда ребята пошли в кино, оказалось, что из 3-х утверждений Максима только 2 истины. Кто из ребят пошел в кино? Решение Обозначения: a=1 Аня пойдёт в кино v= 1 Вика пойдёт в кино s= 1 Сергей пойдёт в кино Условия задачи: 80 A. v&&s => a B. a<=>s C. s=>v Возможные варианты - два утверждения из трёх истинны: J ((v&&s)=>a)&&( a<=>s)&&(!( s=>v)), 1. A&&B&&M J &&C ((v&&s)=>a)&&(!( a<=>s))&&( s=>v), 2. A&&N J &&B&&C (!(v&&s)=>a)&&( a<=>s)&&( s=>v). 3. O Их логическая сумма ((v&&s)=>a)&&( a<=>s)&&(!( s=>v)) || ((v&&s)=>a)&&(!( a<=>s))&&( s=>v) || (!(v&&s)=>a)&&( a<=>s)&&( s=>v). Упрощение даёт a&&!s || a&&!v Требование “два утверждения из трёх истинны” справедливо и для случая, когда все три утверждения истинны. Последний случай надо отсечь, чтобы удовлетворить условию задачи” только два из трёх истинны”, иными словами, отсечь невозможность того, что все три утверждения одновременно истинны. Это приводит к условию 4. A && B && С = 0, или, по закону де-Моргана, !A || !B || !C = 1, на языке Wolfram ![(v&&s)=>a)] || ![a<=>s] || ![ s=>v] Характеристическое уравнение (a&&!s || a&&!v) && (!((v&&s)=>a) || !(a<=>s) || !(s=>v)) . Решение задачи в среде Wolfram|Alpha: 81 Ответы: Идут Сергей и Аня Идут Вика и Аня Идёт одна Аня Проверка по таблице истинности v 0 0 0 0 1 1 1 1 s 0 0 1 1 0 0 1 1 a 0 1 0 1 0 1 0 1 (A) (B) (C) Ответы (v&&s)=>a a<=>s s=>v Только 2 из 3x 1 1 1 0 1 0 1 1 1 0 0 0 1 1 0 1 1 1 1 0 1 0 1 1 0 0 1 0 1 1 1 0 Второй вариант условия задачи 82 Аня, Вика и Сергей решили пойти в кино. Максим высказал предположение: 1. Аня пойдет в кино, только если пойдут Вика и Сережа, 2. Аня и Сережа в кино пойдут вместе или оба останутся дома, 3. Чтобы Сережа пошел в кино, необходимо, чтобы пошла Вика. Когда ребята пошли в кино, оказалось, что из 3-х утверждений Максима только 2 истины. Кто из ребят пошел в кино? Решение Обозначения: a=1 Аня пойдёт в кино v= 1 Вика пойдёт в кино s= 1 Сергей пойдёт в кино Условия задачи: A. a=>v&&s B. a<=>s C. s=>v Возможные варианты - два утверждения из трёх истинны: J (a=>(v&&s))&&( a<=>s)&&(!( s=>v)), 1. A&&B&&M J &&C (a=>(v&&s))&&(!( a<=>s))&&( s=>v), 2. A&&N J &&B&&C !(a=>(v&&s))&&( a<=>s)&&( s=>v). 3. O Их логическая сумма (a=>(v&&s))&&( a<=>s)&&(!( s=>v)) || (a=>(v&&s))&&(!( a<=>s))&&( s=>v) || !(a=>(v&&s))&&( a<=>s)&&( s=>v), упрощение даёт !a&&s&&v Требование “два утверждения из трёх истинны” справедливо и для случая, когда все три утверждения истинны. Последний случай надо отсечь, чтобы удовлетворить условию задачи” только два из трёх истинны”, иными словами, отсечь невозможность того, что все три утверждения одновременно истинны. Это приводит к условию 4. A && B && С = 0, или, по закону де-Моргана, !A || !B || !C = 1, на языке Wolfram ![(v&&s)=>a)] || ![a<=>s] || ![ s=>v] Теперь всё вместе !a && s && v && (!((v&&s)=>a)) || !(a<=>s) || ![9s=>v)) Решение в среде Wolfram|Alpha: 83 Ответ: Идут Вика и Сергей 84 2.14. Системы счисления Число A в системе счисления с основанием b задаётся так: A base b. Для десятичных чисел систему счисления можно не указывать, она принимается по умолчанию. Для перевода числа A, заданного в системе счисления p, в систему счисления по основанию q, применяется запрос convert (A base p) to base q. Слово convert - не обязательное, для распространённых систем счисления вместо указания основания числом можно записывать его словесно. Можно проводить арифметические вычисления с числами, заданными в различных системах счисления (в том непозиционной римской), и получать результат в заданной системе счисления. Примеры: Запрос 219 to binary 73.18 to ternary 73.18 to quaternary 73.18 to octal 73.18 to hexadecimal 28.35 to base 11 (28 base 16)+(30 base 5) ((28 base 16)+(30 base 5)) to base 7 (1101 base 2) - (111111 base 2) XXXI - IV XXXI*IV to decimal Интерпретация Результат 110110112 55 1067 -1100102 XXVII 124 85 Кроме того, цифры представления числа в различных системах счисления можно получить следующим образом: IntegerDigits[n,b] для целого числа n, заданного в 10-ой системе счисления, выводит список цифр в системе счисления с основанием b. Примеры: 4210=11203 4210=1010102 IntegerString[n,b] для целого числа n, заданного в 10-ой системе счисления, выводит в виде строки цифры в системе счисления по основанию b. Примеры: 4210=11203 4210=1010102 RealDigits[x,b,len] для нецелого числа x, заданного в 10-ой системе счисления, выводит в виде строки цифры в системе счисления по основанию b. Необязательный аргумент len задаёт количество выводимых цифр числа. Примеры: 86 Заданное число 34.8710 Заданное число 67.1310 Расшифровка вывода: 0.1000101101111010111000…*26= 100010.1101111010111000…2 Расшифровка вывода: 0.10000110010000101000111101011100…*27= 1000011.0010000101000111101011100…2 FromDigits[...] возвращает целое число в десятичной системе счисления по заданным в виде списка цифрам его представления по заданному основанию системы счисления. 11203=4210 1010102=4210 2.15. Внутреннее представление чисел в компьютере Внутренний вид числа X с плавающей запятой/точкой в формате одинарной точности (single precision 32 бита) с порядком байтов от старшего к младшему (big endian) стандарта IEEE 754 находится с помощью запроса X IEEE single precision big endian, Например, для X=-5.25 имеем: 87 То же число в формате двойной точности (double precision 64 бита) с порядком байтом от младшего к старшему (little endian) выводится по запросу -5.35 IEEE double precision little endian Дополнительный код целого числа Y со знаком (signed) в однобайтовом формате (8-bit) определяется по запросу convert Y signed 8-bit integer Например, для Y=-5 получим результат 88 2.16. Битовые операции Операция НЕ И ИЛИ Символическое обозначение ~ & | Ввод BitNot[61] Результат 00111101 11000010 (допол.код) -6210 Искл. ИЛИ Сдвиг влево ^ BitAnd[61,15], BitOr[61,15], BitXor[61,15] 61 & 15 61|15 111101 001111 001101 1310 111101 1111 111111 6310 Сдвиг вправо << >> BitShiftLeft[32, 3] BitShiftRight[32, 3] 111101 100000<<3 100000>>3 1111 100000000 100 110010 25610 410 5010 3. НАСКОЛЬКО МОЖНО ВЕРИТЬ РЕЗУЛЬТАТАМ, ВЫДАННЫМ КОМПЬЮТЕРОМ? Ответ прост: БЕЗ ВСЕСТОРОННЕГО АНАЛИЗА ВЕРИТЬ НИЧЕМУ НЕЛЬЗЯ. Причин ошибочных результатов расчётов может быть несколько. Во-первых, любые сложные компьютерные программы, в особенности такие, как операционные системы, системы компьютерной алгебры или табличные процессоры, содержат ошибки, которые заложены на этапе создания программ, и не были известны и исправлены на момент их проявления. Некоторые из этих 89 ошибок могут иметь серьёзные последствия, если они возникли при проведении ответственных инженерных расчётов и не были замечены расчётчиками. Разработчики программ, особенно бесплатных, чётко сознают это, и, чтобы исключить претензии к ошибочной работе своих программ, отражают отсутствие ответственности за своё детище в лицензии. Например, вот каким абзацем завершается текст лицензии на использование полностью бесплатной программы Smath Studio:” ПРОГРАММА SMATH STUDIO РАСПРОСТРАНЯЕТСЯ "КАК ЕСТЬ". АВТОР НЕ ПРЕДОСТАВЛЯЕТ НИКАКИХ ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ. ВЫ ИСПОЛЬЗУЕТЕ ПРОГРАММУ НА СВОЙ СТРАХ И РИСК. АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ПОТЕРИ ДАННЫХ, ПОВРЕЖДЕНИЯ, ПОТЕРИ ПРИБЫЛИ ИЛИ ЛЮБЫЕ ДРУГИЕ ВИДЫ ПОТЕРЬ, СВЯЗАННЫЕ С ИСПОЛЬЗОВАНИЕМ ИЛИ НЕПРАВИЛЬНЫМ ИСПОЛЬЗОВАНИЕМ ДАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ.” Серьёзные производители коммерческих программных продуктов, например, Microsoft, дают гарантию, хотя и ограниченную. Фрагмент из условия лицензионного соглашения на использование программного обеспечения Microsoft Office 2016 для настольного компьютера: ОГРАНИЧЕННАЯ РОЗНИЧНАЯ ГАРАНТИЯ Microsoft гарантирует, что должным образом лицензированное программное обеспечение будет в основном функционировать в соответствии с материалами Microsoft, которые его сопровождают. Настоящая гарантия не распространяется на проблемы, вызванные вашими действиями или несоблюдением вами инструкций, а также событиями, которые справедливо считаются независящими от Microsoft. Во-вторых, пользователи программ могут неправильно понимать их возможности, и применять их для задач, к решению которых эти программы не предназначены. В-третьих, разработчики могли заложить в программу для какой-то вычислительной задачи алгоритм, работающий только для определённого набора исходных данных, и не применимый в общем случае, не уведомив пользователя об этом или сославшись на труднодоступный/труднопонимаемый источник информации. В-четвёртых, программа может решать широкий круг задач, но требует от пользователя квалифицированной 90 настройки на основе понимания тех численных методов, которые она использует, а пользователь не соответствует этим требованиям. В-пятых, … Поэтому СЛЕДУЕТ ВЗЯТЬ ЗА ПРАВИЛО НЕ ВЕРИТЬ СЛЕПО ВСЕМ ЧИСЛАМ, КОТОРЫЕ ВЫДАЛ КОМПЬЮТЕР, А ПРОВЕРЯТЬ РЕЗУЛЬТАТЫ РАЗЛИЧНЫМИ СПОСОБАМИ, В ТОМ ЧИСЛЕ СРАВНЕНИЕМ С ТЕМ, ЧТО НАСЧИТАЛА ДЛЯ ЭТОЙ ЖЕ ЗАДАЧИ ДРУГАЯ ПРОГРАММА. Здесь Wolfram|Alpha может быть хорошим подспорьем для MS Excel, LibreOffice Calc и Smath Studio. Ниже приведено несколько примеров сложных ситуаций, которые могут иметь место при решении задач курсовой работы. 3.1. Пример 1. Экспоненциальная аппроксимация таблично-заданной функции Расчёт в среде MS Excel x y a*exp(b*x) 9,516 0 12,04 7,569 1 5,68 6,020 2 4,75 4,789 3 3,19 3,809 4 3,23 3,029 5 2,71 2,410 6 3,25 1,917 7 3,05 1,524 8 2,95 1,212 9 3,18 22,439 СуммКвРазн a b 9,516 -0,229 Прямой МНК Совпадает с Wolfram|Alpha Расчёт с помощью Wolfram|Alpha Совпадает с расчётом прямым МНК в Excel fit exponential ((0,12.04),(1,5.68),(2,4.75),(3,3.19),(4,3.23),(5,2.71),(6,3.25),(7,3.05),(8,2.95),(9,3.18)) 91 К сожалению, как видно по графикам, результаты Excel и Wolfram|Alpha неудовлетворительны. Схожесть термина “экспоненциалный” в различных программах вводит пользователя в заблуждение. MS Excel и Wolfram|Alpha под экспоненциальной зависимостью понимают y=aebx с двумя неизвестными параметрами a и b. Составители заданий курсовой работы под экспоненциальной зависимостью понимали функцию aebx+c с тремя неизвестными параметрами a, b и c. Такая зависимость реализована в функции экспоненциальной регрессии среды MathCad 2000 Professional. Поэтому расчёт в среде MathCad, в отличие от Excel и Wolfram|Alpha, даёт хороший результат. 92 3.2. Пример 2. Экспоненциальная аппроксимация табличнозаданной функции В тех случаях, когда значения таблично заданной функции принимают отрицательные значения для некоторых значений аргумента, Excel либо вообще отказывается строить аппроксимирующую линию тренда, либо делает это неправильно. Такая же ситуация может возникнуть и в Wolfram|Alpfa. Это связано с тем, что искомые параметры по методу наименьших квадратов ищутся не для исходной зависимости P = : (R ), а для прологарифмированного выражения ln(P) = ln(:) + ; , не допускающего отрицательных значений аргумента логарифмической функции (см., например, http://mathworld.wolfram.com/LeastSquaresFittingExponential.html). В нижеприведенном примере удовлетворительный результат даёт только MathCad. Расчёт в среде Excel Средство “линия тренда” Excel и МНК не могут правильно решить эту задачу в рамках зависимости : (R ), требуется ввести свободный член “c”: : (R ) + с, который в формулах линий тренда не предусмотрен, однако реализован в функции экспоненциальной регрессии среды MathCad 2000 Professional. Wolfra|Alpha тоже не справляется с этой задачей. x 0 1 y a*exp(b*x) 19,64 1,97E+01 4,32E+00 2 2 -1,06 9,50E-01 3 -1,48 4 -2,3 5 -1,81 6 -2,38 7 -1,83 8 -1,89 9 -1,77 СуммКвРазн 2,09E-01 4,58E-02 1,01E-02 2,21E-03 4,86E-04 1,07E-04 2,34E-05 3,68E+01 a b 19,679 -1,516 Прямой МНК Не совпадает с Wolfram|Alpha 93 Расчёт с помощью Wolfram|Alpha при решении “в лоб” Wolfram|Alpha просто врёт Расчёт с помощью MathCad 2000 Professional даёт хороший результат, опять за счёт наличия свободного (не зависящего от x) параметра c. 94 3.3. Пример 3. Минимум функции 2х переменных arctg[ln(3x2+12x+4y2-6y+36)] Решение с помощью Wolfram|Alpha Решение в среде SMath Studio. SMath Studio правильно находит значения аргументов функции в точке минимума, но не может правильно посчитать минимальное значение функции 95 3.4. Пример 4. Решение системы 3х линейных уравнений с 3мя неизвестными. Решить систему уравнений M* ̅ =N, где M=A*(B/220), 2 5 6 A= 1 8 3 9 4 7 Диапазоны ячеек: B2:D4 B= 231 140 -157 231 231 160 180 -137 -117 G2:I4 1 N= 2 3 P2:P4 Формула Excel {=МУМНОЖ(МОБР(МУМНОЖ(B2:D4;(G2:I4)/220));P2:P4)} Результат решения ̅ = -0,5 ошибочен, т.к. определитель 0 матрицы M равен нулю, но 0,5 Excel на это не обращает внимания Формула =МОПРЕД(МУМНОЖ(B2:D4;(G2:I4)/220)) даёт результат -3,9968E-15 В этом, специально подобранном примере Excel, как может (и неправильно), решает некорректно поставленную пользователем задачу, не сообщая при обращении матрицы о том, что её определитель равен нулю. Серьёзные математические программы, предупреждают о нулевом определителе: например, Mathematica, всегда 96 3.5. Пример 5. Интерпретация логических формул в Wolfram|Alpha В этих примерах Wolfram|Alpha неоднозначно трактует записанные поразному эквивалентные логические выражения. Надо быть очень внимательным! 3.6. Пример 6. Колеблющийся грузик, определение параметров механической системы по экспериментальным замерам Задача определения параметров T и U колеблющегося на пружине грузика с диссипацией P( ) = V cos(U ) по замеренным в эксперименте парам точек (x, y), где x – время, решается программами LibreOffice Calc, MS Excel, и Mathsoft Mathcad. Используется метод наименьших квадратов, поиск минимума целевой функции – суммы квадратов разностей расчётных и экспериментальных координат грузика осуществляется нелинейным решателем 97 в Calc, надстройкой поиск решения в Excel, и функцией Genfit() в Mathcad. Начальные значения параметра затухания T и частоты колебаний U для решения задачи в табличных процессорах определялись визуально исходя из степени совпадения расчётного и экспериментального графиков движения грузика, для Mathcad выбирались более свободно. Никаких явных ограничений на пределы изменения искомых параметров ни в одной из программ не налагалось. Решение в MS Excel, T = −0.013, U = 0.157: Функция y(x), рассчитанная по найденным значениям T = −0.013, U = 0.157 с более мелким шагом по x (столбцы D и E), и отображённая на нижнем графике, показывает хорошее совпадение с экспериментом. 98 Решение в LibreOffice Calc, T = −0.013, U = 0.628: Функция y(x), рассчитанная по найденным значениям T = −0.013, U = 0.628 с более мелким шагом по x (столбцы D и E), и отображённая на нижнем графике синим цветом, показывает, что найденное значение частоты колебаний U значительно отличается от частоты в эксперименте (красная кривая), и определённые расчётом значения параметров нельзя рассматривать как верные. При этом на исходном графике (верхний график) найденные параметры обеспечивают хорошее визуальное совпадение расчётных и экспериментальных точек, что без дополнительного анализа вводит расчётчика в заблуждение. 99 Решение в Mathcad дало значения T = −0.013, U = 0.157 , что совпадает с результатами MS Excel: Была проанализирована целевая функция метода наименьших квадратов, которая оказалась мультимодальной (имеющей более одного экстремума). На рисунке приведены графики целевой функции МНК: a) для параметров в 100 диапазонах 0.005≤ T ≤ 0.035, 0.05≤ U ≤ 0.3, где находится минимум, найденный Excel’ом и MathCad’ом; b) линии уровня функции на графике a); c) для параметров в диапазонах 0.01≤ T ≤ 0.025, 0.15≤ U ≤ 0.7, где обнаруживается второй “овраг” целевой функции, “ямку”-минимум в котором (при U = 0.628) нашёл Calc. Выводы из решения этой и подобных задач такие - помимо известного из теории требования задавать начальные значения искомых параметров в задачах нелинейной оптимизации вблизи искомых значений следует: Явно задавать ограничения на искомые параметры там, где программа допускает такие возможности Анализировать полученные результаты по графикам, а в случае невозможности этого (например, число искомых параметров больше двух) сравнивать расчёты по нескольким различным программам. Полезные рекомендации относительно точности численных методов изложены в справочной системе MathCad 2000 Professional (перевод с английского с сокращениями): Поскольку Mathcad – универсальная вычислительная программа, она использует численные методы, которые работают для широкого набора задач. Однако всегда можно найти специфические примеры, для которых методы Mathcad’а выдают неточные или неправильные результаты. Вы можете обеспечить точность результатов и избежать вычислительных проблем, если будете следовать следующим принципам: При использовании функции или оператора, включающего выполнение численной аппроксимации, убедитесь, что результаты имеют смысл, 101 Прочтите доступную информацию об операторе или функции, которые собираетесь использовать. В тех случаях, когда вы ожидаете, что метод Mathcad’а может не сработать, переформулируйте свою задачу подругому, Ознакомьтесь с численными методами, чтобы лучше понимать условия, при которых они могут не сработать или выдать неточные результаты, Установите значение встроенных переменных TOL и CTOL, чтобы достичь желаемой точности и скорости получения результатов вычислений. Отметим, что аналогичные TOL и CTOL параметры, задающие ход вычислений, имеются во многих других программах, например, табличных процессорах. 3.7. Пример 7. Корни нелинейного уравнения Решается уравнение ln( + 3 + 4) sin(2 ) (0.3) 0 ≤ x ≤ 10. Результат, полученный в Smath Studio: \ = 0 в диапазоне 102 Результаты Wolfram|Alpha и MathCad (см. ниже) совпадают между собой. SmathStudio в заданном диапазоне выдаёт только 3 верных корня, остальные значения надо рассматривать как фейковые. 103 Решение в Wolfram|Alpha: 104 Решение в MathSoft MathCad: 105 3.8. Пример 8. Экстремумы функции одной переменной Задача состоит в определении локальных экстремумов функции ] ( ) = √ *^1 − _<`- \ a b +ln( ) * в диапазоне 0 ≤ x ≤ 10. Развитые математические программы содержат встроенные функции для нахождения экстремумов. В Smath Studio такие средства отсутствуют, поэтому экстремумы ищутся в точках нулей первой производной. Если в точках максимума/минимума исходной функции первая производная не существует (например, имеет конечный разрыв, как в рассматриваемом примере), найти экстремумы не удаётся. Результат, полученный в Smath Studio, приведен на рисунке ниже. Программа нашла нули функции df(x)/dx, соответствующие максимумам f(x). Что означает дублирование значений с точностью трёх цифр после запятой, не понятно, тем не менее округлённые значения нулей производной можно использовать для определения максимумов f(x). Что касается локальных минимумов, определить их для заданной функции средствами Smath Studio нельзя. С этой задачей успешно справляются Wolfram|Alpha и MathCAD, результаты этих программ практически совпадают, листинги приведены ниже. 106 Минимумы функции в SMath Studio: 107 Минимумы функции в MathCad: 108 Минимумы функции в Wolfram|Alpha: 3.9. Пример 9. Экстремумы функции двух переменных Задача состоит в определении экстремумов функции 6 − 7 + 4 9P + 26P + 8 ]( , P) = tane ( + + 54) 1.6 2.8 в диапазонах изменения переменных -3 ≤ x ≤ 3 и -4 ≤ y ≤ 2. В Smath Studio задача сводится к нахождению корней системы двух нелинейных уравнений 'f( ,g) ' =0 и 'f( ,g) ' = 0. Вид экстремума и начальные значения переменных определяются по графику функции f(x,y), что в Smath Studio представляет большую проблему – трёхмерные графики в этой программе настолько неинформативны, что не только начальные значения, но даже и вид экстремума определить бывает затруднительно. Взятые приближённо по графику начальные значения x=0 и y=0 оказываются непригодными, Smath Studio сообщает об отсутствии корней системы уравнений. Этот вывод ошибочен. 109 Приходится наугад пробовать другие начальные значения, один из вариантов которых приводит к решению системы: Сравнение с результатом Wolfram|Alpha показывает, что теперь решение Smath Studio правильное (см. рисунок ниже). В этом примере нам повезло - удалось найти подходящие начальные приближения. В общем случае это невозможно без использования сторонних программ, позволяющих построить информативные легко анализируемые трёхмерные графики. 110 111 СПИСОК РЕКОМЕНДУЕМЫХ ИСТОЧНИКОВ 1. An Elementary Introduction to Wolfram Language https://www.wolfram.com/language/elementary-introduction/2nd-ed/ 2. WolframAlpha по-русски. Математика, статистика, анализ данных в WolframAlpha http://www.wolframalpha-ru.com/ 3. Синтаксис Wolfram Alpha (на русском языке) https://ru.wikibooks.org/wiki/%D0%A1%D0%B8%D0%BD%D1%8 2%D0%B0%D0%BA%D1%81%D0%B8%D1%81_Wolfram_Alpha 4. Система Mathematica Student Edition http://www.wolfram.com/solutions/education/students/?adref=studen t-greater-than-3.png 5. Половко А. М. Математика для студента. - СПб.: БХВ-Петербург, 2007. 368 с.: ил. 6. Самоучитель по Mathematica http://lib.qrz.ru/book/export/html/10482 7. Кобрунов, А. И. Практическое руководство по изучению пакета Wolfram Mathematica (на примере решения некорректных задач) [Текст] : учеб. пособие / А. И. Кобрунов, А. Н. Дорогобед. – Ухта : УГТУ, 2015. – 90 с. 8. Шапиро С.И. Решение логических и игровых задач. – Москва, Радио и связь, 1984