//////////////////////////////////////////////////////////////////////////////// // Copyright © 2018 Jérémie Dumas // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. //////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include void ObjSens(double *af, double *bf, double *x, int n, int m, double *f, double *df, double *g, double *dg); // Math helpers double Min(double d1, double d2); double Max(double d1, double d2); int Min(int d1, int d2); int Max(int d1, int d2); double Abs(double d1); int main(int argc, char *argv[]) { std::cout<<"///////////////////////////////////////////////////"< 0.002 && itr<100) { itr++; ObjSens(af,bf,x,n,m,f,df,g,dg); // Set outer move limits for (int i=0;iUpdate(x,df,g,dg,xmin,xmax); // Compute infnorm on design change ch = 0.0; for (int i=0;id2 ? d1 : d2; } int Min(int d1, int d2) { return d1d2 ? d1 : d2; } double Abs(double d1) { return d1>0 ? d1 : -1.0*d1; }