Мария Николова (предстои допълване на темите, превеждане на английския текст и добавяне на литературните източници)



страница4/10
Дата19.03.2017
Размер0.69 Mb.
#17331
1   2   3   4   5   6   7   8   9   10

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

Matlab разполага с пълен език за програмиране, който позволява на потребителя да пише програми. Програмата представлява последователност от оператори на Matlab, записани във файл. Тези оператори се изпълняват като в командния прозорец се напише името на файла и се натисне – т.е. с една команда.

Програмното решаване на задачи в Matlab се извършва чрез последователно интерпретиране на команди (оператори) от езика на Matlab. Тези команди могат да се запишат в обикновен текстов файл в Notepad или в М-редактора (М – file editor) и да се стартират многократно. Вграденият редактор на М-файлове автоматично позиционира ключовите думи от програмните оператори, номерира редовете и колоните и показва стойност на променлива, участваща в програмата, ако тази стойност вече съществува в Workspace. Името на M-файла е от вида - filename.m, т.е. има разширение m и затова се нарича още М-файл. М-файловете могат да бъдат скриптове (scripts), наречени още описателни или сценарии, или функции (function).

Скриптовете са най-простата разновидност на М-файл. Те се използват за автоматизиране на последователността от команди на Matlab, като изчисления, които се повтарят при изпълнението им от командния ред. Всички променливи, които скриптът създава, остават в работното пространство след като завърши изпълнението на скрипта и потребителят може да използва променливите за следващи изчисления. М-скриптовете не използват входни и изходни параметри (аргументи), оперират с данни от работната област (Workspace) и генерират резултати (данни), които се съхраняват и могат да се ползват отново в работната област.

М-функциите съдържат входни и изходни параметри. Това са променливи, с които се предават данни за изчисление на стойност (стойности) на функцията – входни параметри и променливи (или само една променлива), с които се извежда резултат от изчислението на функцията – иаходни параметри (или само един изходен параметър) . Вътрешните им променливи се явяват локални по отношение на функцията и не могат да се използват в работното пространство.

Стъпките по създаването и използването на М-файлове са:



  1. Създаване на файла в текстов редактор и записване под определено име и разширение .m

  2. Стартиране (извикване) на файла от командния ред в Command Window или в друг М-файл.

Пример1 за М-script – да се състави програма за намиране на модула от стойностите на 2 едномерни масива - вектора ( в случая матрици-ред):


a=1:0.5:10

b=21:0.5:30

d=sqrt(a.^2+b.^2)
Въвеждането на горните 3 реда в редактора на m-файлове става като:


  1. Отваря се редактора от Home-таба след натискане на бутона New Script или след натискане на бутона New и след това избиране на Script.

  2. Въвеждат се трите оператора в редактора от клавиатурата.

Тези три оператора на Matlab се записват под име например modul2.m като се натисне иконата Save в таб Editor от лентата на редактора или се избере Save as от падащия списък с команди под Save:



Фиг. Въведен m- скрипт в редактора и записването му на диска
Изпълнението на файла става по един от двата начина:

а)в Command Window на командния ред (>>) се въведe само името на скрипта - modul2 и след това се натисне клавиша Enter или

б)Натиска се бутона Run със зеления триъгълник от лентата на редактора.
И в двата случая след изпълнението на програмата стойностите на променливите а, b и d се появяват в Command Window и в работното пространство.

Фиг. 7. Резултат от изпълнението на скрипта


Ако след оператор се въведе точка и запетая (;) тогава се подтиска извеждането на резултата от изпълнението му. Така, ако програмата от горния пример се промени по следния начин:

a=1:0.5:10;

b=21:0.5:30;

d=sqrt(a.^2+b.^2)


след изпълнението й, в командния прозорец се появяват само резултатите за d – последния оператор от програмата. Променливите винаги се записват в Workspace.


  1. Оператори за въвеждане и извеждане input, disp, error

Пример:

n=input('Wawedete n>0 ')

m=input('Wawedete m>0 ')

error('n i m triabwa da sa >0');

disp (' m= a='); disp([m, a])
Оператор input извежда на екрана текста, заграден в апострофите. Потребителят въвежда число и след това натиска клавиш . Въведеното число се присвоява като стойност на името на променливата в лявата част на израза за input (за първия ред от горния пример, това е променливата n). Ако потребителят натисне без да въведе стойност, на името на променливата не се присвоява стойност. Ако се въведе оператор input без в лявата страна да има знак равно и име на променлива, (т.е. без n=), и след това се въведе стойност и се натисне , въведената стойност се присвоява на системната променлива ans.

Оператор еrror извежда съобщение (текста в апострофите) и прекъсва изпълнението на функцията

Оператор disp извежда текст или масив
Пример2 за промяна на скрипта от Пример1 с добавяне на оператор input за въвеждане от потребителя на стойност на променливата s за въвеждане на произволно число за повдигане в степен.
a=1:0.5:10

b=21:0.5:30

s=input('Въведете число: ')

d=sqrt(a.^s+b.^s)




  1. Структура на М-функция

function Име на променлива=Име на функцията(Списък от входни аргументи)

%Коментар, който се извежда на екрана при използване на команда
help Име на функцията

% Редовете с коментари (ако има такива) преди Оператор 1 също се извеждат на дисплея с help Име на функцията



Оператор 1

.
Тези оператори образуват тялото на функцията
....

Оператор n

Име на променливата=Израз

Функцията се съхранява във файл с име еднакво с Името на функцията и разширение m. Препоръчва се името на функцията да е с малки букви за да може да се използва и от други операционни системи, ако се наложи. Името на функцията трябва да бъде уникално, т.е. да не съвпада с друго име на M-файл или вградена функция. Резултатът от изпълнението на функцията Matlab присвоява на името на променливата, която се нарича изходен аргумент на функцията. В Пример3 резултатът от изпълнението на функцията се присвоява на променливата с. Входните аргументи са а и b. Стойности на а и b се задават преди извикването на функцията modul или директно се въвеждат числа на мястото на а и b.


Пример3: Да се състави функция за изчисляване на модула от стойностите на 2 вектора.

Въвеждането на текста на функцията става в m-редактора като от Home - таба в прозореца на Матлаб се избере командaтa: New/Function. Отваря се прозорец, където има предварително въведен ред за заглавието на функцията и за коментар.Коментарът започва със знака %.


function c=modul(a,b)

%Изчислява модула от стойностите на 2 вектора

c=sqrt(a.^2+(b.^2))%резултат
Името на файла, в заглавния ред на функцията function c=modul(a,b) е modul.m и файлът сe съхранява под същото име modul.m в работната директория на Matlab след избиране на командата Save as. За да се избегнат проблеми при изпълнението на функцията, не се препоръчва името на файла на диска да е различно от зададеното вече име в заглавния ред на функцията.
Когато се зададе команда Help modul от командния прозорец, тогава се извежда на екрана коментарния ред Изчислява модула от стойностите на 2 вектора.
Извикване (стартиране) на функцията:

Извършва се по 3 начина:



  • От редактора: от стрелката под бутона Run се избира Run: type code to run, натиска се върху type code to run и в появилото се име на функцията се задават стойности на аргументите

  • от командния ред на Command Window, като не се забравя да се въведат стойности на аргументите

  • от друг .m-файл посредством изписване на името на функцията и входните аргументи.


Фиг. Стартиране на функцията от m-редактора


Пример за стартирането на функцията от командния прозорец:

Първи начин – задаване на стойности на а и b в променливи преди извикване на функцията. Въвеждат се 2 вектора v и к с данни и след това на мястото на а се въвежда v, а на мястото на b – масива к.


>> v=1:10

>> k=2:11

>> modul(v,k)
Като резултат на екрана се извеждат стойностите от резултата за модула (променлива с) в 10 колони (Columns).
c =

Columns 1 through 7

2.2361 3.6056 5.0000 6.4031 7.8102 9.2195 10.6301

Columns 8 through 10

12.0416 13.4536 14.8661
Втори начин –директно се задават стойности на входните аргументи:
>> modul(1:10,2:11)
Резултатът от изпълнението на на функцията по двата начина е един и същ.
Когато се налага да извикаме функцията в друг m-файл, трябва да въведем името на функцията с нейните аргументи в текста на програмата. Създаден е файл с име operfunc.m със следното съдържание:

v=1:10


k=2:11

modul(v,k)


Когато се стартира от командния прозорец operfunc.m, резултатът е аналогичен на показания в предишния пример.

Ако функцията притежава повече от един изходен аргумент, тогава аргументите се записват в квадратни скоби след ключовата дума function.


Пример4 Да се изчисли модул, синуси експонента на 2 вектора:

Файлът izrazi.m съдържа функцията izrazi с 3 изходни аргумента: c, y и z. Текстът на файла е:


function [c,y,z]=izrazi(a,b)

%Изчислява модул от стойностите на 2 вектора, sinus и exponenta

c=sqrt(a.^2+(b.^2))%резултат за с

y=sin(c)%резултат за y

z=exp(y)%резултат за z
Извикване на функцията от командния прозорец:

>> izrazi(0,pi)


Резултатът от изпълнението на функцията е:

c =


3.1416

y =


1.2246e-016

z =


1.0000

ans =


3.1416
Всяка М - функция притежава свои локални променливи, които участват в изрази в тялото на функцията. Стойностите на локалните функции не са достъпни в работната област и не могат да се използват директно в командния прозорец. За да стане това, необходимо е да се зададе команда global.


  1. Условен оператор if…else…elseif…end

Има три начина на записване и използва на оператор if
Първи начин – конструкция if-end (на англ. оператор if)

if логически израз (логическо условие)

оператори (инструкции)

end


Могат да се влагат произволен брой оператори if един в друг.
Пример5: Да се въведе едно число и да се провери дали е четно. Да се изведе текст, ако числото е четно.

a=input('Въведете число')

if rem(a,2) == 0

disp('a е четно')

end
Втори начин – конструкция if-else end(на англ. оператор else)
if логически израз

оператори

else

оператори



end
Пример6: Да се въведе едно число и да се провери дали е четно. Да се изведе текст, указващ дали числото е четно или нечетно.
a=input('Въведете число')

if rem(a,2) == 0

disp('a е четно')

else


disp('a е нечетно')

end
Трети начин – конструкция if-elseif-else end (на англ. оператор elseif)

if логически израз

оператори

elseif логически израз

оператори

else

оператори



end
Пример7: Да се състави програма (script) за въвеждане на две положителни числа m и n. Да се направи проверка дали числата са положителни и ако не са, да се изведе съобщение за грешка. Ако n е четно, да се раздели на две, ако n е нечетно да се прибави към него единица и след това да се раздели на две и резултатът се присвои на променлива с име а. Ако n е нечетно m да присвои стойността на n. Да се изведат стойностите на а и m
n=input('Въведете n>0 ');

m=input(' Въведете m>0 ');

if (n<0 | m<0)

error('n и m трябва да са >0');

elseif rem (n,2)==0

% ако n>0, то е четно – да го разделим на 2

a=n/2;

else


a=(n+1)/2;

m=n;


end;

disp (' m= a='); disp([m, a]);





  1. Оператор за цикъл for

Цикличен алгоритъм (цикъл) се нарича този алгоритъм, при който едно или група действия, записани само веднъж, се извършват многократно при еднократното изпълнение на алгоритъма. Групата от действия, която трябва да се извърши многократно се нарича тяло на цикъла. Оператори за цикъл са while и for.

Няколко варианта на оператор for:



Първи вариант – стъпката на нарастване на брояча е 1:

for променлива-брояч = начална стойност : крайна стойност

оператори

end


Действие на цикъла: „За стойностите от начална до крайна през единица на променливата-брояч на цикъла, изпълнявай операторите между for и end. След това премини към оператора, следващ end”.
Втори вариант – стъпката на нарастване на брояча е произволна:

for променлива-брояч = начална стойност : стъпка на нарастване : крайна стойност

оператори

end
Трети вариант – Стойностите на брояча са равни на стойностите на зададен масив

for променлива-брояч = масив

оператори

end
Примери:

for i=1:7

a(i)=sqrt(i-1)

end


Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]

%Da se izchisli sumata ot otricatelnite elementi na matricata


M=[-3.5 6 8; 4 7 9; 10 -12 0]

sum=0


for i=1:3

for j=1:3

if M(i,j)<0

sum=sum+M(i,j)

end

end


end

sum




  1. Оператор за цикъл while.

while логически израз

оператори

end

Действие на цикъла: „Докато стойността на логическия израз е истина (true), изпълнявай операторите между while и end. Ако стойността на логическия израз е лъжа (false), премини към оператора, следващ end”


Примери:

Пример 1


n=1;

while prod(1:n)<100

n=n+1;

end


n
Пример 2:

for i=1:7

a(i)=sqrt(i-1)

end


m=1.6
i=1

while a(i)<=m

i=i+1

d=a(i)


end

disp(d)


disp(i)


  1. Оператор за прекъсване на изпълнението на цикъл break и оператор continue за преминаване към следващата итерация в for или while.

Пример 1

%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]

%Da se izchisli sumata ot elementite na matricata, dokato sumata im stane

%po-goliama ot 20


M=[-3.5 6 8; 4 7 9; 10 -12 0]

sum=0


for i=1:3

for j=1:3

if sum>20

break


end

sum=sum+M(i,j)

end

end
Пример 2.



%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]

%Da se izchisli sumata ot elementite na matricata, dokato sumata im stane

%po-goliama ot 20

%Da se izwede elementyt, pri kojto sumata e po-goliama ot 20 i indeksite mu


M=[-3 6 8; 4 7 9; 10 -12 0]

sum=0


for i=1:3

for j=1:3

if sum>20

break


end

sum=sum+M(i,j)

%za da poluchim weren resultat za elementa, sahraniawame indeksite

%mu w drugi dwe promenliwi k i l

k=i

l=j


end

end


end

%kogato se izwegdat i i j, resultayt za B(i,j) i indkesite e neweren

disp(' sum M(i,j) i j '); disp([sum M(i,j) i j])

disp(' sum M(k,l) k l '); disp([sum M(k,l) k l])


Пример 3

%Da se wawede matricata M=[-3.5 6 8; 4 7 9; 10 -12 0]

%Da se izchisli sumata ot otricatelnite elementi na matricata s izpolzwane

%na operator continue


M=[-3.5 6 8; 4 7 9; 10 -12 0]

sum=0


for i=1:3

for j=1:3

if M(i,j)>0

continue


else

sum=sum+M(i,j)

end

end


end


  1. Оператор switch за избор на един от няколко възможни варианти


switch израз (или променлива), чиято стойност се сравнява със стойността на изразите след case

case израз 1

оператор 1 ... оператор n

case { израз 1, израз 2, израз n}

оператор 1 ... оператор n

otherwise



оператор 1 ... оператор n

end


Действие на оператор switch:

Стойността на израза (променливата) след switch се сравнява със стойностите на изразите след case и ако е равна на някоя от техните стойности, се изпълнява оператора (операторите) след case. В противен случай се изпълняват операторите между otherwise и end.

%operator za razklonenie switch

x=input('wawedete chislo rawno na 1, 0 ili -1 ')

switch x

case 1


disp('x=1')

case -1


disp('x=-1 ')

case 0


disp('x=0 ')

otherwise

disp('drugo chislo razlichno от 1, 0, -1')

end




Сподели с приятели:
1   2   3   4   5   6   7   8   9   10




©obuch.info 2024
отнасят до администрацията

    Начална страница