00001
00024 #ifndef OSNLNODE_H
00025 #define OSNLNODE_H
00026
00027 #include "OSConfig.h"
00028 #include "OSGeneral.h"
00029 #include "OSErrorClass.h"
00030 #include <iostream>
00031 #include <vector>
00032 #include <map>
00033
00034 #ifdef OS_HAS_CPPAD
00035 # include <cppad/cppad.hpp>
00036 typedef CppAD::AD<double> ADdouble;
00037 typedef CppAD::vector<ADdouble> ADvector;
00038 #else
00039 typedef double ADdouble;
00040 typedef std::vector<ADdouble> ADvector;
00041 #endif
00042
00046 class OSnLNode;
00047 class OSnLMNode;
00048 class OSMatrix;
00049
00056 class ExprNode
00057 {
00058 public:
00059
00062 int inodeInt;
00063
00069 int inodeType;
00070
00074 unsigned int inumberOfChildren;
00075
00079 unsigned int inumberOfMatrixChildren;
00080
00084 OSnLNode **m_mChildren;
00085
00089 OSnLMNode **m_mMatrixChildren;
00090
00091
00095 ExprNode();
00096
00100 virtual ~ExprNode();
00101
00102
00106 virtual std::string getTokenNumber();
00107
00111 virtual std::string getTokenName() = 0;
00112
00120 virtual std::string getNonlinearExpressionInXML();
00121
00128 virtual std::vector<ExprNode*> getPrefixFromExpressionTree();
00129
00138 virtual std::vector<ExprNode*> preOrderOSnLNodeTraversal( std::vector<ExprNode*> *prefixVector);
00139
00146 virtual std::vector<ExprNode*> getPostfixFromExpressionTree();
00147
00156 virtual std::vector<ExprNode*> postOrderOSnLNodeTraversal( std::vector<ExprNode*> *postfixVector);
00157
00163 virtual ExprNode *cloneExprNode() = 0;
00164
00168 virtual bool IsEqual(ExprNode *that);
00169 };
00170
00171
00179 class OSnLNode: public ExprNode
00180 {
00181 public:
00185 double m_dFunctionValue;
00186
00190 ADdouble m_ADTape;
00191
00192
00196 OSnLNode();
00197
00201 virtual ~OSnLNode();
00202
00203
00212 virtual void getVariableIndexMap(std::map<int, int> *varIdx);
00213
00222 virtual double calculateFunction(double *x) = 0;
00223
00231 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD) = 0;
00232
00242 OSnLNode* createExpressionTreeFromPrefix(std::vector<ExprNode*> nlNodeVec);
00243
00250 virtual std::vector<ExprNode*> getPrefixFromExpressionTree();
00251
00260 virtual std::vector<ExprNode*> preOrderOSnLNodeTraversal( std::vector<ExprNode*> *prefixVector);
00261
00271 OSnLNode* createExpressionTreeFromPostfix(std::vector<ExprNode*> nlNodeVec);
00272
00279 virtual std::vector<ExprNode*> getPostfixFromExpressionTree();
00280
00289 virtual std::vector<ExprNode*> postOrderOSnLNodeTraversal( std::vector<ExprNode*> *postfixVector);
00290
00295 virtual OSnLNode* copyNodeAndDescendants();
00296
00300 bool IsEqual(OSnLNode *that);
00301 };
00302
00303
00315 class OSnLNodePlus : public OSnLNode
00316 {
00317 public:
00321 OSnLNodePlus();
00322
00326 ~OSnLNodePlus();
00327
00332 virtual std::string getTokenName();
00333
00338 virtual double calculateFunction( double *x);
00339
00344 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00345
00350 virtual OSnLNode *cloneExprNode();
00351
00352 };
00353
00365 class OSnLNodeSum : public OSnLNode
00366 {
00367 public:
00371 OSnLNodeSum();
00372
00376 ~OSnLNodeSum();
00377
00382 virtual std::string getTokenName();
00383
00388 virtual double calculateFunction( double *x);
00389
00394 virtual OSnLNode *cloneExprNode();
00395
00400 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00401 };
00402
00414 class OSnLNodeMax : public OSnLNode
00415 {
00416 public:
00420 OSnLNodeMax();
00421
00425 ~OSnLNodeMax();
00426
00431 virtual std::string getTokenName();
00432
00437 virtual double calculateFunction( double *x);
00438
00443 virtual OSnLNode *cloneExprNode();
00444
00449 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00450 };
00451
00463 class OSnLNodeMin : public OSnLNode
00464 {
00465 public:
00469 OSnLNodeMin();
00470
00474 ~OSnLNodeMin();
00475
00480 virtual std::string getTokenName();
00481
00486 virtual double calculateFunction( double *x);
00487
00493 virtual OSnLNode *cloneExprNode();
00494
00499 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00500
00501 };
00502
00503
00515 class OSnLNodeMinus : public OSnLNode
00516 {
00517 public:
00521 OSnLNodeMinus();
00522
00526 ~OSnLNodeMinus();
00527
00528
00533 virtual std::string getTokenName();
00534
00539 virtual double calculateFunction( double *x);
00540
00545 virtual OSnLNode *cloneExprNode();
00546
00551 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00552 };
00553
00554
00566 class OSnLNodeNegate : public OSnLNode
00567 {
00568 public:
00572 OSnLNodeNegate();
00573
00577 ~OSnLNodeNegate();
00578
00583 virtual std::string getTokenName();
00584
00589 virtual double calculateFunction( double *x);
00590
00595 virtual OSnLNode *cloneExprNode();
00596
00597
00602 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00603 };
00604
00605
00617 class OSnLNodeTimes : public OSnLNode
00618 {
00619 public:
00623 OSnLNodeTimes();
00624
00628 ~OSnLNodeTimes();
00629
00634 virtual std::string getTokenName();
00635
00640 virtual double calculateFunction( double *x);
00641
00646 virtual OSnLNode *cloneExprNode();
00647
00652 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00653
00654 };
00655
00656
00668 class OSnLNodeDivide : public OSnLNode
00669 {
00670 public:
00674 OSnLNodeDivide();
00675
00679 ~OSnLNodeDivide();
00680
00684 virtual std::string getTokenName();
00685
00690 virtual double calculateFunction( double *x);
00691
00696 virtual OSnLNode *cloneExprNode();
00697
00702 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00703 };
00704
00705
00717 class OSnLNodePower : public OSnLNode
00718 {
00719 public:
00723 OSnLNodePower();
00724
00728 ~OSnLNodePower();
00729
00733 virtual std::string getTokenName();
00734
00739 virtual double calculateFunction( double *x);
00740
00745 virtual OSnLNode *cloneExprNode();
00746
00751 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00752 };
00753
00754
00766 class OSnLNodeProduct : public OSnLNode
00767 {
00768 public:
00772 OSnLNodeProduct();
00773
00777 ~OSnLNodeProduct();
00778
00782 virtual std::string getTokenName();
00783
00788 virtual double calculateFunction( double *x);
00789
00794 virtual OSnLNode *cloneExprNode();
00795
00800 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00801 };
00802
00803
00815 class OSnLNodeLn : public OSnLNode
00816 {
00817 public:
00821 OSnLNodeLn();
00822
00826 ~OSnLNodeLn();
00827
00831 virtual std::string getTokenName();
00832
00837 virtual double calculateFunction( double *x);
00838
00843 virtual OSnLNode *cloneExprNode();
00844
00849 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00850 };
00851
00852
00864 class OSnLNodeSqrt : public OSnLNode
00865 {
00866 public:
00870 OSnLNodeSqrt();
00871
00875 ~OSnLNodeSqrt();
00876
00880 virtual std::string getTokenName();
00881
00886 virtual double calculateFunction( double *x);
00887
00892 virtual OSnLNode *cloneExprNode();
00897 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00898 };
00899
00900
00912 class OSnLNodeSquare : public OSnLNode
00913 {
00914 public:
00918 OSnLNodeSquare();
00919
00923 ~OSnLNodeSquare();
00924
00929 virtual std::string getTokenName();
00930
00935 virtual double calculateFunction( double *x);
00936
00941 virtual OSnLNode *cloneExprNode();
00942
00947 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00948 };
00949
00950
00962 class OSnLNodeCos : public OSnLNode
00963 {
00964 public:
00968 OSnLNodeCos();
00969
00973 ~OSnLNodeCos();
00974
00979 virtual std::string getTokenName();
00980
00985 virtual double calculateFunction( double *x);
00986
00991 virtual OSnLNode *cloneExprNode();
00992
00997 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
00998 };
00999
01000
01012 class OSnLNodeSin : public OSnLNode
01013 {
01014 public:
01018 OSnLNodeSin();
01019
01023 ~OSnLNodeSin();
01024
01029 virtual std::string getTokenName();
01030
01035 virtual double calculateFunction( double *x);
01036
01041 virtual OSnLNode *cloneExprNode();
01042
01047 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01048 };
01049
01050
01062 class OSnLNodeExp : public OSnLNode
01063 {
01064 public:
01068 OSnLNodeExp();
01069
01073 ~OSnLNodeExp();
01074
01079 virtual std::string getTokenName();
01080
01085 virtual double calculateFunction( double *x);
01086
01091 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01092
01097 virtual OSnLNode *cloneExprNode();
01098 };
01099
01100
01112 class OSnLNodeAbs : public OSnLNode
01113 {
01114 public:
01118 OSnLNodeAbs();
01119
01123 ~OSnLNodeAbs();
01124
01129 virtual std::string getTokenName();
01130
01135 virtual double calculateFunction( double *x);
01136
01141 virtual OSnLNode *cloneExprNode();
01142
01147 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01148 };
01149
01150
01162 class OSnLNodeErf : public OSnLNode
01163 {
01164 public:
01168 OSnLNodeErf();
01169
01173 ~OSnLNodeErf();
01174
01179 virtual std::string getTokenName();
01180
01185 virtual double calculateFunction( double *x);
01186
01191 virtual OSnLNode *cloneExprNode();
01192
01197 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01198 };
01199
01200
01212 class OSnLNodeIf : public OSnLNode
01213 {
01214 public:
01218 OSnLNodeIf();
01219
01223 ~OSnLNodeIf();
01224
01229 virtual std::string getTokenName();
01230
01235 virtual double calculateFunction( double *x);
01236
01241 virtual OSnLNode *cloneExprNode();
01242
01247 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01248 };
01249
01250
01262 class OSnLNodeNumber : public OSnLNode
01263 {
01264 public:
01266 double value;
01267
01269 std::string type;
01270
01274 std::string id;
01275
01279 OSnLNodeNumber();
01280
01284 ~OSnLNodeNumber();
01285
01290 virtual std::string getTokenName();
01291
01296 virtual std::string getTokenNumber();
01297
01302 virtual std::string getNonlinearExpressionInXML();
01303
01308 virtual double calculateFunction( double *x);
01309
01314 virtual OSnLNode *cloneExprNode();
01315
01320 virtual OSnLNode* copyNodeAndDescendants();
01321
01326 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01327
01331 virtual bool IsEqual(OSnLNodeNumber *that);
01332 };
01333
01334
01346 class OSnLNodeE : public OSnLNode
01347 {
01348 public:
01349
01353 OSnLNodeE();
01354
01358 ~OSnLNodeE();
01359
01360
01365 virtual std::string getTokenNumber();
01366
01367
01372 virtual std::string getTokenName();
01373
01378 virtual std::string getNonlinearExpressionInXML();
01379
01384 virtual double calculateFunction( double *x);
01385
01390 virtual OSnLNode *cloneExprNode();
01391
01392
01397 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01398 };
01399
01400
01412 class OSnLNodePI : public OSnLNode
01413 {
01414 public:
01415
01419 OSnLNodePI();
01420
01424 ~OSnLNodePI();
01425
01426
01431 virtual std::string getTokenNumber();
01432
01433
01438 virtual std::string getTokenName();
01439
01444 virtual std::string getNonlinearExpressionInXML();
01445
01450 virtual double calculateFunction( double *x);
01451
01456 virtual OSnLNode *cloneExprNode();
01457
01458
01463 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01464 };
01465
01466
01478 class OSnLNodeVariable : public OSnLNode
01479 {
01480 public:
01481
01485 double coef;
01486
01488 int idx;
01489
01493 OSnLNodeVariable();
01494
01498 ~OSnLNodeVariable();
01499
01500 virtual void getVariableIndexMap(std::map<int, int> *varIdx);
01501
01505 virtual std::string getTokenNumber();
01506
01510 virtual std::string getTokenName();
01511
01515 virtual std::string getNonlinearExpressionInXML();
01516
01521 virtual double calculateFunction( double *x);
01522
01527 virtual OSnLNode *cloneExprNode();
01528
01533 virtual OSnLNode* copyNodeAndDescendants();
01534
01539 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01540
01544 virtual bool IsEqual(OSnLNodeVariable *that);
01545 };
01546
01547
01560 class OSnLNodeAllDiff : public OSnLNode
01561 {
01562 public:
01566 OSnLNodeAllDiff();
01567
01571 ~OSnLNodeAllDiff();
01572
01577 virtual std::string getTokenName();
01578
01583 virtual double calculateFunction( double *x);
01584
01589 virtual OSnLNode *cloneExprNode();
01590
01595 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01596 };
01597
01598
01612 class OSnLNodeMatrixDeterminant : public OSnLNode
01613 {
01614 public:
01618 OSnLNodeMatrixDeterminant();
01619
01623 ~OSnLNodeMatrixDeterminant();
01624
01629 virtual std::string getTokenName();
01630
01635 virtual double calculateFunction( double *x);
01636
01641 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01642
01647 virtual OSnLNode *cloneExprNode();
01648
01649 };
01650
01662 class OSnLNodeMatrixTrace : public OSnLNode
01663 {
01664 public:
01668 OSnLNodeMatrixTrace();
01669
01674 ~OSnLNodeMatrixTrace();
01675
01680 virtual std::string getTokenName();
01681
01686 virtual double calculateFunction( double *x);
01687
01692 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01693
01698 virtual OSnLNode *cloneExprNode();
01699 };
01700
01712 class OSnLNodeMatrixToScalar : public OSnLNode
01713 {
01714 public:
01718 OSnLNodeMatrixToScalar();
01719
01724 ~OSnLNodeMatrixToScalar();
01725
01730 virtual std::string getTokenName();
01731
01736 virtual double calculateFunction( double *x);
01737
01742 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01743
01748 virtual OSnLNode *cloneExprNode();
01749 };
01750
01751
01760 class OSnLMNode: public ExprNode
01761 {
01762 public:
01763
01767 OSnLMNode();
01768
01772 virtual ~OSnLMNode();
01773
01774
01784 OSnLMNode* createExpressionTreeFromPrefix(std::vector<ExprNode*> nlNodeVec);
01785
01792 std::vector<ExprNode*> getPrefixFromExpressionTree();
01793
01802 std::vector<ExprNode*> preOrderOSnLNodeTraversal( std::vector<ExprNode*> *prefixVector);
01803
01813 OSnLMNode* createExpressionTreeFromPostfix(std::vector<ExprNode*> nlNodeVec);
01814
01821 std::vector<ExprNode*> getPostfixFromExpressionTree();
01822
01831 std::vector<ExprNode*> postOrderOSnLNodeTraversal( std::vector<ExprNode*> *postfixVector);
01832
01833
01838 virtual OSnLMNode* copyNodeAndDescendants();
01839
01843 bool IsEqual(OSnLMNode *that);
01844 };
01845
01846 class OSnLMNodeMatrixPlus : public OSnLMNode
01847 {
01848 public:
01852 OSnLMNodeMatrixPlus();
01853
01857 ~OSnLMNodeMatrixPlus();
01858
01863 virtual std::string getTokenName();
01864
01869
01870
01875
01876
01881 virtual OSnLMNode *cloneExprNode();
01882 };
01883
01884 class OSnLMNodeMatrixSum : public OSnLMNode
01885 {
01886 public:
01890 OSnLMNodeMatrixSum();
01891
01895 ~OSnLMNodeMatrixSum();
01896
01901 virtual std::string getTokenName();
01902
01907
01908
01913
01918 virtual OSnLMNode *cloneExprNode();
01919
01920 #if 0
01921
01925 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
01926 #endif
01927
01928 };
01929
01930 class OSnLMNodeMatrixMinus : public OSnLMNode
01931 {
01932 public:
01936 OSnLMNodeMatrixMinus();
01937
01941 ~OSnLMNodeMatrixMinus();
01942
01947 virtual std::string getTokenName();
01948
01953
01954
01959
01960
01965 virtual OSnLMNode *cloneExprNode();
01966 };
01967
01968 class OSnLMNodeMatrixNegate : public OSnLMNode
01969 {
01970 public:
01974 OSnLMNodeMatrixNegate();
01975
01979 ~OSnLMNodeMatrixNegate();
01980
01985 virtual std::string getTokenName();
01986
01991
01992
01997
01998
01999
02004 virtual OSnLMNode *cloneExprNode();
02005 };
02006
02007 class OSnLMNodeMatrixTimes : public OSnLMNode
02008 {
02009 public:
02013 OSnLMNodeMatrixTimes();
02014
02018 ~OSnLMNodeMatrixTimes();
02019
02024 virtual std::string getTokenName();
02025
02030
02031
02036
02037
02042 virtual OSnLMNode *cloneExprNode();
02043 };
02044
02045 class OSnLMNodeMatrixInverse : public OSnLMNode
02046 {
02047 public:
02051 OSnLMNodeMatrixInverse();
02052
02056 ~OSnLMNodeMatrixInverse();
02057
02062 virtual std::string getTokenName();
02063
02068
02069
02074
02075
02080 virtual OSnLMNode *cloneExprNode();
02081 };
02082
02083 class OSnLMNodeMatrixTranspose : public OSnLMNode
02084 {
02085 public:
02089 OSnLMNodeMatrixTranspose();
02090
02094 ~OSnLMNodeMatrixTranspose();
02095
02100 virtual std::string getTokenName();
02101
02106
02107
02112
02113
02118 virtual OSnLMNode *cloneExprNode();
02119 };
02120
02121 class OSnLMNodeMatrixScalarTimes : public OSnLMNode
02122 {
02123 public:
02127 OSnLMNodeMatrixScalarTimes();
02128
02132 ~OSnLMNodeMatrixScalarTimes();
02133
02138 virtual std::string getTokenName();
02139
02144
02145
02150
02151
02156 virtual OSnLMNode *cloneExprNode();
02157 };
02158
02159 class OSnLMNodeMatrixDotTimes : public OSnLMNode
02160 {
02161 public:
02165 OSnLMNodeMatrixDotTimes();
02166
02170 ~OSnLMNodeMatrixDotTimes();
02171
02176 virtual std::string getTokenName();
02177
02182
02183
02188
02189
02194 virtual OSnLMNode *cloneExprNode();
02195 };
02196
02197 class OSnLMNodeIdentityMatrix : public OSnLMNode
02198 {
02199 public:
02203 OSnLMNodeIdentityMatrix();
02204
02208 ~OSnLMNodeIdentityMatrix();
02209
02214 virtual std::string getTokenName();
02215
02220
02221
02226
02227
02232 virtual OSnLMNode *cloneExprNode();
02233 };
02234
02235 class OSnLMNodeMatrixLowerTriangle : public OSnLMNode
02236 {
02237 public:
02241 bool includeDiagonal;
02242
02246 OSnLMNodeMatrixLowerTriangle();
02247
02251 ~OSnLMNodeMatrixLowerTriangle();
02252
02257 virtual std::string getTokenName();
02258
02263
02264
02269 virtual std::string getNonlinearExpressionInXML();
02270
02275 virtual OSnLMNode *cloneExprNode();
02276
02281 virtual OSnLMNode* copyNodeAndDescendants();
02282
02286 virtual bool IsEqual(OSnLMNodeMatrixLowerTriangle *that);
02287 };
02288
02289 class OSnLMNodeMatrixUpperTriangle : public OSnLMNode
02290 {
02291 public:
02295 bool includeDiagonal;
02296
02300 OSnLMNodeMatrixUpperTriangle();
02301
02305 ~OSnLMNodeMatrixUpperTriangle();
02306
02311 virtual std::string getTokenName();
02312
02317
02318
02323 virtual std::string getNonlinearExpressionInXML();
02324
02329 virtual OSnLMNode *cloneExprNode();
02330
02335 virtual OSnLMNode* copyNodeAndDescendants();
02336
02340 virtual bool IsEqual(OSnLMNodeMatrixUpperTriangle *that);
02341 };
02342
02343
02344 class OSnLMNodeMatrixDiagonal : public OSnLMNode
02345 {
02346 public:
02350 OSnLMNodeMatrixDiagonal();
02351
02355 ~OSnLMNodeMatrixDiagonal();
02356
02361 virtual std::string getTokenName();
02362
02367
02368
02373
02374
02379 virtual OSnLMNode *cloneExprNode();
02380 };
02381
02382 class OSnLMNodeDiagonalMatrixFromVector : public OSnLMNode
02383 {
02384 public:
02388 OSnLMNodeDiagonalMatrixFromVector();
02389
02393 ~OSnLMNodeDiagonalMatrixFromVector();
02394
02399 virtual std::string getTokenName();
02400
02405
02406
02411
02412
02417 virtual OSnLMNode *cloneExprNode();
02418 };
02419
02420
02421 class OSnLMNodeMatrixSubmatrixAt : public OSnLMNode
02422 {
02423 public:
02427 OSnLMNodeMatrixSubmatrixAt();
02428
02432 ~OSnLMNodeMatrixSubmatrixAt();
02433
02438 virtual std::string getTokenName();
02439
02444
02445
02450
02451
02456 virtual OSnLMNode *cloneExprNode();
02457 };
02458
02459
02460 class OSnLMNodeMatrixReference : public OSnLMNode
02461 {
02462 public:
02466 int idx;
02467
02471 OSnLMNodeMatrixReference();
02472
02476 ~OSnLMNodeMatrixReference();
02477
02482 virtual std::string getTokenName();
02483
02488 virtual std::string getTokenNumber();
02489
02494 virtual std::string getNonlinearExpressionInXML();
02495
02496 #if 0
02497
02501 virtual double calculateFunction( double *x);
02502 #endif
02503
02508 virtual OSnLMNode *cloneExprNode();
02509
02514 virtual OSnLMNode* copyNodeAndDescendants();
02515
02516 #if 0
02517
02521 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
02522 #endif
02523
02527 virtual bool IsEqual(OSnLMNodeMatrixReference *that);
02528 };
02529
02530
02531 class OSnLMNodeMatrixVar : public OSnLMNode
02532 {
02533 public:
02537 int idx;
02538
02542 OSnLMNodeMatrixVar();
02543
02547 ~OSnLMNodeMatrixVar();
02548
02553 virtual std::string getTokenName();
02554
02559 virtual std::string getTokenNumber();
02560
02565 virtual std::string getNonlinearExpressionInXML();
02566
02567 #if 0
02568
02572 virtual double calculateFunction( double *x);
02573 #endif
02574
02579 virtual OSnLMNode *cloneExprNode();
02580
02585 virtual OSnLMNode* copyNodeAndDescendants();
02586
02587 #if 0
02588
02592 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
02593 #endif
02594
02598 virtual bool IsEqual(OSnLMNodeMatrixVar *that);
02599 };
02600
02601
02602 class OSnLMNodeMatrixObj : public OSnLMNode
02603 {
02604 public:
02608 int idx;
02609
02613 OSnLMNodeMatrixObj();
02614
02618 ~OSnLMNodeMatrixObj();
02619
02624 virtual std::string getTokenName();
02625
02630 virtual std::string getTokenNumber();
02631
02636 virtual std::string getNonlinearExpressionInXML();
02637
02638 #if 0
02639
02643 virtual double calculateFunction( double *x);
02644 #endif
02645
02650 virtual OSnLMNode *cloneExprNode();
02651
02656 virtual OSnLMNode* copyNodeAndDescendants();
02657
02658 #if 0
02659
02663 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
02664 #endif
02665
02669 virtual bool IsEqual(OSnLMNodeMatrixObj *that);
02670 };
02671
02672
02673 class OSnLMNodeMatrixCon : public OSnLMNode
02674 {
02675 public:
02679 int idx;
02680
02684 OSnLMNodeMatrixCon();
02685
02689 ~OSnLMNodeMatrixCon();
02690
02695 virtual std::string getTokenName();
02696
02701 virtual std::string getTokenNumber();
02702
02707 virtual std::string getNonlinearExpressionInXML();
02708
02709 #if 0
02710
02714 virtual double calculateFunction( double *x);
02715 #endif
02716
02721 virtual OSnLMNode *cloneExprNode();
02722
02727 virtual OSnLMNode* copyNodeAndDescendants();
02728
02729 #if 0
02730
02734 virtual ADdouble constructADTape(std::map<int, int> *ADIdx, ADvector *XAD);
02735 #endif
02736
02740 virtual bool IsEqual(OSnLMNodeMatrixCon *that);
02741 };
02742
02743
02755 class OSnLMNodeMatrixProduct : public OSnLMNode
02756 {
02757 public:
02761 OSnLMNodeMatrixProduct();
02762
02766 ~OSnLMNodeMatrixProduct();
02767
02771 virtual std::string getTokenName();
02772
02777
02778
02783 virtual OSnLMNode *cloneExprNode();
02784
02790
02791 };
02792
02793
02794
02795
02796
02797
02798
02799
02800
02801
02802 #endif
02803
02804