Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[C] Interpolacja wielomianowa - dziwne/błędne wyniki.

HuMaNThe 15 Mar 2010 23:51 1875 2
  • #1 15 Mar 2010 23:51
    HuMaNThe
    Poziom 2  

    Witam, otóż mam do zrobienia następujące zadanie:
    zastosuj metodę wielomianu interpolacyjnego Lagrange'a do interpolacji funkcji y=|x|.
    Napisałem program, jednak wprowadzając więcej niż 3 argumenty do obliczenia przez wielomian interpolacyjny funkcji dostaje wartości "-1.#IND00". Zaś jak wprowadzę 3 bądź mniej argumentów, wyniki są dziwne, tzn dla 1 dostaje np 7 (powinno być chyba 1 z racji, że |1|=1?).
    Poniżej kod programu, z góry przepraszam, jeśli błąd wynika z mojego braku wymaganej wiedzy - uczę się sam, także nie wszystko jest jeszcze dla mnie jasne :)

    Code:

    #include <stdio.h>
    #include <math.h>
    double lagr(double x[], double y[], int n1, double xx);
    void main()
    {
       int i, n;
       double xd[100], yd[100], xp, xk, dx, xb, yb;
       FILE *p2=fopen("wynik.txt","w");
       FILE *p1=fopen("dane.txt","w");
       //generowanie wezlow interpolacji
       scanf("%lf %lf %lf",&xp, &xk, &dx);
       n=(xk-xp)/dx+1;
       xb=xp;
       for(i=0; i<n; i++)
       {
          yd[i]=fabs(xb);
          xd[i]=xb;
          xb=xb+dx;
       fprintf (p1,"%lf    %lf \n",xd[i],yd[i]);
       printf ("xd=%lf    yd=%lf \n",xd[i],yd[i]);
       }
       //interpolacja
    scanf("%lf %lf %lf",&xp,&xk,&dx);
    n=(xk-xp)/dx+1;
    xb=xp;
    for(i=0;i<n;i++)
    {
    yb=lagr(xd,yd,n,xb);
    printf("xb=%lf    yb=%lf\n",xb, yb);
    fprintf(p2,"%lf    %lf\n",xb, yb);
    xb=xb+dx;
    }
    }
    double lagr(double x[], double y[], int n1, double xx)
    {
       int i, j;
       double yy, li;
       yy=0;
       for(i=0;i<n1;i++)
       {
          li=1;
          for(j=0;j<n1;j++)
          {
             if(j!=i)
             {
                li=li*(xx-x[j])/(x[i]-x[j]);
             }
             yy=yy+li*y[i];
          }
       }
       return yy;
    }

    0 2
  • Pomocny post
    #2 16 Mar 2010 01:05
    pallid
    Poziom 20  

    Niepoprawnie zaimplementowany algorytm obliczania interpolacji w danym punkcie. Zgodnie ze wzorem:
    [C] Interpolacja wielomianowa - dziwne/błędne wyniki.
    instrukcja:

    Code:
    yy=yy+li*y[i];

    powinna byc w zewnetrznej petli for(;;)

    0
  • #3 16 Kwi 2010 22:56
    HuMaNThe
    Poziom 2  

    Już działa :) Dzięki za pomoc

    0