From f66f627c2e8f6077fe11bc56e157512bb5142a05 Mon Sep 17 00:00:00 2001 From: Jonas Hahn Date: Tue, 3 Feb 2026 12:22:08 +0100 Subject: [PATCH] dft working --- Manifest.toml | 127 ++++++++++++++++++++++++++--------------- justfile | 14 ++++- src/dft.jl | 70 +++++++++++++++++++++++ src/neville-algo-ml.jl | 2 +- 4 files changed, 164 insertions(+), 49 deletions(-) create mode 100644 src/dft.jl diff --git a/Manifest.toml b/Manifest.toml index 5a022aa..7c46501 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.10" +julia_version = "1.12.4" manifest_format = "2.0" -project_hash = "39d0d5866236472d6bc1a58c4e663ea8a2a2e057" +project_hash = "a13dd6f9886c94a925d8bb34358f1d189196ee72" [[deps.AliasTables]] deps = ["PtrArrays", "Random"] @@ -12,13 +12,15 @@ version = "1.1.3" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" +version = "1.1.2" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" [[deps.BitFlags]] git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" @@ -54,13 +56,11 @@ deps = ["FixedPointNumbers", "Random"] git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.12.1" +weakdeps = ["StyledStrings"] [deps.ColorTypes.extensions] StyledStringsExt = "StyledStrings" - [deps.ColorTypes.weakdeps] - StyledStrings = "f489334b-da3d-4c2e-b8f0-e476e12c162b" - [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" @@ -82,7 +82,7 @@ version = "0.13.1" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" +version = "1.3.0+1" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -109,6 +109,7 @@ version = "0.19.3" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" [[deps.Dbus_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] @@ -130,7 +131,7 @@ version = "0.9.5" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.0" +version = "1.7.0" [[deps.EpollShim_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -164,6 +165,7 @@ version = "8.0.1+0" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" [[deps.FixedPointNumbers]] deps = ["Statistics"] @@ -202,21 +204,21 @@ version = "3.4.1+0" [[deps.GR]] deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] -git-tree-sha1 = "f305bdb91e1f3fcc687944c97f2ede40585b1bd5" +git-tree-sha1 = "ee0585b62671ce88e48d3409733230b401c9775c" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.73.19" +version = "0.73.22" [deps.GR.extensions] - GRIJuliaExt = "IJulia" + IJuliaExt = "IJulia" [deps.GR.weakdeps] IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" [[deps.GR_jll]] deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "de439fbc02b9dc0e639e67d7c5bd5811ff3b6f06" +git-tree-sha1 = "7dd7173f7129a1b6f84e0f03e0890cd1189b0659" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.73.19+1" +version = "0.73.22+0" [[deps.GettextRuntime_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] @@ -262,6 +264,7 @@ version = "8.5.1+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" [[deps.IrrationalConstants]] git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" @@ -298,6 +301,11 @@ git-tree-sha1 = "b6893345fd6658c8e475d40155789f4860ac3b21" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "3.1.4+0" +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" @@ -351,26 +359,28 @@ uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" version = "0.6.4" [[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.4.0+0" +version = "8.15.0+0" [[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" [[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.6.4+0" +version = "1.9.0+0" [[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" +version = "1.11.3+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" [[deps.Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -411,6 +421,7 @@ version = "2.41.2+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.12.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] @@ -430,6 +441,7 @@ version = "0.3.29" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] @@ -443,8 +455,9 @@ uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.16" [[deps.Markdown]] -deps = ["Base64"] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] @@ -453,9 +466,10 @@ uuid = "739be429-bea8-5141-9913-cc70e7f3736d" version = "1.1.9" [[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" +version = "2.28.1010+0" [[deps.Measures]] git-tree-sha1 = "b513cedd20d9c914783d8ad83d08120702bf2c77" @@ -470,10 +484,11 @@ version = "1.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.1.10" +version = "2025.11.4" [[deps.NaNMath]] deps = ["OpenLibm_jll"] @@ -483,7 +498,7 @@ version = "1.1.3" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" +version = "1.3.0" [[deps.Ogg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -494,12 +509,12 @@ version = "1.3.6+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.29+0" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.5+0" +version = "0.8.7+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] @@ -508,16 +523,15 @@ uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" version = "1.6.1" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f19301ae653233bc88b1810ae908194f07f8db9d" +deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "3.5.4+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "39a11854f0cba27aa41efaedf43c77c5daa6be51" +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.6.0+0" +version = "1.6.1+0" [[deps.OrderedCollections]] git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" @@ -527,7 +541,7 @@ version = "1.8.1" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" +version = "10.44.0+1" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] @@ -548,9 +562,13 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.44.2+0" [[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.10.0" +version = "1.12.1" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" [[deps.PlotThemes]] deps = ["PlotUtils", "Statistics"] @@ -586,9 +604,9 @@ version = "1.41.4" [[deps.PrecompileTools]] deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +git-tree-sha1 = "07a921781cab75691315adc645096ed5e370cb77" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" +version = "1.3.3" [[deps.Preferences]] deps = ["TOML"] @@ -599,6 +617,7 @@ version = "1.5.1" [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" [[deps.PtrArrays]] git-tree-sha1 = "1d36ef11a9aaf1e8b74dacc6a731dd1de8fd493d" @@ -630,12 +649,14 @@ uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" version = "6.8.2+2" [[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" [[deps.Random]] deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" [[deps.RecipesBase]] deps = ["PrecompileTools"] @@ -678,6 +699,7 @@ version = "1.3.0" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" [[deps.Showoff]] deps = ["Dates", "Grisu"] @@ -692,6 +714,7 @@ version = "1.2.0" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] @@ -702,7 +725,7 @@ version = "1.2.2" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.10.0" +version = "1.12.0" [[deps.StableRNGs]] deps = ["Random"] @@ -711,9 +734,14 @@ uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" version = "1.0.4" [[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.10.0" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -741,10 +769,14 @@ version = "2.6.2" Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.1+1" +version = "7.8.3+2" [[deps.TOML]] deps = ["Dates"] @@ -765,6 +797,7 @@ version = "0.1.1" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" [[deps.TranscodingStreams]] git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" @@ -779,9 +812,11 @@ version = "1.6.1" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" [[deps.UnicodeFun]] deps = ["REPL"] @@ -953,7 +988,7 @@ version = "1.6.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" +version = "1.3.1+2" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -988,7 +1023,7 @@ version = "0.17.4+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" +version = "5.15.0+0" [[deps.libdecor_jll]] deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] @@ -1035,12 +1070,12 @@ version = "1.1.7+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+1" +version = "1.64.0+1" [[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" +version = "17.7.0+0" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] diff --git a/justfile b/justfile index 60ff455..ae31a7c 100644 --- a/justfile +++ b/justfile @@ -3,7 +3,7 @@ default: test_langs test_langs: # Test all languages and tools in this project uv run python ./main.py - julia ./src/main.jl + julia --project=. ./src/main.jl bun run ./index.ts go run ./src/main.go bash ./src/bscript.sh @@ -13,7 +13,17 @@ test_langs: nix flake metadata neville: - julia -i ./src/neville-algo-ml.jl + julia --project=. -i ./src/neville-algo-ml.jl doc: typst compile ./src/ocs.typ + +j: + @echo $(pwd) + julia --project=. -i ./src/dft.jl + +# Setup python environment with uv +setup: + uv sync + # Instantiate julia + julia --project=. -e 'using Pkg; Pkg.instantiate()' diff --git a/src/dft.jl b/src/dft.jl new file mode 100644 index 0000000..f0a6096 --- /dev/null +++ b/src/dft.jl @@ -0,0 +1,70 @@ +using Plots + +# https://en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition +function dft(x) + N = length(x) + [sum(x[n] * exp(-2im*pi*(k-1)*(n-1)/N) for n in 1:N) for k in 1:N] +end + +# https://en.wikipedia.org/wiki/DFT_matrix +dft_matrix(N) = [exp(-2im*pi*(k-1)*(n-1)/N) for k=1:N, n=1:N] + +function dft_matrix_transform(x) + N = length(x) + dft_matrix(N) * x +end + +function evaluate_coefficients(x, coeffs) + res = 0 + for (i, coeff) in enumerate(coeffs) + res += coeff * exp(2pi * im * (i - 1) * x) + end + return 1/length(coeffs) * res +end + +function f(n) + xs = (0:n-1) ./ n + [x < 1/2 ? (x, x) : (x, 1 - x) for x in xs] +end + +function main() + ns = [3, 6, 10, 15, 20, 25] + plt = plot(layout = (length(ns), 2), size = (1000, 1000)) + + for (row, n) in enumerate(ns) + points = f(n) + xs = getindex.(points, 1) + ys = getindex.(points, 2) + + coeffs = dft_matrix_transform(ys) + + xfine = range(0, 1, length=1000) + poly = [evaluate_coefficients(x, coeffs) for x in xfine] + + plot!( + plt[row, 1], + xfine, + real.(poly), + title = "n = $n (real part)", + legend = false + ) + scatter!( + plt[row, 1], + xs, + ys + ) + plot!( + plt[row, 2], + xfine, + imag.(poly), + title = "n = $n (imag part)", + legend = false + ) + end + + gui(plt) +end + +main() + + diff --git a/src/neville-algo-ml.jl b/src/neville-algo-ml.jl index b2caa09..d38ab35 100644 --- a/src/neville-algo-ml.jl +++ b/src/neville-algo-ml.jl @@ -314,4 +314,4 @@ Erkenntnisse: # Start the interactive part # inter() -println("Use f() to start ml and inter() to start interactive mode.") +# println("Use f() to start ml and inter() to start interactive mode.")