Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Основы программирования в Maple

Задание функций пользователя. Условные выражения

Задание функций пользователя

1) Один из наиболее простых способов задания функции пользователя - присвоение введенной функции (в виде выражения) некоторой переменной:
Name:=выражение
Этот прием фактически означает операцию присваивания.

> m:=sqrt(x^2+y^2);

                   2 2 1/2

            m:= (x + y)

 

> x:=3:y:=4:

> m;

               1/2

            25

 

> evalf(m);

            5.000000000

Заданный таким образом объект все же не является полноценной функцией пользователя. Прежде всего потому, что в нем используются только глобальные переменные (х и у). Их значения приходится определять заведомо, используя операцию присваивания. Подобные "функции" нальзя ввести в библиотеки Maple.

2)Более гибкий способ задания полноценных функций пользователя - использование функционального оператора ->.Его синтаксис:

name:=(x,y,...)->Выражение,
где name -имя функции (без аргументов),
(x,y,...) - список формальных параметров функции,
Выражение - вид функции (некоторое выражение, зависящее от параметров (x,y,...)).

Вызов функции осуществляется в виде name (x,y,...). Переменные, указанные в списке формальных параметров являются локальными. При подстановке на их место фактических параметров они сохраняют их значения только в теле функции Выражение. За пределами этой функции переменные с этими именами оказываются либо неопределенными, либо сохраняют ранее присвоенное значение.

> restart;

> x:=0;y:=0;

         x:= 0

         y:= 0

> m:=(x,y)->sqrt(x^2+y^2);

                               2 2

          m:= (x, y) -> sqrt(x + y)

> m(3,4);

          5

> m(3.,4.);

          5.000000000

> x;y;

          0

          0

3) Еще один способ задания функции пользователя базируется на применении функции unapplay. Её синтаксис:
name:=unapplay(expr, var1,var2,...),
где name - имя функции (без аргументов),
expr - непосредственно выражение функции через аргументы var1,var2,....
Обращение к функции осуществляется в виде name(var1,var2,...). Переменные, указанные в качестве формальных параметров являются локальными.

> restart;

> x:=1;y:=1;

       x:= 1

       y:= 1

 

> fm:=unapply(sqrt(x^2+y^2),x,y);

                          2 2 1/2

        fm:= (x, y) -> (x + y)

 

> evalf(fm(3,4));

        5.000000000

 

> fm(sin(x),cos(x));

              2    2 1/2

        (sin(x) + cos(x))

 

> simplify(%);

         1

 

> x:=x;y:=y;

          x:= 1

          y:= 1

 

Замечание. Для задания сложных выражений можно использовать последовательное определение частей выражения с помощью простого присваивания (1) (при этом переменным не должно быть присвоено никакое значение), а затем, используя (2) или (3), определить сложную функцию, представляющую выражение от ранее определенных (в пункте(1)) выражений.

> a:=x^2+1;

             2

       a:= x + 1

> b:=y^2+3;

             2

       b:= y + 3

> fl:=unapply(a,x);

                   2

       fl:= x -> x + 1

> ff:=unapply(a+b,x,y);

                           2   2

       ff:= (x, z) -> x + 4 + y

> f2:=unapply(a^2/b,x,y);

                          2 2

                        (x + 1)

       f2:= (x, y) -> ---------

                          2

                         y + 3

> f2(x,1);

             2 2

       1/4 (x + 1)

Условные выражения

Обычно программы реализуют некоторый алгоритм решения задачи. В любом алгоритме возникает необходимость выполнения определенной последовательности операторов в зависимости от истинности или ложности того или иного выражения. Для подготовки разветвляющихся программ в Maple-язык программирования включен оператор if, позволяющий создавать следующую конструкцию:

if булево выражение then последовательность операторов
| elif булево выражение then последовательность операторов |
| else последовательность операторов| end if;

В вертикальных черточках | | указаны необязательные элементы.

Этот оператор работает следующим образом: если истинно булево выражение после ключевого слова if, то выполняется последовательность операторов после ключевого слова then до первого встретившегося elif, else или end if; если значение булева выражения равно false или FAIL, то проверяется на истинность выражение после ключевого слова elif, если оно задано, и в случае истинности выполняются операторы после второго ключевого слова then.

Если ни одно из булевых значений не истинно, то выполняются операторы блока else, опять таки в случае его задания. Блоков elif может быть сколько угодно, тогда как блок else всегда только один.

Оператор if в предыдущих версиях Maple завершался ключевым словом fi. Для совместимости с предыдущими версиями его можно использовать и в Maple 6, однако при написании новых программ рекомендуется для завершения конструкции ветвления использовать ключевое слово end if.

В Maple нет оператора, реализующего конструкцию переключателя. Для этих целей следует использовать оператор if с несколькими блоками elif.

Синтаксис Maple позволяет использовать вложенные конструкии if, т.е. последовательности операторов в блоках then и else могут содержать операторы ветвления.

На практике чаще всего используются следующие конструкции оператора if:

 

if (условие сравнения) then (элементы) fi;

if (условие сравнения) then (элементы) else (элементы) fi;

В условиях используются любые логические конструкции со знаками сравнения (<,<=,>,>=,=,<>) и логические операторы and, or, not, конструкции с которыми возвращают логические значения true и false.

Для организации ветвлений в программах и отдельно в виде команды может быть использована операция `if` (в ОБРАТНЫХ кавычках). Она имеет следующий синтаксис:

`if `(Условие, Выражение1, Выражение2)

Если Условие истинно, то будет выполнено Выражение1, в противном случае выполняется Выражение2.

> 5*(Pi + `if`(a > b,a,b));    5 Pi + 25 > r:=5;       r:= 5 > `if`(r<0,print('Negative'),print('Positive'));                                          Positive

Ввиду компактности записи последняя форма условного выражения бывает предпочтительна, хотя она и менее наглядна.

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...