Projekt na WDP Politechnika Krk

0

Witam!
Mam mały problem ze zrozumieniem treści projektu, oto treść:

"Policz wartości funkcji f=f(x) we wszystkich pkt podziału na N części przedziału (a.b). Funkcja f dana jest jako rozszerzenie w szereg potęgowy i w postaci wzoru analitycznego. Obliczenie sumy szeregu wykonaj z dokładnością epsilon. Algorytm obliczenia sumy szeregu zapisz w oddzielnej funkcji. wyniki wyświetl na ekranie i zapisz do pliku."

Dane do zadania:
dziedzina: |x|<1
coś: (1-x)^(-3/2)
i ten szereg chyba: 1 + (3/2)x + (35/24)(x2) + (357)/(246)*(x3) ...

Pierwsza część umiem zrobić, dokładność epsilon tez, ale o co chodzi z "Funkcja f dana jest jako rozszerzenie w szereg potęgowy i w postaci wzoru analitycznego."?

Na zajęciach robiliśmy coś podobnego:

 
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main()
{
  FILE *fw;
  double a,b,dx,x,y,fun(),eps; 

  printf("Podaj poczatek przedzialu ");
  scanf("%lf",&a);

  printf("Podaj koniec przedzialu ");
  scanf("%lf",&b);

  printf("Podaj na ile dzielic ");
  scanf("%lf",&dx);

  printf("podaj dokladnosc epsilon");
  scanf("%lf", &eps);

  fw=fopen("wynik2", "w");


  dx=(b-a)/dx;
  x=a;
  do
    {
      y=fun(x,eps);
      printf("x=%lf\t fun(x)=%lf\t exp(x)=%lf\n ",x,y,exp(x));
      x=x+dx; 
    } while (x<=b);

  fclose(fw);
}

double fun(double x, double eps) 
{
  double s,a;
  long n;
  a=1;
  s=1;
  n=1;
 
  do
{
  a=a*(x/n);
  s=s+a;
  n=n+1;
 } while(fabs(a)>fabs(s)*eps);
  return s;
}
1

Ale gdzie jest problem? Masz to liczyć na dwa sposoby. Jeden sposób to użycie funkcji cosinus explicite przez cos() w kodzie. Drugie to użycie wzoru na szereg który masz podany. W kodzie powyżej używałeś szeregu
suma po i : (x/n)^i

0

czyli zrobic nowa funkcje jako szereg? a (1-x)^(-3/2) do czego sie przyda?

0

Czy ja napisałem coś niewyraźnie? o_O
Masz zrobić w kodzie DWIE FUNKCJE obliczające wartość twojej zadanej funkcji. Jedna liczy ze wzoru bezpośrednio czyli wylicza (1-x)^(-3/2) a druga wylicza TO SAMO ale za pomocą szeregu. Czego w tym zdaniu nie rozumies?

0

Napisalem takie cos:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int main(){
    double a,b,n,x,y,eps;
    double fun();
    FILE *fw;
    
    
    printf("Autorem programu jest Wojciech Ciuba, Isem, inf. WFMiI\n"
           "Program sprawdza roznice obliczania szeregiem potegowym a wzorem analitycznym\n"
           "Dziedzina funkcji to |x| < 1\n"
           "Podaj poczatek przedzialu funkcji mieszczacy sie w dziedzinie, x mieszczacy sie w -1,1:\n ");
    scanf("%lf",&a);
    
    if(fabs(a)<1){
        printf("Podaj koniec przedzialu mieszczacy sie w dziedzinie:\n");
        scanf("%lf",&b);
        
        if((fabs(b)<1) && (a<b) && (a!=b)){ /*tutaj program zaczyna dzialanie jezeli dziedzina jest prawidlowa*/
            printf("Podaj na ile czesci funkcja ma byc podzielona (liczba naturalna wieksza od 0):\n");
            scanf("%lf",&n);
            printf("Podaj dokladnosc epsilon: \n");
            scanf("%lf",&eps);
            
            if(n>0){
            n=(b-a)/n;
            x=a;
            
            fw=fopen("wynik","w");
            
            do{
                
                
                y=sqrt(pow((1./(1-x)),3));
                fprintf(fw, "Dla x = %lf \t\t Wynik ze wzoru analitycznego: y = %lf, \t", x, y);
                printf("Dla x = %lf \t\t Wynik ze wzoru analitycznego: y = %lf, \t", x, y);
                y=fun(x,n);
                fprintf(fw, "\tWynik z funkcji = %lf\n",y);
                printf("\tWynik z funkcji = %lf\n",y);
                x=x+n;
                
                
            } while(x<=b);
            
            fclose(fw);
            
            
            } else printf("Podales zla liczbe podzialu");}   else printf("Niestety podales zla wartosc koncowa lub wartosc poczatkowa jest wieksza lub rowna koncowej :/");
    } else printf("Niestety podales zla wartosc poczatkowa :/");

    return(EXIT_SUCCESS);/*komenda konczy program pod systemem Windows*/
}

double fun(double x, double eps)
{
    double s,k,z;
    
    z=1;
    s=0;
    k=2;
    
    do{
        s=s+z;
        z=z*(((2*k-1)*x)/(2*(k-1)));
        k=k+1;
    } while (fabs(z)>fabs(s)*eps);
    
    
    return s;
}

Dla parametrow
Dziedzina funkcji to |x| < 1
Podaj poczatek przedzialu funkcji mieszczacy sie w dziedzinie, x mieszczacy sie w -1,1:
-0.9
Podaj koniec przedzialu mieszczacy sie w dziedzinie:
0.9
Podaj na ile czesci funkcja ma byc podzielona (liczba naturalna wieksza od 0):
50
Podaj dokladnosc epsilon:
0.000000000000000001

Wypluwa takie coś:

Dla x = -0.900000 		 Wynik ze wzoru analitycznego: y = 0.381830, 		Wynik z funkcji = 0.375008
Dla x = -0.864000 		 Wynik ze wzoru analitycznego: y = 0.392944, 		Wynik z funkcji = 0.400362
Dla x = -0.828000 		 Wynik ze wzoru analitycznego: y = 0.404609, 		Wynik z funkcji = 0.411635
Dla x = -0.792000 		 Wynik ze wzoru analitycznego: y = 0.416863, 		Wynik z funkcji = 0.409346
Dla x = -0.756000 		 Wynik ze wzoru analitycznego: y = 0.429747, 		Wynik z funkcji = 0.438090
Dla x = -0.720000 		 Wynik ze wzoru analitycznego: y = 0.443310, 		Wynik z funkcji = 0.435714
Dla x = -0.684000 		 Wynik ze wzoru analitycznego: y = 0.457601, 		Wynik z funkcji = 0.466411
Dla x = -0.648000 		 Wynik ze wzoru analitycznego: y = 0.472677, 		Wynik z funkcji = 0.481567
Dla x = -0.612000 		 Wynik ze wzoru analitycznego: y = 0.488599, 		Wynik z funkcji = 0.499250
Dla x = -0.576000 		 Wynik ze wzoru analitycznego: y = 0.505435, 		Wynik z funkcji = 0.496157
Dla x = -0.540000 		 Wynik ze wzoru analitycznego: y = 0.523262, 		Wynik z funkcji = 0.532037
Dla x = -0.504000 		 Wynik ze wzoru analitycznego: y = 0.542161, 		Wynik z funkcji = 0.533095
Dla x = -0.468000 		 Wynik ze wzoru analitycznego: y = 0.562226, 		Wynik z funkcji = 0.572537
Dla x = -0.432000 		 Wynik ze wzoru analitycznego: y = 0.583560, 		Wynik z funkcji = 0.570541
Dla x = -0.396000 		 Wynik ze wzoru analitycznego: y = 0.606278, 		Wynik z funkcji = 0.598344
Dla x = -0.360000 		 Wynik ze wzoru analitycznego: y = 0.630510, 		Wynik z funkcji = 0.642274
Dla x = -0.324000 		 Wynik ze wzoru analitycznego: y = 0.656399, 		Wynik z funkcji = 0.663548
Dla x = -0.288000 		 Wynik ze wzoru analitycznego: y = 0.684110, 		Wynik z funkcji = 0.671265
Dla x = -0.252000 		 Wynik ze wzoru analitycznego: y = 0.713828, 		Wynik z funkcji = 0.706063
Dla x = -0.216000 		 Wynik ze wzoru analitycznego: y = 0.745761, 		Wynik z funkcji = 0.763480
Dla x = -0.180000 		 Wynik ze wzoru analitycznego: y = 0.780148, 		Wynik z funkcji = 0.790750
Dla x = -0.144000 		 Wynik ze wzoru analitycznego: y = 0.817261, 		Wynik z funkcji = 0.822880
Dla x = -0.108000 		 Wynik ze wzoru analitycznego: y = 0.857414, 		Wynik z funkcji = 0.838000
Dla x = -0.072000 		 Wynik ze wzoru analitycznego: y = 0.900965, 		Wynik z funkcji = 0.892000
Dla x = -0.036000 		 Wynik ze wzoru analitycznego: y = 0.948332, 		Wynik z funkcji = 0.946000
Dla x = 0.000000 		 Wynik ze wzoru analitycznego: y = 1.000000, 		Wynik z funkcji = 1.000000
Dla x = 0.036000 		 Wynik ze wzoru analitycznego: y = 1.056536, 		Wynik z funkcji = 1.054000
Dla x = 0.072000 		 Wynik ze wzoru analitycznego: y = 1.118608, 		Wynik z funkcji = 1.108000
Dla x = 0.108000 		 Wynik ze wzoru analitycznego: y = 1.187005, 		Wynik z funkcji = 1.162000
Dla x = 0.144000 		 Wynik ze wzoru analitycznego: y = 1.262669, 		Wynik z funkcji = 1.216000
Dla x = 0.180000 		 Wynik ze wzoru analitycznego: y = 1.346726, 		Wynik z funkcji = 1.330750
Dla x = 0.216000 		 Wynik ze wzoru analitycznego: y = 1.440542, 		Wynik z funkcji = 1.411480
Dla x = 0.252000 		 Wynik ze wzoru analitycznego: y = 1.545780, 		Wynik z funkcji = 1.497070
Dla x = 0.288000 		 Wynik ze wzoru analitycznego: y = 1.664485, 		Wynik z funkcji = 1.587520
Dla x = 0.324000 		 Wynik ze wzoru analitycznego: y = 1.799202, 		Wynik z funkcji = 1.757232
Dla x = 0.360000 		 Wynik ze wzoru analitycznego: y = 1.953125, 		Wynik z funkcji = 1.885060
Dla x = 0.396000 		 Wynik ze wzoru analitycznego: y = 2.130319, 		Wynik z funkcji = 2.023872
Dla x = 0.432000 		 Wynik ze wzoru analitycznego: y = 2.336025, 		Wynik z funkcji = 2.259990
Dla x = 0.468000 		 Wynik ze wzoru analitycznego: y = 2.577108, 		Wynik z funkcji = 2.454951
Dla x = 0.504000 		 Wynik ze wzoru analitycznego: y = 2.862711, 		Wynik z funkcji = 2.671122
Dla x = 0.540000 		 Wynik ze wzoru analitycznego: y = 3.205260, 		Wynik z funkcji = 3.034755
Dla x = 0.576000 		 Wynik ze wzoru analitycznego: y = 3.622023, 		Wynik z funkcji = 3.346641
Dla x = 0.612000 		 Wynik ze wzoru analitycznego: y = 4.137637, 		Wynik z funkcji = 3.853413
Dla x = 0.648000 		 Wynik ze wzoru analitycznego: y = 4.788351, 		Wynik z funkcji = 4.314859
Dla x = 0.684000 		 Wynik ze wzoru analitycznego: y = 5.629494, 		Wynik z funkcji = 5.067651
Dla x = 0.720000 		 Wynik ze wzoru analitycznego: y = 6.749366, 		Wynik z funkcji = 6.018448
Dla x = 0.756000 		 Wynik ze wzoru analitycznego: y = 8.296889, 		Wynik z funkcji = 7.254651
Dla x = 0.792000 		 Wynik ze wzoru analitycznego: y = 10.541563, 		Wynik z funkcji = 8.908874
Dla x = 0.828000 		 Wynik ze wzoru analitycznego: y = 14.018687, 		Wynik z funkcji = 11.608982
Dla x = 0.864000 		 Wynik ze wzoru analitycznego: y = 19.938461, 		Wynik z funkcji = 15.628022

I nie wiem czy to ejst dobrze, i czy nie za duzo rozbieznosc?

0

do zamkniecia

1 użytkowników online, w tym zalogowanych: 0, gości: 1