«Средства программирования в Scilab»
Цель работы: Изучение средств программирования системы Scilab и получение практических навыков разработки, написания и отладки программных приложений в Scilab.
Вопросы, подлежащие изучению
1) Виды sce -файлов.
2) Особенности сценариев и функций.
3) Структура сценариев и функций.
4) Запуск на выполнение сценария из текстового редактора.
5) Запуск на выполнение сценария из Командного окна
6) Обращения к файлам и функциям.
7) Средства языка программирования в системе Scilab.
8) Основные операторы языка Scilab, назначение и форматы.
9) Создание и использование библиотеки функций.
10) Графический интерфейс приложений пользователя.
1.5.2.1 Общее задание №1
«Программирование алгоритмов
Итеративных циклических структур»
1) Изучить материал учебника [1] (п. 1.5).
2) Выбрать вариант задания из таблицы 1.5.2-1 по заданию преподавателя.
3) Провести формализацию поставленной задачи.
4) Составить схему алгоритма решения поставленной задачи средствами Visio [8].
5) Написать программный код сценария-функции с параметрами в соответствии со схемой алгоритма без использования глобальных переменных, предусмотрев страховку от возможного «зацикливания».
6) Написать программный код сценарий выполнения задания, содержащий ввод исходных данных, вызов функции п.4 и вывод результатов.
7) По требованию преподавателя разработать графический интерфейс пользователя. В интерфейсе предусмотреть отображение на форме промежуточных результатов каждой итерации. Написать программный код сценария создания интерфейса пользователя.
8) Выполнить созданное приложение и получить решение.
9) Обосновать правильность полученных результатов на заранее разработанных тестах.
10) Представить отчет преподавателю.
Варианты индивидуальных заданий
Таблица 1.5.2-1
№ |
Задание
1)
Вычислить с точностью ε = 0.00001 константу Эйлера (основание натурального логарифма), воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
2 )
Вычислить и вывести те члены последовательности,
значения которых больше ε = 0.001при x = 0.2.
3)
Вычислить arctg(x) с точностью ε = 0.0001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции при x=1.5.
4)
Вычислить с точностью ε = 0.00001 значение функции при x = 2, воспользовавшись рекуррентной формулой:
.
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
5)
Вычислить константу с точностью до ε = 0.00001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
6)
Вычислить с точностью ε = 0.00001 значение функции
при x = 2, воспользовавшись формулой:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции
7)
Вычислить sin 0.5 с точностью ε = 0.0001, воспользовавшись
разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
8)
Вычислить с точностью ε = 0.00001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
9
Вычислить cos 0.6 с точностью ε = 0.00001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью
соответствующей встроенной функции.
10
Вычислить с точностью ε = 0.0001 корень уравнения x - cos( x)=0, воспользовавшись формулой: .
Проверить правильность решения подстановкой найденного корня в уравнение.
11
Вычислить и вывести те члены последовательности,
значения которых по модулю больше ε = 0.001 при x = 0.5.
1 2
Вычислить при |x|<1 с точностью до ε = 0.0001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
1 3
Вычислить корень уравнения с точностью ε=0.0001, воспользовавшись итерационной формулой
Проверить правильность решения подстановкой найденного корня в уравнение.
1 4
Вычислить значение с точностью ε = 0.00001, воспользовавшись представлением в виде в виде цепной дроби:
Значение дроби равно пределу числовой последовательности, члены которой вычисляются по рекуррентной формуле до достижения заданной точности
.
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
1 5
Вычислить и вывести те члены последовательности,
значения которых по модулю больше ε = 0.001 при x = 0.3.
16
Вычислитьln ( x ) с точностью ε = 0.0001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью
соответствующей встроенной функции при x=1.5.
17
Вычислить sh 0.3 с точностью до ε= 0.00005, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью встроенной функции для вычисления ex, используя соотношение:
18
Вычислить корень уравнения x -0.5( sinx 2 -1)=0 с точностью ε = 0.001, воспользовавшись итерационной формулой:
Проверить правильность решения подстановкой найденного корня в уравнение.
19
Вычислить ln(2) с точностью ε = 0.001, воспользовавшись представлением в виде ряда:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
20
Вычислить с точностью ε = 0.00001 корень уравнения
воспользовавшись итерационной формулой
Проверить правильность решения подстановкой.
2 1
Вычислить ch 0.7 с точностью до ε = 0.00005, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью встроенной функции , используя соотношение:
2 2
Вычислить приближенное значение бесконечной суммы с точностью ε=0,0001 (справа от суммы дается выражение для проверки полученного результата):
(для |x|<1 сумма равна
)
2 3
Вычислить при |x|>1 с точностью до ε = 0.0001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью соответствующей встроенной функции.
2 4
Вычислить ln(x+1)с точностью ε = 0.0001, воспользовавшись разложением в ряд:
Сравнить результат со значением, полученным с помощью
соответствующей встроенной функции при x=0.5.
2 5
Вычислить и вывести те члены последовательности,
значения, которых больше ε = 0.01, при x = 0.6.
26
Найти наименьшее целое положительное n, при котором:
27
Пусть Дано действительное число e>0. Найти первый член
, для которого выполнено условие
.
28
Вычислить приближенное значение бесконечной суммы с точностью ε=0,0001 Сравнить полученный результат c точным значением, равным π2/6-1: .
29
Вычислить приближенное значение бесконечной суммы с точностью ε=0,0001. Сравнить полученный результат c точным значением, равным π/4:
30
Вычислить приближенное значение бесконечной суммы с точностью ε=0,0001 Сравнить полученный результат c точным значением, равным 3/4:
1.5.2.3 Пример выполнения задания
1) Задание на разработку приложения
Создать приложение для вычисления и отображения на разработанной форме тех членов последовательности
,
значения которых при x=0.5по модулю больше e=0.0001.
2) Формализация и уточнение задания
Для решения поставленной задачи необходимо вывести рекуррентную формулу вычисления члена последовательности.
Очевидно, что выражение для n-го члена заданной последовательности имеет вид:
.
Тогда формула для (n+1) члена последовательности имеет вид:
Имея в виду, что (n+1)!=n! ∙ (n+1), получим
В результате получаем следующую рекуррентную формулу:
-начальный член последовательности при n=1.
3) Разработка схемы алгоритма функции Pos (рис.1.5.4-1)
Рис. 1.5.4-1 Схема алгоритма решения задачи
4) Программный код решения задачи
// Сценарий-функция Pr1_5_1_fun.sce
// Практическое занятие 1.5по теме:
// «Программирование алгоритмов
// итеративных циклических структур»
// Вариант 0
// Входные параметры: аргумент х и точность eps
// Выходные параметры: вектор y содержит значения
// членов ряда, вектор k содержит номера выполненных итераций
function [y, k]=Pos(x, eps)
a=x-1; n=1;
while abs(a)>eps&& n<100
k(n)=n;
y(n)=a;
a=a.*(x-1)./(n+1);
n = n + 1;
end
endfunction
5) Графический интерфейс пользователя:
6) Программный код сценария для создания графического интерфейса и сценария для выполнения задания, где последний содержит ввод исходных данных, вызов функции п.4 и вывод результатов.
// Сценарий Pr1_5_1 GUI .sce // Создание интерфейса пользователя // Создание графического окна
f1=figure('position',[20,40,480,290],'figure_name',...
'Вычисление членов бесконечной последовательности');
// Определение текстовых полей для ввода исходных данных
//Текстовое поле заголовка Ввод исходных данных
text_vvod=uicontrol(f1,'style','text','string','',…
'position',[20,240,150,20],…
'String',' Ввод исходных данных');
// Поле ввода x
edit_x=uicontrol(f1,'style','edit','string','0.5',...
'position',[70, 200, 40, 20]);
textx=uicontrol(f1,'style','text','string','x',...
'position',[20,200,40,20]);
// Поле ввода eps
edit_eps=uicontrol(f1,'style','edit','string','0.0001',...
'position',[70, 170, 60, 20]);
text_eps=uicontrol(f1,'style','text','string','eps',...
'position',[20,170,40,20]);
// Определение текстовых полей для вывода результатов итераций
list1 = uicontrol(f1,'style','listbox','position',[200,20,80,160]);
list2 = uicontrol(f1,'style','listbox','position', [310, 20, 150, 160]);
// Заголовки полей вывода результатов
TextRez1 = uicontrol(f1, 'style', 'text', 'string', '',
'position',[200,180,150,20],'string', 'Итерация:');
TextRez2 = uicontrol(f1, 'style', 'text', 'string', '',…
'position',[340,180,150,20],'string', 'Ряд:');
// Определение кнопки Вычислить
bt1 = uicontrol(f1, 'style', 'pushbutton', 'string', 'Вычислить',…
'position', [20,110,90,40], 'CallBack','YY');
// Определение кнопки Очистить
bt2 = uicontrol(f1, 'style', 'pushbutton', 'string', 'Очистить',…
'position', [20,20,90,40], 'CallBack','C');
// Конец сценария Pr1_5_1GUI.sce =========================================
// Сценарий выполнения задания Pr 1_5_1. sce
// Подключение сценария создания интерфейса
exec('Pr1_5_1GUI.sce');
// Подключение сценария-функции решения задачи
exec('Pr1_5_1fun.sce');
// Функция YY() содержит инструкции ввода исходных данных,
// вызов функции решения задачи(вычисления членов ряда)
// из сценария Pr1_5_1_fun.sce и инструкции вывода результатов
// Выполнение функции YY() инициируется нажатием кнопки "Выполнить"
function YY()
sx1=get(edit_x,'string');// считывание x и преобразование в строку
x=strtod(sx1);// преобразование sx1 к типу double
seps=get(edit_eps,'string');//считывание точности в строку
e=strtod(seps);// преобразование seps к типу double
[y,k]=Pos(x,e);// вызов функции решения задачи
// вывод результатов в соответствующие текстовые поля
set(list1,'string',sprintf("%d\n",k));
set(list2,'string',sprintf("%1.5f\n",y));
endfunction
// Функция С() очистки текстовых полей
// Выполнение функции инициируется нажатием кнопки "Очистить"
function C()
set(list1,'string',"");
set(list2,'string',"");
set(edit_x,'string',"");
set(edit_eps,'string',"");
endfunction
//Конец сценария Pr1_5_1.sce==============================================
-->// Сессия командного окна задания 1:
-->// Практическое занятие 1.5 по теме:
-->// «Программирование алгоритмов итеративных циклических структур»
-->// Вариант 0, задание 1
-->// Выполнил: Студент группы БИН1801 Иванов И.И.
-->
-->exec('Pr1_5_1.sce');
-->//Конец сессии ========================================================
7) Результат работы приложения
8) Доказательство правильности работы приложения
Все выведенные значения последовательности больше заданной точности
eps =0.0001.
Содержание отчета
1) Титульный лист
2) Название и цель практического занятия
3) Общее задание
4) Результаты формализации задания
5) Графический интерфейс пользователя (по требованию преподавателя).
6) Сценарии, вначале которых должна быть введена информация в виде комментариев:
· имя и назначение сценария;
· номер задания и формулировка решаемой задачи и/или краткое перечисление действий, реализуемых в сценарии.
7) Протокол сессии Командного окна, вначале которого должна быть введена информация в виде комментариев:
· название практического занятия;
· вариант индивидуального задания и номер задания;
· ФИО студента, номер группы;
· краткое перечисление действий, выполняемых во время сессии.
1.5.3.1 Общее задание №2.
«Программирование алгоритмов
Дата: 2019-11-01, просмотров: 793.