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

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

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

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

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

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

آخرین نظرات

۲۰ مطلب با کلمه‌ی کلیدی «ریاضیات» ثبت شده است

تابع خطا (Error Function) در ریاضیات، تابعی غیراصلی (نداشتن ضابطه صریح) است که در علوم احتمالات، مواد، آمار و معادلات دیفرانسیل با مشتقات جزئی استفاده می‌شود. تعریف این تابع به صورت زیر است (منبع: ویکی پدیا):


همچنین متمم تابع خطا (Complementary Error Function) نیز به شکل زیر تعریف می‌شود:


نمودار تابع خطا


جدول تابع خطا


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


from math import *


erf (2)

>> 0.9953222650189527


erfc (2)
>> 0.004677734981047268

یکی از کاربردهای تابع خطا در درس چاه‌آزمایی می‌باشد. مثلاً گرینگارتن و همکاران با استفاده از توابع گرین (Green’s function)، معادله انتشار را برای یک چاه شکافدار (مدل شار یکنواخت) حل نمودند و به رابطه زیر رسیدند:

همان‌طور که مشاهده می‌کنید برای محاسبه فشار بی‌بعد در این رابطه، باید مقادیر تابع خطا را داشته باشیم. 

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

یکی از موضوعات مهم ریاضیات و آمار که کاربرد زیادی در رشته‌های مهندسی دارد، مبحث برازش منحنی (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 ()


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

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

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

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

خلاصه روش رانگ کاتا مرتبه چهارم:


در اینجا قصد دارم به بررسی یک مثال به روش رانگ کاتا - 4 بپردازم. قبلاً این مثال را به روش‌های اویلر و رانگ کاتا-2 نیز حل کرده‌ام (+ و +)

مثال:

معادله دیفرانسیل زیر را با استفاده از روش رانگ کاتا مرتبه چهارم و برای حالت 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):
    k1=h*x[i-1]*y[i-1]**(1/3)
    k2=h*(x[i-1]+0.5*h)*(y[i-1]+0.5*k1)**(1/3)
    k3=h*(x[i-1]+0.5*h)*(y[i-1]+0.5*k2)**(1/3)
    k4=h*(x[i-1]+h)*(y[i-1]+k3)**(1/3)
    y[i]=y[i-1]+(1/6)*(k1+2*k2+2*k3+k4)
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 RK-4 Method')
plt.show()
نتایج:

1.0      1.0
1.5       1.6860902679
2.0     2.82824535285
2.5     4.56006327111
3.0     7.02071665246
3.5     10.3518481736


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


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

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

سوالاتی از قبیل:

  • اپلای کنم یا نه؟
  • دکترا بخوانم یا نه؟
  • کدام دانشگاه ادامه تحصیل بدهم؟
  • چه گرایشی بروم؟
  • چه مهارت هایی کسب کنم؟
  • چگونه توانمندی ها و مهارت هایم را بیشتر کنم؟
  • چگونه فردی متخصص بشوم؟
  • چه نرم افزارهایی مهمتر هستند؟
  • چگونه حوزه مورد علاقه ام را پیدا کنم؟
  • چگونه درآمد کسب کنم؟
  • چگونه روی برند شخصی خودم کار کنم؟
  • و سوالات متنوع دیگر


برخی از سرفصل های کتاب را در زیر آورده ام:

1- با فقط بخشی از پول اپلای چه کارهایی می توانیم در ایران انجام دهیم تا به درآمد و تخصص بیشتری برسیم؟

2- اهمیت ریاضیات در آینده هر مهندس؟

3- چگونه به کدنویسی علاقمند شویم؟ چه زبانی را انتخاب کنیم؟

4- چگونه هندبوک شخصی خود را تألیف کنیم و از آن در مسیر پیشرفت تخصصی خود کمک بگیریم؟

5- اهمیت فهم و درک پشت صحنه نرم افزارها؟

6- چرا انجام پروژه با داده های واقعی کارایی ما را افزایش می دهد؟

7- چگونه با وبلاگ نویسی و تولید محتوای اصیل، یک رزومه آنلاین برای خود ایجاد کنیم؟

8- چرا تهیه گزارش از پروژه ها و فعالیت هایمان حائز اهمیت است؟

9- چند نکته در مورد کنکور ارشد نفت

10- آیا در این اوضاع و شرایط باید تغییر رشته دهیم؟!!

11- مجلات و کنفرانس ها و دوره های آموزشی رو پیگیری کنید

12- تمرکز و تخصص گرایی در انجام فعالیت ها

و ...

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

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


عنوان کتاب الکترونیکی: تصمیم من برای این روزهای شدیداً رقابتی در صنعت نفت

نویسنده: صادق سلمانی

تعداد صفحات: 31 صفحه

سال انتشار: اسفند 95

موضوع کتاب: راهنمای عملی دست‌یابی به تخصص در حوزه‌های مورد علاقه‌تان



قیمت محصول: 10 هزار تومان 



دوستانی که این کتاب را تهیه می کنند، تقاضا دارم بعد از مطالعه دقیق کتاب، نظرات و تجربیات خود را در مورد این کتاب در زیر این پست با سایر افراد به اشتراک بگذارند.
۰ نظر ۲۹ اسفند ۹۵ ، ۰۲:۱۶
صادق سلمانی

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

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

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

خلاصه این روش:


در اینجا قصد دارم به بررسی یک مثال به روش رانگ کاتا - 2 بپردازم. قبلاً این مثال را به روش اویلر نیز حل کرده ام (این پست).

مثال:

معادله دیفرانسیل زیر را با استفاده از روش رانگ کاتا مرتبه دوم و برای حالت 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):
    k1=h*x[i-1]*y[i-1]**(1/3)
    k2=h*(x[i-1]+h)*(y[i-1]+k1)**(1/3)
    y[i]=y[i-1]+0.5*(k1+k2)
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 RK-2 Method')
plt.show()
نتایج:

1.0    1.0
1.5    1.67926784096
2.0    2.80994158899
2.5    4.52558068947
3.0    6.96573342035
3.5    10.2725017487

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

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

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

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

روش اویلر:


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

مثال:

معادله دیفرانسیل زیر را با استفاده از روش اویلر و برای حالت 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


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


برای دیدن بقیه پست ها در مورد معادلات دیفرانسیل با مشتقات جزئی به این لینک مراجعه کنید.

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

دیکانولوشن چیست؟

فرض کنیم که یک تست چند دبی (4DD+4BU) در یک مخزن نفتی که دارای مرز بدون جریان است، انجام می‌گیرد... مانند شکل زیر 👇

در تست بالا، بازه زمانی هر کدام از تست‌های DD و BU به مدت 48 ساعت است: در نتیجه کل زمان تست برابر است با 384=48*8 ساعت.

کاری که روش دیکانولوشن انجام می‌دهد آن است که تست بالا را که شامل 8 تست DD و BU است و بازه زمانی هر کدام از تست‌ها نیز 48 ساعت می‌باشد، به یک تست با دبی ثابت که بازه زمان آن 384 ساعت است تبدیل می‌کند... 

فرض کنید که شما می‌خواهید تست DD اول را آنالیز کنید... در این صورت شما فقط می‌توانید 48 ساعت از تست را آنالیز کنید... در صورتی که اگر روش دیکانولوشن را به کار ببرید، فرض می‌شود که تست شما به مدت 384 ساعت ادامه داشته است و شما قادر به دیدن بسیاری از اثرات مخزن و مرز خواهید بود...

این شکل مربوط به زمانی است که مثلا فقط تست DD اول را که 48 ساعت است آنالیز کنیم... همان طور که مشاهده می‌کنید، در اینجا به دلیل کوتاه بودن تست، اثرات مرزی دیده نشده‌اند!


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


به طور کلی در روش دیکانولوشن داریم:

The deconvolution technique transforms variable rate and pressure data into an equivalent initial constant-rate pressure response (in purple in the plot) with duration equal to the duration T of the entire test.


یکی از کاربردهای مهم روش دیکانولوشن آن است که اثرات ذخیره چاه را کاهش می‌دهد و امکان آنالیز داده‌ها در تست‌های کوتاه مدت‌تر را فراهم می‌کند.

۰ نظر ۲۸ آذر ۹۵ ، ۱۳:۲۷
صادق سلمانی

در ریاضیات دنباله فیبوناچی به صورت زیر تعریف می شود:

به غیر از دو عدد اول، اعداد بعدی از مجموع دو عدد قبلی خود بدست می آیند. اولین اعداد این سری عبارتند از:

۰٬ ۱٬ ۱٬ ۲٬ ۳٬ ۵٬ ۸٬ ۱۳٬ ۲۱٬ ۳۴٬ ۵۵٬ ۸۹٬ ۱۴۴٬ ۲۳۳٬ ۳۷۷٬ ۶۱۰٬ ۹۸۷٬ ۱۵۹۷٬ ۲۵۸۴٬ ۴۱۸۱٬ ۶۷۶۵٬ ۱۰۹۴۶٬ ۱۷۷۱۱

برای پیدا کردن 10 جمله اول دنباله اعداد فیبوناچی توسط پایتون از کد زیر استفاده می کنیم:

def F(n):

    if n == 0: 

        return 0

    elif n == 1: 

        return 1

    else: 

        return F(n-1)+F(n-2)

for i in range(0,10):

    print (F(i))


جواب:

0

1

1

2

3

5

8

13

21

34

تدکر: اگر در دستور بالا n را تغییر دهیم، می توانیم به هر تعداد جمله از دنباله فیبوناچی دسترسی داشته باشیم.

۲ نظر ۱۶ آذر ۹۵ ، ۰۳:۱۸
صادق سلمانی

برای پیدا کردن اعداد اول در یک بازه مشخص از کد زیر استفاده می کنیم:

from sympy import*

list1=[]

for i in primerange(7, 18):

    list1.append(i)

print(list1)

[7, 11, 13, 17] :جواب

برای اینکه تشخیص دهیم که یک عدد اول هست یا نه از کد زیر استفاده می کنیم:

>>> from sympy import*

>>> isprime(13)

 True


تجزیه یک عدد به عوامل اول:

from sympy import*

print(S(45).factors())

{3: 2, 5: 1} :جواب

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