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

Автор работы: Пользователь скрыл имя, 20 Ноября 2011 в 18:23, курсовая работа

Описание работы

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

Содержание работы

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

Файлы: 1 файл

referat.doc

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

Приложение 1.1.

#include <math.h>

#include <stdio.h>

double f(double x)

{

   return 5^x-3*x-5;

}

double findRootChord (double a,

                 double b,

                 double eps,

                 long max_step,

                 double (&f)(double))

{

   double f_a = f(a);

   double f_b = f(b);

   double xn;

   for(long k=0; k<max_step; k++)

   {

            xn = a-f_a*(b-a)/(f_b-f_a);      double f_xn = f(xn);

      if(fabs(f_xn)<eps)    

     {

       break;

      }

      if(f_xn*f_b<0)

      {                          

       a = xn; f_a = f_xn; 

      }

      else

      {

       b = xn; f_b = f_xn;

      }

   }

   return xn;

}

void main()

{

clrscr();

   cout.precision(6);

   cout.setf(ios::fixed|ios::showpoint);

   double x = findRootChord(-10,1,.0000001,10000,f);

   cout<<"x =    "<<x<<endl;

   cout<<"f(x) = "<<f(x)<<endl;

   getch();

}

    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  Приложение 2.1.

  struct files

    {

     float x;

     float y;

     struct files *radr;

    }*w_f, *r_f, *l_f; 

   struct msp

   {

    struct msp *radr1;

    float z;

   } *w_msp, *r_msp, *l_msp; 

   struct fll

   {

    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();

  }

 

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