Arhn - архитектура программирования

Возникли проблемы при использовании scipy.integrate.odeint с python

Я пытался использовать odeint для решения проблемы. Мой код выглядит следующим образом:

import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint

eta=1.24e-9/2
def fun(x):
    f=1.05e-8*eta*x**(1.5)*np.exp(13.6/x)
    return (np.sqrt(1.+4*f)-1)/2./f
x=np.arange(0,1,0.001)
y=odeint(fun,x,0)[0]
plt.plot(x,y)
plt.plot(x,x)
plt.show()

Две кривые одинаковы, что явно неверно. Если я нарисую функцию, она будет выглядеть как ступенчатая функция, которая очень мала примерно до 0,3 и экспоненциально приближается к 1. Можете ли вы помочь мне понять, что с ней не так? Благодарю вас!

14.04.2013

Ответы:


1

В вашем коде есть несколько проблем, большинство из которых вы сможете решить самостоятельно, если прочитаете строку документации для odeint более внимательно.

Для начала приведем простой пример решения скалярного дифференциального уравнения с помощью odeint. Вместо того, чтобы пытаться понять (и, возможно, отладить) вашу функцию, я буду использовать очень простое уравнение. Я решу уравнение dy/dt = a * y с начальным условием y(0) = 100. Как только этот пример заработает, вы можете изменить fun, чтобы решить свою проблему.

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt


def fun(y, t, a):
    """Define the right-hand side of equation dy/dt = a*y""" 
    f = a * y
    return f


# Initial condition
y0 = 100.0

# Times at which the solution is to be computed.
t = np.linspace(0, 1, 51)

# Parameter value to use in `fun`.
a = -2.5

# Solve the equation.
y = odeint(fun, y0, t, args=(a,))

# Plot the solution.  `odeint` is generally used to solve a system
# of equations, so it returns an array with shape (len(t), len(y0)).
# In this case, len(y0) is 1, so y[:,0] gives us the solution.
plt.plot(t, y[:,0])
plt.xlabel('t')
plt.ylabel('y')
plt.show()

Вот сюжет:

график, созданный на примере

Более сложные примеры использования odeint можно найти в поваренной книге SciPy (прокрутите вниз до пункта с пометкой " Обыкновенные дифференциальные уравнения»).

15.04.2013
  • Спасибо. Раньше я использовал odeint несколько раз для решения очень сложной задачи. Все это время я копировал некоторые коды и корректировал их, и это работало хорошо. На этот раз проблема проста, и я хочу написать их сам с самого начала. В итоге мои дурацкие коды там. 16.04.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..