Witam, mam pewien problem.
Mam takie oto polecenie:
Zaimplementować algorytm, obliczający przybliżone wartości f(x)=exp(x), X E [-30,30] poprzez sumowanie N wyrazów rozwinięcia całej funkcji w szereg Taylora. Zbadaj jak zmieniają się błędy względne przybliżenia funkcji przy wzrastającej liczbie N E [1;100]. Wyjaśnij przyczyny. Dokonaj takiej modyfikacji algorytmu i wybierz takie N, by uzyskać dokładność masywną dla X E [-30;30]
Napisałem część programu ale stoję w miejscu, nie wiem co zrobić dalej.
Proszę o pomoc.
Program poniżej:
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
float silnia(float i)
{
if(i<1){
return 1;
}
else{
return i*silnia(i-1);
}
}
float potega(float a, int b)
{
int pot=1;
while(b>0){
pot*=a;
b--;
}
return pot;
}
float taylor(int x, int n){
int i;
float suma=0;
for(i=0;i<n;i++){
suma=suma+(potega(x,i)/silnia(i));
}
return suma;
}
int main()
{
int n,i,j;
float blad;
float suma=0;
printf("Podaj n:\n");
scanf("%d",&n);
for(j=-30;j<=30;j++){
for(i=0;i<n;i++){
suma=suma+(potega(j,i)/silnia(i));
}
printf("x=%d, e^x=%f\n",j,suma);
blad=abs((potega(M_E,j)-suma))/potega(M_E,j);
printf("blad:%f\n",blad);
blad=0;
suma=0;
}
float licznik=0;
for(j=-30;j<=30;j++){
for(i=0;i<n;i++){
licznik=licznik+potega(j,i)*(silnia(n)/silnia(i));
}
suma=licznik/silnia(n);
printf("x=%d, e^x=%f\n",j,suma);
suma=0;
licznik=0;
}
return 0;
}