PDA

View Full Version : سوال: الگوریتم حل یک معادله درجه 3



hamparvaz
شنبه 14 دی 1387, 09:58 صبح
سلام اساتید

لطفا اگر کد یا الگوریتم حل یک معادله درجه 3 و بدست آوردن ریشه های اون رو دارید من رو راهنمایی کنید.:افسرده:

بسیار ممنون

Salar Ashgi
شنبه 14 دی 1387, 20:48 عصر
سلام ، الگوریتم های مشخصی نیست ، باید خودتون از بعضی فرمولهای ریاضی استفاده کنید !!

مثلا در مبحث جبر و آنالیز برای حل معادله درجه 3 ، فرمول کاردانو وجود داره که بصورت رادیکالهای مرکب

فرجه 3 هستش ، که کمی پیچیده است ، میتونید از روشهای تقریبی (قضیه رول ، مقدار میانگین ، نیوتن)

استفاده کنید !!!! معادله درجه 3 رو معمولا تو حالات خاص بررسی می کنند (مجموع ضرایب صفر و ...)

موفق و پیروز باشید !!!

hamparvaz
یک شنبه 15 دی 1387, 12:21 عصر
ممنون که به پست جواب دادین
دوست عزیز
شما روش راحتی رو میشه به من معرفی کنید اینجا که برای یک برنامه نویس متوسط که از ریاضیات هم چندان اطلاعی نداره قابل فهم باشه ؟
اگه یک روش قابل فهم و ساده برای کد نویسی رو معرفی کنید ممنون میشم

nta_xyz
چهارشنبه 01 تیر 1390, 01:39 صبح
ممنون که به پست جواب دادین
دوست عزیز
شما روش راحتی رو میشه به من معرفی کنید اینجا که برای یک برنامه نویس متوسط که از ریاضیات هم چندان اطلاعی نداره قابل فهم باشه ؟
اگه یک روش قابل فهم و ساده برای کد نویسی رو معرفی کنید ممنون میشم
دوست من این راحت ترین راهی هست که میتونم بگم........توی if معادلاتو قرار بده من یه معادله ساختگی گذاشتم برای تست خیلی عالی جواب می ده!!

private void button1_Click(object sender, EventArgs e)
{
double x=0.0;
for (double i = 0; i < 1000; i = i + 0.001)
{
x=i;
if (3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 < 0.0000001 && 3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 >= 0)
{
MessageBox.Show(x.ToString());
}
}

}

مسعود اقدسی فام
چهارشنبه 01 تیر 1390, 18:37 عصر
دوست من این راحت ترین راهی هست که میتونم بگم........توی if معادلاتو قرار بده من یه معادله ساختگی گذاشتم برای تست خیلی عالی جواب می ده!!

private void button1_Click(object sender, EventArgs e)
{
double x=0.0;
for (double i = 0; i < 1000; i = i + 0.001)
{
x=i;
if (3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 < 0.0000001 && 3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 >= 0)
{
MessageBox.Show(x.ToString());
}
}

}

شما دارید با گام یک هزارم کل بازه صفر تا هزار رو (یک میلیون تکرار!) جستجو می‌کنید که شاید به جواب برسید. این روش استانداردی نیست و همیشه جواب نمی‌ده. تعداد تکرار خیلی بالایی هم داره. روشی که سالارخان توضیح دادن یه روش رسمی و کاملا قابل قبوله که با تکراری که گاهی کمتر از ده تاست به جواب خیلی دقیقتری می‌رسه. البته در مورد معادله درجه سه همونطور که توضیح دادن روش‌های خاص دیگه‌ای هم وجود داره.

مسعود اقدسی فام
چهارشنبه 01 تیر 1390, 21:36 عصر
ممنون که به پست جواب دادین
دوست عزیز
شما روش راحتی رو میشه به من معرفی کنید اینجا که برای یک برنامه نویس متوسط که از ریاضیات هم چندان اطلاعی نداره قابل فهم باشه ؟
اگه یک روش قابل فهم و ساده برای کد نویسی رو معرفی کنید ممنون میشم

برای نمونه این پیوندها رو مطالعه کنید:


http://www.riazilog.com/13851104/nioton-method.htm

http://www.riazilog.com/13860106/ravesh-vatari.htm

http://www.riazilog.com/13850822/tansif-method.htm

FastCode
پنج شنبه 02 تیر 1390, 23:48 عصر
ساده ترین راه پیچیدگی O(1) داره.
WolframAlpha Link (http://www.wolframalpha.com/input/?i=Solve[A*X%5E3%2BB*X%5E2%2BC*X%2BD%3D0%2CX%29]&asynchronous=false&equal=Submit)



دوست من این راحت ترین راهی هست که میتونم بگم........توی if معادلاتو قرار بده من یه معادله ساختگی گذاشتم برای تست خیلی عالی جواب می ده!!

private void button1_Click(object sender, EventArgs e)
{
double x=0.0;
for (double i = 0; i < 1000; i = i + 0.001)
{
x=i;
if (3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 < 0.0000001 && 3 * Math.Pow(x, 3) - 2 * Math.Pow(x, 2) - 45625 >= 0)
{
MessageBox.Show(x.ToString());
}
}

}

لطفاً راحتترین راهتون رو عوض کنید.

Last Moment realization:
لطفاً تاریخ پستها رو نگاه کنید.