سئوالات و مشکلات در متلب (MATLAB)

(هادی)

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

خلاصه به نظر من، نوشتن برنامه برای حل معادله به جای استفاده از دستورهای آماده، یا جنبه آموزشی و تمرینی داره،
یا به خاطر اینه که بدونید داخلش چه خبره، همه چیزش دست خودتون باشه، و وابستگی کار شما به دستورهای آماده، حداقل بشه
 

meytim

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

روشی که fsolve برای حل دستگاههای معادلات استفاده می کنه، در حقیقت از همون فرمول ساده نیوتن ـ رافسون شروع شده، اما یک سری گزینه های دیگه بهش اضافه شده تا برخی از معایب روش نیوتن ـ رافسون رو از بین ببره. برای این منظور این روش در هر گام یک تابع ارزش نامنفی رو که از مجموع نماهای دوم مانده های معادله ها به دست میاد با استفاده از روشهای بهگزینی به سمت کمینه میل میده. با این کار احتمال اینکه جوابهای پرت به دست بیارید رو کم میکنه. توی fsolve شما می تونید روش بهگزینی مورد استفاده رو انتخاب کنید و اگه لازم بود برای متغیرها قید تعریف کنید.
برای مطالعه بیشتر می تونید به راهنمای نرم افزار مراجعه کنید. برای مطالعه (کمی نادقیق تر) می تونید به کتاب زیر مراجعه کنید:
Numerical Recipes, the Art of Scientific Computing, by Press et. al
 

Hadie89

عضو جدید
سلام
من یک عبارت دارم du/dz ، رابطه u با z رو داریم، برای محاسبه این جمله آیا از مشتق گیری عددی استفاده کنیم یا دستی مشتق بگیریم و جاگذاری کنیم؟
 

(هادی)

کاربر فعال تالار ریاضی ,
سلام
من یک عبارت دارم du/dz ، رابطه u با z رو داریم، برای محاسبه این جمله آیا از مشتق گیری عددی استفاده کنیم یا دستی مشتق بگیریم و جاگذاری کنیم؟
سلام
مطمئنا مشتق دستی از مشتق عددی دقیق تره
 

Hadie89

عضو جدید
سلام
یک سوال داشتم، یه PDE دارم در مختصات استوانه ای ، اگه بخام با روش فاینایت دیفرنس حلش کنم گام هایی که در نظر میگیرم فرق خاصی با دیسکریتایز کردن تو مختصات کارتزین نداره؟
 

mitra*

کاربر بیش فعال
کاربر ممتاز
بچه ها من یه ماتریس دارم که یه ستونش nan میشه چیکار باید بکنم؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
یک سوال داشتم، یه PDE دارم در مختصات استوانه ای ، اگه بخام با روش فاینایت دیفرنس حلش کنم گام هایی که در نظر میگیرم فرق خاصی با دیسکریتایز کردن تو مختصات کارتزین نداره؟

نه فرقی نداره.
 

mitra*

کاربر بیش فعال
کاربر ممتاز

vahid_007_006

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

این خط رو Ca=vpa([1 0 0 0;0 1 0 0;-48.6 -1.26 48.6 0]); از تو دو تا فاکشن دلیت کن بعد سیو کن بعد ران کن درست میشه به من این جواب رو داد
 

mitra*

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

این خط رو Ca=vpa([1 0 0 0;0 1 0 0;-48.6 -1.26 48.6 0]); از تو دو تا فاکشن دلیت کن بعد سیو کن بعد ران کن درست میشه به من این جواب رو داد


خب پس چطوری ماتریس Ca رو تشخیص بده چیه؟ میشه لطفا پاسخی که گرفتین رو بهم بگین؟
من وقتی ماتریس Ca رو حذف میکنم این error رو میده
Not enough input arguments.
راستی ماتریس حاصله باید یک ماتریس با 3 سطر و 4 ستون باشه.
 
آخرین ویرایش:

(هادی)

کاربر فعال تالار ریاضی ,
خب پس چطوری ماتریس Ca رو تشخیص بده چیه؟ میشه لطفا پاسخی که گرفتین رو بهم بگین؟
من وقتی ماتریس Ca رو حذف میکنم این error رو میده
Not enough input arguments.
راستی ماتریس حاصله باید یک ماتریس با 3 سطر و 4 ستون باشه.

منظورشون اینه که از توی فایل توابع qr و gramsch پاک کنید. بعد فایل untitled رو اجرا کنید
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز

mitra*

کاربر بیش فعال
کاربر ممتاز
ماتریس Ca سه تا ستون مستقل خطی داره، واسه همین به نتیجه ای که مد نظرتون هست نمی رسه.


واااااااااااااااااااااااااای راست میگین من اصلا توجهی به این مسئله نکرده بودم. واقعا ممنونم تذکر بجایی بود.
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
منظورشون اینه که از توی فایل توابع qr و gramsch پاک کنید. بعد فایل untitled رو اجرا کنید


نه؛ به این روش که شما ورودی تابع رو داخلش دادید، کافیه ماتریس Ca رو توی تابع gramsch اصلاح کنید و بعد اجراش کنید؛ اون دو تا فایل دیگه عملاً کاربردی ندارند.
 

mitra*

کاربر بیش فعال
کاربر ممتاز
نه؛ به این روش که شما ورودی تابع رو داخلش دادید، کافیه ماتریس Ca رو توی تابع gramsch اصلاح کنید و بعد اجراش کنید؛ اون دو تا فایل دیگه عملاً کاربردی ندارند.

این کل مسئله من هستش.
y1l2_q1.jpg
من باید یه ماتریس متعامد با روش اسمیت متعامد برای Ca پیدا کنم.
میشه لطفا بررسی کنین و راهنماییم کنین؟
 

mitra*

کاربر بیش فعال
کاربر ممتاز
بچه ها من میخوام این معادله رو حل کنم ولی این ارور رو میگیرم!!!!!!!!!!!!!!1

Comma separated list expansion has cell syntax for an array that is not a cell.

Error in sym/subsref (line 707)
[inds{k},refs{k}] = privformat(inds{k});

Error in Sainv (line 24)
invSa=[invSa.s1 invSa.s2 invSa.s3;invSa.s4 invSa.s5 invSa.s6;invSa.s7 invSa.s8 invSa.s9]

http://s7.picofile.com/file/8251489942/Sainv.m.html

این لینک ام فایلم هست.
 

vahid_007_006

کاربر حرفه ای
کاربر ممتاز
بچه ها من میخوام این معادله رو حل کنم ولی این ارور رو میگیرم!!!!!!!!!!!!!!1

Comma separated list expansion has cell syntax for an array that is not a cell.

Error in sym/subsref (line 707)
[inds{k},refs{k}] = privformat(inds{k});

Error in Sainv (line 24)
invSa=[invSa.s1 invSa.s2 invSa.s3;invSa.s4 invSa.s5 invSa.s6;invSa.s7 invSa.s8 invSa.s9]

http://s7.picofile.com/file/8251489942/Sainv.m.html

این لینک ام فایلم هست.

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

mitra*

کاربر بیش فعال
کاربر ممتاز
این که معادله اش غیر خطی هست اس ها تو هم ضرب شدن

راس میگین شرمنده بخدا این روزا انقد استاد کلافم کرده که سوالای مسخره میپرسم.
اصلا توجهی به نوع معادله ام نکرده بودم. بجای solve باید از fsolve استفاده می کردم.
ممنونم لطف کردین.
 

HADID14

عضو جدید
یکی کمکم کنه.نمی دونم پرا وقتی ران می زنم.محاسباتش تموم نمی شه؟
clear out
clc
T=zeros(101,101);
for i=1:101;
for j=1:101;
T(i,j)=110;
end
end
T1=80;
h1=20;
k=40;
d=.01;
b1=h1/k;
T2=60;
h2=30;
b2=h2/k;
for k=1:2000
for i=1:101;
for j=1:101;
if j==100 && i>21 && i<81
T(i,j)=100;
else
if j==1 && i>21 && i<81
T(i,j)=100
else
if i==101 && j>21 && j<81
T(i,j)=200
else
if i==1 && j>21 && j<81
T(i,j)=200
else
if j==81 && i>1 && i<21
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j-1)+2*b2*d*T2)/(4+2*b2*d);
else
if j==81 && i>81 && i<101
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j-1)+2*b1*d*T1)/(4+2*b1*d);
else
if j==21 && i>1 && i<21
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j+1)+2*b1*d*T1)/(4+2*b1*d);
else
if j==21 && i>81 && i<101
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j+1)+2*b2*d*T2)/(4+2*b2*d);
else
if i==21 && j>1 && j<21
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i+1,j)+2*b1*d*T1)/(4+2*b1*d);
else
if i==21 && j>81 && j<101
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i+1,j)+2*b2*d*T2)/(4+2*b2*d);
else
if i==81 && j>1 && j<21
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i-1,j)+2*b2*d*T2)/(4+2*b2*d);
else
if i==81 && j>81 && j<101
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i-1,j)+2*b1*d*T1)/(4+2*b1*d);
else
if i>1 && i<21 && j>21 && j<81
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
else
if i>21 && i<81 && j>1 && j<101
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
else
if i>81 && i<101 && j>21 && j<81
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
T(1,21)=(T(2,21)+200+b1*d*T1)/(2+b1*d);
T(21,1)=(T(21,2)+100+b1*d*T1)/(2+b1*d);
T(1,81)=(T(2,81)+200+b2*d*T2)/(2+b2*d);
T(21,101)=(T(21,100)+100+b2*d*T2)/(2+b2*d);
T(81,101)=(100+T(81,100)+b1*d*T1)/(2+b1*d);
T(101,81)=(T(100,81)+200+b1*d*T1)/(2+b1*d);
T(101,21)=(T(100,21)+200+b2*d*T2)/(2+b2*d);
T(81,1)=(T(81,2)+100+b2*d*T2)/(2+b2*d);
T(81,81)=(2*T(80,81)+2*T(81,80)+T(82,81)+T(81,82)+2*b1*d*T1)/(6+2*b1*d);
T(21,21)=(2*T(22,21)+2*T(21,22)+T(20,21)+T(21,20)+2*b1*d*T1)/(6+2*b1*d);
T(21,81)=(2*T(21,81)+2*T(22,80)+T(20,81)+T(21,82)+2*b2*d*T2)/(6+2*b2*d);
T(81,21)=(2*T(80,21)+2*T(81,22)+T(82,21)+T(81,20)+2*b2*d*T2)/(6+2*b2*d);
[u,v]=meshgrid(1:101,1:101);
contourf(u,v,T,20)
 

(هادی)

کاربر فعال تالار ریاضی ,
یکی کمکم کنه.نمی دونم پرا وقتی ران می زنم.محاسباتش تموم نمی شه؟
clear out
clc
T=zeros(101,101);
for i=1:101;
for j=1:101;
T(i,j)=110;
end
end
T1=80;
h1=20;
k=40;
d=.01;
b1=h1/k;
T2=60;
h2=30;
b2=h2/k;
for k=1:2000
for i=1:101;
for j=1:101;
if j==100 && i>21 && i<81
T(i,j)=100;
else
if j==1 && i>21 && i<81
T(i,j)=100
else
if i==101 && j>21 && j<81
T(i,j)=200
else
if i==1 && j>21 && j<81
T(i,j)=200
else
if j==81 && i>1 && i<21
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j-1)+2*b2*d*T2)/(4+2*b2*d);
else
if j==81 && i>81 && i<101
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j-1)+2*b1*d*T1)/(4+2*b1*d);
else
if j==21 && i>1 && i<21
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j+1)+2*b1*d*T1)/(4+2*b1*d);
else
if j==21 && i>81 && i<101
T(i,j)=(T(i-1,j)+T(i+1,j)+2*T(i,j+1)+2*b2*d*T2)/(4+2*b2*d);
else
if i==21 && j>1 && j<21
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i+1,j)+2*b1*d*T1)/(4+2*b1*d);
else
if i==21 && j>81 && j<101
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i+1,j)+2*b2*d*T2)/(4+2*b2*d);
else
if i==81 && j>1 && j<21
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i-1,j)+2*b2*d*T2)/(4+2*b2*d);
else
if i==81 && j>81 && j<101
T(i,j)=(T(i,j+1)+T(i,j-1)+2*T(i-1,j)+2*b1*d*T1)/(4+2*b1*d);
else
if i>1 && i<21 && j>21 && j<81
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
else
if i>21 && i<81 && j>1 && j<101
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
else
if i>81 && i<101 && j>21 && j<81
T(i,j)=(T(i+1,j)+T(i-1,j)+T(i,j+1)+T(i,j-1))/(4);
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
end
T(1,21)=(T(2,21)+200+b1*d*T1)/(2+b1*d);
T(21,1)=(T(21,2)+100+b1*d*T1)/(2+b1*d);
T(1,81)=(T(2,81)+200+b2*d*T2)/(2+b2*d);
T(21,101)=(T(21,100)+100+b2*d*T2)/(2+b2*d);
T(81,101)=(100+T(81,100)+b1*d*T1)/(2+b1*d);
T(101,81)=(T(100,81)+200+b1*d*T1)/(2+b1*d);
T(101,21)=(T(100,21)+200+b2*d*T2)/(2+b2*d);
T(81,1)=(T(81,2)+100+b2*d*T2)/(2+b2*d);
T(81,81)=(2*T(80,81)+2*T(81,80)+T(82,81)+T(81,82)+2*b1*d*T1)/(6+2*b1*d);
T(21,21)=(2*T(22,21)+2*T(21,22)+T(20,21)+T(21,20)+2*b1*d*T1)/(6+2*b1*d);
T(21,81)=(2*T(21,81)+2*T(22,80)+T(20,81)+T(21,82)+2*b2*d*T2)/(6+2*b2*d);
T(81,21)=(2*T(80,21)+2*T(81,22)+T(82,21)+T(81,20)+2*b2*d*T2)/(6+2*b2*d);
[u,v]=meshgrid(1:101,1:101);
contourf(u,v,T,20)

سلام
خط های 24 ، 27 و 30 رو با نقطه کاما ببندید تا چاپ نکنه
اگه درست نشد بگید
 

HADID14

عضو جدید
ممنون. با این کار هم درست نشد.
با بستن mفایل های باز و دستور clear history کارم راه افتاد.
خدا خیرتون بده
 

آوای علم

مدیر تالار مشاوره
مدیر تالار
سلام خدمت شما


یک مسئله هست که باید با روش نیوتون - رافسون حل بشه در کلیات حل این روش مشکل ندارم
اما طبق فایل ضمیمه عکس شماره دو و عکس شماره 3..... 4 معادله تعریف شده که باید با روش نیوتون حل بشه

اول اینکه چون یک دستگاه 4 معادله ای با 4 مجهول باید روش نیوتون با ماتریس حل کنیم این شاید خیلی مشکل نباشه
اما مشکل من اینه در این 4 معادله از درایه های ماتریس حدسی استفاده کرده که در بعضی معادله ها همه درایه ها نیست چه طوری یک ماتریس حدس بزنیم بعد این معادله ها در متلب بر حسب درایه بنویسیم
و دوم اینکه متغیر زمانی هستن tp ,چه طوری برحسب زمانی بنویسم و مشکل مهم تر لحظات قبل هم مثل tp-1در این 4 معادله هست این یکیو دیگه چه کنم:confused:

مشکل اخر این مجهولات متغیرهای اندیسی هستن چه طوری د رمتلب با اندیس بنویسم هر چی امتحان کردم جلوش میاد:confused:

عکس 1


عکس 2

عکس 3
عکس 5
عکس 4
 

Similar threads

بالا