subs در متلب
دستور subs یکی از دستورات مهم در حوزه محاسبات نمادین (Symbolic Computation) است که به کاربر اجازه میدهد تا مقادیر خاصی را به جای متغیرهای نمادین در یک عبارت قرار دهد. محاسبات نمادین به محاسباتی اطلاق میشود که در آن عملیات ریاضی به صورت نمادین و بدون تبدیل به مقادیر عددی انجام میشود. این نوع محاسبات بیشتر در حل معادلات، مشتقگیری و انتگرالگیری نمادین و تحلیل معادلات دیفرانسیل کاربرد دارد. دستور subs در متلب ابزاری قدرتمند برای جایگزینی مقادیر و عبارات مختلف در محاسبات نمادین است. این دستور به کاربران اجازه میدهد تا به سادگی مقادیر خاصی را به جای متغیرهای نمادین در عبارات قرار دهند و محاسبات پیچیدهتری را انجام دهند. استفاده از این دستور به ویژه در حل مسائل ریاضی، فیزیکی و انجام پروژه متلب بسیار کاربردی است. در متلب، برای انجام محاسبات نمادین از جعبهابزار Symbolic Math Toolbox استفاده میشود. این جعبهابزار امکانات گستردهای را برای انجام محاسبات نمادین فراهم میکند.
در بسیاری از مسائل، نیاز به حل معادلات دیفرانسیل و سپس جایگزینی مقادیر اولیه یا شرایط مرزی در جوابهای آنها وجود دارد. در این موارد،subs ابزاری کارآمد برای اعمال این شرایط است. در بهینهسازی نیز که نیاز به ارزیابی تابع هدف در نقاط مختلف است، می توان با استفاده از subs این ارزیابی را انجام داد. همپنین سری تیلور یکی از ابزارهای مهم در تحلیل ریاضی و تقریبی است. در متلب، میتوان از دستورsubs برای جایگزینی نقاط خاص در سری تیلور استفاده کرد.
دستور replace در متلب مشابه دستورsubs عمل میکند، اما بیشتر برای جایگزینی مستقیم عبارات به جای یکدیگر استفاده میشود، در حالی که subs به طور خاص برای محاسبات نمادین طراحی شده است و ممکن است با توجه به نوع متغیرها رفتارهای متفاوتی نشان دهد.subs برای جایگزینی در عبارات نمادین استفاده میشود وreplace بیشتر در جایگزینی عبارات متنی یا نمادین مشابه کاربرد دارد. همچنین دستورات subsref و subsasgn نیز به ترتیب برای خواندن و نوشتن در آرایهها و ماتریسهای متلب استفاده میشوند. این دستورات به کاربر اجازه میدهند که به شیوههای پیچیدهتر به عناصر دسترسی داشته باشند یا آنها را تغییر دهند، اما هدف آنها متفاوت از subs است. از سوی دیگر، subsref وsubsasgn برای دسترسی به عناصر آرایهها و ماتریسها در سطح پایهایتری استفاده میشوند. برای آشنایی با سایر دستورات متلب مطالب زیر را مطالعه کنید:
ساختار کلی دستور subs به صورت زیر است:
new_expr = subs(expr, old, new)
توضیح | عبارت |
عبارت نمادین اصلی | expr |
متغیر یا متغیرهایی که قصد جایگزینی آنها را داریم | old |
مقدار یا مقادیری که به جای متغیرهای old قرار خواهند گرفت | new |
عبارت نمادینی که بعد از جایگزینی حاصل میشود | new_expr |
مثال 1: جایگزینی یک مقدار به جای یک متغیر
clc; clear; close all;
syms x
expr = 5*x^2 + 4*x + 20;
new_expr = subs(expr, x, 3)
خروجی:
new_expr =
60
توضیح: در این مثال، ابتدا یک متغیر نمادینx تعریف میکنیم. سپس یک عبارت درجه دوم با استفاده از این متغیر مینویسیم. در نهایت، مقدار 3 را به جای x در عبارت قرار میدهیم.
– syms x: تعریف متغیر نمادین
– expr = 5*x^2 + 4*x + 20: تعریف یک چندجملهای درجه دوم.
– new_expr = subs(expr, x, 3): جایگزینی مقدار 3 به جای متغیر.
مثال 2: جایگزینی چند متغیر با مقادیر مختلف
clc; clear; close all;
syms x y
expr = x^2 + y^2;
new_expr = subs(expr, [x y], [3 4])
خروجی:
new_expr =
25
توضیح : در این مثال، دو متغیر x و y تعریف میشوند. سپس این متغیرها به ترتیب با مقادیر 3 و 4 جایگزین میشوند.
– syms x y: تعریف دو متغیر نمادین
– expr = x^2 + y^2: تعریف یک معادله شامل دو متغیر.
– new_expr = subs(expr, [x y], [3 4]): جایگزینی مقادیر 3 و 4 به جای متغیرها
مثال 3: جایگزینی یک عبارت به جای یک متغیر
clc; clear; close all;
syms x y
expr = x^2 + y;
new_expr = subs(expr, y, x+1)
خروجی:
new_expr =
x^2 + x + 1
توضیح: در این مثال، متغیر y با عبارت x+1 جایگزین میشود.
– syms x y: تعریف متغیرهای نمادین
– expr = x^2 + y: تعریف یک معادله شامل
– new_expr = subs(expr, y, x+1):
جایگزینی عبارت x+1 به جای y
مثال 4: جایگزینی مقادیر در یک ماتریس نمادین
clc; clear; close all;
syms x y z
M = [x y; y z];
new_M = subs(M, [x y z], [1 2 3])
خروجی:
new_M =
[ 1, 2]
[ 2, 3]
توضیح: در این مثال، یک ماتریس دو در دو شامل متغیرهای نمادین x، y وz تعریف میشود. سپس این متغیرها با مقادیر 1، 2 و 3 جایگزین میشوند.
– syms x y z: تعریف سه متغیر نمادین.
– M = [x y; y z]: تعریف یک ماتریس ۲ در ۲.
– new_M = subs(M, [x y z], [1 2 3]):
جایگزینی مقادیر 1، 2 و 3 به جای z ، y ،x.
مثال 5: جایگزینی بخشی از یک عبارت
clc; clear; close all;
syms x
expr = sin(x) + cos(x);
new_expr = subs(expr, sin(x), 1)
خروجی:
new_expr =
1 + cos(x)
توضیح : در این مثال، فقط قسمت sin(x) در عبارت با عدد 1 جایگزین میشود.
– syms x: تعریف متغیر نمادین
– expr = sin(x) + cos(x): تعریف یک معادله شامل sin(x) و cos(x).
– new_expr = subs(expr, sin(x), 1):
جایگزینی عدد 1 بجای sin(x)
مثال6- جایگزینی در ماتریسهای نمادین
clc; clear; close all;
syms a b c d
m = [a b; c d];
new_m = subs(m, [a d], [1 4])
خروجی:
new_m =
[ 1, b]
[ c, 4]
توضیح کد: دستور subs میتواند بر روی ماتریسهای نمادین نیز اعمال شود. در این مثال، جایگزینی مقادیر 1 و 4 به ترتیب به جای a وd در ماتریس انجام شده است.
مثال7- جایگزینیهای تکراری
clc; clear; close all;
syms x
expr = x^2 + 3*x + 2;
subs_results = arrayfun(@(n) subs(expr, x, n), 1:5)
خروجی:
Subs_results =
[6, 12, 20, 30, 42]
توضیح : با استفاده از دستور subs میتوان جایگزینیهای تکراری در یک عبارت نمادین انجام داد. این ویژگی زمانی مفید است که یک متغیر به ترتیب با چند مقدار مختلف جایگزین شود. در عبارتarrayfun(@(n) subs(expr, x, n), 1:5) ، جایگزینیهای مختلف برای مقادیر 1 تا 5 به جای x در این مثال انجام شده است.
مثال 8: استفاده از دستور replace
clc; clear; close all;
syms x y
expr = x^2 + y;
new_expr = replace(expr, y, x+1)
خروجی:
new_expr =
1 + cos(x)
توضیح: در این مثالreplace(expr, y, x+1) جایگزینی عبارت x+1 به جای y است که مشابه دستور subs عمل میکند.
مثال9- استفاده از subs در حل معادلات دیفرانسیل
clc; clear; close all;
syms y(x)
dy = diff(y, x);
ode = dy + y == 0;
sol = dsolve(ode);
c1 = subs(sol, x, 0) == 1;
sol_subs = subs(sol, c1, 1)
خروجی:
sol_subs =
C1*exp(-x)
توضیح کد:
– dsolve(ode): حل معادله دیفرانسیل.
– subs(sol, C1, 1):
جایگزینی مقدار ثابت انتگرالی c1 با مقدار خاص.
مثال 10- استفاده از subs در بهینهسازی و معادلات جبری
clc; clear; close all;
syms x
f = x^3 – 6*x^2 + 9*x + 1;
df = diff(f, x);
critical_points = solve(df, x);
values = subs(f, x, critical_points)
خروجی:
Values =
5, 1
توضیح کد:
– diff(f, x): مشتق تابع f نسبت به x.
– solve(df, x): یافتن نقاط بحرانی.
– subs(f, x, critical_points): ارزیابی تابع در نقاط بحرانی.
در اینجا، خروجی values مقادیر تابع در نقاط بحرانی است که میتواند به عنوان نقاط حداقل یا حداکثر موضعی شناسایی شود.
مثال 11- استفاده از subs در سریهای تیلور
clc; clear; close all;
syms x
f = exp(x);
taylor_series = taylor(f, x, ‘order’, 6);
approx_value = subs(taylor_series, x, 0.1)
خروجی:
approx_value = 13262051/12000000
توضیح : taylor(f, x, ‘Order’, 6) برای محاسبه سری تیلور تابع f تا مرتبه ۶.
subs(taylor_series, x, 0.1) برای جایگزینی مقدار 0.1 به جای x برای به دست آوردن مقدار تقریبی.
این خروجی نشان میدهد که سری تیلور با مرتبه ۶، مقدار تابع نمایی را در نقطه x = 0.1 به طور تقریبی برابر 1.1052 ارزیابی میکند.


