лабы 3 вар matlab / ПИОА_лаб(4)
.docxМИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра «Корабельных систем управления»
отчет
по лабораторной работе №4
по дисциплине «Программирование и основы алгоритмизации»
Тема: ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ.
Студент гр. 9494 |
|
Лобазев Н.А. |
Преподаватель |
|
Модин Н.В. |
Санкт-Петербург
2020
1. Задание на лабораторную работу.
Цель работы: освоение работы с функциями пользователя в среде MATLAB.
Условие:
1) Преобразовать алгоритмы лабораторной работы 2 к модульной структуре.
2) Составить и отладить следующие функции
– для расчета значения функции двух переменных (табл. 5);
– для расчета суммы либо произведения элементов ряда (табл. 6);
– для поиска заданных элементов матрицы (табл. 7).
3) Составить и отладить программу-сценарий для вызова функций пользователя.
Исходные данные:
Фрагмент таблицы 5:
Фрагмент таблицы 6:
Фрагмент таблицы 7:
2. Блок-схемы алгоритмов решения задачи
Алгоритм функции main
Алгоритм функции, вычисляющей значения x(t,T)
Алгоритм функции, вычисляющий сумму или произведение ряда.
Алгоритм функции, вычисляющей минимальный элемент матрицы и столбец
3. Тексты программ
Основная программа:
m=0;
while m ~= 4
m=menu('menu','f(x)','row','find','end');
switch m
case 1
T=2;
k=0;
x=zeros(2,21);
for t=-2*T:0.4:2*T
[x(1,k+1),x(2,k+1)]=func(t,T);
k=k+1;
if t<0
fprintf('f(%2.2f %2.2f ) = %-4.3f condition %1.0f\n', t, T, x(1,k), x(2,k))
else
fprintf('f( %2.2f %2.2f ) = %-4.3f condition %1.0f\n', t, T, x(1,k), x(2,k))
end
end
t=-2*T:0.4:2*T;
plot(t,x(1,:))
case 2
sum = row(12,'s');
disp(sum);
case 3
com = row(12,'p');
disp(com);
case 4
M=[-1.1 4 -11 6; 3 0 5 2.3; 6.2 -0.3 3 -6.4];
[col, min] = minM(M);
disp(min);
disp(col);
end
end
Значение x(t,T)
function [val1,val2]= func(t,T)
if t<-T
val1=0;
val2 = 0;
elseif t<=0
val1=3+3*t;
val2 = 1;
elseif t<=T
val1=3-3*t;
val2 = 2;
else
val1=0;
val2 = 3;
end
Сумма или произведение ряда
function g = row(size,operator)
switch operator
case 's'
g=0;
case 'p'
g=1;
otherwise
error('wrong data');
end
for x = 1:1:size
switch operator
case 's'
g=g+el(x);
case 'p'
g=g*el(x);
otherwise
error('wrong data');
end
end
end
function val= el(x)
val = x/(x+1);
end
Минимальный элемент матрицы и столбец
function [varargout] = minM(M)
k=1;
for l=1:2:nargout-1
for i=1:1:size(M, 2)
for j=1:1:size(M, 1)
if and((i==1),(j==1))
min=M(j, i);
col=i;
else
if and(M(j, i) == min,col(k)~=i)
col(k+1) = i;
k=k+1;
end
if M(j, i) < min
min = M(j, i);
clear col;
col(1) = i;
k=1;
end
end
end
end
varargout{l}=col;
varargout{l+1} = M(:,col);
M(:,col)=inf;
end
end
4. Результаты выполнения программы
f(-4.00 2.00 ) = 0.000 condition 0
f(-3.60 2.00 ) = 0.000 condition 0
f(-3.20 2.00 ) = 0.000 condition 0
f(-2.80 2.00 ) = 0.000 condition 0
f(-2.40 2.00 ) = 0.000 condition 0
f(-2.00 2.00 ) = -3.000 condition 1
f(-1.60 2.00 ) = -1.800 condition 1
f(-1.20 2.00 ) = -0.600 condition 1
f(-0.80 2.00 ) = 0.600 condition 1
f(-0.40 2.00 ) = 1.800 condition 1
f( 0.00 2.00 ) = 3.000 condition 1
f( 0.40 2.00 ) = 1.800 condition 2
f( 0.80 2.00 ) = 0.600 condition 2
f( 1.20 2.00 ) = -0.600 condition 2
f( 1.60 2.00 ) = -1.800 condition 2
f( 2.00 2.00 ) = -3.000 condition 2
f( 2.40 2.00 ) = 0.000 condition 3
f( 2.80 2.00 ) = 0.000 condition 3
f( 3.20 2.00 ) = 0.000 condition 3
f( 3.60 2.00 ) = 0.000 condition 3
f( 4.00 2.00 ) = 0.000 condition 3
сумма
9.8199
произведение
0.0769
-11
5
3
3
Выводы.
В ходе работы мы освоили основные конструкции языка MATLAB а именно и ветвящиеся и циклические алгоритмы. Кроме того, изучили правила создания, оформления и использования m-функций. Создание функций которые могут принимать и возвращать не только символы, но и матрицы. По работе составлен отчёт в соответствии с предъявленными требованиями.