Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- void dif_dividides(double *x, double *y,int n){
- double *cs=malloc(sizeof(double)*n);
- int i;
- for(i=1;i<n;i++){
- int j;
- for(j=0;j<n-i;j++){
- y[j]=(y[j+1]-y[j])/(x[j+i]-x[j]);
- }
- cs[i]=y[0];
- }
- for(i=0;i<n;i++){
- y[i]=cs[i];
- }
- free(cs);
- }
- double aval(double *x,double *c, int n, double t){
- double r=0;
- int i;
- for(i=0;i<n;i++){
- double p=c[i];
- int j;
- for(j=0;j<i;j++){
- p=p*(t-x[j]);
- }
- r=r+p;
- }
- return r;
- }
- void imprimirArray(double *a, int n){
- int i;
- for(i=0;i<n;i++){
- printf("%e,",a[i]);
- }
- printf("\n");
- }
- double f(double t){
- return exp(sin(t)+cos(t));
- }
- int main(int argc,char *argv[]){
- if(argc>0){
- char *aux;
- int n=(int)strtol(argv[0],&aux,10);
- double *x=malloc(sizeof(double)*(n+1));
- double *y=malloc(sizeof(double)*(n+1));
- double inc=2*M_PI/n;
- double d=0;
- int i=0;
- while(d<=2*M_PI){
- x[i]=d;
- y[i]=f(d);
- d=d+inc;
- i++;
- }
- dif_dividides(x,y,n+1);
- char *nomArxiu="interp0";
- char cn='0'+n;
- aux=strcat(nomArxiu,&cn);
- aux=strcat(nomArxiu,".res");
- FILE *file=fopen(nomArxiu,"w");
- d=0.f;
- inc=2*M_PI/1000;
- double exacte=f(d);
- double aproximat=aval(x,y,n+1,d);
- double errorRelatiu=abs((exacte-aproximat)/exacte);
- for(i=0;i<1000;i++){
- fprintf(f,"%e %e %e %e",d,exacte,aproximat,errorRelatiu);
- d=d+inc;
- }
- fclose(file);
- }
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement