MatrixGain

block MatrixGain "Output the product of a gain matrix with the input signal vector"
    parameter Real K[:,:] = [1,0; 0,1] "Gain matrix which is multiplied with the input";

    extends Interfaces.MIMO(final nin = size(K, 2), final nout = size(K, 1));
equation
    y = K * u;

    annotation (
        Documentation(info = "<html>\n<p>\nThis blocks computes output vector <strong>y</strong> as <em>product</em> of the\ngain matrix <strong>K</strong> with the input signal vector <strong>u</strong>:\n</p>\n<pre>\n    <strong>y</strong> = <strong>K</strong> * <strong>u</strong>;\n</pre>\n<p>\nExample:\n</p>\n<pre>\n   parameter: <strong>K</strong> = [0.12 2; 3 1.5]\n\n   results in the following equations:\n\n     | y[1] |     | 0.12  2.00 |   | u[1] |\n     |      |  =  |            | * |      |\n     | y[2] |     | 3.00  1.50 |   | u[2] |\n</pre>\n\n</html>"),
        Icon(
            coordinateSystem(
                preserveAspectRatio = true,
                extent = {
                    {-100, -100}, 
                    {100, 100}}),
            graphics = {
                Text(
                    extent = {
                        {-90, -60}, 
                        {90, 60}},
                    lineColor = {160, 160, 164},
                    textString = "*K")}),
        Diagram(
            coordinateSystem(
                preserveAspectRatio = true,
                extent = {
                    {-100, -100}, 
                    {100, 100}}),
            graphics = {
                Rectangle(
                    extent = {
                        {-100, -100}, 
                        {100, 100}},
                    lineColor = {0, 0, 255},
                    fillColor = {255, 255, 255},
                    fillPattern = FillPattern.Solid), 
                Text(
                    extent = {
                        {-90, -60}, 
                        {90, 60}},
                    lineColor = {160, 160, 164},
                    textString = "*K")}));
end MatrixGain;