انجمن سایت کلیدستان



انتگرال گیری عددی از یک تابع دو متغیرهزمان کنونی: ۱۳۹۵/۰۹/۱۶، ۱۰:۲۶ ب.ظ
کاربران در حال بازدید این موضوع: 1 مهمان
نویسنده: mbq
آخرین ارسال: admin
پاسخ 8
بازدید 4468

رتبه موضوع:
  • 2 رای - 4.5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
انتگرال گیری عددی از یک تابع دو متغیره

انتگرال گیری عددی از یک تابع دو متغیره

#1
عرض سلام خدمت همگی
دوستان من میخواهم از یک تابع دو متغیره انتگرال گیری کنم اما تابع فرم بسته ای ندارد یعنی اینکه انتگرال گیری عادی رو نمیشه انجام داد و باید انتگرال گیری عددی رو انجام بدم.
بعد از این انتگرال گیری عددی( بر حسب یکی از متغیرها) ,حاصل یک تابع تک متغیره است که از این تابع ابتدا لگاریتم و از حاصل اون باید یکبار مشتق گیری کرد.
بعد از آن حاصل یک عبارت بر حسب یک متغیرمی باشد.
تابع مورد نظر:

کد:
exp(-i*w*x-abs(w).^2)

لطفا راهنمایی کنین
ممنون
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#2
سلام.
دستور trapz به صورت عددی، تقریبی برای انتگرال ارائه می کند.
همچنین از دستور dblquad برای حل انتگرال دوگانه می توانید استفاده کنید. این دستور، در واقع، با استفاده از دستور quad ، انتگرال گیری رو انجام میده (به صورت دوگانه).
دستور triplequad هم مشابه دستور dblquad هست، با این تفاوت که برای انتگرال های سه گانه به کار می رود.
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#3
ببینید انتگرال یگانه ست
من قبلا دستور quad رو استفاده کردم
به این صورت:

کد:
function mbq
y=[];
x=randn(1,100)
function y=fun(w)
y=exp(-i*w*x(k)-abs(w).^2)
end
for k=1:100
y1=diff(log(quad(@fun,-500,500)))
y=[y y1]
end
end

بردار x باید در حاصل جایگذاری شود و در نهایت بردار y1 حاصل کار است
ولی جواب نمیده
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#4
بنابراین شما برای x ، صد تا عدد تصادفی ایجاد می کنید و سپس برای هر مقدار x ، یک تابع y بر حسب متغیر w داریم که می خواهیم انتگرال آن از 500- تا 500 محاسبه شود. برای این منظور، با دستور trapz ، مقدار انتگرال را به صورت تقریبی محاسبه می کنیم.
من یک مقدار به متغیر x می دهم و سپس نحوه حل انتگرال رو مشاهده خواهید کرد و می توانید با یک حلقه for ، این کار را برای 100 مقدار متفاوت x انجام بدهید.

کدهای متلب :

کد:
clear all
close all
clc

x=2;
w=-500:0.01:500;
y=exp(-i*w*x-abs(w).^2);
integral_value=trapz(w,y)

نتیجه اجرای کد متلب بالا :

کد:
integral_value =

   0.6520 + 0.0000i
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#5
ممنون که پاسخ دادید
ببنید در کدی که شما نوشتید برای y یک مقدار عددی بدست می آید
مسئله دقیقا همین جاست
در کد شما y باید بر حسب x بدست بیاید که بعد از آن بشود بر حسب x از آن مشتق گرفت و بعد از آن به جای x عدد گذاری کرد.
در واقع سوال اینه که ما چطور باید از y که تابعی بر حسب x و w است انتگرال گیری کنیم(نسبت به متغیر w)؟
بعد از این انتگرال گیری در بازه -500 تا 500 حاصل ما تابعی بر حسب x خواهد بود که از آن مشتق گرفته و سپس بردار x را در آن جایگذاری کنیم
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#6
بنابراین باید کدهای متلب رو به این صورت بنویسیم :

کد:
clear all
close all
clc

syms x w
y=exp(-i*w*x-abs(w)^2);
z=int(y,x)

از دستور int استفاده کردیم که به طور سمبلیک انتگرال گیری میکنه.
نتیجه اجرای کد متلب بالا :

کد:
z =

((1/exp(w*x*i))*i)/(w*exp(abs(w)^2))

حالا می توانید بر روی z که همان نتیجه انتگرال است، عملیات های ریاضی مورد نظر خود را انجام دهید.
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#7
قبلا هم خدمتتون عرض کردم
چون فرمول مورد نظر شکل بسته نداره نمیشه انتگرال گیری عادی کرد
یعنی در واقع انتگرال نداره وقتی دستور int رو استفاده می کنیم متلب جواب اشتباهی به ما می ده
پس ما باید انتگرال گیری عددی رو انجام بدیم
یعنی دقیقا همین کارایی رو که شما انجام دادین ولی با انتگرال گیری عددی
(این انتگرال مثل q-function در مخابراته که انتگرالش جواب نداره ولی عددی حلش می کنند.)
پاسخ

انتگرال گیری عددی از یک تابع دو متغیره

#8
موضوع اینه که، برای حل عددی انتگرال، شما باید ابتدا و انتهای بازه انتگرال گیری را مشخص کنید. یعنی مثلا بگیم مقدار x بین 0 تا 1 باشه و اون وقت یک عدد به عنوان حاصل خواهیم داشت. ولی شما می خواهید عبارت معادل انتگرال را بر حسب x به دست بیاورید. این دو با هم تضاد دارند.
تا اونجایی که من می دونم، با روش های عددی، تنها می توانید یک مقدار به دست بیاورید، نه عبارت به صورت سمبلیک (متلب رو بگذارید کنار، من به طور کلی می گویم).
آیا روش عددی وجود دارد که با آن می توان عبارت سمبلیک به دست آورد ؟ اگر پاسخ مثبت است، نام آن چیست ؟

تازه شما از پاسخی که متلب به صورت نمادین میده (جواب نمایش داده شده در ارسال قبلی بنده)، مشتق بگیرید ببینید عبارتی که از آن انتگرال گرفتیم به دست می آید یا خیر. اگر به دست بیاید، جواب صحیح است.
اگر دلیل روشنی دارید که اثبات می کند جواب متلب غلط است، آن دلیل را ذکر کنید.
bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان

آخرین کلیدهای غیررایگان

شما هم می توانید کلیدهای غیررایگان منتشر کنید (بیشتر بدانید)