Smath Studio Руководство пользователя. Руководство пользователя
Скачать 1 Mb.
|
Глава 15 Программирование 15.1 Создание программы Программа – специальная разновидность выражения, которое вы можете создавать в SMath Studio. Данное выражение может быть составлено из операторов программирования, которые доступны на панели Программирование. Программу можно считать совокупностью нескольких операторов. Как и любое выражение, программа в качестве результата может возвращать скаляр,вектор или матрицу. Вы можете определить свою собственную функцию, используя операторы программирования. Следующий пример показывает, как сделать простую программу, чтобы определить функцию: 1. Наберите левую сторону определяемой функции, после чего наберите “:=”. Удостоверьтесь, что выбрана метка-заполнитель. 2. Нажмите на панели Программирование либо клавишу ]. Так же можно вызвать стандартную функцию line через Вставка-Функция. Вы будете видеть вертикальную линию с двумя метками-заполнителями, которые будут содержать операторы, входящие в вашу программу. 3. Щелкните в верхней метке-заполнителе. Напечатайте z, затем наберите “:=”. 4. Напечатайте x/у в метке-заполнителе справа от :=, после чего перейдите на нижнюю метку-заполнитель. 5. Введете величину, которая будет возвращена программой, в остающейся метке-заполнителе. Напечатайте lg(z). Вы можете теперь использовать эту функцию так же, как любую другую функцию в своем рабочем листе. Как у любого выражения, у программы SMath Studio должно быть значение. Это значение – просто значение последнего оператора, выполненного программой. Это может быть скаляр, вектор или матрица. Вы можете также написать программу SMath Studio, чтобы возвратить символьное выражение. Когда вы вычисляете результат программы, используйте символьный знак равенства, описанный в главе 14. SMath Studio передает выражение своему символическому процессору и, когда возможно, возвращает упрощенное символьное выражение. Вы можете использовать способность SMath Studio рассчитать программы символьно, чтобы произвести сложные символические выражения, многочлены, и матрицы. Рисунок 15.1 показывает функцию, которая, когда рассчитана символьно, вычисляет символьные многочлены. Рис. 15.1 Символьное вычисление многочлена с помощью программы 15.2 Условные операторы В общем случае SMath Studio выполняет каждый оператор в вашей программе сверху вниз. Однако могут возникнуть ситуации, когда вы хотите, чтобы SMath Studio выполнил оператор только тогда, когда соблюдается особое условие. Вы можете сделать это, включив в программу оператор if. Например, предположите, что Вы хотите определить функцию, которая формирует полукруг вокруг начала координат, а при прочих условиях будет постоянной. Сделайте следующее: 1. Напечатайте левую сторону определения функции, после чего напечатайте “:”. Удостоверьтесь, что метка-заполнитель справа выбрана. 2. Нажмите на панели Программирование либо выберите функцию if в диалоге Вставка\Функция. Так же вы можете набрать команду if в метке-заполнителе и затем нажать Tab. 3. Введите логическое выражение в верхнюю метку-заполнитель, используя любой из относительных операторов на панели инструментов Булева. В метке-заполнителе между if и else напечатайте значение, которое вы хотите, чтобы программа возвратила всякий раз, когда выражение в верхней метке-заполнителе верно. В случае необходимости, прибавьте больше меток-заполнителей, нажимая 4. Выберите метку-заполнитель после else и напечатайте значение, которое вы хотите, чтобы программа возвращала в случае, если условие не выполняется. В случае необходимости, прибавьте больше меток- заполнителей, нажимая На рисунке 15.2 показан график созданной пользователем функции. Рис. 15.2 График пользовательской функции 15.3 Циклы Одна из самой сильных сторон программирования – способность выполнить неоднократно последовательность операторов в цикле. SMath Studio обеспечивает две разновидности циклических структур. Выбор конкретной структуры зависит от того, как именно вы планируете подать команду циклу о прекращении выполнения итераций. Если вы знаете точно, сколько итераций вы хотите, чтобы цикл выполнил, используйте оператор цикла for. Если Вы хотите, чтобы цикл остановился, когда выполнится условие, но Вы не знаете, сколько циклов будет требоваться, используйте оператор цикла while. Циклы «for» Цикл for заканчивается после предопределенного числа итераций. Итерацией управляет переменная цикла, определенная в начале цикла. Определенная переменная цикла является локальной для программы. Для создания цикла for необходимо: 1. Нажмите на панели Программирование либо выберите функцию for(3) в диалоге Вставка\Функция. Так же вы можете набрать команду for(3) и затем нажать Tab. 2. Задать имя переменной цикла в метке-заполнителе слева от символа «». 3. Задайте диапазон значений, которые итеративная переменная должна принимать, в метке-заполнителе справа от «». Диапазон определяется с помощью функции range(2). 4. Введите выражение, которое вы хотите вычислить, в оставшуюся метку- заполнитель. Это выражение в общем случае использует переменную цикла. В случае необходимости, прибавьте метки-заполнители, используя SMath Studio использует две разновидности цикла for. Они различаются между собой оформлением. Для первого случая, описанного выше, изменение значения переменной цикла может происходить только с шагом 1. Во втором случае шаг изменения задает пользователь, и он может отличаться от 1. Для создания цикла с шагом, отличным от 1, необходимо сделать следующее: 1. Выберите функцию for(4) в диалоге Вставка\Функция. Так же вы можете набрать команду for(4) и затем нажать Tab. 2. Задать имя переменной цикла в первой метке-заполнителе справа от for и присвоить ей начальное значение. 3. В следующей справа метке-заполнителе ввести условие, по которому будет заканчиваться цикл. Условие должно обязательно содержать переменную цикла 4. В оставшейся в строке метке-заполнителе ввести выражение, которое определит шаг изменения переменной цикла. 5. В метку-заполнитель, расположенную в следующей строке, ввести выражение, которое необходимо вычислить. Это выражение в общем случае использует переменную цикла. В случае необходимости, прибавьте метки-заполнители, используя Пример использования циклов for показан на рис. 15.3 Рис. 15.3 Использование цикла for Цикл «while» Цикл while выполняется до тех пор, пока будет истинным некоторое условие. Из-за этого Вы не обязаны знать заранее, сколько времени будет выполняться цикл. Важно, однако, иметь где-нибудь, или в теле цикла цикла или в другом месте в программе, оператор, который в конечном счете делает условие ложным. Иначе, цикл выполняет все время. Для создания цикла while необходимо: 1. Нажмите на панели Программирование либо выберите функцию while в диалоге Вставка\Функция. Так же вы можете набрать команду while и затем нажать Tab. 2. Щелкните в верхней метке-заполнителе и наберите условие. Это как правило - Булево выражение как показано рядом. 3. Введите нужное выражение в нижнюю метку-заполнитель. В случае необходимости, прибавьте метки-заполнители, используя Рис. 15.4 показывает программу, включающую вышеупомянутый цикл. После входа в цикл while SMath Studio проверяет условие. Если условие верно, SMath Studio выполняет тело цикла и проверяет условие снова. Если условие ложно, SMath Studio выходит из цикла. Рис. 15.4 Пример программы с циклом while Замечание Если вы сформировали тело цикла неверно, и произошло зацикливание, то прервать выполнение программы можно, нажав кнопку (если данная кнопка имеет серый цвет, то никакие вычисления не происходят) 15.4 Обработка ошибок Ошибки, которые могут произойти во время выполнения программы, заставляют SMath Studio прекращать вычислять программу. Например, программа может попытаться разделиться на 0 в выражении и поэтому столкнуться с ошибкой сингулярности. В этих случаях SMath Studio рассматривает программу, как любое математическое выражение: он отмечает выражение, в котором произошла ошибка, сообщением об ошибке, и выносит на первый план переменную или оператор с ошибкой в другом цвете. SMath Studio имеет особенность, которая позволит пользователю улучшить обработку ошибок в программе. Строковая функция error предоставляет пользователю доступ к механизму обработки ошибок SMath Studio и позволяет ему настраивать сообщения об ошибках, допущенных в ходе выполнения программы. Так же, как SMath Studio автоматически останавливает дальнейшее выполнение и выдает соответствующее “сообщение об ошибке” для выражения, которое генерирует ошибку (см. внизу рис. 15.5 для примера), вы можете оценивать причину остановки и заставлять нужные сообщения об ошибке появиться, когда ваши программы или другие выражения используются ненадлежащим образом или не могут дать ответы. Строковая функция error SMath Studio дает вам такую возможность. Эта функция приостанавливает дальнейшую числовую оценку выражения и выводит сообщение об ошибке, текст которого - просто строка, которая задана для данной функции в качестве аргумента. Как правило, вы размещаете строковую функцию error в метке-заполнителе под оператором if таким образом, чтобы ошибка и сообщение о ней были произведены, когда сталкиваются с особым условием. Рис. 15.5 показывает, как сообщения об ошибках могут использоваться даже в небольшой программе. Рис. 15.5 Пример программы с циклом while Замечание Если программа будет написана без использования оператора line (т. е. оформлена как обычная пользовательская функция), то она работать не будет! 15.5 Программы внутри программ Большая гибкость программирования является результатом возможности включения частей программ друг в друга. В SMath Studio можно использовать следующие пути: - можно написать программу в любом месте рабочего листа и впоследствии вызвать ее внутри другой программы как подпрограмму-процедуру; - можно написать рекурсивную программу. Подпрограммы Рис. 15.6 показывает пример программы, содержащую вызов другой, которая является самостоятельной программой. Нет никакого ограничения по степени вложенности программ друг в друга. Рис. 15.6 Вызов определенной пользователем функции из программы Рекурсия Рекурсия – сильный программный метод, который позволяет программе вызывать саму себя внутри себя, как показано в рисунке 15.7. Описание рекурсивной функции должно всегда иметь по крайней мере две части: - Определение функции с точки зрения предыдущего значения функции. - Начальное условие, препятствующее тому, чтобы рекурсия продолжалась бесконечно. Идея подобна математической индукции: если вы можете определить f(n+1) от f(n), и Вы знаете f(0), то Вы знаете все, что необходимо знать о f. Совет Использование рекурсивной функции, несмотря на их элегантность и краткость, не всегда эффективно в вычислительном отношении. Вы можете заметить, что эквивалентная программа, используя один из описанных ранее операторов цикла, произведет вычисление быстрее. Рис. 15.7 Пример рекурсивной функции Приложения Действия В представленной таблице: • А и В обозначают множества, векторы или матрицы; • u и v обозначают векторы, элементами которых могут быть вещественные или комплексные числа; • М обозначает квадратную матрицу; • z и w обозначают вещественные или комплексные числа; • x и y обозначают вещественные числа; • m и n обозначают целые числа; • i обозначает переменную, меняющуюся в диапазоне; • S и любое другое имя, начинающееся с S, обозначают строку; • t обозначает любую переменную величину; • f обозначает функцию; • X и Y обозначают переменные или выражения любого типа. Действие Отображение Нажимаемые клавиши Описание Круглые скобки (X) ( Группирующий оператор Подстрочный символ вектора v n ' Возвращает метку-заполнитель для задания порядкового номера элемента вектора Подстрочный символ матрицы A n,m ' Возвращает метку-заполнитель для задания порядкового номера элемента матрицы Факториал n! ! Возвращает n· ( n-1)· ( n-2)... n должно быть целым неотрицательным числом. Транспонирование A T [Ctrl]+1 Возвращает матрицу, строки которой – столбцы A, а столбцы – строки A. Может быть вектором или матрицей. Возведение в степень z w ^ Возведение числа z в степень w Возведение в степень матрицы, инвертирование матрицы M n ^ Возведение квадратной матрицы M в степень n. n может быть любым целым числом. M -1 инвертирование M. Возвращает квадратную матрицу. Отрицание -X - Умножает X на -1 Минор M n,m (M) – Возвращает минор матрицы M. Алгебраическое дополнение A n,m (M) – Возвращает алгебраическое дополнение матрицы M. Квадратный корень √ z \ Возвращает квадратный корень из числа z Корень n-ой степени n √ z [Ctrl]+\ Возвращает корень n-ой степени из числа z Амплитуда, абсолютная величина ∣ z ∣ – Возвращает модуль числа z. Детерминант ∣ M∣ – Возвращает детерминант квадратной матрицы M. Вещественное число Деление X z / Деление выражения X на ненулевой скаляр z. X может быть вектором или матрицей. Умножение X·Y * Возвращает произведение X и Y, если и X и Y скаляры. Умножает каждый элемент Y на X, если Y - множество, и X скаляр, или наоборот. Возвращает скалярное произведение (внутреннее произведение), если X и Y векторы одного и того же размера. Выполняет умножение матриц, если X и Y соответствующие матрицы. Векторное произведение u×v – Возвращает векторное произведение для векторов с тремя компонентами u и v. Итерационная сумма ∑ i=m n X – Выполняет суммирование X. X может быть любым выражением. m и n должны быть целыми числами. Итерационное умножение ∏ i=m n X – Выполняет перемножение X. X может быть любым выражением. m и n должны быть целыми числами. Определенный интеграл ∫ a b f (t)dt – Возвращает определенный интеграл f(t) на интервале [a,b]. a и b должен быть действительными скалярами. Все переменные в выражении f(t), кроме переменной интегрирования t, должны быть определены. Подынтегральное выражение f(t) не может возвратить множество. Первая производная d dt f (t) – Возвращает производную f(t) по переменной t. Все переменные в выражении f(t) должны быть определены. Переменная t должна быть скалярной величиной. Функция f(t) должна возвратить скаляр. Производная n-ой степени d n dt n f (t) – Возвращает n-ую производную f(t) по переменной t. Все переменные в выражении f(t) должны быть определены. Переменная t должна быть скалярной величиной. Функция f(t) должна возвратить скаляр. Сложение X+Y + Скалярное сложение, если X, Y, – скаляры. Поэлементно сложение, если X и Y векторы или матрицы одного размера. Если X множество, и Y – скаляр, прибавляет Y к каждому элементу X. Вычитание X-Y - Выполняет скалярное вычитание, если X, Y – скаляры. Выполняет поэлементно вычитание, если X и Y векторы или матрицы одного размера. Если X множество, и Y - скаляр, вычитает Y из каждого элемента X. Логическое «И» x˄y – Возвращает значение 1, если и x и y являются отличными от нуля. Возвращения 0, если по крайней мере один из x или y – ноль. Логическое «ИЛИ» x˅y – Возвращает значение 1, если по крайней мере один из x или y является отличным от нуля. Возвращения 0, если и x и y – ноль. Логическое «НЕ» ¬x – Возвращает 0, если x является отличным от нуля и 1, если x – ноль. Логическое «Исключающее ИЛИ» ·xy – Возвращения 1, если точно один из x или y является отличным от нуля. Возвращения 0, если и x и y – ноль или оба являются отличными от нуля. Строго больше x>y, S1>S2 > Для действительных скаляров x и y, возвращения 1, если x>y, 0, если иначе. Для строк S1 и S2, возвращает 1, если S1 строго следует за S2 в порядке кодировки ASCII, в противном случае 0. Строго меньше x S1<S2 < Для действительных скаляров x и y, возвращения 1, если x 1, если S1 строго предшествует S2 в порядке кодировки ASCII, в противном случае 0. Больше либо равно x≥y, S1≥S2 [Ctrl]+0 Для действительных скаляров x и y, возвращения 1, если x≥y, 0, если иначе. Для строк S1 и S2, возвращает 1, если S1 следует за S2 в порядке кодировки ASCII, в противном случае 0. Меньше или равно x≤y, S1≤S2 [Ctrl]+9 Для действительных скаляров x и y, возвращения 1, если x≤y, 0, если иначе. Для строк S1 и S2, возвращает 1, если S1 предшествует S2 в порядке кодировки ASCII, в противном случае 0. Логическое «не равно» z≠w, S1≠S2 [Ctrl]+3 Для скаляров z и w, возвращает 1, если z≠w, иначе 0. Для строк S1 и S2, возвращает 1, если S1 не совпадает посимвольно с S2. Логическое «равно» X=Y [Ctrl]+= Возвращает 1, если X=Y, иначе 0. Отображается на экране как знак равенства, начертанный жирным шрифтом Предопределенные переменные Предопределенные переменные SMath Studio перечислены здесь с их начальными значениями по умолчанию Переменная=величина Описание π=3,14159.... Число π. Для написания нажмите [Ctrl]+[Shift]+p. e=2,71828... Основание для натурального логарифма. Для написания нажмите e. Функции SMath Studio в алфавитном порядке A Наименование Раздел Наименование Раздел abs 9.2 arcsin 10.2 ainterp 10.5 arctg 10.2 alg 10.3 arcth 10.2 arccos 10.2 arg 10.2 arccosec 10.2 arsh 10.2 arcctg 10.2 arth 10.2 arch 10.2 augment 10.3 arcsec 10.2 C Наименование Раздел Наименование Раздел ch 10.2 cosec 10.2 cinterp 10.5 cosech 10.2 col 10.3 csort 10.3 cols 10.3 ctg 10.2 concat 10.6 cth 10.2 cos 10.2 D Наименование Раздел Наименование Раздел det 10.3 diff(2) 9.5 dfile 10.6 diff(3) 9.5; 14.3 diag 10.3 E Наименование Раздел Наименование Раздел el(2) 10.3 eval 10.2 el(3) 10.3 exp 10.2 error 10.2; 15.4 expand 14.2 F Наименование Раздел Наименование Раздел findstr 10.6 for(4) 15.3 for(3) 15.3 G Наименование Раздел Наименование Раздел Gamma 10.2 I Наименование Раздел Наименование Раздел identify 10.3 int 9.6 if 15.2 invert 10.3 Im 10.2 IsDefined 10.2 importData(1) 10.6; 11.1 IsString 10.6 importData(9) 10.6 J Наименование Раздел Наименование Раздел Jacob 10.3 L Наименование Раздел Наименование Раздел length 10.3 linterp 10.5 lg 10.2 ln 10.2 line 15.1 log 10.2 M Наименование Раздел Наименование Раздел mat 11.1 min 10.3 matrix 10.3 minor 10.3 max 10.3 mod 10.2 N Наименование Раздел Наименование Раздел norm1 10.3 nthroot 10.2 norme 10.3 num2str 10.6 normi 10.3 numden 14.2 P Наименование Раздел Наименование Раздел perc 10.2 polyroots 10.4 pol2xy 10.2 product 9.4 R Наименование Раздел Наименование Раздел random 10.5 roots(2) 10.4 range(2) 2.6; 8.1; 15.3 roots(3) 10.4 range(3) 2.6; 8.1 round 10.2 rank 10.3 row 10.3 Re 10.2 rows 10.3 reverse 10.3 rsort 10.3 rfile 10.6 S Наименование Раздел Наименование Раздел sec 10.2 stack 10.3 sech 10.2 str2num 10.6 sh 10.2 strlen 10.6 sign 10.2 strrep 10.6 sin 10.2 submatrix 10.3 solve(2) 10.4 substr(2) 10.6 solve(4) 10.4 substr(3) 10.6 sort 10.3 sum 9.4 sqrt 10.2 sys 12.2; 13.4 T Наименование Раздел Наименование Раздел tg 10.2 transpose 10.3 th 10.2 trunc 10.2 tr 10.3 V Наименование Раздел Наименование Раздел vminor 10.3 W Наименование Раздел Наименование Раздел wfile 10.6 while 15.3 X Наименование Раздел Наименование Раздел xy2pol 10.2 |