Deff – Описание и вызов однострочной функции
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

В соответствии с синтаксисом Scilab описание функции с использованием deffдолжно располагаться в одной строке командного кода, поэтому назовем ее однострочной функцией.Начинается описание с ключевого слова deffи имеет следующий формат:

 

deff ('[y1,…, yn]=ИмяФункции(x1,…, xk)','y1 =Выражение1,…,yn=Выражениеn '),

 

где: x1,…,xk СписокВходныхФормальныхПараметров;
y1,…,ynСписокВыходныхФормальныхПараметров (для одного выходного параметра квадратные скобки необязательны);

Выражение1,…,Выражениеn – список выражений, по которым определяются выходные параметры функции.

 

Если описание функции не умещается в одной строке экрана, то ее можно перенести, используя символы переноса – три точка (…).

 

Параметры передаются системе в виде строк, которые затем разбиваются на лексемы и из которых Scilab строит однострочную функцию.

 

При описании функции deff в выражениях для вычисления выходных параметров могут использоваться не только входные параметры функции, но и выходные параметры, вычисленные в предыдущих выражениях этой функции, а также переменные, определенные в Командном окне.

 

Обращение к функции, описанной с помощью deff, производиться из программного кода:

 

[z1,…,zn]=ИмяФункции(p1,…,pk)

[z1,…,zn]= ИмяФункции(p1,…,pk);,

где: p1,…,pkСписокВходныхФактическихПараметров функции;
z1,…,znСписокВыходныхФактическихПараметров (для одного
выходного параметра квадратные скобки необязательны).

В первом случае на экран выводятся значения всех выходных параметров (причем вывод начинается с последнего), а во втором – вывод значений параметров гасится точкой с запятой, но в переменных z1,…,zn сохраняются все вычисленные значения выходных параметров.

Если вызов функции осуществляется без указания имен выходных параметров (ИмяФункции(p1,…,pk)), то результат отображается в переменной ans, значение которой равно значению последнего выходного параметра. Именно поэтому такое обращение к функции рекомендуется применять к функции только с одним выходным параметром. Обращение по имени функции можно использовать не только при выводе результата, но в записи арифметических выражений внутри его описания (рис.1.2.6.1).

 

--> // Использование deff для описания функции --> // с одним выходным параметр ом --> --> deff('y = f1(x1, x2)','y = sin(x1) + a * x2'); --> --> a = 2; //Определение переменной a, используемой в выражении функции --> r = f1(2, 3)//Обращение к функции f1  r = 6.9092974 --> --> f1(2, 3) // Обращение к функции f1 ans = 6.9092974 --> --> d = 1 + f1(2,3) // или d=1+ans d = 7.9092974
--> // Использование deff для описания функции --> // с двумя выходными параметрами --> --> deff('[y1, y2] = ff1(x1, x2)', 'y1 = sin(x1) + x2; y2 = cos(x2) + y1'); --> --> [z1, z2] = ff1(2, 3) // Обращение к функции f2 в командной строке  z2 = 2.9193049  z1 = 3.9092974 --> --> z = z1 + z2 // Использование результатов выполнения функции  z = 6.8286024 --> --> ff1(2, 3) // В ans сохраняется значение первого выходного параметра  ans = 3.9092974

Рис. 1.2.6-1 Использование deff для описания однострочной функции

пользователя в Командном окне




Function – Описание и вызов многострочной функции

Второй способ описания функций в Командном окне начинается со слова function, а заканчивается словом endfunction (или end). В этом случае описание функции имеет следующий формат:

Function [y1,…, yn]=ИмяФункции(x1,…, xk)

ТелоФункции

   …

y 1=Выражение1;

...

yn=Выражение n ;

  …

Endfunction

где: x1,…,xkСписокВходныхФормальныхПараметров функции (если функция не имеет входных параметров, тогда после имени функции указываются пустые скобки);

   y1,…,ynСписокВыходныхФормальныхПараметров(для одного выходного параметра квадратные скобки необязательны);

   ТелоФункции – команды, операторы и библиотечные функции, необходимые для вычисления выходных параметров. Если вычисленные результаты должны быть в ходе выполнения функции (или ее отладки) отображены в
Командном окне, то символ точка с запятой в конце операторов отсутствует, иначе вывод результата гасится символом точки с запятой. Ввод каждой строки ТелаФункции осуществляется последовательно и завершается нажатием клавиши <Enter>, а ввод всех строк ТелаФункции считается незавершенным до тех пор, пока не будет введено ключевое слово endfunction (или end).

ИмяФункции формируется аналогично имени переменной и должно быть в данном сеансе работы уникально. Если имя функции уже было использовано, то выводится сообщение:«Предупреждение: переопределение функции:… » с указанием имени переопределенной функции.

 

Поскольку в Командном окне все строки выполняются последовательно, то очевидно, что описание функции должно предшествовать первому обращению к этой функции.

Правила обращения к функциям, описанных с помощью deff и function, полностью идентичны (Рис.1.2.6-2).

 

--> // Описание function для функции с одним выходным параметром --> function y =f2(x1, x2) > y = sin(x1) + a * x2; > end --> --> a = 2; // Определение переменной a, используемой в выражении функции --> r = f2(2, 3) // Обращение к функцииf2в Командной строке  r = 6.9092974 --> --> f2(2, 3) //Обращение к функции f2 ans = 6.9092974 --> --> d = 1 + f2(2, 3) // или d=1+ans  d = 7.9092974 -->
--> // Описание function для функции ff 2 с двумя выходными параметрами --> function [y1, y2] = ff2(x1, x2) > y1 = sin(x1) + x2; > y2 = cos(x2) + y1; >end --> --> [z1, z2] = ff2(2, 3) // Обращение к функции f f2  z2 = 2.9193049  z1 = 3.9092974 --> z = z1 + z2 // Использование результатов выполнения функции  z = 6.8286024 --> --> ff2(2, 3)// В ans сохраняется значение только первого выходного параметра  ans = 3.9092974

 

Рис. 1.2.6-2 Использование function в Командном окне

 

Как видно из приведенных примеров (рис.1.2.6-1 и 1.2.6-2), использование для описания в deff и function позволило получить одинаковые результаты.

В каких же случаях для описания функции пользователя целесообразно использовать deff, а в каких function?

Описание функции с помощью deff используется, как правило, если функция имеет один или два выходных параметра, а выражения для их вычислений достаточно короткие. В противном случае описание функции либо полностью не видно в Командном окне, либо строка должна быть перенесена с использованием символов три точки (), что затрудняет чтение и контроль за правильностью ввода. Громоздкие выражения принято вычислять по частям, но тогдадля вычисления значения одного выходного параметра требуется не один, а несколько операторов, что не соответствует формату описания функции с помощью deff. Описание функции с помощью function в данном случае предпочтительнее, поскольку оно может занимать несколько строк.

 

Наряду с рассмотренными выше способами создания внутренних встраиваемых функций пользователя в Командном окне, в Scilab имеется возможность создания функций с использованием текстового редактора SciNotes, который позволяет сохранить содержимое его окна в виде sce -файла. В этом случае сохраненный файл можно многократно подключать и использовать в других сеансах работы. Подробнее материал о создании и работе со sce -файлами, а также о средствах программирования в среде Scilab, будет изложен в п. 1.5.

 

 

Рассмотрим несколько простейших задач по ТЭЦ.

 

Заданы: катушка с резистивным сопротивлением R =10 Ом, индуктивностью L =0.05 Гн подключена к источнику ЭДС E =120 В с частотой f =50 Гц. Определить комплексный ток Iв данной последовательной RL-цепи (рис. 1.2.6-3).

// Определение комплексного тока в // последовательной RL-цепи   // Исходные данные R=10;// Сопротивление в Ом L=0.05;  // Индуктивность в Гн E=120;// ЭДС в В F=50;// Частота, Гц W=2*%pi*f;// Угловая частота в рад/с XL=w*L;// Индуктивное сопротивление в Ом Z=R+%i*XL;// Комплексная сопротивление в Ом I=E./Z;  // ТоК в RL=цепи в А Imod=abs(I);// Модуль тока в А // Фазатокавградус arg_I=atan(imag(I),real(I))*180/%pi; mprintf( I=3.4608053 - 5.4362202i Imod=6.4443513 arg_I=-57.518363

 

Рис. 1.2.6-3. Определение комплексного токапоследовательнойRL-цепи

 

Резистивное сопротивление R =10 Ом и катушка с индуктивностью L =0,05 Гн параллельно подключены к источнику ЭДС E =120 В с частотой f=50 Гц. Рис. 1.2.6-3. Определение комплексного токав RL-цепи (рис. 1.2.6-4).

 

// Определение комплексного тока в // параллельнойRL-цепи   // Исходные данные R=10; // Сопротивление, Ом L=0.05; // Индуктивность, Гн E=120; // ЭДС, В f=50; // Частота, Гц w=2*%pi*f; // Угловая частота, рад/с XL=w*L;// Индуктивное сопротивление, Ом BL=1/XL; // Проводимость катушки, См G=1/R; // Проводимость резистора, См Y=G-%i*BL; // Общая комплексная проводимость, См I=E*Y//То в RL=цепи, А Imod=abs(I)// Модультока, А // Фазатока, градус arg_I=atan(imag(I),real(I))*180/%pi mprintf( I =12. -7.6394373i Imod = 14.225365 arg_I=-32.481637

 

Рис. 1.2.6-4. Определение комплексного токав параллельнойRL-цепи

 

 

1.2.7. Контрольные вопросы

 

1) Какие объекты Scilab Вам известны?

2) Как называются символы ., : ; () [] {} // % $ ' " ~= и в каково их назначение в Scilab?

3) Что означает в Scilab «определить данные»?

4) Какой символ служит для переноса части командной строки на следующую строку?

5) Для чего используются системные встроенные функции: whos , who , who _ user , typeof , typeи clear?

6) Как в Scilab представлены комплексные числа?

7) Какие системные константы Вам известны?

8) Из каких элементов строятся числовые арифметические выражения?

9) Каков приоритет действий в арифметических выражениях?

10) Какой символ используется для запрета вывода результата вычислений на экран?

11) Какие типы переменных используются в Scilab?

12) Чем характеризуются матрицы?

13) Как создать вектор-строку?

14) Как создать вектор-столбец?

15) Какая функция служит для определения длины вектора?

16) Каким образом создать вектор с постоянным шагом?

17) Требуется ли при работе с векторами и матрицами предварительное объявление их размера?

18) Какой символ используются для разделения элементов матрицы в строке, а какой для разделения ее строк?

19) Какие команды предназначены для заполнения матрицы случайными числами, распределенными по равномерному или нормальному закону распределения?

20) Формат команд выбора минимального и максимального значения элемента матрицы.

21) Как записать выражение для решения матричных уравнений?

22) Какие поэлементные матричные операции Вам известны?

23) Как происходит преобразование данных к арифметическому типу?

24) Из каких элементов состоят логические выражения?

25) Как представлены в Scilab строки символов?

26) Что такое форматированный вывод данных?

27) Для чего используется функция mprintf и каков ее формат?

28) Какие символы преобразования вам известны?

29) Что такое списки, структуры и ячейки в Scilab?

30) Какие типы функций пользователя используются в Scilab?

31) Как описываются и вызываются функции, описанные с использованием операторов deffиfunction?


1.3 Матри чные операции создания, доступа,
извлечения и модификации.
Векторизация и индексирование

 

 





Дата: 2019-11-01, просмотров: 883.