标签: polynomials

优化一组多项式以获得计算速度

我有一组由计算机代数系统(CAS)产生的多项式表达式.例如,这是该集合的一个元素.

-d*d*L*L*QB*B*L*L*Q + 2*d*F*Ĵ*L*Q + 2*b*表F*H*L*QF*F*Ĵ*Ĵ*QB*b*表Ĵ*∫*q + 2*b*表d*H*Ĵ*QF*F*H*H*QD*d*H*H*q + b*b*∫*∫*○*O-2*b*d*H*Ĵ*○*O + d*d*H*H*○*0-2*b*b*∫*L*N*O + 2*b*表d*H*L*n个*O + 2*b*表F*H*Ĵ*N*0-2*d*F*H*H*N*O + 2*b*表d*∫*L*M*0-2*d*d*H*L*M*0-2*b*表F*Ĵ*∫*M*O + 2*d*F*H*Ĵ*M*O + b*b*L*L*N*N-2*b*表F*H*L*N*N + F*F*H*H*N*N-2*b*表d*L*L*m*n个+ 2*b*表F*Ĵ*L*米*N + 2*d*F*H*L*m*n个-2*F*F*H*Ĵ*m*n个+ d*d*L*L*m*m的-2*d*F*Ĵ*L*M*M + F*F*Ĵ*Ĵ*m*m的

我需要尽快在C程序中执行所有这些操作.如果你仔细研究这些公式中的任何一个,很明显我们可以优化它们的计算速度.例如,在上面粘贴的多项式中,我可以立即看到术语-d*d*l*l*q,2*d*f*j*l*q和-f*f*j*j*q,这样我就可以用-q*square(d*lf*j)替换它们的总和.我相信这里可以做很多这样的事情.我不相信(但也许我错了)任何编译器都能找到这个优化,或者更高级的优化.我试图让maxima(一个CAS)为我做这个,但没有任何结果(因为我是极限初学者,我可能错过了一个神奇的命令).所以,我的第一个问题是:我们可以使用什么工具/算法来优化多项式表达式以获得计算速度?

当优化一组共享大多数变量的多项式表达式时,事情变得更加复杂.实际上,通过表达式优化表达式可能是次优的,因为在优化之前编译器可以识别公共部分,但是如果不作为整体执行则不再存在.所以,我的第二个问题是:我们可以使用哪些工具/算法来优化一组多项式表达式以获得计算速度?

最好的祝福,

PS:这篇文章与" 计算机代数软件以及最小化一组多项式中的操作数量 "有一些相似之处,但是那一点给出的答案指向CAS程序而不是说我们如何使用它们来实现我们的目标.

algorithm optimization performance computer-algebra-systems polynomials

5
推荐指数
1
解决办法
139
查看次数

有限域上的SymPy多项式

import sympy as S 
F = S.FiniteField(101)
Run Code Online (Sandbox Code Playgroud)

当我打电话时,f = S.poly(y ** 2 - x ** 3 - x - 1,F)我收到以下错误:

'FiniteField'对象没有属性'is_commutative'

但有限域是定义的可交换的!所以我不确定这个错误应该是什么意思!

有没有人遇到过这个?如何在有限域上声明多项式?

python sympy finite-field polynomials

5
推荐指数
1
解决办法
1009
查看次数

为什么Sympy用小系数切断多项式项呢?

我试图将包含具有不同程度的符号变量的项的表达式转换为z_spython中的多项式,sympy.Poly()以便我可以使用提取系数.coeffs().

我所拥有的表达式是具有独立符号变量z_s的高阶多项式.出于某种原因,当我使用sympy.Poly()将表达式转换为多项式时,似乎用小系数来切断项.下面是我的函数,我在其中包含了将其重新定义为符号多项式的行:

f = -1.29096669270427e-61*z_s**33 + 6.24438995041203e-59*z_s**32 - 6.41125090009095e-57*z_s**31 - 8.30852813320818e-55*z_s**30 + 5.84175807723288e-53*z_s**29 + 1.88577332997761e-50*z_s**28 + 9.46504910106607e-49*z_s**27 - 2.28903644846359e-46*z_s**26 - 4.63321594171589e-44*z_s**25 - 1.78254194888339e-42*z_s**24 + 6.43406800910469e-40*z_s**23 + 1.20425521347205e-37*z_s**22 + 3.4116753522246e-36*z_s**21 - 1.92084369416715e-33*z_s**20 - 3.04107684362554e-31*z_s**19 + 2.89289551256439e-30*z_s**18 + 6.38382842182985e-27*z_s**17 + 5.46438700248253e-25*z_s**16 - 8.50501280745176e-23*z_s**15 - 1.6344595302306e-20*z_s**14 + 1.07764488797684e-18*z_s**13 + 3.47026242660686e-16*z_s**12 - 2.93966702403133e-14*z_s**11 - 5.25394006214533e-12*z_s**10 + 1.21642330162702e-9*z_s**9 - 1.16577645027166e-7*z_s**8 + 6.82117624588787e-6*z_s**7 - 0.000267513120031891*z_s**6 + 0.00723589681411793*z_s**5 - 0.134846078975788*z_s**4 + 1.69035817278476*z_s**3 - 13.5277365002646*z_s**2 + 62.3459673862853*z_s - 76.5029927727737
sympy.Poly(f,z_s)
Run Code Online (Sandbox Code Playgroud)

返回:

Poly(-2.93966702403133e-14*z_s**11 …
Run Code Online (Sandbox Code Playgroud)

python sympy polynomials coefficients

5
推荐指数
1
解决办法
540
查看次数

你如何使R poly()评估(或"预测")多变量新数据(正交或原始)?

使用polyR中的函数,如何评估多元多项式?

  • 这篇文章共有4个问题,下面重点介绍.
  • 我正在寻求评估poly()输出对象(正交或原始多项式)的输出.这样我就可以使用多项式生成一个类似于我的模型矩阵的行,我可以用它来评估结果(即,我试图通过调用推送多变量测试数据值,poly()以便可以类似于我的回归方法矩阵的一行).
  • 我的背景:我对R,R poly()和R的回归程序相对较新.
  • 我已经尝试了几种方法,并希望对每种方法都有所帮助:

(A):直接接近 predict

这种方法失败了,显然是由于一些意想不到的输入类别.我知道这些特殊的x1和x2值是共线的,对于一般的拟合来说并不理想(我只是想让predict机器运转起来).使用的predict灵感来自这篇 SO帖子. (Q1)是否可以predict直接调用该方法来评估该多项式?

> x1 = seq(1,  10,  by=0.2)
> x2 = seq(1.1,10.1,by=0.2)
> t = poly(cbind(x1,x2),degree=2,raw=T)
> predict(t,newdata=data.frame(x1=2.03,x2=2.03))
Error in UseMethod("predict") : 
  no applicable method for 'predict' applied to an object of class "c('matrix', 'double', 'numeric')"
Run Code Online (Sandbox Code Playgroud)

(B)直接评估仅适用于原始多项式(非正交)

由于(A),我尝试了直接调用poly()的变通方法.对于原始多项式,我可以让它工作,但我必须为每个相应的变量重复数据.以下显示(第一个)单个数据点的失败,(第二个)重复该值的成功. (Q2)有没有办法避免第二个清单中冗余重复数据以使原始poly()评估正确?

> poly(cbind(x1=c(2.03),x2=c(2.13)),degree=2,raw=T)
Error in `colnames<-`(`*tmp*`, value = apply(z, 1L, function(x) …
Run Code Online (Sandbox Code Playgroud)

regression r orthogonal polynomials

5
推荐指数
1
解决办法
1465
查看次数

用于基于一组点估计多项式的Java库

多项式的度数应该是# of points - 1例如,如果有2个点,则它应该是一条线.

我知道我可以用矩阵来解决这个问题

例如,如果有4个点:
多项式将是y = ax^3 + bx^2 + cx + d,矩阵将是

| y0 |         | x0^3    x0^2    x0    1 |     | a |
| y1 |    =    | x1^3    x1^2    x1    1 |  x  | b |
| y2 |         | x2^3    x2^2    x2    1 |     | c |
| y3 |         | x3^3    x3^2    x3    1 |     | d |
Run Code Online (Sandbox Code Playgroud)

我可以解决a,b,c,d.是否有一个库可以执行此操作,输入为点{x0,y0}到{xn,xn}?

java matrix polynomial-math polynomials

5
推荐指数
1
解决办法
246
查看次数

为什么Numpy在按度数排序多项式系数时不一致?

numpy.polynomial.polynomial.Polynomial按递增程度的顺序存储多项式系数,而numpy.poly1d按递减程度的顺序存储多项式系数.

有这种差异的原因吗?两种方法都有优势吗?

python numpy scipy polynomials coefficients

5
推荐指数
1
解决办法
207
查看次数

读取文本文件并将其转换为多项式

我目前有一个文本文件如下:

3 5 6 9 
3 4 6 7 2
3 5 7 2 5 3
Run Code Online (Sandbox Code Playgroud)

读入java时的文件应显示为3x ^ 5 + 6x ^ 9.第二行将被读作4x ^ 4 + 6x ^ 7 + 2.由于我不知道如何将这些数字转换为该形式,因此无法让我的程序显示.当我运行程序时,我目前只得到它们之间有空格的数字.

这是我尝试过的:

import java.io.File;  
import java.io.FileNotFoundException;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Driver {

public static void main(String[] args) {
    try {
        @SuppressWarnings("resource")
        Scanner myfile = new Scanner(new File("poly.dat"));

        Polynomial[] mypolynomial;

        mypolynomial = new Polynomial[10];

        int index = 0;
        if (myfile.hasNext() == true) { //ignore this part
            myfile.nextLine();
        } else …
Run Code Online (Sandbox Code Playgroud)

java polynomials

5
推荐指数
1
解决办法
623
查看次数

任意阶多项式的函数(首选符号方法)

我从我的数据中找到了多项式系数:

R <- c(0.256,0.512,0.768,1.024,1.28,1.437,1.594,1.72,1.846,1.972,2.098,2.4029)
Ic <- c(1.78,1.71,1.57,1.44,1.25,1.02,0.87,0.68,0.54,0.38,0.26,0.17)
NN <- 3
ft <- lm(Ic ~ poly(R, NN, raw = TRUE))
pc <- coef(ft)
Run Code Online (Sandbox Code Playgroud)

所以我可以创建一个多项式函数:

f1 <- function(x) pc[1] + pc[2] * x + pc[3] * x ^ 2 + pc[4] * x ^ 3
Run Code Online (Sandbox Code Playgroud)

例如,采取衍生物:

g1 <- Deriv(f1)
Run Code Online (Sandbox Code Playgroud)

如何创建一个通用函数,以便不必为每个新的多项式程度重写它NN

r function symbolic-math derivative polynomials

5
推荐指数
1
解决办法
364
查看次数

Python相当于R poly()函数?

我试图了解如何使用scikit-learn(或其他模块)复制R中的poly()函数.

例如,假设我在R中有一个向量:

a <- c(1:10)
Run Code Online (Sandbox Code Playgroud)

我想生成三次多项式:

polynomial <- poly(a, 3)
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

              1           2          3
[1,] -0.49543369  0.52223297 -0.4534252
[2,] -0.38533732  0.17407766  0.1511417
[3,] -0.27524094 -0.08703883  0.3778543
[4,] -0.16514456 -0.26111648  0.3346710
[5,] -0.05504819 -0.34815531  0.1295501
[6,]  0.05504819 -0.34815531 -0.1295501
[7,]  0.16514456 -0.26111648 -0.3346710
[8,]  0.27524094 -0.08703883 -0.3778543
[9,]  0.38533732  0.17407766 -0.1511417
[10,]  0.49543369  0.52223297  0.4534252
Run Code Online (Sandbox Code Playgroud)

我是python的新手,我正在尝试了解如何利用PolynomiaFeaturessklearn中的函数来复制它.我花了一些时间查看PolynomialFeatures文档中的示例,但我仍然有点困惑.

任何见解将不胜感激.谢谢!

python r polynomials

5
推荐指数
1
解决办法
917
查看次数

多项式回归的置信区间

我对R和统计有一点疑问。

我使用最大似然法对模型进行拟合,该模型为我提供了以下系数以及各自的标准误差(除了其他参数估计值):

    ParamIndex   Estimate     SE        
1         a0  0.2135187 0.02990105  
2         a1  1.1343072 0.26123775  
3         a2 -1.0000000 0.25552696  
Run Code Online (Sandbox Code Playgroud)

从我可以画出的曲线:

 y= 0.2135187 + 1.1343072 * x - 1 * I(x^2)
Run Code Online (Sandbox Code Playgroud)

但是从那以后,我现在必须计算该曲线周围的置信区间,而且我不清楚如何做到这一点。

显然,我应该使用传播或错误/不确定性,但是我发现的方法需要原始数据,或者不仅仅是多项式公式。

当估计的SE已知为R时,有什么方法可以计算曲线的CI?

谢谢您的帮助。


编辑:

所以,现在,我有了函数的协方差表(v)vcov

                 a0           a1           a2
    a0  0.000894073 -0.003622614  0.002874075
    a1 -0.003622614  0.068245163 -0.065114661
    a2  0.002874075 -0.065114661  0.065294027
Run Code Online (Sandbox Code Playgroud)

n = 279

regression r confidence-interval polynomials

5
推荐指数
1
解决办法
1534
查看次数