求一元和二元多项式结果

形如f(x)= a0+a1x+a2x+…+an-1x+anx,为一元多项式,当给定x后,求f(x)。系数矩阵为一维数组array[] ={a0,a1,a2,a3········,an}(顺序一定)
传统方式,先写一个x的n次幂的函数,然后主义与系数相乘,求和。代码如下:

    //求x的N次幂
    private static double power(double x,int times){
        while(times>0){
            x*=x;
            times--;
        }
        return x;
    }

    //求一元多项式结果
    public double polynomial_1(double x,int index,double[] coefficient){//参数分别是,x的值,项数,系数矩阵
        //这是传统写法
        double sum=0;
        for(int i=index-1;i>=0;i--){
            sum+=coefficient[i]*power(x, i);
        }
        return sum;
    }

下面这种更为优秀,首先需要对原式进行变形:
这里写图片描述

    public double polynomial_1(double x,int index,double[] coefficient){    
        //改进版
        double sum=coefficient[index-1];//首先需要先获取第一个系数an-1.
        for(int i=index-2;i>=0;i--){
            sum=sum*x+coefficient[i];//每次求出的sum,都是下一次的系数
        }
        return sum;

    }

这个从代码量和结构上都比第一个优秀。

二元多项式和一元基本一样,只是系数矩阵变成二维数组,行为x,列为y,
假设f(y)是一个一元多项式(m项),那么:
f(x,y)=x^0*f(y)1+x^1*f(y)2+x^2*f(y)3+····+x^n-1*f(y)n.所以可以看成一个一元多项式乘上x:

    public static double polynomial_2(double x,double y,int n,int m,double[][] coefficient){//参数分别是x,y的值,系数矩阵的行和列,系数矩阵
        //以x从0到n排序
        double sum_y;//记录y多项式的和
        double times_x=1.00;//x的n次幂,初始化为x^0=1
        double sum_x=0;//记录x多项式的和,这个要依赖sum_y
        for(int i=0;i<n;i++){//对x
            sum_y=coefficient[i][m-1];//每次取每一行的最后一个系数,
            for(int j=m-2;j>=0;j--){//对y,计算第i行的y多项式结果
                sum_y=sum_y*y+coefficient[i][j];
            }
            sum_x+=sum_y*times_x;//y多多项式结果乘上x
            times_x*=x;//每循环一次x的次数就升高
        }
        return sum_x;       
    }

只要理解了二维矩阵里每一行代表的是对应的x^k的y的多项式系数,k为行数。

Python中的一元多项式可以使用列表来表示,其中列表的每个元素都是一个二元组,第一个元素表示该项的系数,第二个元素表示该项的次数。例如,多项式2x^3 + 3x^2 - 4x + 1可以表示为[(2, 3), (3, 2), (-4, 1), (1, 0)]。 对于一元多项式,常见的操作包括加法、减法、乘法和导等。在Python中,我们可以使用循环来实现这些操作。以下是一些常见操作的实现方法: 加法: ```python def poly_add(p1, p2): result = [] i, j = 0, 0 while i < len(p1) and j < len(p2): if p1[i] == p2[j]: result.append((p1[i] + p2[j], p1[i])) i += 1 j += 1 elif p1[i] > p2[j]: result.append(p1[i]) i += 1 else: result.append(p2[j]) j += 1 while i < len(p1): result.append(p1[i]) i += 1 while j < len(p2): result.append(p2[j]) j += 1 return result ``` 减法: ```python def poly_subtract(p1, p2): result = [] i, j = 0, 0 while i < len(p1) and j < len(p2): if p1[i] == p2[j]: result.append((p1[i][0] - p2[j], p1[i])) i += 1 j += 1 elif p1[i] > p2[j]: result.append(p1[i]) i += 1 else: result.append((-p2[j], p2[j])) j += 1 while i < len(p1): result.append(p1[i]) i += 1 while j < len(p2): result.append((-p2[j], p2[j])) j += 1 return result ``` 乘法: ```python def poly_multiply(p1, p2): result = [] for term1 in p1: for term2 in p2: result.append((term1*term2, term1+term2)) result.sort(key=lambda x: x, reverse=True) prev_exp = None i = 0 while i < len(result): if result[i] == prev_exp: result[i-1] = (result[i-1] + result[i], result[i-1]) del result[i] else: prev_exp = result[i] i += 1 return result ``` 导: ```python def poly_differentiate(p): result = [] for term in p: if term > 0: result.append((term*term, term-1)) return result ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值