Untitled
unknown
plain_text
2 years ago
3.6 kB
10
Indexable
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.util.ArrayList;
import java.util.List;
public class LagrangeInterpolation extends Application {
@Override
public void start(Stage primaryStage) {
HBox hbox = new HBox();
VBox vbox = new VBox();
hbox.setPadding(new Insets(10));
hbox.setSpacing(10);
vbox.setSpacing(10);
TextField x0Field = new TextField();
TextField y0Field = new TextField();
TextField x1Field = new TextField();
TextField y1Field = new TextField();
TextField x2Field = new TextField();
TextField y2Field = new TextField();
Label x0Label = new Label("x0:");
Label y0Label = new Label("y0:");
Label x1Label = new Label("x1:");
Label y1Label = new Label("y1:");
Label x2Label = new Label("x2:");
Label y2Label = new Label("y2:");
hbox.getChildren().addAll(x0Label, x0Field, y0Label, y0Field);
hbox.getChildren().addAll(x1Label, x1Field, y1Label, y1Field);
hbox.getChildren().addAll(x2Label, x2Field, y2Label, y2Field);
Button calculateButton = new Button("Calculate");
hbox.getChildren().add(calculateButton);
LineChart<Number, Number> lineChart = new LineChart<>(new NumberAxis(), new NumberAxis());
lineChart.setPrefSize(600, 400);
lineChart.setCreateSymbols(false);
lineChart.setAnimated(false);
calculateButton.setOnAction(event -> {
double x0 = Double.parseDouble(x0Field.getText());
double y0 = Double.parseDouble(y0Field.getText());
double x1 = Double.parseDouble(x1Field.getText());
double y1 = Double.parseDouble(y1Field.getText());
double x2 = Double.parseDouble(x2Field.getText());
double y2 = Double.parseDouble(y2Field.getText());
lineChart.getData().clear();
List<Double> xValues = List.of(x0, x1, x2);
List<Double> yValues = List.of(y0, y1, y2);
XYChart.Series<Number, Number> series = new XYChart.Series<>();
series.setName("Lagrange Polynomial");
for (double x = -10; x <= 10; x += 0.1) {
double y = 0;
for (int i = 0; i < xValues.size(); i++) {
double numerator = 1;
double denominator = 1;
for (int j = 0; j < xValues.size(); j++) {
if (j != i) {
numerator *= x - xValues.get(j);
denominator *= xValues.get(i) - xValues.get(j);
}
}
y += numerator / denominator * yValues.get(i);
}
series.getData().add(new XYChart.Data<>(x, y));
}
lineChart.getData().add(series);
});
vbox.getChildren().addAll(hbox, lineChart);
Scene scene = new Scene(vbox);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}Editor is loading...
Leave a Comment