From 685f614a5829a4d7579d0c626787cafac566280f 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: Thu, 6 Oct 2022 19:16:38 +0200 Subject: [PATCH] Vectorized 'calculate_approximate_solution()'. --- scripts/tcd/projection_utils.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/scripts/tcd/projection_utils.py b/scripts/tcd/projection_utils.py index c6b710b..6d3c0bf 100644 --- a/scripts/tcd/projection_utils.py +++ b/scripts/tcd/projection_utils.py @@ -7,7 +7,7 @@ from typing import Tuple import numpy as np from numpy import ndarray -from sympy import Symbol +from sympy import Symbol, lambdify from .Mesh import Mesh from .Quadrature import Quadrature @@ -39,18 +39,17 @@ def calculate_approximate_solution( 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)] + for point in range(len(points))] for degree in range(polynomial_degree+1)] - approx = [[sum(projection[degree][cell] * basis_matrix[degree][point] - for degree in range(polynomial_degree+1)) - for point in range(num_points)] - for cell in range(len(projection[0]))] + # basis = np.array([np.vectorize(lambdify(x, function, 'numpy')) + # for function in basis]) + # basis_matrix = np.array([basis[degree](np.array(points)) for degree in + # range(polynomial_degree+1)]) - return np.reshape(np.array(approx), (1, len(approx) * num_points)) + approx = projection.T@basis_matrix + return np.reshape(approx, (1, approx.size)) def calculate_exact_solution( -- GitLab