From 17e71388a1f289f0de82928b66d3741bf071c097 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=BChle=2C=20Laura=20Christine=20=28lakue103=29?= <laura.kuehle@uni-duesseldorf.de> Date: Sun, 19 Sep 2021 22:36:56 +0200 Subject: [PATCH] Added documentation to 'Plotting'. --- Plotting.py | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/Plotting.py b/Plotting.py index ec4c888..37435e1 100644 --- a/Plotting.py +++ b/Plotting.py @@ -17,6 +17,22 @@ sns.set() def plot_solution_and_approx(grid, exact, approx, color_exact, color_approx): + """"Plots approximate and exact solution against each other. + + Parameters + ---------- + grid : np.array + List of mesh evaluation points. + exact : np.array + Array containing exact evaluation of a function. + approx : np.array + Array containing approximate evaluation of a function. + color_exact : str + String describing color to plot exact solution. + color_approx : str + String describing color to plot approximate solution. + + """ print(color_exact, color_approx) plt.figure('exact_and_approx') plt.plot(grid[0], exact[0], color_exact) @@ -27,6 +43,16 @@ def plot_solution_and_approx(grid, exact, approx, color_exact, color_approx): def plot_semilog_error(grid, pointwise_error): + """"Plots semi-logarithmic error between approximate and exact solution. + + Parameters + ---------- + grid : np.array + List of mesh evaluation points. + pointwise_error : np.array + Array containing pointwise difference between exact and approximate solution. + + """ plt.figure('semilog_error') plt.semilogy(grid[0], pointwise_error[0]) plt.xlabel('x') @@ -35,6 +61,18 @@ def plot_semilog_error(grid, pointwise_error): def plot_error(grid, exact, approx): + """"Plots error between approximate and exact solution. + + Parameters + ---------- + grid : np.array + List of mesh evaluation points. + exact : np.array + Array containing exact evaluation of a function. + approx : np.array + Array containing approximate evaluation of a function. + + """ plt.figure('error') plt.plot(grid[0], exact[0]-approx[0]) plt.xlabel('X') @@ -43,6 +81,20 @@ def plot_error(grid, exact, approx): def plot_shock_tube(num_grid_cells, troubled_cell_history, time_history): + """"Plots shock tube. + + Plots detected troubled cells over time to depict the evolution of shocks as shock tubes. + + Parameters + ---------- + num_grid_cells : int + Number of cells in the mesh. Usually exponential of 2. + troubled_cell_history : list + List of detected troubled cells for each time step. + time_history: + List of value of each time step. + + """ plt.figure('shock_tube') for pos in range(len(time_history)): current_cells = troubled_cell_history[pos] @@ -56,6 +108,27 @@ def plot_shock_tube(num_grid_cells, troubled_cell_history, time_history): def plot_details(fine_projection, fine_mesh, coarse_projection, basis, wavelet, multiwavelet_coeffs, num_coarse_grid_cells, polynomial_degree): + """"Plots details of projection to coarser mesh.. + + Parameters + ---------- + fine_projection, coarse_projection : np.array + Matrix of projection for each polynomial degree. + fine_mesh : np.array + List of evaluation points for fine mesh. + basis : np.array + Basis vector for calculation. + wavelet : np.array + Wavelet vector for calculation. + multiwavelet_coeffs : np.array + Matrix of multiwavelet coefficients. + num_coarse_grid_cells : int + Number of cells in the coarse mesh (half the cells of the fine mesh). + Usually exponential of 2. + polynomial_degree : int + Polynomial degree. + + """ averaged_projection = [[coarse_projection[degree][cell] * basis[degree].subs(x, value) for cell in range(num_coarse_grid_cells) for value in [-0.5, 0.5]] @@ -81,6 +154,25 @@ def plot_details(fine_projection, fine_mesh, coarse_projection, basis, wavelet, def calculate_approximate_solution(projection, points, polynomial_degree, basis): + """"Calculates approximate solution. + + Parameters + ---------- + projection : np.array + Matrix of projection for each polynomial degree. + points : np.array + List of evaluation points for mesh. + polynomial_degree : int + Polynomial degree. + basis : np.array + Basis vector for calculation. + + Returns + ------- + np.array + Array containing approximate evaluation of a function. + + """ num_points = len(points) basis_matrix = [[basis[degree].subs(x, points[point]) for point in range(num_points)] @@ -96,6 +188,31 @@ def calculate_approximate_solution(projection, points, polynomial_degree, basis) def calculate_exact_solution(mesh, cell_len, wave_speed, final_time, interval_len, quadrature, init_cond): + """"Calculates exact solution. + + Parameters + ---------- + mesh : array + List of mesh valuation points. + cell_len : float + Length of a cell in mesh. + wave_speed : float + Speed of wave in rightward direction. + final_time : float + Final time for which approximation is calculated. + interval_len : float + Length of the interval between left and right boundary. + quadrature : Quadrature object + Quadrature for evaluation. + init_cond : InitialCondition object + Initial condition for evaluation. + + Returns + ------- + np.array + Array containing exact evaluation of a function. + + """ grid = [] exact = [] num_periods = np.floor(wave_speed * final_time / interval_len) @@ -119,6 +236,22 @@ def calculate_exact_solution(mesh, cell_len, wave_speed, final_time, interval_le def plot_classification_accuracy(precision, recall, accuracy, xlabels): + """Plots classification accuracy. + + Plots the accuracy, precision, and recall in a bar plot. + + Parameters + ---------- + precision : float + Precision of classification. + recall : float + Recall of classification. + accuracy : float + Accuracy of classification. + xlabels : list + List of strings for x-axis labels. + + """ precision = [precision] recall = [recall] accuracy = [accuracy] -- GitLab