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

mitra*

کاربر بیش فعال
کاربر ممتاز
کد:
for t=0:10
    syms x1(t) x2(t) x3(t) x4(t)
    u=0;
    uf=0;
    x1(0)=1;
    x2(0)=0.5;
    x3(0)=1;
    x4(0)=0;
    delta=0.001;
    x1(t+1)=delta*(-x1(t)+x2(t)+(2*u)+(2*uf)+(0.152*sin(x1(t)+x3(t)))+(0.5*0.6*sin(60*t)))+x1(t);
    x2(t+1)=delta*((-2*x2(t))+u+uf+(0.152*sin(x1(t)-x3(t)))-(0.6*sin(60*t)))+x2(t);
    x3(t+1)=delta*(-x3(t)+(2*u)+(2*uf))+x3(t);
    x4(t+1)=delta*(-x4(t))+x4(t);
    figure(1)
    plot(x1,'b','LineWidth',2)
    hold on
    grid on
    figure(2)
    plot(x2,'b','LineWidth',2)
    hold on
    grid on
    figure(3)
    plot(x3,'b','LineWidth',2)
    hold on
    grid on
    figure(4)
    plot(x4,'b','LineWidth',2)
    hold on
    grid on
end




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

(هادی)

کاربر فعال تالار ریاضی ,
کد:
for t=0:10
    syms x1(t) x2(t) x3(t) x4(t)
    u=0;
    uf=0;
    x1(0)=1;
    x2(0)=0.5;
    x3(0)=1;
    x4(0)=0;
    delta=0.001;
    x1(t+1)=delta*(-x1(t)+x2(t)+(2*u)+(2*uf)+(0.152*sin(x1(t)+x3(t)))+(0.5*0.6*sin(60*t)))+x1(t);
    x2(t+1)=delta*((-2*x2(t))+u+uf+(0.152*sin(x1(t)-x3(t)))-(0.6*sin(60*t)))+x2(t);
    x3(t+1)=delta*(-x3(t)+(2*u)+(2*uf))+x3(t);
    x4(t+1)=delta*(-x4(t))+x4(t);
    figure(1)
    plot(x1,'b','LineWidth',2)
    hold on
    grid on
    figure(2)
    plot(x2,'b','LineWidth',2)
    hold on
    grid on
    figure(3)
    plot(x3,'b','LineWidth',2)
    hold on
    grid on
    figure(4)
    plot(x4,'b','LineWidth',2)
    hold on
    grid on
end




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

سلام
دلیل خاصی داشتید که x1 و ... رو سیمبولیک تعریف کردید؟
وقتی می نویسید x1(t) دو تا معنی میده. یا یعنی x1 تابعی از t، که اون موقع x1 باید یک تابع باشه، یا یعنی مولفه t ام x1 که اون موقع باید x1 یک بردار باشه و t هم یک عدد طبیعی (1 به بالا)
ببینید این توضیح کمکتون می کنه؟
 

mitra*

کاربر بیش فعال
کاربر ممتاز
سلام
دلیل خاصی داشتید که x1 و ... رو سیمبولیک تعریف کردید؟
وقتی می نویسید x1(t) دو تا معنی میده. یا یعنی x1 تابعی از t، که اون موقع x1 باید یک تابع باشه، یا یعنی مولفه t ام x1 که اون موقع باید x1 یک بردار باشه و t هم یک عدد طبیعی (1 به بالا)
ببینید این توضیح کمکتون می کنه؟

من اول شبیه سازی رو در محیط سیمولینگ انجام دادم که خیلی مشکلات برام پیش اومد.الان میخوام کدش رو بنویسم ولی ارور دارم!
بله من میخواستم x ها بردار باشن.ولی نمیدونم چرا ارور میده متوجه نمیشم کجا اشتباه کردم.حتی اومدم مقادیر اولیه رو از 1 گذاشتم و بازه رو بین 1تا10 گرفتم ولی بازم ارور داد.
 

(هادی)

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

پس اگه می خواهید بردار باشند، کلا اون خط syms رو بردارید
همچنین همه اندیس ها رو از 1 شروع کنید (هم t از 1 شروع بشه و هم مقادیر اولیه در t برابر 1 باشه)
در ضمن داخل حلقه for فقط بخش هایی رو بگذارید که واقعا نیاز به حلقه دارند. بهتره مقدار دهی اولیه رو بیارید قبل حلقه و plot ها رو هم بیارید بعدش
با این کارها باید درست بشه، اگه نشد، کدتون رو دوباره بگذارید
 
سلام دوستان من یه راهنمایی میخواستم
میخوام این معادله رو تو متلب بنویسم چه جوری میشه
من تو این معادله هدفم بدست اوردن ضرایب k,n هستش و مقادیر y, t روهم دارم dy/dt=k(y^n)
 

(هادی)

کاربر فعال تالار ریاضی ,
سلام دوستان من یه راهنمایی میخواستم
میخوام این معادله رو تو متلب بنویسم چه جوری میشه
من تو این معادله هدفم بدست اوردن ضرایب k,n هستش و مقادیر y, t روهم دارم dy/dt=k(y^n)

سلام
این یعنی می خواهید منحنی فیت کنید روی نمودار. کارتون دو قسمت میشه. اول بیایید dy/dt رو به دست بیارید. بعد از دستورات فیت کردن منحنی روی داده استفاده کنید
برای قسمت اول، احتمالا y و t رو به صورت مجموعه ای از نقاط دارید و باید مشتق عددی بگیرید
روش های مشتق عددی متنوع هست و دقت های متفاوتی داره. ساده ترینش اینه که بنویسید دلتا y تقسیم بر دلتا t یعنی :
diff(y) ./ diff(t) a
فیت کردن هم روش های مختلفی داره. می تونید خودتون یه کد ساده بزنید، می تونید هم از دستورات آماده استفاده کنید
برای دستورات آماده، کلمه fit رو توی راهنمای متلب بگردید
 
مرسی من اگه از همین معادله انتگرال بگیرم به این فرم میرسم
ya^(1-n)=ya0^(1-n)+kt(n-1)
مقدار همونy0 که حد اولیه هم هست رو دارم که عددی ثابت هست الان اگه معادله اینطوری باشه باز نمیشه از همون فیت کردن استفاده کرد بدون نیاز به گرفتن همون مرحله اول و مشتق گرفتن
 

(هادی)

کاربر فعال تالار ریاضی ,
اگه این کار رو بکنید که البته بهتره. مشتق عددی دقتش کمه
ولی چون فرم تابعتون دیگه فرم استاندارد نیست، احتمالا باید ار دستورات دیگه استفاده کنید
به نظرم ساده ترین روش، دستور lsqcurvefit هست
توی help متلب و توی اینترنت اطلاعات خوبی از این دستور پیدا میشه
اگه کارتون نشد، دستور lsqnonlin هم هست
 

Hadie89

عضو جدید
سلام
من یک کار مدلسازی انجام دادم بعد اخرش نتایج خودمو با داده های اکسپریمنتال در یک پلات valid کردم، منتها الان میخام relative error حساب کنم هرچی فک میکنم نمیدونم چطوری. آخه داده های تجربی من 13 تا بود ولی مدل من خب خیلی بیشتر بود مثلا 1000تا. حالا الان من بخام تو همون 13 تا نقطه اینارو خطاشو حساب کنم باید چکار کنم؟میشه راهنماییم کنید
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
من یک کار مدلسازی انجام دادم بعد اخرش نتایج خودمو با داده های اکسپریمنتال در یک پلات valid کردم، منتها الان میخام relative error حساب کنم هرچی فک میکنم نمیدونم چطوری. آخه داده های تجربی من 13 تا بود ولی مدل من خب خیلی بیشتر بود مثلا 1000تا. حالا الان من بخام تو همون 13 تا نقطه اینارو خطاشو حساب کنم باید چکار کنم؟میشه راهنماییم کنید

یا باید خروجی مدل در اون 13 نقطه رو به دست بیارید، یا از خروجیهای مدل استفاده کنید و در اون 13 نقطه درونیابی/برونیابی کنید. روش اول کار درست تری هستش؛ اگه امکان پذیر نبود برو سراغ روش دوم.
 

Hadie89

عضو جدید
یا باید خروجی مدل در اون 13 نقطه رو به دست بیارید، یا از خروجیهای مدل استفاده کنید و در اون 13 نقطه درونیابی/برونیابی کنید. روش اول کار درست تری هستش؛ اگه امکان پذیر نبود برو سراغ روش دوم.
آخه مدل من نمیدونم دقیقا چطوری تو اون 13 نقطه خروجی مدلم رو بدست بیارم، مثلا در یک زمان مشخص که داده تجربی رو دارم دقیقا تو اون زمان در ماتریس جوابام (یعنی همون مدلم ) اون property رو ندارم.
روش دوم بنظرم ایده مناسب و امکان پذیریه، ممنونم
 

Hadie89

عضو جدید
سلام
من نیاز به کد رانگ کاتا برای دستگاه معادلات دیفرانسیل دارم، میشه کمکم کنید
 

(هادی)

کاربر فعال تالار ریاضی ,
سلام
من نیاز به کد رانگ کاتا برای دستگاه معادلات دیفرانسیل دارم، میشه کمکم کنید
سلام
معادلات دیفرانسیل رو وقتی به فرم فضای حالت بنویسید چه جوری میشه؟ یعنی چندتا متغیر و پارامتر داخلش هست؟ آیا تابعیت صریح از زمان هم داره؟
 

meytim

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

از لینک امضای من، برنامه های کتاب شگردهای عددی رو دانلود کنید. بعد از Unzip کردن، تابع ODERKGen رو در مسیری که می خواید استفاده کنید، کپی کنید.
 

Hadie89

عضو جدید
از لینک امضای من، برنامه های کتاب شگردهای عددی رو دانلود کنید. بعد از Unzip کردن، تابع ODERKGen رو در مسیری که می خواید استفاده کنید، کپی کنید.

خیلی ممنون دانلود کردم. فقط یک سوال داشتم چرا وقتی میخام step بدم بهش تو بعضی استپا این ارور رو میده؟
Error using zeros
Size inputs must be integers.
چکار کنم؟
 
آخرین ویرایش:

Hadie89

عضو جدید
سلام
معادلات دیفرانسیل رو وقتی به فرم فضای حالت بنویسید چه جوری میشه؟ یعنی چندتا متغیر و پارامتر داخلش هست؟ آیا تابعیت صریح از زمان هم داره؟

منظورتون از فضای حالت چیه؟ 4 تا معادلات دیفرانسیل هست که با هم کوپل هستند. نه خود زمان تو معادلات نیست.
 

(هادی)

کاربر فعال تالار ریاضی ,
منظورتون از فضای حالت چیه؟ 4 تا معادلات دیفرانسیل هست که با هم کوپل هستند. نه خود زمان تو معادلات نیست.
منظورم این بود که لازمه معادلاتتون به فرم
X' = f(t,X) a
باشه. یعنی مجموعه ای از معادلات مرتبه اول
اگر مشتق مرتبه دوم داشته باشید باید معادلاتتون رو به فرم فضای حالت (همین فرم بالا) تبدیل کنید
اگر زمان صریحا داخلش نباشه ساده تر هم میشه
X' = f(X) a
که الان X و f هر دو بردار هستند
بعدش می تونید از دستورات رانگه کاتا استفاده کنید تا حلش کنید
البته با تابع
ODERKGen که دوستمون فرمودن آشنا نیستم
 

Hadie89

عضو جدید
منظورم این بود که لازمه معادلاتتون به فرم
X' = f(t,X) a
باشه. یعنی مجموعه ای از معادلات مرتبه اول
اگر مشتق مرتبه دوم داشته باشید باید معادلاتتون رو به فرم فضای حالت (همین فرم بالا) تبدیل کنید
اگر زمان صریحا داخلش نباشه ساده تر هم میشه
X' = f(X) a
که الان X و f هر دو بردار هستند
بعدش می تونید از دستورات رانگه کاتا استفاده کنید تا حلش کنید
البته با تابع
ODERKGen که دوستمون فرمودن آشنا نیستم
آهان متوجه شدم منظورتون رو. خیر معادلات من همگی درجه اول هستند.
ODERKGen هم درواقع نامگذاری دوستمون هست برای تابعی که نوشته .
 

آوای علم

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

من یک برنامه نوشتم پاسخ یک ماتریسی هست با درایه های مختلط مثلا2+i3 اما می خوام درایه هاش به صورت قطبی بشن یعنی اندازه و زوایه تبدیل بشن ...چه دستوری باید برای این ماتریس بنویسم؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
آهان متوجه شدم منظورتون رو. خیر معادلات من همگی درجه اول هستند.
ODERKGen هم درواقع نامگذاری دوستمون هست برای تابعی که نوشته .

درجه معادله های دیفرانسیل خیلی اهمیت نداره؛ مرتبه یا رده معادلات دیفرانسیل مهم هستند.
 

meytim

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

من یک برنامه نوشتم پاسخ یک ماتریسی هست با درایه های مختلط مثلا2+i3 اما می خوام درایه هاش به صورت قطبی بشن یعنی اندازه و زوایه تبدیل بشن ...چه دستوری باید برای این ماتریس بنویسم؟

از تابعهای abs و angle استفاده کنید.
 

Hadie89

عضو جدید
یا باید خروجی مدل در اون 13 نقطه رو به دست بیارید، یا از خروجیهای مدل استفاده کنید و در اون 13 نقطه درونیابی/برونیابی کنید. روش اول کار درست تری هستش؛ اگه امکان پذیر نبود برو سراغ روش دوم.

سلام
میشه راهنماییم کنید چگونه در نقاطی مشخص برونیابی انجام بدم؟ یعنی باید در زمان t=0.25 خروجی مدل رو چطوری بدست بیارم؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
میشه راهنماییم کنید چگونه در نقاطی مشخص برونیابی انجام بدم؟ یعنی باید در زمان t=0.25 خروجی مدل رو چطوری بدست بیارم؟

راهنمای تابع interp1 رو ببینید.
help interp1
 

Hadie89

عضو جدید
سلام
من احتیاج دارم که رو نمودارم فقط رو نقاط خاصی مارکر بزارم، یک پراپرتی هست ی نام MarkerIndices، که مثل اینکه فقط در ورژن 2016 بی هستش، متاسفانه متلب من 2015 هست، آیا راه دیگه ای هست که فقط در نقاط خاصی مارکر نمایش داده بشه؟
 

meytim

متخصص محاسبات عددی و MATLAB
کاربر ممتاز
سلام
من احتیاج دارم که رو نمودارم فقط رو نقاط خاصی مارکر بزارم، یک پراپرتی هست ی نام MarkerIndices، که مثل اینکه فقط در ورژن 2016 بی هستش، متاسفانه متلب من 2015 هست، آیا راه دیگه ای هست که فقط در نقاط خاصی مارکر نمایش داده بشه؟

اول مختصات نقاط مورد نظر رو مشخص کن؛ بعد با مارکر مورد نظر رسم کن.
 

Hadie89

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

ناآشنا

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

اگر آموزشی در مورد برنامه ریزی ژنتیک (نه الگوریتم ژنتیک) در متلب می شناسید لطفا راهنمایی بفرمایید. ممنون میشم.
 

ایرانی2017

عضو جدید
http://www.www.iran-eng.ir/images/icons/icon1.png
با سلام میخواستم در قسمتی از کد متلب بجای این کد Svm یعنی بجایsvmtrain و svmclassifyکد درخت تصمیم رو جایگزین کنم ممنون میشم بفرمایید چطوری؟

theclass=ones(row11,1);
theclass(floor((row11/2))+1:row11)=0;
svmStruct =svmtrain(xxdata,theclass);%??
svmStruct =svmtrain(xxdata,Xdata:),d));
Xnew =xxdata;
species = svmclassify(svmStruct,Xnew,'ShowPlot',true);
xxdata یک آرایه 58*3 هست

هستrow11=58
 
آخرین ویرایش:

ناآشنا

عضو جدید
کاربر ممتاز
سلام مجدد دوستان کسی میدونه چطور میشه تولباکس genetic programming رو در متلب یافت یا باید بهش اضافه بشه و چطوری ؟
 

Similar threads

بالا