{ "metadata": { "name": "", "signature": "sha256:95e40cd4db7a1e870f8b087de142182d5fbc1a1d2d6ae6c35786f465e7e55dff" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "from pylab import *\n", "from optoy import *\n", "\n", "x = state()\n", "y = state()\n", "q = state()\n", "\n", "u = control()\n", "T = var(lb=0,init=10)\n", "\n", "x.dot = (1-y**2)*x-y+u\n", "y.dot = x\n", "q.dot = x**2+y**2\n", "\n", "print ocp(T,[u>=-1,u<=1,q.start==0,x.start==1,y.start==0,x.end==0,y.end==0],T=T,N=20)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "(1, 1)\n", "\n", "******************************************************************************\n", "This program contains Ipopt, a library for large-scale nonlinear optimization.\n", " Ipopt is released as open source code under the Eclipse Public License (EPL).\n", " For more information visit http://projects.coin-or.org/Ipopt\n", "******************************************************************************\n", "\n" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "2.96157509007\n" ] } ], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "print x.sol" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[DMatrix(1), DMatrix(0.987388), DMatrix(0.943018), DMatrix(0.858367), DMatrix(0.728705), DMatrix(0.555001), DMatrix(0.343747), DMatrix(0.104317), DMatrix(-0.154994), DMatrix(-0.430419), DMatrix(-0.585801), DMatrix(-0.580591), DMatrix(-0.569645), DMatrix(-0.550801), DMatrix(-0.521654), DMatrix(-0.479655), DMatrix(-0.42228), DMatrix(-0.34723), DMatrix(-0.252625), DMatrix(-0.137136), DMatrix(0)]\n" ] } ], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "plot(x.sol,label='x')\n", "plot(y.sol,label='y')\n", "plot(u.sol,label='u')\n", "\n", "ylim([-1.5,1.5])\n", "xlabel(\"Time step\")\n", "title(\"optimal solution\")\n", "legend()\n", "grid(True)\n", "show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ns6acKBgAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [], "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }