лабы 3 вар matlab / ПИОА_лаб(6)
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра «Корабельных систем управления»
отчет
по лабораторной работе №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 форматным выводом графических объектов, функцией снятия координат с графика. Кроме того использован изученный на лекции метод половинного деления. По работе составлен отчёт в соответствии с предъявленными требованиями.