crowlogic / arb4j

arb4j is a Java API for the arbitrary precision ball arithmetic library found at http://arblib.org
Other
1 stars 0 forks source link

implement RationalFunction class #440

Closed crowlogic closed 1 week ago

crowlogic commented 2 weeks ago

Unified Polynomial Representation Including Remainders and Divisors for Rational Functions

Objective: Refine the expression parser to include a unified representation that integrates remainders and divisors into the polynomial structure, with a specific emphasis on handling rational functions, particularly Lommel polynomials.

Details:

Example: Considering this:

$${\text{polynomial: } 0, \text{remainder: } x^2, \text{divisor: } x^2}$$

Which reduces to

$${\text{polynomial: } 0, \text{remainder: } 1, \text{divisor: } x}$$

Now multiply by x

$${\text{polynomial: } 0, \text{remainder: } x, \text{divisor: } x}$$

Which reduces to

$${\text{polynomial: } 1, \text{remainder: } 0, \text{divisor: } 1}$$

crowlogic commented 2 weeks ago

wait , wtf, thats just a rational function. so, just finish https://github.com/crowlogic/arb4j/issues/417

crowlogic commented 2 weeks ago

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \title{Development of a Generic Rational Function Class} \author{Your Name} \date{\today}

\begin{document}

\maketitle

\section{Introduction} This document outlines the development of the \texttt{RationalFunction} class, designed to manage and compute rational functions by extending the \texttt{RealPolynomial} class. This approach aims to integrate this functionality into an existing expression compiler, enhancing its capabilities to handle more complex mathematical expressions.

\section{Structural Design} The \texttt{RationalFunction} class includes three primary components: \begin{itemize} \item \textbf{Value} ($V(x)$): A polynomial representing the non-fractional part of the function. \item \textbf{Remainder} ($R(x)$): When combined with the \textbf{Divisor}, represents the fractional part of the function. \item \textbf{Divisor} ($D(x)$): Denotes the denominator in the fractional part, where $D(x) \neq 0$. \end{itemize} Each component is managed distinctly to maintain the integrity and accuracy of calculations within the class.

\section{Operational Definitions} Operations within the \texttt{RationalFunction} are defined as follows:

\subsection{Addition} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$, the result is: [ \frac{R_1(x)D_2(x) + R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) + V_2(x) ]

\subsection{Subtraction} Subtraction follows a similar structure: [ \frac{R_1(x)D_2(x) - R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) - V_2(x) ]

\subsection{Multiplication} For multiplication: [ \left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right) \cdot \left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right) ] [ = \frac{R_1(x)R_2(x)}{D_1(x)D_2(x)} + \frac{R_1(x)V_2(x)}{D_1(x)} + \frac{V_1(x)R_2(x)}{D_2(x)} + V_1(x)V_2(x) ]

\subsection{Division} And for division: [ \frac{\left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right)}{\left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right)} ] [ = \frac{R_1(x)D_2(x) + V_1(x)D_1(x)D_2(x)}{R_2(x)D_1(x) + V_2(x)D_1(x)D_2(x)} ]

\section{Conclusion} The \texttt{RationalFunction} class significantly enhances the capabilities of the existing expression compiler, enabling it to handle a wider range of mathematical expressions efficiently. This integration ensures that both polynomial and rational functions are processed accurately and robustly, adhering to algebraic identities and operational integrity.

\end{document}

crowlogic commented 2 weeks ago

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \title{Development of a Generic Rational Function Class} \author{Your Name} \date{\today}

\begin{document}

\maketitle

\section{Introduction} This document outlines the development of the \texttt{RationalFunction} class, designed to manage and compute rational functions by extending the \texttt{RealPolynomial} class. This approach aims to integrate this functionality into an existing expression compiler, enhancing its capabilities to handle more complex mathematical expressions.

\section{Structural Design} The \texttt{RationalFunction} class includes three primary components: \begin{itemize} \item \textbf{Value} ($V(x)$): A polynomial representing the non-fractional part of the function. \item \textbf{Remainder} ($R(x)$): When combined with the \textbf{Divisor}, represents the fractional part of the function. \item \textbf{Divisor} ($D(x)$): Denotes the denominator in the fractional part, where $D(x) \neq 0$. \end{itemize} Each component is managed distinctly to maintain the integrity and accuracy of calculations within the class.

\section{Operational Definitions} Operations within the \texttt{RationalFunction} are defined as follows:

\subsection{Addition} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$, the result is: [ \frac{R_1(x)D_2(x) + R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) + V_2(x) ]

\subsection{Subtraction} Subtraction follows a similar structure: [ \frac{R_1(x)D_2(x) - R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) - V_2(x) ]

\subsection{Multiplication} For multiplication: [ \left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right) \cdot \left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right) ] [ = \frac{R_1(x)R_2(x)}{D_1(x)D_2(x)} + \frac{R_1(x)V_2(x)}{D_1(x)} + \frac{V_1(x)R_2(x)}{D_2(x)} + V_1(x)V_2(x) ]

\subsection{Division} And for division: [ \frac{\left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right)}{\left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right)} ] [ = \frac{R_1(x)D_2(x) + V_1(x)D_1(x)D_2(x)}{R_2(x)D_1(x) + V_2(x)D_1(x)D_2(x)} ]

\section{Handling of Remainders in Operations} In the context of polynomial arithmetic, here's how operations generally behave with regards to remainders: \begin{itemize} \item \textbf{Addition and Subtraction}: These operations do not inherently produce new remainders. Instead, existing remainders are algebraically combined or subtracted. \item \textbf{Multiplication}: Incorporates and manages the remainders without necessarily generating new remainders outside of the resulting expressions. \item \textbf{Division}: Remainders are a fundamental part of the operation if complete divisibility is not achieved. \end{itemize}

\section{Conclusion} The \texttt{RationalFunction} class significantly enhances the capabilities of the existing expression compiler, enabling it to handle a wider range of mathematical expressions efficiently. This integration ensures that both polynomial and rational functions are processed accurately and robustly, adhering to algebraic identities and operational integrity.

\end{document}

crowlogic commented 2 weeks ago

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \title{Development of a Generic Rational Function Class} \author{Your Name} \date{\today}

\begin{document}

\maketitle

\section{Introduction} This document outlines the development of the \texttt{RationalFunction} class, designed to manage and compute rational functions by extending the \texttt{RealPolynomial} class. This approach aims to integrate this functionality into an existing expression compiler, enhancing its capabilities to handle more complex mathematical expressions.

\section{Structural Design} The \texttt{RationalFunction} class includes three primary components: \begin{itemize} \item \textbf{Value} ($V(x)$): A polynomial representing the non-fractional part of the function. \item \textbf{Remainder} ($R(x)$): When combined with the \textbf{Divisor}, represents the fractional part of the function. \item \textbf{Divisor} ($D(x)$): Denotes the denominator in the fractional part, where $D(x) \neq 0$. \end{itemize} Each component is managed distinctly to maintain the integrity and accuracy of calculations within the class.

\section{Operational Definitions} Operations within the \texttt{RationalFunction} are defined as follows:

\subsection{Addition} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$, the result is: [ \frac{R_1(x)D_2(x) + R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) + V_2(x) ]

\subsection{Subtraction} Subtraction follows a similar structure: [ \frac{R_1(x)D_2(x) - R_2(x)D_1(x)}{D_1(x)D_2(x)} + V_1(x) - V_2(x) ]

\subsection{Multiplication} For multiplication: [ \left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right) \cdot \left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right) ] [ = \frac{R_1(x)R_2(x)}{D_1(x)D_2(x)} + \frac{R_1(x)V_2(x)}{D_1(x)} + \frac{V_1(x)R_2(x)}{D_2(x)} + V_1(x)V_2(x) ]

\subsection{Division} And for division: [ \frac{\left(\frac{R_1(x)}{D_1(x)} + V_1(x)\right)}{\left(\frac{R_2(x)}{D_2(x)} + V_2(x)\right)} ] [ = \frac{R_1(x)D_2(x) + V_1(x)D_1(x)D_2(x)}{R_2(x)D_1(x) + V_2(x)D_1(x)D_2(x)} ]

\section{Handling of Remainders in Operations} In the context of polynomial arithmetic, here's how operations generally behave with regards to remainders: \begin{itemize} \item \textbf{Addition and Subtraction}: These operations do not inherently produce new remainders. Instead, existing remainders are algebraically combined or subtracted. \item \textbf{Multiplication}: Incorporates and manages the remainders without necessarily generating new remainders outside of the resulting expressions. \item \textbf{Division}: Remainders are a fundamental part of the operation if complete divisibility is not achieved. \end{itemize}

\section{Conclusion} The \texttt{RationalFunction} class significantly enhances the capabilities of the existing expression compiler, enabling it to handle a wider range of mathematical expressions efficiently. This integration ensures that both polynomial and rational functions are processed accurately and robustly, adhering to algebraic identities and operational integrity.

\end{document}

crowlogic commented 2 weeks ago

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \title{Development of a Generic Rational Function Class} \author{Your Name} \date{\today}

\begin{document}

\maketitle

\section{Introduction} This document outlines the development of the \texttt{RationalFunction} class, designed to manage and compute rational functions by extending the \texttt{RealPolynomial} class. This approach aims to integrate this functionality into an existing expression compiler, enhancing its capabilities to handle more complex mathematical expressions.

\section{Structural Design} The \texttt{RationalFunction} class includes three primary components: \begin{itemize} \item \textbf{Value} ($V(x)$): A polynomial representing the non-fractional part of the function. \item \textbf{Remainder} ($R(x)$): When combined with the \textbf{Divisor}, represents the fractional part of the function. \item \textbf{Divisor} ($D(x)$): Denotes the denominator in the fractional part, where $D(x) \neq 0$. \end{itemize} Each component is managed distinctly to maintain the integrity and accuracy of calculations within the class.

\section{Operational Definitions} Operations within the \texttt{RationalFunction} are defined as follows:

\subsection{Addition} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x) + V_2(x) ] [ \text{Resulting Remainder} = R_1(x)D_2(x) + R_2(x)D_1(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Subtraction} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x) - V_2(x) ] [ \text{Resulting Remainder} = R_1(x)D_2(x) - R_2(x)D_1(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Multiplication} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x)V_2(x) + \frac{V_1(x)R_2(x)}{D_2(x)} + \frac{R_1(x)V_2(x)}{D_1(x)} ] [ \text{Resulting Remainder} = R_1(x)R_2(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Division} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = \frac{V_1(x)D_2(x) + R_1(x)}{R_2(x) + V_2(x)D_2(x)} ] [ \text{Resulting Remainder} = R_1(x)D_2(x) + V_1(x)D_1(x)D_2(x) ] [ \text{Resulting Divisor} = R_2(x)D_1(x) + V_2(x)D_1(x)D_2(x) ]

\section{Handling of Remainders in Operations} In the context of polynomial arithmetic, here's how operations generally behave with regards to remainders:

\begin{itemize} \item \textbf{Addition}: When adding polynomials that include remainders, the resulting remainder is the algebraic combination of the input remainders. This can result in a new remainder if the combination is not fully reducible. \item \textbf{Subtraction}: When subtracting polynomials that include remainders, the resulting remainder is the algebraic subtraction of the input remainders. \item \textbf{Multiplication}: Multiplication of polynomials with remainders combines these remainders, which may result in a non-zero remainder if the product of the polynomials does not perfectly reduce. \item \textbf{Division}: Division inherently results in a remainder if the numerator is not completely divisible by the denominator. \end{itemize}

\section{Conclusion} The \texttt{RationalFunction} class significantly enhances the capabilities of the existing expression compiler, enabling it to handle a wider range of mathematical expressions efficiently. This integration ensures that both polynomial and rational functions are processed accurately and robustly, adhering to algebraic identities and operational integrity.

\end{document}

crowlogic commented 2 weeks ago

\documentclass{article} \usepackage[utf8]{inputenc} \usepackage{amsmath} \title{Development of a Generic Rational Function Class} \author{Your Name} \date{\today}

\begin{document}

\maketitle

\section{Introduction} This document outlines the development of the \texttt{RationalFunction} class, designed to manage and compute rational functions by extending the \texttt{RealPolynomial} class. This approach aims to integrate this functionality into an existing expression compiler, enhancing its capabilities to handle more complex mathematical expressions.

\section{Structural Design} The \texttt{RationalFunction} class includes three primary components: \begin{itemize} \item \textbf{Value} ($V(x)$): A polynomial representing the non-fractional part of the function. \item \textbf{Remainder} ($R(x)$): When combined with the \textbf{Divisor}, represents the fractional part of the function. \item \textbf{Divisor} ($D(x)$): Denotes the denominator in the fractional part, where $D(x) \neq 0$. \end{itemize} Each component is managed distinctly to maintain the integrity and accuracy of calculations within the class.

\section{Operational Definitions} Operations within the \texttt{RationalFunction} are defined as follows:

\subsection{Addition} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x) + V_2(x) ] [ \text{Resulting Remainder} = R_1(x)D_2(x) + R_2(x)D_1(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Subtraction} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x) - V_2(x) ] [ \text{Resulting Remainder} = R_1(x)D_2(x) - R_2(x)D_1(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Multiplication} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = V_1(x)V_2(x) + \frac{V_1(x)R_2(x)}{D_2(x)} + \frac{R_1(x)V_2(x)}{D_1(x)} ] [ \text{Resulting Remainder} = R_1(x)R_2(x) ] [ \text{Resulting Divisor} = D_1(x)D_2(x) ]

\subsection{Division} Given two rational functions $\frac{R_1(x)}{D_1(x)} + V_1(x)$ and $\frac{R_2(x)}{D_2(x)} + V_2(x)$: [ \text{Resulting Value} = \left(\frac{V_1(x)D_2(x) + R_1(x)}{D_1(x)}\right) \cdot \left(\frac{D_1(x)}{V_2(x)D_1(x) + R_2(x)}\right) ] [ \text{Resulting Remainder} = R_1(x)D_2(x) + V_1(x)D_1(x)D_2(x) ] [ \text{Resulting Divisor} = R_2(x)D_1(x) + V_2(x)D_1(x)D_2(x) ]

\section{Handling of Remainders in Operations} In the context of polynomial arithmetic, here's how operations generally behave with regards to remainders:

\begin{itemize} \item \textbf{Addition}: When adding polynomials that include remainders, the resulting remainder is the algebraic combination of the input remainders. This can result in a new remainder if the combination is not fully reducible. \item \textbf{Subtraction}: When subtracting polynomials that include remainders, the resulting remainder is the algebraic subtraction of the input remainders. \item \textbf{Multiplication}: Multiplication of polynomials with remainders combines these remainders, which may result in a non-zero remainder if the product of the polynomials does not perfectly reduce. \item \textbf{Division}: Division inherently results in a remainder if the numerator is not completely divisible by the denominator. \end{itemize}

\section{Conclusion} The \texttt{RationalFunction} class significantly enhances the capabilities of the existing expression compiler, enabling it to handle a wider range of mathematical expressions efficiently. This integration ensures that both polynomial and rational functions are processed accurately and robustly, adhering to algebraic identities and operational integrity.

\end{document}

crowlogic commented 2 weeks ago

@Override public RealRationalFunction div(RealRationalFunction x, int prec, RealRationalFunction result) { if (this.value != null && x.value.divisor != null) { this.value.mul(x.value.divisor, prec, new RealPolynomial()); //V1(x)*D2(x) }

if (x.value != null && this.value.divisor != null) {
    x.value.mul(this.value.divisor, prec, new RealPolynomial()); //V2(x)*D1(x)
}

if (this.value.remainder != null && x.value.divisor != null) {
    this.value.remainder.mul(x.value.divisor, prec, new RealPolynomial()); //R1(x)*D2(x)
}

if (x.value.remainder != null && this.value != null) {
    x.value.remainder.mul(this.value, prec, new RealPolynomial()); //R2(x)*V1(x)
}

V1D2.div(V2D1, prec, result.value); // Resulting Value = V1(x)D2(x)/V2(x)D1(x)

R1D2.sub(R2V1, prec, new RealPolynomial()).div(V2D1, prec, result.value.remainder); // Calculate remainder

if (this.value.divisor != null) {
    this.value.divisor.mul(x.value.divisor, prec, result.value.divisor); // Calculate divisor
}

// Direct Reduction Using ARBLIB's 'reduce'
result.reduce(); // Simplify the result

return result;

}

crowlogic commented 2 weeks ago

You're absolutely right! Leveraging your existing expression compiler and parser is a much more efficient and elegant approach for implementing these formulas. It eliminates the need to manually code polynomial operations and ensures high performance due to the compiled nature of the expressions. Here's a suggested approach using your expression compiler: