36426

Программирование в MatLab

Лабораторная работа

Информатика, кибернетика и программирование

Листинг 1 содержит файлпрограмму для вывода графиков функции на отрезке [22] для значений параметра . Например для вычисления суммы при различных значениях x потребуется файлфункция текст которой приведен на листинге 2. Файлфункция для вычисления суммы function s=sum10x s=0; for k=1:10 s=sx. Файлфункция negsum см.

Русский

2013-09-21

140.5 KB

38 чел.

Лабораторная работа 1

Программирование в MatLab

Язык программирования MatLab достаточное простой, он содержит основной набор конструкций: операторы ветвления и циклы. Простота языка программирования окупается огромным количеством встроенных функций, которые позволяют решать задачи из различных областей.

Цикл for используется для повторения операторов в случае, когда число повторений заранее известно. В цикле for используется счетчик цикла, его начальное значение, шаг и конечное значение указываются через двоеточие. Блок операторов, размещенный внутри цикла, должен заканчиваться словом end. Листинг 1 содержит файл-программу для вывода графиков функции  на отрезке [-2,2], для значений параметра .

Листинг 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 будет больше двух.

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

function f=pwf(x)

if x<-1

f=1-exp(-1-x);

elseif x<=2

f=x^2-x-2;

else

f=2-x;

end

Ход работы программы может определяться значением некоторой переменной (переключателя). Такой альтернативный способ ветвления программы основан на использовании оператора переключения switch. Переменная-переключатель помещается после switch через пробел. Оператор switch содержит блоки, начинающиеся со слова case, после каждого case записывается через пробел то значение переключателя, при котором выполняется данный блок. Последний блок начинается со слова otherwise, его операторы работают в том случае, когда ни один из блоков case не был выполнен. Если хотя бы один из блоков case выполнен, то происходит выход из оператора switсh и переход к оператору, следующему за end.

Предположим, что требуется найти количество единиц и минус единиц в заданном массиве и, кроме того, найти сумму всех элементов, отличных от единицы и минус единицы. Следует перебрать все элементы массива в цикле, причем в роли переменной-переключателя будет выступает текущий элемент массива. Листинг 7 содержит файл-функцию, которая по заданному массиву возвращает число минус единиц в первом выходном аргументе, число единиц — во втором, а сумму — в третьем.

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

function [m,p,s]=mpsum(x)

m=0;

p=0;

s=0;

for i=1:length(x)

switch x(i)

case -1

m=m+1;

case 1

p=p+1;

otherwise

s=s+x(i);

end

end

Блок case может быть выполнен не только при одном определенном значении переключателя, но и в том случае, когда переключатель принимает одно из нескольких допустимых значений. В этом случае значения указываются после слова case в фигурных скобках через запятую, например: case {1,2,3}. 

Досрочное завершение цикла while или for осуществляется при помощи оператора break.

Пусть, например, требуется по заданному массиву x образовать новый массив y по правилу  до первого нулевого элемента , т.е. до тех пор, пока имеет смысл операция деления. Номер первого нулевого элемента в массиве x заранее неизвестен, более того, в массиве x может и не быть нулей. Решение задачи состоит в последовательном вычислении элементов массива y и прекращении вычислений при обнаружении нулевого элемента в x. Файл-функция, приведенная на листинге 8, демонстрирует работу оператора break.

Листинг 8. Использование оператора break для выхода из цикла

function y=div(x)

for k=1:length(x)-1

if x(k)==0

break

end

y(k)=x(k+1)/x(k);

end

Задания лабораторной работы 1

  1.  Написать файл-функции для решения поставленных далее задач.
  2.  Сохранить их в отдельных m-файлах.
  3.  Вызвать созданные файл-функции из файл-программы (командной строки), предварительно указав значения параметров функций.

Задачи:

1. Вычислить произведение элементов вектора , не превосходящих среднее арифметическое значение его элементов.

2. Определить количество положительных элементов вектора Х, расположенных между его максимальным и минимальным элементами.

3. Заменить положительные элементы вектора Х суммой всех его отрицательных элементов.

4. Заполнить квадратную матрицу A размерности n на n (n=5), каждый элемент  которой определяется с помощью вектора  X следующим образом:

5. Подсчитать число единиц в полученной матрице А.

6. Просуммировать положительные элементы матрицы А, лежащие ниже главной диагонали.

7. Вычислить сумму для заданного  при n=5:

8. Для полученной матрицы  и заданного  (n=5) найти значение выражения:

9. По заданному  найти максимальное значение n, для которого следующая сумма не превосходит 100:

10. Построить модель поведения некоторого объекта, а именно, вычислить сумму

с заданной точностью =0.001. Суммировать следует пока разность соседних слагаемых превосходит . Сравнить результат с точным значением, построив графики  и s(x) для .

11. Построить модель определения покрытия радиостанциями некоторой географической точки. Пусть заданы окружности, координаты их центров содержатся в массивах X и Y, а радиусы в массиве R. Известны координаты некоторой точки Т. Для всех вариантов: . Требуется вывести график, на котором маркером отмечено положение точки, синим цветом изображены те окружности, внутри которых лежит точка, а остальные окружности нарисованы красным цветом.

Варианты:

1.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.4

3

-4

-3

5

-7

8

-3

-2

1

Yi

3

3

4

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

2.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.7

2

-1

-3

5

-7

5

-3

-2

4

Yi

2

3

-1

3

4

5

2

1

0

3

Ri

1

2

3

1

2

3

1

2

3

2

3.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.5

4.1

-1

-2

5

-7

8

-3

-2

5

Yi

3

3

1

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

4.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.3

2.5

-5

-1

4

-7

8

-3

-1

3

Yi

3

3

4

0

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

5.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.7

3.8

-1

-9

4

-6

8

-3

-2

1

Yi

3

3

1

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

6.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.4

2.5

-7

-8

3

-6

9

-1

-3

-4

Yi

3

3

4

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

7.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.8

4.1

-5

-3

8

-2

4

-6

-1

7

Yi

3

3

4

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

8.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.7

2.5

-7

-2

9

-4

5

-7

-1

3

Yi

3

3

4

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

9.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.3

0.5

-1

-7

3

-2

1

-4

-6

-7

Yi

3

3

1

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

10.

i

1

2

3

4

5

6

7

8

9

10

Xi

0.4

3.4

-2

-3

6

-2

4

-7

-3

-2

Yi

3

3

1

3

3

5

2

1

0

2

Ri

1

2

3

1

2

3

1

2

3

2

Пример выполнения задания

Вычислить сумму элементов вектора , не меньших разности значений его первых двух элементов.

Основная файл-программа task0.m

x=[0.4 3 -4 -3 5 -7 8 -3 -2 1];

ss=sumbig1(x)

Создаем файл-функцию нахождения разности чисел

function s=razn12(a,b)

s=a-b;

Создаем файл-функцию нахождения искомой суммы

function p=sumbig1(x)

s=razn12(x(1),x(2))

p=0;

for k=1:length(x)

   if x(k)>=s

       p=p+x(k);

   end

end

PAGE  7


 

А также другие работы, которые могут Вас заинтересовать

40414. Английская революция XVII века 262.06 KB
  Гражданская война Начало войны Большое число роялистов присоединилось к армии короля. Один из офицеров парламентской армии Оливер Кромвель обратил внимание на вражескую кавалерию. Солдаты Армии нового образца получали должную военную подготовку и в бою вели себя очень дисциплинированно. Раньше офицерами становились солдаты из благополучных и знатных семей но в Армии нового образца они выдвигались по службе по мере своих заслуг на поле боя и боевых качеств.
40415. Буржуазные революции и национально-освободительные движения в 20-е годы XIX века в Европе 58.93 KB
  Буржуазные революции в Испании Португалии и Италии были вызваны притязаниями буржуазии на власть и ее борьбой против абсолютизма восстановленного после краха наполеоновской империи. Хотя обстановка в этих странах в годы Реставрации существенно различалась в Италии антифеодальные преобразования революционного и наполеоновского периода в основном остались в силе тогда как в Испании и Португалии феодальные устои общества не были поколеблены вспыхнувшие здесь буржуазные революции имели некоторые общие специфические черты. Революции в...
40416. Европейский абсолютизм и его особенности 24.47 KB
  Во Франции абсолютизму благоприятствовали богословы приписывающие верховной власти божественное происхождение и юристы признававшие за государями абсолютную власть древних римских императоров. На протяжении всего девятнадцатого века после Великой Французской Революции происходит процесс постепенной демократизации и ограничения власти монарха. Юридическое обоснование своей власти монархи находили в восстановлении нормы римского права которая была зафиксирована в VI веке в Кодексе византийского императора Юстиниана: Воля императора имеет...
40417. Великая францу́зская револю́ция 244.54 KB
  [править]Характер Историки утверждают что Великая французская революция по своему характеру была буржуазной заключалась в смене феодального строя капиталистическим и ведущую роль в этом процессе играл класс буржуазии свергнувший в ходе революции феодальную аристократию. [править]Созыв Генеральных штатов После целого ряда неудачных попыток выйти из затруднительного финансового положения Людовик XVI объявил в декабре 1787 года что созовёт государственные чины Франции на заседаниегенеральных штатов через пять лет....
40418. ГЕРМАНИЯ В 1815–1847 ГГ 16.77 KB
  Самыми развитыми в экономическом отношении районами стали территории среднего течения Рейна Рейнско Вестфальские провинции Пруссии богатые залежами каменного угля и железной руды. крупнейшим торгово промышленным центром становится столица Пруссии Берлин город с 400тысячным населением. В нем сосредоточилось 2 3 всего машиностроительного и ситценабивного производства Пруссии. и Пруссии таможенные барьеры между государствами входившими в Германский союз.
40419. Англійський абсолютизм, його особливі риси 149.2 KB
  произвол королевских чиновников и судей злоупотребления королевских фаворитов герцог Бэкингем; распространение законов военного времени на время мирное постои армии в домах частных лиц; ограничения в торговой и промышленной сферах государственные монополии; стремление реставрировать ненавистный большинству англичан католицизм; ориентация династии Стюартов Яков I Карл I на католические государства континентальной Европы Францию Италию традиционных торговых соперников Англии. зачастую поразному относились к тем или...
40420. Німеччина 102.91 KB
  На развитие немецкого Просвещения влияли политическая раздробленность Германии и ее экономическая отсталость что определило преимущественный интерес немецких просветителей не к социальнополитическим проблемам а к вопросам философии морали эстетики и воспитания. Молодой Лессинг первый в Германии XVIII в. В отличие от Англии и Франции где абсолютизм способствовал государственному объединению в Германии XVIIXVIII вв. Он взял сюжет не из далекого прошлого но из самой живой современности Минна фон Барнхельм Направленная...
40421. Іспанський абсолютизм, його характерні риси 62.5 KB
  Это дало основание Марксу сравнить абсолютную монархию в Испании с Турецкой империей. Испания писал Маркс подобно Турции оставалась скоплением дурно управляемых республик с номинальным сувереном во главе В сложившихся условиях в Испании не выработался единый национальный язык сохранились обособленные этнические группы: каталонцы галисийцы и баски говорили на своих языках отличных от кастильского диалекта который составил основу литературного испанского языка. Абсолютная монархия в Испании не смогла стать объединяющим началом...
40422. Італія 2 пол. 17-18 ст. 89.57 KB
  подъем начали переживать и традиционные для Италии виды ремесел связанные с рынком предметов роскоши тканей и одежды для представителей благородных сословий холодного оружия. Однако масштабы экономического оживления в Италии в целом оказались невелики. Очень заметным становилось отставание Италии и в развитии новой предпринимательской культуры которая по своим мировоззренческих и социальнопсихологическим основам была тесно связана с протестантским духом. Вследствие всех этих причин в Италии очень затянулся процесс перехода от...