Добавил:
alena.pankalya@mail.ru Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

курсач 2 семестр фэл смирнов

.docx
Скачиваний:
10
Добавлен:
26.12.2017
Размер:
484.38 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Санкт-Петербургский государственный электротехнический университет "ЛЭТИ"

Факультет электроники Кафедра радиотехнической электроники

"Применение информационных технологий для решения инженерной задачи "

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе по дисциплине "Информационные технологии"

Преподаватель Смирнов А.А

Студента гр.6291 Панкаля А. А.

Санкт-Петербург

2017

СОДЕРЖАНИЕ

стр.

Microsoft, MS являются зарегистрированными товарными знаками корпорации Microsoft, а Microsoft Works является торговым знаком корпорации Microsoft в США и других странах.

 Microsoft Corporation

  1. Постановка задачи

Даны две функции: y1 =cos(2x), y2 = sin(x)

Написать программу на языке MatLab для

нахождения в интервале x (0, ∞) методом последовательных приближений границы интервала (X1, X2), в который будут попадать корни (c 6 по 8) уравнения . Вычисление границ интервала следует производить с заданной погрешностью (eps). Отобразить графически данные кривые в заданном диапазоне, включая точки пересечения графиков. Исследовать зависимость количества приближений от погрешности.

  1. Алгоритм решения

Начало

Ввод данных:

is_in_valid_interval = false;

while(~is_in_valid_interval)

eps = input('Введите значение eps = ');

if(eps >= 0)

is_in_valid_interval = true;

else

disp('значение eps должно быть больше 0')

end

end

Вывод данных

is_in_valid_interval = false;

while(~is_in_valid_interval)

X2 = input('Введите значение X2 = ');

if(X2 > 0 && X2 < 100 && X2 > X1)

is_in_valid_interval = true;

else

if(~(X2 > 0 && X2 < 100))

disp('X1 должен принадлежать интервалу (0 ; 100)')

else

if(~(X2 > X1))

disp('значение X2 должно быть больше, чем X1')

end

end

Вывод данных

is_in_valid_interval = false;

while(~is_in_valid_interval)

eps = input('Введите значение eps = ');

if(eps >= 0)

is_in_valid_interval = true;

else

disp('значение eps должно быть больше 0')

end

end

for x = X1:0.1:(X2 - 0.1)  if(F(x) * F(x + 0.1) < 0)  n = n + 1; 

Новая переменная для хранения левой границы интервала

xl = X1;

Да

Нет

xl = x;

break;

end

end

xr = xl + 0.1;

xp = (xl + xr) / 2;

num = 0;

while(~(abs(F(xp)) <= eps))  if(F(xl) * F(xp) < 0)  xr = xp;  else  if(F(xr) * F(xp) < 0)  xl = xp;  end  end  num = num + 1;  xp = (xl + xr) / 2;  end

Нет

Да

disp(['num : ', num2str(num)]);  disp(['интервал : [', num2str(x1), ' ; ', num2str(x2), ']']);  end

Конец

  1. Текст программы

function variant_21

function y = f1(xf)

y = cos(2 * xf);

end

function y = f2(xf)

y = sin(xf);

end

function y = F(xf)

y = f1(xf) - f2(xf);

end

is_in_valid_interval = false;

while(~is_in_valid_interval)

eps = input('Введите значение eps = ');

if(eps >= 0)

is_in_valid_interval = true;

else

disp('значение eps должно быть больше 0')

end

end

X1 = 0;

X2 = inf;

xl = X1;

n = 0;

x1 = 0;

x2 = 0;

num = 0;

for x = X1:0.1:(X2 - 0.1)

if(F(x) * F(x + 0.1) < 0)

n = n + 1;

if(n == 6 || n == 8)

xl = x;

xr = xl + 0.1;

xp = (xl + xr) / 2;

while(~(abs(F(xp)) <= eps))

if(F(xl) * F(xp) < 0)

xr = xp;

else

if(F(xr) * F(xp) < 0)

xl = xp;

end

end

num = num + 1;

xp = (xl + xr) / 2;

end

if(n == 6)

x1 = xp;

else

x2 = xp;

break;

end

end

end

end

x = x1:0.001:x2;

F1 = cos(2 * x);

F2 = sin(x);

plot(x', [F1' F2']);

grid on;

title('Графики функций f(x) = cos(2 * x) и f(x) = sin(x)');

xlabel('Координаты по оси Ox');

ylabel('Координаты по оси Oy');

disp(['num : ', num2str(num)]);

disp(['интервал : [', num2str(x1), ' ; ', num2str(x2), ']']);

end

  1. Листинг результатов

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

Рис. 1 Графики зависимости N и X от погрешности

Рис. 2 Вывод данных в MatLab

  1. Диаграммы

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

Рис. 3 Графическая иллюстрация функций y1(x) и y2(x)

  1. Тестовый результат

Тестовые результаты в Excel подтвердили, то что программа работает исправно.

Рис. 4 Тестовые результаты в Excel

Заключение

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

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

При проверке результатов EXCEL было установлено, что MatLab справился с поставленной задачей. Для теста были построены 2 графика функций. Следующим шагом мы попытались по графику определить пересечение функций. В конке мы с помощью обратных функций для у1(х) и у2(х) было подобрано значение х. для решения задач этим методом, требуется большая точность построения графика. Для этого нужно строить график по большому множеству точек. В ином случае придется долго подбирать значение пересечения графиков для координаты Y. Конечный результат в EXCEL совпал с конечным результатом MatLab.

Соседние файлы в предмете Информатика