#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define NMAX 100
int indata(double *,double *,double *);
void minquad(int,double *,double *,double *,double *);
void chiq(int,double *,double *,double *,double *);
int leggi(double *,double *,double *);
void stamp(int,double *,double *,double *,double *,char [80][80]);
int main()
{
double x[NMAX],y[NMAX],s[NMAX],r[5];
int n,i;
char nome[100],graf[80][80];
//printf(\"Inserire nome del file che contiene i dati(max 8 caratteri)\\n\");
//scanf(\"%s\",nome);
n=leggi(x,y,s);
//n=indata(x,y,s);
for(i=0;i<n;i++)
{
y[i]=log(y[i]);
s[i]=s[i]/y[i];
}
minquad(n,x,y,s,r);
stamp(n,x,y,s,r,graf);
return(0);
}
int indata(double *x,double *y,double *s)
{
int nn,i,j,k;
printf(\"Inserire numero rilevamenti\\n\");
scanf(\"%d\",&nn);
printf(\"inserire i valori delle x\\n\");
for(i=0;i<nn;i++) scanf(\"%lf\",&x[i]);
printf(\"inserire i valori delle y\\n\");
for(j=0;j<nn;j++) scanf(\"%lf\",&y[j]);
printf(\"inserire i valori delle sigma\\n\");
for(k=0;k<nn;k++) scanf(\"%lf\",&s[k]);
return(nn);
}
void minquad(int n ,double *x,double *y,double *s,double *r)
{
int i;
double s1,sx,sxx,sxy,sy,d;
for(i=0;i<n;i++)
{
s1+=1/(s[i]*s[i]);
sx+=x[i]/(s[i]*s[i]);
sxx+=(x[i]*x[i])/(s[i]*s[i]);
sxy+= x[i]*y[i]/(s[i]*s[i]);
sy+=y[i]/(s[i]*s[i]);
}
d=1/((s1*sxx)-(sx*sx));
r[0]=d*((sxx*sy)-(sx*sxy));
r[1]=d*(-(sx*sy)+(s1*sxy));
r[2]=d*sxx;
r[3]=d*s1;
r[4]=-(d*sx);
printf(\"I valori dei parametri sono:\\n\");
printf(\" A1=%lf\",r[0]);
printf(\" A2=%lf\",r[1]);
printf(\" sigmaA1=%lf\",r[2]);
printf(\" SigmaA2=%lf\",r[3]);
printf(\" Cov=%lf\",r[4]);
chiq(n,x,y,s,r);
}
void chiq(int n ,double *x,double *y,double *s,double *r)
{
int i;
double chi=0;
for(i=0;i<n;i++)
chi+=((y[i]-((x[i]*r[1])-r[0]))*(y[i]-((x[i]*r[1])-r[0])))/(s[i]*s[i]);
printf(\" CHIQ=%lf\\n\",chi);
}
int leggi(double *x,double *y,double *s)
{
FILE *p;
double x1,y1,s1;
int i;
//char ind[100]={\"/home/studenti/lcgc17/data/\"};
i=0;
//strcat(ind,nome);
//printf(\"%s\\n\",ind);
printf(\"1\\n\");
p=fopen(\"ciao\",\"r\");
if (p==NULL) printf(\"si\");
else printf(\"no\");
for(i=0;i<NMAX && fscanf(p,\"%lf %lf %lf\",x1,y1,s1)!=EOF;i++)
{
x[i]=x1;
y[i]=y1;
s[i]=s1;
}
fclose(p);
return(i) ;
}
void stamp(int n,double *x,double *y,double *s,double *r,char graf[80][80])
{
int i,j,k,px,py;
double max,fs;
for(i=0;i<80;i++) for(j=0;j<0;j++) graf[i][j]=' ';
i=0;
j=0;
k=0;
for(i=0;i<80;i++) graf[i][0]='_';
for(j=0;j<80;j++) graf[0][j]='|';
max=x[0];
for(k=0;k<n>max) max=x[i];
if (max>80)fs=max/80;
i=0;
j=0;
k=0;
for(k=0;k<n;k++)
{
px=x[k]/fs;
py=y[k]/fs;
graf[80-px][py]='*';
}
for(i=79;i=0;i--);
{
for(j=0;j<80;j++) printf(\"%c\",graf[i][j]);
printf(\"\\n\");
}
}
il programma dovrebbe leggere dei dati da file, calcolarne i minimi quadrati e poi stampare su grafico in un altro file la retta data dai minimi quadrati....ma....c'è qualcosa che non va...vi prego...qualcuno sa pechè??
per chi non sa cosa sono i minimi quadrati
http://www.roma1.infn.it/people/ciapetti/labcalc/MinimiQuadrati.ppt
per piacere...confido in voi!
EDIT: Ho trovato su inteernet questo penso dovrebbe essere lo stesso programma senza stampa del grafico e in non so quale linguaggio....per piacere...mi autate?