2016-08-02 9 views
-1

Надеюсь, мой заголовок понятен. Я делаю университетский проект о том, как хлор (для целей дезинфекции) со временем исчезает в морской воде. Понятно, что происходит быстрый начальный распад, а затем он замедляется, что приводит к двум скоростям распада, но это связано с тем же общим экспоненциальным распадом. Раньше это было сделано, но я рассчитываю скорость для морской воды вокруг моего конкретного города.Две скорости затухания для одного экспоненциального графа распада

Я новичок в python и только начал изучать его для этого проекта. Другие ответы на экспоненциальный распад на этом сайте касаются только одной скорости затухания вместо двух, которые мне нужны.

У меня есть значения и сделаны графики, поэтому у меня есть значения x и y. Форма, в которой мне нужен ответ, равна c (t) = c (a * exp^(- mt)) + ((1-a) * exp^(- nt))
Где m и n - ставки , t - время, c - начальная концентрация, a - только пропорциональные константы. М-скорость - это быстрая начальная скорость, а скорость n медленнее. Значение c (t) в конечном итоге достигнет нуля или приблизится к нему.

Данные в формате ASCII/TXT, или я мог бы просто ввести его как х = np.array ...

Если это не возможно сделать это за один раз, то это было бы возможно если я разделяю разделы, чтобы получить две ставки отдельно? то есть я вводил только данные, необходимые для m-скорости, а затем вычислял для n скорости.

Я видел вышеупомянутую форму, которая мне нужна для научных статей, но я не уверен, как они это сделали.

Большое спасибо заранее всем, что помогает

+1

Hi Matt, Для меня лично ваш вопрос не совсем ясен. Я понимаю, что у вас есть функция 'c (t)', но мне непонятно, чего вы пытаетесь достичь. Вы хотите построить эту функцию или решить ее значение в определенный момент? Возможно, вам будет полезно узнать, что вы хотите сделать по приведенным вами примерам (другие ответы на этом сайте, которые вы прочитали). –

+0

Привет @Patrik H. Я хотел бы иметь возможность решать для значений в определенных точках. Поэтому для этого мне нужны ставки «m» и «n», а также «a». [Графики, которые я сделал на основе экспериментов до сих пор, не идеальны, но они действительно напоминают экспоненциальные распады, поэтому я предполагаю, что python будет рассматривать их как идеальные экспоненциальные распады]. В других примерах они начинают ** определять ** функцию с переменными (t, a, m, n), но затем ** return ** line (пример = a * np.exp (-m * t) + n) имеет только один экспоненциальный член. Ответ Алекс может помочь? – Matt

+0

Означает ли это, что Алекс отвечает на ваш вопрос или есть что-то еще, что вам нужно? –

ответ

0

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

Простой способ сделать это - использовать функцию scipy.optimize.curve_fit. Во-первых, определить функцию, которую вы хотите, чтобы соответствовать

import numpy as np 
    import scipy.optimize 
    def my_exp(t,a,m,n): 
     return a*np.exp(-m*t) + (1-a)*np.exp(-n*t) 

и передать функции вместе с вашими данными, начального предположения относительно того, что параметры могут быть и т.д. функции curve_fit.

parameters, their_covariance = scipy.optimize.curve_fit(my_exp, xdata, ydata) 

Подсказка: Вы можете прочитать, что функция делает подробно по телефону help(scipy.optimize.curve_fit) в оболочке Python.

+0

Спасибо Алекс. Это похоже на правильный путь – Matt

+0

Итак, отвечает ли он на ваш вопрос? Если нет, будьте более конкретны в том, что вы ищете. Вы пишете, что вы ищете функцию c (t) = (некоторая экспоненциальная); приведенный выше код определяет такую ​​функцию, а затем помогает найти лучшие параметры для 'a',' m' и 'n'. Что еще тебе нужно? – Alex

+0

Да, это был ответ, который я искал. Я просто не понял, что все, что мне нужно было сделать, это проверить значения «параметров» (popt в моем коде), потому что значения были противоположны тому, что я ожидал, и я предположил, что они были неправы. Это следующая проблема: / – Matt