Jukka Aho (@ahojukka5)

Welcome to my blog !


Jäähdytysmentelmä

Published at July 12, 2020 ·  6 min read

Jäähdytysmenetelmä1 (engl. simulated annealing, SA) on satunnaisuuteen ja todennäköisyyksiin perustuva globaali optimointistrategia. Menetelmän perusajatus on ottaa satunnaisia askelia parametriavaruudessa ja hyväksyä uusi luku minimiksi todennäköisyysfunktion avulla. Todennäköisyysfunktio antaa arvon 1 mikäli uusi arvo on pienempi kuin entinen, mutta antaa myös todennäköisyyden valita huonompi arvo jollakin todennäköisyydellä, joka pienenee iteraatioiden funktiona. Tällä tavalla algoritmi pystyy pakenemaan lokaalista minimistä.

...

Neuroverkkojen matematiikkaa

Published at July 6, 2020 ·  6 min read

Tarkastellaan yksinkertaista lineaarista neuroverkkoa, jolle opetetaan funktio \(y = 2x - 1\). Kirjoituksen huomio on lähinnä matemaattisessa notaatiossa ja verkon optimoinnissa. Tarkastellaan funktiota välillä \(-1 \leq x \leq 4\). Diskretoidaan väli siten, että \(\Delta x = 1\) ja sovitetaan dataan lineaarinen malli. Datapisteet siis ovat: f(x) = 2*x - 1 x = collect(-1.0:4.0) y = f.(x) x, y ([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], [-3.0, -1.0, 1.0, 3.0, 5.0, 7.0]) Suoran sovitus dataan ei sinänsä ihmeellinen temppu ole....

Konversioita Julian datatyyppien välillä

Published at July 5, 2020 ·  2 min read

Juliasta löytyy 8, 16, 32 ja 64-bittiset datatyypit kuten muistakin ohjelmointikelistä. Lisäksi löytyvät merkkijonot ja binääri- sekä heksaesitysmuodot. Käyn tässä kirjoituksessa läpi joitakin tyyppimuunnoksia jotka tulevat joissakin yhteyksissä vastaan mutta eivät ole aivan ilmeisiä.

...

Toisen kertaluvun differentiaaliyhtälön ratkaisu elementtimenetelmällä

Published at June 26, 2020 ·  3 min read

Tarkastellaan toisen kertaluvun differentiaaliyhtälön ratkaisua Galerkinin menetelmällä joka paremmin tunnetaan elementtimenetelmänä. Tarkasteltavana on reuna-arvo-ongelma, jossa yhtälön reunaehtoja esiintyy yhtälön molemmissa päissä ja derivaatat ovat itse asiassa paikkaderivaattoja. Toinen tyyppi olisi alkuarvo-ongelma, jossa derivaatat ovat aikaderivaattoja, mutta siihen tehtävätyyppiin ei tässä nyt mennä.

...

Metaohjelmointia Julialla, tekniikoista

Published at June 22, 2020 ·  4 min read

Koska makrot ovat ennen kaikkea koodin esikäsittelyä, niiden inputit ovat rajalliset, sillä ohjelmakoodia ei ole suoritettu ennen makroa. Makro voi ottaa input argumentteina lähinnä numeroita ja merkkijonoja.

...

Metaohjelmointia Julialla: symbolinen derivointi

Published at June 19, 2020 ·  8 min read

Esittelen seuraavaksi erään ihan todellisen käyttötapauksen, missä makrojen käytöstä voi olla todellista hyötyä. Kuvitellaan tilannetta, missä meillä on olemassa jokin analyyttinen funktio, yksinkertaisuuden vuoksi polynomi. Haluamme laskea tämän polynomin analyyttisiä derivaattoja nopeasti. Toteutetaan yksinkertainen CAS-laskin, joka osaa derivoida polynomeja. Käytän tässä pohjana John Myles Whiten blogikirjoitusta.

...

Julian makrot

Published at June 18, 2020 ·  4 min read

Eräs hieno ominaisuus Juliassa on sen makrot. Juliassa makro on hieman funktion kaltainen rakenne, joka palauttaa Expr-tyypin joka suoritetaan makron päätyttyä. Makroa voi ajatella ikääneräänlaisena esikäsittelijänä, jolla voi muokata koodin rakennetta ennenkuin se itse asiassa suoritetaan.

...

Algoritmien benchmarkkaaminen Julialla

Published at June 16, 2020 ·  5 min read

Funktioiden benchmarkkaaminen Juliassa on tehty helpoksi erikseen asennttavalla BenchmarkTools-paketilla. Tarkastellaan seuraavanlaista ongelmaa: käyttäjälle annetaan kokonaislukulista arr, ja yksittäinen luku target. Implementoi funktio, joka palauttaa indeksiparin (i, j) siten, että listan alkioiden summa on target, siis arr[i] + arr[j] = target. Kannattaa käyttää hetki aikaa ja miettiä ratkaisua.

...

Uusimman tiedoston löytäminen

Published at June 5, 2020 ·  2 min read

Toisinaan tulee vastaan tilanne, että haluaa nopeasti tehdä jotakin hakemiston uusimmalle tiedostolle. On esimerkiksi prosessi, joka tekee aina uuden lokitiedoston kun se käynnistetään. Tiedostothan voi laittaa aikajärjestykseen esimerkiksi ls -lasrt, ja sitten manuaalisesti kaivaa siitä se uusin tulokas. Tämä voidaan kuitenkin automatisoida aika näppärästi. Esittelen tässä aika näppärin aliaksen mitä itse käytän.

...