我正在研究稀疏邻接矩阵,其中大多数单元是零和一些在这里和那里,两个单元之间的每个关系具有可能非常长的多项式描述并且他们的分析是手动耗时的.我的导师根据Gröbner基础建议纯粹的代数方法,但在继续之前,我想从纯粹的计算机科学和编程角度了解如何分析稀疏邻接矩阵?是否存在一些数据挖掘工具来分析它们?
我目前正在处理多个变量的函数,需要收集类似的术语以尝试简化表达式。
说表达式写成如下:
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 的项。
的类型z并zEx …
我有一个数据数组,其中某个整数N的维度为(N,3),它指定了3D空间中粒子的轨迹,即每个行条目是粒子的(x,y,z)坐标.这个轨迹是平滑且简单的,我希望能够将多项式拟合到这个数据.
我可以使用np.polyfit只用(x,y)坐标来做到这一点:
import numpy as np
#Load the data
some_file = 'import_file.txt'
data = np.loadtxt(some_file)
x = data[:,0]
y = data[:,1]
#Fit a 4th order polynomial
fit = np.polyfit(x,y,4)
Run Code Online (Sandbox Code Playgroud)
这给了我多项式的系数,没有问题.
我如何将其扩展到我需要描述x,y,z坐标的多项式的情况?
在下面的曲线(蓝线)中,我试图检测应该位于x = 2.5附近的"膝盖/肘部"
这是我正在使用的一组值:
x = {-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8 ,9,10}
y = {0,10,20,30,40,50,60,70,80,90,100,107,122,145,176,215,262,317,380,451,530,617}
我已经尝试了Kneedle算法和图形曲率的正式定义(带符号曲率).我对Kneedle算法的问题是在实时应用程序(嵌入式系统)中我不知道哪个是y轴的最大值,所以我不能正确地对点进行归一化,也找不到斜率值适用于所有情况.当使用图形曲率的形式定义时,我尝试用5阶多项式(绿线)拟合曲线,然后得到导数的值来计算曲率.然而,该方法在x = -2附近找到曲率,因为由于多项式,该点周围存在曲率.
有人可以建议我检测膝盖/肘部的方法吗?
我不明白为什么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)
前两个结果都可以,感谢这个答案,我明白为什么两个数组的顺序相反。
但是,我不明白第三个结果的含义。尽管我以这种方式得到的多项式似乎给出了正确的预测值,但系数看起来是错误的。
该poly函数将多项式的根作为输入并返回多项式的系数。底层算法是什么?
有没有更好的方法从根计算多项式的系数?
我在这里阅读了如何使用多项式。但是当我尝试这个时
R = QQ['t']
poly = (t+1) * (t+2); poly
Run Code Online (Sandbox Code Playgroud)
Sage 给我以下错误:
NameError: name 't' is not defined
Run Code Online (Sandbox Code Playgroud)
我能做什么呢?
要测试一个连续函数是否有根,在给定区间 [x0, x1] 中是否有一个单根相对容易:根据中值定理,当 x0 处的函数值的符号与 x1 处的符号相反时,有 (在至少)一个根。
例如,给定一个二次函数:
\n\ng(x): a*x**2 + b*x + c = 0\nRun Code Online (Sandbox Code Playgroud)\n\n测试看起来像:
\n\nif sign of g(x0) is opposite of sign of g(x1)\nthen return true\nelse return false\nRun Code Online (Sandbox Code Playgroud)\n\n对于多变量情况,有Poincar\xc3\xa9\xe2\x80\x93Miranda 定理,但我在阅读链接的文章时很难正确实现测试。
\n\n给定两个二次二元函数:
\n\ng1(x, y): a1*x**2 + b1*y**2 + c1*x*y + d1*x + e1*y + f1 = 0\ng2(x, y): a2*x**2 + b2*y**2 + c2*x*y + d2*x + e2*y + f2 = 0\nRun Code Online (Sandbox Code Playgroud)\n\n和一个矩形区域 …
我对 python 很陌生,所以如果这有一个简单的修复,请原谅我。我正在尝试使用 sympy 求解具有复系数的多项式。我发现如果 k '太复杂',我会得到一个空白输出......我不太确定如何定义这意味着什么。作为第一个例子,考虑这个具有复系数的四阶多项式,
In [424]: solve(k**4+ 2*I,k)
Out[424]:
[-2**(1/4)*sqrt(-sqrt(2)/4 + 1/2) - 2**(1/4)*I*sqrt(sqrt(2)/4 + 1/2),
2**(1/4)*sqrt(-sqrt(2)/4 + 1/2) + 2**(1/4)*I*sqrt(sqrt(2)/4 + 1/2),
-2**(1/4)*sqrt(sqrt(2)/4 + 1/2) + 2**(1/4)*I*sqrt(-sqrt(2)/4 + 1/2),
2**(1/4)*sqrt(sqrt(2)/4 + 1/2) - 2**(1/4)*I*sqrt(-sqrt(2)/4 + 1/2)]
Run Code Online (Sandbox Code Playgroud)
获得输出没有问题。不过,我有兴趣解决类似的问题,
In [427]: solve(k**6 + 3*I*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1,k)
Out[427]: []
Run Code Online (Sandbox Code Playgroud)
这要复杂得多,并返回一个空列表。但是,我可以使用枫树来解决这个问题,例如。另外,请注意,在删除复系数时,没有问题,
In [434]: solve(k**6 + 3*k**5 - 2*k**4 + 9*k**3 - 4*k**2 + k - 1,k)
Out[434]:
[CRootOf(k**6 + 3*k**5 - 2*k**4 …Run Code Online (Sandbox Code Playgroud) 我正在 sympy 中处理非常大的多项式,我需要将它们以展开形式来查找某些项和系数。然而,这些多项式的展开需要很长时间。是否有一种快速的方法来展开多项式或以不同的方式获得某些项和系数?
我可以很好地找到展开多项式中的项,但展开多项式的时间是限制因素。
多项式非常大,例如:
(x + y + z + a + b + c) ** 24
我尝试过 sympy.expand() 和 Add.as_poly()。并发现 Add.as_poly() 速度更快,但仍然很慢。
my_poly = (x + y + z + a + b + c) ** 24
# expand using Add.as_poly()
my_poly.as_poly()
# this takes multiple minutes to execute
Run Code Online (Sandbox Code Playgroud)
我希望能够搜索扩展多项式中的项以查找包含其他项的项:(
伪代码)是 x**3*y z a**2 包含在 500*x**5*y* 中*2*z*a**4*b*c**2
如果包含它,我想检索该项的系数。
我希望加快扩展速度,或者使用不同的方法在更短的时间内找到所需的术语。
polynomials ×10
python ×6
math ×4
numpy ×3
sympy ×3
algorithm ×2
analysis ×1
curve ×1
data-mining ×1
matlab ×1
matrix ×1
performance ×1
python-2.7 ×1
python-3.x ×1
sage ×1