Скачиваний:
14
Добавлен:
05.01.2021
Размер:
116.69 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра «Корабельных систем управления»

отчет

по лабораторной работе №6

по дисциплине «Программирование и основы алгоритмизации»

Тема: ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ

ГРАФИКИ В MATLAB.

Студент гр. 9494

Лобазев Н. А.

Преподаватель

Модин Н. В.

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

2020

1. Задание на лабораторную работу.

Цель работы: изучение методов работы с объектно-ориентированной графикой в среде MATLAB.

Условие:

1) В соответствие с вариантом задания (табл. 9) составить блок-схему

алгоритма определения произвольного решения уравнения ax + b = f (x).

2) Написать и отладить программу решения уравнения графическим

способом. Оценить точность решений. В случае низкой точности (более 0.01)

найти численное решение.

3) Отобразить решения, удовлетворяющие требуемой точности, средствами объектно-ориентированной графики.

4) Подобрать коэффициенты таким образом, чтобы уравнение имело

единственное решение.

Исходные данные:

2. Блок-схемы алгоритмов решения задачи

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

Основная программа:

%lab6

clc, clear,close;

x=-11:0.1:11;

a=-0.6;

b=4.6;

PogrMax=0.01;

f1=sin(x/2)-cos(x)+1;

f2=a*x+b;

plot(x,f1,x,f2);

hold on;

[xRez, y]=ginput(3); %ввод с мышки

pogr=zeros(1,3);

for i=1:3

xPogr=(sin(xRez(i)/2)-cos(xRez(i))+1-b)/a;

pogr(i)=abs(xRez(i)-xPogr)/3;

end

correct=pogr>PogrMax;

for i = 1:3

if correct(i) == 0

fpintf('Значение граф. корня x = %f не требует коррекции\n', xRez(i))

h1=plot(xRez(i),(a*xRez(i)+b));

set(h1, 'marker', '.', 'MarkerSize', 20, 'MarkerEdgeColor', 'g');

else %вычисление корня половинного деления

j=0;

x1=(xRez(i)-pogr(i)*3);

x2=(xRez(i)+pogr(i)*3);

xcp=(x1+x2)/2;

if (lab6_f1(x1)*lab6_f1(x2))<0

while abs(lab6_f1(xcp))>0.001

j=j+1;

xcp=(x1+x2)/2;

if lab6_f1(xcp)*lab6_f1(x1)<0

x2=xcp;

else

x1=xcp;

end

if j>100

break

end

end

fprintf('Значение граф. корня x = %f скорректировано до x=%f/n', xRez(i), xcp)

h1=plot(xcp, (a*xcp+b));

hold on;

set(h1, 'marker', '.','MarkerSize', 20, 'MarkerEdgeColor', 'b');

else

fprintf('Значение граф. корня x = %f не удалось скорректировать\n', xRez(i));

h1=plot(xRez(i),(a*xRez(i)+b));

hold on;

set(h1, 'marker', '.','MarkerSize', 20, 'MarkerEdgeColor', 'r');

end

end

end

x1=-11:0.1:11;

x2=-0.5:0.1:1;

a=-3;

b=-1;

f1=sin(x1/2)-cos(x1)+1; f2=a*x2+b;

figure(2), hold on, title('Один корень при a=-3, b=-1');

plot(x1,f1,'b'), plot(x2,f2,'r')

lab6_f1.m

function R = lab6_f1(x)%разность значений f1 и f2

R=sin(x/2)-cos(x)+1-(-0.6*x+4.6);

end

4. Результаты выполнения программы

Окно 1:

Окно 2:

Листинг:

Значение граф. корня x = 2.730415 скорректировано до x=2.792439

Значение граф. корня x = 4.596774 скорректировано до x=4.624129

Значение граф. корня x = 7.569124 скорректировано до x=7.515221

5. Выводы.

В ходе работы мы освоили работу с работы с объектно-ориентированной графикой в среде MATLAB., а именно c форматным выводом графических объектов, функцией снятия координат с графика. Кроме того использован изученный на лекции метод половинного деления. По работе составлен отчёт в соответствии с предъявленными требованиями.

Соседние файлы в папке лабы 3 вар matlab