Görbe illesztés optimalizációs megoldásommal

Előző vonatkozó bejegyzés: https://hup.hu/node/180138

Sokszor van szükségem statisztikai eljárásoknál görbe vagy más néven függvény illesztésre. Cél, hogy megtaláljuk, egy függvény milyen paraméterekkel illik mintavételezett értékekre. Ha ez meg van, akkor célzott következtetéseket vonhatunk le a jövőre vonatkozóan. Ennek hatékonysága függ az illesztés hibájának mértékétől.

(exp illesztés) https://i.imgur.com/1mUvhsE.png

(tanh illesztés) https://i.imgur.com/x3vKEV2.png

Ha például exponenciális eloszlása van egy folyamat kimenetei értékeinek, akkor az értékekre illeszthetünk egy exp függvényt. A probléma csak az, hogy alapból 1 változós illesztést végeznek könnyen hozzáférhető megoldások (pl GeoGebra), mert azt relatíve könnyű elvégezni és gyors. Vagy a derivált ismeretében Newton-i közelítéssel, vagy ha nem ismert a derivált, de monoton a függvény, akkor bináris lépésekkel.

Azonban egy sima exp függvénynél is minimum 3 ismeretlen változó van, mert eleve függőlegesen és vízszintesen is tolható a függvény, plusz a lambda változó. Ez már eléggé elrobbantja a kombinációs tér méretét és nehéz pontos illesztést végezni.

exp(( x + p1 ) * p2 ) + p3

Generalizált optimalizáló megoldásomat használom az illesztésre. Az alábbi függvényekre illesztek:

- tanh

- atanh

- sinh

- asinh

- cosh (catenary)

- x^2 (parabola)

- log

- exp

- illetve tetszőleges formula

 

A fenti képeken a mintavételezett értékek zajt is tartalmaznak, melyek miatt nem lehet végtelen pontos az illesztés. De ez nem is cél. Hanem ezekkel együtt a legjobb megtalálása.

 

Néhány példa komplexebb, véletlenszerűen generált függvények megoldására:

300 tag, 81 változó:

x26 + 53 + 131 - 208 - 296 * 162 - 287 * x53 - x31 * x67 * 192 - 247 - 291 + 83 + 206 * 89 * x30 * x55 ^ cosh( x3 ) ^ 151 - x50 * tanh( x58 ) ^ x2 + x45 + 28 + 98 + 215 * x74 + 73 * x21 - x14 * x54 * 74 * tanh( x55 ) - x32 * cos( x40 ) ^ 280 * x74 ^ 257 * x68 ^ x51 - 258 * x41 + x55 * x10 ^ 140 - x43 ^ x64 * 54 * 284 - x45 ^ 180 + x5 ^ x12 * 139 * x75 - 170 * 208 - x14 * x52 - x18 - tanh( x65 ) - x2 - 100 - 124 - 49 + 16 + 220 * tanh( x41 ) * x20 + x64 + x63 + 34 * 258 * 15 - x71 ^ x16 + 283 * x38 - exp( x75 ) * x49 + 178 - 149 * 162 * x56 + x11 * 23 * 116 - x71 * sinh( x31 ) ^ 7 - 78 + 27 - 113 - x54 * x77 - sin( x7 ) * tanh( x40 ) ^ x63 + x55 ^ 33 + 245 + 230 - x34 ^ 89 + x35 + 189 + 40 + x22 - 73 * x68 - x31 - x44 * 125 + x60 * cosh( x24 ) + x15 - x67 + x81 * asinh( x31 ) + 283 - 237 + x72 - 41 - 156 + 113 - 297 - x55 + x46 - 214 - x40 ^ 225 + cosh( x62 ) - cos( x43 ) ^ 83 - x6 ^ 119 - x1 ^ 14 + x54 ^ x33 + cosh( x55 ) - x57 - 128 + 76 + 260 * x18 ^ tan( x64 ) - x30 * 146 + x54 ^ x30 - 301 * x79 ^ x79 ^ 220 - 7 - x47 + x76 * x42 + x49 * cos( x57 ) - 140 * exp( x55 ) + x61 * x55 - 204 + x30 ^ exp( x55 ) ^ x32 ^ 251 + x14 ^ asinh( x75 ) * x81 ^ x29 + 9 + x47 + x42 ^ 17 - x7 ^ 202 - 275 - 163 - asinh( x80 ) - exp( x55 ) ^ 179 * x54 + x24 - 288 + 250 - x2 + exp( x66 ) ^ sinh( x54 ) * sinh( x39 ) - 64 - 116 + 89 * x37 + 255 + x3 + 280 - x63 ^ 108 + cos( x8 ) - x33 - 79 * x19 - 282 - 207 * x70 * x80 ^ x27 ^ 242 - cos( x19 ) - sinh( x6 ) * 51 - x54 + 173 - x54 * sin( x57 ) + x35 - 161 * sin( x46 ) ^ x25 + 165 - x79 * 137 - 30 - sin( x28 ) * x64 + 293 - 280 * x23 - x59 * x38 ^ exp( x54 ) ^ x69 * x2 + x17 - x66 - x14 + 205 + 291 * x78 + x72 + 60 * 46 + 161 + 198 * x70 ^ 216 + 282 * tanh( x6 ) * x4 ^ 256 + 200 - 117 * x48 + x43 * 207 - asinh( x65 ) * 96 * x13 - x73 + 241 * 152 - 142 * x15 * x9 * x45 ^ 123 - 244 - 85 - x36 - 197 + asinh( x18 ) ^ 296 * 142 * asinh( x45 ) * x41 - cosh( x35 ) - 53 + 123 * 196 - 232 * x36 + 28 + 32 * x43 ^ 20 * x59 ^ x76 + 226 - x52 * 136 - cosh( x71 ) - 42 + 206 - 238 + 56 = 92

Megoldás:

x1 = 0.615298210350135
x2 = -0.05410676747413946
x3 = 0.19040949438962002
x4 = 0.12011232073092645
x5 = 0.22853731547084538
x6 = 0.22167372581530068
x7 = 0.23955954027207255
x8 = 0.05910199848176132
x9 = 0.2040848627525803
x10 = 0.44747851039813635
x11 = 0.21021267811102315
x12 = 0.5160620726555756
x13 = 0.09535196339699235
x14 = 0.5912769407600771
x15 = 0.17587720356811246
x16 = 0.1465622167633157
x17 = 0.13953151076912004
x18 = 0.2222150207382025
x19 = 0.31916025034904805
x20 = 0.15795690206937577
x21 = 0.6128085728230385
x22 = 0.3704708221496126
x23 = 0.2841186275268766
x24 = 0.42488967843863495
x25 = 0.0548704552265899
x26 = -0.0038409929249979013
x27 = 0.47543843011732323
x28 = 0.0038850069350744795
x29 = 0.270622011583852
x30 = 0.14538082729611956
x31 = -0.10894878096617158
x32 = -0.06885799461030863
x33 = 0.15630429040135643
x34 = 0.48877414369154154
x35 = 0.17607889426503295
x36 = 0.5144099161083936
x37 = 0.19944006444256812
x38 = 0.29470133556300054
x39 = 0.6826176768262158
x40 = 0.1307230985977527
x41 = 0.6540427062419147
x42 = 0.12311118062051002
x43 = 0.1588674530735664
x44 = 0.20134682526121128
x45 = 0.3636515166309196
x46 = 0.377890159866994
x47 = 0.07101249426086742
x48 = -0.013901649938034347
x49 = 0.47868725816329727
x50 = 0.06511671795882631
x51 = -0.053609248693463424
x52 = 0.038266596201789176
x53 = -0.044806487461568886
x54 = 0.22195726612121683
x55 = 0.07186967812242054
x56 = 0.6840510748723173
x57 = 0.32638052708839166
x58 = 0.119016518010935
x59 = 0.017729080907124502
x60 = 0.1983766916264998
x61 = 0.5547374833295368
x62 = 0.22959333368311646
x63 = 0.28880989331524654
x64 = 0.2888435417872465
x65 = 0.49411322484551806
x66 = 0.3078938029803143
x67 = 0.1771651438848425
x68 = 0.31019232408294145
x69 = 0.6766416241783466
x70 = 0.2557653231431073
x71 = 0.12201356142737421
x72 = -0.1637924729848891
x73 = 0.16615672849135435
x74 = 0.4812037932081139
x75 = 0.16091226663289046
x76 = -0.009633886341053485
x77 = 0.2684691613216866
x78 = -0.03354577678104495
x79 = 0.12428594357769587
x80 = 0.3655932706566008
x81 = 0.41423764792254114

Hiba: 0

Futásidő: 4,69s

 

300 tag, 66 változó:

89 - 271 + x9 ^ 143 + tan( x29 ) + x48 ^ sinh( x14 ) + x64 - x23 ^ 208 - 119 + 54 * 10 + 156 + x13 ^ 189 - x65 * 260 + x56 ^ 55 - x22 * sin( x56 ) ^ x44 - 12 * 66 - x37 + x16 * x24 + x42 - 235 + 171 * x5 * 90 * cosh( x12 ) ^ 134 * 49 - x11 - 10 + x12 - 228 + 215 - x54 - 183 - x33 - 69 + 60 * x66 * asinh( x58 ) ^ 176 * x32 + x23 ^ 223 - 142 * x33 + cosh( x19 ) - 155 + cosh( x37 ) + 194 * 85 - x55 + x6 - 182 + 192 * 252 * 10 - 226 + 268 * 212 * sin( x28 ) ^ x44 ^ 171 * x33 ^ 69 * 114 + x27 + x23 + 116 + 20 * 229 * 191 - x47 ^ x8 * 162 - 79 * tanh( x59 ) + 233 * 148 + 300 * x46 ^ x22 ^ 49 - 126 - 193 + x8 + x47 * 243 + 91 + 187 * 94 + 44 + x32 - 50 * x24 + x3 - 190 - cosh( x11 ) - 84 + x35 * 21 * x12 - x51 * 54 * 116 - x25 + x2 ^ x40 * x38 + 184 * 290 + cos( x47 ) ^ x19 + x23 - x28 * 154 * x33 ^ x41 - 226 * 121 + x39 + 154 + 59 - 139 * 153 + x8 * 202 * 170 * 279 - 176 + 217 - x32 * x21 ^ x13 + 138 * 246 + sin( x46 ) + x46 - 8 - 265 + x6 - 228 - x33 ^ 79 * x21 - 49 * 281 + 39 * x58 + x36 - cosh( x35 ) + x44 - 91 * 300 + x32 ^ 179 + 273 + 282 - x61 - 75 - x32 ^ x40 + x54 ^ sin( x47 ) + 3 - tan( x22 ) * x7 - x43 ^ x6 * 216 * x37 - 13 * 232 * 191 + 252 - 13 + 175 + 69 * 209 - tan( x55 ) - x33 * 202 + asinh( x34 ) - 44 + x26 + x53 ^ 186 + x9 + 28 - exp( x33 ) + 92 - x6 * 162 * asinh( x9 ) + 286 - cos( x38 ) ^ 142 * 176 * 65 - asinh( x17 ) ^ x53 - 54 - 100 + 202 * 74 + 79 * x44 * 27 * x22 * x25 * 156 + 227 * x33 + exp( x37 ) ^ 74 * 21 * 183 - sinh( x18 ) + 227 - 204 * x10 ^ tan( x22 ) ^ sin( x15 ) ^ x31 - 244 * 110 - x50 ^ x56 * 213 - x50 - x53 * sinh( x57 ) + asinh( x62 ) - 278 - 206 * tan( x1 ) - x28 * x49 + 153 - asinh( x45 ) ^ 93 - x9 ^ x3 + x60 ^ 93 + sin( x52 ) + 93 * x4 + 84 + tan( x63 ) * 169 + 177 - 153 + 11 + 233 - 158 * 181 + exp( x56 ) * x37 + 163 + asinh( x20 ) + 234 + 138 * 190 + 26 * 32 + 184 + 261 * 161 - 247 * x36 ^ x30 - x48 * x16 * x5 + 34 - 206 + x44 + 199 * 152 + 109 * x56 - x2 ^ 40 - 72 - sin( x22 ) * x58 + x21 - 142 + 78 * 12 * 203 = 288

Megoldás:

x1 = 0.17223727376926445
x2 = 0.14811903465076817
x3 = -0.03388578035814596
x4 = -0.36924986632029655
x5 = -0.2733020584040352
x6 = 0.009706337261308021
x7 = 0.11268165629738451
x8 = -0.07294125527052582
x9 = 0.04419883181312156
x10 = 0.26063534369674174
x11 = 0.21983379658193147
x12 = 0.09811065795370894
x13 = 0.03786700716920198
x14 = 0.29150828923322747
x15 = 0.19689391706618753
x16 = 0.046917095424749644
x17 = 0.08086882664438051
x18 = -0.010822199397942267
x19 = -0.1488108979228488
x20 = -0.08651188383716045
x21 = 0.12664466673782832
x22 = 0.02600556610751344
x23 = 0.07802822342202341
x24 = 0.23608461771271838
x25 = -0.05652761929519063
x26 = 0.32134421715235945
x27 = -0.10549719556652942
x28 = 0.10746099705392054
x29 = -0.4820588924472258
x30 = -0.24549780407012275
x31 = -0.5883176768024235
x32 = 0.022308393163612567
x33 = 0.41564541677829286
x34 = -0.17830501509080762
x35 = 0.057716439621771046
x36 = 0.10126529914857958
x37 = -0.5887423910474137
x38 = -0.00021387837158959845
x39 = -0.52207639256179
x40 = 0.11296775677459812
x41 = -0.16033744845432907
x42 = -0.11072982617330483
x43 = 0.021437852244868494
x44 = 0.1985349747413634
x45 = 0.04857935082042425
x46 = 0.10928570553925579
x47 = 6.658732753506792e-22
x48 = 0.044551745486707074
x49 = -0.0408790005571839
x50 = 0.3071151898483797
x51 = 0.36448661426310963
x52 = 0.1526593676863384
x53 = 0.013428749848261033
x54 = 0.03993022103601644
x55 = 0.03548347833152827
x56 = 0.012398071285250889
x57 = 0.11112209324336116
x58 = -0.04473654874582571
x59 = 0.28606802108525503
x60 = -0.042499989172182485
x61 = 0.24690202309823395
x62 = 0.11798812403319375
x63 = -0.15954316653718037
x64 = 0.07604477711427808
x65 = 0.21846581724297068
x66 = -0.11336379303804496

Hiba: 2.91e-11

Futásidő: 1.36m

 

Tervezek implementálni végtelen tizedes pontosságú funkciót, ez Ruby-nál BigDecimal. Ekkor tovább futhat tetszőleges pontosságot célozva.

Hozzászólások

Ezt milyen gazdasági területen kívánod használni? Mire?

// A biológiában látom a relevanciáját.

Igazából onnét jött, hogy a kutatásaimnál komplex folyamatokat vizsgálok és kell megoldanom. És ezért kellett egy általános sok változós egyenlet megoldó eljárás. Hiába írok be Wolframalpha-ba egyetletet, nem ad tudtommal lehetséges megoldásokat. Csak az összefüggéseket írja ki. Tehát:

x^11 + y^5 + z^z = 100

Kérek értékeket x, y és z-re. Ezt nem ad. Speciel erre lehetséges megoldás az én eljárásomból:

x = 7.851958136080954

y = -1.6786885561771838

z = 3.6206441060737555

Nekem erre van szükségem. Illetve ha nem oldható meg egyszerűen egy differenciál egyenlet, akkor szintén szimulációval gyorsan kapok eredményt. Nem kell 3 hónapig kutatni a szép megoldást. Nekem a számok kellenek azonnal.

Excel-ben meg nagyon macerás az egész mert nem programozható így, illetve sokszor nem is talál nekem megoldást.

Jelenleg saját munkám gyorsítására használom, de a lehetséges alkalmazási területekről a hivatkozott blogban írtam. Nagyon fontos például RL (reinforcement learning) területen, amikor nem elérhető tanító adat a gyakorlatból, viszont lehet magas minőségű tanító adatokat generálni szimulációs környezetben például egy robotkarhoz vagy más eszközhöz, hogy AI-t tanítsanak rá és így például a kar meg tudjon fogni a jövőben bármilyen kialakítású tárgyat. Például kocka, L alak, gömb, komplex szerkezet stb.

A problémát az adja, hogy habár a megoldás ott van a végtelen térben, viszont nehéz megtalálni. Itt már nem tudsz segíteni egy opt algónak keresési intervallumokkal, mert azt sem tudod megmondani. És nem konvergál elég gyorsan és nincs rá több nap vagy hét megvárni. Ehhez teljesen általános megoldás kell, ami mindent maga talál ki kompromisszumok nélkül és gyors a konvergálás elégséges mértékű hibájú megoldáshoz.

Ezen kívül mechanikai optimalizációknál is hasznos lehet. Például milyen az optimális szék kialakítása adott anyagból készítve, ahol minél kevesebb anyagból minél stabilabb és merevebb szerkezet kell.

Számomra jelenleg a saját munkámat gyorsítja általános matematikai problémák gyors megoldásával, ahol az eredményre van szükségem, nem a képletre.

Köszi. Majd átnézem az utasításait.

Úgy nem tud adni ha nem adod meg egyik változó értékét sem? Eredetileg én ezt állítottam. Ez kellett volna, mert nem mindig tudod kitalálni a többi értékét, főleg nem 30 változónál.

Az nem baj hogy végtelen megoldás van, miért lenne? Nekem egy megoldás kell. Sokszor minimum. És úgy hogy semmit ne kelljen kitalálni vqgy megadni.

Nem tudja, hogy te melyik megoldást akarod. Ha csak egyet, akkor adj meg n-1 random kényszert neki. (Tud numerikus iterációt is, akkor, gondolom, az is talál egy megoldást a végtelenből. De valami csak kitüntet egy megoldást, az ritkán van, hogy csak úgy egy random megoldása kell egy alulhatározott egyenletrendszernek.)

Kicsit meglepő számomra, hogy többen furcsának találják, amikor 1-nél több a szabadság foka.

Képzelj el egy olyan feladatot, hogy egy széket kell tervezni, amit fix hosszúságú csőből kell kihozni és minél merevebbnek, strapabíróbbnak, magasabbnak kell lennie. Közben minél olcsóbból jöjjön ki. Hol van az optimum?

Változtathatunk a cső anyagminőségén, akár vékonyabb fallal. Hol legyenek a merevítő átkötések, milyen szögben? Itt végtelen lehetőség van. De az optimálisaknál is több mint 1 lesz, akár szimmetria miatt, ez könnyen belátható.

Tehát vannak kényszerek, de közben az ismeretlen faktorok száma rendkívül nagy. Mi ebben a furcsa?

Sok olyan probléma van, ahol egynél több faktor értékét keressük, melyek mind ismeretlenek számunkra. De vannak feltételek, melyeket közelíteni / teljesíteni célzunk.

Más az, hogy egy egyenleted van, és annak a megoldása egy többdimenziós sokaság, meg más az, hogy van egy optimalizálási célfüggvényed is, aminek keresed a szélsőértékét.

 Tudod, minden optimalizálási feladatnál vannak egyrészt korlátozó feltételei (ami a te esetedben egy egyenlet), meg van a célfüggvény, aminek az optimumát keresed.

Ez pont azt fogja megmondani, hogy a megoldás részsokaságán melyik pontot keresed. Persze még így is előfordulhat, hogy nincs megoldás, mert a feladat nyitott.

Az, hogy ha csak a korlátozó feltételt adod meg, az kevés, nyilván arra nem ad megoldást a Wolfram Alpha. Tedd mellé a célfüggvényt is, és láss csodát.

Amit leírsz, az egy optimalizálási probléma. Ha van egy olyan feladatom, hogy

min f(x1, x2, ..., xn)

akkor annak vannak feltételei, hogy diszkrét minimumai legyenek. Mit tudok egy minimumról? Hogy egy kicsit hozzáadva bármely változóhoz, az rosszabb lesz:

f(x1 + d1, x2 + d2, ..., xn + dn) = f(x1, x2, ..., xn) + (d1, d2, ..., dn)^T f'(x1, x2, ..., xn) + 1/2 (d1, d2, ..., dn)^T f''(x1, x2, ..., xn) (d1, d2, ..., dn) + o(|d|^2).

Itt f'(...) egy n-elemű vektor, f''(...) egy nxn-es szimmetrikus mátrix, és o(|d|^2) egy olyan függvény, melyre o(|d|^2)/d^2 nullához tart, ha d->0. Tehát, ha nem lenne f'(x1, x2, ..., xn) nulla, akkor d-t elegendően kicsinek és mondjuk a deriválttal párhuzamosnak, de ellentétes irányúnak választva az f(x1+d1, x2 + d2, ..., xn + dn)-ről megmutathatnánk, hogy kisebb, mint f(x1, x2, ..., xn), tehát nem lehetne minimum, ami ellentmondás. Ezek szerint a minimalizálás szükséges feltétele n egyenlet teljesülése az x1, x2, ..., xn változókra,

∂f(x1, x2, ..., xn) / ∂ x1 = 0

∂f(x1, x2, ..., xn) / ∂ x2 = 0

...

∂f(x1, x2, ..., xn) / ∂ xn = 0

Ez egy szükséges feltétel, de nem elégséges. Annak, hogy ez egy izolált minimum legyen, egy elégséges feltétele, hogy a második deriváltak mátrixa pozitív definit legyen

f''(x1, x2, ..., xn) = ∂^2 f(x1, x2, ..., xn) / ∂ x^2 > 0,

ahol azon, hogy egy mátrix pozitív azt értjük, hogy tetszőleges d nemnulla vektorra d^T M d > 0. Természetesen ez nem szükséges feltétel, vannak magasabb rendű izolált minimumok (pl. x^4 esetében x=0). Ezekkel most nem foglalkozunk, elég speciális eset.

Tehát egy izolált minimum esetén az n darab egyenlet teljesül, és ha a második deriváltak márixa pozitív definit, az elégséges ahhoz, hogy ezek az egyenletek függetlenek legyenek, azaz a megoldás lokálisan egyértelmű. Ha a függvényed ilyen, akkor már "csak" a lokális minimumok közül kell választanod.

Amint látod, a minimalizálás nagyon más feladat, mint egyetlen egy egyenlet megoldása.

Mindig egyenlet vagy egyenlőtlenség van és lehet 1-nél több ismeretlen. Ez miért furcsa? Miért ne kellhetne egy adott konfiguráció, amely teljesít egy kimenetet, de nem ismertek a bemeneti faktorok?

Feljebb nem csak optimalizálásról írtam, csak másra is használtam. Ez zavaró lehet.

"Miért ne kellhetne egy adott konfiguráció, amely teljesít egy kimenetet, de nem ismertek a bemeneti faktorok?"

Ha már matematikáról beszélgetünk, nem tudnál inkább szabatosan, matematikailag fogalmazni? Mit jelent, hogy bemeneti faktor? Az egyenletrendszered ismeretlenjei? Mi az, hogy "teljesít egy kimenetet"?

Nem teljesen világos most, hogy matematikailag minek felelnek meg ezek a mondatok. Nekem angolul is jó, ha úgy precízebben el tudod mondani. De: 1. most akkor optimalizálsz, vagy egyenletet akarsz megoldani? 2. Ha egyenletet akarsz megoldani, akkor azokban az esetekben, amikor nem egy megoldás van, hanem mondjuk végtelen sok, akkor jó azok közül egy teljesen véletlenül választott is?

Csábítóan hangzik az f(x1, x2, ..., xn) = 0 egyenletet úgy megoldani, hogy f(x1, x2, ..., xn)^2-et optimalizálod. Ezzel csak az a baj, hogy a deriváltas egyenletek nem lesznek függetlenek, Ha megnézed ilyenkor az f^2 deriváltjait,

∂ f(x1, ..., xn)^2/∂ x_i = 2 f(x1, ..., xn) ∂f(x1, ..., xn)/∂x_i

∂^2 f(x1, ..., xn)^2/∂ x_i ∂x_k = 2 f(x1, ..., xn) ∂f(x1, ..., xn)/∂x_i∂x_k + 2 ∂f(x1, ..., xn)/∂x_i ∂f(x1, ..., xn)/∂ x_k

és akkor az f zérushelyének megfelelő minimumban a derivált és a második deriváltban az első tag eltűnik, mert maga az f(x1, ..., xn)=0, és így a második derivált egy egy rangú mátrix, ex egy "lapos" minimum lesz (a végtelen sok nullahelyet tartalmazó sokaság minden pontjában ez a helyzet, a második derivált mátrix a sokaság érintőterén nullát ad). Szóval ilyenkor a "minimum" ugyanúgy nem egyértelmű, mint a zérushely. Ha nem teszel fel valami mellékfeltételt, akkor vagy az algoritmusod ad egyet (pl. gradient flow esetén lemész a legközelebbi nullahelyre), vagy beépítettél egy véletlenszám-generátort (pl. szimulált hőkezelés esetén). Nyilván van olyan alkalmazás, ahol neked egy megoldás kell, és tökmindegy melyik, de azért nem ez az általános.

Ha pl. akarok egy fűtőszálat tervezni, ami adott hőteljesítményt ad le, akkor két paraméterrel játszhatok, a vezetőképességgel (milyen ötvözet legyen) és a keresztmetszettel. Ha veszek egy random megoldást, akkor lehet, hogy egy viszonylag vékony drót jön ki, de jó vezető, amit úgy tudok elérni, ha aranyból csinálom. Ha hozzáveszem azt is, hogy minimális legyen az ára, akkor már valami észszerűbb megoldás jön ki, legyen kicsit vastagabb, és cekász.

Ha több változód van, mint független egyenleted, akkor végtelen megoldásod lesz, s ezek között nincs optimális. Az optimumra kell egy feltétel, de ezzel lényegében már lehet, hogy meglesz n változóra az n-edik egyenleted, ha eddig n-1 volt.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

https://hup.hu/comment/2860974#comment-2860974

Másrészt gyakorlati valóságunkban az optimálisnak sem kell tökéletesnek lenni. Szuboptimális megoldások több mint elégségesek a semmihez képest.

Az emberek tapasztalatom szerint nagyon nehezen gondolkodnak szuboptimális kérdésekben. Érzelmileg nagyon be vagyunk kötve az elméleti tökéletes scenariók hajszolására. De amikor ez nem elérhető, akkor ott megáll a dolog. Pedig rengeteg szempontból tovább vihető.

Ahogy a fenti székes példámban, nagy valószínűséggel nem lehet optimum konvergenciát bizonyítani és tökéletes optimumot elérni. Mert lesznek semi-szubjektív tényezők, melyeknél döntést kell hozni. Részemről ezeket is tovább eljárásokkal válaszolom meg. Hogy a végén a szubjektív paraméterek száma minél kisebb legyen. De nullára nem mindig vihető. Ezzel nincs gond. Nagyon jó megoldások adhatók.

Az a baj, hogy beleviszel szubjektív elemeket a módszereidbe, amelyről aztán nem tudod megmondani, számszerűsíteni, mennyire optimális a valós feladathoz, van-e jobb megoldás. Bár nyilván az élet ilyen, de amikor azt látom, választasz egy függvényt, algoritmust önkényesen, akkor nem látom mögötte azt az elméleti megfontolást, hogy miért éppen azt a függvényt, metodikát használod.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Az optimum konvergenciának összességében gyorsnak és pontosabbnak kell lennie. Egy algoritmusnál nehéz sok esetben univerzálisan bizonyítani egy jobb konvergenciát a létező összes eljárással szemben, mely minden függvény inputra és problémára érvényes. Empirikus tesztek elegendőek lehetnek sok esetben ez miatt. Sok mérésem van, gyorsan konvergál az algom és pontosabb eredményt ad az általam tesztelteknél (véges idő és erőforrásból dolgozok, így végtelen algo-ra végtelen teszt nem tud lenni).

Kérlek inkább a konkrét résznél próbálj konkrét érvet kidolgozni valami ellen. Az nem elég, hogy valaki feltesz egy olyan kérdést, hogy biztos az én megoldásom a legjobb-e. Próbálj jobb megoldást adni és érvelni mellette. Úgy képezhet értéket. Véleményem szerint rám erősen jellemző más érveinek elfogadása, ha üti az enyéimet.

Ha a hip.tangenses bejegyzésemre gondolsz, akkor mutasson valaki jobb megoldást. Ráadásul úgy, hogy tényleg csökkenjen a szabadság foka az adott szempontból. Mert ott speciel nincs más megkötés és tényező. Tehát nincs olyan korlátozás, ami befolyásolja az érték csökkenés sebességének eloszlását a teljes intervallumra vetítve.

Szeretek inkább izgalmas dolgokról beszélni. Itt múltkor volt 1-2 jó felvetés Happy-től meg rp-től is. Azokat építő jellegűnek gondolom.

Sajnálom hogy nem nyílt egyelőre ez az algóm, mert akkor tudnék írni konkrétumokat arról, hogy miben különbözik. De attól még blogoltam róla.

x^11 + y^5 + z^z = 100

Kérek értékeket x, y és z-re. Ezt nem ad. Speciel erre lehetséges megoldás az én eljárásomból:

x = 7.851958136080954

y = -1.6786885561771838

z = 3.6206441060737555

 

Valamit biztosan félreértek, mert ezekkel az együtthatókkal egészen biztos, hogy nem száz a végeredmény. 

Nem lettem okosabb. Még mindig köd nekem az, hogy mi a gyakorlati felhasználhatósága ennek.

Kérhetek legalább egy speciális esetet az életből, ahol ez több előnnyel jár, mint az eddig ismertek?

 

ps.: Logikám (józan paraszti ész) szerint, ha ezzel bérmit jósolni tudsz gazdasági területen, akkor te megtaláltad a tőzsde  Szent Grálját.

A görbeillesztésnél nem az a nagy feladat, hogy adva van egy elemi függvényekből álló polinom, aminek ismeretlenek az együtthatói, hanem az, hogy maga az egész függvény ismeretlen, csak az (x,y) párok vannak megadva, és ehhez kell kitalálni, hogy mivel illeszthető jól.

Nekem konkrétan ismert függvényhez kell az illesztés, mert csak ott lehet a minta által adott tartományon kívül is végezni következtetést (inference). Az általam vizsgált folyamatoknál ismert a forrás dinamikája és így a keletkezett eloszlás.

Egyébként ismeretlen függvénynél érdekes lehet az egyik paper, ahol a LOESS robusztus modellt illesztik több dimenziós adatra. Ennek előnye, hogy nem kell ismerni a függvényt, mert adatra illeszt egy lineáris regressziót (n-1 dimenziós síkot) lokálisan. És ahogy halad végig, úgy számolja újra a lineáris illesztést egy sub-intervallumon. Itt hátrány, hogy csak az ismert határokon belül lehet következtetni.

Az illesztés itt csak egy demó.

Függvény interpolációt/extrapolációt lehet csinálni ismeretlen függvényen is. A paraméter-illesztés megint más probléma.

Ezek matematikailag nagyon sokat kutatott és jól ismert feladatok. A szakirodalomban lévő algoritmusokat ismered? A LOESS-nek is van előnye és hátránya.

A te modellednek mik az előnye, hátrányai, korlátai?

A megoldásomat nem függvény illesztésre fejlesztettem, de erre is alkalmas és használom is. Ismerem az elérhető megoldásokat, csak nem mindig megfelelőek. Néha egy sima Spline is jó, de ha statisztikai inference-re van szükség (nem ismerem a magyar szakkifejezést), akkor nem jó. Ott függvényt illesztünk paraméter kereséssel.

Így van, mindegyiknek van előnye és hátránya. Célhoz eszköz, hova melyik kell. Én általában függvény paramétereket keresek.

A modellemet általános függvény megoldásra fejlesztettem, mint általános optimalizáció. Bármilyen anonim függvény átadható és arra optimalizál úgy, hogy nem ismeri a cél problémát. További előnye, hogy kevésbé ragad lokális optimumon a globális helyett és a nehéz "völgyekből" is tovább tud lépni.

Ezenkívül hatalmas előny, hogy non-parametrikus. Rengeteg algo hibája, hogy több paramétert kell definiálnod, hogy hatékony legyen. Például genetikai opt algoknál meg kell adnod keresési range-et, populációk számát stb. Ezért a keresési eredmény erősen függ attól, hogy mennyi pop-ot neveltél, azok közül a sikeresekből mennyit egyesítesz, hogyan, mikor stb. Nálam nincs paraméter. Ez durva különbség. Keresési intervallum sem kell, elég egy nagy szám, például 1e20. Nem baj ha 1e-23 és 1e-24 range-ben lesz az eredmény, akkor is gyorsan konvergál. Nem áll meg.

Hátrányokat egyelőre nem látok. Lehet hogy van, még kutatom és folyik a teszt.

Mindig non-par megoldások érdekelnek.

Te olyasmit csinálsz, mint a lineáris regresszió, csak ez nem lineáris. Gondolom, ebben az esetben is alkalmazható a legkisebb négyzetek módszere, vagy valami ilyesmi, tehát jobban bünteted, ha egy pont nagyon messze van, mint azt, ha sok pont csak kicsit távolodott el a görbétől.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Viszont az a gyakorlati folyamat, mely generálja a kapott mintát, nem feltétlen n-1 fokú pol függvény. Sok esetben ismert a generáló folyamat értékeinek eloszlása, ezért nem az a cél hogy pontosan összekössük a pontokat, hanem hogy a bias kontra varianca mértékében találjunk egyensúlyt a modellünk illesztésénél, mely modellt alapunk van feltételezni.

Természetesen van olyan, hogy nem ismerjük a modellt. Illetve all models are wrong, viszont megint a végtelen tökéletes elméleti dolgok felé terelődik a beszélgetés.

Ami izgalmas számomra, az az, hogy alkalmazott matematikával hogy található jobb válasz mégis csak, ha a válasz nem megúszható. Ha dönteni kell, akkor vagy hasból jön (rossz), vagy olyan mat. modell kell, amely képes kezelni az extrém információ hiányt. Ez egy izgalmas terület. Amikor túl sok a szabadság foka a sok ismeretlen faktor és ismeretlen hatás miatt. De MÉGIS kell választ adni.

Ha rendelni kell X termékből a mai napon, akkor mennyit rendeljünk? Nem megúszható a döntés. A kérdés az, hogy hogyan tudjuk a gyakorlatban a kimeneti valószínűség megbízhatósági intervallumát csökkenteni (confidence interval). Mindig ez a kérdés.

De az a probléma, hogy egy adott típusú függvényből milyen paraméterekkel rendelkezőt illesztesz egy adathalmazra, az már rég megoldott, ebben nem kell feltalálni a melegvizet.

https://mathworld.wolfram.com/NonlinearLeastSquaresFitting.html

Ezért kérdezem, hogy ismered-e egyáltalán a szakirodalmat a témában?

Nem lehet hogy egy picit eltévelyedett a beszélgetés? Egy új optimalizáló megoldást fejlesztettem, mely több szempontból előnyösebb tulajdonságokkal rendelkezik a meglévőknél. Ezt mellékesen használom függvény illesztésre. Itt nincs semmi feltalálva. Ez két külön dolog. Annak nem tudom, hogy mi a célja, amit írtál.

A célja az, hogy arra a felhasználási esetre jól ismert, publikált, kutatott, bizonyított algoritmusok vannak, hogy "nemlineáris függvényillesztés ismert alakú függvénnyel".

A te algoritmusod se nem jól ismert, se nem publikált (emiatt nem is állíthatjuk, hogy bizonyított), szóval ha választani kellene a módszered és a matematikai szakirodalomban jól ismert módszer között, nincs olyan épeszű mérnök, aki ne az utóbbit választaná.

leirjak masok is, hogy ird ossze _rendesen_ (nekem 8 h milyen nyelven), a helyett h arcolsz arra, h majer vagy, barmifele matematikai kepzettseg nelkul. ami nem lenne onmagaban baj, en hiszek abban, hogy magatol is meg tud barki barmit tanulni, de kis alazat kene azert a szakirodalommal szemben, ugyanis a matematika egy rendes tudomany.

Bálint remélem érti mire írtam a köszit. Sajnos már nem építő jellegű a beszélgetés. Pedig jónak tűnt.

Picit túltolod. Támadásba azért ne menj át, mert visszatetsző. A figyelmeddel kitüntetsz. Én még láttam veled videót, egy előadásodat, talán Sun színekben, 10+ éve is lehetett. Régen volt. Kecskeszakáll és szemüveg ha jól emlékszem. Talán storage témában adtál elő egy budapesti egyetem előadó termében. A storage vonal a fő zászló? ZFS játszik nálad? Meg egyszer fejlesztettél egy C hálózati stack-et emlékeim szerint google code camp vagy hasonló keretein belül. Ilyen fejlesztések mennek még? Min szoktál dolgozni és mi vonz leginkább az IT területen?

Write only vagy legtöbbször és nem arra válaszolsz amit írok.

Mi a bajod a függvény illesztéssel? Leírtam, hogy természetesen négyzetes eltérés alapján illesztek. Hiába van gauss-hoz más megközelítés, részleges derivált kell hozzá. Nem mindig érdemes és lehet deriváltakkal számolni, mert annyira komplex a függvény. Általános non-parametrikus megoldások érdekelnek. Ahol nem a kiértékelendő függvény non-parametrikus, hanem az optimalizáló megoldás. Tehát ne kelljen definiálnom az opt algónak semmit a megoldáshoz. Ez teljesül.

Nem állítok olyat, hogy az én függvény illesztésem a legjobb a világon, csak erre is használom a megoldásomat.

Leblogoltam, itt vezetek szakmai blogot.

Az opt megoldásra az a sejtésem, hogy jobb az elérhető megoldásoknál, mint általános megoldás. Nem pedig ahol ismert a derivált és gyors konvergálás lehetséges (pl Newton method). Hanem ahol egy teljes blackbox által kiértékelt értékek optimalizációjáról van szó. Erről majd tervezek még írni a jövőben.

nem tamadtam, sajnalom, ha igy jott at - tudom, hogy szarkazmusnak vetted, de en szivesen elolvasnam ha irsz ebbol egy papert, de sajnos ugy gondolom a hupon "publikalni" keves, mert matekszakmailag keveset mondasz itt, ITsoknak meg sokat. ha van benne uj, akkor publikalni kell, hogy elore vigyuk a kollektiv tudast, ha nincs benne uj, akkor meg tanulasi lehetoseg szamodra is, hogy "jee, ezt mar valaki megcsinalta". en sokszor voltam igy karrierem soran, foleg, miota publikacios/szabadalmi kenyszer is van rajtam - azt hittem valami temaban, hogy en vagyok a jani, aztan koppantam amikor jott a review. nem szegyen ez. csak pontosan ird le, hogy mit csinalsz (ha akarod).

ha annyi a cel csak hogy megmutasd h milyen fasza, az is persze opcio, csak akkor ne varj mast a trollkodason kivul :P a matekdiploma annyiban relevans hogy az egyetem nagy reszen az ember ilyen dolgokat tanul, tortenelmi tavlatbol, illetve megtanulja pontosan kifejezni magat. formalis kepzes nelkul ebbe hiba csuszik.

a leiras stimmt (Sun, ZFS, Solaris, majd NetBSD kernel fejlesztes), azota nincs kecskeszakall. az elmult 5-6 evben rendszertervezes es uzemeltetes volt, hazon belul illetve par nagy ugyfelnel tuzoltottam. most van egy uj projektunk, amibol remelem majd tobb is fog latszodni publicba, de egyelore cegen belul van, viszont ebben relative sok matek is lesz - ha jovahagyjak cegen belul hogy ezt csinaljam 100%-ban. ez meg a 2023-as ev zeneje.

Egy példa modell ismeretére:

Ha sok rezgő hatás összegének eredőjét vizsgáljuk, akkor tudjuk hogy normál eloszlású lesz a kimenet. Vagyis a középértékhez képest extrém kicsi és extrém nagy értékből kevés lesz, közepesből pedig sok.

Ezt CLT garantálja (central limit theorem) és bizonyított. És mindegy milyen eloszlásúak a különböző hatások rezgése, az eredő mindig normált fog közelíteni. Tehát nem csak az van, hogy nem ismerjük a modellt.

Véletlen rezgések szorzata pedig exponenciális eloszlást közelít. Soha nincs végtelen pontosság a gyakorlatban a véges számú pontatlan minta miatt, de elegendő pontosság számolható, mely más stratégiához képest sokkal jobb lehet.

A kérdés az, hogy hogyan ismerhetők meg minél pontosabban a modell paraméterei, hogy utána számolni tudjunk belőle és következtetéseket levonni.

Ha jól értem, te most megállapítottad, amit eddig is tudtunk: a Gauss-eloszlású fehér zajnak a Fourier transzformáltja folytonos konstans függvény, szóval minden frekvenciájú komponensből azonos amplitúdójú.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Az nem jó, mert oszcillálni fog, mint állat, a két pont között nem a valós fizikai folyamat várható értékét adja, hanem az egekbe elszáll attól. Szóval hiába megy át minden ponton, ott jó volna, ha a deriváltak is a fizikailag reális folyamatot leíró függvény deriváltjai közelében lennének. Ennél már az is jobb, ha a pontok nincsenek a függvényen, csak annak közelében, de a függvény jellege olyan, vagy ahhoz közeli, ami az idealizált modell működését leírja.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Amíg nem tudod,  hogy mit modellezel, addig a polinom egy tökéletesen pontos megoldás. Tisztán matematikai megfontolásból, absztraktul.

Az már más kérdés, hogy te mondjuk egy valóságban lévő jelenség, amit modellezel, és a modelled diktálja, hogy a függvénynek, amit illesztesz, milyen alakúnak kellene lennie. Ez már egy olyan feltétel, amit viszont expliciten ki kell mondani: itt van az adathalmazom és illeszteni akarok rá egy parabolát/exponenciálist/szigmoidot (mert a modellem ilyen függvénnyel működik - ez elhallgatott feltétel). stb. Az egy teljesen más probléma, mint az, hogy "itt van n pontom, illeszteni akarok rá egy bármilyen függvényt".

Matematikailag tök más probléma a kettő.

Igen, de a gyakorlati mérésekben a mérési eredmények egy valós rendszerből esnek ki, aminek van egy fizikai működése. Ha például veszel egy forró fém tömböt, másodpercenként méred a hőmérsékletét, kapsz egy T(t) = T1 + (T0 - T1) * exp(-t/t0) függvényhez hasonlító valamit. Ha erre ráteszel egy polinomot, átmegy majd a mérési pontokon, csak két pont között talán még a termodinamikát megcáfolva 0 K alá is mehet a hő, meg iszonyú magasra. Erre mindenképp exponenciálist érdemes fektetni még akkor is, ha a pontok nem lesznek pontosan a függvényen, csak annak közelében.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Viszont a matematikát önmagát nem érdekli, hogy mi a valóság. A függvényillesztés mint feladat, a valóságtól függetlenül létezik. Mint ahogy a fizikai valóságtól függetlenül léteznek a prímszámok, a háromszögek, a végtelen dimenziós sokaságok, a zárt és nyílt halmazok, az egyenletesen folytonos függvények, a végtelen sorozatok. A matematika eszköztárát használhatja persze egy mérnök, amikor a fizikai valóságnak megfelelő dolgokat akar támogatni.

De ettől még az a matematikai feladat, hogy van n számpárod, és erre akarsz egy függvényt illeszteni, teljesen jól megoldható n-1 fokú polinommal. Az más kérdés, hogy ez a megoldás a fizikai valóságbeli elemre, amire a matematikát alkalmazni akarod, működik-e. Ezt kéne megérteni.

A matematikai bizonyítások, definíciók, állítások azok mind-mind a fizikai valóságtól függetlenül léteznek (ezért is tudnak szabatosak lenni). Sosem szabad ezt elfelejteni, amikor matematikai eszköztárat akarsz használni.

"kapsz egy T(t) = T1 + (T0 - T1) * exp(-t/t0) függvényhez hasonlító valamit.". Nem így van ez. Az, hogy a fizikai valóság így viselkedik, azt már egy, a valóságra alkalmazott fizikai modellből tudjuk (eleve a hőmérséklet is csak modellje a valóság egy részének). Emiatt aztán ha másodpercenként méred a hőmérsékletet és mégsem illeszkedik ilyen görbére, akkor tudod, hogy a mérésed nem pontos, a modelled nem felel meg a valóságnak, a mérőeszközöd elromlott, a mért fizikai rendszerben van még ismeretlen hatás stb.

Szóval az, hogy ezekre a mért értékekre nem polinomot illesztesz, az nem matematikai feladat, a matematika leszarja, hogy milyen a valóság. 

"Erre mindenképp exponenciálist érdemes fektetni még akkor is, ha a pontok nem lesznek pontosan a függvényen, csak annak közelében." Ez csak azért igaz, mert az a feltételezésed a rendszerről (ez a fizikai teória), hogy így viselkedik. De mint mondom, a függvényillesztés elméleti matematikai problémáját ez nem érinti. Azok a megkötések, hogy " a termodinamikát megcáfolva 0 K alá is mehet a hő" ismeretlenek a matematika számára. Ha az absztrakt matematikai elméleteket akarod használni a megoldásod keresésére, akkor ezeket a fizikai valóságbeli feltételeknek meg kell jelennie a probléma matematikai leírásában is. Érted már, hogy min kesergek?

Ha valaki matematikai módszereket akar mutatni, akkor el kell engednie a valóságot, és szabatosan, a matematika eszköztárával definiálni a fogalmakat, és bebizonyítani a fogalmakra vonatkozó állításait. Ha meg nem matematikai módszerekkel dolgozik, akkor meg nem állíthat biztossággal semmit - hiszen bizonyítani sem tud semmit. Ahogy a tudomány sem állít biztonsággal semmit - bármelyik fizikai teória (a termodinamika is) bármikor megcáfolható megismételhető kísérlettel.

A matematika önmagában semmit sem ér. A matematika akkor válik hasznossá, ha alkalmazott tudományként segíti a mérnökök, fizikusok, közgazdászok, tevehajcsárok munkáját. Ettől persze még van értelme a matematikának, mint eszköztár fejlesztésének, mert valakinek kellhet majd az a legújabb eszköz.

Ugyan értem, amit mondasz, de épp arról beszélek, hogy nem szimplán egy függvény illesztése pontokra a feladat, hanem ott egy konkrét fizikai, társadalomtudományi feladat van, amihez a matematikát segítségül hívjuk. Igaz, hogy a matematikát nem érdekli, hogy mire használjuk, s a polinom pontos függvényillesztés lesz, de nagyon rossz ezközt választottunk, ha az a szempontunk, hogy az eredmény matematikai értelemben pontos legyen, miközben nem írja le a fizikai valóságot.

A matematika eszköz, alkalmazott tudomány, nem pedig cél.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem tekintem humán művészetnek, de a tudományokat az emberi kultúra legalább olyan fontos részének tekintem, mint a művészeteket. Emellett még a tapasztalat is az, hogy a tudományok akkor fejlődnek a legjobban, ha az alkalmazás-orientált és a kíváncsiság motiválta kutatások is haladnak.

"A matematika önmagában semmit sem ér. A matematika akkor válik hasznossá, ha alkalmazott tudományként segíti a mérnökök, fizikusok, közgazdászok, tevehajcsárok munkáját."

Ez nagyon erős állítás, és nem is igaz. Például a számelmélet évezredeken keresztül egy olyan dolog volt, amit semmire nem tudtak használni - mégis rengeteg elméleti eredmény keletkezett. Ma meg a publikus kulcsú titkosítás alapja, beérett évezredek munkája.

"A matematika eszköz, alkalmazott tudomány, nem pedig cél."

A fizikai is eszköz, a biológia is, a kémia is, ha így tekinted. Például az általános relativitáselmélet mint elméleti eredmény, önmagában semmit nem mond. De Einstein nem is azért dolgozott rajta egy évtizedet, hogy hasznos legyen valamire - hanem azért, hogy jobban értsük, ismerjük a világot. Aztán pár évtizeddel később a GPS-hez már kellett ez az elméleti eredmény is.

Nem beszéltem az időbeliségről. Sehol sem mondtam, hogy például egy éven belül felhasznált eredmény, az alkalmazottá teszi, azon túl elévül, megromlik, lejár a szavatossága. Amikor azt állítod, hogy azok a számelméleti ismeretek a titkosítás alapját képezik, akkor azt mondod, amit én is, hogy alkalmazott tudomány.

Igen, abban egyetértünk, hogy a tudomány a világunk megismerését szolgálja azzal a céllal, hogy az életünket jobbá, kényelmesebbé tehessük általa. Persze mellékhatás, hogy mások leigázására, mások fölötti hatalomgyakorlásra is igyekszünk használni a tudomány eredményeit.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Nem így szokták definiálni az alkalmazott és a tiszta (vagy manapság inkább kíváncsiság motiválta, curiosity motivated) matematikát ill. tudományt, hanem aszerint, hogy mi a célod, amikor csinálod. Ha valami konkrét, az adott tudományágon kívüli probléma megoldása, akkor alkalmazott, ha pedig a tudományág belső logikáját követed, megoldod azt, ami kapcsolódik ahhoz, amit már tudsz, és közben igyekszel eljutni valami érdekeshez (ezt nehéz lenne definiálni, hogy mi, de általában az elegendően általános és elegendően nem nyilvánvaló eredmény), az tiszta. Annak ehhez semmi köze, hogy pl. a matematikában azt tapasztalták, hogy ezek az "érdekes" eredmények gyakran előbb-utóbb előkerülnek az alkalmazások során is.

A másik, hogy az életet nem csak azáltal teszik jobbá a tudományok, hogy egyenletesebben működő kenyérpirítót tudunk csinálni, hanem azáltal is, hogy az eredmények szépek, vagy a megértés öröme. Ez az, amit feljebb írtam, hogy a kultúra része. (Most az olyan áttételes kulturális dolgokról nem is beszélve, mint mondjuk a radioaktív kormeghatározás, amit történelmi dolgokra használnak, szóval az alkalmazás eredménye egy nem alkalmazott tudás.)

A matematikában az illesztés ritkán önmagában cél. Vagy statisztikai becslés részeként csináljuk (a paramétereknek valamilyen használható, legalábbis aszimptotikusan - sok pont esetére - torzítatlan becslését akarjuk megkapni a modell (függvényalak) ismeretében, vagy függvényt akarunk közelíteni: olyan illesztési feladatot akarunk elvégezni, hogy az illesztendő függvényben is van valami paraméter (pl. polinom fokszáma), hogy a paraméter és az illesztési pontok számával a végtelenhez tartva az adott függvényt valamilyen értelemben (majdnem mindenütt, pontonként, normában, stb.) közelítse valamilyen függvényosztály minden tagjára.

Pl. az interpolációs polinom már elég egyszerű függvények esetében sem fog konvergálni (Runge-jelenség). Locsemege példája is arról szól, amikor nem a megfelelő függvényosztályhoz választasz közelítési módszert, és az (a fizikai valóságot modellező konvergenciafogalom szerint) nem konvergál.

Ellenállással előfeszített NTC karakterisztikáját az ellenállás adott hőmérsékleti tartományban viszonylag kiegyenesíti, ha nem is teljesen. A pontokat LibreOffice Calc-ban ábrázolva, azokra regressziós egyenest téve valami r^2 = 0.9999 körüli érték jött ki. Valahogy éreztem, hogy mikrokontrollerben jó lesz ezzel a regressziós egyenessel számolnom - elsőfokú és nulladfokú együttható, lineáris függvény -, amikor hőmérsékletet mérek, s nem kell a pontos, analitikus leírása a függvénynek, de még a pontok közötti lineáris interpoláció sem. Nagyon nem mindegy egy assembly-ben írt kód bonyolultsága, fejlesztési ideje, memória igénye, futásideje.

tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

Ez is a modellezés része. Nem csinálsz bonyolultabb modellt, mint amire szükség van. Az is látszik, hogy egyáltalán nem mindig a konvergencia definiál egy jó közelítést, elég, ha a gyakorlati követelményeknek megfelelő hibakorlátok vannak. (Pl. Bessel-fv-t a változó nagy értékére kiértékelni nem konvergens, hanem aszimptotikus sorral szokás. Ha a hibakorlát már kisebb, mint a trunkációs hiba, akkor már nyertél, és lehet, hogy a 0 körüli Taylor sor sokkal lassabban konvergálna, ami sok számítás és még több trunkációs hiba is halmozódik.)

"300 tag, 79 változó":

Én abban a kifejezésben csak 3 változót látok (x1, x2, x3), a többi az mind konstans. 

Mi az utána, hogy x4..x100? Eleve, ha 79 változód van, akkor hogyan van 100 eredményed? Hogyan van 79 változód, ha a kifejezésben nem szerepel anniy?

"Hiba: 2.58e-10" Minek a hibája? Mihez képest? 

Teljesen érthetetlen, amit írsz.

Várhatóan az opt megoldásról folytatom a jövőben az írást, függően a felhasználás kimenetelétől.

Erdekelne.

De kicsit nehez osszeraknom, hogy pontosan mi is ez, talan mert szeretem elobb elolvasni az elmeletet (ami publikus) es aztan az elemzest. Valahogy ugy nekem konnyebb elhelyeznem az modszerek tereben, bar nyilvan mas pedig a gyakorlati kerdesek szerint kategorizal...

Eleinte nekem sem volt tiszta, hogy mikor hasznalod optimalizalasra a modszert, es mikor hasznalod az optimalizalast egyenletmegoldasra. A nem-parametrikus nalam is azt jelenti, hogy regularizalt fuggvenyillesztes, veletlenszeru adatra. Esetleg a te esetedben a non-parametric global search a kulcsszo?

Nekem mindig kulon idot kell szanni a kezdoparameterek, hatarfeltetelek, kenyszerek (ez mondjuk nalad is lenne), konvergenciakriteriumok beallitasara, szoval tudom ertekelni, ha az algo ezt megoldja.

Megoldja. Teljesen non-parametrikus. Tárgyalást folytatunk, ha lesz infó publikusba, megosztom itt.

A non-par a black-box search-re vonatkozik. Mindegy mi a kiértékelő mechanizmus (ott van sok paraméter, persze, amiket keresünk), maga a kereső algom nem igényel semmilyen beállítást. De nem csak úgy, hogy mégis igényel, de közben be van állítva neki valami, hanem természeténél és a metodikájánál fogva nincs beállítandó paraméter. Gyakorlatilag 1 van, ami a search space mérete, de ez meg lehet egy nagy szám, pl 1e30. Semmi más.

https://imgur.com/AnAS712

Másoknak írom, hogy a GENERATE a megoldásom, az EVALUATE meg a kiértékelő, amihez kellenek a paraméterek optimális értékei. Ez utóbbi lehet egy sok változós függvény, vagy bármilyen black-box megoldás. Nincs szükség a kiértékelő black-box működésének ismeretére. Se derivált, stb. Itt van egy fontos érték.

A kényszereket a kiértékelő rész tartalmazza.