Гурский Д., Турбина Е. - Вычисления в MathCad 12 (1077322), страница 32
Текст из файла (страница 32)
Определяет вектор, содержащий сингулярные числа матрицы М.•svd(M). Функция сингулярного разложения. Результат выдает в виде единой матрицы.Сингулярное разложение полезно в связи с тем, что оно зачастую дает возможностьрешать практически вырожденные системы линейных уравнений, с которыми несправляются стандартные методы.3.3.9. Функции max и minОдной из самых распространенных матричных задач является задача выбора наибольшего элемента в массиве. С подобной проблемой мы уже сталкивались, когда приопределении нормы матрицы требовалось выбрать наибольшую сумму элементовстрок или столбцов. Также к задаче такого рода сводится поиск экстремума функции(локального или глобального) матричным методом. Естественно, Mathcad не был бы самой совершенной математической программой, если бы не позволял делать этого предельно быстро и просто.
Для выбора наибольшего или наименьшего элемента существуют две специальные функции:• тах(М) — выдает значение наибольшего элемента матрицы;•min(M) — функция выбора наименьшего элемента.Если элементы представлены комплексными числами, то при использовании функцийmin и max результат выдается исходя из величины их действительной части.Пример 3.48. Использование функций min и max\ 2 5М:=4 5 6678тах(М) = 8min(M) = 1Глава 4. ПрограммированиеБольшинство людей, никогда не сталкивавшихся в своей практике с решением задачс помощью программирования, считают эту область человеческого знания сложной,малопонятной и доступной лишь специалистам. Это так и не так в одно и то же время.Конечно, посидеть вечерок над учебником для того, чтобы быть способным написатьпрограмму управления сложной автоматической системой — это, конечно, нереально.Но за относительно небольшой отрезок времени освоить тот минимум, который необходим для успешного решения большинства математических задач — это, в принципе,возможно, причем в случае любого современного языка программирования высокогоуровня.Позиция компании Mathsoft относительно того, как должна быть построена математическая система, была и остается следующей: Mathcad должен быть настолько прост,чтобы быть доступным пониманию всех, кому приходится сталкиваться с расчетами,будь то ученый, инженер или простой студент.
Поэтому в первых версиях системыMathcad языка программирования не было вовсе: авторы посчитали, что введение такого сложного (в массовом понимании) элемента, как язык программирования, не впишется в общую концепцию пакета. Однако на практике без элементов программирования обойтись довольно сложно (это потребовало бы введения огромного количествавстроенных функций, предусматривающих все возможные и невозможные запросыпользователя).
Поэтому создатели Mathcad, желая сохранить простоту своего детища,пошли на довольно нестандартный шаг — они создали систему программирования безпрограммирования. Звучит довольно странно, не правда ли? Попробуем объяснить,что означает этот термин. Все дело в том, что любая программа строится на своего родатрех китах алгоритмизации: следовании, цикле и условии. Последовательное выполнение команд (следование) обеспечивалось логической активностью рабочих листовMathcad. Вместо оператора цикла for в Mathcad было предложено использовать ранжированные переменные, цикл while имитировался посредством функции until (последняя со времен Mathcad 2000 считалась устаревшей, но пользователи продолжали ее активно применять, поэтому в Mathcad 12 разработчики «воскресили» ее), для введенияусловия существовала встроенная функция if.
Куда больших изощрений требовалозадание рекуррентных соотношений, но и это было возможно. Построенные по описанным принципам алгоритмы получались резко отличными по своей форме от выработанных норм и традиций, поэтому программами их можно было назвать с очень зна-Глава 4. Программирование* 135чительными оговорками. При этом желаемого упрощения достигнуто не было, скореенаоборот — алгоритмы в Mathcad получались запутанными и причудливо-сложными.Поэтому можно вполне смело утверждать, что эксперимент Mathsoft, связанный с попыткой создать качественную математическую систему, которая бы могла эффективно работать вообще без использования программирования, оказался неудачным.В следующем примере вы можете сравнить два способа программного решения задачив Mathcad.
Внимательно изучив его, вы наверняка поймете преимущества использования языка программирования.Пример 4 . 1 . Решение квадратного уравнения альтернативнымипрограммными методамиSolutionProg(a,b,c) := D<-b -4-a-cf[x).= x - 5 x + 4A := f(x) coeffs, x чif D > 0-5A :=reverse(A)D»(AJSolutionProg(l, 1,1) = "No real roots"Solution := if D>0,"No real roots"SolutionProg(l,-5,4) = 'Solution =Осознав, что отсутствие возможности программирования сильно ослабляет позициипакета Mathcad, компания Mathsoft дополнила его профессиональную версию соответствующим элементом. И, следует признать, сделала это очень качественно.Язык программирования Mathcad содержит все элементы языка высокого уровня, необходимые для математических расчетов.
Будучи дополненным сотнями встроенныхфункций и операторов системы, возможностями численного и символьного расчетаразличных величин, он по эффективности не уступает профессиональным системампрограммирования. Кроме того, у него есть одно очень крупное преимущество: языкпрограммирования Mathcad предельно прост (а по изящности и наглядности в оформлении алгоритмов вообще не имеет аналогов). Конечно, можно за несколько вечеровосвоить все, что нужно для решения математических задач, например в Delphi, но дляэтого потребуется, чтобы у вас были хотя бы начальные знания об основных ходахи приемах в программировании. Для системы программирования Mathcad вам не понадобится ровным счетом никаких познаний в этой области — будет достаточно однойлишь интуиции. Возможности же, которые вы получите, освоив эту систему, ограничены лишь конечной производительностью компьютера!В данной главе мы рассмотрим операторы и важнейшие приемы программированияв Mathcad.
Практику программирования мы отработаем при решении задач в остальных1 3 6 •:• Глава 4. Программированиеразделах (так, мы самостоятельно реализуем несколько ключевых численных методов).4.1. Создание программПервым делом, приступая к разговору о создании алгоритмов в среде Mathcad, откроем специальную панель, содержащую все операторы и элементы языка программирования.
Панель эта называется Programming (Программирование) и относится она к панели Math (Математические) (кнопка в виде блок-схемы).Открыв указанную панель (рис. 4.1), вы обнаружите, что язык программирования Mathcad имеет предельно малое количество операторов — всего 8. Впрочем, это никоим образом не сказывается на эффективности создаваемых алгоритмов.Programmingr№пAdd Lineforwhilereturnon errorifotherwisebreakcontinue|Pro^ramming Toolbar]Рис. 4 . 1 . Панель Programming (Программирование)Чтобы написать программу, прежде всего для нее должен быть создан специальныйобособленный от остального документа блок. Выглядит он как черная вертикальнаялиния с маркерами, в которые заносятся те или иные выражения алгоритма.
Чтобыпостроить единичный элемент программного блока, нажмите кнопку команды Add Line(Добавить линию) панели Programming (Программирование). Или, лучше, воспользуйтесь «горячей» клавишей «]». При этом в области курсора появится следующий объект:Обычно программа содержит больше чем две строки, поэтому лучше сразу задать блокиз 5-6 маркеров. Сделать это можно, последовательно нажав нужное количество разсоответствующую кнопку панели Programming или «горячую» клавишу.Программный блок можно создать и внутри уже заданного блока. Для этого используйте один из стандартных способов, поставив курсор в маркер любого из* операторовпрограммирования:for iСозданный таким образом блок выглядит как параллельная главному блоку линия.Выражения, внесенные в него, будут обособлены от остальной программы, и выполне-4.1.
Создание программ * 1 3 7ние соответствующих им действий будет связано только с оператором, к которому относится внутренний блок.Иногда при написании программы бывает нужным добавить строку к уже созданномублоку. Чтобы это сделать, поставьте курсор в ту строку блока, выше или ниже которойдолжна быть введена строка, и нажмите клавишу Пробел. При этом строка будет выделена и можно будет произвести добавление одним из стандартных способов. Положение вставляемого маркера определяется положением вертикальной черты курсора.Если она находится слева от выделенного выражения, то маркер будет добавлен вышевыделенной строки, если справа — то ниже. Чтобы развернуть курсор в нужную сторону, нажмите клавишу Insert.
Чтобы добавить строку к целому блоку, его следует выделить, дважды нажав клавишу Пробел. В том случае, если программа содержит блокиразличных уровней, то для добавления строки, например, к первому блоку, нажмитеклавишу Пробел несколько раз: при каждом нажатии будут выделяться блоки болеенизкого уровня.Для присвоения значений переменным и функциям в программах Mathcad используется специальный оператор: «<—» (Local Definition — Локальное присваивание), расположенный на панели Programming (Программирование) (также вводится сочетаниемклавиш Shift+«[»).