From 0acf3681e66949205793b4d810c586b83ae2ad44 Mon Sep 17 00:00:00 2001 From: arnaudlabourel <arnaud.labourel@univ-amu.fr> Date: Mon, 20 Sep 2021 15:23:18 +0200 Subject: [PATCH] Correction des formules --- src/main/java/formula/Addition.java | 17 ++++++++++++++ src/main/java/formula/BinaryOperation.java | 25 +++++++++++++++++++++ src/main/java/formula/Constant.java | 13 +++++------ src/main/java/formula/Cosine.java | 17 ++++++++++++++ src/main/java/formula/Division.java | 19 ++++++++++++++++ src/main/java/formula/Exponential.java | 17 ++++++++++++++ src/main/java/formula/Logarithm.java | 17 ++++++++++++++ src/main/java/formula/Multiplication.java | 18 +++++++++++++++ src/main/java/formula/Opposite.java | 17 ++++++++++++++ src/main/java/formula/Sine.java | 17 ++++++++++++++ src/main/java/formula/Subtraction.java | 17 ++++++++++++++ src/main/java/formula/UnaryOperation.java | 23 +++++++++++++++++++ src/main/java/formula/VariableX.java | 18 +++++++++++++++ src/main/java/viewer/FunctionList.java | 10 ++++++--- src/main/java/viewer/MainAppController.java | 1 - 15 files changed, 234 insertions(+), 12 deletions(-) create mode 100644 src/main/java/formula/Addition.java create mode 100644 src/main/java/formula/BinaryOperation.java create mode 100644 src/main/java/formula/Cosine.java create mode 100644 src/main/java/formula/Division.java create mode 100644 src/main/java/formula/Exponential.java create mode 100644 src/main/java/formula/Logarithm.java create mode 100644 src/main/java/formula/Multiplication.java create mode 100644 src/main/java/formula/Opposite.java create mode 100644 src/main/java/formula/Sine.java create mode 100644 src/main/java/formula/Subtraction.java create mode 100644 src/main/java/formula/UnaryOperation.java create mode 100644 src/main/java/formula/VariableX.java diff --git a/src/main/java/formula/Addition.java b/src/main/java/formula/Addition.java new file mode 100644 index 0000000..2f332a7 --- /dev/null +++ b/src/main/java/formula/Addition.java @@ -0,0 +1,17 @@ +package formula; + +public class Addition extends BinaryOperation { + public Addition(Formula leftMember, Formula rightMember) { + super(leftMember, rightMember, "+"); + } + + @Override + protected double compute(double leftValue, double rightValue) { + return leftValue + rightValue; + } + + @Override + public Formula derivative() { + return new Addition(leftMember.derivative(), rightMember.derivative()); + } +} diff --git a/src/main/java/formula/BinaryOperation.java b/src/main/java/formula/BinaryOperation.java new file mode 100644 index 0000000..caccbbe --- /dev/null +++ b/src/main/java/formula/BinaryOperation.java @@ -0,0 +1,25 @@ +package formula; + +public abstract class BinaryOperation implements Formula { + final Formula leftMember; + final Formula rightMember; + final String operatorSymbol; + + public BinaryOperation(Formula leftMember, Formula rightMember, String operatorSymbol) { + this.leftMember = leftMember; + this.rightMember = rightMember; + this.operatorSymbol = operatorSymbol; + } + + @Override + public String toString() { + return "(" + leftMember + " " + operatorSymbol + " " + rightMember + ")"; + } + + @Override + public double eval(double xValue) { + return compute(leftMember.eval(xValue), rightMember.eval(xValue)); + } + + protected abstract double compute(double leftValue, double rightValue); +} diff --git a/src/main/java/formula/Constant.java b/src/main/java/formula/Constant.java index 12359a7..a4e9e5e 100644 --- a/src/main/java/formula/Constant.java +++ b/src/main/java/formula/Constant.java @@ -4,10 +4,10 @@ import java.util.HashMap; public class Constant implements Formula { - private double value; + private final double value; public Constant(double value) { - // TODO : change the code. + this.value = value; } /** @@ -18,8 +18,7 @@ public class Constant implements Formula { */ @Override public double eval(double xValue) { - // TODO : change the code. - return 0; + return value; } /** @@ -29,8 +28,7 @@ public class Constant implements Formula { */ @Override public Formula derivative() { - // TODO : change the code. - return this; + return new Constant(0); } /** @@ -40,8 +38,7 @@ public class Constant implements Formula { */ @Override public String toString() { - // TODO : change the code. - return "toto"; + return Double.toString(value); } /** diff --git a/src/main/java/formula/Cosine.java b/src/main/java/formula/Cosine.java new file mode 100644 index 0000000..5108eef --- /dev/null +++ b/src/main/java/formula/Cosine.java @@ -0,0 +1,17 @@ +package formula; + +public class Cosine extends UnaryOperation { + public Cosine(Formula member) { + super(member, "cos"); + } + + @Override + protected double compute(double value) { + return Math.cos(value); + } + + @Override + public Formula derivative() { + return new Opposite(new Multiplication(member.derivative(), new Sine(member))); + } +} diff --git a/src/main/java/formula/Division.java b/src/main/java/formula/Division.java new file mode 100644 index 0000000..528bac9 --- /dev/null +++ b/src/main/java/formula/Division.java @@ -0,0 +1,19 @@ +package formula; + +public class Division extends BinaryOperation { + public Division(Formula dividend, Formula divisor) { + super(dividend, divisor, "/"); + } + + @Override + protected double compute(double leftValue, double rightValue) { + return leftValue/rightValue; + } + + @Override + public Formula derivative() { + return new Division(new Subtraction(new Multiplication(leftMember.derivative(), rightMember), + new Multiplication(leftMember, rightMember.derivative())), + new Multiplication(rightMember, rightMember)); + } +} diff --git a/src/main/java/formula/Exponential.java b/src/main/java/formula/Exponential.java new file mode 100644 index 0000000..7fdc0e8 --- /dev/null +++ b/src/main/java/formula/Exponential.java @@ -0,0 +1,17 @@ +package formula; + +public class Exponential extends UnaryOperation { + public Exponential(Formula member) { + super(member, "e^"); + } + + @Override + protected double compute(double value) { + return Math.exp(value); + } + + @Override + public Formula derivative() { + return new Multiplication(member.derivative(), new Exponential(member)); + } +} diff --git a/src/main/java/formula/Logarithm.java b/src/main/java/formula/Logarithm.java new file mode 100644 index 0000000..963c3b9 --- /dev/null +++ b/src/main/java/formula/Logarithm.java @@ -0,0 +1,17 @@ +package formula; + +public class Logarithm extends UnaryOperation { + public Logarithm(Formula member) { + super(member, "log"); + } + + @Override + protected double compute(double value) { + return Math.log(value); + } + + @Override + public Formula derivative() { + return new Division(member.derivative(), member); + } +} diff --git a/src/main/java/formula/Multiplication.java b/src/main/java/formula/Multiplication.java new file mode 100644 index 0000000..ebef51f --- /dev/null +++ b/src/main/java/formula/Multiplication.java @@ -0,0 +1,18 @@ +package formula; + +public class Multiplication extends BinaryOperation { + public Multiplication(Formula leftMember, Formula rightMember) { + super(leftMember, rightMember, "*"); + } + + @Override + protected double compute(double leftValue, double rightValue) { + return leftValue * rightValue; + } + + @Override + public Formula derivative() { + return new Addition(new Multiplication(leftMember.derivative(), rightMember), + new Multiplication(leftMember, rightMember.derivative())); + } +} diff --git a/src/main/java/formula/Opposite.java b/src/main/java/formula/Opposite.java new file mode 100644 index 0000000..1402959 --- /dev/null +++ b/src/main/java/formula/Opposite.java @@ -0,0 +1,17 @@ +package formula; + +public class Opposite extends UnaryOperation{ + public Opposite(Formula member) { + super(member, "-"); + } + + @Override + public Formula derivative() { + return new Opposite(member.derivative()); + } + + @Override + protected double compute(double value) { + return -value; + } +} diff --git a/src/main/java/formula/Sine.java b/src/main/java/formula/Sine.java new file mode 100644 index 0000000..e2e4ace --- /dev/null +++ b/src/main/java/formula/Sine.java @@ -0,0 +1,17 @@ +package formula; + +public class Sine extends UnaryOperation { + public Sine(Formula member) { + super(member, "sin"); + } + + @Override + protected double compute(double value) { + return Math.sin(value); + } + + @Override + public Formula derivative() { + return new Multiplication(member.derivative(), new Cosine(member)); + } +} diff --git a/src/main/java/formula/Subtraction.java b/src/main/java/formula/Subtraction.java new file mode 100644 index 0000000..e52c052 --- /dev/null +++ b/src/main/java/formula/Subtraction.java @@ -0,0 +1,17 @@ +package formula; + +public class Subtraction extends BinaryOperation { + public Subtraction(Formula subtrahend, Formula minuend) { + super(subtrahend, minuend, "-"); + } + + @Override + protected double compute(double leftValue, double rightValue) { + return leftValue - rightValue; + } + + @Override + public Formula derivative() { + return new Subtraction(leftMember.derivative(), rightMember.derivative()); + } +} diff --git a/src/main/java/formula/UnaryOperation.java b/src/main/java/formula/UnaryOperation.java new file mode 100644 index 0000000..f1bb7b9 --- /dev/null +++ b/src/main/java/formula/UnaryOperation.java @@ -0,0 +1,23 @@ +package formula; + +public abstract class UnaryOperation implements Formula { + protected final Formula member; + private final String symbol; + + public UnaryOperation(Formula member, String symbol) { + this.member = member; + this.symbol = symbol; + } + + @Override + public double eval(double xValue) { + return compute(member.eval(xValue)); + } + + protected abstract double compute(double value); + + @Override + public String toString() { + return symbol + "(" + member + ")"; + } +} diff --git a/src/main/java/formula/VariableX.java b/src/main/java/formula/VariableX.java new file mode 100644 index 0000000..3ecbe56 --- /dev/null +++ b/src/main/java/formula/VariableX.java @@ -0,0 +1,18 @@ +package formula; + +public class VariableX implements Formula { + @Override + public double eval(double xValue) { + return xValue; + } + + @Override + public String toString() { + return "x"; + } + + @Override + public Formula derivative() { + return new Constant(1); + } +} diff --git a/src/main/java/viewer/FunctionList.java b/src/main/java/viewer/FunctionList.java index 68d0c34..cca4709 100644 --- a/src/main/java/viewer/FunctionList.java +++ b/src/main/java/viewer/FunctionList.java @@ -1,6 +1,6 @@ package viewer; -import formula.Constant; +import formula.*; import javafx.scene.chart.XYChart; import java.util.ArrayList; @@ -19,8 +19,12 @@ class FunctionList { this.lowerBound = functionChart.getLowerBound(); this.upperBound = functionChart.getUpperBound(); - PlottableFunction function = new PlottableFunction(new Constant(1), "f"); - addFunctionAndItsDerivative(function); + List<PlottableFunction> functions = List.of(new PlottableFunction(new Logarithm(new VariableX()),"f"), + new PlottableFunction(new Multiplication(new VariableX(), new Constant(3)), "g"), + new PlottableFunction(new Division(new Constant(1), new VariableX()), "h"), + new PlottableFunction(new Cosine(new Multiplication(new Constant(2), new VariableX())), "a"), + new PlottableFunction(new Exponential(new Multiplication(new Constant(2), new VariableX())), "a")); + addFunctionsAndTheirDerivative(functions); } void toggleFunction(PlottableFunction function) { diff --git a/src/main/java/viewer/MainAppController.java b/src/main/java/viewer/MainAppController.java index 329cd94..fa24019 100644 --- a/src/main/java/viewer/MainAppController.java +++ b/src/main/java/viewer/MainAppController.java @@ -45,7 +45,6 @@ public class MainAppController implements Initializable { Button button = new Button(function.toString()); addButton(button); button.setOnAction(event -> toggleFunction(function)); - toggleFunction(function); } private void toggleFunction(PlottableFunction function){ -- GitLab