Лабораторная работа по ИТ Матлаб. Лабораторная работа 1. Введение в Матлаб
Скачать 45.51 Kb.
|
|
Студент гр. 1281 | | Малевская А. Д. |
Преподаватель | | Платонов Р. А. |
Санкт-Петербург
2022
Цель работы: освоение базовых операторов и отладка программ в среде конечного пользователя Матлаб.
Основные теоретические положения
Переменные
В Матлаб существуют системные переменные, которые можно использовать
в математических выражениях:
- ans - результат последней операции без знака присваивания;
- i, j - мнимая единица;
- pi - число π (3.141592653589793);
- inf - машинный символ бесконечности (∞);
- NaN - неопределенный результат (0/0, ∞/∞, 1∞ и т.п.);
- realmin - наименьшее число с плавающей точкой (2.2251е-308);
- realmax - наибольшее число с плавающей точкой (1.7977е+308).
Основные математические функции MatLab
sqrt(x) | вычисление квадратного корня |
exp(x) | возведение в степень числа e |
pow2(x) | возведение в степень числа 2 |
log(x) | вычисление натурального логарифма |
log10(x) | вычисление десятичного логарифма |
log2(x) | вычисление логарифма по основанию 2 |
sin(x) | синус угла x, заданного в радианах |
cos(x) | косинус угла x, заданного в радианах |
tan(x) | тангенс угла x, заданного в радианах |
cot(x) | котангенс угла x, заданного в радианах |
asin(x) | арксинус |
acos(x) | арккосинус |
atan(x) | арктангенс |
pi | число пи |
round(x) | округление до ближайшего целого |
Массив - множественный тип данных, состоящий из фиксированного числа
элементов. Как и любой другой переменной, массиву должно быть присвоено имя. Переменную, представляющую собой просто список данных, называют одномерным массивом или вектором. Для доступа к данным, хранящимся в определенном элементе массива, необходимо указать имя массива и порядковый номер этого элемента, называемый индексом
Самый простой способ задать одномерный массив в МАТLАВ имеет вид:
nаmе=Xn:dx:Xk
где nаmе – имя переменной, в которую будет записан сформированный массив, Хn - значение первого элемента массива, Хk - значение последнего его элемента, dx- шаг, с помощью которого формируется следующий элемент массива, то есть значение второго элемента составит Xn+dx, третьего Xn+dx+dx и так далее до Xk.
Условный оператор if
Для того чтобы иметь возможность реализовать логику в программе используются условные операторы. Умозрительно эти операторы можно представить в виде узловых пунктов, достигая которых программа делает выбор по какому из возможных направлений двигаться дальше.
Для этого можно воспользоваться оператором if (если), который и
выполняет подобные проверки.
Оператор if-end
if <выражение>
<операторы>
end
Если значение параметра «выражение» соответствует значению «истинно»,
то выполняются операторы, иначе они пропускаются программой.
Логические операторы
Для реализации составных условий в MatLab используются логические операторы:
& - логическое И
| - логическое ИЛИ
- логическое НЕ
Оператор цикла while
Язык программирования MatLab имеет два оператора цикла: while и for.
while <условие>
<операторы>
end
Здесь <условие> означает условное выражение подобное тому, которое в операторе if, и цикл while работает до тех пор, пока это условие истинно.
Оператор цикла for
При переборе значений счетчика в заданном диапазоне и с заданным шагом в программировании применяется оператор цикла for, который просто и нагляднее реализует цикл со счетчиком.
for <счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
end
Упражнение 1
В командном окне
− Ввести численные переменные а=2,3 в=-34,7 x=1 y=2, вычислить z=(x+y)-a/b
− Ввести символьные переменные с=a
− Ввести строковую переменную h= мама мыла раму
− Полученный листинг скопировать в отчет
>> a=2.3; b=-34.7; x=1; y=2;
>> z=(x+y)-a/b
z = 3.0663
>> c='a'
c = 'a'
>> h= 'мама мыла раму'
h = 'мама мыла раму'
Упражнение 2
В командном окне
− Ввести формулы 25,7-14,6 затем 2 x ans затем x=ans/2
− Полученный листинг скопировать в отчет
>> 25.7-14.6
ans = 11.1000
>> 2*ans
ans = 22.2000
>> x=ans/2
x = 11.1000
Упражнение 3
В командном окне
− Ввести численные переменные ABC=1, abc=2, Abc=3, aBc=4, вычислить x= ABC+abc+Abc+aBc, вычислить у= ABC*abc*Abc*aBc
− Полученный листинг скопировать в отчет
>> ABC=1; abc=2; Abc=3; aBc=4
>> x= ABC+abc+Abc+aBc
x = 10
>> y=ABC*abc*Abc*aBc
y = 24
Упражнение 4
В командном окне
− Ввести вектор Х с начальным значением Xn=-3,5, шагом dx=1,5 и конечным значением Xk=4,5
− Вычислить массив значений Y= sin(X/2)
− Ввести вектор A с начальным значением 0, шагом 1 и конечным значением 5
− Полученный листинг скопировать в отчет
>> Xn = -3.5000; dx=1.5; Xk=4.5
>> X=Xn:dx:Xk
X = -3.5000 -2.0000 -0.5000 1.0000 2.5000 4.0000
>> Y=sin(X/2)
Y = -0.9840 -0.8415 -0.2474 0.4794 0.9490 0.9093
>> A=0:1:5
A = 0 1 2 3 4 5
Упражнение 5
В командном окне
− Ввести вектор-строку V из пяти последовательных элементов 1, 2, 3, 2,1
− Ввести вектора-строки W из четырех последовательных элементов 1,1: 2,3; -0,1; 5,88
− Ввести вектор-столбец X из трех последовательных элементов 1, 2, 3;
− Вычислить формулу W1+2W3
− Полученный листинг скопировать в отчет
>> V = [1 2 3 2 1]
V = 1 2 3 2 1
>> W = [1.1 2.3 -0.1 5.88]
W = 1.1000 2.3000 -0.1000 5.8800
>> X = [1; 2; 3]
X =
1
2
3
>> W(1)+2*W(3)
ans = 0.9000
Упражнение 6
В командном окне
− Ввести матрицу А, состоящую из трех строк по три элемента в каждой: строка 1: 1 2 3; строка 2: 4 5 6; строка 3: 7 8 9
− Вычислить формулу А1,2 в степени А2,2 деленное на А3,3
− Полученный листинг скопировать в отчет
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A(1,2)^A(2,2)/A(3,3)
ans = 3.5556
Упражнение 7
В окне Редактора (Editor)
− Применить оператор if-end для программы, которая в зависимости от заданного значения переменной X присваивает переменной signX:
- значение ‘плюс’, если значение переменной X больше нуля
- значение ‘минус’, если значение переменной X меньше нуля
- значение ‘ноль’, если значение переменной X равно нулю
− Записать программу в файл PR1-7_FIO_GR.m
− Определить переменную signX для трех значений X: 5, -3, 0
− Вывести значения Х и signX, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет
x = input ("Введите значение переменной x = ");
if x>0
signX = 'плюс';
end
if x<0
signX = 'минус';
end
if x==0
signX = 'ноль';
end
disp("x = " + x);
disp(signX);
>> PR1-7_MAD_GR
Введите значение переменной x = 5
x = 5
плюс
>> PR1-7_MAD_GR
Введите значение переменной x = -3
x = -3
минус
>> PR1-7_MAD_GR
Введите значение переменной x = 0
x = 0
ноль
Упражнение 8
В окне Редактора (Editor)
− Применить оператор if-else-end для программы, которая в зависимости от заданного значения переменной X присваивает переменной signX:
- значение ‘плюс’, если значение переменной X больше нуля
- значение ‘минус’, если значение переменной X меньше нуля
- значение ‘ноль’, если значение переменной X равно нулю
− Записать программу в файл PR1-8_FIO_GR.m
− Определить переменную signX для трех значений X: 5, -3, 0
− Вывести значения Х и signX, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет
x = input ("Введите значение переменной x = ");
if x>0
signX = 'плюс';
else
signX = 'минус';
end
if x==0
signX = 'ноль';
end
disp("x = " + x);
disp(signX);
Листинги
>> PR1-8_MAD_GR
Введите значение переменной x = 5
x = 5
плюс
>> PR1-8_MAD_GR
Введите значение переменной x = -3
x = -3
минус
>> PR1-8_MAD_GR
Введите значение переменной x = 0
x = 0
ноль
Упражнение 9
В окне Редактора (Editor)
− Применить оператор if-else-end для программы, которая в зависимости от заданного значения переменной X присваивает переменной signX:
- значение ‘плюс’, если значение переменной X больше нуля
- значение ‘минус’, если значение переменной X меньше нуля
- значение ‘ноль’, если значение переменной X равно нулю
− Записать программу в файл PR1-9_FIO_GR.m
− Определить переменную signX для трех значений X: 5, -3, 0
− Вывести значения Х и signX, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет
x = input ("Введите значение переменной x = ");
if x>0
signX = 'плюс';
elseif x<0
signX = 'минус';
else
signX = 'ноль';
end
disp("x = " + x);
disp(signX);
Листинги
>> PR1-9_MAD_GR
Введите значение переменной x = 5
x = 5
плюс
>> PR1-9_MAD_GR
Введите значение переменной x = -3
x = -3
минус
>> PR1-9_MAD_GR
Введите значение переменной x = 0
x = 0
ноль
Упражнение 10
В окне Редактора (Editor)
− Применить оператор if-else-end с логическим оператором ‘&’ (И) для программы, которая проверяет попадание переменной Х в диапазон от 0 до 2. При попадании переменной valueX присваивается значение ‘TRUE’, в противном случае – ‘FALSE’
− Записать программу в файл PR1-10_FIO_GR.m
− Определить переменную valueX для двух значений X: 5, 1
− Вывести значения Х и valueX, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет.
x = input ("Введите значение переменной x = ");
if x>0 && x<2
valueX ='TRUE';
else
valueX ='FALSE';
end
disp("x = " + x);
disp(valueX);
>> PR1-10_MAD_GR
Введите значение переменной x = 5
x = 5
FALSE
>> PR1-10_MAD_GR
Введите значение переменной x = 1
x = 1
TRUE
Упражнение 11
В окне Редактора (Editor)
− Применить оператор if-else-end с логическим оператором ‘|’ (ИЛИ) для программы, которая проверяет выход переменной Х за границы диапазона от 0 до 2. При выходе переменной valueX присваивается значение ‘TRUE’, в противном случае – ‘FALSE’
− Записать программу в файл PR1-11_FIO_GR.m
− Определить переменную valueX для двух значений X: 5, 1
− Вывести значения Х и valueX, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет.
x = input ("Введите значение переменной x = ");
if x<0 || x>2
valueX ='TRUE';
else
valueX ='FALSE';
end
disp("x = " + x);
disp(valueX);
>> PR1-11_MAD_GR
Введите значение переменной x = 5
x = 5
TRUE
>> PR1-11_MAD_GR
Введите значение переменной x = 1
x = 1
FALSE
Упражнение 12
В окне Редактора (Editor)
− Применить оператор цикла while для подсчета суммы ряда. Суммирование выполнять до тех пор пока счетчик i не превышает 20, либо значение суммы S меньше 20.
− При выходе переменной valueX присваивается значение ‘TRUE’, в противном случае – ‘FALSE’
− Записать программу в файл PR1-12_FIO_GR.m
− Вывести значения i и S, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет
i=1;
S=0;
valueX = 'FALSE';
while i<20 && S<=20
S = S+i;
i = i+1;
end
valueX = 'TRUE';
disp("i = " + i);
disp("S = " + S);
>> PR1-12_MAD_GR
i = 7
S = 21
Упражнение 13
В окне Редактора (Editor)
− Применить оператор цикла for для нахождения наибольшего элемента вектора из четырех элементов: 3, 6, 5, 3.
− Записать программу в файл PR1-13_FIO_GR.m
− Вывести номер и значение наибольшего элемента вектора, используя оператор disp
− Текст программы и полученные листинги скопировать в отчет
v = [3 6 5 3];
max = v(1);
for i = 1:1:4
if v(i)>max
max=v(i);
end
end
disp("max = " + max);
>> PR1-13_MAD_GR
max = 6
Упражнение 14
В окне Редактора (Editor)
− Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд.
− Записать программу в файл PR1-14_FIO_GR.m
− Текст отлаженной программы скопировать в отчет
array_1D=1:2:15;
array_1d=[1 2 3 4;5 6 7 8;9 10 11 12] %2array_1d=[1 2 3 4;5 6 7 8;9 10 11 12]
x=-pi:1.e-2:2*pi; %x=-pi:1,e-2:2*pi;
y1= x.^2; y2=x;
for ii=1:5
if ii>2
disp(ii)
elseif ii == 3 % elseif ii = 3
j=ii-1
end
end
NN=1;
while NN<100 %while Nn<100
NN=NN+1;
end
for phi_0=0:0.1:pi %for phi_0=0:0,1:pi
x = -2*pi: 2e-2: 2*pi;
u = sin(x-phi_0)
end
Упражнение 15
Правильным результатом работы программы будет определение пересечений трех функций (переменная cross=3)
В окне Редактора (Editor)
− Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд.
− Записать программу в файл PR1-15_FIO_GR.m
− Текст отлаженной программы скопировать в отчет
%Определить какие из функций
%y1(x)= x*x-1 %y2(x)= sqrt(x) %y3(x)= cos(x)
% пересекаются на интервале [0.5;2]
clear;
close all;
clc;
x=0.5; % x=0,5;
shethic=0; % счетчик корней
cross=0;
%razn2=0;
dx=2;
while x <= 2
razn1=cos(x)-sqrt(x); % корень уравнения cos(x)=sqrt(x)
razn2=cos(x+dx)-sqrt(x+dx); % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx; % шаг цикла
razn2=razn1;
end
if shethic>0
disp('cos(x) и sqrt(x) пересекаются ');
end
cross=cross+ shethic;
shethic=0;
%razn2=0; % обнуляем переменные
x=0.5;
while x <= 2
razn1=cos(x)-x*x+1; % корень уравнения cos(x)=x*x+1
razn2=cos(x+dx)-(x+dx)*(x+dx)+1; % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx;
razn2=razn1;
end
if shethic>0
disp('cos(x) и x*x-1 пересекаются ');
end
cross=cross+ shethic;
shethic=0;
%razn2=0;% обнуляем переменные
x=0.5;
while x <= 2
razn1=sqrt(x)-x*x+1; % корень уравнения sqrt(x)=x*x+1
razn2=sqrt(x+dx)-(x+dx)*(x+dx)+1; % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx;
razn2=razn1;
end
if shethic>0
disp('sqrt(x) и x*x-1 пересекаются');
end
cross=cross+ shethic;
disp('cross');disp(cross);
x = 0.5:0.0001:2; % шаг и интервал
y = cos(x);
y2 = pow2(x) -1;
y3 = sqrt(x);
plot(x,y,x,y2,x,y3)% функция построения графика
Упражнение 16
Правильным результатом работы программы будет определение пересечений трех функций (переменная cross=3)
В окне Редактора (Editor)
− Отладить программу. После исправленных команд вставить комментарии с исходными текстами команд.
− Записать программу в файл PR1-16_FIO_GR.m
− Текст отлаженной программы скопировать в отчет
%Определить какие из функций
%y1(x)= x*x-1 %y2(x)= sqrt(x) %y3(x)= cos(x)
% пересекаются на интервале [0.5;2]
clear;
close all;
clc;
x=0.5; % x=0,5;
shethic=0; % счетчик корней
cross=0;
%razn2=0;
dx=2;
while x <= 2
razn1=cos(x)-sqrt(x); % корень уравнения cos(x)=sqrt(x)
razn2=cos(x+dx)-sqrt(x+dx); % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx; % шаг цикла
razn2=razn1;
end
if shethic>0
disp('cos(x) и sqrt(x) пересекаются ');
end
cross=cross+ shethic;
shethic=0;
%razn2=0; % обнуляем переменные
x=0.5;
while x <= 2
razn1=cos(x)-x*x+1; % корень уравнения cos(x)=x*x+1
razn2=cos(x+dx)-(x+dx)*(x+dx)+1; % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx;
razn2=razn1;
end
if shethic>0
disp('cos(x) и x*x-1 пересекаются ');
end
cross=cross+ shethic;
shethic=0;
%razn2=0;% обнуляем переменные
x=0.5;
while x <= 2
razn1=sqrt(x)-x*x+1; % корень уравнения sqrt(x)=x*x+1
razn2=sqrt(x+dx)-(x+dx)*(x+dx)+1; % Вставлена строка
if razn2*razn1 <0
shethic=shethic+1;
end
x=x+dx;
razn2=razn1;
end
if shethic>0
disp('sqrt(x) и x*x-1 пересекаются');
end
cross=cross+ shethic;
disp('cross');disp(cross);
x = 0.5:0.0001:2; % шаг и интервал
y = cos(x);
y2 = pow2(x) -1;
y3 = sqrt(x);
plot(x,y,x,y2,x,y3)% функция построения графика
Вывод: При выполнении лабораторной работы были изучены базовые операторы и отладка программ в среде конечного пользователя Матлаб.0>0>0>0>0>0>100>20>0>