% open a file to write in the LaTeX commands:
f = fopen( 'matrices.tex','w');
fprintf( f, '\\documentclass{exam}\n' );
fprintf( f, '\\usepackage{amsmath}\n' );
fprintf( f, '\\begin{document}\n' );

for k = 1:40

    % compute row and column numbers:
    pd = rand( 1, 1 );
    if pd < 0.05
        % row vector multiplication that might not be possible:
        am = 1;
        an = randi( [ 2 4 ]);
        bm = randi( [ 2 4 ]);
        bn = 1;
    elseif pd < 0.1
        % column vector multiplication that might not be possible:
        am = randi( [ 2 4 ]);
        an = 1;
        bm = 1;
        bn = randi( [ 2 4 ]);
    elseif pd < 0.4
        % row vector multiplication that is possible:
        am = 1;
        an = randi( [ 2 4 ]);
        bm = an;
        bn = 1;
    elseif pd < 0.5
        % column vector multiplication that is possible:
        am = randi( [ 2 4 ]);
        an = 1;
        bm = 1;
        bn = am;
    elseif pd < 0.6
        % matrix multiplication that might not be possible:
        am = randi( [ 2 4 ]);
        an = randi( [ 2 4 ]);
        bm = randi( [ 2 4 ]);
        bn = randi( [ 2 4 ]);
    else
        % matrix multiplication that is possible:
        am = randi( [ 2 4 ]);
        an = randi( [ 2 4 ]);
        bm = an;
        bn = randi( [ 2 4 ]);
    end
    % generate the matrices:
    a = randi( [-4 4], am, an );
    b = randi( [-4 4], bm, bn );
    % write them out as LaTeX code:
    %   matrix a:
    fprintf( f, '  \\[ \\begin{pmatrix}' );
    for r = 1:size( a, 1 )
        for c = 1:size( a, 2 )
            if c > 1
                fprintf( f, ' &' );
            end
            fprintf( f, ' %d', a(r,c) );
        end
        if r < size( a, 1 )
            fprintf( f, ' \\\\' );
        end
    end
    fprintf( f, ' \\end{pmatrix} \\cdot\n' );
    %   matrix b:
    fprintf( f, ' \\begin{pmatrix}' );
    for r = 1:size( b, 1 )
        for c = 1:size( b, 2 )
            if c > 1
                fprintf( f, ' &' );
            end
            fprintf( f, ' %d', b(r,c) );
        end
        if r < size( b, 1 )
            fprintf( f, ' \\\\' );
        end
    end
    fprintf( f, ' \\end{pmatrix} = \\]\n\n' );

end

% close the document and the file:
fprintf( f, '\\end{document}\n' );
fclose( f );
