# 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, followed after `-A`, `-b`, and `-x0` 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 ```