ورود

View Full Version : حرفه ای: برنامه ی حل معادلات یک متغیره



IamOverlord
پنج شنبه 31 فروردین 1391, 13:23 عصر
سلام دوستان.
یه ایده ای برای حل معادلات به ذهنم رسید، که یه مشکلاتی هم داشت، ولی برنامه اش رو نوشتم. ایده این بود که:
هر معادله ای رو به صورت ... = x در بیاریم.
اگه طرف راست (...) برحسب x نبود، مقدارش رو حساب می کنیم و معادله حل می شه!
اگه طرف راست (...) برحسب x بود، یه مقدار دلخواه به جای x در سمت چپ می ذاریم و حاصل رو محاسبه می کنیم، حاصل رو دوباره به جای x در سمت چپ می ذاریم و حاصل رو به درست می آریم و این کارو هی تکرار می کنیم تا به جواب نزدیک بشیم.
اما این راه یه سری مشکلات و ماده-تبصره هایی داره که اگه فکر کنید خودتون بهش می رسید!
حالا می خواستم از شما کمک بگیرم تا با هم این برنامه رو گسترش بدیم که کارهای دیگه ای هم بکنه، مثلا رسم گراف.
اگر هم خواستید در مورد طرز کارش بیش تر توضیح می دم.

IamOverlord
دوشنبه 18 اردیبهشت 1391, 19:22 عصر
یه مثال:

معادله: X^2-5*X+6=0
جواب: 5، 6
شکل تغییر یافته: X=Sqr(5*X-6)
ورودی برنامه: Sqr(5*X-6)

شکل های تغییر یافته ی دیگری را نیز امتحان کنید...

MMR_1344
دوشنبه 18 اردیبهشت 1391, 23:20 عصر
دوست خوبم
این یکی از روشهای درون یابی در محاسبات عددی هست که باید همگرایی اون اول کنتل بشه اگر معادله همگرا بود حتماً به پاسخ خواهی رسید در غیر اینصورت جوابی وجود نداره

IamOverlord
سه شنبه 19 اردیبهشت 1391, 17:27 عصر
سلام دوست عزیز،
ممنونم از راهنماییتون...
برای چند معادله و چند مجهول هم حدس می زنم بشه این کارو کرد، مثلا برای A=a+b و B=ab این کارو کردم، جواب داد (2 جواب معادله ی درجه ی 2) ولی هنوز برنامه شو ننوشتم.
ضمنا اون مطلبی که در مورد همگرایی گفتید هم باید توجه بشه،
مثلا اگه بنویسید X=X^2 و X از اول روی 2 باشه، برنامه Overflow می ده...، به جاش می تونید بنویسید: X=Sqr(X)
اما نکته ی جالب این جا بود که خیلی مواقع این روش جواب می داد.

IamOverlord
سه شنبه 19 اردیبهشت 1391, 18:31 عصر
برای حل معادلات درجه ی 2 با این روش (نه با روش دلتا) که البته این بار 2معادله-2مجهول حل می شود:

Private Sub Command1_Click()
On Error Resume Next
A = Val(Text1.Text)
B = Val(Text2.Text)
X1 = Val(Text3.Text)
X2 = Val(Text4.Text)
X1 = (A - X2 + X1) / 2
X2 = (B / X1 + X2) / 2
'X1 = A - X2
'X2 = B / X1
Text3.Text = CDec(X1)
Text4.Text = CDec(X2)
End Sub