Есть ли способ интегрировать каждую запись матрицы и вернуть решения в виде другой матрицы? - PullRequest
0 голосов
/ 09 июля 2019

Я хочу интегрировать матрицу 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, чтобы я мог взять обратное и использовать его в том, что я на самом деле пытаюсь решить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...