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

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

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

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

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

Matriiseista. Emmi Koljonen

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

Sovellettu todennäköisyyslaskenta B

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

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

. 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

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

1 Komparatiivinen statiikka ja implisiittifunktiolause

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

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

Differentiaaliyhtälöryhmä

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

Matlabin perusteita Grafiikka

Johdatus tekoälyn taustalla olevaan matematiikkaan

Luento 11: Rajoitusehdot. Ulkopistemenetelmät

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

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

1 Di erentiaaliyhtälöt

Johdatus tekoälyn taustalla olevaan matematiikkaan

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

= 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

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

Numeeriset menetelmät

Matemaattiset ohjelmistot A. Osa 2: MATLAB

Ratkaisuehdotukset LH 7 / vko 47

1 Rajoittamaton optimointi

Valitse ruudun yläosassa oleva painike Download Scilab.

MS-C1340 Lineaarialgebra ja

FUNKTION KUVAAJAN PIIRTÄMINEN

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

Matematiikka B2 - TUDI

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

Zeon PDF Driver Trial

Luento 4: Liikkeen kuvausta, differentiaaliyhtälöt

2v 1 = v 2, 2v 1 + 3v 2 = 4v 2.. Vastaavasti ominaisarvoa λ 2 = 4 vastaavat ominaisvektorit toteuttavat. v 2 =

Luento 8: Epälineaarinen optimointi

Numeeriset menetelmät

Harjoitus 10: Mathematica

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

Harjoitus 3 ( )

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

Differentiaali- ja integraalilaskenta 2 Laskuharjoitus 4 / vko 40

12. Differentiaaliyhtälöt

Matriisilaskenta, LH4, 2004, ratkaisut 1. Hae seuraavien R 4 :n aliavaruuksien dimensiot, jotka sisältävät vain

Oppimistavoitematriisi

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

Matematiikan perusteet taloustieteilijöille II Harjoituksia kevät ja B = Olkoon A = a) A + B b) AB c) BA d) A 2 e) A T f) A T B g) 3A

Harjoitus 3 ( )

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

T Luonnollisen kielen tilastollinen käsittely Vastaukset 3, ti , 8:30-10:00 Kollokaatiot, Versio 1.1

Differentiaalilaskennan tehtäviä

Kanta ja Kannan-vaihto

Matematiikan tukikurssi

Harjoitus 5 -- Ratkaisut

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

Harjoitus 4: Matlab - Optimization Toolbox

Johdatus tekoälyn taustalla olevaan matematiikkaan

Luento 9: Yhtälörajoitukset optimoinnissa

Malliratkaisut Demot

Satunnaismuuttujien muunnokset ja niiden jakaumat

Malliratkaisut Demot

1. Lineaarinen optimointi

Differentiaali- ja integraalilaskenta 1 Ratkaisut 5. viikolle /

Harjoitus 7 -- Ratkaisut

ja B = 2 1 a) A + B, b) AB, c) BA, d) A 2, e) A T, f) A T B, g) 3A (e) A =

L A TEX, pdfl A TEX ja grafiikka

Insinöörimatematiikka D

Harjoitus 1 -- Ratkaisut

Demo 1: Simplex-menetelmä

ja B = 2 1 a) A + B, b) AB, c) BA, d) A 2, e) A T, f) A T B, g) 3A (e)

T Luonnollisten kielten tilastollinen käsittely

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

Numeerinen integrointi ja derivointi

Ratkaisuehdotukset LH 3 / alkuvko 45

Malliratkaisut Demot

Kimppu-suodatus-menetelmä

Numeerinen integrointi

A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.

BM20A0900, Matematiikka KoTiB3

Matematiikan tukikurssi

Matematiikka B2 - Avoin yliopisto

Tehtävänanto oli ratkaista seuraavat määrätyt integraalit: b) 0 e x + 1

Matematiikan tukikurssi

Lineaarikuvausten. Lineaarikuvaus. Lineaarikuvauksia. Ydin. Matriisin ydin. aiheita. Aiheet. Lineaarikuvaus. Lineaarikuvauksen matriisi

3 = Lisäksi z(4, 9) = = 21, joten kysytty lineaarinen approksimaatio on. L(x,y) =

Harjoitus 2 -- Ratkaisut

Talousmatematiikan perusteet

Lineaariset kongruenssiyhtälöryhmät

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

Oppimistavoitematriisi

MS-A0204 Differentiaali- ja integraalilaskenta 2 (ELEC2) Luento 9: Muuttujanvaihto taso- ja avaruusintegraaleissa

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

Heikki Apiola, Juha Kuortti, Miika Oksman. 5. lokakuuta Matlabperusteita, osa 1

Ominaisarvoon 4 liittyvät ominaisvektorit ovat yhtälön Ax = 4x eli yhtälöryhmän x 1 + 2x 2 + x 3 = 4x 1 3x 2 + x 3 = 4x 2 5x 2 x 3 = 4x 3.

1 Kertaus. Lineaarinen optimointitehtävä on muotoa:

b 1. b m ) + ( 2b Ax) + (b b)

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ällysluet t elo 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 SBN 95-4-754- (PDF) ISSN 38-9404

- 3 - Johdant o 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ä Hew let t- 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 Equat ion Edit or ver 3.0:lla. Kirjan valmistuksessa on käytetty seuraavia kuvaformaatteja: TI FF (-tiff), JPEG (-djpeg) ja Encapsulated Level Post- Script (-deps). Käytetty kone oli seuraavanlainen: käyttöjärjestelmä Window s 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-ohj elm oint ikielest ä 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 = b0 + b x b x (.) Y + 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). % EHal s. m - Nel i öl l i nen mal l i. % 7. 0. 999 ( c) Juha Jaako % Edgar & Hi mmel bl au s. 55-56 % Tämä ver si o l askee vai n mal l i par amet r i t! cl ear al l ; % Dat a - pyst yvekt or ei t a! x = [ 0 0 30 40 40 50 50 50 60 70 ] ' ; Y = [ 73 78 85 90 9 87 86 9 75 65 ] ' ; N = si ze ( x, ) ; % Vekt or i n pi t uus. % Muodost et aan X- mat r i i si. mx = zer os ( N, 3) ; % Al ust et aan mat r i i si nol l i l l a. f or i = : N, % Täyt et ään mat r i i si r i vi ker r al l aan. mx( i, : ) = [, x( i ), x( i ) ^ ] ; end % Rat kai st aan mal l i par amet r i t. b = ( i nv ( ( mx' ) * mx) ) * ( mx' ) * Y % Rat kai sukaava mat r i i si muodossa Ohjelma tulostaa vastaukseksi» EHal s 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). % EHal s. m - Nel i öl l i nen mal l i. % 7. 0. 999 ( c) Juha Jaako % Edgar & Hi mmel bl au s. 55-56 cl ear al l ; hol d on ;

- 7 - % Dat a x = [ 0 0 30 40 40 50 50 50 60 70 ] ' ; Y = [ 73 78 85 90 9 87 86 9 75 65 ] ' ; N = si ze ( x, ) ; % Vekt or i n pi t uus. pl ot ( x, Y, ' ko' ) ; % Pi i r r et ään koepi st eet. % Muodost et aan X- mat r i i si. mx = zer os ( N, 3) ; f or i = : N, mx( i, : ) = [, x( i ), x( i ) ^ ] ; end % Rat kai st aan mal l i par amet r i t. b = ( i nv ( ( mx' ) * mx) ) * ( mx' ) * Y ; % Pi i r r et ään mal l i n kuvaaj a. xx = mi n( x) : 0. : max( x) ; % 0. : n väl ei n väl i l l e 0-70. M = si ze ( xx, ) ; f or i = : M, yy( i ) = b( ) +b( ) * xx( i ) +b( 3) * xx( i ) ^ ; end pl ot ( xx, yy, ' k- ' ) ; % Pi i r r et ään mal l i kuvaan. % Maksi mi voi daan et si a kahdel l a t aval l a % JOKO et si mäl l ä maksi mi edel l ä l asket ui st a vekt or ei st a. [ I, J] = max ( yy) ; % I : suur i n ar vo. % J : ar von i ndeksi. di sp ( ' ' ) ; di sp ( ' Maksi mi vekt or i st a hakemal l a: ' ), di sp ( [ ' Suur i n ar vo ( Y) : ' numst r ( I ) ] ) ; di sp ( [ ' Pi st eessä ( x) : ' numst r ( xx( J) ) ] ) ; pl ot ( xx( J), I, ' k+' ) ; % TAI kayt t amal l a MATLABi n f mi n- f unkt i ot a ( kt s. l i i t e 3! ) % Et si t aan maksi mi ( pannaan mi i nusmer kki et een). % Ensi n muodost et aan kohdef unkt i o. b0s = numst r ( b( ) ) ; bs = numst r ( b( ) ) ; bs = numst r ( b( 3) ) ; f unkt i o = [ ' - ( ( ' b0s ' ) +( ' bs ' ) * x+( ' bs ' ) * x^ ) ' ] ; % Si t t en kut sut aan MATLABi n f mi n- f unkt i ot a. xmax = f mi n ( f unkt i o, mi n( x), max( x) ) ; ymax = b( ) +b( ) * xmax+b( 3) * xmax^ ; di sp ( ' ' ) ; di sp ( ' Maksi mi f mi n- f unkt i ol l a: ' ), di sp ( [ ' Suur i n ar vo ( Y) : ' numst r ( ymax) ] ) ; di sp ( [ ' Pi st eessä ( x) : ' numst r ( xmax) ] ) ; pl ot ( xmax, ymax, ' k* ' ) ; % Kuvan ot si kot, aksel i t j ne.. ( käyt et ään kur si i vi a). xl abel ( ' \ i t x' ) ; yl abel ( ' \ i t Y' ) ; % _ : al ai ndeksi, ^ : yl äi ndeksi t i t l e ( ' Nel i öl l i nen mal l i { \ i t Y = { b_0} +{ b_ x} +{ b_} { x^} } ' ) ; % Esi t et ään mal l i par amet r i t ki n kuvassa. t ext ( 30, 7. 5, [ ' \ i t { b_0} = ' b0s ] ) ; t ext ( 30, 70. 0, [ ' \ i t { b_} = ' bs ] ) ; t ext ( 30, 67. 5, [ ' \ i t { b_} = ' bs ] ) ; % Lasket aan mal l i n sel i t ysast e. R = sel i ast e ( Y, mx* b, N) ; Rs = numst r ( R) ; t ext ( 30, 64. 0, [ ' \ i t { R^} = ' Rs ] ) ; hol d of f ;

- 8 - % Tul ost et aan kuva t i edost oon Encapsul at ed Post scr i pt - muot oon 4. pr i nt - t i f f - deps c: \ t emp\ EHal s ; Selitysasteen laskenta tehdään erillisen funktion avulla (MATLAB-ohjelmointikielessä funktiot on koodattava erilliseksi tiedostoksi) - huomaa funktion syntaksi. % sel i ast e. m - Laskee sel i t ysast een % ( c) Juha j aako 0.. 998 % DO - havai t ut ar vot % DOkal c - mal l i n ant amat ar vot f unct i on f = sel i ast e ( DO, DOkal c, N) % Lasket t u sel i t ysast e. SST = 0 ; % Kokonai snel i ösumma SSR = 0 ; % Jäännösnel i ösumma SSD = 0 ; % Sel i t et t y nel i ösumma DOmean = mean ( DO) ; f or i = : N, SST = SST + ( DO( i ) - DOmean) ^ ; SSR = SSR + ( DO( i ) - DOkal c( i ) ) ^ ; end SSD = SST - SSR ; f = - ( SSR/ SST) ; Koodi tulostaa seuraavaa» ehal s Maksi mi vekt or i st a hakemal l a: Suur i n ar vo ( Y) : 89. 8933 Pi st eessä ( x) : 4. Maksi mi f mi n- f unkt i ol l a: Suur i n ar vo ( Y) : 89. 8933 Pi st eessä ( 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 Koodissa oleva komento Kuva.. Mallipisteet, malliyhtälö ja malliparametrit. pr i nt - t i f f - deps c: \ t emp\ EHal s ; 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 pr i nt - dj peg c: \ t emp\ EHal s ; 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 Integroimalla yhtälöt (.)-(.3) saaadaan, kun 0 k, k ja 3 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 (.8) dx 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» i nv( 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» t hr ewal l T = 33. 450 % Kel vi n xmx0 = 0. 69 % met r ei nä 0. 3837 % j al koi na xmx = 0. 56 % met r ei nä 0. 53 % j al koi na - 4 - jota voi verrata viitteen (Bird et al. 960, 305) ratkaisuun (0.39 ft ja 0.5 ft). Ohjelmakoodi on seuraavanlainen % t hr ewal l. m %. 0. 999 ( c) Juha Jaako % Lämmönsi i r t o kol men sei nämän l äpi. % Bi r d et al., s. 84-85 & 305 f or mat shor t ; % Lasket aan t er ässei nä. % Ensi n muunnos SI - yksi köi hi n. T3 = FK ( 00) ; % of - > K q0 = Bf hwm ( 5000) ; % Bt u / ( f t ^ h) - > W/ m^ xmx3 = 0. 054* ( - / 4) ; % i n - > m k3 = Bf hfwmk ( 6. ) ; % Bt u/ ( f t h of) - > W/ ( m K) T = T3 - q0* ( xmx3/ k3) % Kaava (. ) % Lasket aan t ul i t i i l i sei nä. % Lasket aan ensi n dat an avul l a par amet r i t. A = [ FK( 00) ;... FK( 000) ] ; B = [ Bf hfwmk(. 8) ; Bf hfwmk( 3. 6) ] ; dat a = A\ B ; a = dat a( ) ; b = dat a( ) ; T0 = FK ( 500) ; T = FK ( 000) ; % of - > K % of - > K t emp = ( a/ ) * ( T^- T0^) ; t emp = b* ( T- T0) ; xmx0 = ( t emp+t emp) / ( - q0) % Kaava (. 0) di sp ( xmx0/ 0. 3048) ; % m - > f t % Lasket aan er i st et i i l i sei nä. % Lasket aan ensi n dat an avul l a par amet r i t. A = [ f K( 00) ;... f K( 000) ] ; B = [ Bf hfwmk( 0. 9) ; Bf hfwmk(. 8) ] ; dat a = A\ B ; a = dat a( ) ; b = dat a( ) ; t emp = ( a/ ) * ( T^- T^) ; t emp = b* ( T- T) ; xmx = ( t emp+t emp) / ( - q0) % Kaava ( ) di sp ( xmx/ 0. 3048) ; % m - > f t

- 5 - Muunnosfunktiot SI-yksiköihin ovat seuraavanlaisia (huomaa, että kaikki funktiot on kirjoitettava erillisiksi tiedostoiksi) % FK. m %. 0. 999 ( c) Juha Jaako % Fahr enhei t t o Kel vi n conver si on. f unct i on K = FK ( F) K = ( F- 3) / (. 8) + 73. 5 ; % Funkt i on l oppu % Bf hwm. m %. 0. 999 ( c) Juha Jaako % Bt u/ ( f t ^ h) t o W/ m^ conver si on % CRC 74t h edi t i on s. - 6 f unct i on Wm = Bf hwm ( Bf h) Wm = 3. 5459* Bf h ; % Funkt i on l oppu % Bf hfwmk. m %. 0. 999 ( c) Juha Jaako % Bt u/ ( f t h of) t o W/ ( m K) conver si on % CRC 74t h edi t i on s. - 6 f unct i on WmK = Bf hfwmk ( Bf hf) WmK =. 730735* Bf hf ; 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 z sin xsin y, = (3.) x y ( x y) 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. % l ai nk87. m % 5.. 998 ( c) Juha Jaako % Funkt i on kuvaaj a. axi s ( [ - 4* pi 4* pi - 4* pi 4* pi - 0. 4. 0] ) ; [ x, x] = meshgr i d ( - 4* pi : 0. : 4* pi, - 4* pi : 0. : 4* pi ) ; A = ( si n( x). / x). * ( si n( x). / x) ; mesh ( x, x, A) ; pr i nt - deps c: \ t emp\ l ai nk87 ; 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 axi s ( [ - 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] = meshgr i d ( - 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 = ( si n( x). / x). * ( si n( 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. % l ai ne87. m % 9. 0. 998 & 5.. 998 & 6.. 998 % ( c) Juha Jaako % Sat unnai shaku. % Funkt i on kuvaaj a. t i t l e ( ' t asa- ar vokayr at z > 0 j a sat unnai shaku' ) ; axi s ( [ - 4* pi 4* pi - 4* pi 4* pi ] ) ; [ x, x] = meshgr i d ( - 4* pi : 0. : 4* pi, - 4* pi : 0. : 4* pi ) ; z = ( si n( x). / x). * ( si n( x). / x) ; t a = 0. 0 : 0. 0 : 0. 9 ; t a = 0. : 0. 0 : 0. 8 ; t a3 = 0. 3 : 0. :. 0 ; t a = [ t a t a t a3] ; cont our ( x, x, z, t a) ;

- 8 - % Sat unnai shaku. hol d on ; axi s ( [ - 4* pi 4* pi - 4* pi 4* pi ] ) ; m = REALMI N ; % Lasket aan 5000 ki er r ost a. f or i = : 5000, x = 4* pi * ( * r and- ) ; y = 4* pi * ( * r and- ) ; pl ot ( x, y, ' k. ' ) ; i f ( i == ), ol dx = x ; ol dy = y ; pl ot ( x, y, ' ko' ) ; end z = ( si n( x) / x) * ( si n( y) / y) ; i f ( z > m), m = z ; st r = spr i nt f ( ' %d\ t %8. 3f \ t %8. 3f \ t %8. 3f ', i, x, y, z) ; di sp ( st r ) ; pl ot ( x, y, ' ko' ) ; l i ne ( [ ol dx x], [ ol dy y] ) ; ol dx = x ; ol dy = y ; end end hol d of f ; pr i nt - dj peg00 c: \ t emp\ l ai ne87 ; Ohjelma tulostaa seuraavaa:» l ai ne87. 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 xsin 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.) jossa l k =. Tarkoituksena on käsitellä mol min mol F A 0 = syötettä, jossa on 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 F ( R + ) + R = ln k C A0 A0 R ( X Af ) ( X ) Af 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 =.9ln = 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 ( f0 + 4 f + f + 4 f3 + + fm + 4 fm + fm ) (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. % r ecycl e. m % 5.. 998 ( c) Juha Jaako % Pal aut ussuht een opt i mi : R = 0. 893 ; % Reakt i opar amet r i t. FA0 = ; % [ mol / mi n] k = ; % [ l / mol * mi n] CA0 = ; % [ mol / l ] XAf = 0. 99 ; % [ di mensi ot on] par am = [ FA0 k CA0 XAf ] ; di sp ( ' - - Mi ni moi mal l a j a numeer i sest i i nt egr oi mal l a' ) ; R = f mi n ( ' si mpson', 0,, [ ], par am) % Pal aut ussuht een mi ni mi. V = si mpson ( R, par am) % Mi ni mi t i l avuus. di sp ( ' - - Levenspi el ' ) ; Ropt = f mi n ( ' ( x+) * l og( ( +0. 0* x) / ( 0. 0* x) ) ', 0., 0. 9) Vopt = ( Ropt +) * l og( ( +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.» r ecycl e - - Mi ni moi mal l a j a numeer i sest i i nt egr oi mal l a R = 0. 893 V = 7. 4587 - - Levenspi el 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. % si mpson. m % 5.. 998 ( c) Juha Jaako % Pal aut ussuht een opt i moi nt i. % Kr eyszi g E, Advanced engi neer i ng mat hemat i cs. s. 960-963. % Levenspi el O, Chemi cal r eact i on engi neer i ng. s. 55-56. % Numeer i nen i nt egr oi nt i - Si mpsoni n säänt ö. f unct i on f = si mpson ( R, par am) % Pal aut ussuht een opt i mi : R = 0. 893 ;

- - % Reakt i opar amet r i t. FA0 = par am( ) ; % [ mol / mi n] k = par am( ) ; % [ l / mol * mi n] CA0 = par am( 3) ; % [ mol / l ] XAf = par am( 4) ; % [ di mensi ot on] % Par amet r i t a = ( R/ ( R+) ) * XAf ; % I nt egr oi nni n al oi t uspi st e. b = XAf ; % " l opet uspi st e. m = 500 ; % Väl i en l ukumäär ä. Ol t ava SUURI j a PARI LLI NEN. h = ( b- a) / m ; % Väl i n pi t uus. % Laskent api st eet numeer i st a i nt egr oi nt i a var t en. f = zer os ( m+, ) ; f or i = 0 : m, x = a + h* i ; f ( i +) = / ( x* ( - x) ) ; end % Lasket aan Si mpsoni n par amet r i t. s0 = f ( ) + f ( m+) ; s = 0 ; f or i = : : ( m- ), s = s + f ( i +) ; end s = 0 ; f or i = : : ( m- ), s = s + f ( i +) ; end % Numeer i sen i nt egr aal i n ar vo. J = ( h/ 3) * ( s0 + 4* s + * s) ; vaki o = ( FA0* ( R+) ) / ( k* CA0^) ; V = vaki o* 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äl i en l ukumäär ä. Ol t ava SUURI j a PARI LLI NEN. 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) % r ecycl e. m % 6.. 998 ( c) Juha Jaako % Pal aut ussuht een opt i mi : R = 0. 893 ; % Reakt i opar amet r i t. FA0 = ; % [ mol / mi n] k = ; % [ l / mol * mi n] CA0 = ; % [ mol / l ] XAf = 0. 99 ; % [ di mensi ot on] par am = [ FA0 k CA0 XAf ] ; di sp ( ' - - Mi ni moi mal l a j a numeer i sest i i nt egr oi mal l a' ) ; R = f mi n ( ' si mpson', 0, 0, [ ], par am) % Pal aut ussuht een mi ni mi. V = si mpson ( R, par am) % Mi ni mi t i l avuus. % Kuvaaj a. hol d on ; f or R = 0. 0 : 0. 005 :, pl ot ( R, si mpson ( R, par am), ' k. ' ) ; end xl abel ( ' R' ) ; yl abel ( ' V' ) ; hol d of f ; pr i nt - deps - t i f f c: \ t emp\ r ecycl e ; di sp ( ' - - Levenspi el ' ) ; Ropt = f mi n ( ' ( x+) * l og( ( +0. 0* x) / ( 0. 0* x) ) ', 0., 0. 9) Vopt = ( Ropt +) * l og( ( +0. 0* Ropt ) / ( 0. 0* Ropt ) ) Koodi tulostaa seuraavan tekstin» r ecycl e - - Mi ni moi mal l a j a numeer i sest i i nt egr oi mal l a R = 0. 893 V = 7. 4587 - - Levenspi el 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 % si mpson. m - 6.. 998 ( c) Juha Jaako % Pal aut ussuht een opt i moi nt i. % Levenspi el O, Chemi cal r eact i on engi neer i ng. s. 55-56. % Numeer i nen i nt egr oi nt i - Mat l abi n quad8- f unkt i o. f unct i on f = si mpson ( R, par am) % Pur et aan par amet r i vekt or i - > r eakt i opar amet r i t. FA0 = par am( ) ; % [ mol / mi n] k = par am( ) ; % [ l / mol * mi n] CA0 = par am( 3) ; % [ mol / l ] XAf = par am( 4) ; % [ di mensi ot on] % Par amet r i t a = ( R/ ( R+) ) * XAf ; % I nt egr oi nni n al oi t uspi st e. b = XAf ; % " l opet uspi st e. t ol = e- 3 ; % Suht eel l i nen vi r he. % Numeer i nen i nt egr oi nt i quad8- f unkt i on avul l a. J = quad8 ( ' si mpi nt ', a, b, t ol ) ; % Mat l abi n i nt egr aat t or i!!! vaki o = ( FA0* ( R+) ) / ( k* CA0^) ; V = vaki o* J ; f = V ;

- 5 - ja integraattorin käyttämä funktio (simpint.m). % si mpi nt. m % 6.. 998 ( c) Juha Jaako % HUOM: x on vekt or i % f on vekt or i f unct i on f = si mpi nt ( 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.» si mpson ( 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).» si mpson ( e-, [ 0. 99 ] ) ans = 9. 306» si mpson ( e- 4, [ 0. 99 ] ) ans = 8. 04» si mpson ( e- 6, [ 0. 99 ] ) ans = 678. 945» si mpson ( e- 8, [ 0. 99 ] ) ans = 6. 6678e+004» si mpson ( 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ä - j ohdant oa 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): ai+ = ai λmingi (5.8) Newton (N): a i+ = ai J i Gi (5.9) Parannettu Newton (MN) : a = a λ J G (5.0) i+ i 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, λmin laskettu askelpituus, G i gradienttivektorin arvo edellisessä laskentapisteessä, J i Hessin matriisin arvo edellisessä laskentapisteessä, H i Hessin matriisin käänteismatriisia approksimoiva matriisin arvo edellisessä laskentapisteessä, I 4 yksikkömatriisi ja Λ on kerroin, jonka aloitusarvona yleensä on 0. 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 DFP : H ' ' H i yi yi H i sisi 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-Pow ell-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). % pi i r t o. m - j uha j aako 7. 05. 999 % Pi i r r et ään f unkt i on f ( x, x) = ( x- ) ^4 + ( x- x) ^ % t asa- ar vokäyr ät. f unct i on f = pi i r t o ( koor d) [ x, x] = meshgr i d ( koor d( ) : 0. : koor d( ),... koor d( 3) : 0. : koor d( 4) ) ; A = ( x - ). ^ 4 + ( x - x). ^ ; t a = mi n( mi n( A) ) : : max( max( A) ) ; cont our ( x, x, A, t a) ; % Tekst i t. xl abel ( ' \ i t { x_} ' ) ; yl abel ( ' \ i t { x_} ' ) ; t i t l e ( ' \ i t { 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. % df p4. m % j uha j aako - 7. 05. 999 - kt s. Jaako ( 997, s. 65) & James et al. ( 993, 748) cl ear al l ; % Put sat aan mui st i r omust a. f or mat shor t ; hol d on ; koor d = [ -. 5 0 3] ; %axi s ( koor d) ; dummy = pi i r t o ( koor d) ; %_Mi ni mi pi st eessä (, ). mp = [ ; ] ; pl ot ( mp( ), mp( ), ' k+' ) ; t ol = e- 4 ; % Laskent at ol er anssi. %_DFP- menet el mä. ap = [ - ; ] ; pl ot ( ap( ), ap( ), ' ko' ) ; G = df p4_d ( ap) ; % Gr adi ent i n ar vo pi st eessä. f = df p4_f ( ap) ; i t er = 0 ; % Al ust et aan i t er oi nt i l askur i. H = eye ( ) ; % Yksi kkömat r i i si.

- 30 - %whi l e ( max ( abs ( ap- mp) ) > t ol ), f or i = : 0, % Lasket aan 0 ki er r ost a. T = H * G ; % Lasket aan askel pi t uus. t = f mi n ( ' df p4_m', - 0, 0, [ ], ap, T) ; % Lasket aan uusi pi st e. ap_ol d = ap ; % Tal l et et aan vanha pi st e. ap = ap - t * T ; % Lasket aan uusi pi st e. pl ot ( ap( ), ap( ), ' ko' ) ; % Mer kat aan pi st e kuvaan. G_ol d = G ; % Tal l et et aan vanha gr adi ent i n ar vo. G = df p4_d ( ap) ; % Gr adi ent i n ar vo uudessa pi st eessä. f = df p4_f ( ap) ; % Funkt i on ar vo uudessa pi st eessä. % H- mat r i i si n päi vi t ys. sk = ap - ap_ol d ; yk = G - G_ol d ; Bk = H ; % Davi don, Fl et cher & Powel l, kt s. James s. 753 t e = Bk* yk* ( yk' ) * Bk ; t e = ( yk' ) * Bk* yk ; t e3 = sk* ( sk' ) ; t e4 = ( sk' ) * yk ; H = H - ( t e/ t e) + ( t e3/ t e4) ; % Jyr ki n l asku saadaan seur aaval l a. % H = eye ( ) ; i t er = i t er + ; % Kasvat et aan i t er oi nt i l askur i a. end ; ap G i t er hol d of f ; Huomaa, että päivitysalgoritmi on koodattu seuraavasti t e = Bk* yk* ( yk' ) * Bk ; t e = ( yk' ) * Bk* yk ; t e3 = sk* ( sk' ) ; t e4 = ( sk' ) * yk ; H = H - ( t e/ t e) + ( t e3/ t e4) ; 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) % df p4_f. m % Lasket aan f unkt i on ar vo. f unct i on f = df p4_f ( x) f = ( x( ) - ) ^4 + ( x( ) - x( ) ) ^ ;

(dfp4_d.m) % df p4_d. m % Lasket aan gr adi ent t i vekt or i. f unct i on G = df p4_d ( x) - 3 - G = [ 4* ( x( ) - ) ^3 + * ( x( ) - x( ) ) ; - * ( x( ) - x( ) ) ] ; ja (dfp4_m.m). % df p4_m. m % Askel pi t uuden l askent af unkt i o. f unct i on y = df p4_m ( x, ap, T) xx = ap - x* T ; y = df p4_f ( xx) ; Ajamalla ohjelma, saadaan vastaukseksi» df p4 ap =. 0000. 0000 G =. 0e- 0 * 0. 9044-0. 904 i t er = 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) % l evmar. m % Levenber g- Mar quar dt t eht. 6 % Rekl ai t i s, Ravi ndr an & Ragsdel l s. 06 %. 0. 999 & 7. 05. 999 ( c) Juha Jaako cl ear al l ; % Put sat aan mui st i r omust a. f or mat shor t ; hol d on ; koor d = [ -. 5 0 3] ; dummy = pi i r t o ( koor d) ; %_Mi ni mi pi st eessä (, ). mp = [ ; ] ; pl ot ( mp( ), mp( ), ' ko' ) ; %_Levenber g- Mar quar dt - menet el mä. % STEP ap = [ - ; ] ; % Haun al kuar vo. pl ot ( ap( ), ap( ), ' k* ' ) ; M = e4 ; % Ki er r ost en maksi mi määr ä. t ol = e- 0 ; % Laskent at ol er anssi. % STEP i t er = 0 ; % Al ust et aan i t er oi nt i l askur i. L = e4 ; % Lambdan al kuar vo. %L = 0 ; % Newt on. % STEP 3 G = df p4_d ( ap) ; f = df p4_f ( ap) ; % Gr adi ent i n ar vo. % Funkt i on ar vo. I = eye ( ) ; % Yksi kkomat r i i si. % STEP 4 & 5 whi l e ( ( max( abs( G) ) >t ol ) & ( i t er <M) ), %f or i = : 00, % Lasket aan 0 ki er r ost a. % STEP 6 G = df p4_d ( ap) ; H = l evmar _h ( ap) ; t emp = i nv ( H + L* I ) ; t emp = t emp* G ; % STEP 7 ap_ol d = ap ; ap = ap - t emp ; % Gr adi ent i n ar vo. % Hessi n mat r i i si n ar vo. % Tal l et et aan vanha. 5 Virheet käyvät selville, kun vertaat liitteen algoritmia ja koodia!

- 33 - % STEP 8 - pi eneni kö f unkt i on ar vo? i f ( df p4_f ( ap) < df p4_f ( ap_ol d) ), % STEP 9 - pi enennet ään l ambdaa L = L/ ; i t er = i t er + ; % Kasvat et aan i t er oi nt i l askur i a. pl ot ( ap( ), ap( ), ' k+' ) ; el se % STEP 0 - kasvat et aan l ambdaa L = * L ; ap = ap_ol d ; end end abs ( mp- ap) G H i t er hol d of f ; Lisäksi tarvitaan Hessin matriisin laskeva koodi (tässä toiset osittaisderivaatat on laskettu analyyttisesti eikä numeerisesti) % l evmar _h. m % Lasket aan Hessi n mat r i i si. f unct i on H = l evmar _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» l evmar ans =. 0e- 003 * 0. 970 0. 970 G =. 0e- 00 * - 0. 684-0. 6 H =. 0000 -. 0000 -. 0000. 0000 i t er = 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 Luvun 7 algoritmia ( i i ( i ) i = a J + I G ) voidaan parantaa ottamalla mukaan + Λ a askelpituuden laskenta ( i i min ( i ) i = a λ H + I G ). Tämä laskenta-algoritmi on + Λ esitetty liitteessä (Edgar & Himmelblau 988, 4). Koodattuna saamme seuraavanlaisen koodin (levmar.m) % l evmar. m % Levenber g- Mar quar dt t eht. 6 % Edgar & Hi mmel bl au s. 4 % 5. 0. 999 & 8. 05. 999 ( c) Juha Jaako cl ear al l ; % Put sat aan mui st i r omust a. f or mat shor t ; hol d on ; koor d = [ -. 5 0 3] ; %axi s ( [ - 0 4] ) ; dummy = pi i r t o ( koor d) ; %_Mi ni mi pi st eessä (, ). mp = [ ; ] ; pl ot ( mp( ), mp( ), ' ko' ) ; %_Levenber g- Mar quar dt - menet el mä. % STEP ap = [ - ; ] ; % Haun al kuar vo. pl ot ( ap( ), ap( ), ' ko' ) ; M = e3 ; % Ki er r ost en maksi mi määr ä. t ol = e- 0 ; % Laskent at ol er anssi. % STEP i t er = 0 ; % Al ust et aan i t er oi nt i l askur i. Be = e3 ; % Beet an al kuar vo. % Beet a voi daan l aske myos omi nai sar voj en avul l a. % Edgar & Hi mmel bl au s. 4-5 % STEP 3 G = df p4_d ( ap) ; % Gr adi ent i n ar vo. f = df p4_f ( ap) ; % Funkt i on ar vo. I = eye ( ) ; % Yksi kkomat r i i si. % STEP 4 whi l e ( ( max( abs( G) ) >t ol ) & ( i t er <M) ), %f or i = : 00, % Lasket aan 0 ki er r ost a. % STEP 5 G = df p4_d ( ap) ; H = l evmar _h ( ap) ; %di sp ( mi n ( ei g ( H) ) ) ; t emp = i nv ( H + Be* I ) ; t emp = t emp* G ; % Gr adi ent i n ar vo. % Hessi n mat r i i si n ar vo. % STEP 6 ap_ol d = ap ; % Tal l et et aan vanha. t = f mi n ( ' df p4_m', 0, e3, [ ], ap, t emp) ; ap = ap - t * t emp ;

- 36 - % STEP 7 i f ( df p4_f ( ap) < df p4_f ( ap_ol d) ), % STEP 8 Be = Be/ 4 ; i t er = i t er + ; % Kasvat et aan i t er oi nt i l askur i a. pl ot ( ap( ), ap( ), ' k+' ) ; pl ot ( [ ap_ol d( ) ap( ) ], [ ap_ol d( ) ap( ) ], ' k- ' ) ; el se % STEP 9 Be = * Be ; ap = ap_ol d ; end end ap G H i t er pr i nt - t i f f - deps c: \ t emp\ kkk ; hol d of f ; Kun ohjelma ajetaan, saadaan seuraavanlainen tulos» l evmar ap =. 0000. 0000 G =. 0e- 00 * - 0. 7954 0. 7955 H =. 0000 -. 0000 -. 0000. 0000 i t er = 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). % t emppr o. m % ( c) Juha Jaako 08. 0. 999 & 8. 05. 999 % Levenspi el s. 33 cl ear al l ; XAe = 0. 89 ; % di mensi ot on %CA0 = 4 ; % mol / l CA0 = ; % mol / l E = 600 ; % cal / mol E = 9600 ; R =. 98 ; % cal / ( mol K) T = 63 : 0. 5 : 383 ; N = si ze ( T, ) ; mr A = [ 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 = si ze ( mr A, ) ; hol d on ; axi s ( [ ( T( ) - 73) ( T( N) - 73) 0 ] ) ; f or j = : M, end f or i = : N, k = exp ( 7. - E/ ( R* T( i ) ) ) ; k = exp ( 4. 9- E/ ( R* T( i ) ) ) ; t emp = ( k* CA0- mr A( j ) ) / CA0 ; t emp = / ( k+k) ; XA = t emp* t emp ; xp( i ) = T( i ) - 73 ; yp( i ) = XA ; end % Pi i r r et aan käyr ä mr A: n vaki oar vol l a. pl ot ( xp, yp, ' k- ' ) ; % Käyr än maksi mi kohdat. [ a, b] = max ( yp) ; xmax( j ) = xp( b) ; ymax( j ) = yp( b) ; % Maksi mi kohdat. pl ot ( xmax( : j - ), ymax( : j - ), ' k- - ' ) ; % * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Tekst i t. % Ensi n aksel i t. xl abel ( ' Temper at ur e, { ^o} C \ r i ght ar r ow' ) ; yl abel ( ' Conver si on \ r i ght ar r ow' ) ;

- 39 - % Tekst i oi keaan yl äkul maan. si z = 30 ; t e(, : si z) = ' Ti me i n mi nut es ' ; t e(, : si z) = ' { \ i t C} _{ A0} = mol / l i t er ' ; t e( 3, : si z) = ' For ot her { \ i t C} _{ A0} change ' ; t e( 4, : si z) = ' - { \ i t r } _{ A} accor di ngl y ' ; f or j = : 4, t ext ( 80, 0. 94- ( j - ) * 0. 045, t e( j, : si z), ' Font Name', ' Ar i al ', ' Font Si ze', 8 ) ; end % Tekst i oi keal l e keskel l e. t ext ( 95. 5, 0. 5, ' \ l ef t ar r ow Equi l i br i um', ' Font Name', ' Ar i al ', ' Font Si ze', 8 ) ; % Tekst i t käyr i en yht eyt een - ei kai kki a. t ext ( - 7, 0. 95, [ ' - { \ i t r } _{ A} = ' numst r ( mr A( ) ) ], ' Font Name', ' Ar i al ', ' Font Si ze', 8 ) ; t ext ( 0, 0. 90, [ numst r ( mr A( 3) ) ], ' Font Name', ' Ar i al ', ' Font Si ze', 8 ) ; t ext ( 0, 0. 8, [ numst r ( mr A( 4) ) ], ' Font Name', ' Ar i al ', ' Font Si ze', 8 ) ; hol d of f ; pr i nt - t i f f - deps c: \ t emp\ t emppr o ; 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.