Ввод вещественного числа и представление результатов вычислений
Числовые результаты могут быть представлены с плавающей (например, –3.2Е-6, –6.42Е+2), или с фиксированной (например, 4.12, 6.05, –17.5489) точкой. Числа в формате с плавающей точкой представлены в экспоненциальной форме mE±p, где m – мантисса (целое или дробное число с десятичной точкой), p – порядок (целое число). Для того, чтобы перевести число в экспоненциальной форме к обычному представлению с фиксированной точкой, необходимо мантиссу умножить на десять в степени порядок.
Например,
-6.42Е+2 = -6.42.102 = -642
3.2E-6 = 3.2.10-6 =0.0000032
При вводе вещественных чисел для отделения дробной части используется точка.
Примеры ввода и вывода вещественных чисел.
Пример 11.
-->0.123
ans =
0.123
-->-6.42e+2
ans =
- 642.
-->3.2e-6
ans =
0.0000032
Пример вывода значения системной переменной π и некоторой переменной q. Scilab в качестве результата выводит только восемь значащих цифр, т.к. восемь значащих цифр – это формат вывода вещественного числа по умолчанию.
Пример 12.
-->%pi
%pi =
3.1415927
-->q=0123.4567890123456
q =
123.45679
Для того, чтобы контролировать количество выводимых на печать разрядов применяют команду printf с заданным форматом, который соответствует правилам принятым для этой команды в языке С. Приведем несколько примеров вызова команды printf.
Пример 13.
-->printf("%1.12f",%pi)
3.141592653590
-->printf("%1.15f",%pi)
3.141592653589793
-->printf("%1.2f",q)
123.46
-->printf("%1.10f",q)
123.4567890123
-->//По умолчанию 6 знаков после запятой
|
|
-->printf("%f",q)
123.456789
Функции в Scilab
Все функции, используемые в Scilab, можно разделить на два класса: встроенные; определенные пользователем. В общем виде обращение к функции в Scilab имеет вид:
имя_переменной = имя_функции (переменная1 [, переменная2, …])
где имя_переменной – переменная, в которую будут записаны результаты работы функции; этот параметр может отсутствовать, тогда значение, вычисленное функцией будет присвоено системной переменной ans;
имя_функции – имя встроенной функции или ранее созданной пользователем;
переменная1, переменная2, … – список аргументов функции.
Элементарные математические функции
Пакет Scilab снабжен достаточным количеством всевозможных встроенных функций. В табл.1 приведены элементарные математические функции, используемые чаще всего.
Таблица 1
Элементарные математические функции Scilab
Пример 14. Пример вычисления выражения
-->x=1.2;y=0.3;
-->z=sqrt(abs(sin(x/y)))*exp(x^y)
z =
2.5015073
Функции, определенные пользователем
В п.2.3.5 сообщалось о файлах-сценариях и даже была представлена программа, которая решала конкретное квадратное уравнение. Но в эту программу невозможно было передать входные параметры, то есть это был обычный список команд, воспринимаемый системой как единый оператор.
|
|
Функция, как правило, предназначена для неоднократного использования, она имеет входные параметры и не выполняется без их предварительного задания. Рассмотрим несколько способов создания функций в Scilab.
Первый способ это применение оператора:
deff('[имя1,...,имяN]=имя_функции(переменная_1,...,переменная_M)',
'имя=выражение;...;имя1=выражение1;...;имяN=выражениеN')
где имя1,...,имяN – список выходных параметров (от 1 до N), т.е. переменных, которым будет присвоен конечный результат вычислений, имя_функции – имя с которым эта функция будет вызываться, переменная_1,...,переменная_M – входные параметры (от 1 до M).
Приведем самый простой способ применения оператора deff. Создадим и применим функцию для вычисления выражения, приведенного в примере 14.
Пример 15.
-->deff('z=fun1(x,y)','z=sqrt(abs(sin(x/y)))*exp(x^y)');
-->x=1.2;y=0.3;z=fun1(x,y)
z =
2.5015073
Пример 16. Создадим и применим функцию, вычисляющую площадь треугольника со сторонами a, b и c по формуле Герона , где
-->deff('S=G(a,b,c)','p=(a+b+c)/2;S=sqrt((p-a)*(p-b)*(p-c))');
-->G(2,3,3)
ans =
1.4142136
Пример 17. Создать функцию поиска корней квадратного уравнения.
-->deff('[x1,x2]=korni(a,b,c)',
'd=b^2-4*a*c;x1=(-b+sqrt(d))/2/a;x2=(-b-sqrt(d))/2/a');
-->[x1,x2]=korni(-2,-3,5)
|
|
x2 =
1.
x1 =
2.5
Второй способ создания функции это применение конструкции вида:
function[имя1,...,имяN]=имя_функции(переменная_1,...,переменная_M)
тело функции
endfunction
где имя1,...,имяN – список выходных параметров (от 1 до N), то есть переменных, которым будет присвоен конечный результат вычислений, имя_функции – имя с которым эта функция будет вызываться, переменная_1,...,переменная_M – входные параметры (от 1 до M).
Все имена переменных внутри функции, а так же имена из списка входных и выходных параметров воспринимаются системой как локальные, то есть эти переменные считаются определенными только внутри функции. Вообще говоря, функции в Scilsb играют роль подпрограмм. Поэтому целесообразно набирать их тексты в редакторе и сохранять в виде отдельных файлов. Причем имя файла должно обязательно совпадать с именем функции. Расширение файлам-функциям обычно присваивают *.sci или *.sce.
Обращение к функции осуществляется так же, как и к любой другой встроенной функции системы, то есть из командной строки. Однако функции, хранящиеся в отдельных файлах должны быть предварительно загружены в систему, например при помощи оператора exec(имя_файла) или командой главного меню File\Exec..., что в общем, одно и то же.
|
|
Пример 18. Решить кубическое уравнение ax3+bx2+cx+d=0 (1)
после деления на a принимает канонический вид: x3+rx2+sx+t=0 , (2)
где r=b/a, s=c/a , t=d/a.
В уравнении (2) сделаем замену x=y− r/3 и получим следующее приведенное уравнение: y3+ py+q=0, (3)
где p=(3s−r2)/3,
Число действительных корней приведенного уравнения (3) зависит от знака дискриминанта (табл. 2).
Таблица 2
Количество корней кубического уравнения
Корни приведенного уравнения могут быть рассчитаны по формулам Кардано:
(4)
Здесь .
Список команд, реализующий описанный выше способ решения кубического уравнения, представлен в виде функции:
function [x1,x2,x3]=cub(a,b,c,d)
r=b/a;
s=c/a;
t=d/a;
p=(3*s-r^2)/3;
q=2*r^3/27-r*s/3+t;
D=(p/3)^3+(q/2)^2;
u=(-q/2+sqrt(D))^(1/3);
v=(-q/2-sqrt(D))^(1/3);
y1=u+v;
y2=-(u+v)/2+(u-v)/2*%i*sqrt(3);
y3=-(u+v)/2-(u-v)/2*%i*sqrt(3);
x1=y1-r/3;
x2=y2-r/3;
x3=y3-r/3;
endfunction
Далее приведен фрагмент рабочей области, демонстрирующий вызов функции и вывод результатов ее работы:
-->exec('C:\Ksu\Scilab\scilab-4.0-rc1\cub.sce');
-->disp('exec done');
Warning :redefining function: cub
exec done
-->[x1,x2,x3]=cub(3,-20,-3,4)
x3 =
0.3880206
x2 =
- 0.5064407
x1 =
6.7850868
Дата добавления: 2019-09-13; просмотров: 203; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!