PDA

View Full Version : مشکل این کد کچاست



es.es.es
یک شنبه 20 بهمن 1392, 20:51 عصر
سلام دوستان من اصلا با متلب برنامه نویسی نکردم یکی از استاد ها برای پروژه یه تیکه کد بهم داده گفته مشکلشو برطرف کنید یه جورایی خودشم بلد نیست چون برنامه نویس نیست این کد با فرمول های خودش میخواد یه نمودار رسم کنه ولی نمودارش درست در نمیاد و یه خط صاف میشه میخوام ببینم مشکلش کجاست

clc
clear
k0=7*10^-7;
h1=10^(-5);
h2=10^(-11);
T(100,1)=300;
t(1)=10^-9;
r(100)=10^(-3);
%-------------------------------------------------------------
for j1=99:1:-1
for n1=1:99
n=n1*h2+h2;
j=j1*h1+h1;
t(n1)=n;
r(j1)=j;
T(j1,1)=300;
T(j1,n1+1)=k0*h2*((2/r(j1)*(T(j1+1,n1)-T(j1,n1))/h1+(T(j1+1,n1)-2*T(j1,n1)+T(j1-1,n1))/h1^2+3*(1/T(j1,n1))*
((T(j1+1,n1)-T(j1,n1))/h1)^2)*T(j1,n1)^3)+T(j1,n1);
end
end
%----------------------------------------------
figure
plot(r,T)
title('soluttion numerical temperature');
legend(numerical,100 mesh points,0);
xlable('raduce r');
ylable('tempreature T');
%-------------------------------------------------------------
figure
plot(t,T)
title('soluttion numerical temperature');
legend(numerical,100 mesh points,0);
xlable('Time t');
ylable('tempreature T');

niloofar_f
دوشنبه 21 بهمن 1392, 16:05 عصر
سلام
کاش فرمول رو گذاشته بودید!
حلقه for اولی هم ایراد داره باید می نوشتید: for j1=99:-1:1
T که فکر کنم فرمول اصلی هست ایراد داره چون قسمت T(j1-1,n1) باعث میشه که ماتریس به عنصر صفر ارجاع بده
باید توجه کرد که متلب بر اساس ماتریس عمل میکنه و اندیس صفر غیر قابل قبول هست
ضمنا متلب به حروف کوچک و بزرگ حساسه!
اگه فرمول رو بذارید شاید بتونم کد رو تصحیح کنم
موفق باشید

es.es.es
دوشنبه 21 بهمن 1392, 18:25 عصر
اين عكسشه البته اينجا توان ٥/٢ هست كه اصلش همين هست ولي توي اين كد كه اينجا گذاشتم توان ٣ هست براي راحتي
(فرمول بالايي داخل عكس مهم نيست)

niloofar_f
سه شنبه 22 بهمن 1392, 11:27 صبح
فکر کنم باید از تغییر متغیر برای حل معادله دیفرانسیل استفاده بشه
مثل لینک زیر:
http://www.matlabsite.com/163/how-to-solve-ode-in-matlab.html

ماتریس T و t باید ابعادشون یکی باشه در حاالی که در این کد بعد T تغییر داده شده!

hakim22
پنج شنبه 24 بهمن 1392, 09:19 صبح
اساسا این کد سراسر اشتباه است !
این معادلات دیفرانسیلی هستند و نمیشود آنها را با جاگذاری اعداد به این روش ترسیم کرد. در هیچ جای این برنامه اثری از کدمربوط به حل معادله ی دیفرانسیلی دیده نمیشود.
1- یا باید با دستور dsolve معادله ی دیفرانسیلی را حل کنید و بعد مقدار گذاری و ترسیم کنید
2-یا همانند مثالی که دوستمون گفتن معادله رو به صورت یک تابع مجزا تعریف کنید و به صورت عددی و با استفاده از ode ها حل کنید.
* مشخص کردن شرایط مرزی هم در این دو روش ممکن است.

matcode.ir
پنج شنبه 01 اسفند 1392, 20:50 عصر
دوستان عزیزی که در انجام پروژه های متلب خود دچار مشکل شده اند می توانند برای رفع مشکلات خود به سایت زیر مراجعه کنند:
http://www.matcode.ir