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

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

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

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

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

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

отчет

по лабораторной работе №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-функций. Создание функций которые могут принимать и возвращать не только символы, но и матрицы. По работе составлен отчёт в соответствии с предъявленными требованиями.

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