{"id":20500598,"url":"https://github.com/juliaapproximation/framefun.jl","last_synced_at":"2025-06-27T06:35:26.809Z","repository":{"id":23628615,"uuid":"26998292","full_name":"JuliaApproximation/FrameFun.jl","owner":"JuliaApproximation","description":"Exploring practical possibilities of approximating functions with frames rather than with a basis","archived":false,"fork":false,"pushed_at":"2024-04-29T20:29:32.000Z","size":23353,"stargazers_count":23,"open_issues_count":1,"forks_count":7,"subscribers_count":7,"default_branch":"master","last_synced_at":"2024-05-09T13:02:08.580Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JuliaApproximation.png","metadata":{"files":{"readme":"README.ipynb","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-11-22T12:33:40.000Z","updated_at":"2024-04-29T19:59:18.000Z","dependencies_parsed_at":"2024-04-29T20:57:47.657Z","dependency_job_id":"1384b9a5-4e2d-4c9e-a4b1-94eee541dc55","html_url":"https://github.com/JuliaApproximation/FrameFun.jl","commit_stats":{"total_commits":758,"total_committers":10,"mean_commits":75.8,"dds":0.5778364116094987,"last_synced_commit":"a5b3382bb3fed2a23c1ed6b3b0cbcc6faa3ccfbf"},"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFrameFun.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFrameFun.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFrameFun.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JuliaApproximation%2FFrameFun.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JuliaApproximation","download_url":"https://codeload.github.com/JuliaApproximation/FrameFun.jl/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242092447,"owners_count":20070532,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T18:21:52.022Z","updated_at":"2025-03-05T19:34:04.387Z","avatar_url":"https://github.com/JuliaApproximation.png","language":"Julia","funding_links":[],"categories":[],"sub_categories":[],"readme":"{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"[![Build Status](https://travis-ci.org/daanhb/FrameFun.jl.svg?branch=master)](https://travis-ci.org/daanhb/FrameFun.jl)\\n\",\n    \"[![Coverage Status](https://coveralls.io/repos/github/daanhb/FrameFun.jl/badge.svg)](https://coveralls.io/github/daanhb/FrameFun.jl)\\n\",\n    \"\\n\",\n    \"FrameFun\\n\",\n    \"========\\n\",\n    \"\\n\",\n    \"Exploring practical possibilities of approximating functions with frames rather than with a basis. The package is heavily inspired by the Chebfun project and the Julia package ApproxFun.\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"using BasisFunctions, Plots, DomainSets, FrameFun\\n\",\n    \"gr();\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Frame Approximations in 1D\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"After choosing a suitable Basis and Domain, any function can be approximated in the resulting frame:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"B = Fourier(61) → -1..1\\n\",\n    \"D = -0.5..0.5\\n\",\n    \"f = x-\u003ex\\n\",\n    \"F = Fun(f,B,D)\\n\",\n    \"\\n\",\n    \"P = plot(F,layout = 2)\\n\",\n    \"plot!(F,f,subplot=2)\\n\",\n    \"Plots.savefig(P,\\\"images/lowprecision.png\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![](images/lowprecision.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"The bases support any AbstractFloat subtype, so high precision approximations are straightforward:\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"B = Fourier(61) → big(-1)..big(1)\\n\",\n    \"F = Fun(f,B,D)\\n\",\n    \"\\n\",\n    \"P = plot(F,layout=2)\\n\",\n    \"plot!(F,f,subplot=2)\\n\",\n    \"Plots.savefig(P,\\\"images/highprecision.png\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![](images/highprecision.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![](images/highprecision.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Frame Approximations in 2D\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"In higher dimensions, a basis can be any tensorproduct of (scaled) lower dimensional bases:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"using StaticArrays\\n\",\n    \"C = Disk(1.0)\\\\Disk(0.3,SVector(0.2, 0.5))\\n\",\n    \"B = (Fourier(31) → -1.3..1.3)^2\\n\",\n    \"f = (x,y)-\u003eexp(x+y)\\n\",\n    \"F = Fun(f,B,C)\\n\",\n    \"\\n\",\n    \"P = heatmap(F,layout=2,aspect_ratio=1)\\n\",\n    \"plot!(F,f,subplot=2,aspect_ratio=1)\\n\",\n    \"Plots.savefig(P,\\\"images/deathstar.png\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![](images/deathstar.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"Even fractal domains are not a problem:\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"B = (Fourier(31) → -1.0..0.35) ⊗ (Fourier(31) → -0.65..0.65)\\n\",\n    \"f = (x,y)-\u003ecos(10*x*y)\\n\",\n    \"F = Fun(f, B, mandelbrot())\\n\",\n    \"\\n\",\n    \"P = heatmap(F,layout=2,aspect_ratio=1)\\n\",\n    \"plot!(F,f,aspect_ratio=1,subplot=2)\\n\",\n    \"Plots.savefig(P,\\\"images/mandelbrot\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"![](images/mandelbrot.png)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"anaconda-cloud\": {},\n  \"kernelspec\": {\n   \"display_name\": \"Julia 1.0.1\",\n   \"language\": \"julia\",\n   \"name\": \"julia-1.0\"\n  },\n  \"language_info\": {\n   \"file_extension\": \".jl\",\n   \"mimetype\": \"application/julia\",\n   \"name\": \"julia\",\n   \"version\": \"1.0.1\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 1\n}\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaapproximation%2Fframefun.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjuliaapproximation%2Fframefun.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjuliaapproximation%2Fframefun.jl/lists"}