Update: Java 8 Решение Я оставил старое решение, как ниже. Если ваши функции для построения являются одноразовыми выражениями, которые вы не хотите поддерживать в качестве отдельных классов, в Java 8 вы можете реализовать Function2D
как выражение лямбда.
Например ln(x+3)+3
будет записано как:
double[] a = {1.0, 3.0, 3.0};
XYDataset dataset = DatasetUtilities.sampleFunction2D(v -> Math.log(a[0]* v + a[1]) + a[2], 1.0, 5.0, 50, "Function");
final JFreeChart chart = ChartFactory.createXYLineChart("Equation", "X", "Y", dataset, PlotOrientation.VERTICAL, true, true, false);
Оригинальный ответ:
Вы можете реализовать свои собственные функции для выполнения этой заговоры. Например, для ln(x+3)+3
вы можете иметь что-то вроде ниже:
public class LogLinearFunction2D implements Function2D {
//Plot ln(ax + b) + c
double a;
double b;
double c;
public LogLinearFunction2D(double[] params) {
if(params.length != 3) throw new RuntimeException("Invalid parameters, expected array count 3");
this.a = params[0];
this.b = params[1];
this.c = params[2];
}
@Override
public double getValue(double v) {
return Math.log(a* v + b) + c;
}
}
И тогда вы можете использовать это, чтобы построить график функции с помощью фрагмента кода:
double[] a = {1.0, 1.0, -1.0};
Function2D p = new LogLinearFunction2D(a); // create function
XYDataset dataset = DatasetUtilities.sampleFunction2D(p, 1.0, 5.0, 50, "Function");
final JFreeChart chart = ChartFactory.createXYLineChart("Equation", "X", "Y", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartUtilities.saveChartAsPNG(new File("test.png"), chart, 500, 500);
Аналогично для e^x - 2*x
, вы можете иметь следующий Function2D
реализация обобщен для построения a*e^x + b*x + c
и передать массив double[] a = {1.0, -2.0, 0}
private static class ExpLinearFunction2D implements Function2D {
//Plot a*e^x + b*x + c
double a;
double b;
double c;
public ExpLinearFunction2D(double[] params) {
if(params.length != 3) throw new RuntimeException("Invalid parameters, expected array count 3");
this.a = params[0];
this.b = params[1];
this.c = params[2];
}
@Override
public double getValue(double v) {
return a * Math.exp(v) + b * v + c;
}
}
Вы можете создать свой собственный точки и график, если вы не можете найти реализацию Function2D для своего уравнения. – vsnyc