Темы2456_Matlab
.pdfТема 2
Контрольное задание
Запишите в текстовый файл и выполните последовательность команд, реализующих следующие действия:
•создать вектор-строку X с элементами-годами с 1930 по текущий год,
•убрать из вектора элементы для военных лет (с 1939 по 1945),
•сгенерировать квадратную матрицу Y, у которой на диагонали находятся те же элементы, что и в Х, а недиагональные элементы равны 1,
•сгенерировать вектор-столбец Z, с той же размерностью, что и X, с элементами, равномерно размещенными на интервале от 100 до 500,
•получить вектор W, равный произведению Y на Z,
•представить матрицу Y в виде вектора и убрать из него элементы с 20 по 30,
•определить число элементов в получившемся векторе.
X=1930:2020
X(10:16)=[]
Y=ones(length(X)) Y=triu(Y,1)+tril(Y,-1)+diag(X) Z=linspace(100,500,84)' W=Y*Z
Y=Y(:)
Y(20:30)=[]
length(Y)
Пример ИКЗ
1.Создать матрицу А с 17 строками и 17 столбцами, в которой на главной диагонали находились бы случайные числа из интервала [-5; 15], а все недиагональные элементы
= -0.07.
2.Создать вектор-столбец В с элементами, совпадающими с главной диагональю А.
3.Удалить из А столбцы 5, 7, 13.
4.Подсчитать общее число элементов в А.
5.Помножить А на В и результат записать в С.
6.Преобразовать матрицу А в матрицу Е с 34 строками.
X=(15-(-5))*rand(1,17)+(-5) A=diag(X+0.07)-0.07 B=diag(A)
A(:,[5,7,13])=[]
numel(A)
C=A'*B
E=reshape(A,34,[])
1
Тема 4
Контрольное задание
С помощью текстового редактора среды создайте файлы Z1.txt и Z2.txt, в которые запишите две матрицы с размерностями 3х4 и 2х5. Подготовьте m-файл с некоторым выбранным именем и запишите в него программу, выполняющую с использованием управляющих конструкций следующие операции:
•Ввод из файла Z1.txt матрицы Z1.
•Замена в матрице Z1 отрицательных значений на значение 0.
•Ввод из файла Z2.txt матрицы Z2.
•Замена в матрице Z2 значений, меньших 10 на значение 10.
•Если матрицы были изменены, записать их в те же файлы.
•Генерация вектора-столбца X с числом элементов, равным числу строк в матрице Z1, и со значениями, равномерно размещенными на интервале от 10 до 70,
•Поэлементное перемножение матрицы Z1 на Z2 (если такая операция возможна), полученное произведение умножить на вектор X; отобразить результат на экране. При невозможности указанной операции выдать на экран соответствующее сообщение.
Файл dano.m:
Z1=[1,1,1,1;2,2,2,2;3,3,3,3] dlmwrite('Z1.txt',Z1) Z2=[4,4,4,4,4;5,5,5,5,5] dlmwrite('Z2.txt',Z2)
Файл tema41.m:
Z1=dlmread('Z1.txt') [m1,n1]=size(Z1) ind1=0
for k=1:m1 for g=1:n1
if Z1(k,g)<0 Z1(k,g)=0 ind1=1
end
end
end Z2=dlmread('Z2.txt') [m2,n2]=size(Z2) ind2=0
for k=1:m2 for g=1:n2
if Z2(k,g)<10 Z2(k,g)=10 ind2=1
end
end
end
if ind1==1 dlmwrite('Z1.txt',Z1)
end
if ind2==1 dlmwrite('Z2.txt',Z2)
end X=linspace(10,70,size(Z1,1))' if size(Z1)==size(Z2)
W=Z1.*Z2
W=W'*X
2
disp(W) else
disp('Операция умножения невозможна')
end
Файл tema42.m:
Z1=dlmread('Z1.txt') [m1,n1]=size(Z1) Z11=Z1
Z1(Z1<0)=0 Z2=dlmread('Z2.txt') [m2,n2]=size(Z2) Z22=Z2
Z2(Z2<10)=10 if Z1~=Z11
dlmwrite('Z1.txt',Z1) end
if Z2~=Z22 dlmwrite('Z2.txt',Z2) end
X=linspace(10,70,size(Z1,1))' if size(Z1)==size(Z2)
W=Z1.*Z2
W=W'*X
disp(W) else
disp('Операция умножения невозможна')
end
Пример ИКЗ
Разработать программу, выполняющую следующие операции:
1)Ввести из бинарного файла FFF.МАТ две матрицы: А с 5 столбцами и 6 строками, В с 6 столбцами и 10 строками (Для отладки этот файл подготовить самостоятельно).
2)Поэлементно перемножить матрицу А с аналогичной подматрицей в В и результат записать в С.
3)Вывести матрицу С на экран с заголовком «Матрица С:».
4)Запросить у пользователя и ввести вектор с 5 пороговыми значениями d.
5)Сформировать матрицу М, совпадающую по размерам с С, в которую из С переписываются элементы, превышающие пороговые значения для своих столбцов, а остальные заменяются нулями.
6)Вывести матрицу М на экран построчно с общим заголовком «Матрица М» и заголовком каждой строки по образцу «Х->», где Х – номер строки.
Файл otladka.m:
A=ones(6,5)*diag(1:5)
B=ones(10,6)*diag(1:6) save FFF A B
Файл tema5.m: load FFF
C=A.*B(1:size(A,1),1:size(A,2)) disp('Матрица C: '); disp(C)
d=input('Введите вектор d из 5 пороговых значений: ') M=C
for m=1:size(C,1) for n=1:size(C,2) if M(m,n)<=d(n)
M(m,n)=0
3
end end end
disp('Матрица M') for X=1:size(M,1)
fprintf('%d -> %s \n',X,mat2str(M(X,:))) end
Тема 5
Пример ИКЗ
Разработайте программу, выполняющую следующие операции:
1)Запрос у пользователя параметра А – уровень шумовой компоненты.
2)Создание вектор X с 40 элементами, равномерно размещенными в диапазоне
значений от -3 до 15. Для этих элементов рассчитать векторY – со значениями функции y=2.5+1.6*x-0.7*x2+e, где e – нормально распределенная случайная величина с нулевым математическим ожиданием и стандартным отклонением, равным А.
3)Используя Х иY, построение графика зависимости y(x).
4)Вставка заголовка, обозначения осей.
5)Сохранение графика в файле с некоторым именем в формате JPG.
A=input('Введите значение уровня шумовой компоненты A: ') X=linspace(-3,15,40) Y=2.5+1.6*X-0.7*X.^2+normrnd(0,A,1,length(X))
plot(X,Y) title('Зависимость y(x)') xlabel('Значение x') ylabel('Значение y')
saveas(gcf,'grafik.jpg','jpg')
Тема 6
Контрольное задание
1.Разработайте функцию, которая по заданной матрице Х (входной параметр 1) рассчитывает матрицу V с числами элементов (выходной параметр 1), попадающих в заданное число M одинаковых интервалов разбиения диапазона изменения ее столбцов (входной параметр 2). Также должен быть рассчитан вектор VS с целыми числами, равными построчным суммам элементов матрицы V (выходной параметр 2).
2.Разработайте еще одну функцию, которая по заданным входным параметрам: число строк (m), столбцов (n), математическое ожидание (XS) и стандартное отклонение (SKO), создает матрицу X со случайными, нормально распределенными элементами. Затем по известной из статистики формуле M=1+3.2*lg(m), вычисляет число интервалов разбиения и обращается к функции из п.1 с матрицей Х и M. По возвращенному из функции вектору VS рассчитывает наибольшее (VSmax) и наименьшее (VSmin) значения его элементов. Строит столбиковую диаграмму по матрице V, возвращенной из функции. Возвращаемыми элементами функции должны быть вектор VS и рассчитанные значения VSmax, VSmin.
3.Разработайте сценарий, в котором у пользователя запрашиваются размерности матрицы: m, n, математическое ожидание и стандартное отклонение: XS, SKO, вызывается функция из п.2, отображаются с заголовками рассчитанные в ней значения VSmax, VSmin и строится столбиковая диаграмма по вектору VS.
4
Файл xad1.m:
function [V,VS]=zadanie(X,M) st=length(X(1,:)) V=zeros(M,st)
x1=min(X)
x2=max(X) dx=(x2-x1)./M intervals=x1 for i=1:M
intervals=[intervals;x1+i*dx]
end i=1 j=1 k=1
while i<length(intervals(1,:))*length(intervals(:,1)) V(j,k)=length(find((X(:,k)>=intervals(i) & X(:,k)<intervals(i+1)))) i=i+1
j=j+1 if(j>M)
k=k+1
j=1
i=i+1
end
end
V(size(V,1),:)= V(size(V,1),:)+1 VS=sum(V')
Файл xad2.m:
function [VS,VSmax,VSmin]=xad2(m,n,XS,SKO) X=normrnd(XS,SKO,m,n) M=ceil(1+3.2*log10(m))
[V,VS]=xad1(X,M)
VSmax=max(VS)
VSmin=min(VS)
bar(V)
Файл xad3.m:
m=input('Введите число строк матрицы: ') n=input('Введите число столбцов матрицы: ') XS=input('Введите математическое ожидание: ') SKO=input('Введите стандартное отконение: ') [VS,VSmax,VSmin]=xad2(m,n,XS,SKO) disp('Максимальное значение VS: ') disp(VSmax)
disp('Минимальное значение VS: ') disp(VSmin)
figure bar(VS)
title('Столбиковая диаграмма VS') xlabel('Номер столбца') ylabel('Значение элемента вектора')
Пример ИКЗ
1. Разработайте функцию, реализующую расчет выходного сигнала y инерционного звена по формуле:
y(t)= (x(t)+T*y(t-1))/(T+1),
где Т – заданный параметр – постоянная времени инерционного звена, x(t) – текущее значение входного сигнала, y(t-1) – значение выходного сигнала в предыдущий момент времени (входные параметры функции). Выходной параметр – y(t) – значение выходного сигнала звена в момент времени t.
5
2. Разработайте сценарий, в котором у пользователя запрашиваются значения параметров: параметр Т, число отсчетов сигналов. Затем создается входной сигнал с заданным числом отсчетов, у которого два первых значения равны 0, а остальные равны 1. С помощью функции из п.1 для каждого значения входного сигнала определяется значение выходного сигнала. Затем оба сигнала должны быть представлены на одном графике.
Файл ikz6.m: clearvars
T=input('Введите постоянную времени: ') n=input('Введите число отсчетов: ') x=[0,0,ones(1,(n-2)]
y(1)=0
i=2 while i<n
y(i+1)=otchet(T,x(i),y(i-1)) i=i+1
end
plot(1:n,[x' y']) title('x(t), y(t)') xlabel('t, кол. отсчетов')
ylabel('Значение импульса x, y')
Файл otchet.m:
function Y=otchet(T,x,y) Y=x+T*y/(T+1)
6