Skip to content
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

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

aleksacirkovic99
Copy link

Domaca Naloga 1 - Naravni Zlepki - Aleksa Ćirković

@aleksacirkovic99
Copy link
Author

@mrcinv I invite you to my pull request

Copy link
Owner

@mrcinv mrcinv left a 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.
Copy link
Owner

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.
Copy link
Owner

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.
Copy link
Owner

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.
Copy link
Owner

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
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

h = diff(x)


A = zeros(n + 1, n + 1)
Copy link
Owner

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
Copy link
Owner

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
Copy link
Owner

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
Copy link
Owner

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.")
Copy link
Owner

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 :-)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants