Package ca.nengo.dynamics.impl

Source Code of ca.nengo.dynamics.impl.CanonicalModelTest

/*
* Created on 20-Jun-2006
*/
package ca.nengo.dynamics.impl;

import ca.nengo.dynamics.impl.CanonicalModel;
import ca.nengo.dynamics.impl.LTISystem;
import ca.nengo.dynamics.impl.SimpleLTISystem;
import ca.nengo.model.Units;
import junit.framework.TestCase;

public class CanonicalModelTest extends TestCase {

  /*
   * Test method for 'ca.nengo.dynamics.impl.CanonicalModel.getRealization(float[], float[], float)'
   */
  public void testGetRealization() {
    LTISystem system = CanonicalModel.getRealization(new float[]{0f, 1f}, new float[]{10f, 100f}, 1f);
   
    float[][] A = system.getA(0f);
    assertClose(0f, A[0][0]);
    assertClose(1f, A[0][1]);
    assertClose(-100f, A[1][0]);
    assertClose(-10f, A[1][1]);

    float[][] B = system.getB(0f);
    assertClose(0f, B[0][0]);
    assertClose(1f, B[1][0]);

    float[][] C = system.getC(0f);
    assertClose(1f, C[0][0]);
    assertClose(0f, C[0][1]);

    float[][] D = system.getD(0f);
    assertClose(1f, D[0][0]);
  }
 
  /*
   * Test method for 'ca.nengo.dynamics.impl.CanonicalModel.isControllableCanonical(LTISystem)'
   */
  public void testIsControllableCanonical() {
    LTISystem system = CanonicalModel.getRealization(new float[]{0f, 1f}, new float[]{10f, 100f}, 1f);
    assertTrue(CanonicalModel.isControllableCanonical(system));
   
    system = new SimpleLTISystem(
        new float[]{-1f, -1f},
        new float[][]{new float[]{0f}, new float[]{1f}},
        new float[][]{new float[]{1f, 1f}},        
        new float[2],
        new Units[]{Units.UNK}
    );
    assertFalse(CanonicalModel.isControllableCanonical(system));
   
    system = new LTISystem(
        new float[][]{new float[]{0f, 1f}, new float[]{1f, 2f}},
        new float[][]{new float[]{1f}, new float[]{1f}},
        new float[][]{new float[]{1f, 1f}},        
        new float[][]{new float[]{0f}},
        new float[2],
        new Units[]{Units.UNK}
    );
    assertFalse(CanonicalModel.isControllableCanonical(system));
   
  }

  /*
   * Test method for 'ca.nengo.dynamics.impl.CanonicalModel.changeTimeConstant(LTISystem, float)'
   */
  public void testChangeTimeConstant() {
    //distinct roots
    LTISystem system = CanonicalModel.getRealization(new float[]{0f, 1f}, new float[]{30f, 200f}, 1f);
    system = CanonicalModel.changeTimeConstant(system, 1f/5f);
    float[][] A = system.getA(0f);
    assertClose(-100f, A[1][0]);
    assertClose(-25f, A[1][1]);
   
    //complex conjugate roots
    system = CanonicalModel.getRealization(new float[]{0f, 1f}, new float[]{2f, 2f}, 1f);
    system = CanonicalModel.changeTimeConstant(system, 1f/5f);
    A = system.getA(0f);
    assertClose(-26f, A[1][0]);
    assertClose(-10f, A[1][1]);
  }

  private static void assertClose(float a, float b) {
    assertTrue(a > b-.001);
    assertTrue(a < b+.001);
  }

}
TOP

Related Classes of ca.nengo.dynamics.impl.CanonicalModelTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.