我们如何numpy.polynomial.legendre.leggauss在除了[-1, 1]?之外的时间间隔内使用NumPy包?
以下示例与scipy.integrate.quad间隔中的Gauss-Legendre方法进行比较[-1, 1].
import numpy as np
from scipy import integrate
# Define function and interval
a = -1.
b = 1.
f = lambda x: np.cos(x)
# Gauss-Legendre (default interval is [-1, 1])
deg = 6
x, w = np.polynomial.legendre.leggauss(deg)
gauss = sum(w * f(x))
# For comparison
quad, quad_err = integrate.quad(f, a, b)
print 'The QUADPACK solution: {0:.12} with error: {1:.12}'.format(quad, quad_err)
print 'Gauss-Legendre solution: {0:.12}'.format(gauss)
print 'Difference between …Run Code Online (Sandbox Code Playgroud) 编辑:我找到了一个可行的解决方案,但我仍然希望对这里发生的事情有更多的解释:
from scipy import optimize
from sympy import lambdify, DeferredVector
v = DeferredVector('v')
f_expr = (v[0] ** 2 + v[1] ** 2)
f = lambdify(v, f_expr, 'numpy')
zero = optimize.root(f, x0=[0, 0], method='krylov')
zero
Run Code Online (Sandbox Code Playgroud)
原始问题:
下面我们有M由表达式f1(x1, x2)和组成的矩阵f2(x1, x2)。我想知道x1以及x2什么时候的价值M = [f1, f2] = [0, 0]。
下面的代码有效,去掉了被注释掉的根查找行。
import numpy as np
import sympy as sp
import matplotlib.pyplot as plt
from scipy import optimize
from sympy import init_printing, symbols, lambdify, …Run Code Online (Sandbox Code Playgroud) 这种慢速代码可以通过改变结构来改进,但有时难以解决.我认为,原因来自存储在数组中的类.我听说内存视图用于链接python和c数组,但我还是很新(只有一些python知识).
有没有办法有效地做到以下几点?
一个示例类:
cdef class ClassWithAdditionFunction:
cdef double value
def __init__(self, double value):
self.value = value
cpdef add_one(self):
self.value += 1
Run Code Online (Sandbox Code Playgroud)
功能缓慢:
cdef unsigned long int i, ii
cdef unsigned long int loops = pow(10, 8)
cdef double value
addition_classes = np.array([None] * 10)
for i in range(len(addition_classes)):
addition_classes[i] = ClassWithAdditionFunction(value=0)
for i in range(loops/10):
for ii in range(10):
addition_classes[ii].add_one()
Run Code Online (Sandbox Code Playgroud)
非常感谢您的任何建议!
python ×3
numpy ×2
scipy ×2
cython ×1
function ×1
matplotlib ×1
optimization ×1
performance ×1
sympy ×1