TAIU07 Föreläsning 3 Logik och Jämförelser. Styrsatser: Villkorssatsen if och repetitonssatsen for. Scriptfiler. Kommentarer. Tillämpningar: Ett enkelt filter. 27 januari 2016 Sida 1 / 21
Logiska variabler och jämförelser En Logisk variabel kan ha värdet sant eller falskt. Logiska värden skapas vid jämförelser mellan två tal. Exempel Låt x=3.0 och y=6.5. >> x > y ans = 0 Kommentar I MATLAB tolkas värdet 0 som falskt och 1 som sant. 27 januari 2016 Sida 2 / 21
I MATLAB finns Relationsoperatorer <, <=, >, >=, ==, och ~= Logiskaoperatorer &, och ~ Exempel Låt x = 3.0 och y = 6.5. Beräkna uttrycket >> z = x + y >= x^2 x == y Prioritet Aritmetriska > Relations > Logiska. Kan använda parenteser. 27 januari 2016 Sida 3 / 21
Jämförelser med Matriser eller Vektorer Jämförs två vektorer eller matriser så beräknas jämförelsen elementvis. Bägge operanderna måste ha samma dimension. Exempel Låt x=[1 3] och y=[2 2]. Då gäller att >> x < y ans = 1 0 Även logiska operatorer beräknas elementvis. 27 januari 2016 Sida 4 / 21
Funktionen randi returnerar slumpmässiga heltal i ett givet intervall. Exempelvis A=randi([a b],n,m) skapar en n m matris med slumpmässiga heltal i intervallet [a, b]. Exempel Hur många femmor får man i genomsnitt om man slår en tärning 8 gånger? Gör N = 10 4 experiment och undersök detta. 27 januari 2016 Sida 5 / 21
Exempel Antag att x är en vektor som innehåller både positiva och negativa tal. Beräkna summan av de positiva talen. I Matlab skriver vi >> S = sum( (x>0).* x ); Vad händer om x = (2, 3, 0, 1, 2, 1) T? 27 januari 2016 Sida 6 / 21
Villkorssatser Definition En styrsats används för att bestämma vilka delar av ett program som skall exekveras. Definition En villkorssats används då ett antal kommandon ast skall exekveras om ett visst villkor har värdet sant. Exempel Värdet på x avgör vilken väg som tas genom programmet. Nej x > 0? Ja x := x+1 27 januari 2016 Sida 7 / 21
I Matlab finns if <logiskt uttryck> <satser> där kommandona <satser> ast utförs om det logiska uttrycket beräknas till värdet sant. Exempel Antag att vi har beräknat ett funktionsvärde f(x). Gör en utskrift om värdet är positivt. 27 januari 2016 Sida 8 / 21
Ett alternativ är if else <logiskt uttryck> <satser 1> <satser 2> där antigen <satser 1> eller <satser 1> utförs. Exempel Låt f(x) ges av två olika uttryck beroe på om x > 0. Ja f = x 2 x x > 0? Nej f = 0 27 januari 2016 Sida 9 / 21
Exempel En funktion ges av uttrycket { 0, x 0, f(x) = x 2, x > 0. I Matlab kan vi skriva: x=3.5; if (x <= 0) f=0; else f=x^2; ; 27 januari 2016 Sida 10 / 21
Exempel Antag att a = 5 och att variabeln flagga har värdet falskt, dvs flagga=0. Vad händer i följande fall? if flagga if flagga if a<10 if a<10 a=a+1 a=a+1 else a=a-1 else a=a-1 Vad skulle ha hänt om istället a=5 och variabeln flagga hade haft värdet sant? 27 januari 2016 Sida 11 / 21
Exempel Testa om ett värde x ligger i intervallet 2 x < 5. Skriv isåfall ut ett meddelande. Tänk på att jämförelser görs mellan två tal. Exempel Funktionen f(x) ges av uttrycket x 2, x<0 f(x)= sin(x), 0 x< π 2 1, x π 2 Skriv en villkorssats som beräknar y = f(x) för ett givet x värde. 27 januari 2016 Sida 12 / 21
Repetitonssatser Definition En repetitionssats används då ett antal satser skall upprepas flera gånger. Då ett antal satser skall utföras, ett på förhand känt, antal gånger används en for-sats. k = 1 <Satser> k = 10 Ja k = k+1 Nej 27 januari 2016 Sida 13 / 21
I Matlab finns konstruktionen for <variabel>= start:steg:slut <satser> där <satser> utförs en gång för varje värde på <variabel>. Exempel Beräkna summan S = I Matlab skriver vi 1000 k=1 1 k 2. Detta ger S=1.6439. S=0; for k=1:1000 S=S+k^(-2); 27 januari 2016 Sida 14 / 21
Exempel Vad blir x(5) då följande program exekveras? x=zeros(5,1); for k=2:1:5 x(k)=x(k-1)+k Exempel Låt x vara vektorn x = ( 1, 1, 5, 2, 3, 2, 4) T. Använd en repetitionssats för att hitta det största elementet i vektorn. Övning Rita ett flödesschema och översätt detta till ett Matlab program. 27 januari 2016 Sida 15 / 21
Nästlade repetitionssatser Det går bra att ha flera for-satser innuti varandra. Exempel Beräkna matris-vektor produkten y = Ax, A R n m, med formeln m y i = a ij x j, i = 1, 2,...,n. I Matlab skriver vi j=1 [n,m]=size(a); y=zeros(n,1); for i=1:n for j=1:m y(i)=y(i)+a(i,j)*x(j); 27 januari 2016 Sida 16 / 21
Exempel Hilbert matrisen är ett exempel på en matris som är svår att arbeta med. Den definieras av att elementen sätts till h ij = 1 i+j. Skriv ett Matlab program som skapar en Hilbert matris av dimension n = 10. 27 januari 2016 Sida 17 / 21
Kommentarer I större program infogar man ofta kommentarer för att förklara vad som händer. Detta underlättar då man annars riskerar att glömma bort hur man tänkte då uppgiften löstes. En kommentar påverkar inte resultatet då ett program körs. I MATLAB anger tecknet % att resten av raden är en kommentar. Exempel I ett program kan vi skriva x(k)=y; k=k+1; % Öka räknaren k så att nästa y-värde % hamnar på en tom plats i vektorn x. 27 januari 2016 Sida 18 / 21
Tillämpning: Ett utjämnande Filter Problem Vi har en mätt en signal F(t) som skall vara slät. På grund av mätbrus fås en signal med kraftiga oscillationer. 1.6 1.4 1.2 1 Signal F δ (t) 0.8 0.6 0.4 0.2 0 0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Tid t [s] Vi skall använda MATLAB för att filtrera bort det brus som smygit sig in i mätningarna. 27 januari 2016 Sida 19 / 21
Medelvärdesbildar vi över ett antal element i vektorn F δ så bör slumpmässigt brus reducderas kraftigt. Metod Välj ett heltal W och beräkna ett nytt värde F W (k) = 1 2W + 1 k+w k W F δ (k), I början och slutet av vektorn F δ har vi inte alla värden vi behöver och utökar därför först vektorn med Wst kopior av F δ (1) respektive F δ (N). Uppgift Skriv ett MATLAB program som utför filtrering enligt ovanståe metod. 27 januari 2016 Sida 20 / 21
1.5 1.5 Filtrerad Signal F w (t) 1 0.5 Filtrerad Signal F w (t) 1 0.5 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Tid t [s] 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Tid t [s] Resultatet efter filtrering med W = 5 (till vänster) och W = 10 (till höger). Mer filtrering ger en jämnare signal. 27 januari 2016 Sida 21 / 21