示例#1
0
returnValue ModelData::setNonlinearFeedback( const DMatrix& C_, const OutputFcn& feedb_ )
{
	C = C_;
	feedb = feedb_;
	if( feedb_.getNDX() > 0 || feedb_.getNU() > 0 || feedb_.getNP() > 0 || feedb_.getNOD() > 0 ) return RET_NOT_IMPLEMENTED_YET;

	export_rhs = BT_TRUE;

	return SUCCESSFUL_RETURN;
}
示例#2
0
returnValue ModelData::setLinearOutput( const DMatrix& M3_, const DMatrix& A3_, const OutputFcn& rhs3_ )
{
	M3 = M3_;
	A3 = A3_;
	NX3 = A3.getNumCols();

	rhs3 = rhs3_;
	if( NDX == 0 ) NDX = rhs3_.getNDX();
	if( NU == 0 ) NU = rhs3_.getNU();
	if( NP == 0 ) NP = rhs3_.getNP();
	if( NOD == 0 ) NOD = rhs3_.getNOD();

	export_rhs = BT_TRUE;

	return SUCCESSFUL_RETURN;
}
示例#3
0
returnValue PlotWindow::getExpressionDataGrids(	const Expression* const expression,
												VariableType& _type,
												VariablesGrid& _dataGrid,
												Grid& _discretizationGrid
												)
{
	OutputFcn f;
	VariablesGrid loggedX,loggedXA,loggedP,loggedU,loggedW;

	_type = expression->getVariableType( );

	f << *expression;

	plotDataRecord.getLast( LOG_DIFFERENTIAL_STATES,loggedX );
	plotDataRecord.getLast( LOG_ALGEBRAIC_STATES,loggedXA );
	plotDataRecord.getLast( LOG_PARAMETERS,loggedP );
	plotDataRecord.getLast( LOG_CONTROLS,loggedU );
	plotDataRecord.getLast( LOG_DISTURBANCES,loggedW );

	if ( loggedP.isEmpty() == BT_FALSE )
		loggedP.refineGrid( loggedX );

	if ( loggedU.isEmpty() == BT_FALSE )
		loggedU.refineGrid( loggedX );

	if ( loggedW.isEmpty() == BT_FALSE )
		loggedW.refineGrid( loggedX );

	returnValue returnvalue = f.evaluate( &loggedX,&loggedXA,&loggedP,&loggedU,&loggedW, &_dataGrid );
	if( returnvalue != SUCCESSFUL_RETURN )
		return ACADOERROR( returnvalue );

	VariablesGrid tmp;
	plotDataRecord.getLast( LOG_DISCRETIZATION_INTERVALS,tmp );
	tmp.getGrid( _discretizationGrid );
	
	return SUCCESSFUL_RETURN;
}
示例#4
0
uint ModelData::addOutput( const OutputFcn& outputEquation_ ){

	if( rhs_name.isEmpty() && outputNames.size() == 0 ) {
		Expression next;
		outputEquation_.getExpression( next );
		outputExpressions.push_back( next );
		dim_outputs.push_back( next.getDim() );
	}
	else {
		return ACADOERROR( RET_INVALID_OPTION );
	}

	return dim_outputs.size();
}
示例#5
0
returnValue ModelData::setLinearOutput( const Matrix& M3_, const Matrix& A3_, const OutputFcn& rhs3_ )
{
	M3 = M3_;
	A3 = A3_;
	rhs3 = rhs3_;
	NX3 = A3.getNumCols();
	if( !model_dimensions_set ) {
		if( NU == 0 ) NU = rhs3_.getNU();
		model_dimensions_set = BT_TRUE;
	}
	export_rhs = BT_TRUE;

	return SUCCESSFUL_RETURN;
}
示例#6
0
uint ModelData::addOutput( const OutputFcn& outputEquation_, const Grid& grid ){

	if( rhs_name.empty() && outputNames.size() == 0 ) {
		Expression next;
		outputEquation_.getExpression( next );
		outputExpressions.push_back( next );
		dim_outputs.push_back( next.getDim() );

		if( NDX == 0 ) NDX = outputEquation_.getNDX();
		if( NU == 0 ) NU = outputEquation_.getNU();
		if( NP == 0 ) NP = outputEquation_.getNP();
		if( NOD == 0 ) NOD = outputEquation_.getNOD();

		outputGrids.push_back( grid );

		uint numOuts = (int) ceil((double)grid.getNumIntervals());
		num_meas.push_back( numOuts );
	}
	else {
		return ACADOERROR( RET_INVALID_OPTION );
	}

	return dim_outputs.size();
}