3GL   к технологии программирования   к экономической информатике   4GL - визуальные среды

Бесплатное ПО, заменяющее лицензионные коммерческие пакеты

SciLab, аналог MatLab и MAthCAD

Scilab - один из самых интересных свободных математических программ.

Scilab - система компьютерной математики, которая предназначена для выполнения инженерных и научных вычислений. По возможностям пакет Scilab практически не уступает Mathcad, а по интерфейсу близок к Matlab. В Scilab реализованы численные методы решения следующих задач вычислительной математики, среди которых можно выделить следующие:

  • задачи линейной алгебры,
  • нелинейные уравнения и систем,
  • задачи оптимизации, при решении которых следует обратить внимание на несколько нестандартный синтаксис,
  • дифференцирование и интегрирование,
  • обработка экспериментальных данных (интерполяция и метод наименьших квадратов),
  • обыкновенные дифференциальные уравнения и системы.

В Scilab есть встроенные функции для численного решения большинства стандартных математических задач. Для решения нестандартных задач в Scilab есть довольно мощный объектно-ориентированный язык программирования (sci-язык), с помощью которого пользователь может создавать свои визуальные приложения (с использованием встроенных функций), которые могут выполняться, как отдельные программы в среде Scilab.

Графические возможности Scilab не уступают проприетарным математическим пакетам. Следует обратить внимание на то, что в состав Scilab входит Xcos - система компьютерного моделирования, аналогичная Simulink. Cвободно распространяемый пакет Scilab должен занять достойное место на компьютере специалиста, чья деятельность связана с решением задач вычислительной математики.


Скачать Scilab для различных операционных систем можно на странице загрузки официального сайта.

Мое знакомство с пакетом началось 5 лет назад c ресурса http://scilab.psati.ru/rukovodstvo/index.html, за эти годы был разработан курс лекций (совместно с Чесноковой О.В.) по пакетуScilab 4.

Затем в содружестве с компанией ALT Linux была написана и издана книга. Это первая, и на сегодняшний день единственная книга по пакету, изданная на русском языке.

Е. Р. Алексеев, Е. А. Чеснокова, Е. А. Рудченко. Scilab: Решение инженерных и математических задач. Полный текст книги по Scilab находится на этой странице сайта Alt Linux, прямая ссылка для скачивания книги.

На сегодняшний вышел Scilab 5.2, в нем появилось много изменений, в частности значительно изменилась система моделирования, которая теперь называется Xcos.
Список изменений в версии 5.0 по сравнению с 4.1 можно увидеть здесь(на английском языке)

Изменения в версии 5.2 представлены на официальном сайте программы в виде pdf файла.

Очень надеюсь, что в ближайшее время я напишу обзор нововведений Scilab 5.0-5.2. Есть мечта и о втором издании книги, дополнив его новыми возможностями и системой моделирования Xcos. Но, наверное, только мечта. Хотя, если Alt Linux или кто другой возьмётся за издание, то почему нет. Написать не проблема.

  1. Начало работы в SciLab
  2. Векторы и матрицы в SciLab

Алексеев Евгений Ростиславович

Алексеев Евгений Ростиславович

Алексеев Евгений Ростиславович. Родился 13 сентября 1964 года в Советском Союзе (г. Кранослободск Волгоградской области). Работаю в Донецком национальном техническом университете доцентом кафедры "Вычислительная математика и программирование" (ВМиП). В 1986 г. окончил с отличием Донецкий политехнический институт по специальности 0647 "Прикладная математика". В 1986 -1991 гг. работал инженером в СКТБ СУ Института прикладной математики АН УССР. С 1992 г. работает на кафедре ВМиП в должности ассистента, старшего преподавателя, доцента. В 2003 г. успешно защитил кандидатскую диссертацию в Донецком национальном техническом университете. Автор более пятидесяти научных и методических работ, десяти книг. Есть страничка на википедии.

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

Контакты: e-mail: ERAlekseev на mail точка ru

Персональная страница на сайте www.vkontakte.ru - http://vkontakte.ru/id7785282, клуб фанатов - http://vkontakte.ru/club7765665.

Начало работы в SciLab

Главное окно программы имеет вид:

Рисунок 2.

Основной режим работы в Scilab — выполнение команд в консоли. Кроме этого в Scilab интегрирован текстовый редактор Scinotes,
с помощью которого удобно создавать скрипты. Для анализа и редактирования переменных, используемых в текущей сессии,
можно использовать встроенный редактор переменных. Пользователь может просматривать историю команд, присутствует встроенная справочная система.
С помощью механизма ATOMS пользователь может скачивать и устанавливать дополнительные модули.
Рассмотрим выполнение простейших операций в консоли Scilab.
Работа в Scilab производится с помощью команд, набираемых после приглашения

-->

Выполнение команды осуществляется с помощью нажатия клавиши Enter.

Например, для вычисления 2+2 необходимо набрать 2+2 и нажать Enter.

-->2+2
 ans  =
 
    4.

-->

Переменная ans (от англ. answer — ответ) содержит результат операции.
Если в конце команды стоит символ ";", то результат операции вычисляется, но не выводится на экран. Это удобно при вводе нескольких команд.


-->2+2;
 
-->ans=ans+3
 ans  =
 
    7.
    
--> 

Длинные команды можно разделить на несколько строк. Для этого в конце строки нужно поставить две или более точки.

-->2+2..
-->+3+3...
-->+10
 ans  =
 
    20.  
    
--> 

Для создания комментариев можно использовать команду //.
Все, что написано справа от символов // рассматривается как текст.


-->2*2 //дважды два = четыре
 ans  =
 
    4.  

-->

Редактирование команд осуществляется с помощью клавиш управления курсором <-;, ->,
клавиш Delete (удаление символа, стоящего после курсора),
<-Backspace (удаление символа, стоящего перед курсором),
Home (переход в начало строки) и End (переход в конец строки).

Клавиши управления курсором «вверх» и «вниз» позволяют пролистывать выполненные команды, а клавиши PageUp и PageDown — пролистывать рабочую область.

При вводе действительного числа в качестве разделителя целой и дробной части десятичного числа используется точка (например 55.777).

Для записи скобок используются круглые скобки ( ).

При вводе выражений можно использовать операторы:

+ — сложение;
— — вычитание;
* — умножение;
^ — возведение в степень;
/ — деление слева направо;
\ — деление справа налево.
Также можно использовать встроенные переменные %pi (число π) и %e (число e).

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

Приведем некоторые из них:

sqrt(x) — квадратный корень из числа x;
abs(x) — модуль числа x;
sin(x) — синус числа x;
cos(x) — косинус числа x;
tan(x) — тангенс числа x;
cotg(x) — котангенс числа x;
asin(x) — арксинус числа x;
acos(x) — арккосинус числа x;
atan(x) — арктангенс числа x;
exp(x) — экспонента числа x;
log(x) — натуральный логарифм числа x;
log10(x) — десятичный логарифм числа x.
Подробное описание всех функций можно найти в справочной системе Scilab.

Заметим, что по умолчанию результат содержит восемь значащих цифр.
Количество цифр, отображаемых в результате, можно изменить с помощью команды
printf.

Например,


-->printf("%1.5f",%pi)
3.14159 
-->printf("%1.10f",%pi)
3.1415926536 

-->

Для присваивания значений переменным используется оператор "=".
Например, чтобы присвоить x значение 5, нужно выполнить команду x=5.


-->x=5
 x  =
 
    5.  

-->


Если в конце команды стоит символ ";", то значение переменной не выводится на экран.


-->x=5;

-->


В имени переменной учитывается регистр. Например, x и X — две разные переменные.
Имя переменной не должно совпадать с названием встроенных переменных, процедур и функций.
В имени переменной можно использовать не более 24 символов.
Переменная может быть числового типа или строкового типа.
Для присваивания переменной строки символов необходимо заключить эту строку в одинарные кавычки.
Например, чтобы присвоить x=abc, нужно набрать x='abc'.


-->x='abc'
 x  =
 
 abc   

-->


Команда clear позволяет очищать значения переменных.
Например, команда clear очищает значения всех переменных,
а команда clear x очищает значение переменной x.

Функции в Scilab делятся на встроенные и определенные пользователем.
Некоторые встроенные функции были приведены выше. Рассмотрим определение пользовательских функций.

Пользовательские функции можно определить с помощью команды deff или конструкции


function ... endfunction.

Формат команды deff:


deff('[y1,y2,...,yn]=название_функции(x1,x2,...,xn)',
['y1=выражение_1';
'y2=выражение_2';
...;
'yn=выражение_n']), 

где x1, x2, ..., xn — входные переменные, y1, y2, ..., yn — выходные переменные,
выражение_1,
выражение_22,
…,
выражение_n
— выражения для вычисления y1, y2, ..., yn.

Пример. Определить функцию y=x^2 и вычислить ее значение при x=2.


-->deff('[y]=myfunction(x)','y=x^2')
 
-->myfunction(2)
 ans  =
 
    4.  

-->  


Формат команды function… endfunction:


function[y1,y2,..,yn]=название_функции(x1,x2,...,xn)

команды

endfunction


или в одну строку

function[y1,y2,..,yn]=название_функции(x1,x2,...,xn), команды, endfunction

где y1,y2,..,yn — выходные параметры функции, x1,x2,...,xn — входные параметры функции.

Пример. Определить функцию y=x^3 и вычислить ее значение при x=2.


-->function[y]=myfunc(x)
-->y=x^3
-->endfunction
 
-->myfunc(2)
 ans  =
 
    8.  

-->

Векторы и матрицы в SciLab

Векторы и матрицы представляют собой одномерный и двумерный массивы.
Значение нижней границы индексации элементов массива в Scilab по умолчанию равно единице.
Одномерный массив (вектор-строку) можно задать с помощью команды
X=a:h:b

где X -название массива, a и b — значения первого и последнего элементов массива, h — шаг, с которым изменяются элементы массива.
Возможна запись вида

X=a:b

В этом случае шаг автоматически принимается равным единице.

Пример. Задать вектор-строку X с элементами -2,-1,0,1,2.

-->X=-2:2
 X  =
 
  - 2.  - 1.    0.    1.    2.  

--> 

Пример. Задать вектор-строку X с элементами -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2.

-->X=-2:0.5:2
 X  =
 
  - 2.  - 1.5  - 1.  - 0.5    0.    0.5    1.    1.5    2.

--> 

Другой способ определить вектор — перечислить все его элементы.
В этом случае нужно выполнить команду

X=[x1,x2,...,xn] 

или команду

X=[x1 x2 ... xn]

где X -имя вектора, x1,x2,...,xn — элементы массива.

Пример. Задать вектор-строку X с элементами -5, 0.5, -7, 25.

-->X=[-5 0.5 -7 25]
 X  =
 
  - 5.    0.5  - 7.    25. 

-->  

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

Пример. Задать вектор-столбец X с элементами -5, 0.5, -7, 25.

-->X=[-5; 0.5; -7; 25]
 X  =
 
  - 5.   
    0.5  
  - 7.   
    25.  

-->  

Другой способ задать вектор-столбец — использовать транспонирование матриц.
Операция транспонирования задается с помощью знака '.

Пример.

-->X=[-2:2]'
 X  =
 
  - 2.  
  - 1.  
    0.  
    1.  
    2.   

-->  

или

-->X=-2:2;
 
-->X'
 ans  =
 
  - 2.  
  - 1.  
    0.  
    1.  
    2.  

-->   

Для доступа к элементам вектора нужно указать название вектора и в круглых скобках номер элемента.

Пример.

-->X=-1:1
 X  =
 
  - 1.    0.    1.  
 
-->X(1)
 ans  =
 
  - 1.  
 
-->X(2)
 ans  =
 
    0.  
 
-->X(3)
 ans  =
 
    1.  

-->

Для того, чтобы задать матрицу с элементами xij, нужно выполнить команду
вида

X=[x00 x01 ... x0n; 
   x10 x11 ... x1n; 
   ...
   xn0 xn1 ... xnn].

Для доступа к элементам нужно указать название матрицы и в круглых скобках номер элемента.

Пример.

-->X=[-1 0 1; 0 1 2; 5 4 7]
 X  =
 
  - 1.    0.    1.  
    0.    1.    2.  
    5.    4.    7.  

-->X(3,3)
 ans  =
 
    7.  

-->

Матрицы можно формировать на основе имеющихся

-->a1=[1 1 1]; a2=[2 2 2]; a3=[3 3 3];
 
-->A=[a1 a2 a3]
 A  =
 
    1.    1.    1.    2.    2.    2.    3.    3.    3.  
 
-->A=[a1; a2; a3]
 A  =
 
    1.    1.    1.  
    2.    2.    2.  
    3.    3.    3.  

-->

С помощью знака ":" можно выполнять различные операции с матрицами

Пример.

-->X=[-1 0 1; 0 1 2; 5 4 7]
 X  =
 
  - 1.    0.    1.  
    0.    1.    2.  
    5.    4.    7.  
 
-->X(1,:) //Выделяет из матрицы X первую строку
 ans  =
 
  - 1.    0.    1.  
 
-->X(:,1) //Выделяет из матрицы X первый столбец
 ans  =
 
  - 1.  
    0.  
    5.  
 
-->X(1,:)=[] //Удаляет из матрицы X первую строку
 X  =
 
    0.    1.    2.  
    5.    4.    7.  
 
-->X(1:2,2:3) //Выделяет из матрицы X подматрицу
 ans  =
 
    1.    2.  
    4.    7.  

-->

При работе с матрицами в пакете Scilab можно использовать следующие операции:

1. + — сложение;

Пример.

-->A=[1 2 3]; B=[3 4 5];
 
-->A+B
 ans  =
 
    4.    6.    8.  

-->

2. – –- вычитание;

Пример.

-->A=[1 2 3]; B=[3 4 5];
 
-->A-B
 ans  =
 
  - 2.  - 2.  - 2.  
 
-->

3. ’ –- транспонирование;

-->A=[1 2 3];
 
-->A'
 ans  =
 
    1.  
    2.  
    3.  
 
-->

4. * — умножение;

Пример.

-->A=[1 2 3]; B=[3 4 5]';
 
-->A*B
 ans  =
 
    26.  

-->

5. * –- умножение на число;

Пример.

-->A=[1 2 3];
 
-->3*A
 ans  =
 
    3.    6.    9.  

-->

6. ^ — возведение в степень.

7. .^ — поэлементное возведение в степень;

Пример.

-->A=[1 2 3];
 
-->A.^3
 ans  =
 
    1.    8.    27.  
 
-->


8. \ — A\B = A-1*B;

Пример.

-->A=[1 2; 3 5]; B=[2;5];
 
-->A\B
 ans  =
 
    0.  
    1.  
 
-->


9. / — B/A = B*A-1;

Пример.

-->A=[0;1]; B=[2;5];
 
-->A/B
 ans  =
 
    0.    0.   
    0.    0.2    
 
-->


10. .* — поэлементное умножение матриц Ai*Bi;

Пример.

-->A=[1 2 3]; B=[3 4 5];
 
-->A.*B
 ans  =
 
    3.    8.    15.    
 
-->


11. .\ — поэлементное левое деление (Bi/Ai);


-->A=[1 2 3]; B=[3 4 12];
 
-->A.\B
 ans  =
 
    3.    2.    4.  

-->


12. ./ — поэлементное правое деление (Ai/Bi).


-->A=[5 2 6]; B=[1 2 3];
 
-->A./B
 ans  =
 
    5.    1.    2.    

-->


Если к заданной матрице применить некоторую функцию, то элементы матрицы будут преобразованы в соответствии с этой функцией.


Пример.

-->X=[0 %pi];
 
-->cos(X)
 ans  =
 
    1.  - 1.      

-->


При работе с матрицами можно использовать встроенные функции. Рассмотрим некоторые из них.

Функция length(X) возвращает количество элементов матрицы X.

Пример.

-->X=[1 2 3 4 5];
 
-->length(X)
 ans  =
 
    5.  

-->


Пример.

-->X=[1 2; 3 4; 5 6];
 
-->length(X) //кол-во всех элементов матрицы X
 ans  =
 
    6.  
 
-->length(X(:,1)) //кол-во строк матрицы X
 ans  =
 
    3.  
 
-->length(X(1,:)) //кол-во столбцов матрицы X
 ans  =
 
    2.  

-->


Функция size(X) возвращает вектор, содержащий количество строк и столбцов матрицы X.


Пример.

-->X=[1 2; 3 4; 5 6];
 
-->size(X)
 ans  =
 
    3.    2.  
  
-->


Функция max(X) возвращает максимальный элемент матрицы X.
Функция min(X) возвращает минимальный элемент матрицы X.
Функция sum(X) возвращает сумму элементов матрицы X.
Функция prod(X) возвращает произведение элементов матрицы X.
Функция det(X) возвращает определитель матрицы X.
Функция inv(X) возвращает матрицу, обратную к X.

3GL   к технологии программирования   к экономической информатике   4GL - визуальные среды

Сайт ПДСНПСР. Если ты патриот России - жми сюда!


Знаете ли Вы, что такое "Большой Взрыв"?
Согласно рупору релятивистской идеологии Википедии "Большой взрыв (англ. Big Bang) - это космологическая модель, описывающая раннее развитие Вселенной, а именно - начало расширения Вселенной, перед которым Вселенная находилась в сингулярном состоянии. Обычно сейчас автоматически сочетают теорию Большого взрыва и модель горячей Вселенной, но эти концепции независимы и исторически существовало также представление о холодной начальной Вселенной вблизи Большого взрыва. Именно сочетание теории Большого взрыва с теорией горячей Вселенной, подкрепляемое существованием реликтового излучения..."
В этой тираде количество нонсенсов (бессмыслиц) больше, чем количество предложений, иначе просто трудно запутать сознание обывателя до такой степени, чтобы он поверил в эту ахинею.
На самом деле взорваться что-либо может только в уже имеющемся пространстве.
Без этого никакого взрыва в принципе быть не может, так как "взрыв" - понятие, применимое только внутри уже имеющегося пространства. А раз так, то есть, если пространство вселенной уже было до БВ, то БВ не может быть началом Вселенной в принципе. Это во-первых.
Во-вторых, Вселенная - это не обычный конечный объект с границами, это сама бесконечность во времени и пространстве. У нее нет начала и конца, а также пространственных границ уже по ее определению: она есть всё (потому и называется Вселенной).
В третьих, фраза "представление о холодной начальной Вселенной вблизи Большого взрыва" тоже есть сплошной нонсенс.
Что могло быть "вблизи Большого взрыва", если самой Вселенной там еще не было? Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 18.11.2017 - 23:27: СОВЕСТЬ - Conscience -> РУССКИЙ МИР - Карим_Хайдаров.
19.10.2017 - 04:24: Беседка - Chatter -> ЭПИСТОЛЯРНАЯ ФИЗИКА - Карим_Хайдаров.
11.10.2017 - 05:10: ЭКСПЕРИМЕНТАЛЬНАЯ ФИЗИКА - Experimental Physics -> Эксперименты с трансформатором Тесла - Карим_Хайдаров.
05.10.2017 - 11:03: СОВЕСТЬ - Conscience -> Проблема государственного терроризма - Карим_Хайдаров.
04.10.2017 - 15:26: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> ПРОБЛЕМА КРИМИНАЛИЗАЦИИ ЭКОНОМИКИ - Карим_Хайдаров.
04.10.2017 - 05:02: Беседка - Chatter -> "Зенит"ы с "Протон"ами будут падать - Карим_Хайдаров.
03.10.2017 - 18:16: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от О.Н. Четвериковой - Карим_Хайдаров.
03.10.2017 - 07:42: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вазгена Авагяна - Карим_Хайдаров.
03.10.2017 - 07:24: ЦИТАТЫ ЧУЖИХ ФОРУМОВ - Outside Quotings -> ЗА НАМИ БЛЮДЯТ - Карим_Хайдаров.
03.10.2017 - 05:48: Беседка - Chatter -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
02.10.2017 - 19:04: АСТРОФИЗИКА - Astrophysics -> Апериодическая комета C/2014 Q2 Lovejoy - Карим_Хайдаров.
02.10.2017 - 14:57: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution