R9482/Homework198cc7e020797master
README.md
SP4E - Homework 1
General info
This file provides a brief documentation and information related to the first Homework of the course Scientific Programming for Engineers, fall 2019.
This homework is done by O. Ashtari and A. Sieber
Last update: 16.10.2019
Project Description
This project is intended to solve a minimization problem on n-dimensional quadratic functions defined as S(X)= XᵀAX - Xᵀb where Xᵀ =[x1, x2, ..., xn], T represents the transpose operation, A is an n by n square matrix and b a column vector of size n.
Requirements
The project is created with Python 3.7. It moreover requires the following libraries to work properly:
- numpy
- argparse
- scipy
- matplotlib
- sys
- math
How to Use
Program 1: *optimizer.py*
This script solves minimization problems using the scipy.optimize.minimize routine. The minimization solver can be specified as an input argumeent by entering the following command line:
$ python3 optimizer.py method
Where the variable method is one of the following:
- Nelder-Mead
- Powell
- CG (default)
- BFGS
- L-BFGS-B
- TNC
- SLSQP
The initial guess of the minimization process has to be specified directly in the optimizer.py file by changing the value of the variable X0. The matrix A and vector B can also be modified directly in the file.
conjugate_gradient.py
post_processing.py
Post-processing file that takes as inputs the value of A, B as well as the intermediate solutions of the iterative minimization process and the method used. The file generates a 3D plot displaying the function to be minimized as well as the intermediate solutions.
Program 2: _conjugate_gradient.py_
Based on the problem description in the homework sheet, the objective function here is:
S(X)= ½(XᵀAX) - Xᵀb
Therefore, the user should note the factor 1/2 here which means definition of matrix A here is different from that in Program 1.
To run the program, the objective function should be defined by getting matrix A and vector b, and the code should be provided with an starting point x₀ as well. These three are mandatory arguments which should be entered in _rowmajor format_, _separated by space_. For example the command below runs the program for: A=[ [1, 2] , [3, 4] ] , bᵀ=[5,6] , x₀ᵀ=[7,8]
$ python3 conjugate_gradient.py -A 1 2 3 4 -b 5 6 -x0 7 8