تبلیغات آموزش مطلب
وبلاگ من
نویسنـــدگان :
امین باشی (73)
موضــــوع ها :
figure (14)
line (1)
uicontrol (1)
uipanel (1)
axes (2)
Organization of Graphics Objects (2)
uimenu (2)
خودم (7)
image (2)
surface (1)
patch (1)
text (5)
light (1)
plot object (2)
area (3)
bar (2)
convolution (1)
errorbar (2)
plot (1)
surf (1)
برازش منحنی (1)
workspace (1)
evalin (1)
GUIDE (1)
dsolve (1)
لاپلاس (1)
سری فوریه (3)
حل عددی IVP (2)
حل معادلات دیفرانسیل پاره ای وابسته به زمان در یک بعد (1)
BVP (1)
حل معادلات خطی (1)
solve (1)
حل pde (5)
subs (1)
آرشیـــو :
خرداد 1388 (1)
مرداد 1386 (1)
بهمن 1385 (2)
دی 1385 (2)
آذر 1385 (1)
شهریور 1385 (6)
مرداد 1385 (6)
تیر 1385 (5)
خرداد 1385 (1)
اردیبهشت 1385 (3)
فروردین 1385 (9)
اسفند 1384 (9)
شهریور 1384 (14)
مرداد 1384 (10)
تیر 1384 (3)
لینكدونی :
MATLAB Wiki
History of Iran
لورن
آرشیو لینكدونی
لینكستان :
متمتیکا
مهندسی صنایع - مهندس امیر
مهندسی شیمی ایران
اخبار نجوم
دانلود رایگان کتاب فیزیک به زبان فارسی
وبلاگ فیزیک ایران
مجله نجوم
انجمن علمی پژوهشی نجم شمال
ماه نو
مطلب نوین
آموزش متلب
میكرو روباتیك
معماری بی نظیر
انجمن مهندسی شیمی ایران
تکنولوژی برتر
گلچین دنیای اینترنت
پروژه های جالب الكترونیك
جادوهای ویندوز
Mathworks
وب كلاس
جنون اینترنت
فرهنگستان زبان و ادب پارسی
جسنجو :
خبرنامه :
نظر سنجی :
امروز :
بازدید های امروز :
بازدید های دیروز :
كل مطالب :
كل نظرها :
كل بازدید ها :
ایجاد صفحه : - ثانیه
تعریف هندسه pde
روش کار متلب برای حل معادلات پاره ای رامی توانید در آدرس زیر ببنید
http://www.mathworks.com/access/helpdesk/help/toolbox/pde/ug/bqivs1t-1.html
اگر ارل بالا را باز کنید میبینید که برای حل pde ابتدا باید ماتریس هندسه مسئله (Geometry Description matrix) را بسازیم. بعد با استفاده از دستور decsg این ماتریس را تجزیه میکنیم که به ماتریس حاصل ماتریس هندسه تجزیه شده میگویند(Decomposed Geometry matrix). این ماتریس ناحیهای (domain) که معادله بر روی آن حل می شود را مشخص میکند
مثال زیر روش بدست آوردن این دو ماتریس را نشان میدهد.
مثال)
s = tf('s');
sys = 1/(s+1)^2;
nyquist(sys)
می بینید که نایکویست این تابع شبیه قلب است؛ و همانطور که میدانید نمودار نایکویست در صفحه اعداد مختلط رسم میشود. برای حل یک معادله پاره ای را بر روی این شکل باید آن را از فضای اعداد مختلط به فضای اعداد حقیقی تبدیل کنیم(جزییات کار به عهده خودتان).w=-10:.1:10;
x=(1-w.^2)./(1+w.^2).^2;
y=2*w./(1+w.^2).^2;
plot(x,y)
بد نشد ولی یک مقدار تمیز کاری میخواهد.
w = [linspace(-5,-2,7) linspace(-1.9,-.2,20) -.15:.05:.15...
fliplr(-linspace(-1.9,-.2,20)) fliplr(-linspace(-5,-2,7))];
x = (1-w.^2)./(1+w.^2).^2;
y = 2*w./(1+w.^2).^2;
حالا یک مقدار چرخش
xy = [0 x ;0 y ];
XY = [0 1;-1 0]*xy;
اگر به معادلات x,y دقت کنید می بینید هنگامی که w به سمت بینهایت میرود x,y برابر با صفر می شوند ولی در عمل نمی توان w را به سمت بی نهایت میل داد٬ پس صفر را خودمان اضافه کردیم.
هنوز یک مقدر پهن است.
XY = [0.7 0;0 1]*XY;
الان باید ماتریس هندسه را بنویسم
هر ستون این ماتریس مربوط به یک شکل است یعنی اگر بخواهیم معادله را همزمان برای دو شکل حل کنیم ماتریس دو ستون خواهد داشت.
در این مثال یک شکل داریم و ماتریس یک ستونی است.
اگر هندسه :
به شکل دایره باشد در سطر اول عدد ۱ ٬ در سطر دوم و سوم به ترتیب مختصات x,y مرکز دایره و در سطر ۴ شعاع دایره را می نویسیم.
به شکل چند ضلعی باشد در سطر اول عدد ۲ ٬ در سطر دوم تعداد اضلاع(n) ٬ در n سطر بعدی xها و در n سطر بعد از آن y ها می نویسیم.
به شکل چهار ضلعی باشد در سطر اول عدد ۳ ٬ را می نویسیم. سطرهای بعدی را مانند حلت چند ظلعی پر می کنیم.
به شکل بیضی باشد در سطر اول عدد ۴ ٬ در سطر دوم و سوم به ترتیب مختصات x,y مرکز بیضی در سطر چهار و پنج اندازه قطر بزرگ و کوچک بیضی و در سطر ششم زاویه چرخش قرار می گیرد.
حالا میتوانیم ماتریس هندسه بنویسیم.
شکل ما از نوع چند ضلعی است پس در سطر اول عدد 2 را مینویسیم.توابع x,y دو تا صفر دارند، یکی در بینهایت و یکی در منفی بینهایت ولی ما فقط یکی را اضافه کردیم چون هر نقطه را فقط 1 بار باید بیاوریم.
x = XY(1,:)';
y = XY(2,:)';
n = length(x);
gd = [2;n;x;y];
dl = decsg(gd);
تا اینجا توانستیم که ماتریس هندسه و ماتریس هندسه تجزیه شده را بدست آوریم. اگر به ارلی در اول مقاله آوردم نگاه کنید میبیند که 3 مرحله اول حل الگوریتم معادلات پارهای را انجام دادهایم. این 3 مرحله را میتوان در یک ام-فایل خلاصه کرد. برای نوشتن این ام-فایل از دستور wgeom استفاده میکنیم.
fid=wgeom(dl,'cardiodgeom')
این دستور یک ام-فایل با اسم cardiodgeom ایجاد میکند. اگر به هر دلیلی این فایل ایجاد نشود مقدار fid برابر با -1 میشود.
ادامه دارد...
معادلات هذلولی ۲
مثال مطلب قبلی در نظر بگیرید٬ یک بار دیگر می خواهیم این مثال را حل کنیم.
اولین تغییری که در حل مثال می دهیم٬ نحوه شبکه بندی مسئله است.به نظر می آید که تعداد گره ها برای حل مسئله کافی نباشد با استفاده از دستور refinemesh تعداد گره ها بیشتر می کنیم.با زیاد شدن گره ها تعتداد محاسبات و زمان آن بالا تر می رود ولی ممکن است که نتیجه کار چندان تغییر نکند و یا بهتر باشد که نوع شبکه را عوض کنیم. برای درک بهتر می توانید به کتاب هایی در مورد روش تفاضل محدود-متلب از این روش استفاده می کند- مراجعه کنید.
[p,e,t]=initmesh(g);
[p,e,t]=refinemesh(g,p,e,t);
x=p(1,';
y=p(2,';
u0=atan(cos(pi/2*x));
ut0=3*sin(pi*x).*exp(cos(pi*y));
tlist=linspace(0,5,50);
uu=hyperbolic(u0,ut0,tlist,b,p,e,t,1,0,0,1);
معادلات هذلولی
با استفاده از رابط گرافیکی pdetool حل معادلات پاره ای بسیار ساده است اما بهتر است كه برای درك بهتر، مسئله را به صورت دستی و با نوشتن کد حل کنیم.
فرض کنید بخواهیم معادله موج زیر را حل کنیم :
معادله موج از نوع معادلات هذلولی است و برای حل آن از دستور hyperbolic استفاده میكنیم.
u1=hyperbolic(u0,ut0,tlist,b,p,e,t,c,a,f,d)
منظور از
u0 و ut0 شرایط اولیه
tlist بازه زمانی حل مسأله
b شرایط مرزی
p,e,t تقسیم بندی مسأله
c,a,f,d ضرایب معادله
می باشد
نوشتن شرایط مرزی را بعدا توضیح می دهم و لی برای این مسئله از pdetool استفاده می كنیم، یك pdetool باز كنید و یك مربع بكشید، شرایط مرزی را مشخص كنید و در متغیرهای b,g ذخیره كیند.
حل نهایی مسئله به این صورت میشود.
[p,e,t]=initmesh(g);
x=p(1,:)';
y=p(2,:)';
u0=atan(cos(pi/2*x));
ut0=3*sin(pi*x).*exp(cos(pi*y));
tlist=linspace(0,5,50);
uu=hyperbolic(u0,ut0,tlist,b,p,e,t,1,0,0,1);
for i=1:50
pdesurf(p,t,uu(:,i))
drawnow
end
شاید شما روش من را نپسندید، اینكه یك چیزایی را توضیح نمی دهم و مطالبم گنگ به نظر میآید.
به نظر من اگر واقعا به این چیزها احتیاج دارید باید برایش زحمت بكشید.
رسم pde
در مطالب قبلی مقدمات استفاده از pdetoolbox را مرور کردیم و فرض می کنیم که بلد هستید جواب pde را در متغیری مثل u و تقسیم بندی مسئله (mesh) را در متغیر هاب p,e,t ذخیره کنید.
دستور pdemesh برای رسم تقسیم بندی استفاده می شود.
pdemesh(p,e,t)
pdemesh(p,e,t,u)
h=pdemesh(p,e,t)
h=pdemesh(p,e,t,u)
حالات اول دستور٬ تقسیم بندی سیستم را به صورت دو بعدی رسم می کند.
حالت دوم این کار رابه صورت سه بعدی نمایش می دهد٬ ارتفاع هر گره به متغیر u (دما) بستگی دارد.
اما اگر بخواهیم دمای هر گره را بر روی خود آن نشان دهیم به صورت عمل می کنیم:
pdemesh(p,e,t)
hold on
متغیر p دو سطر دارد که سطر اول مولفه x و سطر دوم مولفه y است.تعداد ستون های p به اندازه تعداد گره ها است.
متغیر u یک ستون و به تعداد گره ها سطر دارد. یعنی هر سطر آن متناظر با یک ستون p است.
حالا متغیر u را بتبدیل به رشته گرده و بر روی شکل قرار می دهیم
uu=num2str(u);
nn=length(u);
for i=1:nn
text(p(1,i),p(2,i),uu(i,:))
drawnow
end
دوستی پرسیدن که در هنگام استفاده از plot با پیغام خطای زیر روبرو می شوند:
Attempt to execute SCRIPT plot as a function
احتمالا این دوستمون از یک متغیر یا یک ام فایل به اسم plot استفاده کرده است. برای اینکه با این خطا و خطاهایی شبیه به این روبرو نشوید اسم متغیرها را به دقت انتخاب کنید
حل pde
حل معادلات دیفراسیل جزیی قسمت مهمی از ریاضیات مهندسی است در متلب جعبه ابزار جداگانه ای برای حل اینگونه معادلات قرار داده شده است .مرور کردن این جعبه ابزار به اندازه نوشتن یک کتاب وقت میگیرد.در فایل زیر توضیحات مختصری در مورد نحوه حل این گونه معادلات را نوشته ام.
http://matlabedu.googlepages.com/heat.pdf
نوشته های پیشین ...
هرگونه استفاده تجاری از مــطالب این سایت بصورت
كتاب٬ نشریه٬ وب و ... ممنوع میباشد
All right
reserved©2005
Amin Bashi