Matlab gebruikt functies binnen functies. Integratie van MatLab en Excel

Hoorcollege 3. Programmeren in MATLAB.

1. M-bestanden. .............................................. ...................................................... ................................................. .........

1.1. Werken in de redactie M-bestanden. .............................................. ...................................................... .............. ...

1.2. Soorten M-bestanden.

Bestandsprogramma's. .............................................. ......................................................

1.3. Bestandsfuncties. .............................................. ...................................................... .......................................................................................................................................

1.3. Bestandsfuncties.......................................................................

1.3. met één invoerargument.....................................................................

met meerdere invoerargumenten.

met meerdere uitvoerargumenten....................................................................

1.4. Subfuncties. .............................................. ...................................................... ..............................................................................................................................................................................

2. Controleconstructies van de programmeertaal.

2.1. Lusoperatoren.

De for-lus. .............................................. ...................................................... ................................................. .........................................................................................................................

Terwijl lus. .............................................. ...................................................... ................................................. 2.2. Filiaalexploitanten.

Voorwaardelijke operator

als . .............................................. ...................................................... .............. .................

Schakelverklaring. .............................................. ...................................................... .....................................................................................................

2.3. Verklaringen onderbreken, voortzetten en retourneren. .............................................. ...... .................................... 2.4. Over rationele programmeertechnieken in MATLAB. Veel wiskundige systemen zijn gemaakt op basis van de veronderstelling dat de gebruiker zijn problemen zou oplossen zonder veel te programmeren. Vanaf het allereerste begin was het echter duidelijk dat een dergelijk pad nadelen had

Enerzijds bevat MATLAB een groot aantal ingebouwde operators en functies (bijna duizend), die met succes veel praktische problemen oplossen, waarvoor het voorheen nodig was om veel voor te bereiden complexe programma's. Dit zijn bijvoorbeeld functies voor het inverteren of transponeren van matrices, het berekenen van waarden van een afgeleide of integraal, enz., enz. Het aantal van dergelijke functies, rekening houdend met systeemuitbreidingspakketten, bereikt al vele duizenden en neemt voortdurend toe. Maar aan de andere kant is het MATLAB-systeem vanaf het moment van zijn creatie gecreëerd als een krachtige wiskundig georiënteerde programmeertaal voor technische berekeningen hoog niveau. En velen beschouwden dit terecht als een belangrijk voordeel van het systeem, wat wijst op de mogelijkheid van het gebruik ervan voor het oplossen van nieuwe, meest complexe wiskundige problemen.

Het MATLAB-systeem heeft een invoertaal die doet denken aan BASIC (met een mengsel van Fortran en Pascal). Het opnemen van programma's in het systeem is traditioneel en daarom bekend bij de meeste computergebruikers. Bovendien maakt het systeem het mogelijk om programma's te bewerken met elke voor de gebruiker bekende teksteditor. Het heeft ook een eigen editor met een debugger. De taal van het MATLAB-systeem op het gebied van het programmeren van wiskundige berekeningen is veel rijker dan welke dan ook universele taal programmering op hoog niveau. Het implementeert bijna alle bekende programmeertools, inclusief objectgeoriënteerde en visuele programmering. Dit geeft ervaren programmeurs eindeloze mogelijkheden voor zelfexpressie.

1. M-bestanden.

IN In eerdere lezingen hebben we naar vrij eenvoudige voorbeelden gekeken, waarvan de uitvoering het typen van verschillende opdrachten vereist opdrachtregel. Voor meer complexe taken het aantal opdrachten neemt toe en het werken op de opdrachtregel wordt onproductief. Met behulp van de opdrachtgeschiedenis,

variabelen opslaan werkomgeving of het bijhouden van een dagboek met behulp van een dagboek is onbeduidend

de arbeidsproductiviteit verhogen. Effectieve oplossing bestaat uit het ontwerpen van uw eigen algoritmen in de vorm van programma's (M-files), die vanuit de werkomgeving of vanuit de editor kunnen worden gestart. Met de M-file-editor die in MATLAB is ingebouwd, kunt u niet alleen de tekst van het programma typen en deze geheel of gedeeltelijk uitvoeren, maar ook het algoritme debuggen. Hieronder vindt u een gedetailleerde classificatie van M-bestanden.

1.1. Werken in de M-file editor.

Er wordt een speciale editor met meerdere vensters gebruikt om m-bestanden voor te bereiden, te bewerken en te debuggen. Het is ontworpen als typische toepassing Ramen. De editor kan worden opgeroepen met het bewerkingscommando vanaf de opdrachtregel of met het hoofdmenucommando Bestand | Nieuw |

M-bestand. Daarna kunt u in het editorvenster uw eigen bestand maken, de tools gebruiken voor het debuggen en starten ervan. Voordat een bestand wordt uitgevoerd, moet het naar schijf worden geschreven met behulp van Bestand | Opslaan zoals in het editormenu. Figuur 1 toont het editor/debugger-venster. Voorbereide bestandstekst (dit is het eenvoudigste en ons eerste programma in de taal MATLAB-programmering ) kan naar schijf worden geschreven. Om dit te doen, wordt de opdracht Opslaan als gebruikt, die gebruikmaakt van standaard raam Windows om een ​​bestand van te schrijven voornaam . Opgemerkt moet worden dat de M-bestandsnaam uniek moet zijn en dat de vereisten voor de bestandsnaam hetzelfde zijn als voor namen omgevingsvariabelen MATLAB. Nadat u het bestand naar schijf hebt geschreven, kunt u de opdracht Uitvoeren op de werkbalk of het Debug-menu uitvoeren, of eenvoudigweg klikken

., om het m-bestand uit te voeren. Op het eerste gezicht lijkt het misschien dat de editor/debugger slechts een extra schakel is in de keten “gebruiker - MATLAB”. De tekst van het bestand kan inderdaad in het systeemvenster worden ingevoerd en hetzelfde resultaat opleveren. In werkelijkheid doet de editor/debugger dit echter wel belangrijke rol . Hiermee kunt u een m-bestand (programma) maken zonder de talloze “schillen” die gepaard gaan met het werken opdrachtmodus

. De tekst van zo'n bestand wordt onderworpen aan een grondige syntaxiscontrole, waarbij veel gebruikersfouten worden geïdentificeerd en geëlimineerd. Op deze manier biedt de editor syntactische controle over het bestand. De editor beschikt ook over andere belangrijke tools voor foutopsporing: hiermee kunt u speciale markeringen in de tekst van het bestand plaatsen, de zogenaamde breekpunten. Wanneer ze worden bereikt, worden de berekeningen opgeschort en kan de gebruiker de tussenresultaten van berekeningen evalueren (bijvoorbeeld de waarden van variabelen), de correcte uitvoering van lussen controleren, enz. Ten slotte kunt u met de editor een bestand schrijven naar tekst formaat en zet uw werken voort bestandssysteem

MATLAB.

Om het werken met de editor/debugger te vergemakkelijken, zijn de programmaregels opeenvolgend genummerd. De editor heeft meerdere vensters. Het venster van elk programma is ontworpen als een tabblad. De debugger-editor maakt het gemakkelijk om variabelewaarden te bekijken. Om dit te doen, beweegt u gewoon de muiscursor over de naam van de variabele en houdt u deze ingedrukt. Er verschijnt een tooltip met de naam van de variabele en de waarde ervan. Erg handige gelegenheid M-bestandseditor is uitvoering van enkele commando's. Gebruik hiervoor de opdracht Selectie evalueren uit of hoofdmenuTekst , of gewoon functietoets, waarmee u de geselecteerde programmatekst kunt uitvoeren.

Rijst. 1. M-bestandseditorvenster.

1.2. Soorten M-bestanden. Bestandsprogramma's.

Er zijn twee soorten M-bestanden in MATLAB: Script M-Files, die een reeks opdrachten bevatten, en Function M-Files, die door de gebruiker gedefinieerde functies beschrijven.

Bestandsprogramma's zijn het eenvoudigste type M-bestand. Ze hebben geen invoer- of uitvoerargumenten en werken op variabelen die in de runtime bestaan ​​of kunnen nieuwe variabelen creëren. U hebt het mydemo-bestandsprogramma geschreven toen u de vorige sectie las. Alle variabelen die in het bestandsprogramma zijn gedeclareerd, worden na uitvoering ervan beschikbaar in de werkomgeving. Voer het mydemo-bestandsprogramma uit dat wordt weergegeven in de lijst in figuur 1. Ga naar het venster Werkruimte en zorg ervoor dat alle variabelen die in het M-bestand zijn ingevoerd, in de werkruimte verschijnen. Alle variabelen die tijdens de uitvoering van het M-bestand zijn gemaakt, blijven na voltooiing in de werkomgeving en kunnen worden gebruikt in andere bestandsprogramma's en in opdrachten die vanaf de opdrachtregel worden uitgevoerd.

Er zijn twee manieren om een ​​bestandsprogramma te starten.

1. Vanuit de M-file-editor zoals hierboven beschreven.

2. Vanaf de opdrachtregel of iets anders programmabestand, waarin de naam van het M-bestand (zonder extensie) als commando wordt gebruikt. Het gebruik van de tweede methode is veel handiger, vooral als het gemaakte bestandsprogramma in de toekomst herhaaldelijk zal worden gebruikt. Het daadwerkelijke M-bestand dat wordt gemaakt, wordt een commando dat MATLAB begrijpt.

Sluit alle grafische vensters en typ mydemo op de opdrachtregel. Er verschijnt een grafisch venster dat overeenkomt met de opdrachten van het programmabestand mydemo.m. Na het invoeren van de opdracht mydemo voert MATLAB de volgende acties uit.

1. Controleert of het ingevoerde commando een naam is een van de gedefinieerde variabelen

V werkomgeving. Als een variabele wordt ingevoerd, wordt de waarde ervan weergegeven.

2. Als de invoer geen variabele is, zoekt MATLAB naar de ingevoerde opdracht tussen de ingebouwde functies. Als de opdracht een ingebouwde functie blijkt te zijn, wordt deze uitgevoerd.

3. Als de invoer geen variabele of ingebouwde functie is, begint MATLAB met zoeken M-bestand met de naam van het team en de extensie m. De zoektocht begint met huidige map(Huidige map); als het M-bestand er niet in wordt gevonden, kijkt MATLAB naar de mappen die zijn opgegeven in het zoekpad (Pad). (Om de huidige map in te stellen, kunt u het gelijknamige selectievenster op de werkbalk of het cd-commando gebruiken. Het instellen van de zoekpaden doet u met

met hulp Commando's instellen Padopdracht van het menu Bestand of met behulp van de opdracht addpath).

Als geen van de bovenstaande acties tot succes heeft geleid, wordt er in het opdrachtvenster een melding weergegeven, bijvoorbeeld als er een fout is gemaakt.

De MATLAB-zoekreeks suggereert dat het erg belangrijk is om uw eigen bestandsprogramma de juiste naam te geven wanneer u het in een M-bestand opslaat. Allereerst mag haar naam niet hetzelfde zijn als bestaande functies in MATLAB. Met de exist-functie kunt u achterhalen of een naam al dan niet in gebruik is.

Ten tweede mag de bestandsnaam niet beginnen met een cijfer, "+" of "-" tekens, of tekens die door MATLAB kunnen worden geïnterpreteerd als een fout bij het invoeren van een expressie. Als u bijvoorbeeld een M-bestand de naam geeft met het programmabestand 5prog.m, dan start u het vanuit het editormenu of via u krijgt een foutmelding. Dit is niet verrassend, aangezien MATLAB van u verwacht dat u 5 + prog (of 5, prog) gebruikt om een ​​rekenkundige uitdrukking met de variabele prog te evalueren (of 5 toe te voegen als het eerste element aan de rijvector prog). Daarom zou de juiste naam prog5.m zijn (of op zijn minst p5rog.m), maar alleen beginnend met een letter.

Houd er rekening mee dat als u geselecteerde opdrachten uitvoert (alle opdrachten kunnen worden geselecteerd) van een M-bestand met de verkeerde naam , dan is er geen sprake van een fout. In feite is er sprake van een sequentiële uitvoering van opdrachten, niet anders dan het oproepen ervan vanaf de opdrachtregel, en niet de werking van een bestandsprogramma.

Een andere veel voorkomende fout is het opgeven van de naam van een bestandsprogramma, wat op het eerste gezicht onverklaarbare gevolgen heeft: het programma wordt slechts één keer gestart. Als u het opnieuw uitvoert, wordt het programma niet uitgevoerd. Laten we deze situatie eens bekijken met behulp van het voorbeeldbestandsprogramma uit Listing 5.1, dat u hebt opgeslagen in het bestand mydemo.m. Hernoem het bestand naar x.m en verwijder vervolgens alle werkruimtevariabelen uit het venster Werkruimtevariabelebrowser of vanaf de opdrachtregel:

>> alles wissen

Voer het bestandsprogramma bijvoorbeeld vanuit de editor uit door erop te klikken . Er verschijnt een grafisch venster met twee grafieken en niets voorspelt een probleem. Sluit nu het grafische venster en voer het programma opnieuw uit. Het grafische venster wordt niet langer gemaakt, maar de waarden van de arrayx worden weergegeven in het opdrachtvenster in overeenstemming met het eerste punt van het hierboven gegeven MATLAB-zoekalgoritme. Met deze omstandigheden moet rekening worden gehouden bij het kiezen van een bestandsprogrammanaam. Niet minder belangrijke vraag is geassocieerd met het derde punt van het MATLAB-zoekalgoritme: de huidige map en zoekpaden. In de regel geldt eigen M-bestanden worden opgeslagen in gebruikersmappen. Om ervoor te zorgen dat MATLAB ze kan vinden, moeten de paden zo worden ingesteld dat ze de locatie van de M-bestanden aangeven.

1.3. Bestandsfuncties.

De hierboven besproken bestandsprogramma's zijn een reeks MATLAB-opdrachten; ze hebben geen invoer- of uitvoerargumenten. Voor het oplossen van rekenproblemen en schrijven eigen applicaties In MATLAB moet u vaak bestandsfuncties programmeren die de noodzakelijke acties uitvoeren op invoerargumenten en het resultaat retourneren in uitvoerargumenten. Het aantal invoer- en uitvoerargumenten hangt af van het probleem dat wordt opgelost: er kan slechts één invoer- en één uitvoerargument zijn, meerdere van beide, of alleen invoerargumenten.

Het is mogelijk dat er geen invoer- of uitvoerargumenten zijn. Deze sectie bevat verschillende eenvoudige voorbeelden om u te helpen begrijpen hoe u met bestandsfuncties kunt werken. Bestandsfuncties en bestandsprogramma's worden gemaakt in de M-file editor.

Bestandsfuncties met één invoerargument.

Stel dat u de waarde van een functie vaak in berekeningen moet gebruiken:

−xx2

Het is zinvol om een ​​bestandsfunctie één keer te schrijven en deze vervolgens aan te roepen waar het nodig is om deze functie voor een bepaald argument te berekenen. Om dit te doen, moet u het openen in de M-file-editor nieuw bestand en typ de tekst:

functie f = mijnplezier(x)

Het woord functie op de eerste regel geeft dat aan dit bestand bevat een functiebestand. De eerste regel is functiekop, die de functienaam en lijsten met invoer- en uitvoerargumenten bevat. Invoerargumenten worden tussen haakjes achter de functienaam geschreven. In ons voorbeeld is er slechts één invoerargument: x. Het uitvoerargument f wordt links van het gelijkteken in de functiekop opgegeven. Bij het kiezen van een bestandsfunctienaam moet erop worden gelet dat conflicten met drukke namen in MATLAB. We hebben hierboven een soortgelijke vraag besproken: hoe sla je een programmabestand op in een bestand met unieke naam. U kunt dezelfde aanpak gebruiken als het aanroepen van de exist-functie om een ​​bestandsfunctie een naam te geven.

Na de header wordt de hoofdtekst van de bestandsfunctie geplaatst: een of meerdere operators (er kunnen er nogal wat zijn) die het algoritme implementeren voor het verkrijgen van de waarde van uitvoervariabelen uit invoervariabelen. In ons voorbeeld is het algoritme eenvoudig: gegeven x berekent het rekenkundige uitdrukking en het resultaat wordt geschreven naar f.

Nu moet u het bestand opslaan in uw werkmap of op een andere locatie die bij MATLAB bekend is. Wanneer u Opslaan of Opslaan als... selecteert in het menu Bestand, wordt standaard een bestandsnaam voorgesteld die overeenkomt met de naam van de myfun-functie. U moet het functiebestand met deze voorgestelde naam opslaan. Nu kan de gemaakte functie op dezelfde manier worden gebruikt als de ingebouwde sin, cos en andere, bijvoorbeeld vanaf de opdrachtregel:

>> y=mijnplezier(1.3) y =

Toen we de myfun-bestandsfunctie creëerden, hebben we voorkomen dat de waarde van f naar het opdrachtvenster wordt afgedrukt door de toewijzingsinstructie te beëindigen met een puntkomma. Als dit niet wordt gedaan, wordt dit weergegeven bij het aanroepen van y=myfun(1.3) . Als algemene regel kunt u het beste vermijden om de resultaten van tussentijdse berekeningen binnen een bestandsfunctie naar het opdrachtvenster af te drukken.

De bestandsfunctie uit het vorige voorbeeld heeft er één aanzienlijk nadeel. Als u probeert functiewaarden uit een array te berekenen, resulteert dit in een fout in plaats van de arraywaarden terug te geven zoals bij het gebruik van ingebouwde functies.

>>x=;

>> y=mijnplezier(x)

??? Fout bij gebruik van ==> ^ Matrix moet vierkant zijn.

Fout in ==> C:\MATLAB6p5\work\myfun.m

Op regel 2 ==> f = exp(-x)*sqrt((x^2 + 1)/(x^4 + 0,1));

Om deze fout te vermijden is het uiteraard noodzakelijk om elementgewijze bewerkingen te gebruiken. In het bijzonder voor juiste werking Onze functie moet de functietekst in de volgende vorm herschrijven:

functie f = mijnplezier(x)

f = exp(-x).*sqrt((x.^2 + 1)./(x.^4 + 0,1));

Het argument voor de myfun-functie kan nu een getal of een vector of matrix van waarden zijn, bijvoorbeeld:

>>x=;

>> y=mijnplezier(x)

De variabele y, die het resultaat van het aanroepen van de myfun-functie opslaat, wordt automatisch een vector van de vereiste grootte.

Laten we eens kijken naar een voorbeeld van het gebruik van functies. We plotten de functie myfun op een segment met behulp van een bestandsprogramma of vanaf de opdrachtregel:

>> x=0:0,5:4;

>> y=mijnplezier(x);

>>plot(x,y)

Voor het oplossen van computerproblemen met MATLAB moet u bestandsfuncties kunnen programmeren die geschikt zijn voor de uit te voeren taak (bijvoorbeeld rechterkant systemen differentiaalvergelijkingen of integrandfunctie).

We bekijken nu slechts één eenvoudig voorbeeld van hoe het gebruik van bestandsfuncties het gemakkelijker maakt om wiskundige functies te visualiseren. We hebben zojuist een grafiek getekend met behulp van plot. Merk op dat u myfun niet hoefde aan te roepen om de vector y te berekenen; u kunt er onmiddellijk een uitdrukking voor schrijven en vervolgens parx en y in plot specificeren. De bestandsfunctie waarover we beschikken myfun geeft ons toegang tot de speciale functie fplot, waarvoor we de naam van onze bestandsfunctie (in apostrofs) of een verwijzing ernaar (met de @-operator voor de functienaam) en de grenzen van het te plotten segment (in een vector van twee elementen)

>> fplot("mijn plezier", )

>> fplot(@myfun, )

U moet een algoritme voor de fplot-functie toevoegen dat automatisch de argumentstap selecteert en deze in secties verkleint snelle verandering de onderzochte functie, waardoor de gebruiker een goede weergave van de gegevens krijgt.

Bestandsfuncties met meerdere invoerargumenten.

Het schrijven van bestandsfuncties met meerdere invoerargumenten verschilt praktisch niet van het schrijven van één enkel argument. Alle invoerargumenten worden in een lijst geplaatst, gescheiden door komma's. Het volgende voorbeeld bevat een bestandsfunctie die de lengte van de straalvector van een driedimensionaal punt berekent

spatie x 2 + y 2 + z 2 .

functie r = straal3(x,y,z) r = sqrt(x.^2 + y.^2 + z.^2);

>> R = straal3(1, 1, 1)

Naast functies met meerdere argumenten kunt u met MATLAB ook functies maken die meerdere waarden retourneren, dat wil zeggen meerdere uitvoerargumenten hebben.

Bestandsfuncties met meerdere uitvoerargumenten.

Bestandsfuncties met meerdere uitvoerargumenten zijn handig bij het evalueren van functies die meerdere waarden retourneren (in de wiskunde vectorfuncties genoemd).

Uitvoerargumenten worden door komma's toegevoegd aan de lijst met uitvoerargumenten, en de lijst zelf staat tussen vierkante haakjes. Het volgende voorbeeld biedt een hms-bestandsfunctie om een ​​in seconden opgegeven tijd om te zetten in uren, minuten en seconden:

functie = hms(sec) uur = verdieping(sec/3600);

Bij het aanroepen van bestandsfuncties met meerdere uitvoerargumenten moet het resultaat naar een vector met de juiste lengte worden geschreven:

>> = hms(10000) H =

Als u uitvoerparameters niet expliciet opgeeft wanneer u deze functie gebruikt, is het resultaat van het aanroepen van de functie alleen het eerste uitvoerargument:

>> hms(10000) ans =

Als de lijst met uitvoerargumenten leeg is, d.w.z. de header ziet er als volgt uit: function myfun(a, b) of function = myfun(a, b) ,

dan zal de bestandsfunctie geen waarden retourneren. Dergelijke functies blijken soms ook nuttig te zijn. MATLAB-functies hebben er nog één- de mogelijkheid om informatie over hen te verkrijgen met behulp van de help-opdracht, bijvoorbeeld help fplot. U kunt deze eigenschap ook via commentaarregels aan uw eigen bestandsfuncties toewijzen. Alle commentaarregels na de koptekst en vóór de functietekst of lege regel worden met het help-commando naar het opdrachtvenster afgedrukt. Voor onze functie kun je bijvoorbeeld een hint aanmaken:

functie = hms(sec) %hms - converteer seconden naar uren, minuten en seconden

% De hms-functie is voor het omrekenen van seconden

% in uren, minuten en seconden.

% = hms(sec)

uur = verdieping(sec/3600);

minuut = verdieping((sec - uur*3600)/60); seconde = sec - uur*3600 - minuut*60;

1.4. Subfuncties.

Laten we een ander type functie bekijken: subfuncties. Het gebruik van subfuncties is gebaseerd op het scheiden van een deel van het algoritme in een onafhankelijke functie, waarvan de tekst zich in hetzelfde bestand bevindt als de hoofdfunctie. Laten we dit eens bekijken met een voorbeeld.

functie eenvoudig;

% Hoofdfunctie a = 2*pi;

fl = f(1,1, 2,1) f2 = f(3,1, 4,2)-a f3 = f(-2,8, 0,7)+a

functie z = f(x, y)% Subfunctie

z = x^3 - 2*y^3 - x*y + 9;

De eerste eenvoudige functie is belangrijkste functie in simple.m zijn het de instructies die worden uitgevoerd als de gebruiker bijvoorbeeld simple aanroept vanaf de opdrachtregel. Elke oproep naar subfunctie f in de hoofdfunctie leidt tot een overgang naar de operators die zich in de subfunctie bevinden en vervolgens naar de hoofdfunctie.

Een functiebestand kan een of meer subfuncties bevatten met eigen in- en uitvoerparameters, maar er kan slechts één hoofdfunctie zijn. De titel van een nieuwe subfunctie is ook een teken van het einde van de vorige. De hoofdfunctie wisselt alleen informatie uit met subfuncties via invoer- en uitvoerparameters. Variabelen gedefinieerd in subfuncties en in de hoofdfunctie zijn lokaal en zijn beschikbaar binnen het bereik van hun functie.

Een van mogelijke opties Door variabelen te gebruiken die gemeenschappelijk zijn voor alle M-bestandsfuncties, worden deze variabelen aan het begin van de hoofdfunctie en subfunctie als globaal gedeclareerd, waarbij globaal wordt gebruikt met een lijst met variabelenamen gescheiden door een spatie.

2. Controleconstructies van de programmeertaal.

De bestandsfuncties en bestandsprogramma's die je in de vorige twee hoofdstukken hebt gemaakt, zijn het meest eenvoudige voorbeelden programma's. Alle daarin opgenomen MATLAB-opdrachten worden uitgevoerd opeenvolgend. Veel ernstiger problemen vereisen programma's waarin acties cyclisch worden herhaald en afhankelijk van bepaalde omstandigheden verschillende delen van het programma worden uitgevoerd. Dit hoofdstuk beschrijft de besturingsconstructies van de programmeertaal MATLAB, die kunnen worden gebruikt bij het schrijven van zowel bestandsprogramma's als bestandsfuncties.

2.1. Lusoperatoren.

Soortgelijke en repetitieve acties worden uitgevoerd met behulp van operators voor lus en terwijl. De for-lus is ontworpen om een ​​bepaald aantal herhaalde acties uit te voeren, terwijl de while-lus is ontworpen voor acties waarvan het aantal niet vooraf bekend is, maar de voorwaarde voor het voortzetten van de lus wel bekend is.

De for-lus.

Het gebruik van for is als volgt:

voor tellen = start:stap:finale

MATLAB-opdrachten

Hier is count de lusvariabele, start is de initiële waarde, final is de uiteindelijke waarde, astep is de stap waarmee het aantal wordt verhoogd elke keer dat de lus wordt betreden. De lus eindigt zodra de waarde van count groter wordt dan final. Een lusvariabele kan niet alleen gehele waarden aannemen, maar ook reële waarden van elk teken. Hier is een voorbeeld van het gebruik van de for-lus. Stel dat u grafieken wilt weergeven van een familie van curven voor x , welke

gespecificeerd door de functie y (x,a)= e − ax sinx, afhankelijk van de parametera, voor parameterwaarden van -0,1 tot

0,1 in stappen van 0,02. Je kunt natuurlijk achtereenvolgens y(x, a) berekenen en de grafieken ervan voor verschillende waarden samenstellen, maar het is veel handiger om de for-lus te gebruiken. Tekst programmabestand:

figuur % creëert een grafisch venster

x = 0:pi/30:2*pi; % berekent de vector van argumentwaarden

% door parameterwaarden bladeren voor a = -0,1:0,02:0,1

% een vector van functiewaarden berekenen voor de huidige waarde...

parameter

y = exp(-a*x).*sin(x);

% extra houvast op functiegrafiek

plot(x, y) einde

Als resultaat van het uitvoeren van dit bestandsprogramma verschijnt een grafisch venster, weergegeven in Fig. 2, die de vereiste reeks curven bevat.

Rijst. 2. Familie van rondingen.

For-lussen kunnen in elkaar worden genest, maar de variabelen van de geneste lussen moeten verschillend zijn. Geneste lussen zijn handig voor het invullen van matrices. Een voorbeeld van het maken van een Hilbert-matrix:

a = nullen(n); voor ik = 1:n

voor j = 1:n

a(i, j) = 1/(i+j-1);

Ter afsluiting van deze sectie merken we nog een kenmerk van de for-lus op, dat, samen met de mogelijkheid om een ​​echte lusteller met een constante stap te specificeren, de for-lus behoorlijk universeel maakt. Een array met waarden kan worden gebruikt als lusvariabelewaarden:

MATLAB-opdrachten

Als A een rijvector is, neemt de telling elke keer dat deze de lus binnengaat, opeenvolgend de waarde van zijn elementen aan. In het geval van een tweedimensionale array A bevat count bij de i-de stap van de lus kolom A(:,i) . Als A een kolomvector is, wordt de lus natuurlijk slechts één keer uitgevoerd met een telwaarde van A .

Een for-lus is handig bij het uitvoeren van een specifiek eindig aantal acties. Er zijn algoritmen met een onbekend aantal herhalingen, die kunnen worden geïmplementeerd met behulp van een flexibelere while-lus.

Terwijl lus.

De while-lus wordt gebruikt om herhalingen van hetzelfde type acties te organiseren in het geval dat het aantal herhalingen vooraf onbekend is en wordt bepaald door de vervulling van een bepaalde voorwaarde. Laten we een voorbeeld bekijken van uitbreiding van de sin(x)-reeks:

x 2k + 1

S (x)= ∑ (− 1)

(2k+1) !

k = 0

Het is natuurlijk niet mogelijk om tot oneindig op te tellen, maar je kunt het bedrag met een bepaalde nauwkeurigheid optellen, bijvoorbeeld 10-10. Het is duidelijk dat het aantal termen van de reeks in in dit geval is onbekend, dus het gebruik van de for-operator is niet mogelijk. De oplossing is om een ​​while-lus te gebruiken, die wordt uitgevoerd zolang aan de lusvoorwaarde is voldaan:

while-lusherhalingsvoorwaarde

MATLAB-opdrachten

IN In dit voorbeeld is de voorwaarde voor het herhalen van de cyclus de modulus van de huidige term

x 2 k + 1 (2 k + 1) ! meer dan 10-10. De tekst van de mysin-bestandsfunctie die de som van een reeks berekent op basis van

herhalingsrelatie:

k − 1

2k (2k + 1)

functie s = mysin(x)

% Berekening van de sinus door serie-uitbreiding

% Gebruik: y = mysin(x),-pi< х < pi

% berekening van de eerste term van de som voor k = O k = 0;

% berekening van hulpvariabelen

terwijl abs(u) > 1.0e-10 k = k + 1;

u = -u* x2/(2*k)/(2*k + 1); s = s + u;

M-bestanden komen vaak voor tekstbestanden, die zijn gemaakt met een teksteditor. Voor operationele omgeving persoonlijke computer MATLAB ondersteunt een speciale ingebouwde editor/debugger, hoewel elke andere kan worden gebruikt teksteditor met ASCII-codes.

Er zijn twee manieren om de editor te openen:

  • Selecteer in het menu Bestand de optie Nieuw en vervolgens M-File.
  • gebruik het bewerkingscommando.

Voorbeeld

Opdracht bewerken poof start de editor en opent het poof.m-bestand. Als de bestandsnaam wordt weggelaten, wordt de editor gestart en wordt het bestand zonder naam geopend.
Nu kunt u bijvoorbeeld de bovenstaande feitfunctie schrijven, tekstregels invoeren en deze opslaan in een bestand met de naam fact.m in de huidige map.
Zodra een dergelijk bestand is aangemaakt, kunt u de volgende opdrachten uitvoeren:

  • Geef de bestandsnamen van de huidige map weer:
    Wat
  • Geef de tekst van het M-bestand fact.m weer:
    soort feit
  • Roep de feitfunctie aan met gegeven parameters:
    feit (5)
    ans= 120

M-scenario's

Scripts zijn het meest eenvoudig soort M-bestand - ze hebben geen invoer- of uitvoerargumenten. Ze worden gebruikt om berekeningen die herhaaldelijk worden uitgevoerd te automatiseren. Scripts werken op gegevens uit de werkruimte en kunnen nieuwe gegevens genereren voor latere verwerking in hetzelfde bestand. De gegevens die in het script worden gebruikt, worden na voltooiing van het script in de werkruimte opgeslagen en kunnen voor verdere berekeningen worden gebruikt.

Voorbeeld
De volgende uitspraken berekenen de straalvector rho voor verschillende trigonometrische functies van hoek theta en plotten een reeks grafieken in poolcoördinaten.

Maak een M-bestand petals.m met behulp van de bovenstaande instructies. Dit bestand is een script. Als u de opdracht petals.m op de MATLAB-opdrachtregel invoert, worden de instructies in dit script uitgevoerd.

Nadat het script de eerste grafiek heeft weergegeven, drukt u op Return om naar de volgende grafiek te gaan. Het script heeft geen invoer- of uitvoerargumenten; Het petals.m-programma maakt zelf variabelen die worden opgeslagen in de MATLAB-werkruimte. Wanneer de uitvoering is voltooid, blijven de variabelen (i, theta en rho) in de werkruimte. Gebruik het whos-commando om deze lijst te bekijken.

M-functies

M-functies zijn M-bestanden die invoer- en uitvoerargumenten accepteren. Ze werken met variabelen binnen hun eigen werkruimte, verschillend van de werkruimte van het MATLAB-systeem.

Voorbeeld

De gemiddelde functie is voldoende eenvoudig M-bestand die het gemiddelde van de vectorelementen berekent:
functie y = gemiddelde(x)
% GEMIDDELDE Gemiddelde waarde van de vectorelementen.
% GEMIDDELDE(X), waarbij X een vector is. Berekent het gemiddelde van de elementen van een vector.
% Als het invoerargument geen vector is, wordt er een fout gegenereerd.
= maat(x);
als (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error('Invoerarray moet een vector zijn')
einde
y = som(x)/lengte(x); % De werkelijke berekening

Probeer deze opdrachten in een M-bestand met de naam Average.m in te voeren. De gemiddelde functie accepteert een enkel invoer- en een enkel uitvoerargument. Om de gemiddelde functie aan te roepen, moet u de volgende uitspraken invoeren:

z = 1:99;
gemiddelde(z)
ans = 50

Structuur van de M-functie. De M-functie bestaat uit:

  • functiedefinitielijnen;
  • eerste regel commentaar;
  • de opmerking zelf;
  • functieorganen;
  • regelcommentaar;

Functiedefinitietekenreeks. De functiedefinitieregel vertelt MATLAB dat het bestand een M-functie is en specificeert ook de lijst met invoerargumenten.

Voorbeeld
De definitieregel voor de gemiddelde functie ziet er als volgt uit:
functie y = gemiddelde(x)
Hier:

  1. functie - trefwoord, het definiëren van de M-functie;
  2. y - uitvoerargument;
  3. gemiddelde - functienaam;
  4. x is het invoerargument.

Elke functie in MATLAB bevat een functiedefinitieregel die er ongeveer als volgt uitziet.

Als een functie meer dan één uitvoerargument heeft, wordt de lijst met uitvoerargumenten erin geplaatst vierkante haakjes. Invoerargumenten, indien aanwezig, worden erin geplaatst haakjes. Komma's worden gebruikt om argumenten in de invoer- en uitvoerlijsten van elkaar te scheiden.

Voorbeeld

functie = bol(theta, phi, rho)

De namen van de invoervariabelen kunnen, maar hoeven niet, overeen te komen met de namen die zijn opgegeven in de functiedefinitieregel.

Eerste regel commentaar. Voor de gemiddelde functie ziet de eerste regel van het commentaar er als volgt uit:

% GEMIDDELDE Gemiddelde waarde van vectorelementen

Dit is de eerste regel tekst die verschijnt wanneer de gebruiker help typt.<имя_функции>. Bovendien wordt de eerste regel van het commentaar op het scherm weergegeven met behulp van de zoekopdracht zoeken. Omdat deze regel belangrijke informatie over het M-bestand bevat, moet deze zorgvuldig worden opgesteld.

Opmerking. Voor M-bestanden kunt u een online hint maken door tekst in te voeren op een of meer commentaarregels.

Voorbeeld

Laten we een paar regels commentaar maken

% De functie Average(x) berekent het gemiddelde van de elementen van een vector x.
% Als het invoerargument geen vector is, wordt er een fout gegenereerd.

Wanneer u vervolgens de helppromptopdracht invoert<имя_функции>, geeft MATLAB commentaarregels weer die tussen de functiedefinitieregel en de eerste lege regel of het begin van het programma zijn geplaatst. hulp commando<имя_функции>negeert opmerkingen die buiten dit gebied zijn geplaatst.

Voorbeeld

zonde helpen
ZONDE Sinus.
SIN(X) is de sinus van de elementen van X
SIN(X) berekent de sinusfunctie van de elementen van array X.

MATLAB geeft de regels van het Contents.m-bestand weer met behulp van de help-opdracht<имя_каталога>.

Als de map het Contents.m-bestand niet bevat, gebruik dan de help-opdracht<имя_каталога>De eerste regel van het commentaar voor elk M-bestand in de opgegeven directory wordt afgedrukt.

Functie lichaam. De body van de functie bevat MATLAB-code die de berekeningen uitvoert en waarden toewijst aan de uitvoerargumenten.

Voorbeeld

De hoofdtekst van de gemiddelde functie omvat een aantal eenvoudige programmeeroperatoren:

Zoals eerder vermeld, worden opmerkingen gemarkeerd met een (%). De commentaarregel kan overal in het M-bestand worden geplaatst, ook aan het einde van de regel.

Voorbeeld

% Vind de som van alle elementen van vector x
y = som(x) % De somfunctie is gebruikt
.

Naast commentaarregels kunt u ook lege regels in de tekst van het M-bestand opnemen. Dat moeten we echter onthouden lege tekenreeks kan dienen als een indicator voor het einde van de hint.

M Functienamen. In MATLAB zijn namen van M-functies onderworpen aan dezelfde beperkingen als namen van variabelen: hun lengte 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. M-functienamen moeten beginnen met een letter; de overige tekens kunnen elke combinatie van letters, cijfers en onderstrepingstekens zijn.

De naam van het bestand dat de M-functie bevat, bestaat uit de functienaam en de extensie “.m”.

Voorbeeld

gemiddelde.m
Als de bestandsnaam en de functienaam in de functiedefinitieregel verschillend zijn, wordt de bestandsnaam gebruikt, en interne naam genegeerd. Hoewel de functienaam die is gedefinieerd in de functiedefinitieregel mogelijk niet dezelfde is als de bestandsnaam, wordt sterk aanbevolen dezelfde namen te gebruiken.

Dualiteit van functies en commando's.
MATLAB-systeemopdrachten zijn operators van de vorm:
laden

hulp
Veel instructies kunnen worden gewijzigd door operanden toe te voegen:
laad 17 augustus.dat
magie helpen

soort rang Alternatieve methode

modifiers specificeren - deze definiëren als stringargumenten voor de functie:
load("17 augustus.dat")
hulp("magie")

type("rang")

Dit is de dualiteit van de concepten van commando en functie in het MATLAB-systeem. Elk commando zoals

opdrachtargument

kan in functievorm geschreven worden

commando("argument"). Voordeel functionele beschrijving

verschijnt wanneer de argumentreeks in delen wordt gevormd. Het volgende voorbeeld laat zien hoe de reeks bestanden August1.dat, August2.dat, etc. kan worden verwerkt.
Hierbij wordt de functie int2str gebruikt, die een geheel getal omzet in een tekenreeks, die helpt bij het vormen van een reeks bestandsnamen.
voor d = 1:31
s = ["augustus" int2str(d) ".dat"]
load(s) %Laad een bestand met de naam August"d".dat

% Bestandsverwerkingsinstructies
einde

In een MATLAB-programma gebruikt u zowel ingebouwde functies als

Matlab-functies die door u zijn gemaakt.
Ingebouwde functies
meer gespecialiseerd wiskundige functies, zoals gamma, erf en besselj. Het MATLAB-programma heeft ook enkele ingebouwde constanten,
inclusief pi (getal n), i ( complex getal i = wortel(-1)) en Inf (°° - oneindig). Hieronder staan ​​enkele voorbeelden:

De logfunctie is de natuurlijke logaritme en wordt in veel teksten In genoemd.

ans =
0.8660

Door de gebruiker gedefinieerde functies

In deze sectie testen we twee manieren om uw instellingen in te stellen eigenfuncties V
MATLAB-programma. De eerste methode maakt gebruik van de inline-opdracht en de tweede
gebruikt de @-operator om een ​​zogenaamde "anonieme functie" te creëren.
De tweede methode is nieuw in MATLAB 7 en is momenteel
methode heeft de voorkeur. Af en toe zullen we het team vermelden
inline omwille van de gebruikers meer eerdere versies programma's. Maar wij
sterk aanbevolen voor MATLAB 7-gebruikers en gebruikers van eerder
versies, wanneer ze het programma updaten, gebruik dan de @ operator as
de gebruikelijke methode voor het specificeren van functies. Functies kunnen ook worden opgegeven in
aparte bestanden, die M-bestanden worden genoemd (zie hoofdstuk 3).
Dit voorbeeld laat zien hoe u de functie f(x) = x2 definieert met behulp van
deze ploegen.

f=
@(x)x^2

Je kunt het op een andere manier doen:

f1 = inline("x^2","x")

f1 =
Inline-functie:
f1(x) = x^2

Zodra een functie is opgegeven, ongeacht welke methode, kunt u deze evalueren, bijvoorbeeld:

Zoals we eerder opmerkten, de meeste functies MATLAB-programma's kan
werken met zowel vectoren als scalairen. Om er zeker van te zijn dat het gegeven
je functie kan met vectoren werken, punten eerder invoegen
wiskundige operatoren.* ./ en .^ Om een ​​gevectoriseerde versie van de functie f(x) = x 2 te krijgen, voert u de regel in

of touwtje

f1 = inline("x.^2", "x")

Nu kunnen we elke functie voor een vector evalueren, bijvoorbeeld:

ans =
1 4 9 16 25

Gebruiken grafische mogelijkheden MATLAB-programma, je kunt tekenen
grafieken van functies f en f1. Dit kan op verschillende manieren worden gedaan, namelijk
We zullen dit later in deze zelfstudie bespreken in het gedeelte Grafische afbeeldingen. Aan het einde hiervan
Houd er rekening mee dat functies ook kunnen worden opgegeven met twee of meer
variabelen. Bijvoorbeeld het oplossen van een van deze functies

g = @(x, y) x^2 + y^2; g(1, 2);
g1 = inline("x^2 + y^2", "x", "y"); g1 (1, 2)

geeft het antwoord 5. Als u in plaats daarvan de functie als volgt definieert

g = @(x, y) x.^2 + y.^2;

dan kun je de vectoren berekenen; doe dus het volgende
uitdrukkingen

G (, )

geeft de functiewaarden op de punten (1, 3) en (2, 4).

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

2. Syntaxis voor het definiëren en aanroepen van M-functies .

De tekst van de M-functie moet beginnen met koptekst, gevolgd door functie lichaam.

De header definieert de "interface" van de functie (de manier om ermee te communiceren) en is als volgt opgebouwd:

function [ RetVal1, RetVal2, ] = FunctieNaam(par1, par2,)

Hier wordt een functie gedeclareerd (met behulp van het onveranderlijke trefwoord "functie") met de naam FunctionName, die invoerparameters par1, par2 gebruikt en uitvoerwaarden (retour) RetVal1, RetVal2 produceert (berekent).…

Met andere woorden, dat zeggen ze functie argumenten zijn de variabelen par1, par2,.., en functie waarden (ze moeten worden berekend) zijn de variabelen RetVal1, RetVal2,.

De functienaam die in de header is opgegeven (in het gegeven voorbeeld - FunctionName) moet dienen als de naam van het bestand waarin de functietekst zal worden geschreven. Voor dit voorbeeld dit wordt het bestand FunctionName.m (de naamextensie mag nog steeds uit slechts één letter m bestaan).

Mismatch tussen de functienaam en de bestandsnaam is niet toegestaan!

De hoofdtekst van de functie bestaat uit opdrachten die de retourwaarden berekenen. De functietekst volgt de functiekop.

Het functiehoofd en het functielichaam vormen samen de functiedefinitie.

Zowel invoerparameters als retourwaarden kunnen zich in algemene arrays (in een bepaald geval - scalairen) van verschillende dimensies en groottes bevinden. Bijvoorbeeld de functie MatrProc1

functie [ A, B ] = MatrProc1(X1, X2, x)

A = X1.* X2 * x;

B = X1.* X2 + x; is ontworpen om twee arrays van identieke (maar willekeurige) grootte en één scalair te 'ontvangen'. Deze arrays in de hoofdtekst van de functie worden eerst element voor element vermenigvuldigd, waarna het resultaat van een dergelijke vermenigvuldiging ook met een scalair wordt vermenigvuldigd. Hiermee wordt de eerste van de uitvoerarrays gemaakt.

Dezelfde maten invoerarrays X1 en X2 garanderen de haalbaarheid van hun elementgewijze vermenigvuldiging. De tweede uitvoerarray (genaamd B) verschilt van de eerste doordat deze wordt verkregen door optelling met een scalair (in plaats van vermenigvuldiging). Telefoongesprek door ons gemaakt functies , met de waarden waarvan berekeningen zullen worden uitgevoerd. Werkelijke parameters kunnen worden gespecificeerd door middel van getallen (arrays van getallen), namen van variabelen die al specifieke waarden hebben, en expressies.

Als de feitelijke parameter wordt gegeven door de naam van een variabele, dan worden de feitelijke berekeningen uitgevoerd op een kopie van die variabele (in plaats van op zichzelf). Het heet overdracht parameters op waarde .

Hieronder ziet u een aanroep vanuit het MATLAB-opdrachtvenster naar de MatrProc1-functie die we eerder voor het voorbeeld hebben gemaakt.

Hier komen de namen van de feitelijke invoerparameters (W1 en W2) en de variabelen waarin de berekeningsresultaten zijn geschreven (Res1 en Res2) niet overeen met de namen van vergelijkbare variabelen in de definitie van de MatrProc1-functie. Uiteraard is toeval niet vereist, vooral niet sinds de derde invoer werkelijke parameter helemaal geen naam! Om dit mogelijke verschil te benadrukken worden de namen van de invoerparameters en uitvoerwaarden in een functiedefinitie formeel genoemd.

In het beschouwde voorbeeld van het aanroepen van de MatrProc1-functie vanuit twee invoer vierkante matrices 2 x 2 resulteert in twee uitvoermatrices Res1 en Res2 van exact dezelfde grootte:

Res1 =
9 6
6 6

Res2 =
6 5
5 5

Door de functie aan te roepen

MatrProc1 = MatrProc1([ 1 2 3; 4 5 6 ], [ 7 7 7; 2 2 2 ], 1);

met twee invoerarrays van grootte 2x3 krijgen we twee uitvoermatrices van grootte 2x3. Dat wil zeggen dat dezelfde MatrProc1-functie invoerparameters kan verwerken verschillende maten en afmetingen! U kunt deze functie toepassen op scalairen in plaats van op arrays (dit zijn nog steeds 1x1-arrays).

Laten we nu eens kijken naar de vraag of deze functie kan worden gebruikt als onderdeel van expressies op dezelfde manier als wordt gedaan met functies die één enkele waarde retourneren? Het blijkt dat dit mogelijk is, en de eerste waarde die door de functie wordt geretourneerd, wordt gebruikt als de functiewaarde die voor verdere berekeningen wordt gebruikt. Het volgende MATLAB-venster illustreert dit punt:

Wanneer de functie MatrProc1 wordt aangeroepen met parameters 1,2,1, retourneert hij twee waarden: 2 en 3. Voor gebruik als onderdeel van een expressie wordt de eerste ervan gebruikt.

Omdat u elke functie kunt aanroepen door een willekeurige expressie in het MATLAB-opdrachtvenster te schrijven, kunt u altijd een fout maken die verband houdt met het niet overeenkomen van de typen feitelijke en formele parameters.

MATLAB voert geen controles uit op dit onderwerp, maar geeft eenvoudigweg de controle door aan de functie. Hierdoor kunnen er foutieve situaties ontstaan.

Er zijn twee manieren om de editor te openen:

  • Selecteer in het menu Bestand de optie Nieuw en vervolgens M-File.
  • gebruik het bewerkingscommando.

Voorbeeld

Om (indien mogelijk) het optreden van dergelijke foutieve situaties te voorkomen, wordt in de tekst van de M-functies voorgesteld om de invoerparameters te controleren.
Nu kunt u bijvoorbeeld de bovenstaande feitfunctie schrijven, tekstregels invoeren en deze opslaan in een bestand met de naam fact.m in de huidige map.
Zodra een dergelijk bestand is aangemaakt, kunt u de volgende opdrachten uitvoeren:

  • Geef de bestandsnamen van de huidige map weer:
    Wat
  • Geef de tekst van het M-bestand fact.m weer:
    soort feit
  • In de MatrProc1-functie is het bijvoorbeeld gemakkelijk om de situatie te identificeren waarin de grootte van de eerste en tweede invoerparameters verschillend zijn. Het schrijven van dergelijke code vereist controleconstructies die we nog niet hebben onderzocht. Het is tijd om ze te gaan bestuderen!
    feit (5)
    ans= 120

M-scenario's

M-bestanden zijn gewone tekstbestanden die zijn gemaakt met een teksteditor. Voor de besturingsomgeving van personal computers ondersteunt MATLAB een speciale ingebouwde editor/debugger, hoewel elke andere ASCII-teksteditor kan worden gebruikt.

Voorbeeld
De volgende uitspraken berekenen de straalvector rho voor verschillende trigonometrische functies van hoek theta en plotten een reeks grafieken in poolcoördinaten.

Maak een M-bestand petals.m met behulp van de bovenstaande instructies. Dit bestand is een script. Als u de opdracht petals.m op de MATLAB-opdrachtregel invoert, worden de instructies in dit script uitgevoerd.

Nadat het script de eerste grafiek heeft weergegeven, drukt u op Return om naar de volgende grafiek te gaan. Het script heeft geen invoer- of uitvoerargumenten; Het petals.m-programma maakt zelf variabelen die worden opgeslagen in de MATLAB-werkruimte. Wanneer de uitvoering is voltooid, blijven de variabelen (i, theta en rho) in de werkruimte. Gebruik het whos-commando om deze lijst te bekijken.

M-functies

M-functies zijn M-bestanden die invoer- en uitvoerargumenten accepteren. Ze werken met variabelen binnen hun eigen werkruimte, verschillend van de werkruimte van het MATLAB-systeem.

Voorbeeld

Het commando poof bewerken start de editor en opent het bestand poof.m. Als de bestandsnaam wordt weggelaten, wordt de editor gestart en wordt het bestand zonder naam geopend.
functie y = gemiddelde(x)
% GEMIDDELDE Gemiddelde waarde van de vectorelementen.
% GEMIDDELDE(X), waarbij X een vector is. Berekent het gemiddelde van de elementen van een vector.
% Als het invoerargument geen vector is, wordt er een fout gegenereerd.
= maat(x);
als (~((m == 1) | (n == 1)) | (m == 1 & n == 1))
error('Invoerarray moet een vector zijn')
einde
y = som(x)/lengte(x); % De werkelijke berekening

Probeer deze opdrachten in een M-bestand met de naam Average.m in te voeren. De gemiddelde functie accepteert een enkel invoer- en een enkel uitvoerargument. Om de gemiddelde functie aan te roepen, moet u de volgende uitspraken invoeren:

z = 1:99;
gemiddelde(z)
ans = 50

Structuur van de M-functie. De M-functie bestaat uit:

  • functiedefinitielijnen;
  • eerste regel commentaar;
  • de opmerking zelf;
  • functieorganen;
  • regelcommentaar;

Functiedefinitietekenreeks. De functiedefinitieregel vertelt MATLAB dat het bestand een M-functie is en specificeert ook de lijst met invoerargumenten.

Voorbeeld
De definitieregel voor de gemiddelde functie ziet er als volgt uit:
functie y = gemiddelde(x)
Hier:

  1. Roep de feitfunctie aan met de gegeven parameters:
  2. y - uitvoerargument;
  3. gemiddelde - functienaam;
  4. x is het invoerargument.

Elke functie in MATLAB bevat een functiedefinitieregel die er ongeveer als volgt uitziet.

Scripts zijn het eenvoudigste type M-bestand: ze hebben geen invoer- of uitvoerargumenten. Ze worden gebruikt om berekeningen die herhaaldelijk worden uitgevoerd te automatiseren. Scripts werken op gegevens uit de werkruimte en kunnen nieuwe gegevens genereren voor latere verwerking in hetzelfde bestand. De gegevens die in het script worden gebruikt, worden na voltooiing van het script in de werkruimte opgeslagen en kunnen voor verdere berekeningen worden gebruikt.

Voorbeeld

functie = bol(theta, phi, rho)

De namen van de invoervariabelen kunnen, maar hoeven niet, overeen te komen met de namen die zijn opgegeven in de functiedefinitieregel.

Eerste regel commentaar. Voor de gemiddelde functie ziet de eerste regel van het commentaar er als volgt uit:

% GEMIDDELDE Gemiddelde waarde van vectorelementen

Dit is de eerste regel tekst die verschijnt wanneer de gebruiker help typt.<имя_функции>. Bovendien wordt de eerste regel van het commentaar op het scherm weergegeven met behulp van de zoekopdracht zoeken. Omdat deze regel belangrijke informatie over het M-bestand bevat, moet deze zorgvuldig worden opgesteld.

Opmerking. Voor M-bestanden kunt u een online hint maken door tekst in te voeren op een of meer commentaarregels.

Voorbeeld

Laten we een paar regels commentaar maken

% De functie Average(x) berekent het gemiddelde van de elementen van een vector x.
% Als het invoerargument geen vector is, wordt er een fout gegenereerd.

Wanneer u vervolgens de helppromptopdracht invoert<имя_функции>, geeft MATLAB commentaarregels weer die tussen de functiedefinitieregel en de eerste lege regel of het begin van het programma zijn geplaatst. hulp commando<имя_функции>negeert opmerkingen die buiten dit gebied zijn geplaatst.

Voorbeeld

zonde helpen
ZONDE Sinus.
SIN(X) is de sinus van de elementen van X
SIN(X) berekent de sinusfunctie van de elementen van array X.

MATLAB geeft de regels van het Contents.m-bestand weer met behulp van de help-opdracht<имя_каталога>.

Als de map het Contents.m-bestand niet bevat, gebruik dan de help-opdracht<имя_каталога>De eerste regel van het commentaar voor elk M-bestand in de opgegeven directory wordt afgedrukt.

Functie lichaam. De body van de functie bevat MATLAB-code die de berekeningen uitvoert en waarden toewijst aan de uitvoerargumenten.

Voorbeeld

De hoofdtekst van de gemiddelde functie omvat een aantal eenvoudige programmeeroperatoren:

Zoals eerder vermeld, worden opmerkingen gemarkeerd met een (%). De commentaarregel kan overal in het M-bestand worden geplaatst, ook aan het einde van de regel.

Voorbeeld

% Vind de som van alle elementen van vector x
y = som(x) % De somfunctie is gebruikt
.

De gemiddelde functie is een vrij eenvoudig M-bestand dat het gemiddelde van de elementen van een vector berekent:

M Functienamen. In MATLAB zijn namen van M-functies onderworpen aan dezelfde beperkingen als namen van variabelen: hun lengte 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. M-functienamen moeten beginnen met een letter; de overige tekens kunnen elke combinatie van letters, cijfers en onderstrepingstekens zijn.

De naam van het bestand dat de M-functie bevat, bestaat uit de functienaam en de extensie “.m”.

Voorbeeld

gemiddelde.m
Als de bestandsnaam en de functienaam in de functiedefinitieregel verschillend zijn, wordt de bestandsnaam gebruikt en de interne naam genegeerd. Hoewel de functienaam die in de functiedefinitieregel is gedefinieerd mogelijk niet dezelfde is als de bestandsnaam, wordt sterk aanbevolen dezelfde namen te gebruiken.

Dualiteit van functies en commando's.
MATLAB-systeemopdrachten zijn operators van de vorm:
laden

hulp
Veel instructies kunnen worden gewijzigd door operanden toe te voegen:
laad 17 augustus.dat
magie helpen

Een alternatieve methode om modifiers te specificeren is om ze te definiëren als stringargumenten voor de functie:

modifiers specificeren - deze definiëren als stringargumenten voor de functie:
load("17 augustus.dat")
hulp("magie")

type("rang")

Dit is de dualiteit van de concepten van commando en functie in het MATLAB-systeem. Elk commando zoals

opdrachtargument

kan in functievorm geschreven worden

Het voordeel van een functionele beschrijving ontstaat wanneer de argumentstring in delen wordt gevormd. Het volgende voorbeeld laat zien hoe de reeks bestanden August1.dat, August2.dat, etc. kan worden verwerkt.

verschijnt wanneer de argumentreeks in delen wordt gevormd. Het volgende voorbeeld laat zien hoe de reeks bestanden August1.dat, August2.dat, etc. kan worden verwerkt.
Hierbij wordt de functie int2str gebruikt, die een geheel getal omzet in een tekenreeks, die helpt bij het vormen van een reeks bestandsnamen.
voor d = 1:31
s = ["augustus" int2str(d) ".dat"]
load(s) %Laad een bestand met de naam August"d".dat




Welk programma opent het cr2-fotoformaat?