From 6e457e8fd46ad3f496e8728bc8dac66a7660e3e4 Mon Sep 17 00:00:00 2001 From: Hubert Kowalski Date: Wed, 3 Jul 2024 15:21:06 +0200 Subject: [PATCH 1/6] Final touches --- scripts/errors/kaniastyKowalskiError.m | 2 +- scripts/tests/plotN.m | 4 ++-- scripts/tests/runTestsTable.m | 7 ++++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/errors/kaniastyKowalskiError.m b/scripts/errors/kaniastyKowalskiError.m index 6514602..d44575b 100644 --- a/scripts/errors/kaniastyKowalskiError.m +++ b/scripts/errors/kaniastyKowalskiError.m @@ -23,7 +23,7 @@ errors = zeros(1, maxN); % Inicjalizacja wektora błędów for N = 1:maxN % Pętla obliczająca błąd dla każdej liczby przedziałów approxIntegral = method(a, b, N, @chebyshev_combination, coefficients); % Obliczanie przybliżonej całki - unpenalizedError = abs(trueIntegral - approxIntegral) / trueIntegral; % Obliczanie błędu bez kary + unpenalizedError = abs((trueIntegral - approxIntegral) / trueIntegral); % Obliczanie błędu bez kary penalty = log(1+N); % Obliczanie kary kwadratowej errors(N) = unpenalizedError + penalty; % Sumowanie błędu i kary end diff --git a/scripts/tests/plotN.m b/scripts/tests/plotN.m index dd81209..9a24b66 100644 --- a/scripts/tests/plotN.m +++ b/scripts/tests/plotN.m @@ -41,8 +41,8 @@ simpsonIntegral = simpson(a, b, i, @chebyshev_combination, currentCoefficients); % Obliczenie błędów względnych - errors_s(j, i) = abs(trueIntegral - simpsonIntegral) / trueIntegral; - errors_t(j, i) = abs(trueIntegral - trapezoidalIntegral) / trueIntegral; + errors_s(j, i) = abs((trueIntegral - simpsonIntegral) / trueIntegral); + errors_t(j, i) = abs((trueIntegral - trapezoidalIntegral) / trueIntegral); end end end diff --git a/scripts/tests/runTestsTable.m b/scripts/tests/runTestsTable.m index cf113ee..5c3b9ac 100644 --- a/scripts/tests/runTestsTable.m +++ b/scripts/tests/runTestsTable.m @@ -1,3 +1,8 @@ +% Skrypt testujący +% Skrypt generuje tabelę zawierającą prawdziwe wartości całki oraz całki +% wyznaczone numerycznie za pomocą metody Simpsona i trapezów dla 12 +% przykładowych funkcji. + examples = cell(12,1); examples{1} = struct('a', -2, 'b', 10, 'N', 50, 'Func', @chebyshev_example_1); @@ -10,7 +15,7 @@ examples{8} = struct('a', -1, 'b', 1, 'N', 50, 'Func', @chebyshev_example_8); examples{9} = struct('a', -5, 'b', 5, 'N', 50, 'Func', @chebyshev_example_9); examples{10} = struct('a', -0.7, 'b', 0, 'N', 50, 'Func', @chebyshev_example_10); -examples{11} = struct('a', -1, 'b', -0.5, 'N', 50, 'Func', @example_11);s +examples{11} = struct('a', -1, 'b', -0.5, 'N', 50, 'Func', @example_11); examples{12} = struct('a', -10, 'b', 10, 'N', 100, 'Func', @example_12); From 5096ff7dc633141223ed6675c00773178949b77f Mon Sep 17 00:00:00 2001 From: Hubert Kowalski Date: Wed, 3 Jul 2024 15:24:35 +0200 Subject: [PATCH 2/6] Delete all .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes scripts/.DS_Store | Bin 10244 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store delete mode 100644 scripts/.DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 9846b76264d1fee2828d8dd98d628b9c45d0e7a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~&u`N(6vv;pKvO299+)(ckSuYnM#GN|#3hvOumhI`!2wW7mI|U}an+>jp{kTS z@V9V=KZJh=zR&iiu4Ow;74nnpujBWg6Mt0OH4%y4Bn^mKMC7Bedbd#h!`RPd#WrkD z11j_wuW6rl>4egQd?ng-I0BBqx)I>D+oVIR+n3a*h4rhBl3XS5Vrvlhp}T*y=?OHb zq$3(rMkA`IJjfTLG18UM$+R5Vv416_JS(eC=eO9{^lsd2_zi!{{}_Ey)2NE8N!g3X z@A>JCQh9RLj+3|9a5`w+d8LXf&Whn!CuHdmAs^mlMXIJfH7U|k=SIfiH~r?Ib#FG? zd){r!pwoRkZ_8N_JbBud-DjQoyyYJV?3G8dyZd*N*?`SMhIE}_d zu8Pm_aFz!$F*qGB(fI-2BFpo*1uj3Yoy*-BP=G}6Xzwa4U-9v`C-T_y;`c`_7CoU3Otf1cA&nv+wTA`^@Y-GxO}s6achbyP5pCBaRze-Ez7OCDh3n-+Zmv}dkiXU*It(Q?@py` zIc3bH36;b6_BRW7=Zh$J+=f7WEH^CEZ6y*LT4W%4VsJAt7*zKW|=N`?t(mN){?k zy|L-%+y1(f&x`i!#jnxzcQ3xo`j=OCsv$ia%VBC>Ei`S*v6rwmYS|#3zclgZV00HO zxgR6nFn?0&$39=F2R|Qp4_@qcr)M&8BbmrdQ5PnY>8o)gb1mWN!#CIh41s;Pj+uR} z^00GSW(Vfs7A(Ld)WL!hG@#+(tB9qIOMIP#M~qjFn}sT(>irn@z52BqM&kM?&lX=k zJdB?~&e~w3#p( z@RF%iNbHtw?G@{zWTEQxjHPopUP##<f@_zEP4JUz{_#54C=xfO6Llg9vpqXCc@w(`j4`F2J+(RhhgNe$v#ju zc!q=3WFH=@pFMbw?8PPa0#L_U}-SW3~UM)9!z=|NjFlAgTWV From 305243ee14a3b3aeb94483a722985d5525b30986 Mon Sep 17 00:00:00 2001 From: Hubert Kowalski Date: Wed, 3 Jul 2024 15:25:01 +0200 Subject: [PATCH 3/6] Change names of reports --- ...ENG.pdf => Integral_Approximation_Report_ENG.pdf | Bin ...port.pdf => Integral_Approximation_Report_PL.pdf | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename IntegralApproximationENG.pdf => Integral_Approximation_Report_ENG.pdf (100%) rename Projekt1_Kowalski_Kaniasty_raport.pdf => Integral_Approximation_Report_PL.pdf (100%) diff --git a/IntegralApproximationENG.pdf b/Integral_Approximation_Report_ENG.pdf similarity index 100% rename from IntegralApproximationENG.pdf rename to Integral_Approximation_Report_ENG.pdf diff --git a/Projekt1_Kowalski_Kaniasty_raport.pdf b/Integral_Approximation_Report_PL.pdf similarity index 100% rename from Projekt1_Kowalski_Kaniasty_raport.pdf rename to Integral_Approximation_Report_PL.pdf From b4e94b6cf92fad3d1367052c8f21875bce7c8cad Mon Sep 17 00:00:00 2001 From: Hubert Kowalski <126024378+kowalskihubert@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:32:53 +0200 Subject: [PATCH 4/6] Update README.md --- README.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e93d46d..40484ba 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,28 @@ This project focuses on the numerical approximation of integrals using Chebyshev ## Usage 1. Add the project folders to the MATLAB search path. -2. Use provided functions (`trapezoidal`, `simpson`, `chebyshev_combination`) for integral calculations. -3. Explore the GUI application (`examplesGUI.mlapp`) for visual demonstration and error analysis. +2. Use functions (`trapezoidal`, `simpson`) for approximate integral calculations of chebyshev polynomials. In the project we provide `chebyshev_combination` function that represents polynomials in the form of: $$w_n(x) = \sum_{k=0}^n a_kT_k(x)U_k(x)$$ where $T_k$ is a chebyshev polynomial of the first kind and $U_k$ - of the second kind. To use `chebyshev_combination` with `trapezoidal` (similarly `simpson`) use the following code (**a** - beggining of the integration interval, **b** - end of the integration interval, **N** - number of subintervals in the composite trapezoidal method, **coefficients** - $a_k$ coefficients for the chebyshev polynomial): +```matlab + result = trapezoidal(a, b, N, @chebyshev_combination, coefficients) +``` +3. Use functions (`trapezoidal_general`, `simpson_general`) for approximate integral calculations of any function $y = f(x)$. For example +```matlab + result = trapezoidal_general(a, b, N, @my_function) +``` +4. Explore the GUI application `examplesGUI.mlapp` for visual demonstration and comparison of aprroximate results with true integrals. +5. Explore the GUI application `errorsGUI.mlapp` for error visualisations. ## Examples -- Several examples (`chebyshev_example_1`, `chebyshev_example_2`, etc.) are provided to demonstrate the effectiveness of the methods in different scenarios. +- Several examples (`chebyshev_example_1`, `chebyshev_example_2`, etc.) are provided to demonstrate the effectiveness of the methods in different scenarios. See the [report](Integral_Approximation_Report_ENG.pdf) for full description of the examples. ## Error Analysis - The project includes a detailed analysis of the errors associated with each method, including heat maps and relative error comparisons. +- One of the takeaways is that increasing the number of subintervals (**hyperparameter N**) for both methods decreases the relative error of the approximation. + +
+ Error of trapezoidal method +

Figure 1: Graph of the dependence of the relative error expressed in (%) on the number of subintervals in integration by the trapezoidal method

+
## Authors - Hubert Kowalski From 6bb9911290c895d0cccd069bace341f1975307eb Mon Sep 17 00:00:00 2001 From: Hubert Kowalski Date: Wed, 3 Jul 2024 19:33:29 +0200 Subject: [PATCH 5/6] Add img/ folder and plot for readme --- img/trapezoidal_error.png | Bin 0 -> 71712 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 img/trapezoidal_error.png diff --git a/img/trapezoidal_error.png b/img/trapezoidal_error.png new file mode 100644 index 0000000000000000000000000000000000000000..8c862a9e0457b49c699abaef7edc9dcdedd89234 GIT binary patch literal 71712 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%0D{6 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 literal 0 HcmV?d00001 From f3da748b9daac0b42c99d1bff7915134bfc91b0d Mon Sep 17 00:00:00 2001 From: Hubert Kowalski <126024378+kowalskihubert@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:36:25 +0200 Subject: [PATCH 6/6] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 40484ba..479a022 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Integral Approximation Project ## Overview -This project focuses on the numerical approximation of integrals using Chebyshev polynomials. It implements and compares the Trapezoidal and Simpson's methods for integral approximation. +This project focuses on the numerical approximation of integrals using [Chebyshev polynomials](https://en.wikipedia.org/wiki/Chebyshev_polynomials). It implements and compares the Trapezoidal and Simpson's methods for integral approximation. ## Features - Implements numerical integration using Trapezoidal and Simpson's methods. @@ -10,7 +10,7 @@ This project focuses on the numerical approximation of integrals using Chebyshev ## Usage 1. Add the project folders to the MATLAB search path. -2. Use functions (`trapezoidal`, `simpson`) for approximate integral calculations of chebyshev polynomials. In the project we provide `chebyshev_combination` function that represents polynomials in the form of: $$w_n(x) = \sum_{k=0}^n a_kT_k(x)U_k(x)$$ where $T_k$ is a chebyshev polynomial of the first kind and $U_k$ - of the second kind. To use `chebyshev_combination` with `trapezoidal` (similarly `simpson`) use the following code (**a** - beggining of the integration interval, **b** - end of the integration interval, **N** - number of subintervals in the composite trapezoidal method, **coefficients** - $a_k$ coefficients for the chebyshev polynomial): +2. Use functions (`trapezoidal`, `simpson`) for approximate integral calculations of Chebyshev polynomials. In the project we provide `chebyshev_combination` function that represents polynomials in the form of: $$w_n(x) = \sum_{k=0}^n a_kT_k(x)U_k(x)$$ where $T_k$ is a Chebyshev polynomial of the first kind and $U_k$ - of the second kind. To use `chebyshev_combination` with `trapezoidal` (similarly `simpson`) use the following code (**a** - beggining of the integration interval, **b** - end of the integration interval, **N** - number of subintervals in the composite trapezoidal method, **coefficients** - $a_k$ coefficients for the Chebyshev polynomial): ```matlab result = trapezoidal(a, b, N, @chebyshev_combination, coefficients) ```