Advanced Search

المحرر موضوع: برامج بلغة C لحل معادلات غير خطية  (زيارة 5278 مرات)

0 الأعضاء و 1 ضيف يشاهدون هذا الموضوع.

أكتوبر 04, 2007, 09:17:57 مساءاً
زيارة 5278 مرات

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« في: أكتوبر 04, 2007, 09:17:57 مساءاً »
مسا الخير

انا أدرس مقرر تحليل عددي بالجامعة ومن مواضيع هالمقرر هو حل معادلات غير خطية وانا صار لي مدة ابحث على برامج بلغة C لحل مثل هالنوع من المعادلات للطرق المختلفة ( القاطع - نيوتن رافسون-التنصيف- النقطة الثابتة ) الللي عنده اي خلفية او برنامج بلغة C لحل هالمعادلات غير الخطية بأي طريقة يساعدني

 '<img'>  ولكم جزيل الشكر  ':111:'  ':111:'  ':111:'

أكتوبر 05, 2007, 08:09:12 مساءاً
رد #1

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #1 في: أكتوبر 05, 2007, 08:09:12 مساءاً »
ليش ما في ردود الللي يعرف يساعدني  '<img'>  '<img'>  '<img'>

أكتوبر 15, 2007, 01:22:46 صباحاً
رد #2

أميرة الأندلس

  • عضو مساعد

  • **

  • 222
    مشاركة

    • مشاهدة الملف الشخصي
    • http://77math.blogspot.com/
برامج بلغة C لحل معادلات غير خطية
« رد #2 في: أكتوبر 15, 2007, 01:22:46 صباحاً »
Try to find your wish here:

جنّة المبرمجين
هوّن عليك فكل الأمر ينقطع ***** وخلّ عنك عنان الهم يندفع
فكل هم له من بعـده فرج ***** وكل أمر إذا ما ضاق يتسع
إن البلاء وإن طال الزمان به ***** فالموت يقطعه، أو سوف ينقطع

أكتوبر 15, 2007, 01:00:16 مساءاً
رد #3

مـحمـد

  • عضو مشارك

  • ***

  • 270
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #3 في: أكتوبر 15, 2007, 01:00:16 مساءاً »
ضع طريقة الحل العامة
والمبرمج يحول هه المعومات لبرنامج
ربما هنا لاتجد من يجمع الرياضيات والبرمجة بلغة السي معا
ان وضعت الطريقة العامة للحل قد نتوصل لنتيجة اشكرك
لمن يرغب  جدول لمدرسته بالمجان
http://syr-math.com/showthread.php?p=7248#post7248

أكتوبر 15, 2007, 01:45:00 مساءاً
رد #4

mayada

  • عضو متقدم

  • ****

  • 592
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #4 في: أكتوبر 15, 2007, 01:45:00 مساءاً »
السلام عليكم :
     أنا لدي خبرة بكتابة برامج بلغة السي و لكن في النة القادمة سنأخذ تحليل عددي بإذن الله و لكن يمكنك أن تمدني بالمعلومات اللازمة حتى أستطيع كتابة البرنامج

أكتوبر 16, 2007, 01:59:23 مساءاً
رد #5

haaya

  • عضو مبتدى

  • *

  • 81
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #5 في: أكتوبر 16, 2007, 01:59:23 مساءاً »
عندي سي دي موجود عليه كل البرامج اللي بدك اياها لكن انتظريني فترة لما انزلك اياهم عالمنتدى
اسي دي حضروه اساتذة الحاسوب بجامعتي عشان ينرس مع مساق التحليل العددي
انتظريني
واصبر نفسك مع الذين يدعون ربهم بالغداة والعشي يريدون وجهه ولاتعد عيناك عنهم تريد زينة الحياة الدنيا ولا تطع من اغفلنا قلبه عن ذكرنا واتبع هواه وكان امره فرطا

أكتوبر 16, 2007, 07:26:10 مساءاً
رد #6

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #6 في: أكتوبر 16, 2007, 07:26:10 مساءاً »
مسا الخير
مشكورين على المروور وملاحظاتكم بتساعدني في موضوعي
المهم خلاصة الكلام ان ابح عن برامج لحل معادلات غير الخطية كلنا نعرف في بعض المعادلات يصعب او بالاحرى يستحيل حلها بالطرق العددية لا يمكننا ايجاد قيمة جذورها فانه من الضروري معرفة قيم تقريبية لتلك الجذور او على الاقل الفترات التي توجد فيها مثل تلك الجذور وفيه طرق عديدة منها ( طريقة تنصيف الفترة -القاطع -نيوتن رافسون-النقطة الثابنه )
بشرح لكم طريقة طريقة -لضيق الوقت - اليوم طريقة التنصيف :
طريقة التنصيف :
هذه الطريقة تستخدم نظرية القيمة المتوسطة والتي تنص على أنه اذا كانت الدالة   (f (x  متصلة
 متصلة في الفترة المغلقة  (a,b) وكان: ( f(b)  >k  > f(a  فان هناك نقطة x0 تنتمي للفترة  المغلقة (a,b)
  بحيث أن :
                      f(x0) = k


خوارزمية التنصيف لايجاد جذر المعادلةf(x)=0 :    

1.   اوجد حدود الفترة المغلقة  (a,b) التي تتغير اشارة الدالة  (f(x عند طرفيها

2.   احسب قيمة النقطة0 x0 =(a+b)/2 والتي تنصف الفترة المغلقة  (  a,b)

3.   احسب فيمة الدالة عند النقطة0x0 أي احسب  0   (f (x0   يوجد احتمالان . 0  

3.1.1.   0   (zero =f (x0   اي ان x0   جذر للمعادلة f(x)=0
3.1.2.   0   (f (x0   لا تساوي صفر  فانه يوجد احتمالان :
الاحتمال الأول :

f(a)* f (x0  )<0  (   أي أن الدالة f(x) قد غيرت اشاراتها في الفترة
 (  a,x0  ) وهذا يدل على أن جذر المعادلة يقع في هذه الفترة
الاحتمال الثاني:

f(a)* f (x0  )>0  ( وهذا يدل على أن الدالة  (f(x  لم تتغير اشاراتها في الفترة
               (  a,x0  )   أي ان جذر المعادلة يقع في الفترة (  x0  ,b)

4) نستمر في تنصيف الفترة التي يوجد فيها جذر المعادلة حتى نصل الى القيمة المطلوبة والتي تتحدد بالعلاقة التالية :
                       |x1- x0| اقل من أو تساوي الايبسلون




أتمنى أن الطريقة واضحة  وقريبا بكتب الطريقة الثانية اللي هي طريقة نيوتن رافسون ومشكورين




أكتوبر 16, 2007, 07:30:07 مساءاً
رد #7

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #7 في: أكتوبر 16, 2007, 07:30:07 مساءاً »

(haaya @ 16/10/2007 الساعة 12:59)
QUOTE
عندي سي دي موجود عليه كل البرامج اللي بدك اياها لكن انتظريني فترة لما انزلك اياهم عالمنتدى
اسي دي حضروه اساتذة الحاسوب بجامعتي عشان ينرس مع مساق التحليل العددي
انتظريني

بس لا تطول علي فيه وحاول تنزله في اقرب فرصة وتسلم على المشاركة

أكتوبر 16, 2007, 07:33:38 مساءاً
رد #8

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #8 في: أكتوبر 16, 2007, 07:33:38 مساءاً »

(أميرة الأندلس @ 15/10/2007 الساعة 00:22)
QUOTE
Try to find your wish here:

جنّة المبرمجين

تسلمين انا بدخل الموقع وان شا الله احصل البرامج المطلوبة  ':111:'

أكتوبر 16, 2007, 10:57:40 مساءاً
رد #9

haaya

  • عضو مبتدى

  • *

  • 81
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #9 في: أكتوبر 16, 2007, 10:57:40 مساءاً »
طريقة التنصيف  هذا البرنامج جاهز للتنفيذ مباشرة بعد نقله الى برنامج turbo c
////////
/*
*   BISECTION ALGORITHM 2.1
*
*   To find a solution to f(x) = 0 given the continuous function
*   f on the interval [a,b], where f(a) and f(b) have
*   opposite signs:
*
*   INPUT:   endpoints a,b; tolerance TOL;
*            maximum number of iterations N0.
*
*   OUTPUT:  approximate solution p or
*            a message that the algorithm fails.
*/

#include
#include
#define ZERO 1.0E-20
#define true 1
#define false 0

main()
{
   double A,FA,B,FB,C,P,FP,TOL;
   int I,NO,OK,FLAG;
   FILE *OUP[1];

   double absval(double);
   double F(double);
   void INPUT(int *, double *,  double *, double *, double *, double *, int *);
   void OUTPUT(FILE **, int *);

   INPUT(&OK, &A, &B, &FA, &FB, &TOL, &NO);
   if (OK) {
      OUTPUT(OUP, &FLAG);
      /* STEP 1 */
      I = 1;    
      /* STEP 2 */
      OK = true;
      while ((I<=NO) && OK) {
    /* STEP 3 */
    /* compute P(I) */    
    C = (B - A) / 2.0;
    P = A + C;

    /* STEP 4 */
    FP = F(P);  
    if (FLAG == 2) fprintf(*OUP,"%3d   %15.8e   %15.7e \n",I,P,FP);
    if ((absval(FP)       /* procedure completed successfully */
       fprintf(*OUP,"\nApproximate solution P = %11.8f \n",P);
       fprintf(*OUP,"with F(P) = %12.8f\n",FP);
       fprintf(*OUP,"Number of iterations = %3d",I);
       fprintf(*OUP,"    Tolerance = %15.8e\n",TOL);
       OK = false;
    }
    else {
       /* STEP 5 */
       I++;
       
       /* STEP 6 */
       /* compute A(I) and B(I) */
       if ((FA*FP) > 0.0) {
          A = P; FA = FP;
       }
       else {
          B = P; FB = FP;
       }
    }
      }
      if (OK) {
    /* STEP 7 */
    /* procedure completed unsuccessfully */
    fprintf(*OUP,"\nIteration number %3d",NO);
    fprintf(*OUP," gave approximation %12.8f\n",P);
    fprintf(*OUP,"F(P) = %12.8f not within tolerance : %15.8e\n",FP,TOL);
      }
      fclose(*OUP);
   }
   return 0;
}

/* Change function F for a new problem */
double F(double X)
{
   double f;

   f = ( X + 4.0 ) * X * X - 10.0;
   return f;
}

void INPUT(int *OK, double *A, double *B, double *FA, double *FB, double *TOL, int *NO)
{
   double X;
   char AA;

   printf("This is the Bisection Method.\n");
   printf("Has the function F been created in the program immediately preceding\n");
   printf("the INPUT function?\n");
   printf("Enter Y or N\n");
   scanf("%c",&AA);
   if ((AA == 'Y') || (AA == 'y')) {
      *OK = false;
      while (!(*OK)) {
    printf("Input endpoints A < B separated by blank\n");
    scanf("%lf %lf", A, B);
    if (*A > *B) {
       X = *A; *A = *B; *B = X;
    }
    if (*A == *B) printf("A cannot equal B\n");
    else {
       *FA = F(*A);
       *FB = F(*B);
       if (*FA*(*FB) > 0.0) printf("F(A) and F(B) have same sign\n");
       else *OK = true;
    }
      }
      *OK = false;
      while(!(*OK)) {
    printf("Input tolerance\n");
    scanf("%lf", TOL);
    if (*TOL <= 0.0) printf("Tolerance must be positive\n");
    else *OK = true;
      }
      *OK = false;
      while (!(*OK)) {
    printf("Input maximum number of iterations - no decimal point\n");
    scanf("%d", NO);
    if (*NO <= 0) printf("Must be positive integer\n");
    else *OK = true;
      }
   }
   else {
      printf("The program will end so that the function F can be created\n");
      *OK = false;
   }
}

void OUTPUT(FILE **OUP, int *FLAG)
{
   char NAME[30];

   printf("Select output destination\n");
   printf("1. Screen\n");
   printf("2. Text file\n");
   printf("Enter 1 or 2\n");
   scanf("%d", FLAG);
   if (*FLAG == 2) {
      printf("Input the file name in the form - drive:name.ext\n");
      printf("A:OUTPUT.DTA\n");
      scanf("%s", NAME);
      *OUP = fopen(NAME, "w");
   }
   else *OUP = stdout;
   fprintf(*OUP,"Bisection Method\n");
   printf("Select amount of output\n");
   printf("1. Answer only\n");
   printf("2. All intermeditate approximations\n");
   printf("Enter 1 or 2\n");
   scanf("%d", FLAG);
   if (*FLAG == 2) fprintf(*OUP, "  I                 P              F(P)\n");
}  
    

/* Absolute Value Function */
double absval(double val)
{
   if (val >= 0) return val;
   else return -val;
}
////////////

والملف المرفق للنقطة الثابته
واصبر نفسك مع الذين يدعون ربهم بالغداة والعشي يريدون وجهه ولاتعد عيناك عنهم تريد زينة الحياة الدنيا ولا تطع من اغفلنا قلبه عن ذكرنا واتبع هواه وكان امره فرطا

أكتوبر 16, 2007, 11:00:17 مساءاً
رد #10

haaya

  • عضو مبتدى

  • *

  • 81
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #10 في: أكتوبر 16, 2007, 11:00:17 مساءاً »
طريقة نيوتن -رابسون
واصبر نفسك مع الذين يدعون ربهم بالغداة والعشي يريدون وجهه ولاتعد عيناك عنهم تريد زينة الحياة الدنيا ولا تطع من اغفلنا قلبه عن ذكرنا واتبع هواه وكان امره فرطا

أكتوبر 16, 2007, 11:02:27 مساءاً
رد #11

haaya

  • عضو مبتدى

  • *

  • 81
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #11 في: أكتوبر 16, 2007, 11:02:27 مساءاً »
طريقة القاطع
والباقي في الايام القادمة ان شاء الله لأن عدد الملفات كبير
واصبر نفسك مع الذين يدعون ربهم بالغداة والعشي يريدون وجهه ولاتعد عيناك عنهم تريد زينة الحياة الدنيا ولا تطع من اغفلنا قلبه عن ذكرنا واتبع هواه وكان امره فرطا

أكتوبر 17, 2007, 04:59:44 مساءاً
رد #12

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #12 في: أكتوبر 17, 2007, 04:59:44 مساءاً »

(haaya @ 16/10/2007 الساعة 22:00)
QUOTE
طريقة نيوتن -رابسون

مشكوووووووووووووووووووووووووووور ويعطيك الله ألف عافية  ':111:'  ':111:'  ':111:'  ':110:'

أكتوبر 17, 2007, 05:00:54 مساءاً
رد #13

miss-moon

  • عضو مبتدى

  • *

  • 12
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #13 في: أكتوبر 17, 2007, 05:00:54 مساءاً »

(haaya @ 16/10/2007 الساعة 22:00)
QUOTE
طريقة نيوتن -رابسون

مشكوووووووووووووووووووووووووووور ويعطيك الله ألف عافية  ':111:'  ':111:'  ':111:'  ':110:'  ونحن بانتظار الباقي

أكتوبر 17, 2007, 10:17:42 مساءاً
رد #14

haaya

  • عضو مبتدى

  • *

  • 81
    مشاركة

    • مشاهدة الملف الشخصي
برامج بلغة C لحل معادلات غير خطية
« رد #14 في: أكتوبر 17, 2007, 10:17:42 مساءاً »
false position method
واصبر نفسك مع الذين يدعون ربهم بالغداة والعشي يريدون وجهه ولاتعد عيناك عنهم تريد زينة الحياة الدنيا ولا تطع من اغفلنا قلبه عن ذكرنا واتبع هواه وكان امره فرطا