Java 从多项式根求多项式形式

Java 从多项式根求多项式形式,java,Java,我想从这样的形式展开多项式:(x-x1)(x-x2)(x-x3)。。。 而我有x1,x2,x3。。。以数组的形式,转换为多项式形式,如x^3+bx^2+c,其中参数在数组中 有关此操作的逻辑,请参见Wolfram alpha上的扩展(例如扩展(x-a)(x-b)(x-c)(x-d)(x-e)) import java.util.ArrayList; 导入java.util.array; 导入java.util.List; 公共班机 { 公共静态void main(字符串[]args) { //(

我想从这样的形式展开多项式:(x-x1)(x-x2)(x-x3)。。。
而我有x1,x2,x3。。。以数组的形式,转换为多项式形式,如x^3+bx^2+c,其中参数在数组中

有关此操作的逻辑,请参见Wolfram alpha上的扩展(例如
扩展(x-a)(x-b)(x-c)(x-d)(x-e)

import java.util.ArrayList;
导入java.util.array;
导入java.util.List;
公共班机
{
公共静态void main(字符串[]args)
{
//(x-5)(x-4)(x-3)(x-2)(x-7)
int[]xs={5,4,3,2,7};
列表系数=新的ArrayList();
布尔正=真;
对于(int i=0;i0){
列表组合=组合(xs,i);
for(int[]nums:组合){
int乘积=1;
for(int-num:nums){
乘积*=num;
}
系数+=乘积;
}
}否则{
系数=1;
}
系数。加(系数*(正-1:-1));
正=!正;
}
对于(int i=0;i<系数.size();++i){
int系数=系数。get(i);
int exponent=(系数.size()-i-1);
系统输出打印(系数+“*x^”+指数+(指数==0?”:“+”);
}
}
//xs大小k的组合
私有静态列表组合(int[]xs,intk)
{
列表结果=新建ArrayList();
for(ArrayList comboIdxs:combine(xs.length,k)){
int[]combo=newint[comboIdxs.size()];
对于(int i=0;i如果(n如果您知道如何计算根,那么扩展就很简单。您熟悉哪些根查找算法?有一些Java数学库可以提供帮助。您还没有提供任何代码供我们查看,甚至没有提供您考虑过的想法。我想说,试着看一看数组,并使用您的数学逻辑,看看您是否可以这样做我一起吃。@Daniel_Centore这正是我想要的,非常感谢。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main
{

    public static void main(String[] args)
    {
        // (x-5)(x-4)(x-3)(x-2)(x-7)
        int[] xs = { 5, 4, 3, 2, 7 };

        List<Integer> coefficients = new ArrayList<>();

        boolean positive = true;
        for (int i = 0; i < xs.length + 1; ++i) {
            int coefficient = 0;

            if (i > 0) {
                List<int[]> combos = combos(xs, i);

                for (int[] nums : combos) {
                    int product = 1;

                    for (int num : nums) {
                        product *= num;
                    }

                    coefficient += product;
                }

            } else {
                coefficient = 1;
            }

            coefficients.add(coefficient * (positive ? 1 : -1));
            positive = !positive;
        }

        for (int i = 0; i < coefficients.size(); ++i) {
            int coefficient = coefficients.get(i);
            int exponenent = (coefficients.size() - i - 1);
            System.out.print(coefficient + "*x^" + exponenent + (exponenent == 0 ? "" : " + "));
        }
    }

    // Combinations of xs size k
    private static List<int[]> combos(int[] xs, int k)
    {
        List<int[]> result = new ArrayList<>();

        for (ArrayList<Integer> comboIdxs : combine(xs.length, k)) {
            int[] combo = new int[comboIdxs.size()];
            for (int i = 0; i < comboIdxs.size(); ++i) {
                combo[i] = xs[comboIdxs.get(i)];
            }
            result.add(combo);
        }

        return result;
    }

    // Thanks http://www.programcreek.com/2014/03/leetcode-combinations-java/

    public static ArrayList<ArrayList<Integer>> combine(int n, int k) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();

        if (n <= 0 || n < k)
            return result;

        ArrayList<Integer> item = new ArrayList<Integer>();
        dfs(n, k, 0, item, result); // because it need to begin from 1

        return result;
    }

    private static void dfs(int n, int k, int start, ArrayList<Integer> item,
            ArrayList<ArrayList<Integer>> res) {
        if (item.size() == k) {
            res.add(new ArrayList<Integer>(item));
            return;
        }

        for (int i = start; i < n; i++) {
            item.add(i);
            dfs(n, k, i + 1, item, res);
            item.remove(item.size() - 1);
        }
    }
}