سایت شخصی صادق سلمانی

ولتست، بهینه‌سازی تولید و عملکرد چاه، یادگیری ماشین، پایتون، چاه‌های هوشمند، تحلیل داده، فرازآوری مصنوعی

سایت شخصی صادق سلمانی

ولتست، بهینه‌سازی تولید و عملکرد چاه، یادگیری ماشین، پایتون، چاه‌های هوشمند، تحلیل داده، فرازآوری مصنوعی

سایت شخصی صادق سلمانی

مطالبی که در این سایت نوشته می‌شود به منزله تخصص من در آن‌ها نمی‌باشد، بلکه صرفاً آغازی است در مسیری طولانی برای یادگیری بهتر و عمیق‌تر.

آخرین نظرات

۲ مطلب با کلمه‌ی کلیدی «curve fit» ثبت شده است

یکی از موضوعات مهم ریاضیات و آمار که کاربرد زیادی در رشته‌های مهندسی دارد، مبحث برازش منحنی (Curve Fitting) می‌باشد. 

هدف ما در برازش منحنی آن است که بهترین خط یا منحنی ممکن را از داده‌های موجود عبور دهیم. برای آنکه متوجه شویم که بهترین چندجمله‌ای یا منحنی ممکن را انتخاب کرده‌ایم، باید مجموع مربعات باقمانده‌ها حداقل باشد:


.The most common choice is to minimize the sum of squared residuals


معرفی چند تابع:

1- z = polyfit (x, y, n) 

این تابع، مقادیر x داده و مقادیر y داده‌ها را دریافت می‌کند و سپس یک منحنی درجه n ام از داده‌ها عبور می‌دهد به نحوی که بهترین انطباق ممکن را داشته باشد (حداقل مربعات). 

2- p = poly1d (z)

یک تابع چند جمله‌ای از ضرایب می‌سازد.



بررسی یک مثال از مبحث برازش منحنی:

from numpy import *

x = array ([0.0 , 1.0 , 2.0 , 3.0 , 4.0 , 5.0])

y = array ([0.0 , 0.8 , 0.9 , 0.1 , -0.8 , -1.0])

z = polyfit (x, y, 3)

p = poly1d (z)

xs = [ 0.1 * i for i in range (50)]

ys = [p ( x ) for x in xs]


from pylab import *

plot (x, y, 'o', label='data')

plot (xs, ys, label='fitted curve')

ylabel ('y')

xlabel ('x')

show ()


۰ نظر ۰۴ شهریور ۹۶ ، ۰۸:۳۶
صادق سلمانی

برای مطالعه مبحث «چندجمله‌ای‌های حداقل مربعات» به کتاب «کاربرد ریاضیات در مهندسی شیمی - روش های عددی» که دکتر خراط نوشته اند مراجعه کنید. البته منابع مختلف دیگری هم در اینترنت موجود هست که به طور کامل توضیح داده اند. در کتاب دکتر خراط تمام روش های عددی و ریاضیاتی به طور مفصل و به همراه مثال توضیح داده شده اند که واقعا عالی هست.


مثال: از پنج نقطه داده شده در زیر یک سهمی از روش حداقل مجموع مربعات خطا بدست آورید:

(-2,4) , (-1,3) , (2,4) , (3,1) , (4,2)


import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit  # Use non-linear least squares to fit a function, f, to data.

xdata=np.array([-2,-1,2,3,4])  # fit this data with a function

ydata=np.array([4,3,4,1,2])


def func(x,p1,p2,p3):

    return p1*x**2+p2*x+p3   # I’d like to fit this function using nonlinear least squares.


popt,pcov=curve_fit(func,xdata,ydata,p0=(3,1,2))

print('parrameters=',popt)   # The variable popt contains the fit parameters


p1=popt[0]

p2=popt[1]

p3=popt[2]

residuals = func(xdata,p1,p2,p3)-ydata 

print('residuals=',residuals)


fres = sum(residuals**2)

print('fres=',fres)



xfit = np.linspace(-3,6)

yfit = func(xfit, popt[0], popt[1], popt[2])

plt.plot(xdata,ydata,'r.')

plt.plot(xfit,yfit,'b-') 

plt.show()

خروجی:

parrameters= [-0.06280788 -0.21305419  3.48275862]

residuals= [-0.34236453  0.63300493 -1.19458128  1.27832512 -0.37438424]

fres= 3.71921182266


منابع تکمیلی:

http://www.walkingrandomly.com/?p=5215

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

۰ نظر ۰۶ اسفند ۹۵ ، ۱۳:۴۷
صادق سلمانی