Skip to content
Snippets Groups Projects
errors.py 3.83 KiB
Newer Older
Soeren Peters's avatar
Soeren Peters committed
r"""
=======================================================================================
 ____          ____    __    ______     __________   __      __       __        __
 \    \       |    |  |  |  |   _   \  |___    ___| |  |    |  |     /  \      |  |
  \    \      |    |  |  |  |  |_)   |     |  |     |  |    |  |    /    \     |  |
   \    \     |    |  |  |  |   _   /      |  |     |  |    |  |   /  /\  \    |  |
    \    \    |    |  |  |  |  | \  \      |  |     |   \__/   |  /  ____  \   |  |____
     \    \   |    |  |__|  |__|  \__\     |__|      \________/  /__/    \__\  |_______|
      \    \  |    |   ________________________________________________________________
       \    \ |    |  |  ______________________________________________________________|
        \    \|    |  |  |         __          __     __     __     ______      _______
         \         |  |  |_____   |  |        |  |   |  |   |  |   |   _  \    /  _____)
          \        |  |   _____|  |  |        |  |   |  |   |  |   |  | \  \   \_______
           \       |  |  |        |  |_____   |   \_/   |   |  |   |  |_/  /    _____  |
            \ _____|  |__|        |________|   \_______/    |__|   |______/    (_______/

  This file is part of VirtualFluids. VirtualFluids is free software: you can
  redistribute it and/or modify it under the terms of the GNU General Public
  License as published by the Free Software Foundation, either version 3 of
  the License, or (at your option) any later version.

  VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  for more details.

  SPDX-License-Identifier: GPL-3.0-or-later
  SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder

=======================================================================================
"""
import math


def get_sum_of_squared_distances(real_values, numerical_values):
    combined_values = zip(real_values, numerical_values)
    sum_of_squared_distances = sum((numerical_value - real_value) ** 2
                                   for real_value, numerical_value
                                   in combined_values)
    return sum_of_squared_distances


def root_mean_squared_error(real_values, numerical_values):
    num_values = len(real_values)
    if num_values != len(numerical_values):
        raise ValueError("Real and numerical value lists must be same length")

    sum_of_squared_distances = get_sum_of_squared_distances(real_values, numerical_values)

    return math.sqrt(sum_of_squared_distances / num_values)


def mean_absolute_error(real_values, numerical_values):
    num_values = len(real_values)
    if num_values != len(numerical_values):
        raise ValueError("Real and numerical value lists must be same length")

    combined_values = zip(real_values, numerical_values)
    sum_of_absolute_distances = sum(abs(numerical_value - real_value)
                                    for real_value, numerical_value
                                    in combined_values)

    return sum_of_absolute_distances / num_values


def mean_squared_error(real_values, numerical_values):
    num_values = len(real_values)
    if num_values != len(numerical_values):
        raise ValueError("Real and numerical value lists must be same length")

    sum_of_squared_distances = get_sum_of_squared_distances(real_values, numerical_values)
    return sum_of_squared_distances / num_values
def normalized_l2_error(real_values, numerical_values):
Sven Marcus's avatar
Sven Marcus committed
    sum_of_squared_distances = get_sum_of_squared_distances(real_values, numerical_values)
    sum_of_squared_real_values = sum(real_value ** 2 for real_value in real_values)

    return math.sqrt(sum_of_squared_distances / sum_of_squared_real_values)