سوالات و مشکلات مدل سازی و کدنویسی در نرم افزار متلب - Matlab - تخصصی مهندسی شیمی

JU JU

کاربر حرفه ای
کاربر ممتاز
سلام.مرسي از توجه شما(ju ju) !
t=زمان
با استفاده از run 1 و run 2 يك جواب براي n و m و k بايد بدست بياريم.
سوالم درسته.در مورد سرعت چيزي بهمون نگفتن.
در مورد مثلث بايد به اين صورت باشه چيز ديگه اي به ذهنم نمي رسه!:
a+b>c & a+c>b & b+c>a

سلام
حل سوال شما در رابطه با اضلاع مثلث به صورت زیر هستش
سه عدد رو از ورودی گرفته، اگه اعداد وارد شده ضلع‌های مثلث باشند اونا رو چاپ می‌کنه، اگرم نباشه میگه از نو سعی کنید :w05:
بعد از این عمل از شما می‌پرسه می‌خواین دوباره اعداد رو وارد کنید یا نه ؟ که شما باید yes یا no رو وارد کنید، اگه yes رو وارد کنید برنامه از اول اجرا میشه و اگه گزینه‌ای غیر از yes وارد کنید، برنامه متوقف میشه :w01:

کد:
for question='yes'
     for i=1:3
         A(i)=input('insert A:   ');
     end
     if A(1)+A(2)>A(3) & A(1)+A(3)>A(2) & A(2)+A(3)>A(1)
         disp('great, your number is correct');
         disp([A]')
     else
         disp('try again, your insert number incorrect')
     end
     
     question=input('do you want try again ( yes or no) ?  ','s');
end
در رابطه با اون یکی درخواستتون، من سعیم رو کردم، جوابی که بدست میاد اشتباه هستش
شما یبار مسئله رو با دست حل کنین و اون رو برا من بزارین، من مطلبش رو برا شما میزارم
 
آخرین ویرایش:

john zink

کاربر حرفه ای
کاربر ممتاز
d^2T/dx^2+d^T2/dy^2=0

T(0,y)=0
T(1,y)=0
T(x,0)=100
T(x,1)=100
اینو میشه یکی برنامه نویسیش کنه با متلب؟
 

john zink

کاربر حرفه ای
کاربر ممتاز
du/dt=a d^2u/dx^2

u(0,t)=100
u(1,t)=100
u(x,0)=30
a=0.03
اینو چی؟
 

حــامد

مدیر بازنشسته
کاربر ممتاز
d^2T/dx^2+d^T2/dy^2=0

T(0,y)=0
T(1,y)=0
T(x,0)=100
T(x,1)=100
اینو میشه یکی برنامه نویسیش کنه با متلب؟

du/dt=a d^2u/dx^2

u(0,t)=100
u(1,t)=100
u(x,0)=30
a=0.03
اینو چی؟


سلام اولی که معادله لاپلاسه و دومی یک معادله pde درجه دوم در جهت x هست و به راحتی قابل حله اگر لازمه حلش و بذارم
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
ممنون میشم برام زودی توضیح بدین، بسیار نیازمند یاریتان هستم :gol:

[FONT=&quot]
کد:
[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=forestgreen][FONT=&quot]% jujulin[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]clear,clc[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=forestgreen][FONT=&quot]% inputs[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]F=1;                 [/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% you should change it[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]L(7,1)=rand;         [/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% you should change it[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]h(1:7,1)=rand(7,1);  [/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% you should change it[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]lam(1:6,1)=rand(6,1);[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% you should change it[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]H(2:7,1)=rand(6,1);  [/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% you should change it[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=forestgreen][FONT=&quot] [/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]A=zeros(6,6);b=zeros(6,1);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]A(1,1)=h(1)-lam(1)-H(2);A(1,2)=H(2)-h(2);b(1)=-F*lam(1);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][COLOR=black][FONT=&quot] r=2:5[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]    A(r,r-1)=lam(r);A(r,r)=h(r)-lam(r)-H(r+1);A(r,r+1)=H(r+1)-h(r+1);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=blue][FONT=&quot]end[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]A(6,5)=lam(6);A(6,6)=h(6)-lam(6)-H(7);b(6)=-L(7)*(H(7)-h(7));[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot] [/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]L(1:6)=A\b[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]
[/FONT]
[FONT=&quot][/FONT]

خطوطي از برنامه كه جلوشون نوشتم [FONT=&quot]you should change it[/FONT] وروديهاي مسأله هستند؛ شما بايد تغييرش بديد. من از عددهاي بختي براي تست برنامه استفاده كردم.
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
d^2T/dx^2+d^T2/dy^2=0

T(0,y)=0
T(1,y)=0
T(x,0)=100
T(x,1)=100
اینو میشه یکی برنامه نویسیش کنه با متلب؟

[FONT=&quot]
کد:
[/FONT]
  [COLOR=forestgreen][FONT=&quot]% jzheats[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]clear,clc[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]nx=10;ny=10;hx=1/nx;hy=1/ny;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]x=0:hx:nx*hx;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]by0=100;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]byn=100;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]y=0:hy:ny*hy;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]bx0=0;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]bxn=0;[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot][T,iter]=HeatS(nx,hx,ny,hy,bx0,bxn,by0,byn);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]T=rot90(T,1);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]iter[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=forestgreen][FONT=&quot]% Graph[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]T=flipud(T);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot][c,h]=contour(T);clabel(c,h),colorbar[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]title([/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'Temperature Distribution'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]xlabel([/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'Node Number in x Direction'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]ylabel([/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'Node Number in y Direction'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot][m,n]=size(T);[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]set(gca,[/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'xtick'[/FONT][/COLOR][COLOR=black][FONT=&quot],1:n,[/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'ytick'[/FONT][/COLOR][COLOR=black][FONT=&quot],1:m)[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]axis([/FONT][/COLOR][COLOR=#A020F0][FONT=&quot]'equal'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR][FONT=&quot][/FONT]
  [COLOR=black][FONT=&quot]axis([1 n 1 m])[/FONT][/COLOR][FONT=&quot][/FONT]
  [FONT=&quot]
[/FONT]


اين هم خروجيش:


تابع HeatS كه در اين برنامه استفاده شده، يكي از تابعهاي كتاب شگردهاي عددي هست؛ مي‏تونيد از قسمت دانلود برنامه‏هاي كتاب وبلاگ من اين تابع و باقي تابعها و برنامه‏هاي كتاب شگردهاي عددي رو دانلود كنيد.
توضيح روش حلش رو هم اگه خواستيد در صفحه‏هاي 57 و 141 تا 144 كتاب نوشته‏ام.
 

حــامد

مدیر بازنشسته
کاربر ممتاز
du/dt=a d^2u/dx^2

u(0,t)=100
u(1,t)=100
u(x,0)=30
a=0.03
اینو چی؟

حل بوسیله PDETOOL
در خط فرمان pdetool را تایپ نمایید تا وارد محیط pdetool شوید
سپس یک مربع با اضلاع 1 رسم نمایید
و نوع معادله را heat transfer قرار میدهیم


وسپس از مد boundry گزینه boundry mode را انتخاب مینماییم
سپس بروی مرزها دبل کلیک کرده . شرط دریکله را انتخاب مینماییم
و برای مرزهای بالایی و پایینی دمای 100 و مرزهای راست و چپ دمای 0 را وارد مینماییم



و با فشردن pde solve مساله به راحتی حل میشود


 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
عدم سازگاري مرزينه و آغازينه

عدم سازگاري مرزينه و آغازينه

du/dt=a d^2u/dx^2

u(0,t)=100
u(1,t)=100
u(x,0)=30
a=0.03
اینو چی؟


صورت اين مسأله مشكل داره؛ چون مرزينه با آغازينه سازگار نيست.

u(0,t)=100 ==> u(0,0)=100
u(x,0)==30 ==> u(0,0)=30

u(1,t)=100 ==> u(1,0)=100
u(x,0)==30 ==> u(1,0)=30

اينها در صورتي سازگارند كه 30 با 100 برابر باشه.
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
du/dt=a d^2u/dx^2

u(0,t)=100
u(1,t)=100
u(x,0)=30
a=0.03
اینو چی؟

صورت اين مسأله مشكل داره؛ چون مرزينه با آغازينه سازگار نيست.

u(0,t)=100 ==> u(0,0)=100
u(x,0)==30 ==> u(0,0)=30

u(1,t)=100 ==> u(1,0)=100
u(x,0)==30 ==> u(1,0)=30

اينها در صورتي سازگارند كه 30 با 100 برابر باشه.
یکی از روشها پاره‏بندی معادله دیفرانسیل در بعد مکان و استفاده از کاسته‏های میانه‏ای هست:​

می‏بینید که با اعمال مرزینه، N-1 معادله دیفرانسیل رده یک در بعد زمان می‏مونه که باید همزمان حل کرد. این دستگاه معادلات دیفرانسیل یک مسأله با آغازینه (IVP) هست و با استفاده از تابعهای حل معادلات دیفرانسیل معمولی باآغازینه متلب قابل حل هستند. ابتدا دستگاه معادلات دیفرانسیل رو در یک تابع تعریف می‏کنیم:
کد:
  [COLOR=blue][FONT=&quot]function[/FONT][/COLOR][COLOR=black][FONT=&quot] dudt=cdPDE(t,u,a,N)[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]dx=1/N;[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]dudt=zeros(N-1,1);[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][COLOR=black][FONT=&quot] j=1:N-1[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] j==1[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]        uL=100;[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% Left[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]else[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]        uL=u(j-1);[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] j==N-1[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]        uR=100;[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% Right[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]else[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]        uR=u(j+1);[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]    dudt(j)=(a/dx^2)*(uR-2*u(j)+uL);[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]

بعد از تابع ode15s برای حل این دستگاه معادلات دیفرانسیل استفاده می‏کنیم. با توجه به اینکه یکی از ابعاد زمان هست، تغییرات دما رو می‏شه به صورت انیمیشن نشون داد.​
کد:
  [COLOR=forestgreen][FONT=&quot]% jz_cdPDE[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]clear, clc, close [/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]all[/FONT][/COLOR]
  
  [COLOR=black][FONT=&quot]a=0.03;[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]tspan=(0:0.1:6)';[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]N=50;[/FONT][/COLOR]
  
  [COLOR=black][FONT=&quot]dx=1/N;[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]x=(0:N)*dx;[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]u0=70+30*sin(pi*x(2:end-1));[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% initial value[/FONT][/COLOR]
  
  [COLOR=black][FONT=&quot][t,u]=ode15s(@cdPDE,tspan,u0,[],a,N);[/FONT][/COLOR]
  
  [COLOR=black][FONT=&quot]nt=length(t);[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][COLOR=black][FONT=&quot] k=1:nt[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]usol=[100,u(k,:),100];[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]    plot(x,usol,[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'b-o'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]title([[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'time = '[/FONT][/COLOR][COLOR=black][FONT=&quot],num2str(t(k))])[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]xlabel([/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'x'[/FONT][/COLOR][COLOR=black][FONT=&quot]), ylabel([/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'u'[/FONT][/COLOR][COLOR=black][FONT=&quot]), axis([0,1,0.9*min(u(:)),1.1*max(u(:))])[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] k==1, set(gcf,[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'DoubleBuffer'[/FONT][/COLOR][COLOR=black][FONT=&quot],[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'on'[/FONT][/COLOR][COLOR=black][FONT=&quot]), [/FONT][/COLOR][COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
  [COLOR=black][FONT=&quot]    drawnow[/FONT][/COLOR]
  [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]

  • برای اینکه مرزینه و آغازینه با هم سازگار باشند، آغازینه رو به صورت زیر تغییر دادم.
اگه خواستید آغازینه دیگری استفاده کنید خطی که کنارش نوشتم [FONT=&quot]initial value[/FONT] رو باید تغییر بدید.​
  • برنامه‏ها رو به اين پست پيوست كردم.

  • این یکی از روشهاست. روشهای دیگری هم هست. در ضمن می‏شه به جای حلقه for در تابع [FONT=&quot]cdPDE[/FONT] برای معادلات روند درآورد و با استفاده از ماتریسهای خلوت تابع نوشت.

  • در مورد چگونگی حل معادلات دیفرانسیل معمولی باآغازینه با متلب، به یکی از مراجع زیر مراجعه کنید.
راهنمای متلب
بخش 5 کتاب شگردهای عددی
  • در مورد چگونگی حل معادلات دیفرانسیل پاره‏ای به کمک متلب، به یکی از مراجع زیر مراجعه کنید.
راهنمای متلب
بخش 6 کتاب شگردهای عددی
  • در مورد نوشتن انیمیشن در متلب به یکی از مراجع زیر مراجعه کنید.
پويانمايي در متلب
راهنمای متلب
صفحه‏های 43 و 44 و 146 از کتاب شگردهای عددی
 

پیوست ها

  • PDE_Heat_1D.zip
    757 بایت · بازدیدها: 0
آخرین ویرایش:

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
عدم سازگاري مرزينه‏ها

عدم سازگاري مرزينه‏ها

d^2T/dx^2+d^T2/dy^2=0

T(0,y)=0
T(1,y)=0
T(x,0)=100
T(x,1)=100
اینو میشه یکی برنامه نویسیش کنه با متلب؟

صورت اين مسأله مشكل داره؛ چون مرزينه با آغازينه سازگار نيست.

u(0,t)=100 ==> u(0,0)=100
u(x,0)==30 ==> u(0,0)=30

u(1,t)=100 ==> u(1,0)=100
u(x,0)==30 ==> u(1,0)=30

اينها در صورتي سازگارند كه 30 با 100 برابر باشه.

يادم رفته بود كه بگم اون مسأله انتقال حرارت دوبعدي هم در چهار گوشه صفحه شبيه همين مشكل انتقال حرارت يك‏بعدي رو داره.
 

john zink

کاربر حرفه ای
کاربر ممتاز
یکی از روشها پاره‏بندی معادله دیفرانسیل در بعد مکان و استفاده از کاسته‏های میانه‏ای هست:​





می‏بینید که با اعمال مرزینه، N-1 معادله دیفرانسیل رده یک در بعد زمان می‏مونه که باید همزمان حل کرد. این دستگاه معادلات دیفرانسیل یک مسأله با آغازینه (IVP) هست و با استفاده از تابعهای حل معادلات دیفرانسیل معمولی باآغازینه متلب قابل حل هستند. ابتدا دستگاه معادلات دیفرانسیل رو در یک تابع تعریف می‏کنیم:​


کد:
[LEFT] [COLOR=blue][FONT=&quot]function[/FONT][/COLOR][COLOR=black][FONT=&quot] dudt=cdPDE(t,u,a,N)[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]dx=1/N;[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]dudt=zeros(N-1,1);[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][COLOR=black][FONT=&quot] j=1:N-1[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] j==1[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]        uL=100;[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% Left[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]else[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]        uL=u(j-1);[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] j==N-1[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]        uR=100;[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% Right[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]else[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]        uR=u(j+1);[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]    dudt(j)=(a/dx^2)*(uR-2*u(j)+uL);[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]end[/FONT][/COLOR][/LEFT]


بعد از تابع ode15s برای حل این دستگاه معادلات دیفرانسیل استفاده می‏کنیم. با توجه به اینکه یکی از ابعاد زمان هست، تغییرات دما رو می‏شه به صورت انیمیشن نشون داد.​

کد:
[LEFT] [COLOR=forestgreen][FONT=&quot]% jz_cdPDE[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]clear, clc, close [/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]all[/FONT][/COLOR][/LEFT]
 
[LEFT] [COLOR=black][FONT=&quot]a=0.03;[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]tspan=(0:0.1:6)';[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]N=50;[/FONT][/COLOR][/LEFT]
 
[LEFT] [COLOR=black][FONT=&quot]dx=1/N;[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]x=(0:N)*dx;[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]u0=70+30*sin(pi*x(2:end-1));[/FONT][/COLOR][COLOR=forestgreen][FONT=&quot]% initial value[/FONT][/COLOR][/LEFT]
 
[LEFT] [COLOR=black][FONT=&quot][t,u]=ode15s(@cdPDE,tspan,u0,[],a,N);[/FONT][/COLOR][/LEFT]
 
[LEFT] [COLOR=black][FONT=&quot]nt=length(t);[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]for[/FONT][/COLOR][COLOR=black][FONT=&quot] k=1:nt[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]usol=[100,u(k,:),100];[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]    plot(x,usol,[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'b-o'[/FONT][/COLOR][COLOR=black][FONT=&quot])[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]title([[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'time = '[/FONT][/COLOR][COLOR=black][FONT=&quot],num2str(t(k))])[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]xlabel([/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'x'[/FONT][/COLOR][COLOR=black][FONT=&quot]), ylabel([/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'u'[/FONT][/COLOR][COLOR=black][FONT=&quot]), axis([0,1,0.9*min(u(:)),1.1*max(u(:))])[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]if[/FONT][/COLOR][COLOR=black][FONT=&quot] k==1, set(gcf,[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'DoubleBuffer'[/FONT][/COLOR][COLOR=black][FONT=&quot],[/FONT][/COLOR][COLOR=#a020f0][FONT=&quot]'on'[/FONT][/COLOR][COLOR=black][FONT=&quot]), [/FONT][/COLOR][COLOR=blue][FONT=&quot]end[/FONT][/COLOR]
 [COLOR=black][FONT=&quot]    drawnow[/FONT][/COLOR]
 [COLOR=blue][FONT=&quot]end[/FONT][/COLOR][/LEFT]

  • برای اینکه مرزینه و آغازینه با هم سازگار باشند، آغازینه رو به صورت زیر تغییر دادم.


اگه خواستید آغازینه دیگری استفاده کنید خطی که کنارش نوشتم [FONT=&quot]initial value[/FONT] رو باید تغییر بدید.​

  • برنامه‏ها رو به اين پست پيوست كردم.
  • این یکی از روشهاست. روشهای دیگری هم هست. در ضمن می‏شه به جای حلقه for در تابع [FONT=&quot]cdPDE[/FONT] برای معادلات روند درآورد و با استفاده از ماتریسهای خلوت تابع نوشت.
  • در مورد چگونگی حل معادلات دیفرانسیل معمولی باآغازینه با متلب، به یکی از مراجع زیر مراجعه کنید.

راهنمای متلب

بخش 5 کتاب شگردهای عددی
  • در مورد چگونگی حل معادلات دیفرانسیل پاره‏ای به کمک متلب، به یکی از مراجع زیر مراجعه کنید.

راهنمای متلب

بخش 6 کتاب شگردهای عددی
  • در مورد نوشتن انیمیشن در متلب به یکی از مراجع زیر مراجعه کنید.

پويانمايي در متلب

راهنمای متلب
صفحه‏های 43 و 44 و 146 از کتاب شگردهای عددی
سلام
خیلی ممنون از محبتتون
متشکرم
من به استادم گفتم ولی گفت که صورت مسئله هیچ مشکلی نداره.....
نمیدونم
کمی راهنمایی میکنید؟
چیکار میشه کرد؟من تاحالا اصلا حتی محیط متلب رو هم ندیدم
اما استادمون این سوالات رو داده میگه باید توی متلب برنامه نویسی کنی و باید پرزنت کنی-یعنی اصلا بیای توضیح بدی:cry: :cry:
ممکنه راهنمایی بفرمایید؟
از این کتابتون هم کمی بیشتر توضیح بدید؟کجا میتونم بخرمش؟کدوم انتشارات؟
چطور میتونم بامتلب کارکنم؟ازکجا شروع کنم؟
اگرچه برای پرزنت دیگه وقتی نمونده
اما خودم قصد دارم متلب رو بعد از ترم شروع کنم به یادگیریش.
بازهم تشکر
 

john zink

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

حــامد

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


چرا قابل حله تو پست های قبل بوسیله pdetool حلش و گذاشتم دوست خوبم meytim هم به روش دیگه جوابشو گذاشتن
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
خیلی ممنون از محبتتون
متشکرم
من به استادم گفتم ولی گفت که صورت مسئله هیچ مشکلی نداره.....
نمیدونم
کمی راهنمایی میکنید؟
چیکار میشه کرد؟من تاحالا اصلا حتی محیط متلب رو هم ندیدم
اما استادمون این سوالات رو داده میگه باید توی متلب برنامه نویسی کنی و باید پرزنت کنی-یعنی اصلا بیای توضیح بدی:cry: :cry:
ممکنه راهنمایی بفرمایید؟
از این کتابتون هم کمی بیشتر توضیح بدید؟کجا میتونم بخرمش؟کدوم انتشارات؟
چطور میتونم بامتلب کارکنم؟ازکجا شروع کنم؟
اگرچه برای پرزنت دیگه وقتی نمونده
اما خودم قصد دارم متلب رو بعد از ترم شروع کنم به یادگیریش.
بازهم تشکر

مشكلش خيلي سادس؛ يك نقطه در يك لحظه نمي‌تونه دو تا دما داشته باشه. اين به متلب يا هر زبان برنامه‌نويسي ديگر هيچ ربطي نداره؛ از نظر فيزيكي غيرممكنه. البته در برنامه‌نويسي براش مشكلي پيش نمياد، فقط از نظر فيزيكي غير ممكنه. در برنامه‌نويسي آخرين عددي كه به عنوان دما به يك نقطه (در اينجا يك گره) اختصاص داده مي‌شه در برنامه به كار گرفته مي‌شه؛ يعني به هيچ گره‌اي دو تا دما اختصاص داده نمي‌شه. در كل، اگه استادتون براش چنين چيزي ايراد نيست، چند تا معني بيشتر نداره؛ يا در اثر تكرار براش مثل غلط مصطلح دراومده، يا بهش توجه نكرده (يعني نميدونه)، يا برنامه‏نويسي رو به فيزيك مسأله فروخته. بنابراين شما هم مته به خشخاش نذاريد (البته با اين اوصاف ممكنه روشهاي ديگري هم مد نظرش باشه، ولي اون روشها هم حدوداً به همين جوابها خواهند رسيد).​
در مورد كتابم هم لينكش رو داده بودم؛ در مورد خود كتاب و انتشاراتش اونجا توضيح داده‌ام.​
http://mmnrecipes.blogspot.com
 
آخرین ویرایش:

meytim

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

خيلي وقت ندارم، واسه همين سعي مي‌كنم به طور خلاصه چند متلب رو بگم:​

  • مسأله پست 96 معادله انتقال حرارت پاياي دوبعدي در يك صفحه مستطيلي‌شكل هست، كه بهش معادله لاپلاس مي‌گن. لاپلاس اسم معادله هست، نه روش حلش. من در پست 101 اين معادله رو با استفاده از كاسته‌هاي ميانه‌اي (Central Differences) به يك دستگاه معادله جبري تبديل كردم و اون معادلات خطي رو به روش گوس ـ سايدل حل كردم. در پست 102همين معادله رو آقا حامد با استفاده از pdetool حل كرده (البته در ارجاع پست مربوط به صورت مسأله به جاي پست 96، اشتباهاً پست 97 آورده شده كه بايد اصلاح بشه). pdetool از پارَكهاي بسته (Finite Elements) براي حل معادله‌ها استفاده مي‌كنه.
  • مسأله پست 97 معادله انتقال حرارت زمانچرخ در يك ميله متناهي هست. من در پست 109 اين معادله رو با استفاده از كاسته‌هاي ميانه‌اي در بعد مكان، اون رو به يك دستگاه معادلات ديفرانسيل باآغازينه (IVP) تبديل كردم و اون معادلات ديفرانسيل رو با استفاده از روش NDF حل كردم. اين معادله رو با استفاده از دستور pdepe هم مي‌شه حل كرد (پست 81 رو كه آقا حامد زحمتش رو كشيدند ببينيد).
 

sepantaaa

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

elham-a

عضو جدید
یه مساله مهندسی شیمی!!!

یه مساله مهندسی شیمی!!!

سلام استادمون گفته یه مساله مهندسی شیمی طرح کنید و با matlab حلش کنید!! به طوری که:
از يكي از حلقه هاي while يا for استفاده نمايد.
تعدادي از مشخصات مساله را به صورت ورودي از كاربر بگيرد
شامل قسمت هايي براي چك كردن درستي اطلاعات ورودي كاربر بوده و در صورتنادرستبودن آنها هشداري به كاربر ارايه نمايد. مانند شرط مخالف 1 بودن مجموع جز مولي و يابيشتر از 100 بودن درصد تبديل يك واكنشگر و غيره (متناسب با برنامه شما )
قسمتي از خروجي هاي برنامه را به صورت نمودار ارايه نمايد.
از دستور nargin و nargout استفاده نمايد.
قسمتي از خروجي ها را در يك فايل متني ذخيره نمايد.
تا آنجا كه ممكن است كلي بوده و براي حالت هاي مختلف ورودي، قابل حل باشد
از يكي از توابعي كه ورودي آنها يك تابع است استفاده نمايد. مانند fzero , feval
میتونید یه مساله برام پیدا کنید؟ خیلی سخت نباشه چون زیاد وقت ندارم که حلش کنم!!!
ممنون
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
این دستور قدر مطلق عدد رو برمی‌گردونه
کد:
abs(-1)= 1
abs(-2.03)=2.03
حالا یه سوالی دارم
از دوستور while استفاده کردم، به اینگونه که ...
کد:
[COLOR=Blue]while[/COLOR] abs((A_ave./A)-1)>tolerance

statements

[COLOR=Blue]end[/COLOR]
A_ave یه عدد و A یه ماتریس ستونی هستش، می‌خوام این دستور به گونه‌ای باشه که حتی وقتی یکی از اعداد دورن ماتریس ساخته شده
کد:
abs((A_ave./A)-1)
بزرگتر از تلرانس باشه، چرخه انجام بشه، ولی به گونه‌ای که من در بالا نوشتم، حتی اگه یکی از اعداد ماتریس کوچکتر بشه چرخه متوقف می‌شه
من بخوام زمانی که همه اعداد درون ماتریس کوچکتر بشه، اون موقع چرخه متوقف بشه، باید چیکار کنم ؟

البته من مسئله رو حل کردم، در واقع زرنگی کردم که این نمی‌شه جواب مسئله، قطعن باید یه روش خوب باشه
روشی که به کار بردم اینه
کد:
[LEFT][COLOR=Blue]while[/COLOR] sum(abs(A)) > N*tolerance

     statement

[COLOR=Blue]end[/COLOR][/LEFT]
به اینصورت که آرایه‌های ماتریس A رو با هم جمع می‌کنه، و N تعداد آرایه‌های ماتریس A هستش که در تلرانس ضرب شده

خوب من باید چیکار کنم ؟

دستور any و all رو از راهنما بخونيد؛ مشكلتون حل مي‏شه.
 

amir.reza.2

عضو جدید
من تا یه جایی یه برنامه رو نوشتم که خوردم به یه سه معادله سه مجهول

با فرمان / حل کردمش ولی حالا میخوام از جواباش استفاده کنم

چه جوری میتونم حالیش کنم که سه تا جواب رو با سه تا آرایه بشناسه؟

مثلا x1 , x2 , x3 بده به من نه سه تا x
 

sepantaaa

عضو جدید
کاربر ممتاز
حامد جان کمک

حامد جان کمک

سلام
سوال از من اینو خواسته:twisted:
همه ی ریشه های ششم1- را بدست اورید:evil:
z^6+1=0
حالا zk ما اینه

zk=[(cos*2*k*pi+pi)/6+(isin*2*k*pi+pi)/6]
k=0 ,1,2,3,4,5
k هر بار که بجای کی اون اعدا رو قرار بدیم یه جواب می گیریم


رو حساب می کنیم z0,z1,z2,z3,z4,z5 یعنی ما
حالا باید با مطلب گرافشو رسم کنیم z0 تا z5 یعنی
z0= sqrt3/2+i/2مثلا جواب
یا z1 میشه z1=i
z2=-sqrt3/2+i/2
z3=-sqrt3/2-i/2
z4=-i
z5=sqrt3/2-i/2
z0 تا z5 حالا باید گراف رو رسم کنیم
اینه منظور من حامد جان
استادمون گفت 6 تا نقطه است که روی یه دایره رسم میشه یعنی روی دایره اون شش تا نقطه مشخص می شه
ممنونم
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
سوال از من اینو خواسته:twisted:
همه ی ریشه های ششم1- را بدست اورید:evil:
z^6+1=0
حالا zk ما اینه

zk=[(cos*2*k*pi+pi)/6+(isin*2*k*pi+pi)/6]
k=0 ,1,2,3,4,5
k هر بار که بجای کی اون اعدا رو قرار بدیم یه جواب می گیریم

رو حساب می کنیم z0,z1,z2,z3,z4,z5 یعنی ما
حالا باید با مطلب گرافشو رسم کنیم z0 تا z5 یعنی
z0= sqrt3/2+i/2مثلا جواب
یا z1 میشه z1=i
z2=-sqrt3/2+i/2
z3=-sqrt3/2-i/2
z4=-i
z5=sqrt3/2-i/2
z0 تا z5 حالا باید گراف رو رسم کنیم
اینه منظور من حامد جان
استادمون گفت 6 تا نقطه است که روی یه دایره رسم میشه یعنی روی دایره اون شش تا نقطه مشخص می شه
ممنونم

روش اول:
کد:
z=roots([1 0 0 0 0 0 1])
plot(z,'o')
axis square
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
سوال از من اینو خواسته:twisted:
همه ی ریشه های ششم1- را بدست اورید:evil:
z^6+1=0
حالا zk ما اینه

zk=[(cos*2*k*pi+pi)/6+(isin*2*k*pi+pi)/6]
k=0 ,1,2,3,4,5
k هر بار که بجای کی اون اعدا رو قرار بدیم یه جواب می گیریم

رو حساب می کنیم z0,z1,z2,z3,z4,z5 یعنی ما
حالا باید با مطلب گرافشو رسم کنیم z0 تا z5 یعنی
z0= sqrt3/2+i/2مثلا جواب
یا z1 میشه z1=i
z2=-sqrt3/2+i/2
z3=-sqrt3/2-i/2
z4=-i
z5=sqrt3/2-i/2
z0 تا z5 حالا باید گراف رو رسم کنیم
اینه منظور من حامد جان
استادمون گفت 6 تا نقطه است که روی یه دایره رسم میشه یعنی روی دایره اون شش تا نقطه مشخص می شه
ممنونم

روش دوم:
کد:
k=0:5;t=(2*k*pi+pi)/6;
z=cos(t)+i*sin(t)
plot(z,'o')
axis square
 

sepantaaa

عضو جدید
کاربر ممتاز
سلام دوستان من

سلام دوستان من

سلام حامد جان ممنونم ازت:gol:
از دوست عزیز دیگرمون هم ممنونم و امیدوارم که هر دو موفق باشین:heart:
اگر اشتباه نکنمmeytin عزیز;)
امیدوارم که لطفتونو جبران کنم:smile:
راستی حامد یه مشکل پیش اومده البته برای من:(
می تونی برای اون مشتقات جزئی که دوتا اولی رو رسم کردی و حل کردی واسه 20 جمله ی اول گرافش رو ترسیم کنی ؟:twisted:
اون گرافه واسه من خیلی مهمه:crying2:
دمتون گرم
 

shahram_vzvz

عضو جدید
با سلام
من چند تا دستور براي مطلب مي خواستم :
1-سياه و سفيد كردن عكس رنگي با استفاده و بكار گرفتن از ماتريس و تبديل به ماترسي صفر و يك
2-بزرگ نمايي 2*2
3-كوچك نمايي 1/2 در محور x ها و 1/2 در محور y ها

ممنون مي شم كمكم كنيـــــــــــــد
 

reactor

عضو جدید
با سلام
ممنون میشم در نوشتن این برنامه بمن کمک کنید
برنامه ای که آرایه های A وB را به ترتیب با 15 و 25 عنصر در ورودی دریافت کرده کرده سپس آرایه A را به صورت صعودی و آرایه Bرا بصورت نزولی مرتب کرده سپس آرایهA را که ممکن است حاوی عناصر تکراری باشد با آرایه B که آن نیز ممکن است حاوی عناصر تکراری باشد ادغام نماید و آرایه مرکب C حاصل از ترکیب AوB را بصورت نزولی ایجاد کند بطوریکه عنصر تکراری در آن وجود نداشته باشد سپس انرا به عنوان خروجی برگرداند.
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
با سلام
ممنون میشم در نوشتن این برنامه بمن کمک کنید
برنامه ای که آرایه های A وB را به ترتیب با 15 و 25 عنصر در ورودی دریافت کرده کرده سپس آرایه A را به صورت صعودی و آرایه Bرا بصورت نزولی مرتب کرده سپس آرایهA را که ممکن است حاوی عناصر تکراری باشد با آرایه B که آن نیز ممکن است حاوی عناصر تکراری باشد ادغام نماید و آرایه مرکب C حاصل از ترکیب AوB را بصورت نزولی ایجاد کند بطوریکه عنصر تکراری در آن وجود نداشته باشد سپس انرا به عنوان خروجی برگرداند.

من با استفاده از input در برنامه‏ها مخالفم، اما ظاهراً صورت مسأله چنين چيزي رو خواسته:
کد:
clear, clc
disp('Input A [1x15].'), A=input('A  = ')
disp('Input B [1x20].'), B=input('B  = ')

Aasc=sort(A), Bdes=sort(B,2,'descend')

C=[A,B]; Cdes=sort(C,2,'descend');
dC=diff(Cdes);ind=find(~dC);
Cdes(ind)=[]

اين هم يك نمونه از اجراش به كمك عددهاي بختي:
کد:
Input A [1x15].
A  = round(rand(1,15)*20)

A =

  Columns 1 through 13

     3    19    19    12     1     5     7    16     0     1     3    13    15

  Columns 14 through 15

    13     9

Input B [1x20].
B  = round(rand(1,20)*20)

B =

  Columns 1 through 13

    11     6    15     4    14     4     7    13    16     2    19    16    10

  Columns 14 through 20

     9     9     6    10    10    16    16


Aasc =

  Columns 1 through 13

     0     1     1     3     3     5     7     9    12    13    13    15    16

  Columns 14 through 15

    19    19


Bdes =

  Columns 1 through 13

    19    16    16    16    16    15    14    13    11    10    10    10     9

  Columns 14 through 20

     9     7     6     6     4     4     2


Cdes =

  Columns 1 through 13

    19    16    15    14    13    12    11    10     9     7     6     5     4

  Columns 14 through 17

     3     2     1     0
 

negin1313

عضو جدید
سلام
یه راهنمایی رفتم واسه کلاسای مطلب ثبت نام کنم بعدش گفتن ما اصول مطلب رو یادتون میدیم اما من اینارو به طور کلی میدونم اما نمیتونم مسئله حل کنم شما پیشنهادی ندارید که منطق حل مسئله ها واسم راحت بشه و بتونم حلشون کنم
 

JU JU

کاربر حرفه ای
کاربر ممتاز
سلام
یه راهنمایی رفتم واسه کلاسای مطلب ثبت نام کنم بعدش گفتن ما اصول مطلب رو یادتون میدیم اما من اینارو به طور کلی میدونم اما نمیتونم مسئله حل کنم شما پیشنهادی ندارید که منطق حل مسئله ها واسم راحت بشه و بتونم حلشون کنم

اصول حل مسئله، اینه که شما یه الگوریتم قوی رو رسم کنید توی ذهنتون، و طبق الگوریتم پیش برین
وقتی الگوریتم درست بشه، خود بخود توی محیط کامپیوتر برنامه رو می‌نویسین
 
بالا