На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > решение дифференциальных уравнений python
      Доброго времени суток!))
      Разбирался с scipy и numpy, понял как решать системы дифференциальных уравнений , если у нас есть фиксированное количество уравнений(например,2)
      Когда попытался решить уравнение n*n(задавая матрицу коэффициентов А), у меня выскочила ошибка
      Вот код:
      ExpandedWrap disabled
        from scipy import integrate
        import numpy as np
         
        A=np.array([[3,2],[1,-1]])
         
        def func(t,x):
            f=np.array(A*x)
         
         
            return f
         
         
        y0=np.array([0,1])
        t=np.linspace(0,1,10)
        result = integrate.odeint(func,y0,t)
         
        print result




      Вот ошибка:

      /usr/bin/python2.7 /home/user/PycharmProjects/ode/ode.py
      lsoda-- warning..internal t (=r1) and h (=r2) are
      ValueError: object too deep for desired array
      such that in the machine, t + h = t on the next step
      (h = step size). solver will continue anyway
      odepack.error: Result from function call is not a proper array of floats.
      in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00
      intdy-- t (=r1) illegal
      ValueError: object too deep for desired array
      in above message, r1 = 0.1111111111111D+00
      t not in interval tcur - hu (= r1) to tcur (=r2)
      odepack.error: Result from function call is not a proper array of floats.
      in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00
      intdy-- t (=r1) illegal
      in above message, r1 = 0.2222222222222D+00
      t not in interval tcur - hu (= r1) to tcur (=r2)
      in above, r1 = 0.0000000000000D+00 r2 = 0.0000000000000D+00
      lsoda-- trouble from intdy. itask = i1, tout = r1
      in above message, i1 = 1
      in above message, r1 = 0.2222222222222D+00
      Illegal input detected (internal error).



      Может, кто-нибудь знает, в чем проблема?
      Сообщение отредактировано: mixxx92 -
        Матричное умножение записывается не так, как у тебя
        Да и возврат результата осуществляется не так.
        Надо писать не
        ExpandedWrap disabled
          def func(t,x):
              f=np.array(A*x)
        а
        ExpandedWrap disabled
          def func(t,x):
              return np.dot(A, x)
              return A.dot(x) # Другой вариант умножения
        Сообщение отредактировано: amk -
          Я так тоже пробовал, никакой разницы. Все тоже самое

          Добавлено
          Цитата amk @
          Надо писать не
          ExpandedWrap disabled
            def func(t,x):
                f=np.array(A*x)
          а
          ExpandedWrap disabled
            def func(t,x):
                return np.dot(A, x)
                return A.dot(x) # Другой вариант умножения
          Сообщение отредактировано: mixxx92 -
            Ещё надо местами параметры функции func поменять. Не
            ExpandedWrap disabled
              def func(t,x):
            , а
            ExpandedWrap disabled
              def func(x,t):

            В питоне 3.4 после этого нормально выполняется

            Надо внимательнее описание библиотеки читать.
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0285 ]   [ 16 queries used ]   [ Generated: 28.03.24, 11:13 GMT ]