Java - Метод хорд

827
24 декабря 2017, 09:00

Суть задания: Найти методом хорд корни уравнения f(x)=g(x). Где f -полином, а g- набор точек(которая интерполируется полиномами лагранжа). Проблема: Нужно применить метод хорд для f(x) - g(x)=0. То есть, чтобы результат был - корень на пересечении 2-х графиков.

Как пробовал решать: 1.

package in.general;

public class AbstractFunctionFG {
    private ArrayFFunction F;
    private ArrayGFunction G;
    private double root;
    public AbstractFunctionFG() {}
    public AbstractFunctionFG(ArrayFFunction f, ArrayGFunction g) {
        this.F = f;
        this.G = g;
    }
    public double getRoot() {
        return root;
    }
    public void setRoot(double root) {
        this.root = root;
    }
    public ExtendedFunc getF() {
        return F;
    }
    public ExtendedFunc getG() {
        return G;
    }
    public void setF(ArrayFFunction f) {
        this.F = f;
    }
    public void setG(ArrayGFunction g) {
        this.G = g;
    }
    public class EqualBordersException extends Exception {}
    public double secant(double a, double b, double eps) {
        double x1 = a;
        double x2 = b;
        double x3;
        if (a > b || eps <= 0) {
            throw new IllegalArgumentException("Error!");
        }
        do {
            x3 = (x1 * fg(F,G,x2) - x2 * fg(F,G,x1)) / (fg(F,G,x2) - fg(F,G,x1)); // Ошибку выбивает здесь
            x1 = x2;
            x2 = x3;
        }
        while (Math.abs(x2 - x1) > eps);
        root = x3;
        return root;
    }
    public static double fg(ArrayFFunction F, ArrayGFunction G, double x){
        double result;
        result = F.extend(x) - G.extend(x); // И здесь тоже ошибка
        return result;
    }
}

2.

package koorsach;
public abstract class AbstractSecant{
    abstract double f(double x);
    public double  solveDich(double a, double b, double eps, FunctionF f, FunctionG g) throws IntervalException{
        double x1 = a;
        double x2 = b;
        double x3;
        do {
            x3 = (x1 * f.f(x2) - x2 * f.f(x1)) / (f.f(x2) - f.f(x1));
            x1 = x2;
            x2 = x3;
        }
        while (Math.abs(x2 - x1) > eps);
        return x3;
    }
}

Второй способ решает только для f или для g. И корни находятся только на пересечении с Ох, Оу. Помогите решить проблему, пожалуйста.

READ ALSO
what programming [требует правки]

what programming [требует правки]

I think that in the future will be real? Web programmer or? Where wages on the job above? It's better to Learn HTML and CSS, PHP or java, Python, C and C#? And advise books in the languages of your choice

226
Стоит ли создавать новый класс для вариации алгоритма?

Стоит ли создавать новый класс для вариации алгоритма?

Есть класс А, который реализует некий алгоритмНа главной форме есть чекбокс, при отметке которого алгоритм выполняется с небольшими изменениями...

195
Как писать на Spring 4 + Hibernate 4?

Как писать на Spring 4 + Hibernate 4?

Делаю проект учебных целях на spring + hibernateПо примерам написал часть функционала, но в зависимостях указал Spring 4

209
Mac Book Pro 2009 для программирования Scala в IntelijIdea

Mac Book Pro 2009 для программирования Scala в IntelijIdea

ПриветПодойдёт ли Mac Book Pro (Intel Core 2 duo 2

179