Code covered by the BSD License  

Highlights from
UnitConvert

from UnitConvert by Christophe Tilman
this script allow conversion between various engineering units.

DataOut=UnitConvert(DataIn,UnitIn,UnitOut)
%UNITCONVERT allow conversion between various units.
%
%Description:      
%list=UNITCONVERT give a list of available categories
%
%units=UNITCONVERT('category') give a list of available units for one category
%
%category=UNITCONVERT('unit') give the category name for that unit
%
%DataOut=UNITCONVERT(DataIn,'UnitIn') convert DataIn(matrix) to Standard Unit:
%                           acceleration:meter/sec
%                           angle:degree
%                           area:meter
%                           computer:bit
%                           concentration:mole/liter
%                           Density:kilogram/meter
%                           Distance:meter
%                           Energy:joule
%                           Flow:liter/minute
%                           Force:newton
%                           Light:lux
%                           Mass:kilogram
%                           Power:watt
%                           Pressure:pascal
%                           Rotation:revolution/second
%                           Speed:meter/second
%                           Time:second
%                           Torque:newton meter
%                           Volume:cubic meter
%                           Volume - Dry:liter
%                           Without Dimension:[]
%
%DataOut=UNITCONVERT(DataIn,'UnitIn','UnitOut') convert DataIn(matrix) 
% from UnitIn to UnitOut
%
%Exemple:
%   UnitConvert(500,'meter','kilometer')
%   ans =
%   0.5000
%
%   Author: Christophe Tilman
%   Creation date: 14/08/09
%   Contact, comments, suggestions: chr_tilman@hotmail.com
%   Based on Convert.exe (Joshua F. Madisson)
%


function DataOut=UnitConvert(DataIn,UnitIn,UnitOut)

categories={...
    'Acceleration';...
    'Angle';...
    'Area';...
    'Computer';...
    'Concentration';...
    'Density';...
    'Distance';...
    'Energy';...
    'Flow';...
    'Force';...
    'Light';...
    'Mass';...
    'Power';...
    'Pressure';...
    'Rotation';...
    'Speed';...
    'Time';...
    'Torque';...
    'Volume';...
    'Volume - Dry';...
    'Without Dimension';...
};

%acceleration (StdUnit:meter/sec)
items{1}={'centimeter/sec';'foot/sec';'gravity';'meter/sec';'mile/hour second';'millimeter/sec'};
coef{1}=[0.01;0.3048;9.8066882;1;0.44704101;0.001];

%angle (StdUnit:degree)
items{end+1}={'degree';'grad';'minute';'radian';'revolution';'second'};
coef{end+1}=[1;0.9000009;0.01666666667;57.2958;360;0.0002777777778];

%area (StdUnit:meter)
items{end+1}={'acre';'centimeter';'foot';'hectare';'inch';'kilometer';'meter';'mile';'milimeter';'yard'};
coef{end+1}=[4046.825252;0.0001;0.09290304;10000;0.00064516;1000000;1;2589988.11;1e-6;0.83612736];
    
%computer (StdUnit:bit)
items{end+1}={'bit';'byte';'exabyte';'gigabyte';'kilobit';'kilobyte';'megabit';'megabyte';'nibble';...
    'petabyte';'terabyte';'yottabyte';'zettabyte'};
coef{end+1}=[1;8;9.223372037e+018;8589934592;1024;8192;1048576;8388608;4;9.007199255e+015;8.796093022e+012;...
    9.671406557e+024;9.444732966e+021];

%concentration (StdUnit:mole/liter)
items{end+1}={'kilomole/meter';'micromole/centimeter';'micromole/decimeter';'micromole/liter';...
    'millimole/centimeter';'millimole/decimeter';'millimole/liter';'millimole/meter';...
    'millimole/millileter';'mole/decimeter';'mole/liter';'mole/meter';'one elementary entity/meter'};
coef{end+1}=[1;0.001;1e-6;1e-6;1;0.001;0.001;1e-6;1;1;1;0.001;1.660540104e-027];

%Density (StdUnit:kilogram/meter)
items{end+1}={'gram/centimeter';'gram/meter';'kilogram/meter';'milligram/meter';'ounce/gallon';...
    'pound/foot';'pound/gallon';'pound/inch';'specific gravity';'ton/yard'};
coef{end+1}=[1000;0.001;1;1e-6;7.489151707;16.01846337;0.46872;27679.90471;0.4487015;693.5925001];

%Distance (StdUnit:meter)
items{end+1}={'centimeter';'dekameter';'foot';'furlong';'hectometer';'inch';'kilometer';'lightyear';...
    'meter';'micrometer';'mil';'mile';'millimeter';'nanometer';'nautical mile';'parsec';'yard'};
coef{end+1}=[0.01;10;0.3048;201.168;100;0.0254;1000;9.460528e+015;1;1e-6;1e-6;1609.344;0.001;1e-9;1852;...
    3.085678186e+016;0.9144];

%Energy (StdUnit:joule)
items{end+1}={'attojoule';'BTU';'calorie';'dyne-centimeter';'electron volt';'erg';'gigajoule';...
    'gigawatt-hour';'gram force-centimeter';'horsepower-hour';'joule';'kilocalorie';'kiloelectron volt';...
    'kilojoule';'kilowatt-hour';'megaelectron volt';'megajoule';'megawatt-hour';'microjoule';...
    'millijoule';'nanojoule';'newton-meter';'ounce force-inch';'pound force-foot';'pound force-inch';...
    'poundal-foot';'therm';'watt-hour';'watt-second'};   
coef{end+1}=[1e-18;1055.055853;4.1868;1e-7;1.60219e-019;1e-7;1e+9;3.6e+012;9.80665e-005;2684519.538;...
    1;4186.8;1.60219e-016;1000;3600000;1.60219e-013;1e+6;3600000000;1e-6;0.001;1e-9;1;0.007061551814;...
    1.355817948;0.112984829;0.04214011009;105506000;3600;1];
    
%Flow (StdUnit:liter/minute)
items{end+1}={'centimeter/hour';'centimeter/minute';'centimeter/second';...
    'foot/hour';'foot/minute';'foot/second';...
    'gallon (UK)/day';'gallon (UK)/hour';'gallon (UK)/minute';'gallon (UK)/second';...
    'gallon/day';'gallon/hour';'gallon/minute';'gallon/second';...
    'liter/day';'liter/hour';'liter/minute';'liter/second';...
    'meter/day';'meter/hour';'meter/minute';'meter/second';...
    'milliliter/hour';'milliliter/minute';'milliliter/second';...
    'ounce (UK)/hour';'ounce (UK)/minute';'ounce (UK)/second';...
    'ounce/hour';'ounce/minute';'ounce/second';...
    'yard/hour';'yard/minute';'yard/second'};
coef{end+1}=[1.666666667e-005;0.001;0.06;0.4719474432;28.31684659;1699.010796;0.003157008333;...
    0.0757682;4.546092;272.76552;0.002628758183;0.0630901964;3.785411784;227.124707;0.0006944444444;...
    0.01666666667;1;60;0.6944444444;16.66666667;1000;60000;1.666666667e-005;0.001;0.06;0.00047355125;...
    0.028413075;1.7047845;0.0004928921594;0.02957352956;1.774411774;12.74258097;764.554858;45873.29148];

%Force (StdUnit:newton)
items{end+1}={'dyne';'gram force';'kilogram force';'kilonewton';'millinewton';'newton';...
    'ounce-force';'pound-force';'kilopound-force'};
coef{end+1}=[1e-5;0.00980665;9.80665;1000;0.001;1;0.278013851;4.448221615;4448.221615];

%Light (StdUnit:lux)
items{end+1}={'flame';'foot-candles';'lux';'meter-candles'};
coef{end+1}=[43.05564167;10.76391042;1;1];

%Mass (StdUnit:kilogram)
items{end+1}={'carat';'grain';'gram';'kilogram';'megagram';'microgram';'milligram';...
    'ounce (avdp)';'ounce (troy)';'pennyweight';'pound (advp)';'pound (troy)';...
    'stone';'ton (long)';'ton (short)';'tonne'};
coef{end+1}=[0.0002;6.479891e-005;0.001;1;1000;1e-009;1e-006;0.02834952312;0.031103475;...
    0.00155517384;0.45359237;0.3732417;6.35029318;1016.046909;907.18474;1000];

%Power (StdUnit:watt)
items{end+1}={'BTU/hour';'BTU/minute';'BTU/second';'calorie/second';'horsepower';...
    'kilowatt';'megawatt';'pound-feet/minute';'pound-feet/second';'watt'};
coef{end+1}=[0.2928104185;17.56862511;1054.117506;4.183076342;745.6998716;1000;1000000;...
    0.02259696581;1.355817948;1];
    
%Pressure (StdUnit:pascal)
items{end+1}={'atmosphere';'bar';'centimeters of mercury';'dyne/centimeter';...
    'inches of mercury';'kilogram/centimeter';'kilogram/meter';'kilopascal';...
    'megapascal';'microbar';'millibar';'millimeters of mercury';'pascal';...
    'pound/foot';'pound/Inch';'kilopound/Inch';'ton/foot';'ton/Inch';'torr'};
coef{end+1}=[101325;100000;1333.223684;0.1;...
    3386.388158;98066.5;9.80665;1000;...
    1000000;0.1;100;133.3223684;1;...
    47.88025898;6894.757293;6894757.293;95760.51796;13789514.59;133.3223684];
    
%Rotation (StdUnit:degree/second)
items{end+1}={'revolution/hour';'revolution/minute';'revolution/second';...
    'radian/hour';'radian/minute';'radian/second';...
    'degree/hour';'degree/minute';'degree/second'};
coef{end+1}=[1/3600;1/60;1;1/22619;1/376.992;1/62.832;1/360;1/60;1];

%Speed (StdUnit:meter/second)
items{end+1}={'C';'centimeter/hour';'centimeter/minute';'centimeter/second';...
    'foot/hour';'foot/minute';'foot/second';...
    'kilometer/hour';'kilometer/minute';'kilometer/second';...
    'knot';'mach';'meter/hour';'meter/minute';'meter/second';...
    'mile/hour';'mile/minute';'mile/second'};
coef{end+1}=[299792458;2.777777778e-006;0.0001666666667;0.01;8.466666667e-005;...
    0.00508;0.3048;0.2777777778;16.66666667;1000;0.5144444444;331.46;0.0002777777778;...
    0.01666666667;1;0.44704;26.8224;1609.344];
    
%Time (StdUnit:second)
items{end+1}={'century';'day';'decade';'fortnight';'hour';'leap-year';'millennium';...
    'millisecond';'minute';'month';'nanosecond';'second';'week';'year'};
coef{end+1}=[3153600000;86400;315360000;1209600;3600;31622400;3.1536e+010;0.001;...
    60;2592000;1e-009;1;604800;31536000];
    
%Torque (StdUnit:newton meter)
items{end+1}={'dyne centimeter';'gram-force centimeter';'kilogram-force meter';...
    'kilonewton meter';'kilopond meter';'meganewton meter';'micronewton meter';...
    'millinewton meter';'newton meter';'ounce-force foot';'ounce-force inch';...
    'pound-force foot';'pound-force inch'};
coef{end+1}=[1e-007;9.80665e-005;9.80665;1000;9.80665;1000000;1e-006;0.001;1;0.0847386;...
    0.00706155;1.35582;0.112984775];
    
%Volume (StdUnit:cubic meter)
items{end+1}={'CC';'cubic centimeter';'cubic foot';'cubic inch';'cubic meter';'cubic yard';...
    'cup';'dram';'drop';'gallon';'gallon (UK)';'liter';'milliliter';'minim';...
    'ounce';'ounce (UK)';'pint';'pint (UK)';'quart';'tablespoon';'teaspoon'};
coef{end+1}=[1;1e-006;0.02831684659;1.6387064e-005;1;0.764554858;0.0002365882365;3.6967162e-006;...
    6.48524e-008;0.003785411784;0.004546092;0.001;1e-006;6.161152e-008;2.957352956e-005;...
    2.8413075e-005;0.000473176473;0.000568261;0.000946352946;1.478676478e-005;4.928921594e-006];

%Volume - Dry (StdUnit:liter)
items{end+1}={'barrel';'liter';'pint';'bushel';'quart';'peck'};
coef{end+1}=[115.6271292;35.23907188;1;8.809767971;0.5506104982;1.101220996];
     
%Without Dimension (StdUnit:[])
items{end+1}={'percent';'[]'};
coef{end+1}=[.01;1];
     
     
switch nargin
    case 0%list of categories
        DataOut={};
        for i=1:length(categories)
            DataOut={DataOut{:} categories{i}}';
        end
    case 1%list of items for one category
        DataOut={};
        SIunit=[];
        for i=1:length(categories)
            if strcmp(DataIn,categories{i})
                DataOut=items{i};
                SIunit=find(coef{i}==1);
            end
        end
        if ~isempty(SIunit);
            DataOut={DataOut{[SIunit(1),1:SIunit(1)-1,SIunit(1)+1:end]}};
        end
        %or category name for one unit
        if isempty(DataOut)
            for i=1:length(categories)
                it=items{i};
                for j=1:length(it)
                    if strcmp(DataIn,it{j})
                        DataOut=categories{i};
                    end
                end
            end
        end
    case 2%conversion to StdUnit
        TypeIn='';
        for i=1:length(categories)
            it=items{i};
            for j=1:length(it)
                if strcmp(UnitIn,it{j});
                    TypeIn=categories{i};
                    coefs=coef{i};
                    CoefIn=coefs(j);
                end
            end
        end
        if ~isempty(TypeIn)
            DataOut=DataIn.*CoefIn;
        else
            disp('UnitIn not found in available units')
            DataOut='';
        end
    case 3%conversion
        %conversion is done with 2 steps:
        %step1 from UnitIn to StdUnit
        %step2 from StdUnit to UnitOut
        TypeIn='';
        TypeOut='';
        for i=1:length(categories)
            it=items{i};
            for j=1:length(it)
                if strcmp(UnitIn,it{j});
                    TypeIn=categories{i};
                    coefs=coef{i};
                    CoefIn=coefs(j);
                end
                if strcmp(UnitOut,it{j});
                    TypeOut=categories{i};
                    coefs=coef{i};
                    CoefOut=coefs(j);
                end
            end
        end
        if strcmp(TypeIn,TypeOut) && ~isempty(TypeIn)
            DataOut=DataIn.*CoefIn./CoefOut;
        else
            disp('No match found between UnitIn and UnitOut')
            DataOut='';
        end
end

Contact us at files@mathworks.com