标签: polynomials

Sympy:在多项式中删除高阶项

使用Sympy,假设我们有一个表达式f,它是符号"x"(以及可能的其他符号)的多项式.

我想知道如果有一种有效的方法可以删除大于某个整数n的f中的所有项.

作为一个特例,我有一个非常复杂的功能,但我想只保留x中的第二个订单.有效的方法是什么?

这种明显的,非常有效的方法是每m小于n,取m个导数并将x设为0,得到x ^ m的系数.我们以这种方式获得每个系数,然后重建多项式.但是采取衍生品并不是最有效的方法.

python symbolic-math sympy computer-algebra-systems polynomials

7
推荐指数
1
解决办法
2446
查看次数

允许分别提供等比较器和散列函数的映射

在尝试对多项式进行建模时,特别是它们的乘法,我遇到了以下问题.在乘法期间,两个多项式的单个单项式相乘,当然可以发生我有(3x ^ 2 y + 5x y ^ 2)*(x + y).结果包含3x ^ 2 y ^ 2和5 x ^ 2 y ^ 2,我想通过添加立即组合.

当然,我想使用单项式的部分x ^ 2 y ^ 2作为(哈希)映射中的关键字来添加不同的系数(在示例中为3和5).但是我设想的单项式对象自然也应该包含系数,该系数应该是地图键的一部分.

当然,我可以写单项对象的equals/hashcode,使它们忽略系数.但这感觉错了,因为数学上单项式显然只等于另一个,如果系数相等的话.

为中间操作引入无系数单项式对象也看起来不正确.

我没有使用地图,而是使用列表并使用二进制搜索和一个忽略系数的专用比较器.

如果没有使用不使用密钥'equals/hashcode的地图,而是使用专用的地图,那么有没有更好的想法如何融合单项式?

java hashmap symbolic-math polynomials

7
推荐指数
1
解决办法
5681
查看次数

如何正确找到多项式根?

考虑一个多项式,例如:

p = [1 -9 27 -27];
Run Code Online (Sandbox Code Playgroud)

显然真正的根是3:

polyval(p,3)

0
Run Code Online (Sandbox Code Playgroud)

使用该roots功能时

q = roots([1 -9 27 -27]);
Run Code Online (Sandbox Code Playgroud)

format short:

q =

   3.0000 + 0.0000i
   3.0000 + 0.0000i
   3.0000 - 0.0000i
Run Code Online (Sandbox Code Playgroud)

并检查根是否真实:

bsxfun(@eq,ones(size(q)),isreal(q))

0
0
0
Run Code Online (Sandbox Code Playgroud)

format long我得到的更糟糕的是:

roots([1 -9 27 -27])

ans =

  3.000019414068325 + 0.000000000000000i
  2.999990292965843 + 0.000016813349886i
  2.999990292965843 - 0.000016813349886i
Run Code Online (Sandbox Code Playgroud)

如何正确计算多项式的根?

matlab polynomials

7
推荐指数
2
解决办法
397
查看次数

如何根据sympy中的其他表达式重写表达式

编辑:我不是问如何用给定的变量来解决方程式(如在这个假定的重复问题中),而是如何用问题中指定的另一个表示表达式.我认为这是一个具有误导性标题的"重复"问题.

我是SymPy的新手.我有一个表达,一旦表达为另一个表达式,应该变得非常好.问题是我不知道如何"强迫"用另一个表达原始表达.

这是一个基本的例子:

import sympy as sp
sp.init_printing(use_unicode=True)
a,b,c =  sp.symbols('a b c')
A = a+b+c
B = a+c
C = A.subs(a+c,B) #  Expected/wanted: C = B+b
C
Run Code Online (Sandbox Code Playgroud)

C方程

A.rewrite(B)
Run Code Online (Sandbox Code Playgroud)

错误信息

A和B可能是相当复杂的表达.作为参考,这是我的实际情况:

import sympy as sp
sp.init_printing(use_unicode=True)
t, w, r = sp.symbols('t w r')
S = sp.Function('S')(t)
V = (S-w*(1+r)**t)/(((1+r)**t)-1)
V
Run Code Online (Sandbox Code Playgroud)

V方程

St = -(r + 1)**t*(w - S)*sp.log(r + 1)/((r + 1)**t - 1)
St 
Run Code Online (Sandbox Code Playgroud)

St方程式

一旦我按照V语言编写St,我应该能够简化以获得公正

St = rS(t)+ rV

但我无法在SymPy中做到这一点.

sympy polynomials

7
推荐指数
1
解决办法
1000
查看次数

用sklearn的PolynomialFeatures无法理解

在sklearn的Polynomial Features中需要帮助.它对一个功能很有效,但每当我添加多个功能时,除了提升到度数的值之外,它还会在数组中输出一些值.例如:对于这个数组,

X=np.array([[230.1,37.8,69.2]])
Run Code Online (Sandbox Code Playgroud)

当我尝试

X_poly=poly.fit_transform(X)
Run Code Online (Sandbox Code Playgroud)

它输出

[[ 1.00000000e+00 2.30100000e+02 3.78000000e+01 6.92000000e+01
5.29460100e+04 8.69778000e+03 1.59229200e+04 1.42884000e+03
2.61576000e+03 4.78864000e+03]]
Run Code Online (Sandbox Code Playgroud)

这是8.69778000e+03,1.59229200e+04,2.61576000e+03什么?

python machine-learning scikit-learn polynomials

7
推荐指数
3
解决办法
6494
查看次数

定点 Log2 近似

我已经使用查找表和低阶多项式近似实现了定点 log2 函数,但对整个 32 位定点范围 [-1,+1) 的精度不太满意。输入格式为s0.31,输出格式为s15.16。

我在这里发布这个问题,以便其他用户可以发布他的答案(一些评论在另一个线程中交换,但他们更喜欢在单独的线程中提供全面的答案)。欢迎任何其他答案,如果您能提供算法及其实现的一些速度与准确性的详细信息,我将不胜感激。

谢谢。

logarithm fixed-point polynomials

7
推荐指数
1
解决办法
4409
查看次数

多项式的天真评估如何不准确?

在此Code Review答案中:

https://codereview.stackexchange.com/a/59405/11633

我找到了以下内容(嵌套引用!):

让我引用精彩的C++数字食谱书(但也适用)

我们假设你知道永远不会以这种方式评估多项式:

p=c[0]+c[1]*x+c[2]*x*x+c[3]*x*x*x+c[4]*x*x*x*x;
Run Code Online (Sandbox Code Playgroud)

或者(甚至更糟!),

p=c[0]+c[1]*x+c[2]*pow(x,2.0)+c[3]*pow(x,3.0)+c[4]*pow(x,4.0);
Run Code Online (Sandbox Code Playgroud)

来(计算机)革命,所有被认定犯有此类犯罪行为的人将被即决处决,他们的计划将不会!

(您可以在分析索引中找到您的版本中的页面,在"puns,particullary bad"条目下.我喜欢这本书.)

不这样做有两个原因:准确性和性能.评估多项式的​​正确方法是这样的:

-t * (0.319381530  +  t * (-0.356563782 + t * (1.781477937 + t * (-1.821255978 + 1.330274429 * t))))
Run Code Online (Sandbox Code Playgroud)

我可以看到以任何沮丧的方式实施它的严重性能损失,但不是精确度惩罚.准确性有什么不好?

我找到了这本书,但在引用位的任何地方都找不到这些信息.

language-agnostic polynomial-math polynomials

6
推荐指数
1
解决办法
230
查看次数

在Sympy中收集表达式的相似术语

我目前正在处理多个变量的函数,需要收集类似的术语以尝试简化表达式。

说表达式写成如下:

x = sympy.Symbol('x')
y = sympy.Symbol('y')
k = sympy.Symbol('k')
a = sympy.Symbol('a')

z = k*(y**2*(a + x) + (a + x)**3/3) - k((2*k*y*(a + x)*(n - 1)*(-k*(y**2*(-a + x) + (-a + x)**3/3) + k*(y**2*(a + x) + (a + x)**3/3)) + y)**2*(-a + k*(n - 1)*(y**2 + (a + x)**2)*(-k*(y**2*(-a + x)))))
zEx = z.expand()
print type(z)
print type(zEx)
Run Code Online (Sandbox Code Playgroud)

编辑:格式化以增加清晰度并更改表达式 z 以使问题更容易理解。

Sayz包含很多术语,需要通过眼睛筛选它们。并选择适当的条款,将花费不令人满意的时间。

我想收集所有的条款只有一个的** 1倍数。我不关心 a 的二次或更高次幂,也不关心不包含 a 的项。

的类型zzEx …

python math sympy python-2.7 polynomials

6
推荐指数
1
解决办法
5877
查看次数

numpy polynomial.Polynomial.fit() 给出的系数与 polynomial.polyfit() 不同

我不明白为什么polynomial.Polynomial.fit()给出的系数与预期系数非常不同:

import numpy as np

x = np.linspace(0, 10, 50)
y = x**2 + 5 * x + 10

print(np.polyfit(x, y, 2))
print(np.polynomial.polynomial.polyfit(x, y, 2))
print(np.polynomial.polynomial.Polynomial.fit(x, y, 2))
Run Code Online (Sandbox Code Playgroud)

给出:

import numpy as np

x = np.linspace(0, 10, 50)
y = x**2 + 5 * x + 10

print(np.polyfit(x, y, 2))
print(np.polynomial.polynomial.polyfit(x, y, 2))
print(np.polynomial.polynomial.Polynomial.fit(x, y, 2))
Run Code Online (Sandbox Code Playgroud)

前两个结果都可以,感谢这个答案,我明白为什么两个数组的顺序相反。

但是,我不明白第三个结果的含义。尽管我以这种方式得到的多项式似乎给出了正确的预测值,但系数看起来是错误的。

python numpy curve-fitting polynomials

6
推荐指数
1
解决办法
3029
查看次数

如何创建具有浮点系数的多项式环 Julia

我想创建一个具有这样的浮点系数的多项式环。我可以使用整数创建,但是浮点数不起作用。

using Oscar

S, (a,b,c,d) = PolynomialRing(QQ,["a","b","c","d"])
RR = AbstractAlgebra.RealField
s1 = S( 8*a - RR(0.51234)*a*(1+RR(1/2)*a+RR(1/3)*b+RR(1/4)*c) - 8)
s2 = S( 8*b - RR(0.51234)*b*(1+RR(2/3)*a+RR(2/4)*b+RR(2/5)*c) - 8)
s3 = S( 8*c - RR(0.51234)*c*(1+RR(3/4)*a+RR(3/5)*b+RR(3/6)*c) - 8)
s4 = S( 8*d - RR(0.51234)*d*(1+RR(4/5)*a+RR(4/6)*b+RR(4/7)*c) - 8)

Run Code Online (Sandbox Code Playgroud)

它给了我这个错误。我怎样才能创建这样的多项式。

ERROR: LoadError: MethodError: no method matching (::FmpqMPolyRing)(::BigFloat)
Closest candidates are:
  (::FmpqMPolyRing)() at ~/.julia/packages/Nemo/5CDLD/src/flint/fmpq_mpoly.jl:1063
  (::AbstractAlgebra.Ring)(::Singular.n_RingElem{Singular.RingElemWrapper{S, T}}) where {S, T} at ~/.julia/packages/Singular/uG7uo/src/number/n_unknown.jl:358
  (::AbstractAlgebra.Ring)(::Union{Singular.n_FieldElem{T}, Singular.n_RingElem{T}} where T) at ~/.julia/packages/Oscar/iRpOQ/src/Rings/mpoly.jl:736
  ...
Stacktrace:
 [1] *(x::BigFloat, y::fmpq_mpoly)
   @ AbstractAlgebra ~/.julia/packages/AbstractAlgebra/mQIYL/src/Rings.jl:84
 [2] top-level scope …
Run Code Online (Sandbox Code Playgroud)

math abstract-algebra julia polynomials coefficients

6
推荐指数
1
解决办法
189
查看次数