ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Работа с Scilab в режиме диалога

Лекция 1

Возможности системы SCILAB

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

Пакет разработан Scilab Group INRIA-Rocquencourt Metalau Project. Свободно распространяемую версию пакета вместе с полной документацией на английском языке в формате pdf можно получить по адресу http://www.scilab.org. http://teacher.ucoz.net/index/rabota_v_pakete_scilab/0-9 сайт Алексеева

С 1994 года распространяется в виде исходных кодов через интернет. Сейчас Scilab поддерживается компанией Scilab Consortium, созданной в 2003 году. Scilab поддерживает язык программирования высокого уровня для организации технических вычислений.

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

 

Вот некоторые возможности системы:

· В области математических вычислений:

- матричные, векторные, логические, условные операторы;

- символьные вычисления;

- полиномиальные и рациональные функции;

- элементарные и специальные функции;

- полиномиальная арифметика.

· В области реализации численных методов:

- решение дифференциальных уравнений;

- численное интегрирование;

- поиск корней нелинейных алгебраических уравнений;

- оптимизация функций нескольких переменных;

- одномерная и многомерная интерполяция;

- решение задач математической статистики.

· В области программирования:

- свыше 500 встроенных математических функций;

- интерфейс к Fortran, Tcl/Tk, C, C++, Java, LabView.

· В области визуализации результатов расчетов и графики:

- возможности создания и редактирования двухмерных и трехмерных графиков;

- проведение визуального анализа данных.

· Обработка сигналов

· Параллельная работа

· Статистика

· Работа с компьютерной алгеброй

 

Scilab имеет схожий с MATLAB язык программирования, в составе имеется утилита, позволяющая конвертировать документы Matlab → Scilab.

Программа доступна для различных операционных систем, включая GNU/Linux и Microsoft Windows.

Отличия от некоторых коммерческих программ:

  • Бесплатность
  • Маленький размер (дистрибутив занимает менее 120Мб против более чем двухгигабайтного пакета MATLAB)

Scilab состоит из 3-х частей:

o интерпретатор

o библиотека функций (Scilab-процедуры)

o библиотека Fortran и С процедур

Scilab/Знакомство с пользовательским интерфейсом

В этом разделе мы познакомимся с интерфейсом пользователя. Пользовательский интерфейс мы рассмотрим из-под Windows (пусть это вас не пугает, так как принципы едины во всех операционных системах). На рисунке 1 показан интерфейс программы, начиная с версии 5.4.

Рисунок 1 Пользовательский интерфейс в Windows 7

На рисунке 1 вы можете наблюдать, что внутри большого окна располагается ещё 4 более мелких:

· Обозреватель файлов;

· Командное окно;

· Обозреватель переменных;

· Журнал команд.

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

Условно назовём вид, представленный на рисунке 1, группой окон. В любой момент каждое окно может быть исключено из группы путём нажатия на командную кнопку Исключить (англ. Undock), которая представлена в виде кнопки со стрелочкой, стоящей между кнопкамиСправка (англ. Help on component) и Закрыть (англ. Close) на заголовке окна (см. рисунок 1). После исключения, окно может быть перемещено в любую точку рабочего стола.

Чтобы перегруппировать окна, необходимо ухватить заголовок окна, зажимая левую кнопку мышки, и перетащить курсор в желаемую позицию. «Фантом» в виде серой рамки будет подсказывать как встанет окно, если вы отпустите левую кнопку мыши, и здесь возможны следующие варианты:

· если вы попали курсором в какое-то окно группы, то перемещаемое окно поделит область по горизонтали пополам и займет свою позицию;

· то же, что и в предыдущем пункте, но по вертикали;

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

Исключённое окно может быть включено в любую группу. Для этого нужно захватить её заголовок и выполнить те же действия. Очень важно то, что хватать нужно не внешний заголовок окна, который генерируется операционной системой, а внутренний заголовок, на котором есть элементы управления Справка, Исключить иЗакрыть.

Перегруппировка требует практики, так как тот или иной вариант будет предложен в определенной позиции курсора. Попрактикуйтесь немного и выполните следующее упражнение.

Вы могли убедиться, когда переключались между окнами, что среда обладает незамысловатым интерфейсом и содержит минимум элементов, что идёт только в плюс программе. Переключаясь на определенное окно вы можете заметить, что изменяется панель с инструментами группы и строка меню под это окно. В целом нет надобности расписывать каждую кнопку, так как всё интуитивно просто и понятно. Рекомендую читателю посмотреть все настройки, которые предоставляются пользователю в графическом режиме. Для этого:

1. Сделайте активным Командное окно;

2. Затем вверху выберите Правка (англ. Edit);

3. В раскрывшемся меню нажмите на Настройки.

Коротко рассмотрим назначение каждого окна.

Командное окно[править]

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

На рисунке 1 в командном окне можно наблюдать техническую информацию о загрузке окружения, после которой система приглашает пользователя ввести команду. Начало строчки сопровождается стрелкой, указывающей направо (-->), которая и называется приглашением (англ. prompt или command prompt). Попробуйте ввести следующий код

-->2*2+69/25

В ответ от интерпретатора вы получите следующее

-->2*2+69/25

ans =

6.76

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

Перед тем как мы перейдём на следующее окно, введите вторую команду.

--> myVariable=26;

Этой командой вы попросили среду выделить память под новую переменную с именем myVariable и присвоить ей значение 26. Обратите внимание на точку с запятой в конце команды. Введя этот символ, вы попросили интерпретатор не выводить информацию о результате, получаемом после команды, к которой приставляется точка с запятой.

Например, попробуйте ввести

--> anotherVariable=31

и вы получите ответ, что присваивание прошло

--> anotherVariable=31

anotherVariable=

31.

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

 

Рисунок 2 Окно обозревателя переменных

Это окно появилось относительно недавно и призвано облегчить работу с объектами, которые создал пользователь. Если вы попробовали ввести предыдущие команды, то можете наблюдать результат, показанный на рисунке 2.

В этом окне отображается вся необходимая информация о созданных переменных в частности:

· имя переменной;

· размер переменной;

· тип переменной или другими словами тип данных, которая эта переменная в настоящий момент хранит;

· видимость переменной.

Нажав по переменной дважды откроется окно редактора переменных, которое показано на рисунке 3.

Рисунок 3 Окно редактора переменных

Редактор переменных — это ещё одно новшество. Вероятно вы спросите, почему в редакторе переменная представлена таблицей, на что вам будет дан вполне внятный ответ:

Все объекты в среде Scilab являются двухмерными массивами, в лучших традициях MATLAB, частичной копией которого является Scilab.

Переменные, которые были нами созданы ранее, являются просто-напросто вырожденным случаем — массивом с одним элементом. Мы ещё не раз вернемся к этому вопросу, а пока внимательно рассмотрите редактор переменных.

На рисунке 3 показана переменная myVariable, которой было присвоено значение 26. Поменяйте значение переменной дважды щёлкнув по значению 26 и введя, к примеру, 51, а затем нажмите клавишу <Enter> или щёлкните в любом другом месте окна.

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

-->myVariable

myVariable =

51.

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

Не бойтесь, если вы пока ничего не понимаете. Мы ещё не раз вернемся ко всем этим вопросам.

Всё, что вы сейчас видите в этом окне — вершина айсберга. За этой вершиной скрывается ещё целая куча системных переменных, которые регулируют работу окружения и часть которых пользователь может контролировать. Чтобы их увидеть в окне, сделайте следующее:

1. Сделайте активным окно Обозреватель переменных;

2. На панели меню вверху выберите пункт Фильтр (англ. Filter);

3. В раскрывшемся меню снимите галочку с пункта Скрывать системные переменные.

Рассмотрите эти переменные, но ни в коем случае не пробуйте их редактировать.

Журнал команд[править]

Рисунок 4 Окно журнала команд

Окно журнала команд отражает все команды, которые вводил пользователь в командную строку в течении текущего сеанса. На рисунке 4 показано окно журнала команд. Содержимое окна рисунка 4 может отличаться от вашего, так как автор при написании викиучебника то и делал, что отвлекался.

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

Тем не менее, если вам не нужны журналы, вы всегда их можете удалить или очистить, воспользовавшись командами меню.

Категория:

· Scilab

 

Способ 1.

Использовать команду poly.

Синтаксис

[p]=poly(a,"x", ["flag"])

Параметры:

a : матрица, вектор или действительное число;

x: символьная переменная ;

"flag" : строковая переменная, принимающая значение "roots" или "coeff". По умолчанию принимает значение "roots.

Можно писать сокращенно: "flag"= "r" или "c". Флаг "c" означает, что параметр a будет иметь смысл коэффициентов полинома.

Флаг "r" означает, что будет построен полином, корнями которого будут числа, заданные вектором a .

Пример:

-->poly([-1 0 8],”x”,”r”)

ans =

- 8x - 7x2 + x3

Обратите внимание на следующий пример:

-->x=poly(5,"y")

Это эквивалентно x=poly(5,"y","r") или

-->x=poly(5,"y","roots")

Результат:

x=

-5+y

-->poly([1 2 3],"x","c")
ans =
1 + 2x + 3x2
Способ 2.

Этот способ является более наглядным.

-->x=poly(0,"x"); p=x^2+2*x-6

p =

- 6 + 2x +x2

Endfunction

Здесь y1, y2, … – список выходных аргументов, x1, x2, … – список входных аргументов, func – имя функции.

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

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

Пример. Создадим в редакторе функцию с именем fun двух аргументов t и y, результатом которой будет трехмерный вектор, первый элемент которого равен t+y, второй элемент равен t-y, а третий элемент равен t*y. deff('[w]=fun(t,y)',[
'w(1)=t+y;';
'w(2)= t-y;'; 'w(3)= t*y;']) //Вызовем эту функцию q=fun(5,7)

Сохраним эту функцию на диске С в каталоге Documents and Settings\user под именем hhh и запустим на выполнение:

-->exec('C:\Documents and Settings\user\hhh');disp('exec done');

q =

12.

- 2.

35.

exec done

Пример. Создадим функцию, вычисляющую координаты сферы радиуса r и построим ее.

x=(0:0.5:10);

y=(0:0.5:10);

r=10;
//уравнение для сферы x^2+y^2+z^2=r^2 Вычислим z=sqrt(r^2-x^2-y^2);

deff('[z]=surf(x,y)','z=sqrt(r^2-x^2-y^2)'); fplot3d1(x,y,surf);


Замечание: Сложные функции лучше создавать на языках Fortran или C, а затем линковать вместе с пакетом Scilab.

 

В математических выражениях часто встречается оператор:(двоеточие), имеющий следующий формат:

Начальное_значение: Шаг: Конечное_значение

Если Шаг не указан, то считается, что он равен 1.

Примеры:

--> 1:3

ans =

1. 2. 3.

--> j=10:-2:2

j =

10. 8. 6. 4. 2.

--> x=1:.2:1.4, sin(x)

x =

1. 1.2 1.4

ans =

0.8415470 0.9320391 0.9854497

Если в математическом выражении допущена ошибка или предписываемые вычисления некорректны, Scilab выводит в командное окно соответствующие сообщения. Для возвращения к ранее набранным строкам с целью их корректировки используют клавиши ­ и ¯.

По умолчанию Scilab представляет результат вычислений с 8 значащим цифрами. Для того, чтобы контролировать количество выводимых разрядов числа на печать, можно использовать команду printf с заданным форматом.

Примеры:

-->c=678.5556696777888899 // Будет напечатано 8 цифр

c =

678.55567

-->printf(“%4.8f”,c)

678.55566968

Аналогичный результат дадут команды printf(“%1.8f”,c), printf(“%5.8f”,c)

-->printf(“%4.1f”,c)

678.6

-->d=56.6789

-->printf(‘%3.6f’,d) // 6 знаков после запятой

56.678900

 

-->c=678.55566969;d=56.6789;

-->printf('%4.3f %4.1f',c,d)

678.556 56.7

Для завершения работы с системой можно использовать команды Quit иExit.

Главное меню

Меню File

Команда New Scilab открывает новое окно Scilab, фактически пакет запускается повторно.

Команда Open открывает окно для загрузки созданного ранее файла, рисунка или модели.

Команда Load открывает окно для загрузки файлов, информация в которых хранится в виде машинных кодов, при их открытии в память компьютера загружаются определенные ранее переменные и функции.

Команда Save: сохранение всех определенных в данной сессии переменных и функций в виде файла с расширением sav или bin.

Команда Change Directoryменяет текущий каталог.

Команда Get Current Directoryвыдает в командную строку имя текущего каталога.

Команды Print Setup и Print задают опции печати.

Команда Exit - выход из системы.

Пункт меню Editпредназначен для редактирования текста программ. С его помощью можно выделять, копировать, вставлять текст, очищать буфер обмена, просматривать список ранее введенных команд (History).

С помощью пункта Preferencesможно при наличии возможности поменять язык в системе, цвет текста и заднего плана, восстановить прежние цвета, показать или скрыть кнопки панели инструментов, установить типы поддерживаемых форматов, выбрать фонт шрифта, очистить предысторию, очистить командное окно, вызвать консоль scilabи настроить ее.

Пункт меню Editor позволяет открыть окно редактора.

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

 

Операторы и функции

Некоторые специальные символы:

a(: , j) – j-й столбец матрицы a;

a(i , :) – i-я строка матрицы a;

a(j : k) – элементы aj, aj+1, …, ak;

a( : ) – записывает все элементы массива a в виде столбца;

a(m , :) =[ ] – удаляет из матрицы строку m;

a’ – транспонированная матрица а;

a.’ – транспонирование массива;

prod(a) – произведение элементов массива;

prod(a, dim) – произведение элементов столбцов (dim=1) или строк (dim=2) ;

sum(a) – сумма элементов массива;

sum(a, dim) - сумма элементов столбцов (dim=1) или строк (dim=2).

Endfunction

Если возвращаемое сформированной функцией costf значение ind равно 2, 3 или 4, то функция costf обеспечивает поиск минимума, т.е. в качестве результата функции optim возвращается f и xopt. Если ind=1, то в функции optim ничего не считается, условие ind<0 означает, что минимум f(x) не может быть оценен, а ind=0 прерывает оптимизацию. Вообще говоря, значение параметра ind является внутренним параметром для связи между optim и costf, для использования optim необходимо помнить, что параметр ind должен быть определен в функции costf.

Пример: найти минимум функции .

Решение. Построим график функции для определения интервалов [a, b], на которых находятся экстремумы этой функции.

-->x=-3:.1:3; y=x.^4-3*x.^2-5*x-4; plot(x, y); xgrid()

Из графика видно, что это отрезок [1, 2]. Набираем в окне редактора и отправляем на выполнение файл

function [f,g,r]=z(x,r)

f=x.^4-3*x.^2-5*x-4

g=4*x.^3-6*x-5

endfunction

x0=1;

[fmin,xmin]=optim(z,x0)

Получаем

--> xmin =

1.5233402

fmin =

- 13.193373

Возможен другой вариант, без ручного вычисления производной:

function y=gg(x)

y=x.^4-3*x.^2-5*x-4;

endfunction

function [f,g,r]=z(x,r)

f=gg(x)

g=numdiff(gg,x)

endfunction

x0=1;

[fmin,xmin]=optim(z,x0)

 

xmin =

1.5233402

fmin =

- 13.193373

В случае функции двух переменных:

(Поиск минимума функции Розенброка )

clc

x0=[-2;2];

function y=gg(x)

y=100*(x(2)-x(1)^2)^2+(1-x(1))^2;

endfunction

function [f,g,r]=z(x,r)

f=gg(x)

g=numdiff(gg,x)

endfunction

[fmin,xmin]=optim(z,x0)

xmin =

0.9999955

0.9999910

fmin =

2.010D-11

 

Численное интегрирование

При вычислении определенных интегралов от функций, заданных в виде таблицы или в явном виде ( ), одним из численных методов используют функции intsplin, inttrap, integrate, intg.

Способ 1.

С помощью команды intsplin. Это интегрирование экспериментальных данных с помощью сплайн-интерполяции. Известно значение интегрируемой функции в дискретных точках (узлах).

Пример: вычислить интеграл от таблично заданной функции

x 1.4 1.8 2.2 2.6 3.4 3.8 4.2 4.6
1.6487 1.3771 1.1972 1.0833 1.0202 1.0202 1.0833 1.1972 1.3771 1.6487

-->x=1:.4:5;

-->y=exp((x-3).^2/8)//значения у в таблице получены табулированием этой функции

-->v=intsplin(x,y)

Получаем:

v =

4.7799684

Или:

-->x=[1 1.4 1.8 2.2 2.6 3 3.4 3.8 4.2 4.6 5];

-->y=[1.6487 1.3771 1.1972 1.0833 1.0202 1 1.0202 1.0833 1.1972 1.3771 1.6487];

-->v=intsplin(x,y)

v =

4.7799328

Способ 2.

С помощью команды inttrap. Интегрирование экспериментальных данных с помощью трапецеидальной интерполяции (метод трапеций).

При вычислении интеграла между соседними узлами функция интерполируется линейно. Этот метод вычислений называется методом трапеций.

Вычислим интеграл от той же самой функции

-->x=1:.4:5;

-->y=exp((x-3).^2/8)

-->v=inttrap(x,y)

Получаем:

 

v =

4.8017553

Способ 3. С помощью команды integrate. Это интегрирование по квадратуре. Может задаваться требуемая точность вычислений.

Синтаксис [x]=integrate(expr,v,x0,x1 [,ea [,er]])

Параметры

expr : подынтегральная функция;

v : переменная интегрирования;

x0, x1 : пределы интегрирования;

ea, er : действительные числа. Первое из них – еа - предельная абсолютная ошибка. По умолчанию принимает значение 0. Второе - er -, - предельная относительная ошибка. По умолчанию принимает значение 1.d-8.

Пример: вычислить .

-->integrate('exp((x-3)^2/8)','x',1,5)

ans =

4.7798306

Можно это сделать и так.

Набираем и сохраняем в окне редактора под именем a.sci файл

function g=a(x)

g=exp((x-3).^2/8);

endfunction

Загружаем этот файл в среду Scilab (Load into Scilab).

Далее в строке ввода набираем:

-->integrate('a','x',1,5)

Получаем:

ans =

4.7798306

Способ 4.

С помощью команды intg. Интегрируемая функция задана извне: либо в виде набора дискретных точек, либо вычисляется с помощью внешней подпрограммы. Может задаваться требуемая точность вычислений.

Синтаксис

[v,err]=intg(a,b,f [,ea [,er])

Параметры

a, b : действительные числа;

f : внешняя функция или список строк;

ea, er : - параметры, описанные выше;

err : оценка абсолютной ошибки результата.

Вычисляется определенный интеграл от a до b от f(t)dt.

 

Вычислим тот же интеграл:

function g=a(x)

g=exp((x-3).^2/8);

endfunction

intg(1,5,a)

Вызвав этот файл на выполнение (Execute/Load into Scilab), получим ответ:

ans =

4.7798306

Оформление и комбинирование графиков

После того, как график построен, Scilab позволяет выполнить его форматирование.

Для установки над графиком титульной надписи используется команда title

o title(‘string’)

Пример: -->title('График функции sin(x)')

clc

xbasc()

x=1:.1:4;plot(x,sin(x))

xtitle("График функции y=f(x)", "Ось X","Ось Y")

Для установки надписей возле осей x, y и z используются команды

label(‘string’):

o xlabel(‘Ось Х’)

o ylabel(‘Ось Y’)

o zlabel(‘Ось Z’)

Для создания легенды используются различные варианты команды legend.

Одна из них:

o legend([‘string1’,’string2’,’string3’,….],a=pos)

Если pos=1, то легенда помещается в верхний правый угол,

pos=2, то в левый верхний угол,

pos=3, то в левый нижний угол,

pos=4, то в нижний правый угол,

pos=5, легенда перетаскивается мышью.

Пример: -->legend(['sin(x)';'cos(x)';'sin(x)'],a=3);

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

o subplot(m,n,p) или subplot(mnp) : m окон по горизонтали, n – по вертикали, p – номер окна, в которое будет выводиться текущий график (нумерация ведется по строкам).

o clf reset удаляет все подокна и возвращают графическое окно в обычное положение.

Пример.

x=1:.1:3;

subplot(211),plot(x,sin(x));subplot(212),plot(x,cos(x))

Оператор присваивания

Оператор присваивания имеет следующую структуру

a=b

здесь a –имя переменной или элемента массива, b - значение или выражение. В результате выполнения оператора присваивания переменной a присваивается значение выражения b.

x=5;y=sin(x);

Условный оператор

Одним из основных операторов, реализующим ветвление в большинстве языков программирования, является условный оператор if. Существует обычная и расширенная формы оператора if в Scilab. Обычный if имеет вид

ifЛогическое_выражение then

Инструкции_1

Else

Инструкции_2

End

Инструкции в списке разделяют оператором,(запятая)или ;(точка с запятой).

 

 

Логические выражения

Логические выражения состоят из констант, переменных и функций, соединенных операциями отношения: больше (>), больше или равно (>=), равно (==), не равно (~=) , меньше (<), меньше или равно (<=). Например: x2>y. Логические выражения принимают значения «истина» или «ложь». Например, при x=2 и y=8 значение выражения x2>y является ложью. Несколько логических выражений могут быть объединены в одно операторами & и |. Например: x.^2>y | y>7. Если несколько логических выражений соединены оператором &, то значение такого выражения является истиной, если каждое логическое выражение, входящее в него, является истиной. Если несколько логических выражений соединены оператором |, то значение такого выражения является истиной, если хотя бы одно логическое выражение, входящее в него, является истиной.

 

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

ifЛогическое_выражение_1 then

Инструкции_1

elseifЛогическое_выражение_2 then

Инструкции_2

Else

Инструкции_3

End

В этом случае оператор if работает так: если логическое выражение_1истинно, то выполняются инструкции_1, а затем инструкции, стоящие после оператора end. Если логическое выражение_2 является истиной, то выполняются инструкции 2, а затем инструкции, стоящие после оператора end. Если ни одно из логических выражений не является истиной, то выполняются инструкции, стоящие после слова else.

Частные случаи:

1) if Логическое_выражение then Инструкции , end

Примеры:

-->if x>5 then y=8, end

-->if x>5 then y=8;t=6; end

2) if Логическое_выражение then Инструкции_1, else Инструкции_2, end

Пример:

-->if x>5 then y=8,t=6; else y=x^2 ,end

3) if Логическое_выражение then

Инструкции

End

Замечание: слово thenв составе условного оператора ifне является обязательным.

Пример. Вычислить функцию y при x=0.397, если

Решение:

x=0.397;

if x.^2<=25*cos(x.^3) then

y=sin(3*x)

else

y=(2*x – tan(x))./sqrt(x.^2+2)

end

Набрав этот файл в редакторе Scipad и запустив его на выполнение командой Execute/Load into Scilab, получим:

y =

0.9287402

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

Входными данными этой задачи являются коэффициенты квадратного уравнения a, b, c. Выходными данными являются корни уравнения x1 , x2или сообщение о том, что действительных корней нет.

Алгоритм состоит из следующих этапов:

1. Ввод коэффициентов уравнения a, b и с.

2. Проверка, является ли уравнение квадратным (а≠0).

3. Вычисление дискриминанта уравнения d.

4. Если d=0, то выводится сообщение: уравнение имеет два равных корня и печатается значение корня.

5. Если d>0, определяются x1 и x2

6. Если d<0, то выводится сообщение «Корней нет».

Программа решения квадратного уравнения

clc

a=input('a=');

b=input('b=');

c=input('c=');

if a==0 then

disp("Уравнение не является квадратным")

else

// Вычисляем дискриминант.

d=b*b-4*a*c;

// Если дискриминант отрицателен,

if d<0

// то вывод сообщения,

disp(' Действительных корней нет');

elseif d==0

//иначе-вычисление корней соответствующего

// квадратного уравнения.

disp("уравнение имеет два равных корня") ;x=-b/(2*a)

else

x1=(-b+sqrt(d))/2/a

x2=(-b-sqrt(d))/2/a

end

end

a=-->1

b=-->2

c=-->-5

x1 =

1.4494897

x2 =

- 3.4494897

Найти все корни квадратного уравнения можно и без оператора if, воспользовавшись тем, что в Scilab определены операции над комплексными числами.

clc

a=input('a=');

b=input('b=');

c=input('c=');

d=b*b-4*a*c;

x1=(-b+sqrt(d))/2/a;

x2=(-b-sqrt(d))/2/a;

disp(x1,x2);

a=-->1

b=-->2

c=-->3

- 1. - 1.4142136i

- 1. + 1.4142136i

Комплексные корни квадратного уравнения

 

Оператор while

Оператор цикла while имеет вид

while условие

операторы

end

Здесь условие - логическое выражение; операторы будут выполняться циклически, пока логическое условие истинно.

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

Оператор цикла for используется именно в этих случаях.

Оператор for

Оператор цикла for имеет вид

for x=xn:hx:xk

операторы

end

Здесь x - имя скалярной переменной - параметра цикла, хn - начальное значение параметра цикла, xk - конечное значение параметра цикла , hx - шаг цикла . Если шаг цикла равен 1, то hx можно опустить, и в этом случае оператор for будет таким.

for x=xn:xk

операторы

end

Выполнение цикла начинается с присвоения параметру начального значения (x=xn). Затем следует проверка, не превосходит ли параметр конечное значение (x>xk). Если x>xk, то цикл считается завершенным, и управление передается следующему за телом цикла оператору. Если же xxk , то выполняются операторы в цикле (тело цикла). Далее параметр цикла увеличивает свое значение на hx (x=x+hx). После чего снова производится проверка значения параметра цикла, и алгоритм повторяется.

Пример. Протабулировать функцию y=xln2x.Х принимает значения от 1 до с шагом 0,2.

clc

for x=1:.2:2

y=x*log(x)^2;

printf("%1.1f %2.2f",x,y)

disp('')

end

1.0 0.00

1.2 0.04

1.4 0.16

1.6 0.35

1.8 0.62

2.0 0.96

Циклы while и for могут быть прерваны с помощью оператора break.
Пример.
-->a=0; for i=1:5:100, a=a+1; if i>10 then break, end;end
-->a
a =
3.

 

Обработка массивов и матриц в Scilab

 

Массив – это совокупность однородных элементов, имеющих одно имя. Одномерный массив – это вектор . Двумерный массив – это матрица

размерности n*m.

В системе Scilab принято элементы массивов записывать следующим образом: a(1), a(n), b(3, 7), b(n, m).

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

n=length(x)

Для того, чтобы определить количество строк (n) и столбцов (m) матрицы b, можно воспользоваться функцией size:

[n, m]=size(b)

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

Рассмотрим основные алгоритмы обработки массивов и матриц и их реализацию на sci-языке.

Ввод-вывод массивов и матриц

Ввод массивов и матриц может быть организован как в режиме диалога:

clc

N=input('N=');

disp("Ввод вектора Х");

for i=1:N

x(i)=input('X=');

end

disp(x);

//Ввод матрицы

N=input('N=');

M=input('M=');

disp(' Ввод матрицы ');

for i=1:N

for j=1:M

a(i,j)=input('');

end

end

disp(a);

N=-->3

Ввод вектора Х

X=-->4

X=-->-3

X=-->46

4.

- 3.

46.

N=-->2

M=-->3

Ввод матрицы

-->-1

-->6

-->0

-->34

-->3

-->65

- 1. 6. 0.

34. 3. 65.

 

так и непосредственно в программе:

x=[4 -3 46];

a=[-1, 6, 0;34, 3,65];

Структура функций

В пакете есть возможность использовать функции. Функции играют роль подпрограмм. Это позволяет создавать интегрированные в Scilab специализированные программы и использовать библиотеки. Рекомендуемое расширение для файлов подпрограмм sce, а для библиотечных функций sci.

Тело функции

Endfunction

Здесь

fun - имя функции,

xi - входные аргументы функции (их m штук),

yi - выходные аргументы функции (их n штук).

 

Пример.

Вычисление факториала.

function [x]=fact(k)

k=int(k)

if k<1 then k=1, end

x=1;

for j=1:k,x=x*j;end

endfunction

Наберем этот текст в любом текстовом редакторе и сохраним его в файле с именем fact.sci. Расширение *.sci является для Sclab "родным", но не обязательным. Затем следует вызвать эти файлы из Scilab c помощью команд getf(filename) или exec(filename,-1); Те же операции можно произвести с помощью команд меню File-getf или File-exec.

До вызова функции желательно проверить, не была ли уже загружена такая функция ранее. Для этого:

exists('fact')

Результат:

ans =

0.

После загрузки файла

-->exec('C:\fact');

набираем

-->x=fact(5)

x =

120

Пример:

function z=fun(x, y)

// Определение функции

z=x.^2 + y.^2;

endfunction

Сохраним эту функцию под именем fun.sci. После загрузки функции в Scilab мы можем обратиться к ней:

-->fun(1,2)

ans =

5.

Пример. Даны два массива X и Y. Вывести в командное окно имя массива, содержащего наибольшее число элементов, кратных числу три.

Решение. Составим программу и сохраним ее под именем t.sci в каталоге C:\DOCUME~1\user\.

function g=t(v)

s=0; n=length(v);

for i=1:n

if modulo(v(i), 3)==0 then

s=s+1;

end

end

g=s;

endfunction

Далее сохраним в корневом каталоге C:\ под именем tot, а затем выполним программу

x=[1 2 3 5 7 6 12]; y=[5 7 24 15]; d1=t(x), d2=t(y)

if d1>d2 then

disp('x')

elseif d1==d2 then

disp('в обоих массивах это число одинаково')

else

disp('y')

end

Получим ответ:

d1 =

3.

d2 =

2.

x

Запуск файла на выполнение осуществляется так:

-->scipad('C:\DOCUME~1\user\t.sci');

-->scipad('C:\tot');

-->exec('C:\tot');

Файл-функция был сохранен в 'C:\DOCUME~1\user\t.sci', файл-сцена

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти