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

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

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

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

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

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

آخرین نظرات

۱۲ مطلب با کلمه‌ی کلیدی «کدنویسی» ثبت شده است


الآن در حال حل یکی از مثال‌های کتاب چاه‌آزمایی جان لی بودم که در میان مسیر باید مقدار Exponential Integral را محاسبه می‌کردم. روش معمول آن است که به جداول خود کتاب مراجعه کنیم و با کمی جستجو مقدار آن را بدست آوریم. ولی راه حل بهتر آن است که این کار را با استفاده از اکسل، پایتون، متلب و غیره انجام دهیم تا هم سریع‌تر باشد و هم مقدار دقیق‌تری بدست آید. 

ماژول Scipy یک تابع مناسبی برای محاسبه مقادیر Ei ارائه می‌دهد:

from scipy import*
x=expi(-0.5)
print(x)

نتیجه:
x = - 0.559773594776

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


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

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

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

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


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

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


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

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


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

(-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 ساعت وقت گذاشتم و در نهایت موفق به کدنویسی آن شدم. چنان لذتی داشت که نگو. به قول معروف نیازی به منت کشی کسی نیز نبود. 

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

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

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

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

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

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

برای پیدا کردن 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} :جواب

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

برای محاسبه فاکتوریل یک عدد (مثلاً !5) از دو روش زیر استفاده می کنیم:

روش اول:

x=1

num=int(input("enter a positive number:"))

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

    x=x*i

print("the factorial of",num,"is",x)

جواب: the factorial of 5 is 120

روش دوم:
from math import factorial
print (factorial(10))
جواب: 120
۱ نظر ۱۰ آذر ۹۵ ، ۲۰:۰۴
صادق سلمانی

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


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