跳至内容

电路理论/卷积积分/代码

取自维基教科书,一个开放的世界的开放书籍
#include <iostream>
#include <TF1.h>
#include <TCanvas.h>
#include <TAttLine.h>
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TLatex.h>
#include <TGraph.h>


//Instantiate the functions and graphs to be used
//Their properties will be set later
TF1 *func1;       //The function to be translated
TF1 *func2;       //The Function to be reflected
TF1 *func3;       //The product of func1 and func2
TGraph *graph4;   //The Resulting Convolution Graph

//Set Precision of the Integrals (number of steps)
Int_t precision = 100;

//Create an animated gif?
Bool_t createGIF = true;



//Does the multiplication of the two functions
Double_t multipliedFuncs(Double_t *x, Double_t *par){
  Double_t xx = x[0];
  Double_t f_x = func1->Eval(xx)*func2->Eval(xx);
  return f_x;
}//End multipliedFuncs




//Find the larger value between of the functions
//This is used to shade the overlap region
Double_t smallerValue(Double_t x){
  
  //Evaluate the Functions
  Double_t val1 = func1->Eval(x);
  Double_t val2 = func2->Eval(x);
  
  if (val1 < val2)
    return val1;
  else
    return val2;

}//End largerValue




//Makes Graph 5 for each x position
//Graph 5 is responsible for shading the overlap region
TGraph *graph5 = new TGraph();

void makeGraph5(){

  Double_t tempX =-10.0;
  Int_t point = 0;

  //Loop Over all values of x and find the overlap region to shade
  do {

    graph5->SetPoint(point, tempX, smallerValue(tempX));
    
    tempX += 0.05;
    point++;

  } while(tempX < 10.0);

}//End makeGraph5
华夏公益教科书