Цикл с двойным условием матлаб

Цикл с двойным условием матлаб thumbnail

Модератор: Admin

Антон63 Пользователь Сообщения: 5 Зарегистрирован: Сб мар 12, 2011 5:06 pm

Двойное устловие в цикле while.

Сообщение Антон63 » Сб мар 12, 2011 5:08 pm

Как его правильно записать в этой программе?

%%

clear

clc

a=0

b=50

c=1/2

d=20

e=30

i=1;

x=a:c:b;

while x<d;

y(i)= 10 – 10 * exp (-0.4* x );

elseif d<x<e;

y(i)= exp (-0.4* x );

else

y(i)= 4 – 4 * exp (-0.1* x );

end

f(i)=x;

i=i+1;

end

plot(f,y)

nehalem Пользователь Сообщения: 83 Зарегистрирован: Пт сен 10, 2010 8:12 pm

Сообщение nehalem » Сб мар 12, 2011 5:24 pm

Код: Выделить всё

a=0;

b=50;

c=1/2;

d=20;

e=30;

i=1;

x=a:c:b;

y = zeros(1, length(x));

for i = 1:length(x)

y(i)= 4 – 4 * exp (-0.1* x(i));

if (x(i) < d)

y(i)= 10 – 10 * exp (-0.4* x(i));

end

if ((x(i) > d) && (x(i) < e))

y(i)= exp (-0.4* x(i));

end

end

plot(x, y);

Наверно еще можно и так:

Код: Выделить всё

for i = 1:length(x)

if (x(i) < d)

y(i)= 10 – 10 * exp (-0.4* x(i));

elseif ((x(i) > d) && (x(i) < e))

y(i)= exp (-0.4* x(i));

else

y(i)= 4 – 4 * exp (-0.1* x(i));

end

end

Антон63 Пользователь Сообщения: 5 Зарегистрирован: Сб мар 12, 2011 5:06 pm

Сообщение Антон63 » Сб мар 12, 2011 6:05 pm

мне нужно лишь переписать правильно условие elseif d<x<e; не изменяя программы.

iglin Эксперт Сообщения: 1584 Зарегистрирован: Ср сен 22, 2004 4:49 pm

Сообщение iglin » Вс мар 13, 2011 9:20 am

elseif ((x>d)&(x<e))

С.П.Иглин

abobroff Пользователь Сообщения: 488 Зарегистрирован: Пн окт 25, 2010 1:21 pm

Сообщение abobroff » Вс мар 13, 2011 1:55 pm

вариант:

Код: Выделить всё

a=0;

b=50;

c=1/2;

d=20;

e=30;

i=1;

x=a:c:b;

y = zeros(1, length(x));

t1 = x < d;

t2 = x > d & x < e;

t3 = ~t1 & ~t2;

y(t1) = 10 – 10 * exp (-0.4* x(t1));

y(t2) = exp (-0.4* x(t2));

y(t3) = 4 – 4 * exp (-0.1* x(t3));

plot(x, y);

Антон63 Пользователь Сообщения: 5 Зарегистрирован: Сб мар 12, 2011 5:06 pm

Сообщение Антон63 » Вс мар 13, 2011 2:13 pm

abobroff, программа работает и строит, но мне нужно обязательно использовать цикл while. без него никуда.

вот программа. матлаб постоянно выдает ошибку в строке где написано elseif. народ, помогите исправить ошибку!!!!

Код: Выделить всё

%%

clear

clc

a=0;

b=50;

c=1/2;

d=20;

e=30;

i=1;

h=0.5;

x=0;

while x(i) < d;

y(i)= 10 – 10 * exp (-0.4* x(i) );

elseif ((x(i)>d)&(x(i)<e));

y(i)= exp (-0.4* x(i) );

else

y(i)= 4 – 4 * exp (-0.1* x(i) );

end

f(i)=x(i);

i=i+1;

x(i)=x(i)+h;

end

plot(f,y)

U235 Пользователь Сообщения: 814 Зарегистрирован: Пт июл 01, 2005 10:13 am

Сообщение U235 » Вс мар 13, 2011 2:50 pm

а где у Вас if?

nehalem Пользователь Сообщения: 83 Зарегистрирован: Пт сен 10, 2010 8:12 pm

Сообщение nehalem » Вс мар 13, 2011 3:06 pm

По-моему, там дело не только в elseif(), а в самом while. Условие в нем записано неверно, как мне кажется.

Код: Выделить всё

clear

clc

a=0;

b=50;

c=1/2;

d=20;

e=30;

i=1;

h=0.5;

x = a:c:b;

y = zeros(1, length(x));

while (x(i) <= b)

if (x(i) < d)

y(i)= 10 – 10 * exp (-0.4* x(i));

elseif ((x(i) > d) && (x(i) < e))

y(i)= exp (-0.4* x(i));

else

y(i)= 4 – 4 * exp (-0.1* x(i));

end

i =i+1;

if (i > length(x))

break

end

end

plot(x,y)

Антон63 Пользователь Сообщения: 5 Зарегистрирован: Сб мар 12, 2011 5:06 pm

Сообщение Антон63 » Вс мар 13, 2011 3:32 pm

большое спасибо что помогли!!

abobroff Пользователь Сообщения: 488 Зарегистрирован: Пн окт 25, 2010 1:21 pm

Сообщение abobroff » Вс мар 13, 2011 4:46 pm

Антон63 писал(а):большое спасибо что помогли!!

Последний раз и все… Сам цикл:

Код: Выделить всё

i = 1

while i <= length(x)

if (x(i) < d)

y(i)= 10 – 10 * exp (-0.4* x(i));

elseif ((x(i) > d) && (x(i) < e))

y(i)= exp (-0.4* x(i));

else

y(i)= 4 – 4 * exp (-0.1* x(i));

end

i =i+1;

end

Антон63 Пользователь Сообщения: 5 Зарегистрирован: Сб мар 12, 2011 5:06 pm

Сообщение Антон63 » Вс мар 13, 2011 5:48 pm

и последний вопрос – мне нужно заменить массив x=a:c:b , а нужно на каждом шаге увеличивать x на размер шага

x=x+h

помогите, если не сложно!!!

abobroff Пользователь Сообщения: 488 Зарегистрирован: Пн окт 25, 2010 1:21 pm

Сообщение abobroff » Вс мар 13, 2011 7:44 pm

Антон63 писал(а):и последний вопрос – мне нужно заменить массив x=a:c:b , а нужно на каждом шаге увеличивать x на размер шага

x=x+h

помогите, если не сложно!!!

что будет критерием остановки расчета?

amandra Пользователь Сообщения: 582 Зарегистрирован: Вт мар 28, 2006 4:29 pm

Сообщение amandra » Пн мар 14, 2011 4:41 pm

эхх..Кургаев, Кургаев)))) как не стыдно..сами бы разобрались…

Донесем чистоту до трудно доступных мест – ни дня без туалетной бумаги

Источник

Условный оператор if

В самом простом случае синтаксис данного оператора if имеет вид:

if <выражение>

<операторы>

end

Обращаю Ваше внимание что в отличие от современных языков программирования не используются такое понятие как составной оператор. Блок условного оператора обязательно заканчивается служебным словом end.

Ниже представлен пример реализации функции (), которая возвращает +1, если число больше нуля, -1 – если число меньше нуля и 0, если число равно нулю:

x = 5;

if x > 0

disp(1);

end

if x < 0

disp(-1);

end

if x == 0

disp(0);

end

Анализ приведенного примера показывает, что все эти три условия являются взаимоисключающими, т.е. при срабатывании одного из них нет необходимости проверять другие. Реализация именно такой логики позволит увеличить скорость выполнения программы. Этого можно добиться путем использования конструкции

if <выражение>

<операторы1> % выполняются, если истинно условие

else

<операторы2> % выполняются, если условие ложно

end

Тогда приведенный выше пример можно записать следующим образом:

x = 5;

if x > 0

disp(1);

else

if x < 0

disp(-1);

else

disp(0);

end

end

В данной программе сначала выполняется проверка на положительность переменной x, и если это так, то на экран выводится значение 1, а все другие условия игнорируются. Если же первое условие оказалось ложным, то выполнение программы переходит по else (иначе) на второе условие, где выполняется проверка переменной x на отрицательность, и в случае истинности условия, на экран выводится значение -1. Если оба условия оказались ложными, то выводится значение 0.

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

if <выражение1>

<операторы1> % выполняются, если истинно выражение1

elseif <выражение2>

<операторы2> % выполняются, если истинно выражение2

elseif <выражениеN>

<операторыN> % выполняются, если истинно выражениеN

end

и записывается следующим образом:

x = 5;

if x > 0

disp(1); % выполняется, если x > 0

elseif x < 0

disp(-1); % выполняется, если x < 0

else

disp(0); % выполняется, если x = 0

end

С помощью условного оператора if можно выполнять проверку более сложных (составных) условий. Например, необходимо определить: попадает ли переменная x в диапазон значений от 0 до 2? Это можно реализовать одновременной проверкой сразу двух условий: x >= 0 и x <=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

Для реализации составных условий в MatLab используются логические операторы:

& – логическое И

| – логическое ИЛИ

~ – логическое НЕ

Рассмотрим пример использования составных условий. Пусть требуется проверить попадание переменной x в диапазон от 0 до 2. Программа запишется следующим образом:

x = 1;

if x >= 0 & x <= 2

disp(‘x принадлежит диапазону от 0 до 2’);

else

disp(‘x не принадлежит диапазону от 0 до 2’);

end

Во втором примере выполним проверку на не принадлежность переменной x диапазону от 0 до 2. Это достигается срабатыванием одного из двух условий: x < 0 или x > 2:

x = 1;

if x < 0 | x > 2

disp(‘x не принадлежит диапазону от 0 до 2’);

else

disp(‘x принадлежит диапазону от 0 до 2’);

end

Используя логические операторы И, ИЛИ, НЕ, можно создавать разнообразные составные условия. Например, можно сделать проверку, что переменная x попадает в диапазон от -5 до 5, но не принадлежит диапазону от 0 до 1. Очевидно, это можно реализовать следующим образом:

x = 1;

if (x >= -5 & x <= 5) & (x < 0 | x > 1)

disp(‘x принадлежит [-5, 5], но не входит в [0, 1]’);

else

disp(‘x или не входит в [-5, 5] или в [0, 1]’);

end

Обратите внимание, что при сложном составном условии были использованы круглые скобки. Дело в том, что приоритет операции И выше приоритета операции ИЛИ, и если бы не было круглых скобок, то условие выглядело бы так: (x >= -5 и x <= 5 и x < 0) или x > 1. Очевидно, что такая проверка давала бы другой результат от ожидаемого.

Круглые скобки в программировании используются для изменения приоритетов выполнения операторов. Подобно арифметическим операторам, логические также могут быть изменены по желанию программиста. Благодаря использованию круглых скобок, сначала выполняется проверка внутри них, а, затем, за их пределами. Именно поэтому в приведенном выше примере они необходимы для достижения требуемого результата.

Приоритет логических операций следующий:

НЕ (~) – самый высокий приоритет;

И (&) – средний приоритет;

ИЛИ (|) – самый низкий приоритет.

Оператор цикла while

Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.

В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:

while <условие>

<операторы>

end

Здесь <условие> означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.

Следует обратить внимание на то, что если условие будет ложным до начала выполнения цикла, то операторы, входящие в цикл, не будут выполнены ни разу.

Приведем пример работы цикла while для подсчета суммы ряда :

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i <= 20 % цикл (работает пока i <= 20)

S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

end % конец цикла

disp(S); % отображение суммы 210 на экране

Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i <= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20

S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

end % конец цикла

disp(S); % отображение суммы 21 на экране

Приведенный пример показывает возможность использования составных условий в цикле while. В общем случае в качестве условного выражения можно записывать такие же условия, что и в условном операторе if.

Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i <= 20 % цикл (работает пока i<=10

S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

if S > 20 % если S > 20,

break; % то цикл завершается

end

end % конец цикла

disp(S); % отображение суммы 21 на экране

В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.

Второй оператор управления выполнением цикла continue позволяет пропускать выполнение фрагмента программы, стоящий после него. Например, требуется подсчитать сумму элементов массива

a = [1 2 3 4 5 6 7 8 9];

исключая элемент с индексом 5. Такую программу можно записать следующим образом:

S = 0; % начальное значение суммы

a = [1 2 3 4 5 6 7 8 9]; % массив

i=0; % счетчик индексов массива

while i < length(a) % цикл (работает пока i меньше

% длины массива а)

i=i+1; % увеличивается счетчик индексов на 1

if i == 5 % если индекс равен 5

continue; % то его не подсчитываем

end

S=S+a(i); % подсчитывается сумма элементов

end % конец цикла

disp(S); % отображение суммы 40 на экране

Следует отметить, что в данной программе увеличение индекса массива i происходит до проверки условия. Это сделано для того, чтобы значение индекса увеличивалось на 1 на каждой итерации работы цикла. Если увеличение счетчика i записать как в предыдущих примерах, т.е. после подсчета суммы, то из-за оператора continue его значение остановилось бы на 5 и цикл while работал бы «вечно».

Оператор цикла for

Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.

Синтаксис оператора цикла for имеет следующий вид:

for <счетчик> = <начальное значение>:<шаг>:<конечное значение>

<операторы цикла>

end

Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:

a = [3 6 5 3 6 9 5 3 1 0];

m = a(1); % текущее максимальное значение

for i=1:length(a) % цикл от 1 до конца вектора с

% шагом 1 (по умолчанию)

if m < a(i) % если a(i) > m,

m = a(i); % то m = a(i)

end

end % конец цикла for

disp(m);

В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.

В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:

a = [3 6 5 3 6 9 5 3 1 0];

disp(a);

for i=length(a):-1:2 % цикл от 10 до 2 с шагом -1

a(i)=a(i-1); % смещаем элементы вектора а

end % конец цикла for

disp(a);

Результат работы программы

3 6 5 3 6 9 5 3 1 0

3 3 6 5 3 6 9 5 3 1

Приведенный пример показывает, что для реализации цикла со счетчиком от большего значения к меньшему, нужно явно указывать шаг, в данном случае, -1. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.

Решения уравнения

Читайте также:

Рекомендуемые страницы:

Цикл с двойным условием матлаб

Вам нужно быстро и легко написать вашу работу? Тогда вам сюда…

©2015-2021 poisk-ru.ru

Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.

Дата создания страницы: 2017-12-12 Нарушение авторских прав и Нарушение персональных данных



Поиск по сайту:

Цикл с двойным условием матлаб Мы поможем в написании ваших работ! Цикл с двойным условием матлаб Мы поможем в написании ваших работ! Цикл с двойным условием матлаб Мы поможем в написании ваших работ!

Источник

Подборка по базе: резюме англ.docx, тема англ.docx, Проект англ..docx, КТ Англ.яз (Приложение 6).docx, кр.Байбородина 241908 англ.яз.в проф.docx, 2 сем. Англ.яз.docx, Письменная работа англ.docx, Звуки англ..doc, Контрольная работа АНГЛ.docx, Скутин англ.docx 5.2. Оператор цикла while

Язык программирования MatLab имеет два оператора цикла: while и for. С их помощью, например, выполняется программирование рекуррентных алгоритмов, подсчета суммы ряда, перебора элементов массива и многое другое.

В самом простом случае цикл в программе организуется с помощью оператора while, который имеет следующий синтаксис:

while

end

Здесь означает условное выражение подобное тому, которое применяется в операторе if, и цикл while работает до тех пор, пока это условие истинно.

Следует обратить внимание на то, что если условие будет ложным до начала выполнения цикла, то операторы, входящие в цикл, не будут выполнены ни разу.

Приведем пример работы цикла while для подсчета суммы ряда :

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

end % конец цикла

disp(S); % отображение суммы 210 на экране

Теперь усложним задачу и будем подсчитывать сумму ряда , пока . Здесь в операторе цикла получается два условия: либо счетчик по i доходит до 20, либо значение суммы S превысит 20. Данную логику можно реализовать с помощью составного условного выражения в операторе цикла while:

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

end % конец цикла

disp(S); % отображение суммы 21 на экране

Приведенный пример показывает возможность использования составных условий в цикле while. В общем случае в качестве условного выражения можно записывать такие же условия, что и в условном операторе if.

Работу любого оператора цикла, в том числе и while, можно принудительно завершить с помощью оператора break. Например, предыдущую программу можно переписать следующим образом с использованием оператора break:

S = 0; % начальное значение суммы

i=1; % счетчик суммы

while i S=S+i; % подсчитывается сумма

i=i+1; % увеличивается счетчик на 1

if S > 20 % если S > 20,

break; % то цикл завершается

end

end % конец цикла

disp(S); % отображение суммы 21 на экране

В данном примере второе условие завершения цикла, когда S будет больше 20, записано в самом цикле и с помощью оператора break осуществляется выход из цикла на функцию disp(), стоящую сразу после цикла while.

Второй оператор управления выполнением цикла continue позволяет пропускать выполнение фрагмента программы, стоящий после него. Например, требуется подсчитать сумму элементов массива

a = [1 2 3 4 5 6 7 8 9];

исключая элемент с индексом 5. Такую программу можно записать следующим образом:

S = 0; % начальное значение суммы

a = [1 2 3 4 5 6 7 8 9]; % массив

i=0; % счетчик индексов массива

while i % длины массива а)

i=i+1; % увеличивается счетчик индексов на 1

if i == 5 % если индекс равен 5

continue; % то его не подсчитываем

end

S=S+a(i); % подсчитывается сумма элементов

end % конец цикла

disp(S); % отображение суммы 40 на экране

Следует отметить, что в данной программе увеличение индекса массива i происходит до проверки условия. Это сделано для того, чтобы значение индекса увеличивалось на 1 на каждой итерации работы цикла. Если увеличение счетчика i записать как в предыдущих примерах, т.е. после подсчета суммы, то из-за оператора continue его значение остановилось бы на 5 и цикл while работал бы «вечно».

5.3. Оператор цикла for

Часто при организации цикла требуется перебирать значение счетчика в заданном диапазоне значений и с заданным шагом изменения. Например, чтобы перебрать элементы вектора (массива), нужно организовать счетчик от 1 до N с шагом 1, где N – число элементов вектора. Чтобы вычислить сумму ряда, также задается счетчик от a до b с требуемым шагом изменения step. И так далее. В связи с тем, что подобные задачи часто встречаются в практике программирования, для их реализации был предложен свой оператор цикла for, который позволяет проще и нагляднее реализовывать цикл со счетчиком.

Синтаксис оператора цикла for имеет следующий вид:

for = ::

end

Рассмотрим работу данного цикла на примере реализации алгоритма поиска максимального значения элемента в векторе:

a = [3 6 5 3 6 9 5 3 1 0];

m = a(1); % текущее максимальное значение

for i=1:length(a) % цикл от 1 до конца вектора с

% шагом 1 (по умолчанию)

if m m,

m = a(i); % то m = a(i)

end

end % конец цикла for

disp(m);

В данном примере цикл for задает счетчик i и меняет его значение от 1 до 10 с шагом 1. Обратите внимание, что если величина шага не указывается явно, то он берется по умолчанию равным 1.

В следующем примере рассмотрим реализацию алгоритма смещения элементов вектора вправо, т.е. предпоследний элемент ставится на место последнего, следующий – на место предпоследнего, и т.д. до первого элемента:

a = [3 6 5 3 6 9 5 3 1 0];

disp(a);

for i=length(a):-1:2 % цикл от 10 до 2 с шагом -1

a(i)=a(i-1); % смещаем элементы вектора а

end % конец цикла for

disp(a);

Результат работы программы

3 6 5 3 6 9 5 3 1 0

3 3 6 5 3 6 9 5 3 1

Приведенный пример показывает, что для реализации цикла со счетчиком от большего значения к меньшему, нужно явно указывать шаг, в данном случае, -1. Если этого не сделать, то цикл сразу завершит свою работу и программа будет работать некорректно.

6. Решения уравнения

6.1. Графический метод решения уравнений

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

На данном графике представлены графики функций y=sin(t)/t и (x/5)2+y2=1. Как не трудно заметить данные функции имеют три точки пересечения.

6.2. Поиск решения уравнения

Графическим методом можно лишь примерно оценить решение. Для более точного нахождения решения в пакете MatLAB необходимо воспользоваться функцией fsolve(уравнение, начальное значение). Позже мы познакомимся как с помощью данной функции решать системы уравнений. В простейшем случае решаемое уравнение можно указать можно указать в одинарных кавычках, например: ‘x*x-abs(x)’. Но данная функция имеет три решения, представленных на рис.

Решение, которое найдет в этом случае функция fsolve будет определяться начальным значением откуда она начнет итерационную процедуру поиска решения. Например:

fsolve(‘x*x-abs(x)’,-2), ans = -1.0000;

fsolve(‘x*x-abs(x)’,0.6), ans = 1.0000;

fsolve(‘x*x-abs(x)’,0.4), ans = 7.9062e-008.

Функция fsolve продолжает итерационную процедуру до тех пор пока она не найдет решение с заданной точностью. По этому в нашем примере мы и получили 7.9062e-008 а не 0.

В случае более сложных функций их удобнее представить в виде M файла. Тогда в качестве первого параметра функции fsolve подставляется в одинарных кавычках имя этого файла.

7. М-файлы

7.1. M-file

Работа из командной строки MatLab затрудняется, если требуется вводить много команд и часто их изменять. Ведение дневника при помощи команды diary и сохранение рабочей среды незначительно облегчают работу. Самым удобным способом выполнения групп команд MatLab является использование М-файлов, в которых можно набирать команды, выполнять их все сразу или частями, сохранять в файле и использовать в дальнейшем. Для работы с М-файлами предназначен редактор М-файлов. С его помощью можно создавать собственные функции и вызывать их, в том числе и из командного окна.

Раскройте меню File основного окна MatLab и в пункте New выберите подпункт M-file. Новый файл открывается в окне редактора M-файлов, которое изображено на рисунке.

Цикл с двойным условием матлаб

М-файлы в MatLab бывают двух типов: файл-программы (Script M-Files), содержащие последовательность команд, и файл-функции, ( M-Files), в которых описываются функции, определяемые пользователем.

7.2. Файл-программа

Наберите в редакторе команды, приводящие к построению двух графиков на одном графическом окне

Цикл с двойным условием матлаб

Сохраните теперь файл с именем mydemo.m в подкаталоге work основного каталога MatLab, выбрав пункт Save as меню File редактора. Для запуска на выполнение всех команд, содержащихся в файле, следует выбрать пункт Run в меню Debug. На экране появится графическое окно Figure 1, содержащее графики функций.

Очень удобной возможностью, предоставляемой редактором М-файлов, является выполнение части команд. Закройте графическое окно Figure 1. Выделите при помощи мыши, удерживая левую кнопку, или клавишами со стрелками при нажатой клавише Shift, первые четыре команды и выполните их из пункта Text. Обратите внимание, что в графическое окно вывелся только один график, соответствующий выполненным: командам. Запомните, что для выполнения части команд их следует выделить и нажать клавишу F9.

Отдельные блоки М-файла можно снабжать комментариями, которые пропускаются при выполнении, но удобны при работе с М-файлом. Комментарии начинаются со знака процента и автоматически выделяются зеленым цветом, например:

Цикл с двойным условием матлаб

Открытие существующего М-файла производится при помощи пункта Open меню File рабочей среды, либо редактора М-файлов.

7.3. Файл-функция

М-функции являются M-файлами, которые допускают наличие входных и выходных аргументов. Они работают с переменными в пределах собственной рабочей области, отличной от рабочей области системы MATLAB.

Пример_Функция_average_-_это_достаточно_простой_M-файл,_который_вычисляет_среднее_значение_элементов_вектора:__y_=_average_(x)’>Пример

Функция average – это достаточно простой M-файл, который вычисляет среднее значение элементов вектора:

y = average (x)

% AVERAGE Среднее значение элементов вектора.

% AVERAGE(X), где X – вектор. Вычисляет среднее значение элементов вектора.

% Если входной аргумент не является вектором, генерируется ошибка.

[m,n] = size(x);

if (

((m == 1) | (n == 1)) | (m == 1 & n == 1))

error(‘Входной массив должен быть вектором’)

end

y =sum(x)/length(x); % Собственно вычисление

Попробуйте ввести эти команды в M-файл, именуемый average.m. Функция average допускает единственный входной и единственный выходной аргументы. Для того чтобы вызвать функцию average, надо ввести следующие операторы:

z = 1:99;

average(z)

ans = 50

Структура М-функции. M-функция состоит из:

  • строки определения функции;

  • первой строки комментария;

  • собственно комментария;

  • тела функции;

  • строчных комментариев;

Строка определения функции. Строка определения функции сообщает системе MATLAB, что файл является М-функцией, а также определяет список входных аргументов.

Пример

Строка определения функции average имеет вид:

y = average(x)

Здесь:

  1. – ключевое слово, определяющее М-функцию;

  2. y – выходной аргумент;

  3. average – имя функции;

  4. x – входной аргумент.

Каждая функция в системе MATLAB содержит строку определения функции, подобную приведенной.

Если функция имеет более одного выходного аргумента, список выходных аргументов помещается в квадратные скобки. Входные аргументы, если они присутствуют, помещаются в круглые скобки. Для отделения аргументов во входном и выходном списках применяются запятые.

Пример

[x, y, z] = sphere(theta, phi, rho)

Имена входных переменных могут, но не обязаны совпадать с именами, указанными в строке определения функции.

Первая строка комментария. Для функции average первая строка комментария выглядит так:

% AVERAGE Среднее значение элементов вектора

Это – первая строка текста, которая появляется, когда пользователь набирает команду help . Кроме того, первая строка комментария выводится на экран по команде поиска lookfor. Поскольку эта строка содержит важную информацию об M-файле, она должна быть тщательно составлена.

Имена М-функций. В системе MATLAB на имена М-функций налагаются те же ограничения, что и на имена переменных – их длина не должна превышать 31 символа. Более точно, имя может быть и длиннее, но система MATLAB принимает во внимание только первые 31 символ. Имена М-функций должны начинаться с буквы; остальные символы могут быть любой комбинацией букв, цифр и подчеркиваний.

Имя файла, содержащего М-функцию, составляется из имени функции и расширения “.m”.

Пример

average.m

Если имя файла и имя функции в строке определения функции разные, то используется имя файла, а внутреннее имя игнорируется. Хотя имя функции, определенное в строке определения функции, может и не совпадать с именем файла, настоятельно рекомендуется использовать одинаковые имена.

1 2 3 4 5 6

Источник

Читайте также:  Дмитрий кружевский цикл искатель