Реализация закона о сломанной власти как соответствующая функция в Origin

Добрый день, я пытаюсь использовать конструктор функций в origin (OriginLab), чтобы создать новую функцию для соответствия с нарушенным степенным законом ( http://en.wikipedia.org/wiki/Power_law)

Итак, я думаю, что я получил фактическую часть функции вниз. Для этого я использовал

if(x<xc)
    y =x^a1;
if(x>xc)
    y = x^(a1-a2)*x^a2;
if(x==xc)
    y = 0;

Где xc, a1 и a2 - параметры. Тем не менее, я дошел до того, что вам нужно выбрать кучу вещей (диапазоны параметров, скрипт, который вы запускаете, чтобы угадать начальные значения и т. Д.), И я понятия не имею, что туда вставить. У кого-нибудь есть опыт с этим?

1 ответ

Решение

Хотя вопрос требует предложения, используя OriginLab этот использует Python, поскольку OP согласился попробовать!

Метод подбора кривой, существующий в Python, взят из пакета Scipy (curve_fit). Все пакеты Python для Windows можно скачать в один миг с этого сайта здесь!

При выполнении подбора кривой первое, что нужно знать, это уравнение подбора. Как вы уже знаете, уравнение нарушенного степенного закона, которое будет соответствовать вашим данным, вы готовы к работе.

Код для подгонки данных примера, давайте их назовем x and y, Здесь подходящие параметры a1 and a2,

import numpy as np # This is the Numpy module
from scipy.optimize import curve_fit # The module that contains the curve_fit routine
import matplotlib.pyplot as plt # This is the matplotlib module which we use for plotting the result

""" Below is the function that returns the final y according to the conditions """
def fitfunc(x,a1,a2):
    y1 = (x**(a1) )[x<xc]
    y2 = (x**(a1-a2) )[x>xc]
    y3 = (0)[x==xc]
    y = np.concatenate((y1,y2,y3))
    return y

x = Your x data here
y = Your y data here

""" In the above code, we have imported 3 modules, namely Numpy, Scipy and matplotlib """

popt,pcov = curve_fit(fitfunc,x,y,p0=(10.0,1.0)) #here we provide random initial parameters a1,a2

a1 = popt[0] 
a2 = popt[1]
residuals = y - fitfunc(x,a1,a2)
chi-sq = sum( (residuals**2)/fitfunc(x,a1,a2) ) # This is the chi-square for your fitted curve

""" Now if you need to plot, perform the code below """
curvey = fitfunc(x,a1,a2) # This is your y axis fit-line

plt.plot(x, curvey, 'red', label='The best-fit line')
plt.scatter(x,y, c='b',label='The data points')
plt.legend(loc='best')
plt.show()

Просто вставьте свои данные здесь, и это должно работать просто отлично! Если необходимо, для получения более подробной информации о том, как работает код, ПРОВЕРЬТЕ НА ЭТОМ ВЕБ-САЙТЕ. Я не смог найти подходящий пример для вашей функции соответствия, поэтому x и y были оставлены пустыми. Но как только у вас есть ваши данные, просто подключите их!

Другие вопросы по тегам