0001 function getInstructions(obj, cppobj, get)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 global ACADO_;
0032
0033 if (get == 'B')
0034
0035
0036 fprintf(cppobj.fileMEX,sprintf(' ParameterEstimationAlgorithm %s(%s);\n',obj.name, obj.ocp.name));
0037
0038 obj.getSetInitInstructions(cppobj);
0039
0040 fprintf(cppobj.fileMEX,sprintf(' returnValue returnvalue = %s.solve();\n', obj.name));
0041
0042 fprintf(cppobj.fileMEX,'\n');
0043
0044
0045 fprintf(cppobj.fileMEX,' VariablesGrid parameters; \n');
0046 fprintf(cppobj.fileMEX,sprintf(' %s.getParameters( parameters );\n', obj.name));
0047 fprintf(cppobj.fileMEX,' printf("\\n\\nResults for the parameters: \\n"); \n');
0048 fprintf(cppobj.fileMEX,' printf("-----------------------------------------------\\n"); \n');
0049
0050 for i=1:length(cppobj.p)
0051 fprintf(cppobj.fileMEX,' printf(" ');
0052 fprintf(cppobj.fileMEX,sprintf('%s', cppobj.p{i}.name));
0053 fprintf(cppobj.fileMEX,' = %%.8e \\n", parameters(0,');
0054 fprintf(cppobj.fileMEX,sprintf('%s', num2str(i-1)));
0055 fprintf(cppobj.fileMEX,') ); \n');
0056 end
0057
0058 fprintf(cppobj.fileMEX,'\n');
0059
0060 fprintf(cppobj.fileMEX,' VariablesGrid out_states; \n');
0061 fprintf(cppobj.fileMEX,' VariablesGrid out_parameters; \n');
0062 fprintf(cppobj.fileMEX,' VariablesGrid out_controls; \n');
0063 fprintf(cppobj.fileMEX,' VariablesGrid out_disturbances; \n');
0064 fprintf(cppobj.fileMEX,' VariablesGrid out_algstates; \n');
0065
0066 fprintf(cppobj.fileMEX,sprintf(' %s.getDifferentialStates(out_states);\n', obj.name));
0067 if (~isempty(cppobj.u))
0068 fprintf(cppobj.fileMEX,sprintf(' %s.getControls(out_controls);\n', obj.name));
0069 end
0070 if (~isempty(cppobj.p))
0071 fprintf(cppobj.fileMEX,sprintf(' %s.getParameters(out_parameters);\n', obj.name));
0072 end
0073 if (~isempty(cppobj.w))
0074 fprintf(cppobj.fileMEX,sprintf(' %s.getDisturbances(out_disturbances);\n', obj.name));
0075 end
0076 if (~isempty(cppobj.z))
0077 fprintf(cppobj.fileMEX,sprintf(' %s.getAlgebraicStates(out_algstates);\n', obj.name));
0078 end
0079
0080 if (ACADO_.results_to_file == true)
0081
0082 fprintf(cppobj.fileMEX,sprintf(' out_states.printToFile( "%s_OUT_states.m","STATES",PS_MATLAB ); \n', cppobj.problemname));
0083 fprintf(cppobj.fileMEX,sprintf(' out_controls.printToFile( "%s_OUT_controls.m","CONTROLS",PS_MATLAB ); \n', cppobj.problemname));
0084 fprintf(cppobj.fileMEX,sprintf(' out_parameters.printToFile( "%s_OUT_parameters.m","PARAMETERS",PS_MATLAB ); \n', cppobj.problemname));
0085 fprintf(cppobj.fileMEX,sprintf(' out_disturbances.printToFile( "%s_OUT_disturbances.m","DISTURBANCES",PS_MATLAB ); \n', cppobj.problemname));
0086 fprintf(cppobj.fileMEX,sprintf(' out_algstates.printToFile( "%s_OUT_algebraicstates.m","ALGEBRAICSTATES",PS_MATLAB ); \n', cppobj.problemname));
0087 end
0088
0089
0090 fprintf(cppobj.fileMEX,' const char* outputFieldNames[] = {"STATES", "CONTROLS", "PARAMETERS", "DISTURBANCES", "ALGEBRAICSTATES", "CONVERGENCE_ACHIEVED"}; \n');
0091 fprintf(cppobj.fileMEX,' plhs[0] = mxCreateStructMatrix( 1,1,6,outputFieldNames ); \n');
0092
0093 cppobj.getCPPlefthandout('OutS', 'outS', 'out_states')
0094 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"STATES",OutS );\n');
0095
0096 cppobj.getCPPlefthandout('OutC', 'outC', 'out_controls')
0097 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"CONTROLS",OutC );\n\n');
0098
0099 fprintf(cppobj.fileMEX,sprintf(' mxArray *%s = NULL;\n', 'OutP'));
0100 fprintf(cppobj.fileMEX,sprintf(' double *%s = NULL;\n', 'outP'));
0101 fprintf(cppobj.fileMEX,sprintf(' %s = mxCreateDoubleMatrix( 1,%d,mxREAL ); \n', 'OutP', length(cppobj.p)));
0102 fprintf(cppobj.fileMEX,sprintf(' %s = mxGetPr( %s );\n', 'outP', 'OutP'));
0103
0104 for i=1:length(cppobj.p)
0105 fprintf(cppobj.fileMEX,' %s[0,%d] = parameters(0,%d); \n', 'outP', i-1, i-1);
0106 end
0107
0108 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"PARAMETERS",OutP );\n \n');
0109
0110 cppobj.getCPPlefthandout('OutW', 'outW', 'out_disturbances')
0111 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"DISTURBANCES",OutW );\n');
0112
0113 cppobj.getCPPlefthandout('OutZ', 'outZ', 'out_algstates')
0114 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"ALGEBRAICSTATES",OutZ );\n');
0115
0116 fprintf(cppobj.fileMEX,' mxArray *OutConv = NULL;\n');
0117 fprintf(cppobj.fileMEX,' if ( returnvalue == SUCCESSFUL_RETURN ) { OutConv = mxCreateDoubleScalar( 1 ); }else{ OutConv = mxCreateDoubleScalar( 0 ); } \n');
0118 fprintf(cppobj.fileMEX,' mxSetField( plhs[0],0,"CONVERGENCE_ACHIEVED",OutConv );\n');
0119
0120 fprintf(cppobj.fileMEX,'\n');
0121
0122
0123 end
0124
0125 end