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

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

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

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

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

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

آخرین نظرات

۳ مطلب با کلمه‌ی کلیدی «دکتر خراط» ثبت شده است

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

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

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

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


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


مثال:

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

1.0                          1.0
1.5           1.6855277908
2.0            2.826623146
2.5           4.5570242827
3.0           7.0160178606
3.5           10.345325211


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

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

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

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

روش اویلر:


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

مثال:

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


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

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


مثال:

# 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

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