Generating Sets of Dimensionless Products by Otto Wilke otto_wilke@hotmail.com
Reducing the number of variables in an experiment reduces the number of trials necessary to establish the relationship between variables. Dimensional analysis is used to replace an equation relating n variables with an equation relating a complete set of n-r dimensionless products. The behavior of a prototype can be predicted from the behavior of its model provided the dimensionless products of the prototype are equal in value to those of the model.
Suppose a physical situation exists in which the important variables are Distance, Speed, Time, and Acceleration. First, create a list of lists containing the variables and their units.
> restart;with(Units):
> varlist:=[[Distance,meter],[Speed,mile/hour],[Time,minute],[Acceleration,foot/second^2]];
Next, determine the base dimensions of each variable.
> for j from 1 to nops(varlist) do op(1,op(j,varlist))=convert(op(2,op(j,varlist)), dimensions, base);od;
Create a dimensional matrix. Each row consists of the powers of one base dimension for the variables. The powers of length are 1, 1, 0, and 1 for the four variables. Using the same order of the variables , the powers of time are 0, -1, 1, and -2. Determine the rank of that dimensional matrix.
> with(linalg):
Warning, the protected names norm and trace have been redefined and unprotected
> rank([[1,1,0,1],[0,-1,1,-2]]);
The number of dimensionless products (often called Pi terms) in a complete set is the number of variables minus the rank of the dimensional matrix.
> PiTerms:=nops(varlist)-%;
If the rank of the dimensional matrix is one less than the number of rows, reform the dimensional matrix by omitting one row. This usually occurs when only one variable contains a base dimension. That variable can not appear in a dimensionless product because the dimension could not be made to cancel. Try omitting individual rows until the rank is equal to the number of rows.
Each dimensionless product (Pi Term) consists of the product of the remaining variables, with each variable raised to a power.
> EachPiTerm=Distance^k[1]*Speed^k[2]*Time^k[3]*Acceleration^k[4];
Whatever the values of the k's, the dimension of EachPiTerm is
> PiTermDimension=[length]^[k[1]]*[length/time]^[k[2]]*[time]^[k[3]]*[length/time^2]^[k[4]];
Using the rules of exponents,
> PiTermDimension=[length]^[k[1]+k[2]+k[4]]*[time]^[-k[2]+k[3]-2*k[4]];
If EachPiTerm is to be dimensionless, the exponents of each dimension must add to zero.
> k[1]+k[2]+k[4]=0;-k[2]+k[3]-2*k[4]=0;
This is an underdetermined system with two equations and four unknowns. Suppose we decide Distance and Acceleration are the most important variables and we wish for each to appear in only one dimensionless product. For the first PiTerm, select k[1] = 1 and k[4] = 0. For the second PiTerm, select k[4] = 1 and k[1] = 0.
> solve({k[1]=1,k[4]=0,k[1]+k[2]+k[4]=0,-k[2]+k[3]-2*k[4]=0},{k[1],k[2],k[3],k[4]});
> Pi1=Distance/(Speed*Time);
> solve({k[1]=0,k[4]=1,k[1]+k[2]+k[4]=0,-k[2]+k[3]-2*k[4]=0},{k[1],k[2],k[3],k[4]});
> Pi2=(Time*Acceleration)/Speed;
Another Example
Suppose an experiment involves the variables velocity V, length L, force F, mass density MD, dynamic viscosity DV, and acceleration of gravity AG.
> varlist:=[[V,meter/second],[L,meter],[F,kilogram*meter/second^2],[MD,kilogram/meter^3],[DV,kilogram/meter/second],[AG,meter/second^2]];
Use row 1 for powers of length, row 2 for time, row 3 for mass.
> rank([[1,1,1,-3,-1,1],[-1,0,-2,0,-1,-2],[0,0,1,1,1,0]]);
The rank of the dimensional matrix is equal to the number of rows. All the variables can be retained.
Use exponents k[1] for V, k[2] for L, k[3] for F, k[4] for MD, k[5] for DV, and k[6] for AG. Six equations, three dimensions, select values for three k's. Assume the variables V, L, and F are the most important variables and are variables we wish to appear in only one PiTerm. To accomplish that, we select values for k[1], k[2], and k[3]. For Pi1 select k[1] =1, k[2] = 0, and k[3] = 0.
For length
> k[1]+k[2]+k[3]-3*k[4]-k[5]+k[6]=0;
For time
> -k[1]-2*k[3]-k[5]-2*k[6]=0;
For mass
> k[3]+k[4]+k[5]=0;
> solve({k[1]=1,k[2]=0,k[3]=0,k[1]+k[2]+k[3]-3*k[4]-k[5]+k[6]=0,-k[1]-2*k[3]-k[5]-2*k[6]=0,k[3]+k[4]+k[5]=0},{k[1],k[2],k[3],k[4],k[5],k[6]});
The first PiTerm is
> Pi1=V*MD^(1/3)*DV^(-1/3)*AG^(-1/3);
For the second PiTerm, set k[1] = 0, k[2] = 1, and k[3] = 0.
> solve({k[1]=0,k[2]=1,k[3]=0,k[1]+k[2]+k[3]-3*k[4]-k[5]+k[6]=0,-k[1]-2*k[3]-k[5]-2*k[6]=0,k[3]+k[4]+k[5]=0},{k[1],k[2],k[3],k[4],k[5],k[6]});
The second PiTerm is
> Pi2=L*MD^(2/3)*DV^(-2/3)*AG^(1/3);
For the third and last PiTerm, set k[1] = 0, k[2] = 0, and k[3] = 1.
> solve({k[1]=0,k[2]=0,k[3]=1,k[1]+k[2]+k[3]-3*k[4]-k[5]+k[6]=0,-k[1]-2*k[3]-k[5]-2*k[6]=0,k[3]+k[4]+k[5]=0},{k[1],k[2],k[3],k[4],k[5],k[6]});
The third PiTerm is
> Pi3=F*MD*DV^(-2);
Experiments can be conducted, with varying values of the PiTerms, to establish the relationship relating them. A classic example in hydraulics is the plot of Reynold's number versus friction factor for flow in pipes.