-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
DomacaNaloga1_AleksaCirkovic #1
base: main
Are you sure you want to change the base?
Conversation
@mrcinv I invite you to my pull request |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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ć