Методы решения нелинейных уравнений

Автор работы: Пользователь скрыл имя, 04 Июня 2012 в 21:12, курсовая работа

Краткое описание

В курсовой работе рассматриваются вопросы интерполяции с применением формулы Ньютона. В работе предложены программы вычисления значения функции в заданной точке, а также вычисления значения нелинейного уравнения методом секущих написанных на языке программирования Turbo С 2.0.

Содержание

Введение 4
1. Метод решения нелинейного уравнения методом секущих 7
1.1. Общая характеристика методов решения нелинейных уравнений 7
1.2. Метод секущих 10
1.3. Тестовый пример 12
1.4. Разработка алгоритма решения нелинейных уравнений 15
2. Вычисление значения функции при помощи интерполяционной формулы 16
2.1. Общая характеристика методов интерполяционной функции 16
2.2. Интерполяционная формула Ньютона 24
2.3. Тестовый пример 25
2.4. Разработка алгоритма и программы вычисления функции 26
Заключение 27
Список литературы 28
Приложение 1.1 29
Приложение 2.1

Вложенные файлы: 1 файл

referat.doc

— 421.50 Кб (Скачать файл)

    struct fll *radr2;

    float a;

   } *w_fll,*r_fll, *l_fll; 

   struct u

   {

    struct u *uadr;

    float u;

   } *w_u,*r_u,*l_u; 

   struct v

   {

    struct v *vadr;

    float v;

   } *w_v,*r_v,*l_v; 

  #include <stdio.h>

  #include <stdlib.h> 

   float FileFunction()

   { float h;

      FILE *in;

     in=fopen("spisok.txt","r");

   for (;!feof(in);)

     {

      w_f=(struct files *)malloc(sizeof(struct files));

      if(l_f==NULL) {l_f=w_f;}

      else {r_f->radr=w_f;}

      fscanf(in,"%f",&w_f->x);

      fscanf(in,"%f",&w_f->y);

      r_f=w_f;

     }w_f=l_f;

    fclose(in);

    w_f=l_f->radr;

    h=(w_f->x)-(l_f->x);

    return h;

   } 

   void TableMin()

   {

    float s,s1,p;

    do

     {

      s=w_f->y;

      w_f=w_f->radr;

      s1=w_f->y;

      p=s1-s;

      w_msp=(struct msp *)malloc(sizeof(struct msp));

      w_fll=(struct fll *)malloc(sizeof(struct fll));

      if(l_msp==NULL){l_msp=w_msp;}

      else{r_msp->radr1=w_msp;}

      if(l_fll==NULL){l_fll=w_fll;}

      else{r_fll->radr2=w_fll;}

      w_fll->a=p;r_fll=w_fll;

      w_msp->z=p;r_msp=w_msp;

     }

     while(w_f!=r_f);

    w_msp=l_msp;

    return;

   } 

   void TableMax()

   {

    float p,s,s1,i,c;

    for(i=1;i<=8;i++)

    {c=w_msp->z;

     l_msp=NULL;

     do

    {

     s=c;

     w_msp=w_msp->radr1;

     c=w_msp->z;

     s1=w_msp->z;

     p=s1-s;

     w_fll=(struct fll *)malloc(sizeof(struct fll));

     r_fll->radr2=w_fll;

     w_fll->a=p;r_fll=w_fll;

     r_msp->radr1=w_msp;

     if(l_msp==NULL){w_msp->z=p;l_msp=w_msp;}

     else{w_msp->z=p;}

     }while(w_msp!=r_msp);

     r_msp=w_msp;

     w_msp=l_msp;

    }

    return;

   } 

   float UX(float x,float h)

   {

    float u,u1;

    int i=1;

    w_f=l_f;

    while(w_f!=r_f){w_f=w_f->radr;i++;}

    i=(i/2);

    for(w_f=l_f;i>=1;i--){w_f=w_f->radr;}

    u=(x-(w_f->x))/h;

    w_u=(struct u *)malloc(sizeof(struct u));

    l_u=w_u;

    w_u->u=u;

    r_u=w_u;

    for(i=1;i<=3;i++)

    {

     u1=-(i*i-u*u)/((i*2)*((i*2)+1));

     u1=u1*(w_u->u);

     w_u=(struct u *)malloc(sizeof(struct u));

     r_u->uadr=w_u;

     w_u->u=u1;

     r_u=w_u;

    }

    return u;

   } 

   float VX(float u)

   {

    float v1,v,i;

    v=1-u;

    w_v=(struct v *)malloc(sizeof(struct v));

    l_v=w_v;

    r_v->vadr=w_v;

    w_v->v=v;

    r_v=w_v;

    for(i=1;i<=4;i++)

    {

     v1=-(i*i-v*v)/((i*2)*((i*2)+1));

     v1=v1*(w_v->v);

     w_v=(struct v *)malloc(sizeof(struct v));

     r_v->vadr=w_v;

     w_v->v=v1;

     r_v=w_v;

    }

    return 1;

   } 

   float Summa()

   {

    int j,i=1;

    float s,s1,p;

    w_f=l_f;

    w_fll=l_fll;

    w_u=l_u;

    w_v=l_v;

    while(w_f!=r_f){w_f=w_f->radr;i++;}

    i=(i/2);

    for(w_f=l_f;i>=1;i--){w_f=w_f->radr;}

    s=(w_f->y)*(w_v->v);

    w_f=w_f->radr;

    s1=(w_f->y)*(w_u->u);

    w_f=l_f;

    while(w_f!=r_f){w_f=w_f->radr;i++;}

    i++;

    j=i;

    do

    {

     if(i==0){j--;}

     i=j;

     j=i-1;

     i=j;

     for(;i>=1;i--){w_fll=w_fll->radr2;}

     i=j;

     for(i=((i/2)-1);i>=1;i--){w_fll=w_fll->radr2;}

    w_v=w_v->vadr;

     s=s+(w_fll->a)*(w_v->v);

     i=j;

     for(i=((i/2));i>=1;i--){w_fll=w_fll->radr2;}

    }while(w_fll!=r_fll);

    w_fll=l_fll;

     w_f=l_f;

     while(w_f!=r_f){w_f=w_f->radr;i++;}

     j=i;

     w_u=l_u;

    do

    {

     j=i;

     for(;i>=1;i--){w_fll=w_fll->radr2;}

     i=j-1;

     for(i=((i/2)+1);i>=1;i--){w_fll=w_fll->radr2;}

     w_u=w_u->uadr;

     s1=s1+(w_fll->a)*(w_u->u);

     i=j-1;

     j=0;

     i=i-1;

     for(i=((i/2));i>=1;i--,j++){w_fll=w_fll->radr2;}

     i=j*2;

    }while(w_u!=r_u);

    p=s1+s;

    return p;

   } 

   void main()

  {

   float p,u,h,x;

   l_msp=NULL;l_fll=NULL;l_f=NULL;

   w_u=NULL;r_u=NULL;l_u=NULL;

   w_v=NULL;r_v=NULL;l_v=NULL; 

   h=FileFunction();

   w_f=l_f;

   TableMin();

   TableMax(); 

  printf("\n   BBEDuTE X=");

   scanf(" %f",&x);

   u=UX(x,h);

   VX(u);

   p=Summa(); 

  printf("\nOTBET: %3.4f",p);

  getch();

  }

 


Информация о работе Методы решения нелинейных уравнений