Programmering i MATLAB. Loop in matlab for - Illustrerad tutorial om MatLab ›Grunderna i programmering› Slingor som för ... slut


Förutom program med linjär struktur, vars instruktioner exekveras strikt i ordning, det finns många algoritmer vars struktur har icke-linjär. I det här fallet kan en sekvens av element av algoritmer utföras beroende på vissa villkor, ibland med ett begränsat antal repetitioner - vanliga cykler, ibland i form av cykler som slutförs när ett visst villkor är uppfyllt. Nästan alla seriösa program har en icke-linjär struktur. För att skapa sådana program krävs särskilda kontrollstrukturer. De finns på alla programmeringsspråk på hög nivå, och särskilt i Matlab.

Tänk på operatörerna m-filer mer detaljerat.

Uppdragsoperatör.Programmeringssystemets huvudoperatör Matlab är en uppdragsoperatörmed följande struktur:

Variabelnamn= uttryck

Operatören är avsedd att identifiera variabler och betecknas med symbolen = , till vänster om vilken är variabelns namn och till höger är ett aritmetik- eller stränguttryck (reglerna för att skriva aritmetik och stränguttryck diskuterades i avsnitt 1.1.2). Här är några exempel på uppdragsoperatörer (Figur 1.3.4-1).

Fikon. 1.3.4-1. Exempel på uppdragsoperatörer

Alla variabler som används på tilldelningsoperatörens högra sida måste vara fördefinierade. Om kommandoraden slutar med ett semikolon ( ; ), då visas inte resultatet av uttalandet, annars visas det i nästa rad i kommandofönstret. Denna anmärkning gäller även utförandet av uppdragsoperatörer i m-filer.

Datainmatningsoperatörer.Datainmatning i Matlab kan utföras med tilldelningsoperatören ( a \u003d 5;) eller med tangentbordets inmatningsfunktion:

Variabelnamn\u003d ingång ("Begäran");

Den här funktionen anger ett uttryck från tangentbordet och resultatet matas in i en variabel med namnet a... I exemplet nedan, till en variabel a ett numeriskt värde matas in först och sedan ett numeriskt uttryck (Fig. 1.3.4-2).

Fikon. 1.3.4-3. Utvärdering av ett symboliskt uttryck

Villkorligt uttalande om ... slutet. Villkorlig operatör omi allmän uppfattning skrivs enligt följande:

omBooleanExpression1

Instruktioner 1

självSkick2

Boolean expression2

Booleskt uttryck3

Reglerna för att skriva logiska uttryck beskrivs i ämnet 1.1.

Denna konstruktion tillåter flera speciella varianter. Det enklaste är trunkerad gaffel [x] ser ut så här:

omBooleanExpression

Instruktioner

Kom ihåg att om BooleanExpressionreturnerar booleska 1 (det vill säga "sant"), den Instruktionersom utgör strukturen om ... slut... Dessutom operatören slutet anger slutet på instruktionslistan. Uttalandena i listan är separerade med ett komma eller semikolon. Om en BooleanExpressionmisslyckas (ger boolean 0 , "False"), då Instruktioner inte heller uppfylls.

Nedan följer ett exempel på att använda den enklaste avkortade förgreningen som implementerats med operatören om (fig 1.3.4-4).

Fikon. 1.3.4-5. Exempel på standardförgrening

Från exemplet ovan kan du se att operatören omkan vara antingen i en rad eller i flera rader.

Låt oss överväga ett exempel på en mer komplex - kapslad gaffel... Låt oss överväga ett exempel

dessutom använder vi för att helt återspegla strukturen för komplex förgrening, utan att oroa oss för att slå in långa kommandorader m-funktion (bild 1.3.4-7). Låt oss välja data för att kontrollera huvudförgreningen och vända oss till funktionen raz () med olika initialdata (fig. 1.3.4-6).

Fikon. 1.3.4-7. Funktion som implementerar kapslad gaffel

Flervalsoperatören är switch.För att implementera flerval används följande konstruktion växla:

växlaUttryck

fallConception_1

Instruktionslista_1

fallVärde_2

Instruktionslista_2

fallVärde_N

Instruktionslista_N

Annat

Instruktionslista + 1

Om uttrycket efter rubriken växla betyder ett av uttrycken Värde..., sedan exekveras blocket fall, annars - en lista med instruktioner efter operatören annat... När du kör ett block fall listorna med instruktioner körs för vilka Värde sammanfaller med Uttryck... Vänligen notera att Värde kan vara ett antal, konstant, variabel, vektor av celler eller till och med en strängvariabel. Låt oss förklara användningen av sökoperatören växlamed följande exempel:

M-funktion som implementerar flera gafflar visas i fig. 4-8, och med hänvisning till den med de ursprungliga uppgifterna, så att du kan kontrollera varje gren av gaffeln, visas i Fig. 1.3.4-9.

Fikon. 1.3.4-9. Funktionssamtal multifunc ()

Funktionen multifunc (x, n) två parametrar, och den andra spelar rollen som en indikator som bestämmer typen av funktionellt beroende. Funktionens värde skrivs till en variabel y... Om n \u003d 1, körs det första fallblocket, om 2, då det andra, om n \u003d 2, 3 eller 4, då det tredje. Om värdet på variabeln n inte matchar något av de listade värdena, kommer kommandot som ligger efter nyckelordet annat.

Den vanliga slingoperatören är för ... slut. Skriv loopoperatör för ... slut det används vanligtvis för att organisera beräkningar med ett givet antal repetitioner av cykler. Konstruktionen av en sådan cykel är som följer:

för vag \u003d s: d: e

Instruktion1

Instruktion N.

var s - startvärdet för loopvariabeln var, d - ökningen av denna variabel och e - slutvärdet för den manipulerade variabeln, efter vilken cykeln slutar. Det är också möjligt att skriva i formuläret s: e (I detta fall d \u003d l). Listan över instruktioner som utförs i slingan avslutas av operatören slutet.

Som ett exempel på att använda operatören för ... slut beräkna summan av arrayelementen xvars värden definieras i kommandofönstret med m-funktionen summa ()(Fig. 1.3.4-10), vars parameter är vektorn x... Antal arrayelement x bestäms av funktionen längd... Förutom att anropa en funktion i kommandofönstret är det möjligt att kontrollera resultatet av beräkningarna med hjälp av den inbyggda funktionen summa (x) (fig 1.3.4-11).

Fikon. 1.3.4-11. Ringa en funktion summa () och inbyggd funktion summa ()

Operatören kan användas i slingan fortsätta , som överför kontrollen till nästa iteration av slingan, hoppar över uttalandena som är skrivna efter den, och i den kapslade slingan överför den kontrollen till nästa iteration av huvudslingan. Operatör ha sönder kan användas för att för tidigt avbryta körningen av en cykel (till exempel vid felsökning av ett programavsnitt). Så snart det påträffas i programmet avbryts slingan.

Förutom enkla vanliga cykler har Matlab förmågan att organisera kapslade öglor... Tänk på ett exempel på att bilda en tvådimensionell matris och, varje element representerar summan av dess index (figur 1.3.4-12). Vädja till manus-fil vzikl visas i fig. 1.3.4-13.

Fikon. 1.3.4-13. Vädja till manus-fil med namnet vzikl

Den iterativa slingoperatören är under ... slut.Allmän bild av strukturen medan ... slut som följer:

medanBooleanExpression

Instruktioner

En särskiljande egenskap hos denna struktur är att instruktioner som finns i kroppen av repetitionsstrukturen exekveras endast om några BooleanExpression "Sann." Så snart villkoret blir "falskt" avslutas upprepningsstrukturen och kontroll överförs till instruktionen som ligger efter nyckelordet slutet.

Låt oss ge ett enkelt exempel (Bild 1.3.4-14).


Fikon. 1.3.4-14. Dialogprogram med operatör medan ... slut

Detta program sparades i m-fil med namnet grundfärg 11, tjänar för upprepad beräkning av omkretsen från det radievärde som användaren anger rdär dialogrutan implementeras med kommandot inmatning.Variabla inmatningssträngar r och beräkningen av omkretsen ingår i kontrollstrukturen medan ... slut... Detta är nödvändigt för cyklisk upprepning av beräkningar när man anger olika värden. r... Fram tills r\u003e \u003d 0, upprepas cykeln. Men det är värt att fråga r<0 beräkningen av omkretsen stannar och slingan slutar. Eftersom i den andra raden i programmet kvantiteten r definieras som 0, upprepas slingan minst en gång.

Arbeta med programmet i kommandofönstret visas i Fig. 1.3.4-15.

Fikon. 1.3.4-16. Avbrott i programmet med användning av operatören ha sönder

Operatör fortsätta överför kontrollen till nästa iteration av slingan, hoppar över uttalandena som skrivs efter den, och i den kapslade slingan överför den kontrollen till nästa iteration av huvudslingan. Nedan följer ett exempel på beräkning av summan och produkten av positiva element i en tvådimensionell grupp b (3,3) (figur 1.3.4-17).


Fikon. 1.3.4-17. Avbrott i programmet med användning av operatören fortsätta

Exempel på att lösa problem med

M-filer

Exempel 1.3.5-1. Du får n siffror ... Det krävs att man beräknar deras summa: Var

För att lösa problemet har funktionen utvecklats fb (x), som implementerar algoritmen för att beräkna funktionens aktuella värde. Funktionen har en ingångsparameter - det aktuella värdet för arrayelementet b och en utgångsparameter - y(fig 1.3.5-1). Funktionen anropas i en slinga som är organiserad för att beräkna summan (Bild 1.3.5-2).

Fikon. 1.3.5-2. Ett program som beräknar summan av siffror

För att beräkna summan av värdena för funktionen, skapad manus-fil namngiven zadashа.m, där antalet nummer ( n \u003d 10) och vektorn för deras värden ( b) och sedan ordnas en vanlig slinga för att anropa funktionen fb () och beräkna beloppet.

Beräkningar utförs genom att köra manus-fil genom att skriva i kommandoraden i fönstret Kommandofönster hans namn zadasha... Resultaten av dess utförande visas i fig. 1.3.5-3.


Fikon. 1.3.5-3. Lansera manus-fil zadasha att verkställa

Exempel 1.3.5-2. Forma en tvådimensionell grupp a (3,4) från godtyckliga siffror. Beräkna och skriv ut en endimensionell matris b, vars element är det aritmetiska medelvärdet för elementen i motsvarande rad i matrisen a.

I fig. 1.3.5-4 ges manus-fil namngiven zadasha2, där matrisen introduceras, ochbestående av tre rader och fyra kolumner. Cykeln är organiserad av antalet bildade matriselement b genom att ringa funktionen sred_ar ()... En matris skickas till funktionen och, linje nummer ( i) och antalet element i raden ( m). Visar arrayelement b anges i kolumnen.

Fikon. 1.3.5-5. Fungera sred_ar ()beräkning av det aritmetiska medelvärdet
array strängelement a

Som ett resultat av löpning manus-fil med namnet zadasha2ut genom fönstret Kommandofönsteren kolumn med matriselement matas ut b

Fikon. 1.3.5-7. Fungera fab (), beräkning av värdet på den första termen

Fikon. 1.3.5-9. Funktionsstart sumf () att verkställa


Laborationer på ämnet

"Algoritmisering och programmeringsverktyg

I Matlab "

Frågor som ska studeras

1) Typer m-filer.

2) Skapa och spara nya och öppna tidigare skapade m-filer.

3) Funktioner manus-filer och m-funktioner.

4) Kör för körning manus-fil från en textredigerare.

5) Kör för körning manus-fil från kommandofönstret.

6) Överklagar till manus-filer och m-ffunktioner.

7) Verktyg för programmeringsspråket i Matlab-systemet.

8) De viktigaste operatörerna för m-språket, deras syfte och format .

2. Allmän uppgift

1) Studera materialet i ämnet 1.3 (p.p. 1.3.1 - 1.3.5).

2) Välj en enskild uppgift från bordet. 1.3.6-1.

3) Utveckla m -funktioner för implementering av standardalgoritmer: beräkning av begränsade summor, förgrening, hitta minimum och maximum i en datasekvens, etc.

4) Stiga på och spara m -funktioner på externa media.

5) Skapa nymanus -fil där du anger programkoden som beskriver logiken för att lösa problemet.

6) Spara skriptet -fil i den aktuella katalogen.

7) Felsökningsskript t-fil, startar den för körning från en textredigerare med kommandotSpringa .

8) Förbereda och stiga på inledande data för att lösa problemet;

9) Kör skript -fil från kommandoradsfönstretKommandofönster .

10) Spara texten arbetsfönster på externa medier.

11) Ge resultat arbeta för läraren, svar till de frågor som ställts.

12) Kör kommando rensa alla för rengöring Arbetsmiljö .

13) Förbered en rapport för det utförda arbetet .


Alternativ för enskilda uppdrag

Tabell 1.3.6-1

Uppgiften
Ange ett naturligt nummer n och vektorn för reella tal Att hitta: Var
Beräkna Var

Ställ in matris bestående av ett jämnt antal element. Varje par siffror , där i + 1 är en multipel av två, anger koordinaterna för polyline-toppunkten. Konstruera en polylinje som förbinder det sista toppunktet med det första
... Beräkna produkten var
Ange ett naturligt tal n och ett reellt tal x. Beräkna
Ange ett naturligt nummer n. Hitta största bland värden , där k \u003d 1, 2, ..., n, liksom summan av alla erhållna värden
Ange ett naturligt nummer n. Bland betydelserna var
(i \u003d 1,2, ... n), hitta alla positiva och beräkna deras summa
Ange ett naturligt tal n och en vektor med reella tal ... Bestäm om det finns fler positiva eller negativa tal i en vektor och bestäm det största av det negativa och det minsta av det positiva talet
Ange matrisen B (5,7) och forma vektorn C (5) från de första största elementen i raderna. Mata ut dess element till rad och kolumn
Generera en vektor enligt regeln: , där k \u003d 2,3,…, 7, om Hitta summan av kvadraterna för de siffror som inte överstiger 2
Ange ett naturligt tal n och en vektor med reella tal ... Hitta antalet två intilliggande positiva tal och två intilliggande nummer av motsatt tecken
Ange kvadratmatrisen A (4.4). Forma en vektor X från de maximala elementen i dess kolumner, visa dess element på skärmen i direkt och omvänd ordning
Presentera en vektor med heltal ... Omvandla den så att nollor placeras först, sedan alla andra element. Bestäm summan och antalet element, vars värden är en multipel av 5
Presentera en vektor med reella tal ... Skapa en matris x från den, varav varje element är högst tre element i rad i matrisen z
Forma matrisen A (4,4) enligt regeln:
Hitta och visa värdena och indexen för två identiska element. Om det inte finns någon, visa meddelandet
Forma matrisen D (3,2) enligt regeln: ... Skapa en vektor från negativa element i den resulterande matrisen
Ställ in ett naturligt nummer n. Beräkna vilken av n-för-n-matriserna som innehåller mer positiva element, om deras element bildas enligt regeln: Visa de bildade matriserna
Ange en kvadratmatris med reella tal A (4,4). Hitta summan av de största värdena för elementen i dess rader. Forma en ny matris B (4,4) genom att multiplicera varje element i matrisen A med den hittade summan och dividera den med determinanten för den ursprungliga matrisen
Ange matrisen med reella tal A (4,7) och få därifrån vektorn C (4), vars element är: · den största av elementen i första raden; · Det minsta av elementen i andra raden; · Det aritmetiska medelvärdet för elementen i tredje raden; Summan av elementen i den fjärde raden
Ange ett naturligt tal n och en matris med reella tal C (n, n). Hitta det aritmetiska medelvärdet av de största och minsta värdena för dess element och ersätt matrisen C på skärmen genom att ersätta de diagonala elementen med detta värde.
Ange naturliga tal k1, k2 och en riktig 8x4-matris. Byt elementen i k1- och k2-raderna i matrisen
Ange ett naturligt tal n och en matris med reella tal C (n, 9). Hitta det aritmetiska medelvärdet för var och en av de jämnt numrerade kolumnerna
Ange vektorer med reella tal x (5), y (6), z (7). Beräkna värdet på t med följande algoritm:
Ange vektorer med reella tal x (5). Få x \u003d 1, 3, 4 värden Var
Ange vektorer med reella tal x (10). Hämta från det en annan array p (10), vars element är ordnade i stigande ordning
Ange matrisen för reella tal A (3,4). Ersätt elementen i matrisraden med den maximala summan av värdena för elementen - med en, med minsta - med två, och ställ in de återstående elementen i matrisen lika med noll
Formmatris A (4,4) enligt regeln Ta bort kolumner som innehåller element mindre än 10 från den
Forma matrisen B (9.3) enligt regeln. Bestäm det minsta elementet i varje rad i matrisen och skriv det i motsvarande element i vektorn C. Mata ut den resulterande vektorn C
Presentera en matris med reella tal A (3,4), vars alla element är olika. I varje rad ska de största och minsta värdena väljas, och summan av indexen för kolumnerna där de finns ska skrivas in i motsvarande element i vektorn C (3)
Ange matrisen för reella tal A (4,4). Få sekvenser av element i huvud- och sekundärdiagonalen, skapa vektorerna B (4) och C (4) från dessa element och visa dem på skärmen

1) I form av kommentarer:

Lab titel

Studentens fullständiga namn, gruppnummer

· Alternativ nr

Individuell uppgift

2) Protokoll för beräkningar (sessioner) i fönstret Kommandofönsterförses med nödvändiga kommentarer.

1.3.7. Kontrollera frågor om ämnet

1) Vad är manus-fil och vilka funktioner har den?

2) Hur manus-körs filen?

3) Vad är m-fungera jag?

4) Vad är skillnaden? manus-fil från m-funktioner?

5) Kan m- fungera har flera utgångar?

6) Med hänvisning till m- fungera.

7) Operatörsformat inmatning ().

8) Som att använda operatören om ... slut att implementera standard, trunkerad och kapslad förgrening?

9) Format för operatören med flera gafflar växla.

10) Format för den vanliga cykeloperatören för ... slutet, specifikationer för att ställa in värdena för cykelvariabeln.

11) Tilldelning av operatörer fortsätta och brek.

12) Iterativ loopoperatör medan ... slut och dess struktur.


Avsnitt 2. Lösningsteknik
beräkningsuppgifter med hjälp av MatLab

Villkorligt om uttalande

I det enklaste fallet är syntaxen för detta if-uttalande:

om<выражение>
<операторы>
slutet

Jag uppmärksammar det faktum att, till skillnad från moderna programmeringsspråk, ett sådant koncept som en sammansatt operatör inte används. Blocket för den villkorliga operatören måste sluta med serviceordets slut.

Nedan följer ett exempel på implementeringen av funktionen tecken (), som returnerar +1 om siffran är större än noll, -1 om siffran är mindre än noll och 0 om siffran är noll:

x \u003d 5;
om x\u003e 0
disp (1);
slutet
om x< 0
disp (-1);
slutet
om x \u003d\u003d 0
disp (0);
slutet

Analys av det givna exemplet visar att alla dessa tre tillstånd är ömsesidigt exklusiva, dvs. när en av dem utlöses behöver du inte kontrollera de andra. Implementeringen av just sådan logik kommer att öka programkörningens hastighet. Detta kan uppnås med hjälp av konstruktionen

om<выражение>
<операторы1> % är uppfyllda om villkoret är sant
annan
<операторы2> % uppfylls om villkoret är falskt
slutet

Då kan exemplet ovan skrivas så här:

X \u003d 5;
om x\u003e 0
disp (1);
annan
om x< 0
disp (-1);
annan
disp (0);
slutet
slutet

Detta program kontrollerar först om variabeln är positiv, och i så fall visas värdet 1 på skärmen och alla andra förhållanden ignoreras. Om det första villkoret visar sig vara falskt fortsätter körningen av programmet på annat sätt (annars) till det andra villkoret, där variabeln x testas för negativitet, och om villkoret är sant visas värdet -1 på skärmen. Om båda villkoren är falska visas värdet 0.

Ovanstående exempel kan skrivas i en enklare form med ytterligare en konstruktion av if-operatören för MatLab-språket:

om<выражение1>
<операторы1> % körs om expression1 är sant
elseif<выражение2>
<операторы2> % körs om expression2 är sant
...
elseif<выражениеN>
<операторыN> % körs om expressionN är sant
slutet

och skrivs enligt följande:

x \u003d 5;
om x\u003e 0
disp (1); % körs om x\u003e 0
annat om x< 0
disp (-1); % körs om x< 0
annan
disp (0); % körs om x \u003d 0
slutet

Med det villkorliga if-uttalandet kan du testa för mer komplexa (sammansatta) förhållanden. Till exempel måste du bestämma: faller variabeln x inom värdet från 0 till 2? Detta kan implementeras genom att samtidigt kontrollera två villkor samtidigt: x\u003e \u003d 0 och x<=2. Если эти оба условия истинны, то x попадает в диапазон от 0 до 2.

För att implementera sammansatta förhållanden i MatLab används logiska operatorer:

& - logisk OCH
| - logisk ELLER
~ - logiskt INTE

Låt oss titta på ett exempel på användning av sammansatta förhållanden. Antag att du vill kontrollera om variabeln x ligger i intervallet från 0 till 2. Programmet kommer att skrivas enligt följande:

x \u003d 1;
om x\u003e \u003d 0 & x<= 2
annan
slutet

I det andra exemplet kommer vi att kontrollera att variabeln x inte tillhör intervallet från 0 till 2. Detta uppnås genom att utlösa ett av två villkor: x< 0 или x > 2:

x \u003d 1;
om x< 0 | x > 2
disp ("x tillhör inte intervallet från 0 till 2");
annan
disp ("x tillhör intervallet 0 till 2");
slutet

Med hjälp av de logiska operatorerna OCH, ELLER, INTE kan du skapa en mängd sammansatta förhållanden. Du kan till exempel kontrollera att variabeln x faller inom intervallet -5 till 5, men inte tillhör intervallet från 0 till 1. Uppenbarligen kan detta implementeras enligt följande:

x \u003d 1;
om (x\u003e \u003d -5 & x<= 5) & (x < 0 | x > 1)
disp ("x tillhör [-5, 5] men ingår inte i");
annan
disp ("x eller ingår inte i [-5, 5] eller i");
slutet

Observera att parenteser användes i komplexa sammansatta tillstånd. Faktum är att AND-operationens prioritet är högre än OR-operationens prioritet, och om det inte fanns några parenteser skulle villkoret se ut så här: (x\u003e \u003d -5 och x<= 5 и x < 0) или x > 1. Uppenbarligen skulle en sådan kontroll ge ett annat resultat än den förväntade.

Parenteser används i programmeringen för att ändra påståendens företräde. Liksom aritmetiska operatörer kan logiska operatörer också ändras efter programmerarens vilja. Genom att använda parentes utförs kontrollen först inuti dem och sedan utanför dem. Därför behövs de i ovanstående exempel för att uppnå önskat resultat.

Prioriteten för logiska operationer är följande:

INTE (~) är högsta prioritet;
Och (&) - medelprioritet;
ELLER (|) är den lägsta prioriteten.

While loop-uttalande

MatLab-programmeringsspråket har två loopoperatorer: medan och för. Med deras hjälp utförs till exempel programmering av återkommande algoritmer, beräkning av summan av en serie, uppräkning av arrayelement och mycket mer.

I det enklaste fallet organiseras en slinga i ett program med ett while-uttalande, som har följande syntax:

medan<условие>
<операторы>
slutet

Här<условие> betyder ett villkorligt uttryck som det som används i if-uttalandet, och while-loop går så länge som villkoret är sant.

Det bör noteras att om villkoret är falskt innan slingkörningen påbörjas kommer uttalandena som ingår i slingan inte att köras ens en gång.

Här är ett exempel på hur while-loop fungerar för att beräkna summan av en serie:


i \u003d 1; % motbelopp
medan jag<= 20 % цикл (работает пока i <= 20)

slut% slutet av slingan
disp (S); % visning av summan av 210 på skärmen

Låt oss nu komplicera uppgiften och beräkna summan av serien, för tillfället. Här, i loopoperatorn, erhålls två villkor: antingen räknaren i når 20 eller så kommer summan S att överstiga 20. Denna logik kan implementeras med användning av ett sammansatt villkorligt uttryck i medan loopoperatorn:

S \u003d 0; % initialt värde av beloppet
i \u003d 1; % motbelopp
medan jag<= 20 & S <= 20 % цикл (работает пока i<=10 и S<=20
S \u003d S + i; % beräknas beloppet
i \u003d i + 1; % räknaren ökar med 1
slut% slutet av slingan

Det givna exemplet visar möjligheten att använda sammansatta förhållanden i en stundslinga. I allmänhet kan samma villkor skrivas som ett villkorligt uttryck som i ett villkorligt if-uttalande.

Arbetet för alla loopoperatörer, inklusive medan, kan avbrytas med våld med hjälp av pausmeddelandet. Till exempel kan det tidigare programmet skrivas om på följande sätt med hjälp av pausuttrycket:

S \u003d 0; % initialt värde av beloppet
i \u003d 1; % motbelopp
medan jag<= 20 % цикл (работает пока i<=10
S \u003d S + i; % beräknas beloppet
i \u003d i + 1; % räknaren ökar med 1
om S\u003e 20% om S\u003e 20,
ha sönder; % sedan avslutas cykeln
slutet
slut% slutet av slingan
disp (S); % visning av summan av 21 på skärmen

I detta exempel skrivs det andra villkoret för slutet av slingan, när S är större än 20, i själva slingan, och med användning av brytuttrycket lämnas slingan till disp () -funktionen omedelbart efter stundslingan.

Den andra operatören för loopkörningskontroll fortsätter låter dig hoppa över körningen av programfragmentet efter det. Du vill till exempel beräkna summan av elementen i en matris

a \u003d;

exklusive elementet med index 5. Ett sådant program kan skrivas enligt följande:

S \u003d 0; % initialt värde av beloppet
a \u003d; % array
i \u003d 0; % array indexräknare
medan jag< length(a) % цикл (работает пока i меньше
% av arraylängd a)
i \u003d i + 1; % ökar indexräknaren med 1
om i \u003d\u003d 5% om index är 5
Fortsätta; % då räknar vi inte det
slutet
S \u003d S + a (i); % räknas summan av elementen
slut% slutet av slingan
disp (S); % visning av mängden 40 på skärmen

Det bör noteras att indexet för arrayen i detta program ökas innan tillståndet kontrolleras. Detta görs så att indexvärdet ökar med 1 vid varje iteration av slingan. Om ökningen i räknare i skrivs som i föregående exempel, dvs. efter att ha beräknat summan, kommer dess värde att stanna vid 5 på grund av fortsättningsuttalandet och medan slingan skulle köras "för alltid".

För loopoperatör

När man organiserar en slinga är det ofta nödvändigt att iterera över diskvärdet i ett visst intervall av värden och med ett givet steg för förändring. Till exempel, för att itera över elementen i en vektor (array), måste du organisera en räknare från 1 till N med steget 1, där N är antalet element i vektorn. För att beräkna summan av serien ställs också en räknare från a till b in med önskat steg. Etc. På grund av det faktum att sådana uppgifter ofta påträffas i programmeringsförfarandet, föreslogs en operatör för loop, vilket gör det enklare och mer visuellt att implementera en loop med en räknare.

Syntaxen för for loop-uttalandet är som följer:

för<счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
slutet

Låt oss överväga hur denna cykel fungerar med ett exempel på implementeringen av algoritmen för att hitta det maximala värdet av ett element i en vektor:

a \u003d;
m \u003d a (1); % aktuellt maximivärde
för i \u003d 1: längd (a)% slinga från 1 till slutet av vektorn med
% i steg om 1 (standard)
om m< a(i) % если a(i) > m,
m \u003d a (i); % då m \u003d a (i)
slutet
slut% slutet av för loop
disp (m);

I det här exemplet ställer in for-räknaren räknaren i och ändrar dess värde från 1 till 10 i steg om 1. Observera att om stegvärdet inte anges specifikt kommer det att vara standard till 1.

I nästa exempel kommer vi att överväga implementeringen av algoritmen för att flytta elementen i en vektor åt höger, dvs. det näst sista elementet placeras på platsen för den sista, nästa - i stället för den näst sista, etc. upp till det första elementet:

a \u003d;
disp (a);
för i \u003d längd (a): - 1: 2% slinga från 10 till 2 i steg om -1
a (i) \u003d a (i-1); % förskjuta elementen i vektorn a
slut% slutet av för loop
disp (a);

Programmets resultat

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

Ovanstående exempel visar att för att implementera en slinga med en räknare från ett högre värde till ett lägre måste du uttryckligen ange steget, i det här fallet, -1. Om detta inte görs kommer cykeln att omedelbart avsluta sitt arbete och programmet fungerar inte korrekt.

Ekvationslösningar

Språket för teknisk databehandling

Miljontals ingenjörer och forskare runt om i världen använder MATLAB® för att analysera och utveckla system och produkter som förändrar vår värld. Matrisspråket MATLAB är världens mest naturliga sätt att uttrycka beräkningsmatematik. Inbyggd grafik gör det enkelt att visualisera och förstå data. Skrivbordsmiljön uppmuntrar experiment, utforskning och upptäckt. Dessa MATLAB-verktyg och funktioner är alla noggrant testade och utformade för att fungera tillsammans.

MATLAB hjälper dig att få dina idéer till liv utanför skrivbordet. Du kan köra utforskningar på stora datamängder och skala till kluster och moln. MATLAB-koden kan integreras med andra språk, så att du kan distribuera algoritmer och applikationer över ett nätverk, företag och industriella system.

Början av arbetet

Lär dig MATLAB-grunderna

Grundläggande språk

Syntax, matrisindexering och bearbetning, datatyper, operatörer

Dataimport och analys

Import och export av data, inklusive stora filer; förbehandling av data, visualisering och forskning

Matte

Linjär algebra, differentiering och integration, Fourier-omvandlingar och annan matematik

Grafisk konst

2D- och 3D-grafik, bilder, animering

Programmering

Skript, funktioner och klasser

Skapa applikation

Applikationsutveckling med App Designer, programmerbart arbetsflöde eller GUIDE

Verktyg för programvaruutveckling

Felsökning och testning, organisering av stora projekt, integration med ett versionskontrollsystem, förpackning av verktygslådor

Institution: Informationsteknik

PROGRAMMERING INMATLAB


OperatörerMATLAB

· Slingoperatörer

Cykelför

Syntax

för räkning \u003d start: steg: slutlig

mATLAB-kommandon

Beskrivning

räkna är en loopvariabel,

start - dess ursprungliga värde,

final är dess slutliga värde,

steg - steget med vilket antalet ökar med varje nästa inmatning i slingan

slingan slutar så snart räkningen blir större än final.

Exempel

Låt det krävas att härleda en familj av kurvor för x €, som ges av en funktion beroende på parametern

y (x, a) \u003d e -ax sin x,

för parameter a-värden från -0,1 till 0,1. Nedan följer en lista över en programfil för att mata ut en familj av kurvor.

Programlista

x \u003d;

för a \u003d -0,1: 0,02: 0,1

y \u003d exp (-a * x). * sin (x);

Som ett resultat av programkörningen visas ett grafiskt fönster som innehåller den önskade kurvfamiljen.

Cykelmedan

Syntax

under slinga

mATLAB-kommandon

Beskrivning

Slingan körs så länge som slingans villkor är uppfyllt (sant). För att ställa in villkoren för körning av cykeln är följande relationsoperationer tillåtna:

Mer komplexa förhållanden specificeras med hjälp av logiska operatorer. Logiska operatörer visas i följande tabell


Exempel

Filialoperatörer

Villkorlig operatörom

Syntax

om villkor

mATLAB-kommandon

Beskrivning

Om villkoret är sant utförs MATLAB-kommandona som placeras mellan if och slutet, och om villkoret inte är sant inträffar övergången till de kommandon som ligger efter slutet.

Exempel

Villkorlig operatörelseif

Syntax

om villkor1

elseif villkor2

………………………

annat om villkoret

Beskrivning

Beroende på uppfyllandet av detta eller det här villkoret fungerar motsvarande gren av programmet, om alla villkor är felaktiga, körs kommandona efter det andra.

Exempel

Operatörväxla

Syntax

växelvariabel

fallvärde1

fallvärde2

……………………

fallvärde n


Varje gren definieras av ett falluttal, övergången till det utförs när variabeln för switchuttalningen tar det värde som anges efter fallet, eller ett av värdena från falllistan. Efter körningen av någon av filialerna avslutas växeln medan värdena som anges i andra fall inte längre kontrolleras. Om inga lämpliga värden för variabeln hittas, körs den programgren som motsvarar annars.

Exempel

Avbryter cykeln. Exceptionella situationer.

Operatörha sönder

Syntax

Brytoperatören används vid organisering av cykliska beräkningar: för ... slut, medan ... slut. När villkoret är uppfyllt

om villkor

bryta uttalandet slutar slingan (för eller under) och uttalanden som finns på raderna efter slutet körs. När det gäller kapslade öglor, bryter utgångar från den inre öglan.

Undantagshantering, operatörprovafånga

Syntax

operatörer vars utförande

kan leda till ett fel

uttalanden som ska utföras

när ett fel uppstår i ett block

mellan försök och fånga

Beskrivning

Try ... catch-konstruktionen låter dig kringgå undantag (fel som leder till att programmet avslutas, till exempel åtkomst till en obefintlig fil) och vidta några åtgärder om de uppstår.

Exempel

Servicefunktioner

dispmatar ut texten eller värdet på en variabel till kommandofönstret

inmatning- gör en begäran om tangentbordsinmatning. Används när du skapar applikationer med ett kommandoradsgränssnitt.

evalkör innehållet i en sträng eller strängvariabel som MATLAB-kommandon

klar- tar bort variabler i arbetsmiljön.

frånlc- rensar kommandofönstret

Mer information om dessa och andra funktioner kan hittas genom att köra på kommandoraden

hjälpfunktionsnamn


Laborationer

Antalet för en specifik variant av uppgiften bestäms av läraren.

Uppgift nummer 1

Denna uppgift innebär att hitta, för en viss uppsättning data, en algebraisk interpolationspolynom av grad n: P n(x) .

Syfte med arbetet:

Det är nödvändigt att sammanställa ett program för beräkning av koefficienterna för det algebraiska interpolationspolynomet P n(x)= a 0 + a 1 x+ … + a n x n.

Metodiska instruktioner:

0 1 2 3

x i

1,2 1,4 1,6 1,8
8,3893 8,6251 8,9286 8,9703

Odds a 0 , a 1 , …, en bestäms utifrån lösningen av ekvationssystemet:

Här n - ordningen på interpolationspolynomet,

n+1 - antalet angivna poängpar ( x, y),

a 0 , a 1 ,… en- de erforderliga koefficienterna för polynom P n(x)= a 0 + a 1 x+ … + a n x n).

Krav på programmet

Ställ in gränserna för linjen , på vilken interpolationspolynomet är konstruerat P (x)

· Fråga n - antalet interpolationssegment (eller, som är samma, graden av polynom)

Notera: x0, xn, n in från tangentbordet.

För att få initialdata (x, y) (antal poängpar (x i, y i), genom vilken interpolationspolynomet är konstruerat P (x)n1 \u003d n + 1) tillhandahålla:

ü Ange slumpmässigt placerade noder x i, i \u003d 0, n från tangentbordet

ü Beräkning av noder x i, i \u003d 0, n, motsvarar argumentets enhetliga fördelning x på segmentet

ü I nr. 1,2 värden y i, i \u003d 0, n antingen skrivs in från tangentbordet (om den ursprungliga funktionen är okänd) eller beräknas av en viss funktion f (x)... Ett uttryck som definierar en funktion matas in från tangentbordet och måste följa reglerna för att skriva uttryck i MATLAB

ü Datainmatning ( x i, y i, i \u003d 0, n) från fil

Lös ekvationssystemet för att bestämma koefficienterna för polynom P (x)

Bygg grafer för den ursprungliga tabelldefinierade funktionen och polynomet P (x)

· Om de ursprungliga uppgifterna anges som en funktion f (x), bygg ett diagram över interpoleringsfelet / f (x) - P (x) /. Beräkna det maximala modulvärdet för interpolationsfelet vid ett givet intervall.


Uppgift nummer 2

Spline interpolation

Syfte med arbetet:

Det är nödvändigt att komponera ett program för att beräkna koefficienterna och konstruera en splinefunktion S (x), "limmad" från bitar av 3: e ordningens polynom S i(x), som har en speciell notation:

funktion S i(x) definieras i segmentet

Krav på programmet

När du utför detta arbete måste du:

Ställ in gränserna för det segment som splinefunktionen S (x) är konstruerad på

· Ange n - antalet interpolationssegment, på vilka kubikpolynomet Si (x) är konstruerat.

· Obs! X0, xn, n matas in från tangentbordet.

Ordna inmatningen av initialdata (x, y) (antalet punkter av punkter (xi, yi), som används för att konstruera splinefunktionen S (x), n1 \u003d n + 1), vilket ger:

ü Inmatning av slumpmässigt placerade noder xi, i \u003d 0, n från tangentbordet

ü Beräkning av noder xi, i \u003d 0, n, motsvarande den enhetliga platsen för argumentet x på segmentet

ü I nr. 1,2 värdena yi, i \u003d 0, n anges antingen från tangentbordet (om den ursprungliga funktionen är okänd) eller beräknas av den givna funktionen f (x). Ett uttryck som definierar en funktion matas in från tangentbordet och måste följa reglerna för att skriva uttryck i MATLAB

ü Datainmatning (xi, yi, i \u003d 0, n) från fil

ü S1 "" (x0) \u003d 0, S3 "" (x3) \u003d 0

ü S1 "(x0) \u003d f" (x0), S3 "(x3) \u003d f" (x3)

ü S1 "" (x0) \u003d f "(x0), S3" "(x0) \u003d f" (x3)

För att bestämma koefficienterna för den naturliga kubiska raden (gränsvillkor 1) är det nödvändigt att lösa följande ekvationssystem:

Koefficienter σ 0 \u003d 0, σ n \u003d 0

· Bygg grafer över den ursprungliga funktionen och splinefunktionerna för alla tre typerna av gränsvillkor.

· Bygg grafer för splf (x) - S (x) för alla tre typerna av gränsvillkor.

Notera:

I MATLAB-paketet börjar index för endimensionella och tvådimensionella matriser från 1, inte från 0. Ta hänsyn till detta när du skriver programmet.


Uppgift nummer 3

Funktions approximation med den minsta kvadratmetoden (OLS).

Denna uppgift innefattar att hitta för en viss datauppsättning en ungefärlig funktion (polynom av grad m), konstruerad med LSM-metoden.

Syfte med arbetet:

Det är nödvändigt att komponera ett program för att hitta koefficienterna för polynom φ (x)= a 0 + a 1 * x+… en * x m metoden för de minsta kvadraterna.

Antag till exempel att du har följande uppsättning data:

x i

1,2 1,4 1,6 1,8 2,0 2,2 2,4 2,6 2,8 3,0
8,3893 8,6251 8,9286 8,9703 9,1731 9,1784 8,8424 8,7145 8,3077 7,9611

Sökningen efter önskade koefficienter utförs enligt följande:

var n - antal poäng ( x, y),

m - graden av erforderligt polynom,

a 0 , a 1 , …, a m - erforderliga koefficienter ( φ ( x )= a 0 + a 1 x + … + a m x m ).

Krav på programmet

När du utför detta arbete måste du:

· Ställ in gränserna för det segment som den ungefärliga funktionen är konstruerad på φ (x) \u003d a0 + a1 * x + ... an * xm

Ställ in m - graden av polynom

· Obs: x1, xn, m matas in från tangentbordet.

· För att erhålla initialdata (x, y), med vilken den ungefärliga funktionen φ (x) \u003d a0 + a1 * x + ... an * x m konstrueras, ge:

ü Ange slumpmässigt placerade noder xi, i \u003d 1, n från tangentbordet

ü Beräkning av noder xi, i \u003d 1, n, motsvarande den enhetliga platsen för argumentet x på segmentet

ü I nr. 1,2 värdena yi, i \u003d 1, n antas antingen från tangentbordet (om den ursprungliga funktionen är okänd) eller beräknas av den givna funktionen f (x). Ett uttryck som definierar en funktion matas in från tangentbordet och måste följa reglerna för att skriva uttryck i MATLAB

ü Datainmatning (xi, yi, i \u003d 1, n) från fil

Lös ekvationssystemet för att bestämma polynomets koefficienter φ (x)

Bygg grafer över den ursprungliga tabelldefinierade funktionen och polynomet φ (x)

· Om initialdata specificeras som en funktion f (x), bygg ett diagram över interpoleringsfelet / f (x) - φ (x) /. Beräkna det maximala modulvärdet för interpolationsfelet vid ett givet intervall.

När du utför den sista punkten på segmentet ta minst 500 poäng för beräkningar


Krav på utformning av laboratoriearbete

Rapporten bör innehålla:

1. Uttalande av problemet

2. Programtext

3. Testresultat

Obs! Texterna till programmen bör förses med kommentarer.


1. Anufriev I.Ye. Självstudievägledning Matlab 5.3 / 6.x - SPb.: BHV-Petersburg, 2003. - 736 s.: Ill.

2. V.P. Dyakonov MATLAB 6.5 SPI / 7 + Simulink 5/6 i matematik och modellering. Professionell biblioteksserie. - M.: SOLON-Press, 2005. - 576 s.: Ill.

3. Anufriev IE, Smirnov A.B., Smirnova E.N. MathLab 7. - SPb.: BHV-Petersburg, 2005. - 1104 s.: Ill.

När man organiserar en slinga är det ofta nödvändigt att iterera över diskvärdet i ett visst intervall av värden och med ett givet steg för förändring. Till exempel, för att itera över elementen i en vektor (array), måste du organisera en räknare från 1 till N med steget 1, där N är antalet element i vektorn. För att beräkna summan av serien ställs också en räknare från a till b in med önskat steg. Etc. På grund av det faktum att sådana uppgifter ofta påträffas i programmeringsförfarandet, föreslogs en operatör för loop, vilket gör det enklare och mer visuellt att implementera en loop med en räknare.

Syntaksen för uttalandet för loop är som följer:

för<счетчик> = <начальное значение>:<шаг>:<конечное значение>
<операторы цикла>
slutet

Låt oss överväga hur denna cykel fungerar med ett exempel på implementeringen av algoritmen för att hitta det maximala värdet för ett element i en vektor:

funktionssökning_max
a \u003d;
m \u003d a (1); % aktuellt maximivärde
för i \u003d 1: längd (a)% slinga från 1 till slutet av vektorn med
% i steg om 1 (standard)
om m< a(i) % если a(i) > m,
m \u003d a (i); % då m \u003d a (i)
slutet
slut% slutet av för loop
disp (m);

I det här exemplet ställer for-loop räknaren i och ändrar dess värde från 1 till 10 i steg om 1. Observera att om stegstorleken inte anges uttryckligen, är den som standard 1.

I nästa exempel, överväga implementeringen av algoritmen för att flytta elementen i en vektor åt höger, dvs. det näst sista elementet placeras på platsen för den sista, nästa - i stället för den näst sista, etc. upp till det första elementet:

funktionskö
a \u003d;
disp (a);
för i \u003d längd (a): - 1: 2% slinga från 10 till 2 i steg om -1
a (i) \u003d a (i-1); % förskjuta elementen i vektorn a
slut% slutet av för loop
disp (a);

Programmets resultat

3 6 5 3 6 9 5 3 1 0
3 3 6 5 3 6 9 5 3 1

Ovanstående exempel visar att för att implementera en slinga med en räknare från ett högre värde till ett lägre måste du uttryckligen ange steget, i det här fallet, -1. Om detta inte görs kommer cykeln att omedelbart avsluta sitt arbete och programmet fungerar inte korrekt.

Sammanfattningsvis kommer vi att överväga funktionen för operatören för loop med hjälp av exemplet att modellera en slumpmässig sekvens med förändringslagen

var är koefficienten från -1 till 1; - normal slumpmässig variabel med noll matematisk förväntan och varians

,

var är variansen hos den simulerade slumpmässiga processen. I det här fallet modelleras det första urvalet som en normal slumpmässig variabel med noll matematisk förväntan och varians. Simuleringsprogrammet ser ut så här:

funktionsmodellering_x
r \u003d 0,95; % modellfaktor
N \u003d 100; % antal simulerade poäng
ex \u003d 100; % processvarians
et \u003d ex * (1-r ^ 2); % varians av slumpmässigt tillägg
x \u003d nollor (N, 1); % initialisering av vektor x
x (1) \u003d sqrt (ex) * randn; % simulering av första provet
för i \u003d 2: N% slinga från 2 till N
x (i) \u003d r * x (i-1) + sqrt (et) * randn; % simulering av joint venture
slut% slutet av slingan
tomt (x); % visning av SP i form av ett diagram

När programmet körs visas implementeringen av den simulerade slumpmässiga sekvensen.

Fikon. 2.1. Resultatet av att modellera en slumpmässig sekvens.

Programmets arbete börjar med definitionen av variabler (i programmet variabeln ex) och för implementering av den angivna modellen. Sedan beräknas variansen och det första provet av den slumpmässiga processen simuleras med randfunktionen. Randn-funktionen genererar normala slumpmässiga variabler med noll medelvärde och enhetsvarians. För att generera en slumpmässig variabel med varians är det tillräckligt att multiplicera den slumpmässiga variabeln med enhetsvarians med sedan varians är medelkvadraten för en slumpmässig variabel i förhållande till den matematiska förväntningen. Som ett resultat har vi en programrad

x (1) \u003d sqrt (ex) * randn;

Därefter implementeras en för-slinga med en räknare i från 2 till N med steget 1. Inuti slingan simuleras de återstående N-1-samplen av den slumpmässiga processen i enlighet med ovanstående formel. Den sista raden i programmet innehåller funktionen plot (), som visar den modellerade sekvensen på skärmen i form av en graf. Arbetet med visning av grafer på skärmen kommer att diskuteras mer detaljerat i nästa kapitel.







2021 gtavrl.ru.