Variabelen in de MATLAB-omgeving. Programmeren van M-functies

Ode23("lotka2",,); plot(t,y) Het globale commando declareert de variabelen ALPHA en BETA globaal en daarom beschikbaar in de functie lotka.m. Ze kunnen dus worden gewijzigd van opdrachtregel , en nieuwe oplossingen zullen worden verkregen zonder het M-bestand lotka.m te bewerken. Om met globale variabelen te werken, moet u: de variabele als globaal declareren in elke M-functie waarvoor deze variabele vereist is. Om een ​​werkruimtevariabele globaal te maken, moet u deze vanaf de opdrachtregel als globaal declareren; gebruik in elke functie het globale commando vóór de eerste verschijning van de variabele; Het wordt aanbevolen om het globale commando aan het begin van het M-bestand op te geven. Globale namen van variabelen zijn doorgaans langer en betekenisvoller dan lokale namen van variabelen, en worden vaak gebruikt hoofdletters . Dit is optioneel, maar wordt aanbevolen om de leesbaarheid van de MATLAB-code te garanderen en de kans te verkleinen dat per ongeluk een globale variabele wordt overschreven. Speciale variabelen. Sommige M-functies retourneren speciale variabelen die spelen belangrijke rol bij het werken in de MATLAB-systeemomgeving: Laatste resultaat gegevens, waarvan elk multidimensionale array. De zes klassen zijn double, char, sparse, uint8, cell en struct. De tweedimensionale versies van deze arrays worden matrices genoemd, vandaar dat MATLAB de naam MATRIX LAB krijgt. Een diagram van het lidmaatschap van een bepaald MATLAB-systeemobject in een van de klassen ziet er als volgt uit (Figuur 3.1): Het is waarschijnlijk dat u meestal met slechts twee van deze datatypen te maken zult hebben: een array van dubbele precisiegetallen (dubbel) en een reeks tekens (char), of gewoon een string. Dit komt omdat alle berekeningen in MATLAB met dubbele precisie worden uitgevoerd en de meeste functies werken op arrays of strings met dubbele precisie. Andere gegevenstypen zijn bedoeld voor speciale toepassingen, zoals het werken met dunne matrices (sparse), beeldverwerking (uint8), het werken met grootdimensionale arrays (cel en struct). U kunt het variabeletype niet instellen op numeriek of array. Deze typen worden virtueel genoemd en dienen alleen voor het groeperen van variabelen die gemeenschappelijke kenmerken hebben. Het type uint8 is ontworpen om gegevens efficiënt in het geheugen op te slaan. Alleen basisbewerkingen voor indexering en formaatwijziging kunnen worden toegepast op gegevens van dit type, maar nee wiskundige bewerking. Om dit te doen, moeten dergelijke arrays worden geconverteerd naar het dubbele type. Maak uw eigen typen en voeg methoden toe voor ingebouwde typen. De onderstaande tabel bevat het zevende gegevenstype: UserObject. geheugen dat nodig is om de volledige matrix op te slaan. Schaarse matrices vereisen het gebruik van speciale methoden om problemen op te lossen. Celreeks. De elementen van deze array bevatten andere arrays. Met celarrays kan Cell (17 "hallo" oog (2)) mogelijk gerelateerde gegevens combineren verschillende maten, in één enkele structuur. Een reeks records. Het bevat veldnamen. A.dag = 12; A.color = Velden zelf kunnen arrays bevatten. Vergelijkbaar met structuur "Rood"; A.mat = celarrays, arrays magic(3); records combineren gerelateerde gegevens en informatie daarover. 73 Array van 8-bit gehele getallen zonder teken. Hiermee kunt u gehele getallen in het bereik van 0 tot 255 opslaan in 1/8 van het geheugen dat Uint8 (magic(3)) nodig heeft voor een array met dubbele precisie. Voor deze arrays zijn geen wiskundige bewerkingen gedefinieerd., wiskundige functies, dubbele wiskundige functies, functies van matrices. Zoeken (vinden), verwerken van complexe getallen (reëel, imag), vorming van vectoren, selectie van rijen, kolommen, array-subblokken, scalaire expansie. Sparse bewerkingen op dunne matrices. Array van records Toegang tot de inhoud van field.field (het Struct-scheidingsteken van lijstelementen is een komma). Opslagbewerking (meestal gebruikt met Uint8 PPP Image Processing Toolbox) UserObject Door de gebruiker gedefinieerde lege arrays. Vroege versies MATLAB-systemen maakten een enkele vorm van een lege array met de grootte 0x0 mogelijk, aangeduid als . MATLAB ondersteunt arrays waarvan één, maar niet alle, afmetingen gelijk zijn aan nul, dat wil zeggen arrays met afmetingen van 1x0, 10x0x20 of gedefinieerd als leeg. Vierkante beugels type if A, S1, else, S0, end voert de instructie S0 uit als A een lege array is. Sommige MATLAB-functies zoals sum, prod, min en max verminderen de dimensionaliteit van het resultaat: als het argument een array is, dan is het resultaat een vector; als het argument een vector is, dan is het resultaat scalair. Voor deze functies worden, als de invoerarray leeg is, de volgende resultaten verkregen: sum() = 0 ; prod() = 1; maximaal() = ; min() = . 3.4 Operatoren van het MATLAB 5-systeem. Operatoren combineren in rekenkundige uitdrukkingen. Ingebouwde functies MATLAB-operatoren MATLAB-operatoren vallen in drie categorieën: Met 76 rekenkundige operatoren kunt u rekenkundige uitdrukkingen construeren en numerieke berekeningen uitvoeren. Met relationele operatoren kunt u numerieke operanden vergelijken., behalve in het enige geval waarin een van hen scalair is. Als een van de operanden scalair is en de andere niet, gaat MATLAB ervan uit dat de scalair wordt uitgebreid tot de grootte van de tweede operand en wordt de gespecificeerde bewerking op elk element toegepast. Deze operatie wordt scalaire expansie genoemd.< Меньше <= Меньше или равно >Relationele operatoren. De volgende 6 relationele operatoren zijn gedefinieerd in MATLAB:

Groter dan > = Groter dan of gelijk aan == Gelijk aan identiek ~ = Niet gelijk Relationele operatoren voeren een element-voor-element vergelijking uit van twee matrices van gelijke afmetingen. Voor vectoren en rechthoekige arrays moeten beide operanden dezelfde grootte hebben, tenzij een van hen scalair is. In dit geval vergelijkt MATLAB de scalair met elk element van de andere operand. Posities waar deze relatie waar is, krijgen de waarde 1, waarbij false - 0. Relationele operatoren worden doorgaans gebruikt om de uitvoeringsvolgorde van programma-instructies te wijzigen. Daarom worden ze het vaakst gebruikt in de hoofdtekst van if, for, while, switch-instructies.

Relationele operatoren worden altijd element voor element uitgevoerd.

Voorbeeld. Laten we twee arrays vergelijken met behulp van voorwaarde A

Basisprincipes van programmeren in MatLab

Namestnikov S.M. / Verzameling lezingen: Ulyanovsk State Technical University, Ulyanovsk. - 2011

Invoering

Hoofdstuk 1. Programmastructuur. Basis wiskundige bewerkingen en gegevenstypen

1.1. MatLab-programmastructuur

1.2. Eenvoudige variabelen en basisgegevenstypen in MatLab

1.3. Rekenkundige bewerkingen met eenvoudige variabelen

1.4. Basis wiskundige functies van MatLab

1.5. Vectoren en matrices in MatLab

1.6. Bewerkingen op matrices en vectoren

1.7. Structuren in MatLab

1.8. Cellen in MatLab

Hoofdstuk 2. Voorwaardelijke instructies en lussen in MatLab

2.1. Voorwaardelijke if-instructie

2.2. Voorwaardelijke switch-instructie

2.3. While-lusoperator

2.4. De for-loop-operator

Hoofdstuk 3. Werken met grafieken in MatLab

3.1. plotfunctie

3.2. Ontwerp van grafieken

3.3. 3D-grafieken weergeven

3.4. Bitmaps weergeven

Hoofdstuk 4. Programmeerfuncties in MatLab

4.1. Volgorde van het definiëren en aanroepen van functies

4.2. Variabel bereik

Hoofdstuk 5. Werken met bestanden in MatLab

5.1. functies opslaan en laden

5.2. fwrite- en fread-functies

Onder de vele bestaande wiskundige pakketten, zoals Mathematica, MathCad, enz., neemt het MatLab-systeem een ​​leidende positie in dankzij de handige ingebouwde programmeertaal voor het implementeren van een grote verscheidenheid aan wiskundige algoritmen en wiskundige modelleringsproblemen. Bovendien bevat dit pakket een hulpmiddel voor visuele modellering, Simulink, waarmee u wiskundige modellen kunt bouwen en verkennen zonder ze te hoeven programmeren.

Deze tutorial onderzoekt de interne programmeertaal MatLab, die de grootste flexibiliteit, rijkdom aan functionaliteit en gemak biedt bij het oplossen en bestuderen van wiskundige problemen. Bij de presentatie van het materiaal werd de voorkeur gegeven aan de eenvoudigste taalconstructies, door te bestuderen welke de meest uiteenlopende en niet-triviale wiskundige algoritmen kunnen creëren.

Hoofdstuk 1. Programmastructuur. Basis wiskundige bewerkingen en gegevenstypen

De eerste stap op weg naar het creëren van wiskundige algoritmen is het bestuderen van de structuur van het programma en de reeks wiskundige bewerkingen die beschikbaar zijn voor de programmeertaal. In het bijzonder zal dit hoofdstuk de wiskundige bewerkingen en functies van het MatLab-pakket onderzoeken die verband houden met de verwerking van zowel scalaire als matrixvariabelen.



MatLab-programmastructuur

In de regel is elk programma in MatLab een functie en begint het met het trefwoord function, gevolgd door de naam ervan, gescheiden door een spatie. Bijvoorbeeld,

functie Lab1
a = 5;
b = 2;
c = a*b;

Dit programma is opgenomen in een functie genaamd Lab1 en berekent het product van twee variabelen a en b. Wanneer u een programma in een m-bestand opslaat, wordt aanbevolen om de bestandsnaam op te geven die overeenkomt met de naam van de functie, d.w.z. in dit geval - Lab1.

Opgemerkt moet worden dat veel extra functies in één m-bestand kunnen worden gespecificeerd. Om dit te doen, schrijft u gewoon een andere sleutelwoordfunctie aan het einde van de hoofdprogrammalijst en stelt u de naam in, bijvoorbeeld:

functie Lab1
a = 5;
b = 2;
c = a*b;
uit_c(c); % functieaanroep out_c()

functie out_c(arg_c) % definitie van de functie out_c()
disp(arg_c);

Merk op dat de functie out_c() in het hoofdprogramma kan worden aangeroepen voordat deze wordt gedefinieerd. Dit is een kenmerk van de MatLab-taal waardoor de programmeur zich geen zorgen hoeft te maken over de volgorde van het specificeren van functies. In het gegeven voorbeeld heeft de functie out_c() één invoerparameter genaamd arg_c, die op het scherm wordt weergegeven (in het MatLab-opdrachtvenster) met behulp van de ingebouwde disp()-functie. Als gevolg hiervan zal, wanneer het bovenstaande programma wordt uitgevoerd, de waarde van de variabele c worden weergegeven in het MatLab-opdrachtvenster.

Extra functies kunnen ook in aparte m-bestanden worden aangeboden. Als het bijvoorbeeld nodig is om een ​​functie in het ene m-bestand te beschrijven en deze in een ander bestand aan te roepen, dan kan dit als volgt worden geïmplementeerd.

1e bestand (Lab1.m)

Wanneer de Lab1-functie wordt uitgevoerd, zal MatLab de vierkante functie aanroepen vanuit het square.m-bestand. Dit gebeurt automatisch, omdat... ingebouwde functies van de MatLab-taal worden ook gedefinieerd en aangeroepen vanuit bestanden, waarvan de namen in de regel overeenkomen met de namen van de aangeroepen functies. Merk ook op dat de functie square() niet alleen twee argumenten a en b nodig heeft, maar ook hun product retourneert met behulp van de variabele res. De gepresenteerde syntaxis moet worden gebruikt wanneer het resultaat van een berekening moet worden teruggestuurd naar het hoofdprogramma. Het vierde hoofdstuk van deze handleiding beschrijft in meer detail de constructie van functieaanroepen voor het implementeren van verschillende algoritmen.

Eenvoudige variabelen en basisgegevenstypen in MatLab

Het maken van een programma begint meestal met het definiëren van variabelen en het weergeven van gegevens. Om de beschrijving van programmagegevens correct te organiseren, moet u daarom weten hoe u variabelen in MatLab instelt en welke soorten variabelen mogelijk zijn.

Het eenvoudigste en meest voorkomende gegevenstype is een getal. In MatLab wordt een getal opgeslagen in een variabele die een unieke naam heeft, bijvoorbeeld

definieert een variabele met de naam a en kent daaraan de waarde 5 toe. Standaard is de variabele a reëel (type double), d.w.z. kan fractionele waarden aannemen, bijvoorbeeld

stelt de waarde van variabele a in op -7,8. U kunt het type van een variabele wijzigen door het type van het toegewezen nummer op te geven met behulp van het juiste trefwoord, bijvoorbeeld:

zal het getal 5 toewijzen als een 16-bits gehele waarde. Als gevolg van deze bewerking komt het type variabele a overeen met int16.

De gegevenstypen die beschikbaar zijn in MatLab worden weergegeven in de tabel. 1.1.

Tabel 1.1. Basisgegevenstypen in MatLab

Het standaardtype is double, dat de hoogste nauwkeurigheid heeft bij het weergeven van een reëel getal en daarom een ​​universeel type is. Als u echter computergeheugen moet besparen, kunt u zelf het gewenste type opgeven.

Het laatste dat u moet weten bij het definiëren van variabelen is de regel voor het bepalen van hun namen. In MatLab kunnen namen van variabelen alleen worden opgegeven in Latijnse letters, cijfers en het '_'-symbool. Bovendien moet het eerste teken in de naam overeenkomen met een letter van het Latijnse alfabet. Er moet ook worden opgemerkt dat de namen

arg = 1;
Arg = 2;
ARG = 3;

dit zijn drie verschillende namen, namelijk drie verschillende variabelen met respectievelijk waarden 1, 2 en 3. Dit voorbeeld laat zien dat MatLab hoofdlettergevoelig is in variabelenamen.

Bij het programmeren kunt u het beste betekenisvolle namen van variabelen opgeven, zodat u beter begrijpt welke gegevens ze vertegenwoordigen. Dit voorkomt verwarring bij het bouwen van grote programma's.

3.3. M-functies uitvoeren. Argumentlijsten. Soorten argumenten. Gegevenstypen

Een M-functie kan worden aangeroepen vanaf de opdrachtregel van het MATLAB-systeem of vanuit andere M-bestanden, waarbij u ervoor moet zorgen dat alle noodzakelijke attributen worden gespecificeerd: invoerargumenten tussen haakjes, uitvoerargumenten tussen vierkante haakjes.

Een naam toekennen. Wanneer een nieuwe naam verschijnt, controleert MATLAB:

  1. Is de nieuwe naam een ​​variabelenaam?
  2. Is deze naam de naam van een subfunctie, dat wil zeggen een functie die in hetzelfde M-bestand staat en wordt aangeroepen?
  3. Is dit de naam van een privéfunctie in de privémap. Deze map is alleen toegankelijk voor M-bestanden die zich een niveau hoger bevinden.
  4. Is dit de naam van een functie in het MATLAB-systeempad. In dit geval gebruikt het systeem het M-bestand dat als eerste in het toegangspad voorkomt.

In het geval van dubbele namen gebruikt MATLAB de voornaam volgens de bovenstaande hiërarchie met 4 niveaus. Opgemerkt moet worden dat het in MATLAB 5 mogelijk is om een ​​functie opnieuw te definiëren volgens de regels van objectgeoriënteerd programmeren.

Een functie aanroepen. Wanneer u een M-functie aanroept, vertaalt MATLAB de functie in pseudocode en laadt deze in het geheugen. Dit voorkomt opnieuw parseren. De pseudocode blijft in het geheugen totdat het clear-commando wordt gebruikt of de sessie wordt beëindigd.

De volgende wijzigingen aan het clear-commando zijn geldig:

Met deze opdracht wordt het M-bestand Average.m geparseerd en wordt de resulterende pseudocode opgeslagen in een bestand met de naam Average.p. Dit voorkomt herhaald parseren tijdens een nieuwe sessie. Omdat het parseren zo snel gaat, heeft het gebruik van de pcode-opdracht weinig invloed op de uitvoeringssnelheid.
Het gebruik van een P-code is in twee gevallen raadzaam:

  • wanneer u een groot aantal M-bestanden moet parseren die nodig zijn om grafische objecten weer te geven in toepassingen die verband houden met de ontwikkeling van grafische gebruikersinterfaces; in dit geval zorgt het gebruik van P-code voor een aanzienlijke versnelling;
  • wanneer de gebruiker de algoritmen wil verbergen die in het M-bestand zijn geïmplementeerd.

Regels voor het doorgeven van argumenten. Vanuit het gezichtspunt van de programmeur geeft het MATLAB-systeem een ​​argument door op basis van zijn waarde. In feite worden alleen de argumenten die veranderen tijdens de werking van deze functie als waarden doorgegeven. Als een functie de waarde van het argument niet verandert, maar deze alleen voor berekeningen gebruikt, wordt het argument doorgegeven door middel van verwijzing, waardoor het geheugengebruik kan worden geoptimaliseerd.

Functie werkruimten. Elke M-functie krijgt een extra geheugengebied toegewezen dat niet overlapt met de werkruimte van het MATLAB-systeem. Dit gebied wordt het werkgebied van de functie genoemd. Elke functie heeft zijn eigen werkruimte.

Wanneer u met MATLAB werkt, heeft u alleen toegang tot variabelen die zich in de systeemwerkruimte of in de functiewerkruimte bevinden.

Als een variabele globaal wordt gedeclareerd, kan deze worden beschouwd als behorend tot verschillende werkruimten. Het aantal argumenten controleren.

Met de functies nargin en nargout kunt u het aantal invoer- en uitvoerargumenten van de aangeroepen functie bepalen. Deze informatie kan later worden gebruikt in conditieverklaringen om de voortgang van berekeningen te wijzigen.

Voorbeeld:
functie c = testarg1(a,b)
als(nargin == 1)
c = a.^2;
elseif (nargin == 2)
c = + b;

einde

Laten we een complexer voorbeeld bekijken: het selecteren van een deel van een tekenreeks vóór het scheidingsteken, wat een spatie of een ander teken kan zijn. Wanneer een enkel invoerargument wordt gegeven, moet de functie het deel van de tekenreeks vóór het scheidingsteken selecteren, wat standaard een spatie is; en alle spaties aan het begin van de regel worden verwijderd. Wanneer u twee argumenten opgeeft, moet het tweede argument een scheidingsteken zijn.

Deze functie is verpakt als de M-functie strtok, die zich in de map strfun bevindt.

De functie moet minimaal één invoerargument hebben

Als er slechts één invoerargument is, wordt een spatie als scheidingsteken gebruikt.

Bepaal het begin van de geselecteerde subtekenreeks

Bepaal het einde van de geselecteerde subtekenreeks

Markeer de rest van de lijn

Merk op dat de volgorde van de argumenten in de uitvoerlijst belangrijk is. Als er bij het aanroepen van een M-functie geen uitvoerargument is opgegeven, wordt het eerste argument standaard uitgevoerd.

Om daaropvolgende argumenten te genereren en uit te voeren, is het noodzakelijk om een ​​geschikte aanroep naar de M-functie te organiseren.

Argumentlijsten.

Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray.
Elke cel kan elk type en elke hoeveelheid gegevens bevatten.

Voorbeeld

De functie testvar accepteert een willekeurig aantal vectoren met twee elementen als invoerargumenten en geeft de lijnen weer die ze verbinden.
functie testvar(varargin)
voor i = 1:lengte(varargin)
c = + b;

x(i) = varargin(i)(1);
y(i) = varargin(i)(2);
xmin = min(0, min(x));
ymin = min(0, min(y));

as()

Met de functies nargin en nargout kunt u het aantal invoer- en uitvoerargumenten van de aangeroepen functie bepalen. Deze informatie kan later worden gebruikt in conditieverklaringen om de voortgang van berekeningen te wijzigen.

plot(x,y)
De testvar-functie kan dus werken met invoerlijsten van verschillende lengtes.

testvar(, , , , , ) testvar([-1 0], , , )
Vorming van de invoerarray varargin.
Omdat de varargin-lijst de invoerargumenten in een celarray opslaat, is het noodzakelijk om celindexen te gebruiken om de gegevens op te halen. Een celindex bestaat uit twee componenten:

Met de functies nargin en nargout kunt u het aantal invoer- en uitvoerargumenten van de aangeroepen functie bepalen. Deze informatie kan later worden gebruikt in conditieverklaringen om de voortgang van berekeningen te wijzigen.

- index tussen accolades;
- index tussen haakjes.

y(i)= varargin(i)(2); Hier geeft de index tussen accolades (i) het adres aan van de i-de cel van de varargin-array, en geeft de index tussen haakjes (2) het tweede element in de cel aan.

Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray.
De volgende functie neemt als invoer een array met twee kolommen, waarbij de eerste kolom de set x-coördinaatwaarden is en de tweede de set y-coördinaatwaarden.

De functie splitst de array in afzonderlijke vectoren, die als invoer aan de testvar-functie kunnen worden doorgegeven.
functie = testvar2(arrayin)
voor i = 1:nargout
c = + b;

varargout(i) = arrayin(i, :);

De toewijzingsinstructie in een for-lus maakt gebruik van de toewijzingssyntaxis van celarrays. De linkerkant van de toewijzingsoperator gebruikt accolades om aan te geven dat de arrayreeksgegevens aan de cel worden toegewezen.

De volgende instructies kunnen worden gebruikt om de functie testvar2 aan te roepen:
een = ";

= testvar2(a)
p1 = 16
p2 = 2 7
p3 = 3 8
p4 = 4 9

p5 = 5 0 Celarrays gebruiken in argumentlijsten

Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray.
. De argumenten varargin en varargout moeten de laatste zijn in hun respectievelijke argumentenlijsten. Bij het aanroepen van een functie moeten de argumenten die voorafgaan aan varargout binnen de functie worden geëvalueerd.

De onderstaande functiekoppen tonen het correcte gebruik van de varargin- en varargout-lijsten:
functie = voorbeeld1(a,b,varargin)

functie = voorbeeld2(x1,y1,x2,y2,vlag)

Variabele typen. Lokale en globale variabelen

  • .
  • Het gebruik van variabelen in een M-bestand verschilt niet van het gebruik van variabelen op de opdrachtregel, namelijk:
  • variabelen vereisen geen aangifte; Voordat u een waarde aan een variabele toekent, moet u ervoor zorgen dat aan alle variabelen aan de rechterkant waarden zijn toegewezen;
  • elke toewijzingsoperatie creëert, indien nodig, een variabele of verandert de waarde van een bestaande variabele;

namen van variabelen beginnen met een letter gevolgd door een willekeurig aantal letters, cijfers en onderstrepingstekens; MATLAB maakt onderscheid tussen hoofdletters en kleine letters;

Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray..
De variabelenaam mag niet langer zijn dan 31 tekens.

Om precies te zijn: de naam kan langer zijn, maar MATLAB houdt alleen rekening met de eerste 31 tekens.

functie yp = lotka(t, y)
%LOTKA van de Lotke-Volterra-vergelijking voor het roofdier-prooimodel

wereldwijde ALPHA BETA
jp = ;

Voer vervolgens via de opdrachtregel de operatoren in:

wereldwijde ALPHA BETA
ALPHA = 0,01;
BÈTA = 0,02;
= ode23("lotka2",,);
plot(t,y)

Het globale commando declareert de variabelen ALPHA en BETA globaal en daarom beschikbaar in de functie lotka.m. Ze kunnen dus vanaf de opdrachtregel worden gewijzigd en er worden nieuwe oplossingen verkregen zonder het M-bestand lotka.m te bewerken.

Om met globale variabelen te werken, hebt u het volgende nodig:

  • declareer de variabele als globaal in elke M-functie die die variabele nodig heeft. Om een ​​werkruimtevariabele globaal te maken, moet u deze vanaf de opdrachtregel als globaal declareren;
  • gebruik in elke functie het globale commando vóór de eerste verschijning van de variabele; Het wordt aanbevolen om de globale opdracht aan het begin van het M-bestand op te geven.

Globale namen van variabelen zijn doorgaans langer en beschrijvender dan lokale namen van variabelen, en gebruiken vaak hoofdletters. Dit is optioneel, maar wordt aanbevolen om de leesbaarheid van de MATLAB-code te garanderen en de kans te verkleinen dat per ongeluk een globale variabele wordt overschreven.

Speciale variabelen. Sommige M-functies retourneren speciale variabelen die een belangrijke rol spelen bij het werken in de MATLAB-systeemomgeving:

ans Laatste resultaat; als de uitvoervariabele niet is opgegeven, gebruikt MATLAB de ans-variabele.
eps Drijvende-kommaprecisie; bepaald door de lengte van de mantisse en voor pc eps = 2.220446049250313e-016
echtmax Het maximale drijvende-kommagetal dat door een computer kan worden weergegeven; voor pc realmax = 1,797693134862316e+308.
realmin Het kleinste drijvende-kommagetal dat door een computer kan worden weergegeven; voor pc realmin = 2.225073858507202e-308.
pi Speciale variabele voor het getal p: pi=3,141592653589793e+000.
ik, j Speciale variabelen om de denkbeeldige eenheid weer te geven
inf Speciale variabele om het oneindigheidssymbool weer te geven?
NaN Een speciale variabele om een ​​ongedefinieerde waarde aan te duiden - het resultaat van bewerkingen zoals: 0/0, inf/inf.
computer Een speciale variabele die aangeeft welk type computer wordt gebruikt; voor pc - PCWIN.
flopt Een speciale variabele om het aantal drijvende-kommabewerkingen aan te geven.
versie Een speciale variabele om het nummer van de gebruikte MATLAB-systeemversie op te slaan.

De overeenkomstige M-functies die deze speciale variabelen genereren, bevinden zich in de elmat-directory en worden ondersteund door een online-help.

Gegevenstypen.

MATLAB definieert zes basisgegevenstypen, die elk een multidimensionale array zijn. De zes klassen zijn double, char, sparse, uint8, cell en struct. De tweedimensionale versies van deze arrays worden matrices genoemd, vandaar dat MATLAB de naam MATRIX LAB krijgt.

Het diagram van lidmaatschap van een bepaald MATLAB-systeemobject aan een van de klassen heeft de volgende vorm (Fig. 3.1):

Het is waarschijnlijk dat u meestal slechts met twee van deze gegevenstypen te maken zult hebben: een array van doubles en een karakterarray (char), of gewoon een string. Dit komt omdat alle berekeningen in MATLAB met dubbele precisie worden uitgevoerd en de meeste functies werken op arrays of strings met dubbele precisie.

Andere gegevenstypen zijn bedoeld voor speciale toepassingen zoals het werken met dunne matrices (sparse), beeldverwerking (uint8), het werken met grote arrays (cel en struct).

U kunt het variabeletype niet instellen op numeriek of array. Deze typen worden virtueel genoemd en dienen alleen voor het groeperen van variabelen die gemeenschappelijke kenmerken hebben.

Het type uint8 is ontworpen om gegevens efficiënt in het geheugen op te slaan. Op dit type gegevens kunnen alleen basisbewerkingen voor indexering en formaatwijziging worden toegepast, maar er kunnen geen wiskundige bewerkingen worden uitgevoerd. Om dit te doen, moeten dergelijke arrays worden geconverteerd naar het dubbele type.

Maak uw eigen typen en voeg methoden toe voor ingebouwde typen. De onderstaande tabel bevat het zevende gegevenstype: UserObject. Met de MATLAB-taal kunt u uw eigen gegevenstypen maken en ermee werken op een vergelijkbare manier als ingebouwde typen.

Voor ingebouwde gegevenstypen kunt u een methode op dezelfde manier overschrijven als voor een object. Als u bijvoorbeeld een sorteerbewerking voor een array van het type uint8 wilt instellen, moet u een methode (sort.m of sort.mex) maken en deze in een speciale map @uint8 plaatsen.

In de volgende tabel worden de gegevenstypen gedetailleerder beschreven.

Klas Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray. Beschrijving
Dubbele [ 1 2; 3 4]
5+6i
Numerieke array dubbele precisie (dit is het meest voorkomende type variabele in MATLAB
Char "Hallo" Karakterarray(elk teken is 16 bits lang), vaak een string genoemd.
Schaars Speye(5) Schaarse matrix dubbele precisie (alleen tweedimensionaal).
Er wordt een schaarse structuur gebruikt om matrices op te slaan met een klein aantal niet-nul elementen, waardoor slechts een klein deel van het geheugen kan worden gebruikt dat nodig is om de volledige matrix op te slaan. Schaarse matrices vereisen het gebruik van speciale methoden om problemen op te lossen. Cel (17 "hallo" oog (2)) Celreeks
. De elementen van deze array bevatten andere arrays. Met celarrays kunt u gerelateerde gegevens, mogelijk van verschillende grootte, combineren in één enkele structuur. Structuur A.dag = 12; A.kleur = "Rood"; A.mat = magie(3); Array van records
. Het bevat veldnamen. Velden zelf kunnen arrays bevatten. Net als celarrays combineren recordarrays gerelateerde gegevens en informatie erover. Uint8 Uint8(magie(3)) Array van 8-bit gehele getallen zonder teken
. Hiermee kunt u gehele getallen in het bereik van 0 tot 255 opslaan in 1/8 van het geheugen dat nodig is voor een array met dubbele precisie. Voor deze arrays zijn geen wiskundige bewerkingen gedefinieerd. GebruikersObject

inline("zonde(x)") Door de gebruiker gedefinieerd gegevenstype.

Met de functies varargin en varargout kunt u een willekeurig aantal invoer- en uitvoerargumenten doorgeven. Het MATLAB-systeem verpakt alle gespecificeerde invoer- en uitvoerargumenten in een celarray.
Beschrijving van het diagram
. De verbindingslijnen in het diagram (Fig. 3.1) bepalen of een bepaald datatype tot één of meerdere klassen behoort.
Een matrix van het type schaars heeft ook typen dubbel en numeriek.
Exploitanten

isa(S",dun")

isa(S",dubbel")

isa(S",numeriek")

retourwaarden 1 (waar), dat wil zeggen dat S een schaarse numerieke matrix met dubbele precisie is.

Klas Merk op dat het arraytype bovenaan het diagram staat. Dit betekent dat alle MATLAB-systeemgegevens arrays zijn.
Elk gegevenstype kan worden geassocieerd met zijn eigen functies en verwerkingsoperatoren, of met andere woorden, methoden. Onderliggende gegevenstypen, die zich onder het bovenliggende type in het diagram bevinden, worden ook ondersteund door de methoden van het bovenliggende type. Daarom wordt een array van het type double ondersteund door de methoden die worden gebruikt voor het type numeriek.
De tabel toont enkele van deze methoden: Methode
Array Bereken grootte, lengte, ndims, array union (), transponeren, subsindex, hervormen en permuteren van dimensies van een multidimensionale array.
Dubbele Rekenkundige en logische bewerkingen, wiskundige functies, functies van matrices.
Numeriek Zoeken (vinden), verwerken van complexe getallen (reëel, imag), vorming van vectoren, selectie van rijen, kolommen, array-subblokken, scalaire expansie.
Schaars Bewerkingen op dunne matrices.
Array met structuurrecords Toegang tot de inhoud van field.field (scheidingsteken voor lijstelementen is een komma).
. Het bevat veldnamen. Velden zelf kunnen arrays bevatten. Net als celarrays combineren recordarrays gerelateerde gegevens en informatie erover. Opslagbewerking (meestal gebruikt met PPP Image Processing Toolbox)
. Hiermee kunt u gehele getallen in het bereik van 0 tot 255 opslaan in 1/8 van het geheugen dat nodig is voor een array met dubbele precisie. Door gebruiker gedefinieerd

Lege arrays. Vroege versies van MATLAB maakten een enkele vorm van een lege array met de grootte 0x0 mogelijk, aangegeven met . MATLAB 5 ondersteunt arrays waarvan één, maar niet alle, afmetingen gelijk zijn aan nul, dat wil zeggen arrays met de afmetingen 1x0, 10x0x20 of gedefinieerd als leeg.

De vierkante haakjes blijven de 0x0-array aangeven. Lege arrays van andere afmetingen kunnen worden gemaakt met behulp van de functies nullen, enen, rand of oog.
Als u bijvoorbeeld een lege array met de grootte 0x5 wilt vormen, kunt u de toewijzingsoperator gebruiken

E = nullen (0,5).

Het belangrijkste doel van lege arrays is ervoor te zorgen dat elke bewerking die is gedefinieerd op een array (matrix) met de grootte m?n het juiste resultaat zal bepalen voor het geval dat m of n nul is. De grootte van de resultaatarray moet overeenkomen met de waarde van de functie die op nul is geëvalueerd.
De exploitant bijvoorbeeld
C=

vereist dat arrays A en B hetzelfde aantal rijen hebben. Dus als array A de grootte m x n heeft en B de grootte m x p, dan is C een array de grootte m x (n+p).
Het resultaat is correct als een van de parameters m, n of p nul is.
Veel bewerkingen in MATLAB creëren een rijvector of kolomvector. In dit geval kan het resultaat een lege rijvector zijn
r = nullen(1, 0),

of een lege kolomvector
C = nullen(0, 1).
MATLAB 5 ondersteunt MATLAB 4-systeemregels voor if- en while-instructies. Bijvoorbeeld een voorwaardelijke verklaring zoals

als A, S1, anders, S0, einde

voert instructie S0 uit als A een lege array is.
Sommige MATLAB-functies zoals sum, prod, min en max verminderen de dimensionaliteit van het resultaat: als het argument een array is, dan is het resultaat een vector; als het argument een vector is, dan is het resultaat scalair.
Voor deze functies worden, wanneer de invoerarray leeg is, de volgende resultaten verkregen:
som() = 0;
prod() = 1;

maximaal() = ; min() = .

De elementen in de M-taal die worden gebruikt om het rekenproces in MATLAB te besturen, zijn constanten, variabelen, functies, opdrachten en besturingsstructuren. Deze elementen, mogelijk in verschillende verbindingen met behulp van speciale connectoren, worden zowel op de opdrachtregel als in programma's gebruikt.

1.1. CONSTANTEN Bmin() = .

Een constante in MATLAB vertegenwoordigt informatie die tijdens de communicatiesessie niet verandert. Constanten kunnen door de gebruiker gedefinieerd (door de gebruiker gedefinieerd) of door het systeem gedefinieerd (door het systeem gedefinieerd) zijn. Gebruikersconstanten worden door de gebruiker gespecificeerd en worden één keer gebruikt: op het moment dat ze worden vermeld op de uitvoerbare opdrachtregel. Bijvoorbeeld 16, -38.654, -1.e-23, 1+2i, "Dit is een symboolconstante".

Systeemconstanten zijn permanent gedefinieerd in het systeem en hebben een speciale aanduiding waarmee ernaar wordt verwezen, bijvoorbeeld pi (=3.1416), eps (=2.2204e-016), realmin (=2.2251e-308), realmax (=1.7977). e+308 ), i, j (jºi).

1.2. VARIABELEN INmin() = .

Een variabele in MATLAB wordt gedefinieerd door identificatie, type, locatie in computergeheugen. Om een ​​variabele in MATLAB te definiëren, moet u de identificatie (naam) van de variabele selecteren (begint met een Latijnse letter, vervolgens Latijnse letters, cijfers, speciale tekens) en deze variabele gebruiken in een opdrachtregelinstructie die de waarde van de variabele instelt. variabele (eenvoudige toewijzing, verwijzing naar een bepaalde variabele-functie, enz.).

  1. Numerieke variabelen: gewone (reële) of complexe getallen, vectoren, matrices en multidimensionale arrays. Er worden 8 bytes toegewezen voor een reëel getal, 16 voor een complex getal. Gehele getallen en reële getallen verschillen niet.

A) reële getallen

A=2 A=2,0 B=-143,298 C=1,23e-2

B) complexe getallen

Q=1+3i r=-4,6-7,45i S=2+5j

real(Q) – substantie.deel van een complex getal,

imag(Q) – denkbeeldig deel van het complexe getal,

abs(Q) – absolute waarde van het complexe getal,

conj(Q) – geconjugeerd complex getal,

hoek(Q) – waarde van de fase (hoek) van het complexe getal in radialen.

C) vectoren

rij vectoren

a=1:3:10 b= c=linspatie(13,53,5)

kolom vectoren

aa=a’ bb= cc= linspace(13,53,5)’ dd=(15:45)’

voor vectoren met complexe componenten: als y een complexe vector is, dan is y.’ een kolomvector met dezelfde componenten, en y’ is een kolomvector met componenten die geconjugeerde complexe getallen zijn.

D) matrices: M(i,j) – element van de i – de rij en j – de kolom; M(k) is het k-de element van de matrix uitgebreid tot een kolom.

A= ---à 1 2

A(2,2) (=4) A(3) (=2) -à A = (1 3 2 4)

A(3,4)=10 ---à 1 2 0 0

maat(A) (=) =maat(A) (m=3, n=4)

A=A(:) -à uitbreiden tot een kolom – de matrix wordt een vector!

reshape(A,3,4) -à verandert de vector terug in een 3x4-matrix

A(,:)= -à verwijdert de eerste en laatste rij uit de matrix

A(:,)= à verwijdert alle kolommen behalve de laatste

Enkele speciale matrixen:

eye(m,n) - enen op de hoofddiagonaal, de rest zijn nullen (eye(m) - vierkante identiteitsmatrix mxm)

eenheden(m,n) – matrix van eenheden

nullen(m,n) – matrix van nullen

rand(m,n) – mxn-matrix gevuld met willekeurige getallen van 0 tot 1

C=round(1+100*rand(10,10)) – een 10x10 matrix gevuld met willekeurige gehele getallen van 1 tot 100.

Eenvoudige bewerkingen met matrices:

diag(A) – vector van elementen gelegen op de hoofddiagonaal van matrix A,

diag(diag(A)) – vierkante diagonale matrix met diagonale elementen, zoals A, en nullen.

triu(A) tril(A) – een matrix met bovenste of onderste delen van A, opgevuld met nullen.

  1. Karaktervariabelen

cvb=’Moskou is de hoofdstad van Rusland’

De tekenreeks is beperkt tot enkele apostrofs (op de toets met de Russische letter “e”) en is in kleur gemarkeerd.

Elk teken beslaat 2 bytes en wordt behandeld als een afzonderlijk element van de tekenrijvector. Dus als we de transponeerbewerking cvb’ specificeren, krijgen we een kolomvector met 31 elementen.

U kunt symbolische variabelen omzetten in getallen en omgekeerd.

Ze worden meestal gebruikt om resultaten, grafieken, labels en berichten weer te geven.

Controle van variabelen.

Methode 1 – in het werkruimtevenster

Methode 2 - het who-commando - geeft een lijst met variabelen die op een bepaald tijdstip zijn gedefinieerd.

Methode 3 - whos commando - geeft completere informatie over variabelen (Name Size Bytes Class)

Geheugen opschonen.

clear – volledig wissen van alle variabelen (of variabelen wissen)

clear var1,var2,… - individuele variabelen var1,var2,… wissen.

1.3. FUNCTIES INmin() = .

Functies in MATLAB zijn programma's die enkele algemene bewerkingen op gegevens uitvoeren. Om deze bewerkingen uit te voeren en de vereiste resultaten te verkrijgen, volstaat het om de functienaam op te geven en eventueel enkele initiële gegevens op te geven. Het concept van een functie wordt hier (zoals in elke andere taal) dus geassocieerd met 3 concepten: de naam van de functie, een set invoergegevens (varargin) en een set uitvoergegevens (varargout). Daarnaast worden de concepten van het aantal invoerparameters (nargin) en het aantal uitvoerparameters (nargout) gedefinieerd.

Functies in MATLAB zijn onderverdeeld in door de gebruiker gedefinieerd (gedefinieerd, ontwikkeld door de gebruiker) en systeem (gedefinieerd, gedefinieerd in het systeem, waarvoor geen programmering vereist is). We bespreken hoe u aangepaste functies kunt maken als we programmeeronderwerpen behandelen. Na het maken en debuggen verschilt een gebruikersfunctie niet van een systeemfunctie.

Systeemfuncties zijn onderverdeeld in ingebouwde en bibliotheekfuncties. Bibliotheekfuncties worden in het systeem opgeslagen in de vorm van M-taalprogramma's die zijn geschreven in bestanden met dezelfde naam als de functienaam en met de extensie *.m. De teksten van deze programma's kunnen door gebruikers worden bekeken (de directory \toolbox\matlab\ op de MATLAB-installatielocatie). U kunt bijvoorbeeld een m-bestand openen en bekijken met een functie voor het berekenen van de waarde van de decimale logaritme (\toolbox\matlab\elfun\log10.m). Wanneer ze worden uitgevoerd, worden de instructies van deze programma's eerst vertaald in instructies van het uitvoerende systeem van de computer (geïnterpreteerd) en vervolgens uitgevoerd. Ingebouwde functies worden in gecompileerde vorm in het systeem opgeslagen, vereisen geen vertaling en worden daardoor sneller uitgevoerd dan bibliotheekfuncties. In de systeemdirectory voor dergelijke functies worden bestanden opgeslagen die dezelfde naam hebben als de bibliotheekbestanden, maar die alleen commentaar bevatten over het gebruik van de functies. U kunt bijvoorbeeld een bestand openen dat betrekking heeft op de functie voor het berekenen van exponenten (\toolbox\matlab\elfun\exp.m).

1.4. UITDRUKKINGEN INmin() = .

Een expressie is een taalconstructie die taalelementen (constanten, variabelen, functies) omvat die met elkaar zijn verbonden door middel van verbindingstekens die de bewerkingen specificeren die worden uitgevoerd bij het berekenen van de waarde van de expressie. Er zijn numerieke (Nexpression), symbolische (CExpression) en logische (Lexpression) expressies, afhankelijk van het resultaat dat wordt verkregen na het uitvoeren van de bewerkingen die in de expressie zijn opgenomen.

Tot nu toe hebben we kennis gemaakt met vier verschillende soorten gegevens.
MATLAB-programma's: getallen met drijvende komma, strings, karakters
uitdrukkingen en functies.

Tijdens een lange MATLAB-programmasessie is het misschien niet eenvoudig om de namen en typen te onthouden van alle variabelen die u hebt gedefinieerd.
U kunt de opdracht invoeren wie om de algemene lijst met namen te bekijken en
typen of klassen van uw momenteel gedefinieerde variabelen. Maar daarvoor
hoe je dit doet, maak de toewijzingen a = pi, b = "pi", c = ("pi"), en dan
binnenkomen wie. Hieronder vindt u de uitvoer van de MATLAB-sessieresultaten,
weergegeven in dit hoofdstuk.

De variabelen A, X, Y, Z, a en d kregen numerieke waarden en
aangeduid als "dubbele array". Dit betekent dat het arrays van getallen zijn
dubbele precisie; in dit geval zijn de arrays a en d 1x1 groot, dat wil zeggen:
zijn scalairen. De kolom Bytes laat zien hoeveel computer
Elke variabele neemt geheugen in beslag. De ans-variabele is ook numeriek,
aangezien de laatste uitvoer een 1X2-vector was. De variabele b is een string,
aangeduid als char array (Character array), aangezien de variabelen c, u, v, w,
x, y zijn symbolisch. Ten slotte zien we ook twee verwerkingsarrays
functies en twee arrays van ingebouwde objecten die overeenkomen met de paren
anonieme functies en ingebouwde functies.
Het whos-commando toont informatie over alle opgegeven variabelen, maar dit
het commando toont niet de waarden van de variabelen. Om de waarde van een variabele te zien,
Voer eenvoudig de naam van de variabele in en druk op de Fnterl-toets.

MATLAB-programmaopdrachten vereisen specifieke klassen wanneer ze worden ingevoerd
gegevens, en het is erg belangrijk om te weten welk type gegevens een bepaalde opdracht vereist;
de helptekst van het commando bevat meestal de klasse of klassen die
verplicht bij binnenkomst. Ongeldige invoerklasse resulteert meestal in
foutmeldingen of onverwachte resultaten. Voer bijvoorbeeld het commando sin("pi") in om te zien wat het resultaat is van het toevoegen van een regel
een functie die geen strings accepteert.
Om alle door Matlab gedefinieerde variabelen te wissen, voert u clear of clear all in.
U kunt bijvoorbeeld ook clear x y invoeren om alleen te wissen
variabelen x en y.

Puc. 2.2. Desktop met werkruimtevenster

Meestal moet u variabelen wissen voordat u met nieuwe berekeningen begint.
Anders kunnen waarden uit eerdere berekeningen per ongeluk voorkomen
in nieuwe komen. Het venster Werkruimte biedt
een grafisch alternatief voor het whos-commando. U kunt dit venster activeren door op te klikken
door op het tabblad Werkruimte in het venster Huidige map te klikken, of door de werkruimteopdracht op de opdrachtregel in te voeren. In afb. 2.2 getoond
Een bureaublad met een opdrachtvenster en een werkruimte
(werkruimte) bevatten dezelfde informatie die wordt weergegeven
hoger.

Daarom kunnen we uit het bovenstaande concluderen dat je naar veel aanvullende informatie en alternatieven moet kijken!