简单使用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了。