Я хочу интегрировать матрицу 3x3 и заставить ее вернуть решение в виде матрицы 3x3, но я не уверен, возможно ли это в python. Есть ли команда, которую я могу использовать? Если нет, то должен ли я установить какой-то цикл for (мог бы также помочь с этим, если это так)?
Я пробовал использовать другие предложения, такие как vectorize (integrate.quad) (integrandtemp, 0, 10) и vectorize (quad) (integrandtemp, 0, 10), но я получаю ту же ошибку, которую получаю: «только Массивы размера 1 могут быть преобразованы в скаляры Python ".
def integrandtemp(s):
K = 17.5
r = 0.7
x0 = 0.1
t = 5
x = K/(1+((K/x0)-1)*np.exp(-r*s))
dxdK = (x0*x0-x0*x0*np.exp(-r*s))/((x0+K*np.exp(-r*s)-x0*np.exp(-r*s))**2)
dxdr = (K*K*x0*s*np.exp(-r*s)-K*x0*x0*s*np.exp(-r*s))/((x0+K*np.exp(-r*s)-x0*np.exp(-r*s))**2)
dxdx0 = (K*x0+K*K*np.exp(-r*s)-K*x0*np.exp(-r*s)-K*x0+K*x0*np.exp(-r*s))/((x0+K*np.exp(-r*s)-x0*np.exp(-r*s))**2)
M = [dxdK, dxdr, dxdx0]
M = np.array([M])
print(M)
transpose = M.T
print(transpose)
var = 0.16
print(transpose@M)
return (1/var)*transpose@M
F = vectorize(integrate.quad)(integrandtemp, 0, 10)
F_inv = inv(F)
Я получаю это сообщение об ошибке:
TypeError Traceback (most recent call last)
<ipython-input-106-a2757b67abc5> in <module>
34 return (1/var)*transpose@M
35
---> 36 F = vectorize(integrate.quad)(integrandtemp, 0, 10)
37 F_inv = inv(F)
38
~/anaconda3/lib/python3.7/site-packages/numpy/lib/function_base.py in __call__(self, *args, **kwargs)
1970 vargs.extend([kwargs[_n] for _n in names])
1971
-> 1972 return self._vectorize_call(func=func, args=vargs)
1973
1974 def _get_ufunc_and_otypes(self, func, args):
~/anaconda3/lib/python3.7/site-packages/numpy/lib/function_base.py in _vectorize_call(self, func, args)
2040 res = func()
2041 else:
-> 2042 ufunc, otypes = self._get_ufunc_and_otypes(func=func, args=args)
2043
2044 # Convert args to object arrays first
~/anaconda3/lib/python3.7/site-packages/numpy/lib/function_base.py in _get_ufunc_and_otypes(self, func, args)
2000
2001 inputs = [arg.flat[0] for arg in args]
-> 2002 outputs = func(*inputs)
2003
2004 # Performance note: profiling indicates that -- for simple
~/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py in quad(func, a, b, args, full_output, epsabs, epsrel, limit, points, weight, wvar, wopts, maxp1, limlst)
339 if weight is None:
340 retval = _quad(func, a, b, args, full_output, epsabs, epsrel, limit,
--> 341 points)
342 else:
343 retval = _quad_weight(func, a, b, args, full_output, epsabs, epsrel,
~/anaconda3/lib/python3.7/site-packages/scipy/integrate/quadpack.py in _quad(func, a, b, args, full_output, epsabs, epsrel, limit, points)
446 if points is None:
447 if infbounds == 0:
--> 448 return _quadpack._qagse(func,a,b,args,full_output,epsabs,epsrel,limit)
449 else:
450 return _quadpack._qagie(func,bound,infbounds,args,full_output,epsabs,epsrel,limit)
TypeError: only size-1 arrays can be converted to Python scalars
Мне нужно вернуть еще одну матрицу 3х3, чтобы я мог взять обратное и использовать его в том, что я на самом деле пытаюсь решить.