Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Scilab / SciLab

.pdf
Скачиваний:
110
Добавлен:
31.12.2018
Размер:
4.38 Mб
Скачать

4) rand() без аргументов дает случайное скалярное число, случайным образом изменяющееся при следующем вызове.

5)rand("normal") или rand("uniform") позволяют задать распределение случайных чисел. 6)rand("info") возвращает значение переменной key.

7)rand("seed" [,n]) позволяет ре-инициализировать генератор за счет изменения ядра.

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

С помощью команды grand, которая тоже является генератором случайных чисел, но более сложным.

В отличии от команды rand, команда grand может создавать последовательности случайных чисел из различных распределений.

Синтаксис

Y=grand(m, n, dist_type [,p1,...,pk]) Y=grand(X, dist_type [,p1,...,pk]) Y=grand(n, dist_type [,p1,...,pk]) S=grand(action [,q1,....,ql])

Параметры

m, n : целые числа, определяющие желаемый размер матрицы Y

X : матрица. Используется только данные о ее размере ( задает m на n)

dist_type : символьная переменная, указывающая, распределение случайной величины какого типа мы создаем. Принимает определенные значения ('bin', 'nor', 'poi', ...)

p1, ..., pk : параметры (действительные или целые), необходимые для полного определения распределения типа dist_type

Y : результирующая матрица из случайных величин размера m на n

action : символьная переменная, указывающая на базу генератора (ов). Значение параметра action, равное 'setgen' меняет текущую базу генератора, 'getgen' извлекает имя текущего базового генератора, 'getsd' извлекает начальное число для генерации случайных чисел текущего генератора и т.д.

q1, ..., ql : параметры (обычно строка) необходимые для определения параметра action. S: результат применения команды (обычно строка или столбец действительных векторов)

Спомощью команды grand можно получить следующие распределения случайных чисел:

Бета -распределение

Биномиальное распределение (два варианта)

Распределение hi-квадрат (два варианта)

Экспоненциальное распределение

F- дисперсионное распределение (Фишера) (два варианта)

Гамма распределение

Нормальное распределение Гаусса-Лапласа

Мультивариативное Гауссово распределение

Геометрическое распределение

Распределение Маркова

2

Полиномиальное распределение

Распределение Пуассона

Распределение, состоящее из перестановки из n-элементов

Равномерное распределение (четыре варианта)

Подробный синтаксис этих команд смотрите с помощью команды help grand.

Кроме выбора различного закона распределения случайных величин, начиная с версии Scilab 2.7, можно выбирать между несколькими базовыми генераторами. В help grand приводятся параметры команды, отвечающие за разные варианты генератора случайных чисел.

Пример.

Создадим и построим экспоненциальное распределение случайных величин со средним арифметическим, равным Av.

m=100;

n=1;

Av=2;

// Av -величина среднего значения для построенной последовательности случайных величин

Y=grand(m,n,'exp',Av); plot2d(1:100,Y); // Черная линия Av2=5;

Y2=grand(m,n,'exp',Av2); plot2d(1:100,Y2,5); // Красная линия

Результат:

//Проверка m2=mean(Y2)

3

Результат: m2 = 6.1287607 m=mean(Y)

Результат: m = 1.8847255

Мы видим, что "заказанное" среднее Av и Av2 несколько отличаются от вычисленного по построенным случайным величинам. Если мы увеличим число элементов в последовательности, то результат будет точнее (ближе к значению Av).

Для сравнения: m=10000;

n=1;

Av=2;

Y=grand(m,n,'exp',Av);

m3=mean(Y);

Результат: m3 = 2.0290163

Как найти интегральную функцию распределения функции известных распределений ?

В Scilab существуют следующие команды определения интегральной функции для конкретных распределений:

cdfnor - для нормального распределения cdfbet - для Beta распределения

cdfbin - для биномиального распределения cdfchi - для хи-квадрат распределения

cdfchn - для нецентрального хи-квадрат распределения cdff - для F-распределения (Фишера)

cdffnc - для нецентрального F-распределения (Фишера) cdfgam - для гамма распределения

cdfnbn - для отрицательного биномиального распределения

cdfnor - - для нормального распределения (команда описана подробно) cdfpoi - - для распределения Пуассона (Poisson)

cdft - для T-распределения Стьюдента (Student)

Об использовании команды cdfnor было описано подробно ниже. Остальные команды работают по аналогичной схеме. Подробно смотри help соответствующих команд.

4

Как найти интегральную функцию распределения функции нормального распределения (Гаусса)?

С помощью команды cdfnor.

Синтаксис

[P,Q]=cdfnor("PQ",X,Mean,Std) определяет интеграл от нормального распределения с заданными параметрами X, Mean и Std.

Нормальное распределение, определенное в Scilab, пропорционально величине

exp( - 0.5 * ( X - Mean)2/Sd2 ,

где Mean и Sd - параметры распределения.

Эта функция представляет собой колоколообразную кривую. Параметр Mean - точка максимума и одновременно центра симметрии, а Sd - расстояние от этого центра до точки перегиба.

Замечание:

В справочнике Бронштейна и Семендяева определение нормального распределения (Гаусса) отличается от этого умножением на коэффициент 1/(sqrt(2*Pi)Sd) Команда cdfnor вычисляет P, равное значению интеграла от -infinity до X, нормального распределения, заданного параметрами Mean и Sd. Значение Q=1-P.

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

[X]=cdfnor("X",Mean,Std,P,Q)

[Mean]=cdfnor("Mean",Std,P,Q,X)

[Std]=cdfnor("Std",P,Q,X,Mean)

Параметры

P,Q, X, Mean, Std : действительные вектора одной и той же длины

P, Q (Q=1-P) : интеграл от -infinity до X для нормального распределения. Область значений: (0,1].

X : Верхний предел интегрирования. Область входных значений: (-infinity, +infinity) Мean : Среднее нормальной плотности. Область входных значений: ( -infinity, +infinity)

Sd : стандартное среднее отклонение (корень из дисперсии). Область входных значений: (0,

+infinity).

Пример. x=0.5; Mean=3; Std=2;

[P,Q]=cdfnor("PQ",x,Mean,Std)

Результат:

Q =

.8943502

P = .1056498

Полученное Q равно интегралу от -infinity до x=0.5 кривой нормального распределения с параметрами x=0.5, Mean=3 и Std=2.

5

SCILAB: Библиотеки

Глава 8. Создание собственных библиотек

Краткая инструкция

Шаг 1.

Создать и отладить тексты своих библиотечных функций. О том, что представляют собой функции в пакете Scilab и как их писать, смотрите в главе 3 (Программирование). Записать каждую из функций в отдельный файл с расширением sci в один каталог,

являющийся подкаталогом SCIDIR/macros/. Например, в SCIDIR/macros/my_dingo/

Замечание: Имя файла с расширением sci должно совпадать с именем функции, которая в нем определена, и не совпадать с уже занятыми именами команд.

Пример.

Для примера мы записали туда файлы dingo5.sci и dingo7.sci.

//file dingo5.sci

//Вычисление пятикратной суммы function c=dingo5(x,y) c=(x+y)*5;

endfunction

//file dingo7.sci

//Вычисление семикратной суммы function c=dingo7(x,y) c=(x+y)*7;

endfunction

Шаг 2.

Применить к команду genlib для создания скомпилированных файлов bin для всех файлов с расширением sci. Стандартная Scilab-переменная SCI содержит путь к местонахождению пакета Scilab на Вашем компьютере. genlib("Dingo_lib",SCI+"/macros/my_dingo")

Врезультате в каталоге SCI/macros/my_dingo/ дополнительно появятся файлы

dingo5.bin, dingo7.bin, а также два файла без расширения: names и lib.

ВASCII-файле names содержатся имена всех команд (функций) новой библиотеки. В

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

Шаг 3.

Добавить в файл SCI/scilab.star строку

load('SCI/macros/my_dingo/lib')

Шаг 4.

Создать справочные файлы для руководства "man" с расширением htm или xml для каждой новой команды и записать их в каталог SCI/man/eng/my_dingo/. Вероятно,

1

возможно и создание помощи на русском, но вряд ли это целесообразно на данном этапе при небольшом количестве русских пользователей.

Пример.

Файл dingo5.htm справки для нашей команды dingo5

Файл dingo7.htm справки для команды dingo7

Шаг 5.

Создать в том же каталоге SCI/man/eng/my_dingo/ файл с обязательным именем whatis.htm, в котором содержатся ссылки на справочные файлы для каждой функции этой библиотеки сами .htm файлы этих функций.

Пример.

Файл whatis.htm справки для библиотеки my_dingo

2

Шаг 6.

Добавить строку в SCI/man/index.htm вида

Шаг 7.

Добавить новую строку в тексте стартового файла Scilab SCI/scilab.star.

load(SCI+"/macros/my_dingo/lib")

, где my_dingo является названием подкаталога, в котором хранится наша новая библиотека.

Замечание:

Переменная SCI содержит главный каталог пакета Scilab на Вашем компьютере и является встроенной. Значение ее можно посмотреть, выполнив команду SCI.

Шаг 8.

Добавить новую строку в переменную %helps. (По строке для каждого каталога) в тексте стартового файла Scilab SCI/scilab.star, где SCI означает главный каталог программы Scilab на Вашем компьютере.

Можно добавить в тестовом редакторе нужную строку в файл initial_help_chapters.sci в каталоге SCI/macros/util/, а затем выполнить команду genlib относительно него. Но это плохой способ.

Удобнее это выполнить в пакете Scilab:

%helps=[%helps; "Path-Of-My-Help-Dir","My-Title"]

Для нашего примера это будет

%helps=[%helps; SCI+"/man/eng/my_dingo"," my_dingo"];

Шаг 9.

Обновить файл index.htm из каталога SCI/man/eng/, выполнив команду make_index(). Предварительно Вы должны были изменить переменную %helps. Теперь в списке глав помощи (в окне помощи Index) должна появится новая. Это окно вызывается из главного окна Scilab с помощью команды help без параметров.

Пример.

make_index()

Результат:

ans = C:\WINDOWS\TEMP\SD_-305393_/index.htm

Проверив, что этот в файл добавилось то, что мы хотели, скопируйте его в каталог

3

SCI/man/eng/ вместо старого index.htm.

А проще это, конечно, в текстовом режиме добавить в файл index.htm строку

Шаг 10.

Применить команду lib для создания описания библиотеки. Пример.

xlib=lib(SCI+"/macros/my_dingo/")

Результат:

xlib =

Functions files location :C:/PROGRAM FILES/SCILAB-2.7.2/macros/my_dingo/ dingo5 dingo7

После этого Вы можете пользоваться всеми файлами новой библиотеки.

Шаг 11.

Добавить в файл SCI/scilab.star строку

load('SCI/macros/my_dingo/lib')

Далее пробуйте работать с новой библиотекой. Успеха!

4

SCILAB: Библиотеки

Глава 9. Решение нелинейных уравнений

Как найти корни полинома?

С помощью команды roots.

Синтаксис

[x]=roots(p)

Параметры

p : полином с действительными или комплексными элементами

x=roots(p) возвращает комплексный вектор x корней полинома p. Степень полинома p должна быть <=100.

Пример 1.

x=poly(0,"x"); p=(x-2)*(x+3)*(x-7); w=roots(p)

Результат:

w =

!2. !

!- 3. !

!7. !

Пример 2.

a=1;

b=2;

c=3;

p=poly([a b c],"x","c");

Результат:

p =

1 + 2x + 3x2

r=roots(p)

Результат:

r =

!- .3333333 + .4714045i !

!- .3333333 - .4714045i !

// для проверки

q1=1+2*r(1)+3*r(1)^2 // r(1) -первый корень уравнения q1 =

- 1.110E-16

q2=1+2*r(2)+3*r(2)^2 // r(2) -второй корень уравнения q2 =

- 1.110E-16

1

Замечание: Для полиномов большой степени точность вычисления, по-видимо, невелика, причем для разных корней она не совпадает. Для проверки подставляйте найденное решение в искомое уравнение.

Последнее обновление 26.03.2004

2

Соседние файлы в папке Scilab
  • #
    31.12.20183.02 Кб366 tema.sce
  • #
    31.12.20181.07 Кб35ChemDifur6II.sce
  • #
    31.12.20181.43 Mб58introscilab-v1.3-ru.pdf
  • #
    31.12.2018753 б40Neyavnayashema.sci
  • #
    31.12.20181.94 Кб38Partialderivative.sci
  • #
    31.12.20184.38 Mб110SciLab.pdf
  • #
    31.12.2018709 б38syst333.sci
  • #
    31.12.2018266 б35tema2.sce
  • #
    31.12.2018361 б36tema5.sci