Ввод вещественного числа и представление результатов вычислений



Числовые результаты могут быть представлены с плавающей (например, –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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!