首页 Examples of Programming in Matlab

Examples of Programming in Matlab

举报
开通vip

Examples of Programming in Matlab Examples of Programming in MATLAB® TECHNICAL BRIEF The MATLAB® Environment MATLAB integrates mathematical computing, visualization, and a powerful language to provide a flexible environment for technical computing. The open architecture makes it easy to ...

Examples of Programming in Matlab
Examples of Programming in MATLAB® TECHNICAL BRIEF The MATLAB® Environment MATLAB integrates mathematical computing, visualization, and a powerful language to provide a flexible environment for technical computing. The open architecture makes it easy to use MATLAB and its companion products to explore data, create algorithms, and create custom tools that provide early insights and competitive advantages. TECHNICAL BRIEF2 TABLE OF CONTENTS Introduction to the MATLAB Language of Technical Computing Comparing MATLAB to C: Three Programming Approaches to Quadratic Minimization Application Development in MATLAB: Tuning M-files with the MATLAB Performance Profiler 3 4 9 Introduction to the MATLAB Language of Technical Computing The MATLAB language is particularly well-suited to designing predictive mathematical models and developing application-specific algorithms. It provides easy access to a range of both elementary and advanced algorithms for numeric computing. These algorithms include operations for linear algebra, matrix manipulation, differential equation solving, basic statistics, linear data fitting, data reduction, and Fourier analysis. MATLAB Toolboxes are add-ons that extend MATLAB with specialized functions and easy-to-use graphical user interfaces. Toolboxes are accessible directly from the MATLAB interactive programming environment. MATLAB employs the same language for both interactive computing and structured programming. The intuitive math notation and syntax allow you to express technical ideas just as you would write them mathematically. This familiar style and flexibility make exploration and development with MATLAB very efficient. The built-in math algorithms, optimized for matrix and vector calculations, allow you to increase efficiency in two areas: more productive programming and optimized code performance. The resulting time savings give you fast development cycles as well as execution speeds from within the MATLAB environment that are comparable to compiled code. The two examples on the following pages illustrate MATLAB in use: 1) The first example compares MATLAB to C using three approaches to a quadratic minimization problem. 2) The second example describes one user’s application of the M-file performance profiler to increase M-file code performance. These examples demonstrate how MATLAB’s straightforward syntax and built-in math algorithms enable development of programs that are shorter, easier to read and maintain, and quicker to develop. The embedded code samples, developed by MATLAB users in the MATLAB language, illustrate how MATLAB application specific toolbox functionality can be easily accessed from the MATLAB language. Examples of Programming in MATLAB 3 COMPARING MATLAB TO C: THREE PROGRAMMING APPROACHES TO QUADRATIC MINIMIZATION Introduction Quadratic minimization is a specific form of nonlinear minimization. When a problem has a quadratic objective function instead of a general nonlinear function (such as in standard linear least squares), we can find a minimizer more accurately and efficiently by taking advantage of the quadratic form. This is particularly true when the quadratic problem is convex. Some examples of these types of applications include: � Solving contact and friction problems in rigid body mechanics, typical of the kind encountered in aerospace applications � Solving journal bearing lubrication problems, useful for machine design and maintenance planning � Computing flow through a porous medium, a common application in chemistry � Selecting the best portfolio of financial investments In this example we will use quadratic programming to solve a minimization problem. This example demonstrates the use of MATLAB to simplify an optimization task and compares that solution to the alternative C programming approach. The three following code examples compare three approaches to the minimization problem: � MATLAB � The MATLAB Optimization Toolbox � C code including calls to LAPACK, the library that makes up much of the mathematical core of MATLAB Problem Statement Minimize a quadratic equation such as y = 2x 1 2 + 20x 2 2 + 6x1x2 + 5x1 with the constraint that x1 – x2 = –2 Solution Express the original equation in standard quadratic form. First, transform the original equation into matrix notation y � * � � T * � �* � �+� � T * � � such that �1 –1� * � � = –2 Second, substitute variable names for the vectors and matrices H�� � , f �� � , A��1 –1� , b��–2� and x�� �x1x25064046 x1 x2 x1 x2 5 0 x1 x2 6 40 4 6 x1 x2 TECHNICAL BRIEF4 Third, rewrite the quadratic equation as y 5 * x T * H * x 1f T* x and the constraint equation as A * x =b. The quadratic form of the equation is easier to understand and to solve using MATLAB’s matrix-oriented computing language. Having transformed the original equation, we’re ready to compare the three programming approaches. Example 1: Quadratic Minimization with MATLAB M code MATLAB’s matrix manipulation and equation solving capabilities make it particularly well-suited to quadratic program- ming problems. The constraint stated above is that A * x =b. In the example below we specify four values of b for which x must be solved, corresponding to the four rows of matrix A. In general, the data is determined by the known parameters of the problem. For example, to solve a financial optimization problem, such as portfolio optimization, the data would be determined by the expected return of the investments in the portfolio and the covariance of the returns. Then we would solve for the optimal weighting of the investments by minimizing the variance in the portfolio while requiring the sum of the weights to be unity. In this example, we use synthetic data for H, f, A, and b. Once we set up these variables, the next step is to solve for the unknown, x. The code below roughly follows these steps: 1) Find a point in six-dimensional space that satisfies the equality constraints A * x =b (6 is the number of columns in H and in A). Examples of Programming in MATLAB 5 The surface is the graphical repre- sentation of the quadratic function that we are minimizing, subject to the constraint that x1 and x2 lie on the line x1 – x2 = –2 (repre- sented by the blue line in the small graphic and the dashed black line in the large graphic). This blue line represents the null space of the equality constraint. The black curve represents the values on the qua- dratic surface where the equality constraint is satisfied. We start from a point on the surface (the upper cyan circle) and the quadrat- ic minimization takes us to the solution (the lower cyan circle). 2) Project the problem into the null space of A, that is, project into a subspace where movement in that subspace will not violate these constraints. 3) Minimize in this subspace. As our objective is a convex quadratic, we find the minimizer by stepping to the point at which the gradient is equal to 0, one Newton step. 4) Calculate the final answer by projecting the step to the minimizer and back into the original full space. The following MATLAB M code, solves the type of minimization problem described above. This example has 6 variables and 4 constraints. The following assignment statements assign the data to the variables H (matrix), f (vector), A (matrix), and b (vector), respectively. The dimensionality of the problem, in this case 6, is specified implicitly by the number of columns in H and A. Note that in MATLAB code, lines preceded by “%” are comments. % % minimize 1/2*x'*H*x +f'*x such that A*x=b % x % 6 dimensional problem with 4 constraints: % H = [36 17 19 12 8 15; 17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; A = [ 7 1 8 3 3 3; 5 0 5 1 5 8; 2 6 7 1 1 8; 1 0 0 0 0 0 ]; b = [ 84 62 65 1 ]'; Z = null(A); % Find the null space of constraint matrix A x = A\b; % Determine an x satisfying the equality constraints A*x = b g = H*x +f; % Compute the gradient (first derivative vector) of the quadratic % equation at x Zg = Z'*g; % Find the projected gradient ZHZ = Z'*H*Z; % Compute the projected Hessian matrix (second derivative matrix) t = -ZHZ \ Zg; % Solve for the projected Newton step xsol = x + Z*t; % Project the step back into the full space and add to x to find % the solution xsol Example 2: Quadratic Minimization with the Optimization Toolbox We can also solve the problem in Example 1 using the MATLAB Optimization Toolbox. It turns out that quadprog, the quadratic programming function in the Optimization Toolbox, can solve the entire problem described above. The following code could be typed in at the MATLAB command line or saved in a “script” file and run from MATLAB. Once the four MATLAB variable assignments are executed (the same ones as in Example 1), and some options are set, the call to quadprog is all that is required to solve the above problem. H = [36 17 19 12 8 15; 17 33 18 11 7 14; 19 18 43 13 8 16; 12 11 13 18 6 11; 8 7 8 6 9 8; 15 14 16 11 8 29]; f = [ 20 15 21 18 29 24 ]'; A = [ 7 1 8 3 3 3; 5 0 5 1 5 8; 2 6 7 1 1 8; 1 0 0 0 0 0 ]; b = [ 84 62 65 1 ]'; options = optimset (‘largescale’,’off’); xsol = quadprog(H,f,[],[],A,b,[],[],[],options); TECHNICAL BRIEF6 7 Example 3: Quadratic Minimization in C and LAPACK What would the equivalent C code implementation look like for the same problem? Assume that you have the C code version of the LAPACK linear algebra subroutine library and the BLAS subroutine library at your disposal. The following code uses the LAPACK subroutines dgesv, dgelsx, dgesvd, and the BLAS routines daxpy, dgemm, and dgemv. (Without these functions, you would need to write the numerical linear algebra routines in C directly). Here is the resulting C program, totaling 70 lines: #include #include #include "f2c.h" main() { integer m = 4; integer n = 6; integer nrhs = 1; integer max1 = max(min(m,n)+3*n,2*min(m,n)+nrhs); /* for dgelsx_ */ integer max2 = max(3*min(m,n)+max(m,n),5*min(m,n)-4); /* for dgesvd_ */ integer lwork = max(max1,max2); /* for both */ /* Problem definition arrays (column order) */ double A[] = {7,5,2,1, 1,0,6,0, 8,5,7,0, 3,1,1,0, 3,5,1,0, 3,8,8,0}; double b[] = {84,62,65,1}; double H[] = {36,17,19,12,8,15, 17,33,18,11,7,14, 19,18,43,13,8,16, 12,11,13,18,6,11, 8,7,8,6,9,8, 15,14,16,11,8,29}; double f[] = {20,15,21,18,29,24}; double *QR, *x, *work, *g, *s, *U, *VT, *Z, *ZH, *ZHZ, *Zg; double *p1, *p2, rcond, one = 1.0, zero = 0.0, minusone = -1.0; integer *jpvt, *ipiv, rankA, nullA, info, inc = 1, i, j; char jobu = 'N', jobvt = 'A', transn = 'N', transt = 'T'; /* Allocate contiguous memory for work arrays */ QR = malloc( m*n*sizeof(double) ); x = malloc( n*sizeof(double) ); work = malloc( lwork*sizeof(double) ); g = malloc( n*sizeof(double) ); s = malloc( m*sizeof(double) ); U = NULL; VT = malloc( n*n*sizeof(double) ); Z = malloc( n*n*sizeof(double) ); ZH = malloc( n*n*sizeof(double) ); ZHZ = malloc( n*n*sizeof(double) ); Zg = malloc( n*sizeof(double) ); jpvt = malloc( n*sizeof(int) ); ipiv = malloc( n*sizeof(int) ); /* QR = A: since it will be overwritten by dgelsx_ */ for (i=0, p1=QR, p2=A; i
本文档为【Examples of Programming in Matlab】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_462744
暂无简介~
格式:pdf
大小:599KB
软件:PDF阅读器
页数:0
分类:
上传时间:2010-12-29
浏览量:17