Математические выражения в Scilab
Математические выражения состоят из чисел, констант, переменных, операторов, функций и спецзнаков. Числа могут быть целыми, дробными, с фиксированной и плавающей точкой. Примеры: -3 2.453 123.12е-3. Последнее число – это 123.12*10-3, т.е. 0,12312. Для разделения целой и десятичной части числа используется точка. Числа могут быть вещественными и комплексными. Кроме того, в Scilab существуют так называемые системные переменные и символьные константы:
· %i – мнимая единица (%i= );
· %pi – число π=3,1415927;
· %e –число е=2,71828184;
· %eps – 2.22d-16;
· %inf – значение машинной бесконечности;
· ans – переменная, хранящая результат последней операции;
· %nan – указание на нечисловой характер данных (not-a-number).
Примеры:
--> 1/0
! – error 27
division by zero
--> 0/0
! – error 27
division by zero
Системные переменные нельзя переопределить, например, переменной %eps нельзя присвоить другое значение:
-->%eps = 0.1
! – error 13
redefining permanent variable
Символьная константа – это цепочка символов, заключенная в апострофы, например, ‘Hello’.
В Scilab наглядность описания сложных выражений достигается с помощью текстовых комментариев, которые вводят с помощью символов //.
Переменная в Scilab может иметь имя, содержащее сколько угодно символов, но система запоминает и идентифицирует только первые 24 символа. Имя должно начинаться с буквы и может содержать буквы, цифры и символ подчеркивания _.
В памяти компьютера переменные занимают определенное место, называемое рабочим пространством (Workspace). Для очистки рабочего пространства используют функцию clear:
· clear – уничтожение определений всех переменных;
· clear x– уничтожение определения переменной x;
· clear a, b, c– уничтожение определений нескольких переменных.
Примеры:
--> v=[1 2 3 4 5];
--> clear v
--> v
!- - error 4
undefined variable : v
Большинство операций в Scilab являются матричными операциями, а соответствующие им операторы относятся к матричным операторам. Например, с помощью операторов умножения * и деления / вычисляют произведение и частное от деления двух массивов (векторов или матриц). Есть ряд спецоператоров, например, оператор \ используют для деления справа налево, а операторы .* и ./ – для поэлементного умножения и деления массивов.
Примеры:
--> v1=[2 4 6 8]; v2=[1, 4, 12, 24]; p=v1/v2, t=v1.*v2, r=v1./v2, h=v1.\v2
p =
0.3826323
t =
2 16 72 192
r =
2. 1. 0.5 0.3333333
h =
0.5 1. 2. 3.
Обратите внимание на результат операции:
-->x=[1 2 3 4 5 6];y=1/x
y =
0.0109890
0.0219780
0.0329670
0.0439560
0.0549451
0.0659341
В данном случае вычисляются не величины, обратные элементам вектора х, а каждый элемент вектора х делится на сумму квадратов всех элементов вектора. Результат же операции y=x^(-1) дает то, что надо:
-->x=[1 2 3 4 5 6];y=x^ (-1)
y =
1. 0.5 0.3333333 0.25 0.2 0.1666667
Функции – это имеющие уникальные имена подпрограммы, выполняющие определенные преобразования над своими аргументами и при этом возвращающие результаты этих преобразований.
Функции (макросы) в Scilab похожи на те, что встречаются в других языках программирования. Функции могут иметь аргумент, сами являться аргументом другой функции, быть членом списка, участвовать в операциях сравнения, вызываться рекурсивно. Функция начинается со слова function и заканчивается словом endfunction.
Первая строка функции может быть следующей:
function var=my_name(x1,...,xk),
где var- имя переменной, а xi - входные переменные.
Ниже приведен пример функции, вычисляющей сумму положительных элементов в массиве v.
function g=f(v)
s=0; n=length(v);
for i=1:n
if v(i)>0 then
s=s+v(i);
end
end
g=s;
endfunction
Для использования этой функции ее нужно сначала сохранить на диске в файле с именем f.sci,выполнить пункт меню Execute/Load into Scilab, а затем вызвать ее:
--> x=[1 2 5 -3 7 -9 12]; t=f(x)
t =
27
Если функция должна возвращать несколько значений, то ее надо определить в формате:
function[y1, y2, …] = func(x1,x2,…)
Тело функции
Endfunction
Здесь y1, y2, … – список выходных аргументов, x1, x2, … – список входных аргументов, func – имя функции.
Дата добавления: 2016-01-20; просмотров: 1313;