datenum, hold on, axis, datestr, floor, now, title, xlabel, ylabel, plot, size, text, num2str, legend, grid, hold off, print.

Samankaltaiset tiedostot
SIMULINK S-funktiot. SIMULINK S-funktiot

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Zeon PDF Driver Trial

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

f[x i ] = f i, f[x i,..., x j ] = f[x i+1,..., x j ] f[x i,..., x j 1 ] x j x i T n+1 (x) = 2xT n (x) T n 1 (x), T 0 (x) = 1, T 1 (x) = x.

Matlabin perusteita Grafiikka

Koodaa tehtävän ratkaisu Matlab-ohjelmaa hyväksi käyttäen. Ratkaisumenetelminä käytä Newtonin menetelmää ja sekanttimenetelmää.

FinFamily PostgreSQL installation ( ) FinFamily PostgreSQL

Salasanan vaihto uuteen / How to change password

Harjoitus 1: Matlab. Harjoitus 1: Matlab. Mat Sovelletun matematiikan tietokonetyöt 1. Syksy 2006

Operatioanalyysi 2011, Harjoitus 3, viikko 39

Matriisit ovat matlabin perustietotyyppejä. Yksinkertaisimmillaan voimme esitellä ja tallentaa 1x1 vektorin seuraavasti: >> a = 9.81 a = 9.

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

The CCR Model and Production Correspondence

Operatioanalyysi 2011, Harjoitus 2, viikko 38

Efficiency change over time

Bootstrap / HTDP2 / Realm of Racket. Vertailu

Mat-1.C Matemaattiset ohjelmistot

RINNAKKAINEN OHJELMOINTI A,

Capacity Utilization

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

Exercise 1. (session: )

Matlabperusteita, osa 1. Heikki Apiola Matlab-perusteita, osa 1. Heikki Apiola. 12. maaliskuuta 2012

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Matemaattiset ohjelmistot A. Osa 2: MATLAB

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Johdantoa. Jokaisen matemaatikon olisi syytä osata edes alkeet jostakin perusohjelmistosta, Java MAPLE. Pascal MathCad

Returns to Scale II. S ysteemianalyysin. Laboratorio. Esitelmä 8 Timo Salminen. Teknillinen korkeakoulu

Teknillinen tiedekunta, matematiikan jaos Numeeriset menetelmät

Säätötekniikan laboratorio Infotech Oulu ja Prosessitekniikan osasto

Makrojen mystinen maailma lyhyt oppimäärä

Harjoitus 4: Matlab - Optimization Toolbox

TL5503 DSK, laboraatiot (1.5 op) Suodatus 2 (ver 1.0) Jyrki Laitinen

Information on preparing Presentation

ELEC-C5210 Satunnaisprosessit tietoliikenteessä Harjoitus M1,

Selvitä, mitä koodi tekee sekä kommentoi ja täydennä koodi. Työn arvostelussa kiinnitän erityistä huomiota työn raportoinnin kattavuuteen.

031075P MATEMATIIKAN PERUSKURSSI II 5,0 op

S SÄHKÖTEKNIIKKA JA ELEKTRONIIKKA

Harjoitus 7 -- Ratkaisut

812336A C++ -kielen perusteet,

Tieteellinen laskenta 2 Törmäykset

Loppukurssin järjestelyt

Harjoitus 10: Mathematica

Choose Finland-Helsinki Valitse Finland-Helsinki

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

SIMULINK 5.0 Harjoitus. Matti Lähteenmäki

L9: Rayleigh testi. Laskuharjoitus

Talousmatematiikan perusteet: Luento 17. Osittaisintegrointi Sijoitusmenettely

TEKNILLINEN KORKEAKOULU Systeemianalyysin laboratorio. Kimmo Berg. Mat Optimointioppi. 9. harjoitus - ratkaisut

1. SIT. The handler and dog stop with the dog sitting at heel. When the dog is sitting, the handler cues the dog to heel forward.

Hieman linkkejä: lyhyt ohje komentoriviohjelmointiin.

HSC-ohje laskuharjoituksen 1 tehtävälle 2

On instrument costs in decentralized macroeconomic decision making (Helsingin Kauppakorkeakoulun julkaisuja ; D-31)

Harjoitus 5 (viikko 41)

Laskennallisesti Älykkäät Järjestelmät. Sumean kmeans ja kmeans algoritmien vertailu

Toppila/Kivistö Vastaa kaikkin neljään tehtävään, jotka kukin arvostellaan asteikolla 0-6 pistettä.

Harjoitus 6 (viikko 42)

Loppukurssin järjestelyt C:n edistyneet piirteet

Numeerinen analyysi Harjoitus 3 / Kevät 2017

Algoritmit C++ Kauko Kolehmainen

I. Principles of Pointer Year Analysis

Harjoitus 5: Simulink

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

The Viking Battle - Part Version: Finnish

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Numeerinen integrointi ja derivointi

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

OPINTOJAKSOJA KOSKEVAT MUUTOKSET/MATEMATIIKAn JA FYSIIKAN LAITOS LUKUVUOSI

FinFamily Installation and importing data ( ) FinFamily Asennus / Installation

CLT255: Tulosten esittäminen ja niiden arviointi tilastomenetelmillä

Tilastolliset ohjelmistot A. Pinja Pikkuhookana

031075P MATEMATIIKAN PERUSKURSSI II 5,0 op

OPINTOJAKSOJA KOSKEVAT MUUTOKSET/MATEMATIIKAN JA FYSIIKAN LAITOS/ LUKUVUOSI

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

HARJOITUS- PAKETTI A

Metsälamminkankaan tuulivoimapuiston osayleiskaava

TAMPEREEN TEKNILLINEN YLIOPISTO

Numeerinen analyysi Harjoitus 1 / Kevät 2017

Ohjelmointikielet ja -paradigmat 5op. Markus Norrena

14. Hyvä ohjelmointitapa 14.1

Introduction to Mathematical Economics, ORMS1030

Lab SBS3.FARM_Hyper-V - Navigating a SharePoint site

Luento 5. Timo Savola. 28. huhtikuuta 2006

Kvanttilaskenta - 1. tehtävät

Tässä dokumentissa on ensimmäisten harjoitusten malliratkaisut MATLABskripteinä. Voit kokeilla itse niiden ajamista ja toimintaa MATLABissa.

z muunnos ja sen soveltaminen LTI järjestelmien analysointiin

Harjoitus 2 (viikko 45)

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Harjoitus 4 -- Ratkaisut

Harjoitus 6. Käytä String-luokasta vain charat- ja length-operaatioita.

pisteet Frekvenssi frekvenssi Yhteensä

Java-kielen perusteet

Harjoitus 6 (viikko 42)

Network to Get Work. Tehtäviä opiskelijoille Assignments for students.

Uusi Ajatus Löytyy Luonnosta 4 (käsikirja) (Finnish Edition)

Ohjelmoinnin perusteet Y Python

Pakettisynkronointitestauksen automaatio

T Sovellusohjelmat Matlab osa 4: Skriptit, funktiot ja kontrollirakenteet

Käytettävyys ja käyttäjätutkimus. Yhteisöt ja kommunikaatiosuunnittelu 2012 / Tero Köpsi

Transkriptio:

477033A, Ohjelmointi ja Matlab (Programming in Matlab), 4 op / 2.5 ov Opettaja (Teacher): TkT Juha Jaako Työstä tehdään työselostus, joka palautetaan 15.9.2009 klo 16:00 mennessä sähköpostin liitetiedostona (yksi pdf-tiedosto) osoitteeseen juha.jaako@oulu.fi. 1 Tehtävä (Problem) Opintopolku (Study path time vs. credits) Oman opintopolun graafinen esitys (aika vs. opintopisteet). Oman opintosuoritusotteesi saat weboodista (https://weboodi.oulu.fi/oodi/). Tehtäväsi on tehdä Matlab-koodi, joka tekee seuraavanlaisen kuvan, joka taas on esimerkki Matti Meikäläisen opintopolusta. Datapisteinä käytät omia tietojasi. Seuraavien Matlabin valmiiden funktioiden ja komentojen käytöstä on apua tehtävän teossa: datenum, hold on, axis, datestr, floor, now, title, xlabel, ylabel, plot, size, text, num2str, leg, grid, hold off, print. Tehtävässä harjoitellaan seuraavia asioita: datan kerääminen, datan käsittely, datan käsittelyrutiinin koodaaminen sekä tulosten esittäminen graafisesti.

% Meikalainen.m % Meikäläinen Matti - Opintopolku % 12.8.2009 - Juha Jaako % 2.9.2009 - toimii myös vuoden 1999 versiossa clear all ; format compact ; % Optimipolku - 60 op/a. opt_px = [ datenum(2005,9,1), datenum(2006,9,1), datenum(2007,9,1), datenum(2008,9,1)... ] - datenum(2005, 9, 1) ; opt_py = [ 0, 60, 120, 180 ] ; % KELA-tuen edellyttämä polku - 43.2 op/a. KELA_px = [ datenum(2005,9,1), datenum(2006,9,1), datenum(2007,9,1),... datenum(2008,9,1), datenum(2009,9,1)... ] - datenum(2005, 9, 1) ; KELA_py = [ 0, 43.2, 2*43.2, 3*43.2, 4*43.2 ] ; % Päivämäärä ja opintopistekertymä - Meikalainen. Meikalainenx = [... datenum(2005,9,1), datenum(2005,9,20), datenum(2005,11,30), datenum(2005,12,5),... datenum(2005,12,13), datenum(2005,12,15), datenum(2005,12,19),... datenum(2006,1,27), datenum(2006,2,15), datenum(2006,2,21), datenum(2006,2,21),... datenum(2006,4,6), datenum(2006,4,26), datenum(2006,5,3),... datenum(2006,5,15), datenum(2006,5,19),... datenum(2006,11,1), datenum(2006,11,25), datenum(2006,12,10),... datenum(2006,12,19), datenum(2006,12,22),... datenum(2007,1,15), datenum(2007,1,16), datenum(2007,3,2), datenum(2007,3,5),... datenum(2007,3,23), datenum(2007,4,14), datenum(2007,4,16), datenum(2007,5,22),... datenum(2007,6,16),... datenum(2008,1,30), datenum(2008,3,12), datenum(2008,3,14), datenum(2008,3,17),... datenum(2008,3,18), datenum(2008,4,4), datenum(2008,4,9),... datenum(2008,4,10), datenum(2008,4,11), datenum(2008,4,30), datenum(2008,5,27),... datenum(2008,10,10), datenum(2008,10,17), datenum(2008,11,15), datenum(2008,11,21)... ] - datenum(2005,9,1) ; Meikalaineny = [ 0, 4, 9, 12, 16, 17, 19,... 20.5, 25.5, 27.5, 31.5,... 34.5, 37.5, 40.5, 42.5, 47.5,... 52.5, 56, 59, 61, 66,... 69, 71, 75, 79, 80, 85, 90, 92, 97,... 100, 102, 106, 111, 116, 119, 122, 125, 129, 137, 142,... 145, 150, 153, 157 ] ; hold on ; axis ( [ 0, (datenum(2009,9,1)-datenum(2005,9,1)), 0, 180] ) ; tanaan = datestr (floor(now), 1) ; title ( ['Meikäläinen : opintopolku ' tanaan ' mennessä'] ) ; xlabel ('\itpäiviä opiskelun alkamisesta') ; ylabel ('\itopintopisteet') ; % Plotataan opintopolku. plot (opt_px, opt_py, 'b-', KELA_px, KELA_py, 'r-', Meikalainenx, Meikalaineny, 'k.-') ; d = size (Meikalainenx, 2); text (Meikalainenx(d), Meikalaineny(d),... [' \leftarrow Meikäläinen (' num2str(meikalaineny(d)) ' op)'] ) ; leg ('60 op/a', '43.2 op/a', 'Meikäläinen', 2) grid ; hold off ; print -tiff -deps2 c:\tmp\meikalainen ;

1 477033A, Ohjelmointi ja Matlab (Programming in Matlab), 4 op / 2.5 ov Opettaja (Teacher): juha.jaako@oulu.fi Työstä tehdään työselostus, joka palautetaan ti 22.9.2009 klo 16:00 mennessä sähköpostin liitetiedostona osoitteeseen juha.jaako@oulu.fi. 2 Tehtävä (Problem) Simulointi (Simulation) Kolmen sarjassa olevan, isotermisen reaktorin simulointi. Liitteessä on skannattuna tehtävän taustamäärittely (Luyben, W.L. (1990) Process modeling, simulation and control for chemical engineers. 2 nd ed. McGraw-Hill: New York, NY.). Luvussa 3.2 on esitetty mallin muodostamisen periaate ja luvussa 5.2 on esitetty mallista tehty tietokonemalli, joka on koodattu Fortran77- ohjelmointikielellä. Ohjelmointityössä tulee kohtalaisen usein eteen tilanne, jossa tarvitaan laskentarutiini, joka ei olekaan tarjolla käytettävässä työskentely-ympäristössä. Tällöin tarvitaan käännös kielestä toiseen. Tehtäväsi on tehdä Matlab-koodi, joka laskee samat asiat kuin luvussa 5.2 on esitetty (laskenta lopetetaan kuitenkin vasta kuuden minuutin kohdalla); lisäksi laskentatulokset on esitettävä graafisesti (ks. tehtävä 1) taulukkomuodon lisäksi. Simuloinnissa käytetään apuna numeerista integrointia ja menetelmänä on Eulerin menetelmä (ks. opintojakso Numeeriset menetelmät ). Mikäli et ymmärrä Fortran77 koodia suoraan, niin lyhyt opas aiheeseen on osoitteessa http://www.star.le.ac.uk/~cgp/prof77.html. Seuraavien Matlabin valmiiden funktioiden (tai komentojen) käytöstä on apua tehtävän teossa: clear all, hold on, while..., disp, for..., sprintf, plot, title, xlabel, ylabel, grid, hold off, print. Tehtävässä harjoitellaan seuraavia asioita: prosessimallin muodostaminen, mallin koodaaminen kielestä toiseen, differentiaaliyhtälön numeerinen ratkaisu (Eulerin menetelmä) sekä tulosten esittäminen taulukkomuodossa ja graafisesti.

2 % lcs120.m % Luyben, Process modeling, simulation and control for chemical engineers, 2nd ed. s. 120 % (c) Juha Jaako 13.04.1999 & 16.03.2000 & 12.8.2009 % Disturbance is a step change in feed concentration at time % equal zero from 0.8 to 1.8 moles of A/m^3. % Time is in minutes. clear all ; % Initial conditions. time(1) = 0 ; CA1(1) = 0.4 ; CA2(1) = 0.2 ; CA3(1) = 0.1 ; CA0 = 1.8 ; % Parameter values. tau = 2 ; k = 0.5 ; delta = 0.1 ; tprint = 0 ; hold on ; i = 1 ; % Evaluate derivatives. while (time (i) < 5.9), CA1dot = (CA0 -CA1(i))/tau - k*ca1(i) ; CA2dot = (CA1(i)-CA2(i))/tau - k*ca2(i) ; CA3dot = (CA2(i)-CA3(i))/tau - k*ca3(i) ; % Euler integration with a step size delta. CA1(i+1) = CA1(i) + CA1dot*delta ; CA2(i+1) = CA2(i) + CA2dot*delta ; CA3(i+1) = CA3(i) + CA3dot*delta ; time(i+1) = time(i) + delta ; i = i + 1 ; % Print simulation results. disp (' time CA1 CA2 CA3') ; for j = 1 : i, tul = sprintf ('%8.3f %8.3f %8.3f %8.3f',... time(j), CA1(j), CA2(j), CA3(j)) ; disp (tul) ; %... and plot 'em. plot (time, CA1, 'k.-',... time, CA2, 'r.-',... time, CA3, 'b.-') ; text (time(i), CA1(i), ' \it{c_{a1}}') ; text (time(i), CA2(i), ' \it{c_{a2}}') ; text (time(i), CA3(i), ' \it{c_{a3}}') ; title ( ['Three Isothermal CSTR - step change from 0.8 to 1.8'] ) ; xlabel ('\ittime [minutes]') ; ylabel ('\itconcentration [mol/m^3]') ; grid ; hold off ; print -tiff -deps2 d:\tmp\tehtava_2 ;

>> lcs120 time 0.000 CA1 0.400 CA2 0.200 CA3 0.100 0.100 0.450 0.200 0.100 0.200 0.300 0.495 0.535 0.203 0.207 0.100 0.100 0.400 0.572 0.213 0.100 0.500 0.600 0.605 0.634 0.220 0.229 0.101 0.102 0.700 0.661 0.237 0.103 0.800 0.900 0.685 0.706 0.247 0.256 0.105 0.107 1.000 0.726 0.266 0.109 1.100 1.200 0.743 0.759 0.276 0.285 0.111 0.114 1.300 0.773 0.295 0.117 1.400 1.500 0.786 0.797 0.304 0.313 0.120 0.123 1.600 0.807 0.321 0.126 1.700 1.800 0.817 0.825 0.330 0.337 0.130 0.133 1.900 0.832 0.345 0.137 2.000 2.100 0.839 0.845 0.352 0.359 0.140 0.144 2.200 0.851 0.365 0.147 2.300 2.400 0.856 0.860 0.371 0.377 0.151 0.154 2.500 0.864 0.382 0.158 2.600 2.700 0.868 0.871 0.387 0.392 0.161 0.164 2.800 0.874 0.396 0.168 2.900 3.000 0.876 0.879 0.400 0.404 0.171 0.174 3.100 0.881 0.408 0.176 3.200 3.300 0.883 0.885 0.411 0.414 0.179 0.182 3.400 0.886 0.417 0.184 3.500 3.600 0.887 0.889 0.419 0.422 0.187 0.189 3.700 0.890 0.424 0.191 3.800 3.900 0.891 0.892 0.426 0.428 0.193 0.195 4.000 0.893 0.430 0.197 4.100 4.200 0.893 0.894 0.432 0.433 0.199 0.201 4.300 0.895 0.434 0.202 4.400 4.500 0.895 0.896 0.436 0.437 0.204 0.205 4.600 0.896 0.438 0.206 4.700 4.800 0.896 0.897 0.439 0.440 0.208 0.209 4.900 0.897 0.441 0.210 5.000 5.100 0.897 0.898 0.442 0.442 0.211 0.212 5.200 0.898 0.443 0.213 5.300 5.400 0.898 0.898 0.444 0.444 0.214 0.215 5.500 0.898 0.445 0.215 5.600 5.700 0.899 0.899 0.445 0.445 0.216 0.217 5.800 0.899 0.446 0.217 5.900 6.000 0.899 0.899 0.446 0.447 0.218 0.218 3

4

5 % lcs120_1.m % Luyben, Process modeling, simulation and control for chemical engineers, % 2nd ed. s. 120 % (c) Juha Jaako 13.04.1999 & 16.03.2000 & 12.8.2009 & 18.9.2009 % Disturbance is a step change in feed concentration at time % equal zero from 0.8 to 1.8 moles of A/m^3. % Time is in minutes. clear all ; hold on ; % Initial conditions. time = 0 ; CA1 = 0.4 ; CA2 = 0.2 ; CA3 = 0.1 ; CA0 = 1.8 ; % Parameter values. tau = 2 ; k = 0.5 ; delta = 0.1 ; % Print simulation results. disp ('*** Print simulation results ***') ; disp (' time CA1 CA2 CA3') ; % Evaluate derivatives. while (time <= 6), CA1dot = (CA0-CA1)/tau - k*ca1 ; CA2dot = (CA1-CA2)/tau - k*ca2 ; CA3dot = (CA2-CA3)/tau - k*ca3 ; s1 = sprintf ('%8.3f %8.3f %8.3f %8.3f', time, CA1, CA2, CA3) ; plot (time, CA1, 'k.', time, CA2, 'r.', time, CA3, 'b.') ; disp (s1) ; % Euler integration with a step size delta. CA1 = CA1 + CA1dot*delta ; CA2 = CA2 + CA2dot*delta ; CA3 = CA3 + CA3dot*delta ; time = time + delta ; title ( ['Three Isothermal CSTR - step change from 0.8 to 1.8'] ) ; xlabel ('\it Time [minutes]') ; ylabel ('\it Concentration [mol/m^3]') ; grid ; hold off ; print -tiff -deps2 d:\tmp\tehtava_21 ;

477033A, Ohjelmointi ja Matlab (Programming in Matlab), 4 op / 2.5 ov Opettaja (Teacher): juha.jaako@oulu.fi Työstä tehdään työselostus, joka palautetaan ti 29.9.2009 klo 16:00 mennessä (juha.jaako@oulu.fi). 3 Tehtävä Liukuva keskiarvo (keskiarvosuodin) Central moving average Ohjelmointityössä tulee joskus eteen tilanne, jossa valmiit kirjastofunktiot tai muut laskentarutiinit eivät sovellu tilanteeseen. Tällöin on koodattava oma laskurutiini. Monesti mittaustuloksista saatava data ei sellaisenaan ole käyttökelpoista johtopäätösten tekoa varten, esim. voimakkaan oskilloinnin takia. Tarvitaan suodatin. Seuraavassa on osastolta valmistuneiden diplomi-insinöörien, lisensiaattien ja tohtoreiden määrät datavektoreina: % Datavektorit. vuosi = [ 1964 : 1 : 2008 ] ; DI = [ 2, 8, 12, 10, 6, 12, 12, 13, 19, 35, 25, 34, 21, 28, 37,... 33, 42, 23, 33, 30, 25, 14, 22, 28, 25, 27, 34, 38, 44, 64,... 47, 44, 62, 41, 46, 53, 51, 60, 72, 85, 79, 79, 85, 83, 105 ] ; TkL = [ 0, 0, 2, 1, 0, 0, 2, 2, 2, 3, 4, 1, 3, 1, 2, 6, 2, 0, 5, 0,... 6, 6, 4, 5, 1, 3, 4, 4, 4, 2, 7, 5, 4, 2, 9, 7, 3, 4, 5, 2,... 1, 2, 2, 0, 1 ] ; TkT = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,... 2, 1, 0, 0, 1, 1, 0, 2, 1, 1, 1, 1, 4, 3, 5, 4, 2, 8, 3, 7,... 5, 4, 11, 8, 3 ] ; Tehtäväsi on tehdä Matlab-koodi, joka suodattaa annetun datan (kaikki kolme datavektoria!) käyttämällä liukuvaa keskiarvoa. Liukuvan keskiarvon laskennassa käytetään seuraavaa menetelmää (Laine, J. (1997) Prosessilaskennan matemaattiset apuneuvot. Tampere. ISBN 952-90-8589-3. s. 105) : C isuod,. = ( C + C + C + C + C ) min ( C ) max ( C ) i 2 i 1 i i+ 1 i+ 2 i: 2 2 i: 2 2 Eli valitaan viisi originaaliarvoa, niistä minimi ja maksimi hylätään ja lopuista lasketaan aritmeettinen keskiarvo kolmella jakamalla. Mitä voit päätellä suodatetun datan avulla valmistumismäärien treistä (DI, TkL, TkT)? Seuraavien Matlabin valmiiden funktioiden (tai komentojen) käytöstä on apua tehtävän teossa: clear all ; format compact ; hold on ; size, if elseif else, for, sum, min, max, title, plot, xlabel, ylabel, grid, hold off, print. Tehtävässä harjoitellaan seuraavia asioita: mittausdatan syöttäminen, suodattimen koodaaminen, suodatus, tulosten esittäminen graafisesti (alkuperäiset pisteet sekä suodattimen läpi tulleet pisteet) sekä tulosten tulkinta. 3

% liukuva.m % Liukuvan keskiarvon laskenta - datana osastolta valmistuneiden % diplomi-insinöörien, lisensiaattien sekä tohtoreiden määrät % (c) Juha Jaako 14.8.2009 clear all ; format compact ; % Datavektorit. vuosi = [ 1964 : 1 : 2008 ] ; DI = [ 2, 8, 12, 10, 6, 12, 12, 13, 19, 35, 25, 34, 21, 28, 37,... 33, 42, 23, 33, 30, 25, 14, 22, 28, 25, 27, 34, 38, 44, 64,... 47, 44, 62, 41, 46, 53, 51, 60, 72, 85, 79, 79, 85, 83, 105 ] ; TkL = [ 0, 0, 2, 1, 0, 0, 2, 2, 2, 3, 4, 1, 3, 1, 2, 6, 2, 0, 5, 0,... 6, 6, 4, 5, 1, 3, 4, 4, 4, 2, 7, 5, 4, 2, 9, 7, 3, 4, 5, 2,... 1, 2, 2, 0, 1 ] ; TkT = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,... 2, 1, 0, 0, 1, 1, 0, 2, 1, 1, 1, 1, 4, 3, 5, 4, 2, 8, 3, 7,... 5, 4, 11, 8, 3 ] ; hold on ; % Jos 'lippu=1' niin DI:t, jos 'lippu=2' TkL:t ja jos 'lippu=3' TkT:t. lippu = 3 ; % Tilanteesta riippuen. if (lippu == 1), x = DI ; s1 = [ 'DI' ] ; elseif (lippu == 2), x = TkL ; s1 = [ 'TkL' ] ; elseif (lippu == 3), x = TkT ; s1 = [ 'TkT' ] ; else disp ('Virhe') ; break ; % Liukuvan keskiarvon laskenta. % Liukuvaa keskiarvoa kuvaavat datapisteet talletetaan vektoriin liuk % Ensiksi lasketaan datavektorin pituus. [M,N] = size (vuosi) ; % N = vektorin pituus % Kahden ensimmäisen datapisteen laskenta. liuk(1) = x(1) ; % Piste itse. liuk(2) = (x(1) + x(2)) / 2 ; % Aritmeettinen keskiarvo % Lasketaan muut datapisteet. for i = 3 : (N-2), tmp = [ x(i-2), x(i-1), x(i), x(i+1), x(i+2) ] ; liuk(i) = ( sum(tmp) - max(tmp) - min(tmp) ) / 3 ; % Kahden viimeisen datapisteen laskenta. liuk(n-1) = (x(n) + x(n-1)) / 2 ; liuk(n) = x(n) ; % Kuvan piirtäminen. if (lippu == 1), title ( ['Valmistuneet diplomi-insinöörit, ' num2str(sum(x)) ] ) ; plot (vuosi, DI, 'ko:', vuosi(1:n-1), liuk(1:n-1), 'k-') ; elseif (lippu == 2), title ( ['Valmistuneet tekniikan lisensiaatit, ' num2str(sum(x)) ] ) ; plot (vuosi, TkL, 'ko:', vuosi(1:n-1), liuk(1:n-1), 'k-') ; elseif (lippu == 3), title ( ['Valmistuneet tohtorit, ' num2str(sum(x)) ] ) ; plot (vuosi, TkT, 'ko:', vuosi(1:n-1), liuk(1:n-1), 'k-') ; else disp ('Virhe') ; break ; xlabel ('Vuosi') ; ylabel ('Määrä') ; grid ; hold off ; tiedosto = [ 'd:\tmp\valmistuneet_' s1 ] ; print ('-tiff', '-deps2', tiedosto) ;

477033A, Ohjelmointi ja Matlab (Programming and Matlab), 4 op / 2.5 ov Opettaja (Teacher): Juha Jaako Työstä tehdään työselostus, joka palautetaan ma 5.10.2009 klo 16:00 mennessä (juha.jaako@oulu.fi). Appices: 04_Levenspiel_107-113.pdf & 04_Kreyszig_960-963.pdf 4 Problem Plug flow reactor performance (see also 04_Levenspiel_107-113.pdf) A homogeneous gas reaction A 3 R has a reported rate at 215 o C r mol C ls 2 ½ A = 10 A, (1) Find the space-time needed for 80% conversion of a 50% A 50% inert feed to a plug flow reactor 215 o C C 0 = 0.0625 mol/ l operating at and 5 atm ( ). A For this stoichiometry and with 50% inerts two volumes of feed gas would give four volumes of completely converted product gas, thus ε A 4 2 = = 1 (2) 2 in which case the plug flow performance equation, Eq. 17, becomes X Af dx τ = C = C X Af dx (3.1) A A A0 A0 ½ r 0 A 0 ½ 1 X A kca0 1+ ε AX A ½ 0.8 C A0 1+ X A τ = k 1 X 0 A ½ dx A Evaluate the integral (3.2) by programming a Matlab m-file and using Simpson s Rule of Integration (see 04_Kreyszig_960-963.pdf). Also, using the program just created find out what is the space-time when X Af = 0.90, X Af = 0.95 and X Af = 1.0? Using Matlab code create a figure which clarifies the problem you solved. (3.2) Useful Matlab commands and functions: clear all, format compact, zeros, for, sqrt, hold on, axis, fplot, line, title, xlabel, ylabel, sprintf, grid, hold off, print What are we practicing here? Programming a computational algorithm (Simpson s rule) using Matlab, using program code to design a plug flow reactor.

>> Reactor_performance J = 1.3274 tau = 33.1841

% Reactor_performance.m % 15.12.1998 & 31.8.2009 (c) Juha Jaako % Kreyszig E, Advanced engineering mathematics. p. 960-963. % 7th Edition (1993) % Levenspiel O, Chemical reaction engineering. p. 111-113. % 2nd Edition (1972) % Simpson's Rule of Integration & Plug flow reactor performance clear all ; format compact ; % Reaction parameters. CA0 = 0.0625 ; % [mol/l] k = 10^(-2) ; % [ (mol^(1/2)) / ( n(l^(1/2)) s ) ] % Integration parameters a = 0.0 ; % Interval of integration, start. b = 0.8 ; % Interval of integration,. m2 = 12 ; % Number of subintervals, even number. h = (b-a)/m2 ; % Subinterval length. % Compute function values at all interval points. f = zeros (m2+1, 1) ; for i = 0 : m2, XA = a + h*i ; f(i+1) = sqrt ( (1+XA) / (1-XA) ) ; % Compute Simpson's s0, s1 and s2. s0 = f(1) + f(m2+1) ; s1 = 0 ; for i = 1 : 2 : (m2-1), s1 = s1 + f(i+1) ; s2 = 0 ; for i = 2 : 2 : (m2-2), s2 = s2 + f(i+1) ; % Value of numerical integral - Simpson's rule. J = (h/3)*(s0 + 4*s1 + 2*s2) vakio = ( sqrt(ca0) / k) ; tau = vakio*j % Function plot. hold on ; axis ( [0 1 0 3.5] ) ; fplot ('sqrt((1+x)/(1-x))', [0 1.0] ) ; line ( [ b b ], [ 0 (sqrt((1+b)/(1-b))) ] ) ; title ( 'Plug Flow Reactor Performance') ; xlabel ('X_A') ; ylabel ('sqrt((1+x_{a})/(1+x_{a}))') ; stau = sprintf('%5.1f',tau) ; text (0.25, 0.75, ['\tau = ' stau ' s' ]) ; grid ; hold off ; print -tiff -deps2 d:\tmp\ex_4_2009 ;

Matlabissa on myös valmiita numeerisia integraattoreita. Käytetään tässä quad -funktiota. Voit käyttää myös quad8 -funktiota sekä (uusissa versioissa) quadl -funktiota. % paaohjelma_41.m % Ratkaisee tehtävän 4 - Ohjelmointi ja Matlab 2009 % 15.12.1998 & 31.8.2009 (c) Juha Jaako % Levenspiel O, Chemical reaction engineering. p. 111-113. % 2nd Edition (1972) % Plug flow reactor performance clear all ; format compact ; hold on ; % Reaction parameters. CA0 = 0.0625 ; k = 10^(-2) ; vakio = ( sqrt (CA0) / k) ; % Loppukonversiot. XAf = [ 0.8, 0.9, 0.95, 0.999 ] ; for i = 1 : 4, % Käytetään Matlabissa olevaa 'quad'-funktiota. J = quad ('putkireaktori_4', 0, XAf(i)) ; tau(i) = vakio * J ; plot (XAf(i), tau(i), 'o' ) ; disp ( [ ' XAf tau' ] ) ; disp ( [ XAf' tau' ] ) ; % XAf vs. tau -kuvaaja. x = 0.01 : 0.01 : 0.99 ; [N, M] = size (x) ; for i = 1 : M, J = quad ('putkireaktori_4', 0, x(i)) ; tau(i) = vakio * J ; plot (x, tau, '-') ; grid ; xlabel ('X_{Af}' ) ; ylabel ('\tau') ; hold off ; print ('-tiff', '-deps2', 'd:\tmp\ex_41_2009') ; Lisäksi tarvitaan funktio, joka laskee integroitavan function arvoja. % putkireaktori_4.m % 15.12.1998, 31.8.2009 & 5.10.2009 (c) Juha Jaako % Huom. x & f ovat vektoreita. function f = putkireaktori_4 (x) f = ((1+x)./(1-x)).^(0.5) ;

>> paaohjelma_41 XAf tau 0.8000 33.1824 0.9000 42.0970 0.9500 48.5247 0.9990 62.0340

477033A, Ohjelmointi ja Matlab (Programming and Matlab), 4 op / 2.5 ov Opettaja (Teacher): Juha Jaako Työstä tehdään työselostus, joka palautetaan ke 7.10.2009 klo 16:00 mennessä (juha.jaako@oulu.fi). 5 Tehtävä (Problem 5) a) Muunna tehtävän 1 koodi funktioksi nimeltään Optimipolku. Kutsuva pääohjelma (esimerkki) on seuraavanlainen (käytät luonnollisesti omia datapisteitäsi ja omaa nimeäsi): % Paaohjelma_1.m % Meikäläinen Matti - Opintopolku % Päivämäärä, opintopistekertymä ja aloituspäivä - Meikäläinen. x = [ datenum(2005,9,1), datenum(2008,11,21)] - datenum(2005,9,1) ; y = [ 0, 4,, 153, 157 ] ; aloituspaiva = [ 2005, 9, 1] ; Optimipolku (x, y, 'Meikäläinen', aloituspaiva) ; Muunna tehtävän 3 koodi funktioksi nimeltään Liukuva_ka. Kutsuva pääohjelma (esimerkki) on seuraavanlainen (tehtävä suoritetaan luonnollisesti kaikille datoille: DI, TkL & TkT). % Paaohjelma_3.m % Liukuvan keskiarvon laskenta % Datavektori - valmistuneet diplomi-insinöörit. vuosi = [ 1964 : 1 : 2008 ] ; DI = [ 2, 8,, 83, 105 ] ; teksti = [ 'diplomi-insinöörit' ] ; maara = sum (DI) ; Liukuva_ka (vuosi, DI, teksti, maara ) ; (Transform the code presented in problems 1 and 3 into Matlab functions. Syntax is presented above.) b) Tee Matlab-ohjelma, joka tarkistaa, onko annettu merkkijono palindromi (http://fi.wikipedia.org/wiki/palindromi). Esimerkkejä palindromeista löytyy eo. linkistä. Ohjelman tulee myös todeta, että seuraavat merkkijonot ovat palindromeja: - Atte kumiorava, varo imuketta!! - Saippuakivikauppias - Madam, I m Adam (Create a Matlab program which checks whether a given string is a Palindrome or not.) Tässä tehtävässä ei anneta vihjeitä sopivien komentojen ja funktioiden käytöstä. Tehtävässä harjoitellaan seuraavia asioita: a) olemassa olevan koodin muuttaminen yleiskäyttöiseksi funktioksi, b) yksinkertaisen algoritmin koodaaminen.

a) Tehtävässä muutetaan koodi toiseen muotoon. Ohjelmointityössä erittäin paljon muokataan olemassa olevia ohjelmia hiukan toisenlaisiksi. Yleensä ohjelmat rakennetaan siten, että otetaan koodinpätkä ja ruvetaan sen ympärille rakentamaan uutta ohjelmaa. a1) % Paaohjelma_1.m % Meikäläinen Matti - Opintopolku % Alkuperäinen ohjelma on muutettu kutsuvaksi pääohjelmaksi. % 12.8.2009 & 1.9.2009 - Juha Jaako % Päivämäärä ja opintopistekertymä - Meikalainen. x = [... datenum(2005,9,1), datenum(2005,9,20), datenum(2005,11,30), datenum(2005,12,5),... datenum(2005,12,13), datenum(2005,12,15), datenum(2005,12,19),... datenum(2006,1,27), datenum(2006,2,15), datenum(2006,2,21), datenum(2006,2,21),... datenum(2006,4,6), datenum(2006,4,26), datenum(2006,5,3),... datenum(2006,5,15), datenum(2006,5,19),... datenum(2006,11,1), datenum(2006,11,25), datenum(2006,12,10),... datenum(2006,12,19), datenum(2006,12,22),... datenum(2007,1,15), datenum(2007,1,16), datenum(2007,3,2), datenum(2007,3,5),... datenum(2007,3,23), datenum(2007,4,14), datenum(2007,4,16), datenum(2007,5,22),... datenum(2007,6,16),... datenum(2008,1,30), datenum(2008,3,12), datenum(2008,3,14), datenum(2008,3,17),... datenum(2008,3,18), datenum(2008,4,4), datenum(2008,4,9),... datenum(2008,4,10), datenum(2008,4,11), datenum(2008,4,30), datenum(2008,5,27),... datenum(2008,10,10), datenum(2008,10,17), datenum(2008,11,15), datenum(2008,11,21)... ] ; y = [ 0, 4, 9, 12, 16, 17, 19, 20.5, 25.5, 27.5, 31.5,... 34.5, 37.5, 40.5, 42.5, 47.5, 52.5, 56, 59, 61, 66,... 69, 71, 75, 79, 80, 85, 90, 92, 97, 100, 102, 106,... 111, 116, 119, 122, 125, 129, 137, 142, 145, 150,... 153, 157 ] ; Optimipolku (x, y, 'Meikalainen', [ 2005, 9, 1] ) ; Ja yleiskäyttöinen funktio % Optimipolku.m % Meikäläinen Matti - Opintopolku % Alkuperäinen ohjelma on muutettu funktioksi. % 12.8.2009 & 1.9.2009 - Juha Jaako function f = Optimipolku (x, y, nimi, alku) % Puretaan vektorista päiväys v = alku(1) ; kk = alku(2) ; p = alku(3) ; % Vähennetään aloituspäivä. x = x - datenum(v,kk,p) ; % Optimipolku - 60 op/a. opt_px = [ datenum(v,kk,p), datenum(v+1,kk,p), datenum(v+2,kk,p), datenum(v+3,kk,p)... ] - datenum(v,kk,p) ; opt_py = [ 0 : 60 : 180 ] ; % KELA-tuen edellyttämä polku - 43.2 op/a. KELA_px = [ datenum(v,kk,p), datenum(v+1,kk,p), datenum(v+2,kk,p),... datenum(v+3,kk,p), datenum(v+4,kk,p)... ] - datenum(v,kk,p) ; KELA_py = [ 0 : 43.2 : 4*43.2 ] ; hold on ; axis ( [ 0, (datenum(v+4,kk,p)-datenum(v,kk,p)), 0, 180] ) ; tanaan = datestr(now,1) ; title ( [ nimi ' : opintopolku ' tanaan ' mennessä'] ) ; xlabel ('\itpäiviä opiskelun alkamisesta') ; ylabel ('\itopintopisteet') ; % Plotataan opintopolku. plot (opt_px, opt_py, 'b-', KELA_px, KELA_py, 'r-', x, y, 'k.-') ; d = size (x, 2); text (x(d), y(d),... [' \leftarrow ' nimi '(' num2str(y(d)) ' op)'] ) ; leg ('60 op/a', '43.2 op/a', nimi, 2) grid ; hold off ; tiedosto = [ 'd:\tmp\' nimi ] ; print ('-tiff', '-deps2', tiedosto) ; f = 1 ;

a2) Liukuvan keskiarvon laskenta. % Paaohjelma_3.m % Liukuvan keskiarvon laskenta - datana osastolta valmistuneiden % diplomi-insinöörien määrä % (c) Juha Jaako 14.8.2009, pääohjelmaksi 2.9.2009 clear all ; format compact ; % Datavektorit - valmistuneet diplomi-insinöörit, lisensiaatit ja % tohtorit. vuosi = [ 1964 : 1 : 2008 ] ; DI = [ 2, 8, 12, 10, 6, 12, 12, 13, 19, 35, 25, 34, 21, 28, 37,... 33, 42, 23, 33, 30, 25, 14, 22, 28, 25, 27, 34, 38, 44, 64,... 47, 44, 62, 41, 46, 53, 51, 60, 72, 85, 79, 79, 85, 83, 105 ] ; TkL = [ 0, 0, 2, 1, 0, 0, 2, 2, 2, 3, 4, 1, 3, 1, 2, 6, 2, 0, 5, 0,... 6, 6, 4, 5, 1, 3, 4, 4, 4, 2, 7, 5, 4, 2, 9, 7, 3, 4, 5, 2,... 1, 2, 2, 0, 1 ] ; TkT = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,... 2, 1, 0, 0, 1, 1, 0, 2, 1, 1, 1, 1, 4, 3, 5, 4, 2, 8, 3, 7,... 5, 4, 11, 8, 3 ] ; x = vuosi ; for i = 1 : 3, if i == 1, y = DI ; teksti = [ 'diplomi-insinöörit' ] ; maara = sum(di) ; elseif i == 2, y = TkL ; teksti = [ 'lisensiaatit' ] ; maara = sum(tkl) ; elseif i == 3, y = TkT ; teksti = [ 'tohtorit' ] ; maara = sum(tkt) ; else break ; Liukuva_ka (x, y, teksti, maara ) ; pause ; % Pysäyttää ohjelman suorituksen; välilyöntiä painamalla jatkuu. Ja funktio % Liukuva_ka.m % Liukuvan keskiarvon laskenta - % (c) Juha Jaako 14.8.2009, funktioksi 2.9.2009 function f = Liukuva_ka (x, y, teksti, maara ) clf ; hold on ; % Liukuvan keskiarvon laskenta. % Liukuvaa keskiarvoa kuvaavat datapisteet talletetaan vektoriin liuk % Ensiksi lasketaan datavektorin pituus. N = length (x) ; % N = vektorin pituus % Kahden ensimmäisen datapisteen laskenta. liuk(1) = mean (y(1:3)) ; liuk(2) = mean (y(1:4)) ; % Lasketaan muut datapisteet. for i = 3 : (N-2), tmp = y(i-2:i+2) ; liuk(i) = ( sum(tmp) - max(tmp) - min(tmp) ) / 3 ; % Kahden viimeisen datapisteen laskenta. liuk(n-1) = mean (y(n-3:n)) ; liuk(n) = mean (y(n-2:n)) ; % Kuvan piirtäminen. title ( ['Valmistuneet ' teksti ', ' num2str(maara) ] ) ; plot (x, y, 'ko:', x(1:n-1), liuk(1:n-1), 'k-') ; xlabel ('Vuosi') ; ylabel ('Määrä') ; grid ; hold off ; tiedosto = [ 'c:\tmp\' teksti ] ; print ('-tiff', '-deps2', tiedosto) ; f = 1 ;

b) Palindromi eräs mahdollisuus ratkaista ongelma. Matlabin tehokkaita funktioita käyttäen homma hoituu parhaimmillaan parilla rivillä. % palindromi.m % Tarkistaa, onko annettu merkkijono palindromi. % 28.9.2009 - Juha Jaako s = [ 'Atte kumiorava, varo imuketta!!' ] ; %s = [ 'Saippuakalakauppias' ] ; %s = [ 'Madam I' char(39) 'm Adam.' ] ; %disp (s) ; s = [ s '*' ] ; s = lower(s) ; pituus = max(size(s)) ; hipsu = char(39) ; % Tähti loppuun. % Pieniksi kirjaimiksi. % Merkkijonon pituus. % ' - merkki i = 1 ; while (i < pituus), % Katsotaan merkkijono merkki kerrallaan. t = s(i) ; if ( t==' ' t==',' t==';' t=='.'... t==':' t=='?' t=='!' t==hipsu ), s = [ s(1:i-1) s(i+1:pituus) ] ; % disp(s) ; pituus = pituus - 1 ; i = i - 1 ; i = i + 1 ; s = s (1:pituus-1) ; % Käännetään merkkijono toisinpäin. k = 1 ; for j = pituus-1 : -1 : 1, r(k) = s(j) ; k = k + 1 ; if (s == r), disp ('On palindromi!') ; else disp ( 'Ei ole palindromi' ) ;