سلام .
معمولا دستور solve در متلب برای حل معادلات به کار میره . این دستور برای معادلات شامل یک سری توابع مثل sin و cos و ... نیز می تواند به کار رود .
برای براکت ، باید دستور floor در متلب را به کار ببریم که درواقع عدد اعشاری را به سمت منفی بینهایت گرد می کند . اما هنگامی که این دستور را درون معادله می نویسیم و سپس معادله را به دستور solve می دهیم ، دستور solve پیام خطا می دهد .
من راه حلی که به ذهنم رسید به این صورت می باشد :
کد:
clear all
close all
clc
step=0.01;
x=-10:step:10;
x_length=length(x);
x_answer=0;
p=0;
for nn=1:x_length
if (floor(vpa(7.5*x(nn)))-floor(vpa(5*x(nn)-0.8))-6==0)
p=p+1;
x_answer(p)=x(nn);
end
end
x_answer
چون براکت در معادله وجود دارد ، بنابراین پاسخ به صورت یک بازه از مقادیر x می باشد . بنابراین ما ابتدا حدس زده ایم که این بازه درون محوده 10- تا 10 قرار داشته باشد بنابراین نمونه هایی از این بازه را درون یک حلقه for تست می کنیم که آیا در معادله صدق می کنند یا خیر و مقادیری که در معادله صدق کنند را در x_answer ذخیره می کنیم . برای داشتن دقت بیشتر ، می توان step را کوچکتر گرفت و یا اگر هیچ پاسخی پیدا نشود ، باید بازه 10- تا 10 را بزرگتر کنیم و مقادیر بیشتری را تست کنیم .
دستور length برای تعیین طول یک بردار به کار می رود . سه خط اول برنامه هم برای عدم تداخل برنامه فعلی با برنامه های قبلی اجرا شده در نرم افزار متلب می باشد .
نکته مهم دیگر اینکه حتما باید از دستور vpa استفاده شود وگرنه تعدادی جواب غلط نمایش داده می شود . اینکه چرا در صورت عدم استفاده از دستور vpa درون پرانتز دستور floor ، به جواب غلط می رسیم را باید از سازندگان نرم افزار متلب بپرسیم !!!
نتیجه اجرای کد متلب بالا به صورت زیر می باشد :
کد:
x_answer =
Columns 1 through 9
1.7400 1.7500 1.8700 1.8800 1.8900 1.9000 1.9100 1.9200 1.9300
Columns 10 through 18
1.9400 1.9500 2.0000 2.0100 2.0200 2.0300 2.0400 2.0500 2.0600
Columns 19 through 27
2.0700 2.0800 2.0900 2.1000 2.1100 2.1200 2.1300 2.1600 2.1700
Columns 28 through 36
2.1800 2.1900 2.2000 2.2100 2.2200 2.2300 2.2400 2.2500 2.2600
Columns 37 through 40
2.3600 2.3700 2.3800 2.3900
بنابراین بازه بین 1.74 تا 2.39 همان پاسخ های قابل قبول برای x می باشند .