ROOT (a Data analysis Framework) TMatrix类的简单操作

简单使用TMatrix类

ROOT中的TMatrix类可以实现矩阵运算。详细介绍见ROOTUsersGuide-14 Linear Algebra in ROOT

简单无脑贴脚本(逃):
这个脚本的大意是考虑在t,x平面上完成洛伦兹转动过程,并画出四矢量(1,0,0,0)在原始坐标系中的转动过程。这样可以简单直观地看出,第一,在静止坐标系下观察一个运动的坐标系,随着快度参数逐渐增加,t轴逐渐向光速世界线(x=t)靠拢。第二,在洛伦兹转动下,固有时总是大于坐标时,也就是钟慢效应。

{
Double_t data_x[2] = {1,0};  // 构造一个TMatrix,需要用到这样的数组,目的是填充矩阵的内容

TMatrixD x_ = TMatrixD(2,1,data_x); // (t,x) After LR 
TMatrixD x = TMatrixD(2,1);  // (t=,x) Before LR

Double_t fdata[4] = {1,0,0,1};
TMatrixD A = TMatrixD(2,2,fdata);   // LR Matrix 

TCanvas* c = new TCanvas();

TGraph* g = new TGraph();
TMultiGraph* mg = new TMultiGraph();
Double_t linex[2] = {0,0};
Double_t liney[2] = {0,0}; 

Double_t phi = 0.; 

for(int i=1;i>=0;i++)
{
    phi += 0.1;
    if(phi>=0.8*TMath::Pi()){break;}
    
    fdata[0] = TMath::CosH(-phi);
    fdata[1] = -TMath::SinH(-phi);
    fdata[2] = -TMath::SinH(-phi);
    fdata[3] = TMath::CosH(-phi);
       
    A.Use(2,2,fdata);
    x.Mult(A,x_);  // 写这么多就是僵硬地实现这样一个矩阵乘法的过程……
    x.Print();
    
    liney[1] = TMatrixDRow(x,0)(0);
    linex[1] = TMatrixDRow(x,1)(0); // 用这两个数组把矢量从TMatrix上取下来放到TGraph里
    g = new TGraph(2,linex,liney);
    g->SetMarkerStyle(21);
	g->SetMarkerColor(4);
    mg->Add(g); // mg用于批量画图
}
mg->Draw("ACP");
c->Draw();
}

就是这样
这个活动,有丶草率无聊,主要是开学之后没有时间和心境认认真真学ROOT了。

发布了29 篇原创文章 · 获赞 3 · 访问量 6692

猜你喜欢

转载自blog.csdn.net/weixin_43316938/article/details/100629937
今日推荐