Основы программирования в системе Scilab
В Scilab встроен мощный язык программирования с поддержкой объектов. Работа в Scilab может осуществляться как в режиме командной строки, так и в программном режиме. Для создания программы (программу в Scilab иногда называют сценарием) необходимо:
1. Вызвать команду Editorиз меню.
2. В окне редактора Scipadнабрать текст программы.
3. Сохранить текст программы с помощью команды File /Saveв виде файла с расширением sce, например file.sce.
4. После этого программу можно будет вызвать, набрав в командной строке exec, например exec("file.sce"), или вызвав команду меню File/Exec..., или, находясь в окне Scipad, выполнить команду Execute/Load into Scilab(Ctrl+l).
Программный режим достаточно удобен, так как он позволяет сохранить разработанный вычислительный алгоритм в виде файла и повторять его при других исходных данных в других сессиях. Кроме обращений к функциям и операторов присваивания, в программных файлах могут использоваться операторы языка программирования Scilab (язык программирования Scilab будем называть sci-языком).
Основные операторы sci-языка
Функции ввода-вывода в Scilab
Для организации простейшего ввода в Scilab можно воспользоваться функциями
x=input('title');
или
x=x_dialog('title', 'stroka');
Функция input выводит в командной строке Scilab подсказку title и ждет пока пользователь введет значение, которое в качестве результата возвращается в переменную х.
-->x=input('title');
title-->4
-->x
x =
4.
Функция x_dialog выводит на экран диалоговое окно с именем title, после чего пользователь может щелкнуть OKи тогда stroka вернется в качестве результата в переменную x, либо ввести новое значение вместо stroka, которое и вернется в качестве результата в переменную x.
Набрав вместо strokа число 45 и распечатав х, получим:
-->x
x =
45
Функция input преобразовывает введенное значение к числовому типу данных, а функция x_dialog возвращает строковое значение. Поэтому при использовании функции x_dialog для ввода числовых значений, возвращаемую ею строку следует преобразовать в число с помощью функции evstr. Поэтому можно предложить следующую форму использования функции x_dialog для ввода числовых значений.
x=evstr(x_dialog('title', 'stroka'));
Можно сразу набрать
->x=evstr(x_dialog('title', '46'));
-->x+6
ans =
52.
Для вывода в текстовом режиме можно использовать функцию disp следующей структуры disp(b). Здесь b - имя переменной или заключенный в кавычки текст.
-->disp('Привет')
Привет
-->disp("Привет")
Привет
Оператор присваивания
Оператор присваивания имеет следующую структуру
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
Комплексные корни квадратного уравнения