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 - визуальные среды

Знаете ли Вы, что такое "усталость света"?
Усталость света, анг. tired light - это явление потери энергии квантом электромагнитного излучения при прохождении космических расстояний, то же самое, что эффект красного смещения спектра далеких галактик, обнаруженный Эдвином Хабблом в 1926 г.
На самом деле кванты света, проходя миллиарды световых лет, отдают свою энергию эфиру, "пустому пространству", так как он является реальной физической средой - носителем электромагнитных колебаний с ненулевой вязкостью или трением, и, следовательно, колебания в этой среде должны затухать с расходом энергии на трение. Трение это чрезвычайно мало, а потому эффект "старения света" или "красное смещение Хаббла" обнаруживается лишь на межгалактических расстояниях.
Таким образом, свет далеких звезд не суммируется со светом ближних. Далекие звезды становятся красными, а совсем далекие уходят в радиодиапазон и перестают быть видимыми вообще. Это реально наблюдаемое явление астрономии глубокого космоса. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution