Skip to content

INTEGRATE

Download Flojoy Studio to try this app
Integrate over an OrderedPair or Vector using the composite trapezoidal rule. Params: default : OrderedPair|Vector Input from which we get the two lists we use in the integration. Returns: out : OrderedPair x: the x-axis of the input. y: the result of the integral.
Python Code
from flojoy import flojoy, OrderedPair, Vector
import numpy as np


def trapz(x: np.ndarray, y: np.ndarray):
    m = [0] * len(x)
    trapezium = (1 / 2) * (x[1] - x[0]) * (y[1] + y[0])
    m[1] = trapezium

    for i in range(2, len(x)):
        trapezium = (1 / 2) * (x[i] - x[i - 1]) * (y[i] + y[i - 1])
        m[i] = m[i - 1] + trapezium

    return m


@flojoy
def INTEGRATE(default: OrderedPair | Vector) -> OrderedPair:
    """Integrate over an OrderedPair or Vector using the composite trapezoidal rule.

    Parameters
    ----------
    default : OrderedPair|Vector
        Input from which we get the two lists we use in the integration.

    Returns
    -------
    OrderedPair
        x: the x-axis of the input.
        y: the result of the integral.
    """

    match default:
        case OrderedPair():
            input_x = default.x
            input_y = default.y
        case Vector():
            input_x = np.arange(len(default.v))
            input_y = default.v

    if type(input_x) != np.ndarray:
        raise ValueError(f"Invalid type for x:{type(input_x)}")
    elif type(input_y) != np.ndarray:
        raise ValueError(f"Invalid type for y:{type(input_y)}")
    elif len(input_x) != len(input_y):
        raise ValueError(
            f"X and Y keys must have the same length got, x:{len(input_x)} y:{len(input_y)}"
        )

    integrate = trapz(input_x, input_y)

    return OrderedPair(x=input_x, y=integrate)

Find this Flojoy Block on GitHub

Example App

Having problems with this example app? Join our Discord community and we will help you out!
React Flow mini map

In this example, the LINSPACE node generate two lists (the OrderedPair composed of x and y) that are required for the INTEGRATE node.

Then INTEGRATE node computes its integration using trapezoidal rule on the given input lists.

With the two LINE nodes we can see that the original LINSPACE function is a diagonal of the form y=xy=x which is constantly increasing. Then the LINE node representing the integrate result is showing us an increasing curve as expected since the integral of xx is x22\frac{x^2}{2}.