如何从多项式字符串中获取系数和指数?

Posted

技术标签:

【中文标题】如何从多项式字符串中获取系数和指数?【英文标题】:How do I get the coefficients and exponents from a polynomial string? 【发布时间】:2019-05-08 12:53:29 【问题描述】:

我正在尝试从多项式字符串中提取系数和指数,然后将它们存储到一个数组中,以便我可以使用这些数组创建一个新项,我可以对其进行数学运算(例如加、减和乘) )

List<Term> poly = new ArrayList<>;
String poly = "26x^7+5x^6-8x^3-2";

int[] coeff = // Something like using split method here to get coeffs
int[] expo = // Same here but with exponents

for(int i = 0; i < coeffs.length; i++)
    poly.add(new Term(coeff[i], expo[i]);

问题是,我真的不知道该怎么做。我尝试了很多方法,都导致错误..

【问题讨论】:

你的系数和指数总是整数吗?如果没有,您需要将它们存储在浮点数中 是的,或者至少这是我们所要求的。 【参考方案1】:

这是一个忽略 x^1 和 x^0 以及系数 =1 的额外复杂性的解决方案。

它在正则表达式中使用 Lookahead,如 here 所述

import java.util.ArrayList;
import java.util.List;

public class MyClass 

    public static void main(String[] args) 
        // expect format ax^n for each term. in particular in the cases a=1, x=1 and x=0.
        String poly = "26x^7+5x^6-8x^3+1x^1-2x^0";

        // remove ^ and then split by x and by + and - keeping the sign
        String[] numbers = poly.replace("^", "").split("((?=\\+)|(?=\\-)|x)");

        List<Integer> coeff = new ArrayList<>();
        List<Integer> expo = new ArrayList<>();

        // we can now assume that for every coefficient there is an exponent
        for (int i = 0; i < numbers.length; i += 2) 
            coeff.add(Integer.parseInt(numbers[i]));
            expo.add(Integer.parseInt(numbers[i + 1]));
        

        System.out.println(coeff);
        System.out.println(expo);
    

输出:

[26, 5, -8, 1, -2]
[7, 6, 3, 1, 0]

【讨论】:

谢谢!有效!它不适用于负指数,但我们现在真的不需要它【参考方案2】:

我会尝试使用“+”或“-”字符拆分多边形字符串。如果java中有正则表达式拆分方法,那将是合适的。

从这个拆分产生的数组应该在你的循环中被迭代以填充多边形列表。

要注意的另一件事是多项式中的“-2”项,技术上是 x^0 和任何“ax”项,即 x^1。

【讨论】:

如果您要在 [+-] 上进行拆分,您将需要一些方法来保留 -8x 等条款上的标志。

以上是关于如何从多项式字符串中获取系数和指数?的主要内容,如果未能解决你的问题,请参考以下文章

PAT 1009

如何从根中有效地找到多项式的系数? [复制]

1010 一元多项式求导

1010 一元多项式求导

1010. 一元多项式求导 (25)

PAT 1010. 一元多项式求导