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



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

Sovellettu todennäköisyyslaskenta B

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

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 7: Pienimmän neliösumman menetelmä ja Newtonin menetelmä.

mlvektori 1. Muista, että Jacobin matriisi koostuu vektori- tai skalaariarvoisen funktion F ensimmäisistä

Matriiseista. Emmi Koljonen

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

. Kun p = 1, jono suppenee raja-arvoon 1. Jos p = 2, jono hajaantuu. Jono suppenee siis lineaarisesti. Vastaavasti jonolle r k+1 = r k, suhde on r k+1

plot(f(x), x=-5..5, y= )

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

Matlabin perusteita Grafiikka

Luento 10: Optimointitehtävien numeerinen ratkaiseminen; optimointi ilman rajoitusehtoja

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

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

Ratkaisuehdotukset LH 7 / vko 47

Luento 8: Epälineaarinen optimointi

MS-C1340 Lineaarialgebra ja

Matemaattiset ohjelmistot A. Osa 2: MATLAB

Zeon PDF Driver Trial

Johdatus tekoälyn taustalla olevaan matematiikkaan

Johdatus tekoälyn taustalla olevaan matematiikkaan

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

Numeeriset menetelmät TIEA381. Luento 12. Kirsi Valjus. Jyväskylän yliopisto. Luento 12 () Numeeriset menetelmät / 33

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

Valitse ruudun yläosassa oleva painike Download Scilab.

1 Rajoittamaton optimointi

1 Komparatiivinen statiikka ja implisiittifunktiolause

Harjoitus 4: Matlab - Optimization Toolbox

Harjoitus 9: Optimointi I (Matlab)

a) Mikä on integraalifunktio ja miten derivaatta liittyy siihen? Anna esimerkki = 16 3 =

Numeeriset menetelmät

Matematiikka B2 - TUDI

MS-A0207 Differentiaali- ja integraalilaskenta 2 (Chem) Yhteenveto, osa I

Numeeriset menetelmät TIEA381. Luento 8. Kirsi Valjus. Jyväskylän yliopisto. Luento 8 () Numeeriset menetelmät / 35

1. Lineaarinen optimointi

Matematiikka B2 - Avoin yliopisto

Ei välttämättä, se voi olla esimerkiksi Reuleaux n kolmio:

Yhtälöryhmä matriisimuodossa. MS-A0007 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Numeeriset menetelmät

BM20A0900, Matematiikka KoTiB3

Luento 9: Yhtälörajoitukset optimoinnissa

= 2 L L. f (x)dx. coshx dx = 1 L. sinhx nπ. sin. sin L + 2 L. a n. L 2 + n 2 cos. tehdään approksimoinnissa virhe, jota voidaan arvioida integraalin

Differentiaali- ja integraalilaskenta 2 Laskuharjoitus 4 / vko 40

k=0 saanto jokaisen kolmannen asteen polynomin. Tukipisteet on talloin valittu

Malliratkaisut Demo 1

Talousmatematiikan perusteet: Luento 13. Rajoittamaton optimointi Hessen matriisi Ominaisarvot ja vektorit Ääriarvon laadun tarkastelu

Harjoitus 7 -- Ratkaisut

Luento 8: Epälineaarinen optimointi

Lineaariset kongruenssiyhtälöryhmät

Luento 11: Rajoitusehdot. Ulkopistemenetelmät

Oppimistavoitematriisi

FUNKTION KUVAAJAN PIIRTÄMINEN

Talousmatematiikan perusteet: Luento 14. Rajoittamaton optimointi Hessen matriisi Ominaisarvot Ääriarvon laadun tarkastelu

1 Di erentiaaliyhtälöt

Differentiaali- ja integraalilaskenta 2 (CHEM) MS-A0207 Hakula/Vuojamo Kurssitentti, 12.2, 2018, arvosteluperusteet

Tyyppi metalli puu lasi työ I II III

Numeeriset menetelmät

Matematiikan tukikurssi

Harjoitus 1 -- Ratkaisut

Harjoitus 9: Excel - Tilastollinen analyysi

Talousmatematiikan perusteet: Luento 11. Lineaarikuvaus Matriisin aste Käänteismatriisi

Matematiikan tukikurssi

Yhtälöryhmä matriisimuodossa. MS-A0004/A0006 Matriisilaskenta. Tarkastellaan esimerkkinä lineaarista yhtälöparia. 2x1 x 2 = 1 x 1 + x 2 = 5.

Johdatus tekoälyn taustalla olevaan matematiikkaan

Matriisilaskenta (TFM) MS-A0001 Hakula/Vuojamo Ratkaisut, Viikko 47, 2017

Numeeriset menetelmät TIEA381. Luento 6. Kirsi Valjus. Jyväskylän yliopisto. Luento 6 () Numeeriset menetelmät / 33

Matriisi-vektori-kertolasku, lineaariset yhtälöryhmät

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

Tieteellinen laskenta 2 Törmäykset

Tilastollinen vastepintamallinnus: kokeiden suunnittelu, regressiomallin analyysi, ja vasteen optimointi. Esimerkit laskettu JMP:llä

Harjoitus 9: Optimointi I (Matlab)

MATEMATIIKAN KOE, PITKÄ OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

Oppimistavoitematriisi

BM20A0700, Matematiikka KoTiB2

Differentiaalilaskennan tehtäviä

Matematiikan tukikurssi

= 2±i2 7. x 2 = 0, 1 x 2 = 0, 1+x 2 = 0.

Ohjeita fysiikan ylioppilaskirjoituksiin

Demo 1: Simplex-menetelmä

Lineaarinen optimointitehtävä

Osakesalkun optimointi. Anni Halkola Turun yliopisto 2016

Harjoitus 3 -- Ratkaisut

jakokulmassa x 4 x 8 x 3x

Harjoitus 3 ( )

Malliratkaisut Demot

Talousmatematiikan perusteet: Luento 10. Lineaarikuvaus Matriisin aste Determinantti Käänteismatriisi

Matemaattiset ohjelmistot 1-2 ov, 2-3 op

Harjoitus 10: Mathematica

Diplomi-insinööri- ja arkkitehtikoulutuksen yhteisvalinta 2017 Insinöörivalinnan matematiikan koe , Ratkaisut (Sarja A)

Ensimmäisen ja toisen kertaluvun differentiaaliyhtälöistä

12. Hessen matriisi. Ääriarvoteoriaa

Malliratkaisut Demot

FUNKTION KUVAAJAN PIIRTÄMINEN

Differentiaali- ja integraalilaskenta

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

Numeeriset menetelmät

Lineaarinen yhtälöryhmä

Numeeriset menetelmät

Luento 4: Liikkeen kuvausta, differentiaaliyhtälöt

Harjoitus 3 ( )

Transkriptio:

Säätötekniikan laboratorio Infotech Oulu ja Prosessitekniikan osasto MATLAB-ohjelman käyttö eräissä prosessiteknisissä laskuissa Juha Jaako Raportti B No, Syyskuu 999

Sisällysluettelo Sisällysluettelo... Johdanto...3 Yleistä MATLAB-ohjelmointikielestä...4. Pienimmän neliösumman menetelmä - lineaarinen tapaus...5. Monikerrosseinämän mitoittaminen... 3. Kolmiulotteinen kuvaaja ja satunnaishaku...6 4. Optimaalisen kierrätyssuhteen määrittäminen autokatalyyttiselle reaktiolle...0 5. Pienimmän neliösumman menetelmä - johdantoa...6 6. Davidon-Fletcher-Powell-menetelmä...9 7. Levenberg-Marquardt-menetelmä...3 8. Parannettu Levenberg-Marquardt...35 9. Monimutkaisen kuvan piirtäminen...38 0. Mallidatan sovitus...40. Lähdeluettelo...54 Liite - Algoritmeja...55 Liite - Matlabin fmins-funktion käyttö...56 Liite 3 - Matlabin fmin-funktion käyttö...59 Liite 4 - Luettelo ohjelmista...6 ISBN 95-4-5354-X ISSN 38-9404

- 3 - Johdanto Tämän kirjasen tarkoituksena on esittää, miten voidaan käyttää MATLAB ohjelmointikieltä ohjelmoinnissa - mukana oleva koodi on testattua ja toimivaa sekä lisäksi koodi on täydellisenä esitetty; laskemaan prosessitekniikan laskuja ja erityisesti yksinkertaisia prosessiteknisiä optimointitehtäviä, tekemään graafisia esityksiä ja siirtämään ne tekstinkäsittelyohjelmaan. Eräs kirjan painotuksista on se, miten ohjelmat tekijän mielestä pitäisi ulkoasultaan kirjoittaa. Tarkoituksellisesti tässä kirjassa ei ole säätöteknisiä laskuja, koska on olemassa hyviä kirjoja tätä varten, esim. Bishop (997) ja Ogata (997). Tekstin alkuosassa on kunkin luvun lopuksi esitetty luettelo käytetyistä MATLABfunktioista. Kaikki tässä kirjassa oleva koodi on kenen tahansa käytettävissä. Jos kuitenkin käytät tässä kirjassa olevaa koodia, on lähde (siis tämä kirja) mainittava. Käytetyt työkalut: Osa koodista on testattu Matlab-versiolla 5.3.0.083 (R), mutta pääosa koodista on tehty toimimaan versiossa 5..0.4. Kaikkien ohjelmien tulisi toimia ilman Toolboxeja mutta tätä ei ole varmistettu. Ohjelmaeditorina on ollut MicroEMACS 3.. Tämä kirja on kirjoitettu Microsoft Word 97 SR- tekstinkäsittelyohjelmalla ja paperiversio on tulostettu käyttämällä Hewlett-Packard LaserJet 5M kirjoitinta ja Abode Acrobat versio Adoben Distiller Assistant v3.0:llä. Käytetty kirjasin on Tahoma 0 pt, ohjelmakoodin esittämisessä on käytetty kirjasinta Lucida Console 8 pt ja matemaattiset kaavat on kirjoitettu Microsoft Equation Editor ver 3.0:lla. Kirjan valmistuksessa on käytetty seuraavia kuvaformaatteja: TIFF (-tiff), JPEG (-djpeg) ja Encapsulated Level Post- Script (-deps). Käytetty kone oli seuraavanlainen: käyttöjärjestelmä Windows NT 4.0, prosessori Pentium 60 MHz, keskusmuisti 64 MB, levytilaa 3 GB, näyttö Panasonic PanaSync/Pro 5G, näyttösovitin Matrox MGA Millennium MB ja koneessa on verkkoyhteys. Lopuksi kiitos Esko Juusolle, koska hän minulle ensimmäisenä esitteli Matlab-ohjelman ja sen mahdollisuudet. Oulussa 03/09/999 Juha Jaako The Mathworks, Inc. 984-999. Adobe Acrobat versio on saatavissa osoitteesta http://ntsat.oulu.fi/jaako/ matlpros.pdf

- 4 - Yleistä MATLAB-ohjelmointikielestä Matlab on interaktiivinen ohjelma, jota voidaan käyttää tekniseen numeeriseen laskentaan. Nimi Matlab tulee sanoista MATrix LABoratory. Matlabin perusdatatyyppi on matriisi, mikä antaa mahdollisuuden tehdä erittäin tehokasta ja - ikävä kyllä - myös erittäin vaikeaselkoista koodia. Matlab on integroitu systeemi, jossa on mm. grafiikka, makrokieli, IEEE-aritmetiikka, nopea tulkki 3 ja monia valmiiksi koodattuja komentoja. Matlabin kehitys alkoi 980-luvun alussa. Jo alusta alkaen siitä tuli tiettyjen teknisten ja luonnontieteellisten alueiden standardityökalu. Alussa käyttö keskittyi korkeakouluihin, mutta luonnollisesti korkeakouluopiskelijat opittuaan mielestään tehokkaan työkalun käytön alkoivat käyttää Matlabia myös korkeakoulusta päästyään. Korkeakouluissa Matlabia käytetään mm. matematiikan opetuksessa (sovellettu lineaarialgebra), säätötekniikan opetuksessa, simuloinnissa, tilastomatematiikassa ja digitaalisessa signaalinkäsittelyssä. Osasyynä Matlabin kehitykseen on ollut se, että ohjelma on saatavissa käytännössä kaikkiin tietokonejärjestelmiin. Matlab ei olisi nykyisen kaltainen ja niin suosittu ilman ns. Toolboxeja. Toolbox on kokoelma m-tiedostoja (Matlab-kielellä koodattuja ohjelmia), jotka on erityisesti tehty jonkin tutkimusalueen ongelmien ratkaisemiseen. Tällä hetkellä ovat tarjolla seuraavat Toolboxit: µ-analysis and Synthesis, Communications, Control System, Database, Financial Toolbox, Frequency Domain System Identification, Fuzzy Logic, Higher-Order Spectral Analysis, Image Processing, LMI Control, Mapping, Model Predictive Control, NAG, Neural Network, Optimization, Partial Differential Equation, QFT Control Design, Robust Control, Signal Processing, Spline, Statistics, Symbolic/Extended Symbolic Math, System Identification, Wavelet (http://www-europe.mathworks.com/products/toolboxes.shtml). Matlabiin liittyy läheisesti ohjelma nimeltään Simulink, jota käytetään graafisessa mallintamisessa ja simuloinnissa (http://www-europe.mathworks.com/products/simulink/index.shtml). Simulinkistä on tullut myös tiettyjen alojen standardityökalu. Seuraavassa eräitä Matlab-linkkejä (tilanne 5.05.999) http://www.mathworks.com/ ' Matlab kotisivu http://www-europe.mathworks.com/ ' Matlab kotisivu eurooppalaisille http://www-europe.mathworks.com/education/ ' Matlab opetuksessa http://www-europe.mathworks.com/education/basics.shtml ' Opetus & Matlab http://www-europe.mathworks.com/books/ ' Matlab kirjoja 3 Vaikka Matlab onkin tulkkaava järjestelmä, on se kuitenkin suht' nopea. Lisäksi Matlabiin on tarjolla kääntäjä, joka kääntää Matlab-koodin C- tai C++-koodiksi.

- 5 -. Pienimmän neliösumman menetelmä - lineaarinen tapaus Esimerkki otettu kirjasta Edgar & Himmelblau (988, 55-56). Eräästä koesarjasta on saatu seuraavat tulokset Taulukko.: Koesarja x 0 0 30 40 40 50 50 50 60 70 Y 73 78 85 90 9 87 86 9 75 65 Nyt x (reaktantin mooliosuus) on riippumaton muuttuja ja Y (saanto) on riippuva muuttuja. Halutaan sovittaa neliöllinen malli taulukon tietojen avulla ja lisäksi halutaan määrittää se x:n arvo, jolla saavutetaan maksimisaanto. Sovitettava malli on muotoa Y = b0 + b x + b x (.) Nyt mallissa (.) on 3 parametria ja taulukon avulla voidaan muodostaa 0 (=p) yhtälöä; asia voidaan esittää seuraavasti matriisimuodossa X b = Y (.) jossa b0 b = b, b Y Y Y = ja Y p x x X x x =. x p x p Koska nyt on kyseessä ylimääritelty tapaus, ei (.):lla välttämättä ole lainkaan ratkaisua (Kivelä 980, 33). Täten on perusteltua hakea sellaista ratkaisua, joka mahdollisimman tarkoin toteuttaa yhtälön (.). Tavallisimmin ongelma ratkaistaan pienimmän neliösumman menetelmällä. Koska nyt kyseessä on parametrien suhteen lineaarinen tapaus, saadaan parametrien b 0, b ja b arvot seuraavasti (Kivelä 980, 33-34; Edgar & Himmelblau 988, 54) käytettäessä matriisimuotoa. T T ( X X) X Y b = (.3) Nyt saadaan taulukon. arvojen perusteella [ 73 78 85 90 9 87 86 9 75 65] T Y = (.4) X = 0 400 0 400 30 900 40 600 40 600 50 500 50 500 50 500 60 3600 70 4900 T (.5)

- 6 - Kun sijoitetaan (.4) ja (.5) yhtälöön (.3) saadaan monimutkainen matriisiyhtälö, jonka ratkaiseminen ei ole kovin helppoa, mutta käyttämällä MATLAB-ohjelman matriisinkäsittelykomentoja saadaan ratkaisu helposti; lisäksi MATLABissa voidaan ratkaisukaava (.3) kirjoittaa suoraan matriisimuodossa. Ratkaisemalla MATLABilla saadaan 35.6574 b =.634 (.5) 0.039 ja edelleen malliyhtälöksi Y = 35.66 +.63 x 0.03 x (.6) Seuraavassa on esitetty ongelman ratkaiseva MATLAB-koodi (EHals.m). % EHals.m - Neliöllinen malli. % 7.0.999 (c) Juha Jaako % Edgar & Himmelblau s. 55-56 % Tämä versio laskee vain malliparametrit! clear all ; % Data - pystyvektoreita! x = [ 0 0 30 40 40 50 50 50 60 70 ]' ; Y = [ 73 78 85 90 9 87 86 9 75 65 ]' ; N = size (x, ) ; % Vektorin pituus. % Muodostetaan X-matriisi. mx = zeros (N, 3) ; % Alustetaan matriisi nollilla. for i = : N, % Täytetään matriisi rivi kerrallaan. mx(i,:) = [, x(i), x(i)^ ] ; end % Ratkaistaan malliparametrit. b = (inv ((mx')*mx))*(mx')*y % Ratkaisukaava matriisimuodossa Ohjelma tulostaa vastaukseksi» EHals b = 35.6574.634-0.039 Käytetyssä lähteessä parametrien arvoiksi oli saatu (35.66,.63, -0.03). Edellä oleva koodi laskee pelkät parametrit; havainnollisempaa olisi laskea maksimisaanto, mallin hyvyys ja selitysaste sekä piirtää kuva, jossa ovat sekä koepisteet että malliyhtälö. Saatava kuva olisi myös pystyttävä siirtämään tekstinkäsittelyohjelmaan raportointia varten. Seuraavassa on edellinen koodi (EHals.m) laajennettu laskemaan ja piirtämään kaikki edellä olevat (EHals.m). % EHals.m - Neliöllinen malli. % 7.0.999 (c) Juha Jaako % Edgar & Himmelblau s. 55-56 clear all ; hold on ;

- 7 - % Data x = [ 0 0 30 40 40 50 50 50 60 70 ]' ; Y = [ 73 78 85 90 9 87 86 9 75 65 ]' ; N = size (x, ) ; % Vektorin pituus. plot (x, Y, 'ko') ; % Piirretään koepisteet. % Muodostetaan X-matriisi. mx = zeros (N, 3) ; for i = : N, mx(i,:) = [, x(i), x(i)^ ] ; end % Ratkaistaan malliparametrit. b = (inv ((mx')*mx))*(mx')*y ; % Piirretään mallin kuvaaja. xx = min(x) : 0. : max(x) ; % 0.:n välein välille 0-70. M = size (xx,) ; for i = : M, yy(i) = b()+b()*xx(i)+b(3)*xx(i)^ ; end plot (xx, yy, 'k-') ; % Piirretään malli kuvaan. % Maksimi voidaan etsia kahdella tavalla % JOKO etsimällä maksimi edellä lasketuista vektoreista. [I,J] = max (yy) ; % I : suurin arvo. % J : arvon indeksi. disp (' ') ; disp ( 'Maksimi vektorista hakemalla:'), disp ( ['Suurin arvo (Y) : ' numstr(i) ]) ; disp ( ['Pisteessä (x) : ' numstr(xx(j)) ]) ; plot (xx(j), I, 'k+') ; % TAI kayttamalla MATLABin fmin-funktiota (kts. liite 3!) % Etsitaan maksimi (pannaan miinusmerkki eteen). % Ensin muodostetaan kohdefunktio. b0s = numstr(b()) ; bs = numstr(b()) ; bs = numstr(b(3)) ; funktio = [ '-((' b0s ')+(' bs ')*x+(' bs ')*x^)' ] ; % Sitten kutsutaan MATLABin fmin-funktiota. xmax = fmin (funktio, min(x), max(x) ) ; ymax = b()+b()*xmax+b(3)*xmax^ ; disp (' ') ; disp ( 'Maksimi fmin-funktiolla:'), disp ( ['Suurin arvo (Y) : ' numstr(ymax) ]) ; disp ( ['Pisteessä (x) : ' numstr(xmax) ]) ; plot (xmax, ymax, 'k*') ; % Kuvan otsikot, akselit jne.. (käytetään kursiivia). xlabel ('\itx') ; ylabel ('\ity') ; % _ : alaindeksi, ^ : yläindeksi title ('Neliöllinen malli {\ity = {b_0}+{b_ x}+{b_}{x^}}') ; % Esitetään malliparametritkin kuvassa. text (30, 7.5, ['\it{b_0} = ' b0s ] ) ; text (30, 70.0, ['\it{b_} = ' bs ] ) ; text (30, 67.5, ['\it{b_} = ' bs ] ) ; % Lasketaan mallin selitysaste. R = seliaste (Y, mx*b, N) ; Rs = numstr (R) ; text (30, 64.0, ['\it{r^} = ' Rs ] ) ; hold off ;

- 8 - % Tulostetaan kuva tiedostoon Encapsulated Postscript -muotoon 4. print -tiff -deps c:\temp\ehals ; Selitysasteen laskenta tehdään erillisen funktion avulla (MATLAB-ohjelmointikielessä funktiot on koodattava erilliseksi tiedostoksi) - huomaa funktion syntaksi. % seliaste.m - Laskee selitysasteen % (c) Juha jaako 0..998 % DO - havaitut arvot % DOkalc - mallin antamat arvot function f = seliaste (DO, DOkalc, N) % Laskettu selitysaste. SST = 0 ; % Kokonaisneliösumma SSR = 0 ; % Jäännösneliösumma SSD = 0 ; % Selitetty neliösumma DOmean = mean (DO) ; for i = : N, SST = SST + (DO(i)-DOmean)^ ; SSR = SSR + (DO(i)-DOkalc(i))^ ; end SSD = SST - SSR ; f = -(SSR/SST) ; Koodi tulostaa seuraavaa» ehals Maksimi vektorista hakemalla: Suurin arvo (Y) : 89.8933 Pisteessä (x) : 4. Maksimi fmin-funktiolla: Suurin arvo (Y) : 89.8933 Pisteessä (x) : 4. sekä lisäksi saadaan kuva, johon tulostuvat myös tekstit. Kuvatekstit on osaksi kirjoitettu kursiivilla käyttäen (\it)-tarkenninta. Tekstin muotoiluun on tarjolla paljon erilaisia vaihtoehtoja 5. 4 5 TIFF = Tagged Image File Format on eräs kuvantallennusformaatti. DEPS = Level black and white Encapsulated PostScript (EPS) on myös eräs kuvantallennusformaatti. kts. viite Using MATLAB Graphics.

- 9-95 Neliöllinen malli Y = b 0 +b x+b x 90 85 80 Y 75 b 0 = 35.6574 70 b =.634 b = 0.0399 65 R = 0.93643 60 0 5 30 35 40 45 50 55 60 65 70 x Kuva.. Mallipisteet, malliyhtälö ja malliparametrit. Koodissa oleva komento print -tiff -deps c:\temp\ehals ; tulostaa kuvan tiedostoon PostScript-muotoon (-deps) hakemistoon c:\temp ja lisäksi tiedostoon liitetään kuvan esikatselumahdollisuus (-tiff). Ilman (-tiff)-tarkenninta ei kuvaa voi nähdä tekstinkäsittelyohjelmassa; vain pelkkä laatikko näkyy 6. Esimerkiksi Word-tekstinkäsittelyohjelmaan kuva liitetään valikkokomennoin Insert-Picture-From File...-Ehals. Lopuksi teksti on tulostettava PostScript-kirjoittimella. Jos käytössä ei ole PostScript-kirjoitinta ja jos kuvan laadulle ei aseteta suuria vaatimuksia, niin voidaan kuva tulostaa JPEG 7 -muotoon seuraavalla komennolla print -djpeg c:\temp\ehals ; kuva saadaan Word-tekstinkäsittelyohjelmaan samoin komennoin kuin edellä. 6 7 kts. viite Using MATLAB Graphics, Chapter 7 Printing MATLAB Graphics. JPEG =Joint Photographers Expert Group on eräs kuvantallenusformaatti, joka on häviöllinen ja kompressoitu.

- 0 - Taulukko.: Käytetyt MATLAB-funktiot funktio kuvaus ' laskee matriisin (tahi vektorin) transpoosin; erittäin kätevä komento % kaikki %-merkin jäljessä rivillä oleva teksti on kommenttia ; jos halutaan, ettei komentorivi tulosta laskennan tulosta, niin rivin loppuun pannaan puolipiste; puolipistettä käytetään myös erottimena matriiseissa clear all poistaa kaikki muuttujat, funktiot ja MEX-linkit; varmistaa sen etteivät edelliset laskennat pääse sotkemaan meneillään olevaa laskentaa; varotoimenpide disp tulostaa taulukon ilman taulukon nimeä; jos argumentti on tekstiä, niin teksti tulostuu fmin minimoi yhden muuttujan funktion for... toistaa komentoja ennalta määrätyn määrän end hold off lopettaa komennon hold on vaikutuksen hold on pitää jo piirretyn kuvan aktiivisena, joten kuvaan voidaan piirtää uusia elementtejä inv laskee käänteismatriisin max hakee suurimman arvon mean laskee keskiarvon min hakee pienimmän arvon numstr muuttaa luvun merkkijonoksi, tarvitaan tulostettaessa lukuja tekstin sekaan plot tulostaa x-y-kuvan, tarjolla runsaasti erilaisia viiva- ja pistevaihtoehtoja print tulostaa kuvan joko kirjoittimelle tai haluttuun tiedostoon; tarjolla on runsaasti erilaisia tiedostoformaatteja, mm. PostScript ja JPEG; käytetään, kun halutaan siirtää kuvia tekstinkäsittelyohjelmaan size laskee matriisin dimensiot text lisää halutun tekstin kuvaan haluttuun kohtaan title lisää kuvaan otsikkotekstin xlabel lisää kuvaan selittävän tekstin x-akselille ylabel lisää kuvaan selittävän tekstin y-akselille zeros muodostaa matriisin jonka kaikki alkiot ovat nollia; käytetään kun alustetaan taulukoita

- -. Monikerrosseinämän mitoittaminen Esimerkki otettu kirjasta Bird et al. (960, 305). Seinämä koostuu kolmesta kerroksesta kuvan. mukaan: ensimmäinen kerros on tulenkestävää tiiltä, toinen kerros on eristetiiltä ja uloin kerros teräslevyä, jonka paksuus on /4 engl. tuumaa. T T terässeinä T 0 =500 o F T 3 =00 o F tulenkestävä tiili eristetiili Kuva.. Komposiittirakenteinen tuliseinä. Lasketaan seinämän eri osille sellainen paksuus, että seinämän kokonaispaksuus on mahdollisimman pieni. Lämmönhukka seinämän läpi saa olla korkeintaan 8 5000 Btu ; oletetaan samalla, että seinämän osat ovat termisesti hyvässä kontaktissa. ft h 8 Säilytetään nyt käytettävät yksiköt arkaaisina, jotta voidaan havainnollistaa MATLABin funktioiden käyttöä.

- - Laskentaa varten on tarjolla seuraavat tiedot Taulukko.: Seinämän tiedot Materiaali Korkein Lämmönjohtavuus Btu käyttölämpötila o h ft F 00 o F:ssa 000 o F:ssa Tulenkestävä tiili 600 o F.8 3.6 Eristetiili 000 o F 0.9.8 Teräs - 6. - Taulukosta huomaamme, että tulenkestävän tiilikerroksen on oltava niin paksu, että T 000 o F. Seinän mitoitus tapahtuu kaavojen (9.6-6)-(9.6-8) (Bird et al. 960, 85) mukaan (tässä niitä on merkitty kaavoina (.)-(.3) ) 0 0 dt k = q0 (.) dx dt k = q0 (.) dx 3 3 dt k = q0 (.3) dx 0 3 Integroimalla yhtälöt (.)-(.3) saaadaan, kun k, k ja k ovat vakioita x0 x T 0 T = q0 (.4) 0 k x x T T = q0 (.5) k x x3 T T3 = q0 (.6) 3 k 0 Tässä tehtävässä eivät k ja k olekaan vakioita, mutta.). Oletetaan nyt lineaarinen riippuvuus 0 ( T ) at b 3 k on vakio (kts. taulukko k = + (.7) jossa a ja b ovat sovitettavia parametreja. Sijoittamalla (.7) kaavaan (.) saadaan 0 0 dt ( a T + b ) = q0 dx (.8) Integroimalla (.9) T 0 0 ( T + b ) dt a = q0 dx (.9) T0 x x0

- 3 - saadaan tulenkestävän tiiliseinämän leveydelle kaava (.0), eristetiiliseinämän leveydelle kaava (.) ja terässeinälle kaava (.) ( T T ) + b ( T T ) a 0 0 x x0 = (.0) q x 0 ( T T ) + b ( T T ) a x = q (.) 0 x x3 T = T3 q0 (.) 3 k Nyt on vielä määritettävä parametreille a i ja b i arvot. Taulukon. avulla saadaan kaksi yhtälöparia Yhtälömuodossa Matriisimuodossa Ratkaisu 00 a + b =.8 00 a.8 = a 00 000 a + b = 3.6 = 000 b 3.6 b 000 00 a + b = 0.9 00 000 a + b =.8 000 a b 0.9 =.8 a b 00 = 000.8 0.0009 = 3.6.7053 0.9 0.0005 =.8 0.856 Lineaarinen yhtälöryhmä voidaan ratkaista MATLAB-ohjelmalla seuraavasti. Syötetään kerroinmatriisit» A = [ 00 ; 000 ] ;» b = [ 0.9 ;.8 ] ; Ratkaisu saadaan joko komennolla» inv(a)*b ans = 0.0005 0.856 tai (suositeltava tapa) jakamalla kenoviivalla» A\b ans = 0.0005 0.856 Seuraavassa on ongelman ratkaisu koodattu MATLAB-ohjelmaksi (threwall.m); huomaa, että ohjelma laskee ongelman ratkaisun SI-yksikköinä. Muunnoksen yksikköjen välillä tapahtuvat erikseen kirjoitettujen funktioiden (FK.m, BfhWm.m ja BfhFWmK.m) avulla.

Ohjelma tulostaa ratkaisuna» threwall T = 33.450 % Kelvin xmx0 = 0.69 % metreinä 0.3837 % jalkoina xmx = 0.56 % metreinä 0.53 % jalkoina - 4 - jota voi verrata viitteen (Bird et al. 960, 305) ratkaisuun (0.39 ft ja 0.5 ft). Ohjelmakoodi on seuraavanlainen % threwall.m %.0.999 (c) Juha Jaako % Lämmönsiirto kolmen seinämän läpi. % Bird et al., s. 84-85 & 305 format short ; % Lasketaan terässeinä. % Ensin muunnos SI-yksiköihin. T3 = FK (00) ; % of -> K q0 = BfhWm (5000) ; % Btu /(ft^ h) -> W/m^ xmx3 = 0.054*(-/4) ; % in -> m k3 = BfhFWmK (6.) ; % Btu/(ft h of) -> W/(m K) T = T3 - q0*(xmx3/k3) % Kaava (.) % Lasketaan tulitiiliseinä. % Lasketaan ensin datan avulla parametrit. A = [ FK(00) ;... FK(000) ] ; B = [ BfhFWmK(.8) ; BfhFWmK(3.6) ] ; data = A\B ; a = data() ; b = data() ; T0 = FK (500) ; T = FK (000) ; % of -> K % of -> K temp = (a/)*(t^-t0^) ; temp = b*(t-t0) ; xmx0 = (temp+temp)/(-q0) % Kaava (.0) disp (xmx0/0.3048) ; % m -> ft % Lasketaan eristetiiliseinä. % Lasketaan ensin datan avulla parametrit. A = [ fk(00) ;... fk(000) ] ; B = [ BfhFWmK(0.9) ; BfhFWmK(.8) ] ; data = A\B ; a = data() ; b = data() ; temp = (a/)*(t^-t^) ; temp = b*(t-t) ; xmx = (temp+temp)/(-q0) % Kaava () disp (xmx/0.3048) ; % m -> ft

- 5 - Muunnosfunktiot SI-yksiköihin ovat seuraavanlaisia (huomaa, että kaikki funktiot on kirjoitettava erillisiksi tiedostoiksi) % FK.m %.0.999 (c) Juha Jaako % Fahrenheit to Kelvin conversion. function K = FK (F) K = (F-3)/(.8) + 73.5 ; % Funktion loppu % BfhWm.m %.0.999 (c) Juha Jaako % Btu/(ft^ h) to W/m^ conversion % CRC 74th edition s. -6 function Wm = BfhWm (Bfh) Wm = 3.5459*Bfh ; % Funktion loppu % BfhFWmK.m %.0.999 (c) Juha Jaako % Btu/(ft h of) to W/(m K) conversion % CRC 74th edition s. -6 function WmK = BfhFWmK (BfhF) WmK =.730735*BfhF ; Taulukko.: Käytetyt MATLAB-funktiot funktio kuvaus \ yhtälöryhmön ratkaisu (» help slash) format short käytetään lyhyttä tulostusmuotoa

- 6-3. Kolmiulotteinen kuvaaja ja satunnaishaku Esimerkki otettu Laineen kirjasta (997, 86). Monesti graafisia esityksiä tehtäessä tulee tarve piirtää 3-ulotteisia kuvia. Seuraavassa piirretään funktion sin x sin y z( x, y) = x y (3.) kuvaaja alueelle 4 π < x < 4π ; 4π < y < 4π. Huomaa, että funktiolla on monta paikallista minimiä ja maksimia tällä alueella. Kuva funktiosta 3-ulotteisena voidaan piirtää seuraavanlaisen koodinpätkän avulla. % laink87.m % 5..998 (c) Juha Jaako % Funktion kuvaaja. axis ( [-4*pi 4*pi -4*pi 4*pi -0.4.0] ) ; [x, x] = meshgrid (-4*pi : 0. : 4*pi, -4*pi : 0. : 4*pi ) ; A = (sin(x)./x).*(sin(x)./x) ; mesh (x, x, A) ; print -deps c:\temp\laink87 ; 0.8 0.6 0.4 0. 0 0. 0.4 5 0 5 0 5 0 5 5 0 5 0 5 0 5 Kuva 3.. Kolmiulotteisen kuvaajan piirtäminen.

- 7 - Kuvaajan piirtämisessä ei tarvita kovin monta komentoa, mutta komennot ovat todella tehokkaita. Käydään seuraavassa ko. komennot läpi. axis axis-komennon avulla määritellään akseleiden skaalausta. Tässä tapauksessa x-akselin kattaa välin 4 π < x < 4π, y-akseli välin 4 π < y < 4π ja z-akseli välin 0.4 < z <. Komento on axis ( [-4*pi 4*pi -4*pi 4*pi -0.4.0] ) ; meshgrid meshgrid-komento muodostaa verkon laskentapisteille väleille 4 π < x < 4π ja 4 π < y < 4π. Luku 0. ilmoittaa verkon jaotuksen. Mitä pienempää lukua käytetään sitä tarkempi kuvasta saadaan; samalla on kuitenkin huomattava, että mitä suurempi tarkkuus halutaan niin sitä hitaammin piirto tapahtuu ja sitä enemmän muistitilaa käytetään. HUOM! MATLABin yksinkertaisilla komennoilla on hyvin helppo muodostaa erittäin suuria matriiseja ja samalla voi täyttää koneen keskusmuistin. Komento on [x, x] = meshgrid (-4*pi : 0. : 4*pi, -4*pi : 0. : 4*pi ) ; /. ja.* Seuraavaksi lasketaan funktion arvot meshgrid-komennon luomissa verkkopisteissä. Huomaa, että kertomerkkinä on.* ja jakomerkkinä./. Komento on A = (sin(x)./x).*(sin(x)./x) ; mesh mesh-komennolla piirretään varsinainen kuva. Mesh-komento vaatii syöttötietoina meshgrid-komennon muodostamat matriisit sekä funktion arvot ko. pisteissä. mesh (x, x, A) ; * * * Kuvasta 3 huomaamme, että funktiolla on alueella yksi globaali maksimi. Funktio (3.) on muodoltaan hyvin hankala, joten käytetään maksimia haettaessakin eksoottista menetelmää. Optimin haku voidaan tehdä satunnaishakuna (Laine 997, 86) seuraavan koodin avulla. % laine87.m % 9.0.998 & 5..998 & 6..998 % (c) Juha Jaako % Satunnaishaku. % Funktion kuvaaja. title ('tasa-arvokayrat z > 0 ja satunnaishaku') ; axis ( [-4*pi 4*pi -4*pi 4*pi ] ) ; [x, x] = meshgrid (-4*pi : 0. : 4*pi, -4*pi : 0. : 4*pi ) ; z = (sin(x)./x).*(sin(x)./x) ; ta = 0.0 : 0.0 : 0.9 ; ta = 0. : 0.0 : 0.8 ; ta3 = 0.3 : 0. :.0 ; ta = [ta ta ta3] ; contour (x, x, z, ta) ;

- 8 - % Satunnaishaku. hold on ; axis ( [-4*pi 4*pi -4*pi 4*pi] ) ; m = REALMIN ; % Lasketaan 5000 kierrosta. for i = : 5000, x = 4*pi*(*rand-) ; y = 4*pi*(*rand-) ; plot (x, y, 'k.') ; if (i == ), oldx = x ; oldy = y ; plot (x, y, 'ko') ; end z = (sin(x)/x)*(sin(y)/y) ; if (z > m), m = z ; str = sprintf ('%d\t%8.3f\t%8.3f\t%8.3f', i, x, y, z) ; disp (str) ; plot (x, y, 'ko') ; line ([oldx x], [oldy y]) ; oldx = x ; oldy = y ; end end hold off ; print -djpeg00 c:\temp\laine87 ; Ohjelma tulostaa seuraavaa:» laine87.685-0.35 0.6 8-0.855 -.045 0.384 39.70 -.385 0.558 65 -.54-0.04 0.648 90-0.543.378 0.678 8-0.986 -.07 0.693 97 0.5-0.885 0.87 463-0.5-0.00 0.955 58-0.34-0.099 0.979 586 0.345 0.074 0.979 985-0.08-0.4 0.990 Seuraavaan kuvaan on piirretty haku: haun tarkastamat pisteet on merkitty (.):lla, haun hyväksymät pisteet (o):lla (huomaa, että jokaisella ohjelman suorituskerralla tulee aina uudenlainen haku ja vastaava kuva). Tasa-arvokäyriä on piirretty vain arvoilla z > 0, jotta kaikki paikallisetkin maksimit voidaan nähdä. Kuten huomataan, satunnaislukugeneraattoria käyttämälläkin voidaan päätyä optimiin.

- 9 - Kuva 3.. Funktion z( x y) sin x sin y, = tasa-arvokuvaajia ja maksimin haku x y satunnaishaulla; huomaa, että kuva JPEG-kuva, joten kuvan laatu on huonompi kuin edellä kuvassa 3.. Taulukko 3.: Käytetyt MATLAB-funktiot funktio kuvaus axis akseleiden skaalaus contour piirretään tasa-arvokuvaaja if... end totuusarvon testaus line piirretään viiva pisteiden välille mesh piirretään kolmiulotteinen kuva meshgrid laskentapisteiden verkon muodostus pi π (=3.4...) rand generoi tasaisesti jakautuneita satunnaislukuja REALMIN pienin positiivinen liukuluku MATLABissa sin sinifunktio sprintf kirjoitetaan luku formatoituna merkkijonoksi; kätevä tulostettaessa

- 0-4. Optimaalisen kierrätyssuhteen määrittäminen autokatalyyttiselle reaktiolle Esimerkki otettu kirjasta Levenspiel (97, 55-56). Tarkastellaan seuraavanlaista autokatalyyttista reaktiota. Aine A reagoi seuraavanlaisesti A + R R + R (4.) l mol jossa k =. Tarkoituksena on käsitellä F A 0 = syötettä, jossa on mol min min mol pelkkää A:ta. ( C A 0 =, C R0 0 l = ) siten, että konversio on 99%. Reaktio tapahtuu kierrätysreaktorissa. Tarkoituksena on etsiä kierrätyssuhde (R), joka minimoi tarvittavan reaktorin tilavuus; lisäksi määritetään reaktorin tilavuus. Lisäksi verrataan tätä laskettua reaktorin tilavuutta sekoitusreaktoriin (R = ) ja putkireaktoriin (R = 0). Tilavuudelle on johdettu seuraavanlainen kaava (Levenspiel 97, 55) X Af dx A = ( + ) A0 k C X A X A Af 0 R X Ai = R+ V F R (4.) ( X ) Integroimalla ja yksinkertaistamalla saadaan V ( R + ) + R( X Af ) = ln F A0 k C R( X Af ) A0 josta analyyttisesti johtamalla ja asettamalla X = 0. 99 saadaan yhtälö ln + 0.0 R = 0.0 R R R + ( + 0.0 R) A Af (4.3) (4.4) josta yrityksen ja erehdyksen menetelmällä saadaan R = 0.9. Nyt voidaan tilavuus laskea.009 V =.9 ln = 7. 46 l (5.5) 0.009 Näin siis Levenspiel. Ongelmaa voidaan tarkastella myös optimointiongelmana. Muutetaan yhtälö (4.) muotoon min V X Af dx A R = FA0 ( R + ) (4.6) k C X ( ) X Ai RX Af = R+ A0 A ( X ) A eli saamme yhden muuttujan minimointitehtävän, jossa kohdefunktiona on (4.6). Ongelmaksi muodostuu kohdefunktiossa olevan integraalin laskenta. Yhtälössä (4.3) on esitetty analyyttinen ratkaisu, mutta aina analyyttinen ratkaisu ei ole mahdollinen.

- - Yleensä tietokoneella laskettaessa käytetään numeerista integrointia; tavallisimmin numeerinen integrointi tapahtuu Simpsonin säännön avulla (kts. Kreyszig 993, 960-963). jossa b f () x dx ( f 0 + 4 f + f + 4 f 3 + + f m + 4 f m + f m ) (4.7) a h b a m h 3 =, f ( ) f = ja m on välien lukumäärä. j x j Koodataan ratkaisu MATLAB-koodiksi. Nyt (4.6) voidaan ratkaista seuraavasti. Ensin koodataan pääohjelma (recycle.m); kohdefunktion (4.6) minimointi tapahtuu jo edellä esitetyllä fmin-funktiolla. % recycle.m % 5..998 (c) Juha Jaako % Palautussuhteen optimi : R = 0.893 ; % Reaktioparametrit. FA0 = ; k = ; CA0 = ; XAf = 0.99 ; % [mol/min] % [l/mol*min] % [mol/l] % [dimensioton] param = [ FA0 k CA0 XAf ] ; disp (' -- Minimoimalla ja numeerisesti integroimalla') ; R = fmin ('simpson', 0,, [], param) % Palautussuhteen minimi. V = simpson (R, param) % Minimitilavuus. disp (' -- Levenspiel') ; Ropt = fmin ('(x+)*log((+0.0*x)/(0.0*x))', 0., 0.9) Vopt = (Ropt+)*log((+0.0*Ropt)/(0.0*Ropt)) Ohjelma tulostaa seuraavaa. Ensin tulostetaan vastaus, joka saadaan minimoinnin ja numeerisen integroinnin avulla ja lopuksi vastaus, jossa käytetään viitteestä (Levenspiel 97) saatuja kaavoja.» recycle -- Minimoimalla ja numeerisesti integroimalla R = 0.893 V = 7.4587 -- Levenspiel Ropt = 0.893 Vopt = 7.4587 Lisäksi tarvitaan tietysti minimoitava kohdefunktio eli kaava (4.6) koodattuna (simpson.m). Funktion tarvitseman parametrit välitetään parametrilistan avulla. % simpson.m % 5..998 (c) Juha Jaako % Palautussuhteen optimointi. % Kreyszig E, Advanced engineering mathematics. s. 960-963. % Levenspiel O, Chemical reaction engineering. s. 55-56. % Numeerinen integrointi - Simpsonin sääntö. function f = simpson (R, param) % Palautussuhteen optimi : R = 0.893 ;

- - % Reaktioparametrit. FA0 = param() ; k = param() ; CA0 = param(3) ; XAf = param(4) ; % [mol/min] % [l/mol*min] % [mol/l] % [dimensioton] % Parametrit a = (R/(R+))*XAf ; % Integroinnin aloituspiste. b = XAf ; % " lopetuspiste. m = 500 ; % Välien lukumäärä. Oltava SUURI ja PARILLINEN. h = (b-a)/m ; % Välin pituus. % Laskentapisteet numeerista integrointia varten. f = zeros (m+, ) ; for i = 0 : m, x = a + h*i ; f(i+) = /(x*(-x)) ; end % Lasketaan Simpsonin parametrit. s0 = f() + f(m+) ; s = 0 ; for i = : : (m-), s = s + f(i+) ; end s = 0 ; for i = : : (m-), s = s + f(i+) ; end % Numeerisen integraalin arvo. J = (h/3)*(s0 + 4*s + *s) ; vakio = (FA0*(R+))/(k*CA0^) ; V = vakio*j ; f = V ; Koodi on suoraan Kreyszigin kirjassa (Kreyszig 993, 96) olevan algoritmin koodaus. Koodi näyttää toimivan hyvin, mutta siinä on eräs ongelma; laskentapisteitä tarvitaan runsaasti. Välien lukumäärä on koodissa komentona m = 500 ; % Välien lukumäärä. Oltava SUURI ja PARILLINEN. tämä on huomattavan suuri arvo. Pienemmillä arvoilla integraalin arvoksi tuli epätarkka arvo. Näyttää siltä, että funktio (simpson.m) ei ole sovelias numeeriseen integrointiin. Yleensä on syytä käyttää testattuja, tehokkaita algoritmeja. MATLAB ohjelmistossa on onneksi valmis numeerisen integroinnin funktio nimeltään quad8, josta on olemassa myös yksinkertaisempi versio quad.

- 3 - Nyt voimme koodata uuden pääohjelman (recycle.m) % recycle.m % 6..998 (c) Juha Jaako % Palautussuhteen optimi : R = 0.893 ; % Reaktioparametrit. FA0 = ; k = ; CA0 = ; XAf = 0.99 ; % [mol/min] % [l/mol*min] % [mol/l] % [dimensioton] param = [ FA0 k CA0 XAf ] ; disp (' -- Minimoimalla ja numeerisesti integroimalla') ; R = fmin ('simpson', 0, 0, [], param) % Palautussuhteen minimi. V = simpson (R, param) % Minimitilavuus. % Kuvaaja. hold on ; for R = 0.0 : 0.005 :, plot (R, simpson (R, param), 'k.') ; end xlabel ('R') ; ylabel ('V') ; hold off ; print -deps -tiff c:\temp\recycle ; disp (' -- Levenspiel') ; Ropt = fmin ('(x+)*log((+0.0*x)/(0.0*x))', 0., 0.9) Vopt = (Ropt+)*log((+0.0*Ropt)/(0.0*Ropt)) Koodi tulostaa seuraavan tekstin» recycle -- Minimoimalla ja numeerisesti integroimalla R = 0.893 V = 7.4587 -- Levenspiel Ropt = 0.893 Vopt = 7.4587

ja kuvan 4. - 4-9.4 9. 9 8.8 8.6 V 8.4 8. 8 7.8 7.6 7.4 0 0. 0. 0.3 0.4 0.5 0.6 0.7 0.8 0.9 R Kuva 4.. Palautussuhde vs. tilavuus. Lisäksi tarvitaan kohdefunktio (simpson.m), jonka sisällä käytetään numeerista integraattoria % simpson.m - 6..998 (c) Juha Jaako % Palautussuhteen optimointi. % Levenspiel O, Chemical reaction engineering. s. 55-56. % Numeerinen integrointi - Matlabin quad8-funktio. function f = simpson (R, param) % Puretaan parametrivektori -> reaktioparametrit. FA0 = param() ; % [mol/min] k = param() ; % [l/mol*min] CA0 = param(3) ; % [mol/l] XAf = param(4) ; % [dimensioton] % Parametrit a = (R/(R+))*XAf ; % Integroinnin aloituspiste. b = XAf ; % " lopetuspiste. tol = e-3 ; % Suhteellinen virhe. % Numeerinen integrointi quad8-funktion avulla. J = quad8 ('simpint', a, b, tol) ; % Matlabin integraattori!!! vakio = (FA0*(R+))/(k*CA0^) ; V = vakio*j ; f = V ;

- 5 - ja integraattorin käyttämä funktio (simpint.m). % simpint.m % 6..998 (c) Juha Jaako % HUOM: x on vektori % f on vektori function f = simpint (x) f =./(x.*(-x)) ; huomaa, että simpint-funktio palauttaa vektorin. Lopuksi voimme laskea vastaavan sekoitusreaktorin tilavuuden (R = ) seuraavasti (käytetään R:lle arvoa e0) 9.» simpson (e0, [ 0.99 ]) ans = 00.0000 eli saadaan sama vastaus kuin Levenspielkin on saanut. Kuvasta 5 näemme, että kun R = 0 (putkireaktori) niin V = ; tämä tarkoittaa sitä, ettei putkireaktorissa voida toteuttaa reaktiota (). Sama voidaan todeta myös laskemalla seuraavaa (eli R 0).» simpson (e-, [ 0.99 ]) ans = 9.306» simpson (e-4, [ 0.99 ]) ans = 8.04» simpson (e-6, [ 0.99 ]) ans = 678.945» simpson (e-8, [ 0.99 ]) ans = 6.6678e+004» simpson (e-0, [ 0.99 ]) ans = 6.6667e+006 Taulukko 4.: Käytetyt MATLAB-funktiot funktio quad8 log kuvaus numeerinen integraattori (» help quad8) laskee luonnollisen logaritmin 9 Huomaa, että tehtyjä funktioita voi kutsua suoraan MATLABin komentoriviltä.

- 6-5. Pienimmän neliösumman menetelmä - johdantoa Datan mallitusongelma (malliparametrien sovittaminen annettuun dataan) tulee vastaan useasti prosessitekniikassa 0. Jos malli on parametrien suhteen lineaarinen, voimme käyttää luvun mukaista lähestymistapaa. Jos taas malli on parametrien suhteen epälineaarinen, ongelman ratkaisu on edellistä vaikeampaa. Epälineaarisessa tapauksessa tavallisin lähestymistapa on erilaisten muunnosten käyttö; tavallisin tapaus on logaritmin otto. Esimerkki selventänee asiaa. Oletetaan seuraava malli bt y() t = a e (5.) logaritmit ottamalla saadaan [ y() t ] = log() a bt log (5.) ja merkitsemällä c = log() a ja Y = log y() t saadaan [ ] Y = bt + c (5.3) joka on nyt parametrien (b & c) suhteen lineaarinen. Ongelmana tässä lähestymistavassa on, että saadaan väärä vastaus (ks. esim. Jaako 998, 6-). Ennenkuin mennään epälineaariseen regressioanalyysiin, käydään läpi muutamia asioita. Pienimmän neliösumman menetelmässä joudutaan minimoimaan seuraava funktio (kaksiparametrisessa tapauksessa) n ( ) = min I a, b [ fi ( a, b) ] (5.4) i= eli kohdefunktiona on neliösumma ( a, b) = [ f ( a, b) ] + [ f ( a, b) ] + [ f ( a b) ] + I (5.5) 3, Minimointitehtävä (5.4) voidaan ratkaista usealla eri optimointimenetelmällä. Yhteistä näille menetelmille on, että tarvitaan minimointia varten aloituspiste, josta erilaisia algoritmeja käyttäen lähdetään hakemaan minimiä. Laskenta-algoritmia varten tarvitaan kohdefunktion gradienttivektori, toisista osittaisderivaatoista koostuva Hessin matriisi tai Hessin matriisia (tai sen käänteismatriisia) approksimoiva päivityskaava. 0 Sopiva kirja aiheeseen tutustumiseen on Press et al. (986, 498-577). Tässä käsitellään vain gradienttivektoria käyttäviä menetelmiä. On olemassa ns. suorahakumenetelmiä, jotka käyttävät vain funktion arvoja laskennassa, kts. esim. Reklaitis et al. (983, 74-98). Matlabin fmins-funktio käyttää suorahakumenetelmää nimeltään Nelderin ja Meadin menetelmä.

Kaavan (5.4) tapauksessa saadaan - 7 - I gradienttivektori : G = a (5.6) I b Hessin matriisi : I I J = a ab (5.7) I I ba b Tavallisimmat gradienttivektoria käyttävät optimointimenetelmät ovat (kts. esim. Reklaitis et al. 983, 98-6) Jyrkin lasku 3 (SD): a + = a λming (5.8) i i i Newton (N): a i+ = ai J i Gi (5.9) Parannettu Newton (MN) : a i+ ai = λ J G (5.0) min i Kvasi-Newton (QN): a i+ = ai λminh igi (5.) Levenberg-Marquardt (LM) : i i ( i ) i a = a J + I G (5.) + Λ a + = a λ H + ΛI Parannettu Levenberg-Marquardt (MLM) : i i min ( i ) i G (5.) Kaavoissa (5.8)-(5.) a i+ on uusi laskentapiste, a i on edellinen laskentapiste, laskettu askelpituus, G gradienttivektorin arvo edellisessä laskentapisteessä, λmin i i Hessin matriisin arvo edellisessä laskentapisteessä, H i Hessin matriisin käänteismatriisia approksimoiva matriisin arvo edellisessä laskentapisteessä, I yksikkömatriisi ja Λ on kerroin, jonka aloitusarvona yleensä on 4 0. J 3 Gradienttivektori ilmoittaa suunnan, johon kuljettaessa funktio kasvaa voimakkaimmin. Huomaa, että minimoitaessa lähdetään vastakkaiseen suuntaan; miinusmerkki kaavoissa (5.8)-(5.). Tunnetaan myös Cauchyn menetelmänä, kts. esim. Kreyszig (993, 086).

- 8 - Menetelmistä voi todeta seuraavaa: SD on yksinkertaisin ja ehdottomasti varmin menetelmä; menetelmä takaa, että Ii+ Ii eli minimi löytyy varmasti. Toisaalta SD on useimmissa tapauksissa hidas, jopa tolkuttoman hidas, eikä siten sovellu käytännön laskentaan. N on nopein menetelmä, kun ollaan riittävän lähellä minimiä mutta kaukana minimistä N on epävarma menetelmä. Menetelmä ei takaa, että Ii+ Ii ; usein jopa I i+ >> Ii. Em. syystä pelkkää N:ää ei käytetä minimointitehtävissä. Ottamalla N:ään mukaan askelpituuden laskenta saadaan MN, joka takaa, että Ii+ I i. MN kuitenkin edellyttää osittaisderivaattojen tarkkaa laskentaa, joka ei aina ole mahdollista. QN menetelmän perusajatus on seuraava: Laskennan alussa H i -matriisi on yksikkömatriisi - eli haku vastaa SDmenetelmää. Laskenna edistyessä H i :matriisia päivitetään algoritmin avulla siten, että H i J i. Eli laskennan edistyessä lähestytään N-menetelmää. H i -matriisin päivityskaavoja on useita - voidaan jopa sanoa, että aiheen tiimoilta on syntynyt kokonaisen kirjallisuuden laji. Tavallisimmin käytössä olevat päivityskaavat ovat Davidon-Fletcher-Powell (DFP) (Reklaitis et al. 983, 5; Davidon 959; Fletcher & Powell 963; Jaako 997, 65) ja Broyden-Fletcher-Goldfarb-Shanno (BFGS) (Gill et al. 98, 9), joissa en ole omissa kokeiluissani huomannut sanottavia eroja. QN-menetelmässä 4 käytettävä DFP päivityskaava on seuraavanlainen ' ' H i yi yi H i sisi DFP : H i+ = H i + (5.3) ' ' yi H i yi si yi jossa y i = Gi Gi ja s i = ai ai. Luvussa 6 sovelletaan DFP-päivityskaavaa neliösumman minimointiin. QN-menetelmän huonona puolena on, että se joudutaan jossakin tapauksissa käynnistämään uudestaan. = a J + I G ) Alkuperäisessä LM-menetelmässä (päivityskaava i i ( i ) i a + Λ parametri Λ määrittää sekä hakusuunnan että haun askelpituuden. MLMmenetelmään on otettu mukaan optimaalinen askelpituuden laskenta - syy tähän selviää myöhemmin esitettävän esimerkin yhteydessä. MLM-menetelmää pidetään yleisesti parhaana neliösummien minimointimenetelmänä (ks. esim. Reklaitis et al. 983, 07). 4 Oikeastaan pitäisi puhua QN-menetelmistä, koska päivityskaavasta riippuen menetelmiä on useita.

- 9-6. Davidon-Fletcher-Powell-menetelmä Seuraavissa esimerkeissä käytetään seuraavaa kohdefunktiota esimerkkinä. Kohdefunktio on neliösumma. Ongelman (6.) ratkaisu on =. x x [ ] + ( x x ) min f ( x, x ) = ( x ) (6.) Ensiksi muodostetaan koodi, jonka avulla voidaan piirtää funktion f 4 ( x, x ) ( x ) + ( x x ) = tasa-arvokäyrät (piirto.m). % piirto.m - juha jaako 7.05.999 % Piirretään funktion f(x,x) = (x-)^4 + (x-x)^ % tasa-arvokäyrät. function f = piirto (koord) [x, x] = meshgrid (koord() : 0. : koord(),... koord(3) : 0. : koord(4)) ; A = (x - ).^4 + (x - x).^ ; ta = min(min(a)) : : max(max(a)) ; contour (x, x, A, ta) ; % Tekstit. xlabel ('\it{x_}') ; ylabel ('\it{x_}') ; title ('\it{f(x_,x_) = (x_-)^4 + (x_-x_)^}') ; f = ; Minimointi tehdään seuraavan pääohjelman avulla (dfp4.m). Haku alkaa pisteestä (-, ) ja hakua tehdään 0 kierrosta. % dfp4.m % juha jaako - 7.05.999 - kts. Jaako (997, s. 65) & James et al. (993, 748) clear all ; format short ; hold on ; % Putsataan muisti romusta. koord = [-.5 0 3] ; %axis (koord) ; dummy = piirto (koord) ; %_Minimi pisteessä (, ). mp = [ ; ] ; plot (mp(), mp(), 'k+') ; tol = e-4 ; % Laskentatoleranssi. %_DFP-menetelmä. ap = [ - ; ] ; plot (ap(), ap(), 'ko') ; G = dfp4_d (ap) ; % Gradientin arvo pisteessä. f = dfp4_f (ap) ; iter = 0 ; H = eye () ; % Alustetaan iterointilaskuri. % Yksikkömatriisi.

- 30 - %while (max (abs (ap-mp)) > tol), for i = : 0, % Lasketaan 0 kierrosta. T = H * G ; % Lasketaan askelpituus. t = fmin ('dfp4_m', -0, 0, [], ap, T) ; % Lasketaan uusi piste. ap_old = ap ; % Talletetaan vanha piste. ap = ap - t*t ; % Lasketaan uusi piste. plot (ap(), ap(), 'ko') ; % Merkataan piste kuvaan. G_old = G ; % Talletetaan vanha gradientin arvo. G = dfp4_d (ap) ; % Gradientin arvo uudessa pisteessä. f = dfp4_f (ap) ; % Funktion arvo uudessa pisteessä. % H-matriisin päivitys. sk = ap - ap_old ; yk = G - G_old ; Bk = H ; % Davidon, Fletcher & Powell, kts. James s. 753 te = Bk*yk*(yk')*Bk ; te = (yk')*bk*yk ; te3 = sk*(sk') ; te4 = (sk')*yk ; H = H - (te/te) + (te3/te4) ; % Jyrkin lasku saadaan seuraavalla. % H = eye () ; iter = iter + ; % Kasvatetaan iterointilaskuria. end ; ap G iter hold off ; Huomaa, että päivitysalgoritmi on koodattu seuraavasti te = Bk*yk*(yk')*Bk ; te = (yk')*bk*yk ; te3 = sk*(sk') ; te4 = (sk')*yk ; H = H - (te/te) + (te3/te4) ; mutta se voidaan koodata myös yhdellä rivillä H = H - ((Bk*yk*(yk')*Bk)/((yk')*Bk*yk)) + ((sk*(sk'))/((sk')*yk)) ; Mielestäni ensimmäinen tapa on selkeämpi ja luettavampi. Lisäksi tarvitaan kolme funktiota (dfp4_f.m) % dfp4_f.m % Lasketaan funktion arvo. function f = dfp4_f (x) f = (x()-)^4 + (x()-x())^ ;

(dfp4_d.m) % dfp4_d.m % Lasketaan gradienttivektori. function G = dfp4_d (x) - 3 - G = [ 4*(x()-)^3 + *(x()-x()) ; -*(x()-x()) ] ; ja (dfp4_m.m). % dfp4_m.m % Askelpituuden laskentafunktio. function y = dfp4_m (x, ap, T) xx = ap - x*t ; y = dfp4_f (xx) ; Ajamalla ohjelma, saadaan vastaukseksi» dfp4 ap =.0000.0000 G =.0e-0 * 0.9044-0.904 iter = 0 ja kuva - huomaa miten kuva on piirretty ja miten eri komentoja on käytetty. 3 f(x,x ) = (x ) 4 + (x x ).5 x.5 0.5 0.5 0.5 0 0.5.5 x 4 Kuva 6.. Funktion ( ) ( ) ( ) f x, x = x + x x minimointi DFP-menetelmällä.

- 3-7. Levenberg-Marquardt-menetelmä Levenberg-Marquardt-menetelmän laskenta-algoritmi ( i i ( i ) i a + Λ = a J + I G ) löytyy ainakin lähteestä Reklaitis et al. (983, 06) - se on esitetty myös liitteessä. Yleensä kirjoissa esitetyissä laskenta-algoritmeissa on virheitä - niin on tässäkin 5. Seuraavassa on esitetty koodi, joka laskee minimin sijainnin (koodissa olevat STEPit viittaavat liitteen STEPpeihin) (levmar.m) % levmar.m % Levenberg-Marquardt teht. 6 % Reklaitis, Ravindran & Ragsdell s. 06 %.0.999 & 7.05.999 (c) Juha Jaako clear all ; format short ; hold on ; % Putsataan muisti romusta. koord = [-.5 0 3] ; dummy = piirto (koord) ; %_Minimi pisteessä (, ). mp = [ ; ] ; plot (mp(), mp(), 'ko') ; %_Levenberg-Marquardt-menetelmä. % STEP ap = [ - ; ] ; plot (ap(), ap(), 'k*') ; M = e4 ; tol = e-0 ; % Haun alkuarvo. % Kierrosten maksimimäärä. % Laskentatoleranssi. % STEP iter = 0 ; % Alustetaan iterointilaskuri. L = e4 ; % Lambdan alkuarvo. %L = 0 ; % Newton. % STEP 3 G = dfp4_d (ap) ; f = dfp4_f (ap) ; I = eye () ; % Gradientin arvo. % Funktion arvo. % Yksikkomatriisi. % STEP 4 & 5 while ( (max(abs(g))>tol) & (iter<m) ), %for i = : 00, % STEP 6 G = dfp4_d (ap) ; H = levmar_h (ap) ; temp = inv (H + L*I) ; temp = temp*g ; % STEP 7 ap_old = ap ; ap = ap - temp ; % Lasketaan 0 kierrosta. % Gradientin arvo. % Hessin matriisin arvo. % Talletetaan vanha. 5 Virheet käyvät selville, kun vertaat liitteen algoritmia ja koodia!

- 33 - % STEP 8 - pienenikö funktion arvo? if ( dfp4_f(ap) < dfp4_f(ap_old) ), % STEP 9 - pienennetään lambdaa L = L/ ; iter = iter + ; % Kasvatetaan iterointilaskuria. plot (ap(), ap(), 'k+') ; else % STEP 0 - kasvatetaan lambdaa L = *L ; ap = ap_old ; end end abs (mp-ap) G H iter hold off ; Lisäksi tarvitaan Hessin matriisin laskeva koodi (tässä toiset osittaisderivaatat on laskettu analyyttisesti eikä numeerisesti) % levmar_h.m % Lasketaan Hessin matriisi. function H = levmar_h (x) H = [ (*(x()-)^+) - ; - ] ; ohjelma käyttää lisäksi luvussa 6 esitettyjä funktioita (dfp4_m.m, dfp4_f.m, dfp4_d.m, piirto.m). Nyt saamme vastaukseksi» levmar ans =.0e-003 * 0.970 0.970 G =.0e-00 * -0.684-0.6 H =.0000 -.0000 -.0000.0000 iter = 38

ja kuvan - 34-3 f(x,x ) = (x ) 4 + (x x ).5 x.5 0.5 0.5 0.5 0 0.5.5 x 4 Kuva 7.. Funktion ( ) ( ) ( ) f x, x = x + x x minimointi LM-menetelmällä. Kuvasta 7. huomaa selvästi, että haku - varsinkaan alkuvaiheissaan - ei toimi kovin tehokkaasti. Tämä tehottomuus voidaan poistaa - luvussa 8 esitetään miten tämä tapahtuu.

- 35-8. Parannettu Levenberg-Marquardt a = a J + I G ) voidaan parantaa ottamalla mukaan Luvun 7 algoritmia ( i i ( i ) i askelpituuden laskenta ( ai+ ai min ( H i + ΛI ) Gi + Λ = λ ). Tämä laskenta-algoritmi on esitetty liitteessä (Edgar & Himmelblau 988, 4). Koodattuna saamme seuraavanlaisen koodin (levmar.m) % levmar.m % Levenberg-Marquardt teht. 6 % Edgar & Himmelblau s. 4 % 5.0.999 & 8.05.999 (c) Juha Jaako clear all ; format short ; hold on ; % Putsataan muisti romusta. koord = [-.5 0 3] ; %axis ([- 0 4]) ; dummy = piirto (koord) ; %_Minimi pisteessä (, ). mp = [ ; ] ; plot (mp(), mp(), 'ko') ; %_Levenberg-Marquardt-menetelmä. % STEP ap = [ - ; ] ; plot (ap(), ap(), 'ko') ; M = e3 ; tol = e-0 ; % STEP iter = 0 ; Be = e3 ; % Haun alkuarvo. % Kierrosten maksimimäärä. % Laskentatoleranssi. % Alustetaan iterointilaskuri. % Beetan alkuarvo. % Beeta voidaan laske myos ominaisarvojen avulla. % Edgar & Himmelblau s. 4-5 % STEP 3 G = dfp4_d (ap) ; f = dfp4_f (ap) ; I = eye () ; % Gradientin arvo. % Funktion arvo. % Yksikkomatriisi. % STEP 4 while ( (max(abs(g))>tol) & (iter<m) ), %for i = : 00, % STEP 5 G = dfp4_d (ap) ; H = levmar_h (ap) ; %disp (min (eig (H))) ; temp = inv (H + Be*I) ; temp = temp*g ; % Lasketaan 0 kierrosta. % Gradientin arvo. % Hessin matriisin arvo. % STEP 6 ap_old = ap ; % Talletetaan vanha. t = fmin ('dfp4_m', 0, e3, [], ap, temp) ; ap = ap - t*temp ;

- 36 - % STEP 7 if ( dfp4_f(ap) < dfp4_f(ap_old) ), % STEP 8 Be = Be/4 ; iter = iter + ; % Kasvatetaan iterointilaskuria. plot (ap(), ap(), 'k+') ; plot ([ap_old() ap()], [ap_old() ap()], 'k-') ; else % STEP 9 Be = *Be ; ap = ap_old ; end end ap G H iter print -tiff -deps c:\temp\kkk ; hold off ; Kun ohjelma ajetaan, saadaan seuraavanlainen tulos» levmar ap =.0000.0000 G =.0e-00 * -0.7954 0.7955 H =.0000 -.0000 -.0000.0000 iter = 6

Ja seuraava kuva - 37-3 f(x,x ) = (x ) 4 + (x x ).5 x.5 0.5 0.5 0.5 0 0.5.5 x 4 Kuva 8.. Funktion ( ) ( ) ( ) f x, x = x + x x minimointi MLM-menetelmällä. Jos vertaa kuvaa 8. kuvaan 7., huomaat, että MLM-menetelmä on tehokkaampi kuin LM-menetelmä.

- 38-9. Monimutkaisen kuvan piirtäminen Tähän sopii pienenä välipalana esitys monimutkaisen kuvan piirtämisestä. Levenspielin (97, 33) kirjassa on kuva, johon on piirretty reaktionopeus, konversio ja lämpötila. Seuraavassa on muodostettu koodi, jonka tarkoituksena on näyttää, miten vastaava kuva voidaan piirtää ohjelmallisesti. Piirtokoodi on seuraavanlainen (temppro.m). % temppro.m % (c) Juha Jaako 08.0.999 & 8.05.999 % Levenspiel s. 33 clear all ; XAe = 0.89 ; % dimensioton %CA0 = 4 ; % mol/l CA0 = ; % mol/l E = 600 ; % cal/mol E = 9600 ; R =.98 ; % cal/(mol K) T = 63 : 0.5 : 383 ; N = size (T, ) ; mra = [ 0 0.00 0.00 0.003 0.005 0.0 0.0 0.03 0.05... 0. 0. 0.3 0.5 3 5 ] ; M = size (mra, ) ; hold on ; axis ( [ (T()-73) (T(N)-73) 0 ] ) ; for j = : M, end for i = : N, k = exp (7.-E/(R*T(i))) ; k = exp (4.9-E/(R*T(i))) ; temp = (k*ca0-mra(j))/ca0 ; temp = /(k+k) ; XA = temp*temp ; xp(i) = T(i)-73 ; yp(i) = XA ; end % Piirretaan käyrä mra:n vakioarvolla. plot (xp, yp, 'k-') ; % Käyrän maksimikohdat. [a,b] = max (yp) ; xmax(j) = xp(b) ; ymax(j) = yp(b) ; % Maksimikohdat. plot (xmax(:j-), ymax(:j-), 'k--') ; % ************************************* Tekstit. % Ensin akselit. xlabel ('Temperature, {^o}c \rightarrow') ; ylabel ('Conversion \rightarrow') ;

- 39 - % Teksti oikeaan yläkulmaan. siz = 30 ; te(,:siz) = 'Time in minutes ' ; te(,:siz) = '{\itc}_{a0} = mol/liter ' ; te(3,:siz) = 'For other {\itc}_{a0} change ' ; te(4,:siz) = ' -{\itr}_{a} accordingly ' ; for j = : 4, text (80, 0.94-(j-)*0.045, te(j,:siz), 'FontName', 'Arial', 'FontSize', 8 ) ; end % Teksti oikealle keskelle. text (95.5, 0.5, '\leftarrow Equilibrium', 'FontName', 'Arial', 'FontSize', 8 ) ; % Tekstit käyrien yhteyteen - ei kaikkia. text (-7, 0.95, [ '-{\itr}_{a} = ' numstr(mra()) ], 'FontName', 'Arial', 'FontSize', 8 ) ; text ( 0, 0.90, [ numstr(mra(3)) ], 'FontName', 'Arial', 'FontSize', 8 ) ; text ( 0, 0.8, [ numstr(mra(4)) ], 'FontName', 'Arial', 'FontSize', 8 ) ; hold off ; print -tiff -deps c:\temp\temppro ; Ja kuvaksi saadaan. 0.9 0.8 r A = 0.00 0.00 0.003 Time in minutes C A0 = mol/liter For other C A0 change r A accordingly 0.7 Conversion 0.6 0.5 0.4 Equilibrium 0.3 0. 0. 0 0 0 40 60 80 00 Temperature, o C Kuva 9.. Monimutkainen kuva. Vertaa kuvaa Levenspielin kirjassa olevaan.

- 40-0. Mallidatan sovitus Tarkastellaan seuraavaa ongelmaa, joka on esitetty Prosessien optimointi -kurssin tentissä 9.03.999. Kuvaan 0. on piirretty erään kokeen tulokset. Vaaka-akselilla on aika ja pystyakselilla on tutkittavan aineen eräs ominaisuus (y). Huomaa, että kuva on JPEG-kuva - siis huonolaatuisempi kuin esimerkiksi kuva 9.. Kuva 0.. Tehtävänä on mallittaa kokeellisesti em. ominaisuuden riippuvuus ajasta.

Mallivaihtoehdot ovat seuraavat 6-4 - Mallin numero Mallivaihtoehto a y () t = + b t y () t = a t + b 3 y () t = a t + b t + c 4 y() t = a e bt + c 5 a y () t = + c log ( bt) Mikä mallivaihtoehto sopii parhaiten? Miksi? Miten sovitat malliparametrit? Valitaan ensin sopiva mallivaihtoehto. Kuvan 0. dataa ei selvästikään pysty mallittamaan lineaarisella mallilla, joten malli on poissa laskuista. Malli numero 3 edustaa ylös- tai alaspäin aukeavaa parabelia, joten sekään ei tule kysymykseen. Mallin numero ongelma on, että ajan hetkellä nolla se antaisi aineen ominaisuudelle äärettömän suuria arvoja. Saman tyyppinen ongelma on mallilla 5; nollasta ei voi ottaa logaritmia ja kun vielä log ( ) =, ei malli 5 voi myöskään olla oikea. Jäljelle jää malli 4, joka on toimiva malli. 7 y() t = a e bt + c (0.) Malliparametrien sovittaminen tapahtuu seuraavasti. Tehtävän havainnollistamiseksi ei oteta käyttöön koko mittausdataa vaan vain osa, joka on esitetty taulukossa 0.. Taulukko 0. i 3 4 5 6 7 t 0 50 00 50 00 50 300 y 5.0 3.87 3.6535 3.5365 3.4495 3.35 3.835 i 8 9 0 3 t 350 400 450 500 550 600 y 3.5 3.79 3.5 3.097 3.07 3.047 6 7 Mallivaihtoehdot tekn. yo. Katja Viirretin ja tekn. yo. Satu Kivelän tekemästä säätötekniikan erikoistyöstä. Alkuperäinen analyysi tekn. yo. Visa Virtasen tenttivastauksessa.

- 4 - Kuva taulukon 0. datasta voidaan piirtää kuva seuraavanlaisen koodin avulla. % koe.m % 0.05.999 (c) Juha Jaako clear all ; hold on ; t = [ 0 50 00 50 00 50 300... 350 400 450 500 550 600 ] ; y = [ 5.0000 3.8700 3.6535 3.5365 3.4495 3.350 3.835... 3.5 3.790 3.50 3.0970 3.0700 3.0470 ] ; plot (t, y, 'ko') ; xlabel ('\it{t}') ; ylabel ('\it{y}') ; hold off ; Ongelmana on määrittää parametrit a, b ja c niin, että malli kuvaa datajoukkoa mahdollisimman hyvin. Mikäli olisi tarjolla vain 3 datapistettä, ratkaisu voitaisiin laskea muodostamalla yhtälöryhmä, jossa on kolme tuntematonta ja kolme yhtälöä. Nyt kuitenkin saamme yhtälöryhmän, jossa on kolme tuntematonta ja 3 yhtälöä. Tällainen ongelma voidaan ratkaista pienimmän neliösumman menetelmällä (kts. luku 5!), joka ongelmamme tapauksessa saa muodon 3 ( ) = min I a, b, c [ yi a exp( bti ) c] (0.) i= Eli ongelmamme on optimointitehtävä; I täytyy minimoida. Sijoittamalla taulukon 0. data saadaan kohdefunktio muotoon. I + + min + + + ( a, b, c) = [ 5 a c] + [ 3.87 a exp( 50b) c] + [ 3.6535 a exp( 00b) c] [ 3.5365 a exp( 50b) c] + [ 3.4495 a exp( 00b) c] [ 3.35 a exp( 50b) c] + [ 3.835 a exp( 300b) c] [ 3.5 a exp( 350b) c] + [ 3.790 a exp( 400b) c] [ ] [ ] [ ] [ ] 3.5 a exp( 450b) c + 3.097 a exp( 500b) c 3.07 a exp( 550b) c + 3.047 a exp( 600b) c (0.3) 8 Selvästikin (0.3):n ratkaiseminen esim. analyyttisesti on aika toivoton tehtävä. Ennenkuin ongelma ratkaistaan, voidaan tarkastella, missä parametrien arvot suunnilleen ovat. Nyt tiedämme, että [ a exp( bt) + c] c lim (0.4) t joten voimme arvioida, että c 3 (t = 600, y = 3.0470). Samoin voimme laskea, että kun t = 0 niin y = 5, joten saadaan a exp( b * 0) + c = 5 (0.5) a + c = 5 a kun c 3 (0.6) 8 Ongelman (0.3) ratkaisu on a =.745, b = 0.0457 ja c = 3.63.