sokobo
Loading...
Searching...
No Matches
laplace.h
1#pragma once
2#include "expression.h"
3#include "complex_number.h"
4#include <map>
5#include <functional>
6#include "polynomial.h"
7
9private:
10 static std::map<std::string, std::function<ComplexNumber(ComplexNumber)>> transformTable;
11 static void initializeTransformTable();
12
13public:
14 // Symbolic Laplace transforms
15 static std::shared_ptr<Expression> transform(std::shared_ptr<Expression> expr, const std::string& var = "t");
16 static std::shared_ptr<Expression> inverseTransform(std::shared_ptr<Expression> expr, const std::string& var = "s");
17
18 // Numerical Laplace transforms
19 static ComplexNumber numericalTransform(std::function<double(double)> f, ComplexNumber s, double T = 10.0);
20 static std::function<double(double)> numericalInverseTransform(std::function<ComplexNumber(ComplexNumber)> F,
21 double t_max = 10.0);
22
23 // Common transforms
24 static ComplexNumber exponentialTransform(double a, ComplexNumber s);
25 static ComplexNumber sinusoidalTransform(double omega, ComplexNumber s);
26 static ComplexNumber polynomialTransform(const Polynomial& p, ComplexNumber s);
27
28 // Properties
29 static std::shared_ptr<Expression> convolution(std::shared_ptr<Expression> f1, std::shared_ptr<Expression> f2);
30 static std::shared_ptr<Expression> timeShift(std::shared_ptr<Expression> expr, double a);
31 static std::shared_ptr<Expression> frequencyShift(std::shared_ptr<Expression> expr, double a);
32};