#include #include #include // ci serve per istanziare grafici #include // ci serve per manipolare gli assi dei grafici #include // ci serve per disegnare i grafici #include // ci serve per scrivere le funzioni con cui fittare i grafici #include // ci serve per manipolare l'output a video using namespace std; void transistor() { // Dati presi in laboratorio: V = tensione, sV = incertezza tensione, i = intensità di corrente, si = incertezza intensità di corrente //PRIMA SERIE DI DATI I1 float ice1[] = {0, 28,29,29.5,30,30.5,31, 31.5,32,32.5,33,33.5,34,34.5,35,35,35.5,36,36.5,37,37.5,38,38,39,40}; float Vce1[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12}; float sice1[] = {0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5}; float sVce1[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; //SECONDA SERIE DI DATI I2 float ice2[] = {0, 44.5,48,50,51,52,52,52,53,54,54,55,56,57,58,59,60,60,61,62,63,64,65,66,67}; float Vce2[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11,11.5,12}; float sice2[] = {0.5,0.5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; float sVce2[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; //TERZA SERIE DI DATI I3 float ice3[] = {0,58,64,66,70,70,71,72,72,73,74,76,77,78,79,80,81,82,83,85,86,87,89}; float Vce3[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5,10,10.5,11}; float sice3[] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; float sVce3[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; //QUARTA SERIE DI DATI I4 ++++++++++ATTENZIONE! QUESTA SERIE DI DATI è FITTATA SU MATHEMATICA!+++++++ float ice4[] = {0,56,83,88,89,90,92,93,94,95,96,98,99}; float sice4[] = {1,1,1,1,1,1,1,1,1,1,1,1,1}; float Vce4[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6}; float sVce4[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; //QUINTA SERIE DI DATI I5 float ice5[] = {0,70,75,75,80,80,80,80,80,80,85,85,85,90,90,90,95,95}; float sice5[] = {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}; float Vce5[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5}; float sVce5[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; //SESTA SERIE DI DATI I6 float ice6[] = {0,85,90,90,90,90,90,95,95,95}; float sice6[] = {5,5,5,5,5,5,5,5,5,5}; float Vce6[] = {0,0.5,1,1.5,2,2.5,3,3.5,4,4.5}; float sVce6[] = {0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01,0.01}; // numero misure prese int nmisure = 25;//per la prima e la seconda serie di dati int nmisure1 = 23;//per la terza serie di dati int nmisure4 = 13; //quarta serie int nmisure5 = 18; //quinta serie int nmisure6 = 10; //sesta serie // ---------------------------------------------------------------- // // ---------------------- Quantità derivate ----------------------- // // ----------------------------------------------------------------- // TMultiGraph *mg=new TMultiGraph(); // --------------------- Grafico i1(V) ------------------------------ // TCanvas *ci1V = new TCanvas("ci1V","i1(v)",200,10,600,400); ci1V->SetFillColor(0); ci1V->cd(); TGraphErrors *gi1V = new TGraphErrors(nmisure,Vce1,ice1,sVce1,sice1); gi1V->SetMarkerSize(0.6); gi1V->SetMarkerStyle(21); gi1V->SetTitle("i1(V)"); gi1V->GetXaxis()->SetTitle("V [V]"); gi1V->GetYaxis()->SetTitle("i1 [mA]"); gi1V->Draw("AP"); // ----------------------------------------------------------------- // // --------------------- Grafico i2(V) ------------------------------ // TCanvas *ci2V = new TCanvas("ci2V","i2(V)",200,10,600,400); ci2V->SetFillColor(0); ci2V->cd(); TGraphErrors *gi2V = new TGraphErrors(25,Vce2,ice2,sVce2,sice2); gi2V->SetMarkerSize(0.6); gi2V->SetMarkerStyle(21); gi2V->SetTitle("i2(V)"); gi2V->GetXaxis()->SetTitle("V [V]"); gi2V->GetYaxis()->SetTitle("i2 [mA]"); gi2V->Draw("AP"); // ----------------------------------------------------------------- // // ----------------------- Grafico i3(V) -------------------- // TCanvas *ci3V = new TCanvas("ci3V","i3(V)",200,10,600,400); ci3V->SetFillColor(0); ci3V->cd(); TGraphErrors *gi3V = new TGraphErrors(nmisure1,Vce3,ice3,sVce3,sice3); gi3V->SetMarkerSize(0.6); gi3V->SetMarkerStyle(21); gi3V->SetTitle("i3(V)"); gi3V->GetXaxis()->SetTitle("V [V]"); gi3V->GetYaxis()->SetTitle("i3 [mA]"); gi3V->Draw("AP"); TCanvas *ci4V = new TCanvas("ci4V","i4(V)",200,10,600,400); ci4V->SetFillColor(0); ci4V->cd(); TGraphErrors *gi4V = new TGraphErrors(13,Vce4,ice4,sVce4,sice4); gi4V->SetMarkerSize(0.6); gi4V->SetMarkerStyle(21); gi4V->SetTitle("i4(V)"); gi4V->GetXaxis()->SetTitle("V [V]"); gi4V->GetYaxis()->SetTitle("i4 [mA]"); gi4V->Draw("AP"); cout << "\n\n --------------FUNZIONE DEFINITA A TRATTI LOG E RETTA i1(V)------------------" <Fit(ciao,"MR+"); TF1 *logaritmo1 = new TF1("logaritmo1","[0]*log([1]*x+1)+[2]",0.5,1); logaritmo1->SetParameter(0,28); logaritmo1->SetParameter(1,1.7); logaritmo1->SetParameter(2,0); gi1V->Fit(logaritmo1,"MR+"); TF1 *retta1 = new TF1("retta1","[3]*x+[4]",1,12); retta1->SetParameter(3,1); retta1->SetParameter(4,26); gi1V->Fit(retta1,"MR+"); // TF1 *somma1 = new TF1("somma1","ciao+logaritmo1 + retta1"); // gi1V->Fit(somma1,"MR+"); // cout << "Chi^2:" << somma1->GetChisquare() << ", number of DoF: " << somma1->GetNDF() << " (Probability: " << somma1->GetProb() << ")." << endl; cout << "--------------------------------------------------------------------------------------------------------" << endl; mg->Add(gi1V,"lp1"); cout << "\n\n --------------FUNZIONE DEFINITA A TRATTI LOG E RETTA i2(V)------------------" <Fit(ciao2,"MR+"); TF1 *logaritmo2 = new TF1("logaritmo2","[0]*log([1]*x+1)+[2]",0.5,1); logaritmo2->SetParameter(0,50); logaritmo2->SetParameter(1,1.7); logaritmo2->SetParameter(2,0); gi2V->Fit(logaritmo2,"MR+"); TF1 *retta2 = new TF1("retta2","[3]*x+[4]",1,12); retta2->SetParameter(3,1); retta2->SetParameter(4,50); gi2V->Fit(retta2,"MR+"); // TF1 *somma2 = new TF1("somma2","logaritmo2 + retta2"); // gi2V->Fit(somma2,"MR+"); // cout << "Chi^2:" << somma2->GetChisquare() << ", number of DoF: " << somma2->GetNDF() << " (Probability: " << somma2->GetProb() << ")." << endl; cout << "--------------------------------------------------------------------------------------------------------" << endl; mg->Add(gi2V,"lp2"); cout << "\n\n --------------FUNZIONE DEFINITA A TRATTI LOG E RETTA i3(V)------------------" <Fit(ciao3,"MR+"); TF1 *logaritmo3 = new TF1("logaritmo3","[0]*log([1]*x+1)+[2]",0.5,1.5); logaritmo3->SetParameter(0,70); logaritmo3->SetParameter(1,1.7); logaritmo3->SetParameter(2,0); gi3V->Fit(logaritmo3,"MR+"); TF1 *retta3 = new TF1("retta3","[3]*x+[4]",1.5,12); retta3->SetParameter(3,1); retta3->SetParameter(4,70); gi3V->Fit(retta3,"MR+"); cout << "\n\n --------------FUNZIONE DEFINITA A TRATTI LOG E RETTA i3(V)------------------" <Fit(ciao4,"MR+"); TF1 *logaritmo4 = new TF1("logaritmo4","[0]*log([1]*x+1)+[2]",0,1); logaritmo4->SetParameter(0,70); logaritmo4->SetParameter(1,1.7); logaritmo4->SetParameter(2,0); gi4V->Fit(logaritmo4,"MR+"); TF1 *retta4 = new TF1("retta4","[3]*x+[4]",1.5,12); retta4->SetParameter(3,1); retta4->SetParameter(4,70); gi4V->Fit(retta4,"MR+"); // TF1 *somma4 = new TF1("somma4","logaritmo4 + retta4"); // gi4V->Fit(somma4,"MR+"); // cout << "Chi^2:" << somma3->GetChisquare() << ", number of DoF: " << somma3->GetNDF() << " (Probability: " << somma3->GetProb() << ")." << endl; cout << "--------------------------------------------------------------------------------------------------------" << endl; //TF1 *sommatot = new TF1("somma4","somma1+somma2+somma3"); cout<< "\n\t---------------------------FINE PROGRAMMA---------------------------\n"<Add(gi3V,"lp3"); mg->Add(gi4V,"lp4"); //mg->Add(gi0V,"lp4"); mg->Draw("AP"); }