Главная страница

лаба4. Лабораторная_работа_2_MATLAB (1). Лабораторная работа 2 Работа с матрицами в Matlab


Скачать 379.5 Kb.
НазваниеЛабораторная работа 2 Работа с матрицами в Matlab
Анкорлаба4
Дата23.12.2022
Размер379.5 Kb.
Формат файлаdoc
Имя файлаЛабораторная_работа_2_MATLAB (1).doc
ТипЛабораторная работа
#861068
страница2 из 5
1   2   3   4   5

Листинг 1. Графики функции при различных значениях параметра


x=[-2:0.01:2];

for beta=-0.5:0.1:0.5

y=exp(beta*x).*sin(x);

plot(x,y)

hold on

end

hold off
Если шаг равен единице, то его указывать не обязательно. Например, для вычисления суммы



при различных значениях x потребуется файл-функция, текст которой приведен на листинге 2. Обратите внимание, что sum10 может быть вызвана как от числа, так и от массива значений, благодаря применению поэлементных операций.

Листинг 2. Файл-функция для вычисления суммы

function s=sum10(x)

s=0;

for k=1:10

s=s+x.^k/factorial(k);

end

Подумайте над тем, как избежать нахождения факториала в каждом слагаемом (при вычислении k-го слагаемого можно использовать значение , найденное на предыдущем шаге цикла).

Цикл for подходит для повторения заданного числа определенных действий. В том случае, когда число повторов заранее неизвестно и определяется в ходе выполнения блока операторов следует организовать цикл while. Цикл while работает, пока выполнено условие цикла. Файл-функция negsum (см. листинг 3) находит сумму всех первых отрицательных элементов вектора.

Листинг 3. Файл-функция negsum


function s=negsum(x)

s=0;

k=1;

while x(k)<0

s=s+x(k);

k=k+1;

end

В качестве операторов отношения используются символы: >, < , >=, <=, == (равно), = (не равно). Файл-функция negsum имеет один недостаток: если все элементы массива — отрицательные числа, то k становится больше длины массива x, что приводит к ошибке, например:

” b=[-2 -7 -1 -9 -2 -5 -4];

” s=negsum(b)

??? Index exceeds matrix dimensions.

Кроме проверки значения x(k) следует позаботится о том, чтобы значение k не превосходило длины вектора x. Вход в цикл должен осуществляться только при одновременном выполнении условий k<=length(x) и x(k)<0, т. е. необходимо применить логический оператор "и", обозначаемый в MatLab символом &. Замените условие цикла на составное: k<=length(x) & x(k)<0. Если первое из условий не выполняется, то второе условие проверяться не будет, именно поэтому выбран такой порядок операндов. Теперь файл-функция negsum работает верно для любых векторов.

Логический оператор "или" обозначается символом вертикальной черты |, а отрицание — при помощи тильды . Ниже приведены логические операции по мере убывания их приоритета:

отрицание ;

операторы отношения >, < , >=, <=, == , = ;

логическое "и" & ;

логическое "или" | .

Для изменения порядка выполнения логических операторов используются круглые скобки.

Циклы могут быть вложены друг в друга. Например, для поиска суммы элементов матрицы, расположенных выше главной диагонали, следует использовать два цикла for, причем начальное значение счетчика внутреннего цикла зависит от текущего значения счетчика внешнего цикла (см. листинг 4).

Листинг 4. Использование вложенных циклов

function s=upsum(A)

[n m]=size(A);

s=0;

for i=1:n

for j=i+1:m

s=s+A(i,j);

end

end

Ветвление в ходе работы программы осуществляется при помощи конструкции if-elseif-else. Самый простой вариант ее использования (без elseif и else) реализован в файл-функции possum (см. листинг 5), которая предназначена для нахождения суммы всех положительных элементов вектора.

Листинг 5. Файл-функция для суммирования положительных элементов вектора

function s=possum(x)

s=0;

for k=1:length(x)

if x(k)>0

s=s+x(k);

end

end

Если ход программы должен изменяться в зависимости от нескольких условий, то следует использовать полную конструкцию if-elseif-else. Каждая из ветвей elseif в этом случае должна содержать условие выполнения блока операторов, размещенных после нее. Важно понимать, что условия проверяются подряд, первое выполненное условие приводит к работе соответствующего блока, выходу из конструкции if-elseif-else и переходу к оператору, следующему за end. У последней ветви else не должно быть никакого условия. Операторы, находящиеся между else и end, работают в том случае, если все условия оказались невыполненными. Предположим, что требуется написать файл-функцию для вычисления кусочно-заданной функции:



Первое условие проверяется в ветви if. Обратите внимание, что условие не требуется включать в следующую ветвь elseif (см. листинг 6), поскольку в эту ветвь программа заходит, если предыдущее условие ( ) оказалось не выполнено. Условие проверять не надо — если не выполнены два предыдущих условия, то x будет больше двух.
1   2   3   4   5


написать администратору сайта