Conversation
|
@mrcinv I invite you to my pull request |
mrcinv
left a comment
There was a problem hiding this comment.
@aleksacirkovic99 Naloga je pravilno rešena. Koda je dobro strukturirana. Testi in dokumentacija pa sta pomankljivi. V poročilu pogrešam izpeljavo sistema, s katerim ste poiskali koeficiente a, b, c, d. Prav tako pogrešam več testnih primerov, ki bi testirali izračune koeficientov, kot tudi izračune verdnosti med interpolacijskimi točkami.
Predlagam tudi, da za naslednjo nalogo ustvarite vejo in "pull request" na svojem repozitoriju (kako se to naredi, je opisano v https://ucilnica.fri.uni-lj.si/pluginfile.php/201576/mod_label/intro/domace_seznam.pdf?time=1713875640360). Oceno sem vpisal na učilnici. Oceno lahko tudi popravite, če upoštevate moje pripombe.
| Aleksa Ćirković | ||
|
|
||
| Opis naloge: | ||
| - Naloga je, da se poveže niz točk na grafu na gladek način. Obstaja več točk, vsaka s svojo X in Y vrednostjo, in je potrebno narisati gladko krivuljo, ki gre skozi vse te točke. |
There was a problem hiding this comment.
V resnici ne gre za gladko krivuljo, ampak za funkcijo. Interpolacija z gladkimi krivuljami je sorodna tema, ki je precej bolj komplicirana.
|
|
||
| #Začne se s seznamom točk, ki jih je potrebno povezati. Vsaka točka ima X in Y vrednost. | ||
|
|
||
| #Za povezovanje teh točk z gladko krivuljo uporablja se "Naravni interpolacijski kubični zlepek". To pomeni, da med vsakim parom točk narišete mini-krivulje, ki se lepo prilegajo skupaj in ustvarijo eno gladko krivuljo. |
There was a problem hiding this comment.
Lahko ste bolj konkretni:
da med vsakim parom točk narišete mini-krivulje, ki ...-> da na vsakem intervalu [xi, x_i+1] narišete mini-krivulje oblike y=p_i(x), kjer je p_i(x) kubični polinom. Polinome p_i izberemo tako, da je funkcija krivulja gladka.
|
|
||
| #Na koncu se nariše ta krivulja na grafu. Za boljšo preglednost tudi so označene originalne točke in uporabljene različne barve za prikaz različnih delov krivulje. | ||
|
|
||
| #Struktura Zlepek je osnova. Hrani vse potrebne informacije o interpolacijskih točkah (x in y vrednosti) ter koeficiente (a, b, c, d), ki so potrebni za izračun kubičnih zlepkov. |
There was a problem hiding this comment.
Lahko ste bolj konkretni! Kako so koeficienti (a, b, c, d) povezani s krivuljo? Kakšna je formula za krivuljo med dvema točkama.
|
|
||
| #Struktura Zlepek je osnova. Hrani vse potrebne informacije o interpolacijskih točkah (x in y vrednosti) ter koeficiente (a, b, c, d), ki so potrebni za izračun kubičnih zlepkov. | ||
|
|
||
| #Funkcija interpoliraj izračuna koeficiente za kubični zlepek na podlagi danih točk. Uporablja matriko A in vektor v za rešitev sistema enačb, ki določajo koeficiente zlepka. Ti koeficienti so ključni za risanje gladke krivulje skozi vse dane točke. |
There was a problem hiding this comment.
Ta stavek sodi v dokumentacijo funkcije znotraj kode. Tule raje opišite algoritem, ki ga uporabite, da poiščete koeficiente zlepka.
| using LinearAlgebra | ||
| using Plots | ||
|
|
||
| struct Zlepek |
There was a problem hiding this comment.
Dodajte dokumentacijo v obliki dokumentacijskega niza. Glejte tudi kontrolni seznam v https://ucilnica.fri.uni-lj.si/pluginfile.php/201576/mod_label/intro/domace_seznam.pdf?time=1713875640360
| h = diff(x) | ||
|
|
||
|
|
||
| A = zeros(n + 1, n + 1) |
There was a problem hiding this comment.
Matrika A nima veliko neničelnih elementov, zato je bolj uporabiti razpršene matrike (SparseArrays.jl)
| for i = 1:length(z.x)-1 | ||
| if x >= z.x[i] && x <= z.x[i+1] | ||
| dx = x - z.x[i] | ||
| return z.a[i] + z.b[i]*dx + z.c[i]*dx^2 + z.d[i]*dx^3 |
There was a problem hiding this comment.
Za računanje polinoma je bolje uporabiti Hornerjevo obliko
a + dx(b + dx*(c + dx*d)))
|
|
||
|
|
||
| function vrednost(z::Zlepek, x::Float64)::Float64 | ||
| for i = 1:length(z.x)-1 |
There was a problem hiding this comment.
Interval na katerem leži x lahko v logaritemskem času poiščemo z bisekcijo. Glejte funkcijo searchsortedfirst.
|
|
||
| for (x, expected_y) in zip(x_points, y_points) | ||
| @test vrednost(spline, x) ≈ expected_y atol=1e-6 | ||
| end |
There was a problem hiding this comment.
dobro bi bilo dodati še teste za odvode in druge odvode. Pa tudi test, ki preizkusi izračun znotraj interpolacijskega intervala ne le v interpolacijskih točkah.
|
|
||
|
|
||
| plotDN(spline) | ||
| println("Manually verify boundary conditions in the plot.") |
There was a problem hiding this comment.
To ne sodi v runtests.jl, ki je mišljena, da se poganja brez človeške interakcije. Vsaj zaenrat ne, dokle AI ni še toliko dobra :-)
Domaca Naloga 1 - Naravni Zlepki - Aleksa Ćirković