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

ولتست، یادگیری ماشین، پایتون، فرازآوری مصنوعی

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

ولتست، یادگیری ماشین، پایتون، فرازآوری مصنوعی

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

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

آخرین نظرات
  • ۱۶ خرداد ۹۸، ۰۰:۲۳ - محمد
    عالی
  • ۱۴ آذر ۹۷، ۱۸:۰۶ - خ
    عالی
  • ۸ آذر ۹۷، ۲۰:۰۷ - محمد علی
    احسنت

در مسائل مقدار اولیه، مقدار تابع در نقطه شروع داده می شود و با استفاده از روش های موجود مقدار آن را در سایر نقاط بدست می آوریم. در اینصورت منحنی تغییرات متغیر تابع بر حسب متغیر مستقل قابل رسم خواهد بود.

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

تذکر: برای مطالعه توضیحات بیشتر به کتاب «کاربرد ریاضیات در مهندسی شیمی - روش های عددی» نوشته دکتر خراط مراجعه کنید.

روش اویلر:


در اینجا قصد دارم به بررسی یک مثال به روش اویلر بپردازم.

مثال:

معادله دیفرانسیل زیر را با استفاده از روش اویلر و برای حالت h = 0.5 حل کنید و مقدار تابع را تا x = 3.5 محاسبه کنید.

حل با استفاده از زبان برنامه نویسی پایتون (کدنویسی در محیط Spyder):

import numpy as np

from matplotlib import pyplot as plt

x0=1

y0=1

xf=3.5

n=6

h=(xf-x0)/(n-1)

x=np.linspace(x0,xf,n)

y=np.zeros([n])

y[0]=y0

for i in range(1,n):

    y[i]=y[i-1]+h*x[i-1]*y[i-1]**(1/3)

for i in range(n):

    print(x[i],y[i])

plt.plot(x,y,'o')

plt.xlabel('value of x')

plt.ylabel('value of y')

plt.title('Approximate Solution with Euler Method')

plt.show()


نتایج:

1.0   1.0

1.5   1.5

2.0   2.35853568191

2.5   3.6896463079

3.0   5.62119172863

3.5   8.28825954375


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

قضیه از این قراره که این طرف با معدل بالا و تحصیل کرده در دانشگاه MIT و همچنین دارنده مدال طلای المپیاد ریاضی، در دانشکده پزشکی هاروارد قبول شده ولی توانایی پرداخت هزینه دانشگاه رو نداره و دنبال این هست که بتونه بورسیه دانشگاه را بگیره. از طرفی 76 نفر برای تصاحب این بورسیه در حال رقابت هستند که یکی از یکی بهتر و قوی تر است.

واقعا همین حالا یک سوالی از خودمان بپرسیم: 

آیا تخصص یا مهارت و یا ویژگی منحصر به فردی داریم تا بتوانیم دیگران را نسبت به خودمان قانع کنیم؟

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

در چند پست آتی قصد دارم که انتگرال‌گیری عددی به روش‌های مختلف را بررسی کنم. برای مطالعه توضیحات مربوط به این روش ها به کتاب کاربرد ریاضیات در مهندسی شیمی (دکتر خراط) مراجعه کنید. در این مطلب به کدنویسی انتگرال‌گیری عددی به روش ذوزنقه‌ای می پردازیم.


مثال:

# the function to be integrated

def func(x):

    return x**2

# define variables

a = 1.          # left boundary of area

b = 4.          # right boundary of area

dx = 1          # width of the trapezoids

# calculate the number of trapezoids

n = int((b - a) / dx)

# define the variable for area

Area = 0

# loop to calculate the area of each trapezoid and sum.

for i in range(1, n+1):

    #the x locations of the left and right side of each trapezpoid

    x0 = a+(i-1)*dx

    x1 = a+i*dx

    #the area of each trapezoid

    Ai = dx * (func(x0) + func(x1))/ 2.

    # cumulatively sum the areas

    Area = Area + Ai

#print out the result.

print ("Area = ", Area)

نتیجه:

Area = 21.5


یک نمونه کد دیگر برای انتگرال گیری عددی به روش ذوزنقه ای:

import numpy as np

x = np.linspace(1, 4, num=4)

y = x**2

I = np.trapz(y, x)

error = (I - 4)/4

print(I, error)

نتیجه:

I = 21.5

error = 4.375

۰ نظر ۰۸ اسفند ۹۵ ، ۱۱:۵۹
صادق سلمانی

در نرم افزار چاه آزمایی سفیر یک ماژولی هست به نام KIWI که مخفف عبارت Kappa intelligent well test interpretation هست. 

در این ماژول از هوش مصنوعی (Artificial Intelligence) استفاده میشه و به مفسر مدل های احتمالی را پیشنهاد میده و به ما برای پیدا کردن مدل و تخمین پارامترهای مخزن کمک میکنه. کیوی هیچ گونه اطلاعاتی در مورد زمین شناسی، ژئوفیزیک، تاریخچه میدان و غیره نداره و صرفاً بر اساس شکل نمودار مشتق فشار یک سری مدل هایی را پیشنهاد میده. بنابراین زیاد نمیشه بر روی مدل های پیشنهادی آن اتکا کرد و بیشتر جنبه آموزشی داره تا کاربردی و عملیاتی.

امروز به طور اتفاقی یک انیمیشن در آپارات دیدم تحت عنوان Kiwi . قصه این انیمیشن به این صورت هست که یک پرنده کوچک که بال نداره و اسمش هم کیوی هست، در آروزی پروازه. به همین جهت شروع میکنه و بر روی دامنه یک کوه تقریباً عمودی یک سری درختهایی را با میخ محکم میکنه و میره بالای کوه. در انتها که چندین درخت را به دامنه کوه میخکوب کرد و کارش تموم شد، یک عینک خلبانی را چشمانش میذاره و از بالای کوه میپره. اون به خیال خودش داره از میان درختانی که به صورت افقی به دامنه کوه وصل شده اند پرواز میکنه ولی غافل از اینکه در حال یک سقوط آزاد هستش! به صدای تلق در اخر انیمیشن دقت کنید. کمی ناراحت کننده بود.

پی نوشت: موضوع این انیمیشن با اون مبحث نرم افزار سفیر هیچ ارتباطی نداشت ولی چون این روزها خیلی درگیر این نرم افزار هستم، به محض دیدن نام این انیمیشن، یاد ماژول KIWI در این نرم افزار افتادم:)

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

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


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

(-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

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


چندین سال بود که هرچه اراده می کردم تا یک زبان برنامه نویسی را یاد بگیرم، هر بار نیمه تمام رها میشد. یک مدت متلب کار کردم و چندین آموزش ویدئویی از سایت فرادرس تهیه کردم و حتی حدود شصت صفحه جزوه هم نوشتم ولی در نهایت به انجام پروژه ختم نشد و آن را کنار گذاشتم. در یک بازه زمانی، به دلیل شغل پسرخاله ام که برنامه نویسی با سی شارپ است، این زبان را نیز شروع کردم ولی باز رها شد. آن موقع با هر بار رها شدن یادگیری برنامه نویسی، بسیار خودم را سرزنش می کردم و تصور می کردم که استعداد این کار را ندارم. 

چند ماه پیش بود که دوباره تصمیم گرفتم برنامه نویسی را شروع کنم. ولی این بار واقعاً نیاز داشتم که یاد بگیریم. در یک پروژه ای که کاملاً به صورت اختیاری آن را استارت زده بودم، مجبور شدم که یک الگوریتم ریاضیاتی را کدنویسی کنم. در ابتدا از چند تا از دوستانم خواستم که آن را در متلب برای من کدنویسی کنند و در اختیارم قرار دهند. ولی هر بار از انجام آن طفره رفتند و در نهایت خودم ماندم و خودم.

این شد که تصمیم گرفتم شروع کنم، ولی با راه حلی متفاوت. در سایت دانشگاه های مختلف و برتر دنیا جستجو کردم تا ببینم آن ها چه زبانی را تدریس می کنند. بعد از دو سه روز زبان مورد نظرم را یافتم. حال به مرحله یادگیری آن زبان رسیده بودم. به طور اتفاقی متوجه شدم که سایت فرادرس آموزش ویدئویی آن زبان برنامه نویسی را دارد. بنابراین، سریعاً آن را خریدم و در حدود سی ساعت فیلم آموزشی دیدم و جزوه نوشتم. فکر می کنم الآن جزوه ام حدود هشتاد صفحه هست. از آنجایی که تا به حال اسم این زبان را نشنیده بودم و همچنین کسی نیز به من معرفی نکرده بود، اشتیاق زیادی برای یادگیری آن داشتم و لذت می بردم. پس از چندین روز، کل آموزش ها را مشاهده کردم و کلیات آن را یاد گرفتم. یک شب بعد از دفاع از پایان نامه ارشدم، در حالیکه تنها در اتاق بودم و همه دوستان به خانه رفته بودند، تصمیم گرفتم که آن الگوریتم را کدنویسی کنم. خلاصه حدود 5 ساعت وقت گذاشتم و در نهایت موفق به کدنویسی آن شدم. چنان لذتی داشت که نگو. به قول معروف نیازی به منت کشی کسی نیز نبود. 

قصدم از این مطلب این هست که بگویم بهترین راه حل برای یادگیری آن است که در ابتدا یک مسأله برای خودمان تعریف کنیم و در حقیقت فرایند یادگیری به صورت پروژه-محور باشد. این در حالی است که اکثر ما، ابتدا چندین نرم افزار را یاد می گیریم و سپس به فکر استفاده از آن ها می افتیم. برای همین هست که همیشه همه کاره و هیچ کاره ایم. همه نرم افزارها را بلد هستیم ولی دقیقاً نمی دانیم که کجاها مورد استفاده قرار می گیرند و در پشت نرم افزارها چه خبر است. خیلی سخت است که ابتدا یک نرم افزار را یاد بگیریم و سپس به فکر ایجاد راه هایی برای استفاده از آن ها و کسب درآمد باشیم. پیشنهاد مناسب آن است که تا زمانی که به مسأله ای برنخورده اید و یا چالش و درگیری ذهنی ندارید، سراغ یادگیری هیچ نرم افزاری نروید؛ چرا که به سرعت فراموش می کنید و یادگیری شما کاربردی نخواهد بود.

بهترین ایجاد کننده انگیزه در وجود من برای یادگیری هر موضوع جدیدی، کسب درآمد از آن و تبدیل مستقیم دانش به ارزش می باشد؛ خواه در کوتاه مدت و خواه در بلند مدت.

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

پس از گذشت مدت زمانی از تولید، پروفایل فشار در اطراف دهانه چاه به شکل یک مخروط می شود. شکل های زیر از آنالیز عددی یک مدل در نرم افزار سفیر گرفته شده اند:



۰ نظر ۲۹ بهمن ۹۵ ، ۱۱:۱۹
صادق سلمانی

برای طراحی یک چاه آزمایی نیاز به جمع آوری اطلاعات متنوعی داریم: زمین شناسی، ژئوفیزیک، پتروفیزیک، حفاری، بهره برداری و تکمیل. معمولاً اطلاعات را به سه دسته تقسیم می کنیم: 1) خواص سنگ 2) خواص سیال 3) داده های مهندسی

به طور کلی، منبع اطلاعات مورد نیاز برای طراحی یک چاه آزمایی شامل موارد زیر است:


Geology/geophysics: reservoir areal extent, pinchouts, faults, dip, layering, reservoir quality, depositional environment
Open and Cased-hole logs: porosity, fluid saturations, contacts
Rock properties: compressibility
Core: permeability, porosity, rock compressibility
Formation Tester: reservoir pressure, temperature, permeability
Fluid properties: viscosity, formation volume factor, compressibility
Production information: cumulative oil, gas, and water. GOR or CGR
Completion configuration: location of gauges, tubing and casing details, perforation depth, packer depth

منبع: این لینک
۰ نظر ۲۷ بهمن ۹۵ ، ۰۱:۴۶
صادق سلمانی


یکی از چالش های اصلی امروز ما این هست که علاقه خاصی به دانستن همه چیز داریم و دوست داریم که مطالب زیادی را بلد باشیم. 

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

بنابراین هیچگاه نباید اجازه بدهیم که انباشت اطلاعات باعث شود که از انجام و به کار بستن تمرینات خودداری کنیم.


تذکر: این مطلب را مدتی پیش با الهام از یک سایتی نوشته بودم ولی متأسفانه الآن منبع را به خاطر نمی آورم.


۰ نظر ۲۶ بهمن ۹۵ ، ۰۱:۴۵
صادق سلمانی


روش های آنالیز تست ساخت فشار:

1) روش هورنر: نمودار Pws را بر حسب HTR در مختصات نیمه لگاریتمی رسم می کنیم.

2) روش MDH: نمودار Pws را بر حسب dt در مختصات نیمه لگاریتمی رسم می کنیم.

3) روش Agarwal Equivalent-Time: نمودار Pws را بر حسب dte در مختصات نیمه لگاریتمی رسم می کنیم.


تذکر: زمانی از روش MDH استفاده می کنیم که tp خیلی بزرگ تر از dt باشد؛ مثلاً 10 برابر و یا بزرگتر باشد.

تذکر مهم: حداکثر مقدار dte برابر با tp می باشد. پس دقت کنید که اگر از روش زمان معادل استفاده کنید، داده های زمان های انتهایی فشرده می شود و به خوبی در نمودار دیده نمی شود... یعنی ممکن است که شما اثر مرز مخزن را در نمودار زمان معادل نبینید...

۰ نظر ۲۱ بهمن ۹۵ ، ۱۷:۲۴
صادق سلمانی