آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

حل معادله به صورت عددی

محمدرضا  9 سال پیش  9 سال پیش
0 0

سلام

یه اپلیکیشن نوشتم که در یک قسمتش نیاز است یه معادله مثلثاتی و یک معادله چند جمله ای را حل کند(همه متغیر ها به جز یکی از آن ها از کاربر گرفته میشه و برنامه باید متغیر مجهول را محاسبه کند)

معادله ها هم مشخص و ثابت هست و فقط باید همین معادله ها(5 معادله) حل شود.

معادله های مورد نظر در این دو عکس است:
http://s8.picofile.com/file/8280762418/equ1.jpg
http://s9.picofile.com/file/8280762450/equ2.jpg

در معادله های چند جمله ای باید y را به دست آورد و در معادله های مثلثاتی، θ را باید به دست آورد.
نیاز نیست معادله ها به صورت پارامتری حل شوند به دلیل این که تمام مقادیر مجهول (به جز y و θ) از کاربر دریافت می شود، پس معادلات به صورت عددی حل می شوند.

ممنون میشم راهنمایی کنید.

+1 0
اول تمامی متغیر ها را به یک سمت تساوی ببرید و کل آن را به عنوان تابع f در نظر بگیرید حال مسئله به یافتن صفر های تابع f مبدل شد . برای یافتن صفر ها روش های زیادی وجود دارد اما به نظرم از نیوتن - رافسون می توانید نتیجه ی سریع تری بگیرید البته روش های ساده تر اما با سرعت همگرایی کمتری نیز مانند روش تنصیف و ... نیز وجود دارد. برای یافتن تقریب عبارات sin و cos و توابع وارون آن نیز می توانید از بسط تیلور استفاده کنید. (9 سال پیش)
+1 0
@mhD_mz همه معادله ها رو حل کردم ولی در حل معادلات مثلثاتی مشکل دارم و جواب درستی نمی دهد این معادله که در عکس زیر است را چطور باید با بسط تیلور که گفتید حل کنم؟ (9 سال پیش)
0 0
لینک (9 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
محمدرضا  9 سال پیش
+1 0

همه معادله هایی که در سوال بالا مطرح کردم را توانستم حل کنم (با روش نیوتن - رافسون) ولی معادلات مثلثاتی را نتوانستم!

یعنی برای آن ها هم الگوریتم نیوتن - رافسون را نوشتم ولی جواب مورد نظر من را نمیدهد و جواب اشتباهی را در خروجی بر میگرداند.

باید جوابی که در تصویر مشاهده می کنید را برگرداند ولی صفر را بر میگرداند.

کدی که استفاده کردم:

 import static java.lang.Math.*;


public class MainActivity extends AppCompatActivity {
    double d=2, g=9.81, Q=2.5;
    double teta = 0;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView res = (TextView) findViewById(R.id.res);
        double result = NewtonRaphson(1);
        Log.i("final result in radian",""+result);

        result = toDegrees(result);
        Log.i("final result in degrees",""+result);

        String res1 = ""+result;
        res.setText(res1);
    }

    double NewtonRaphson (double x_0){
        double xLast = 0;
        double xNew = 0;

        xLast = 1;

        int count = 0;

        while (count < 10){
            xLast = toRadians(xLast);
            xNew = xLast - (f(xLast)/f_prime(xLast));

            Log.i("f(xLast)",""+f(xLast));
            Log.i("f_prime(xLast)",""+f_prime(xLast));
            Log.i("f(xLast)/f_prime(xLast)",""+f(xLast)/f_prime(xLast));
            Log.i("xNew in radian",""+xNew);

            xLast = xNew;

            count++;
        }
        return xNew;
    }

    double f(double x){

        return pow((0.125d*(x-sin(x))*pow(d,2)),3)*g-(pow(Q,2)*d*sin(x/2d));
    }

    double f_prime(double x){

        return ((3*0.125d*pow(d,2)*(1-cos(x)))*(pow((0.125d*(x-sin(x))*pow(d,2)),2)))*g-(0.5d*pow(Q,2)*d*cos(x/2d));
    }

}

این معادله را باید با چه الگوریتمی حل کنم؟، بسط تیلور؟ و اگر جواب بسط تیلور است به چه صورت باید این بسط را برای این معادله استفاده کنم؟

با تشکر

پاسخ به سوال 
mhD_mz  9 سال پیش
0 0

برای این نوع توابع هم روش نیوتن رافسون معتبر است و البته در حال حاضر درست عمل می کند (چون  0 =  θ نیز ریشه ی معادله هست)  اما برای این که به پاسخ دلخواه برسید چند مورد زیر را انجام دهید : 

1 ) بین متغیر و عدد حتماً علامت ضرب را قرار دهید به طور مثال (2d => 2*d)

2)  به جای تابع مشتق حساب شده عبارت ساده شده ی آن را قرار دهید (عبارت زیر)

3 ) نقطه ی اولیه ای که به الگوریتم نیوتن رافسون می دهید را در حد امکان از صفر دور کنید.

4 ) در صورتی که راه های بالا جواب نداد از روش تنصیف و یا نابه جایی در بازه ای استفاده کنید که صفر در آن نباشد.

0 0
پاسخ اصلاح شد. (9 سال پیش)
0 0
با تشکر از پاسختون در صورت امکان برای این معادله خاص میشه الگوریتم تنصیف و یا نا به جایی را توضیح دهید من در مورد این دو روش اطلاعی ندارم و با جستجو به نتیجه به درد بخور نرسیدم خیلی لطف می کنید اگه کد را برای این معادله خاص کامل بگویید (9 سال پیش)
0 0
در روش های تنصیف و نابه جایی تنها یک مسئله می ماند آن هم این است که حدود جواب و یا کران بالا و پایینی را برای جواب معادله باید ارائه دهید در این مسئله آیا این امکان وجود دارد؟ (9 سال پیش)
0 0
بله x باید بین 0 تا 360 باشه(البته به درجه) (9 سال پیش)
پاسخ به سوال 
FSR  9 سال پیش
0 0

سلام

در مورد روش نوشتن کد نظری ندارم ولی یه مشکل دیدم تویه کدتون گفتم بگم شاید کدتون درست بشه

شما باید درون توابع مثلثاتی رو به رادیان تبدیل کنید شاید مشکل از این باشه

به طور مثال:

Math.sin(Math.toRadians(angle))

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .