{"id":3302,"date":"2018-05-14T12:00:08","date_gmt":"2018-05-14T17:00:08","guid":{"rendered":"https:\/\/blogs.mathworks.com\/cleve\/?p=3302"},"modified":"2018-05-15T14:10:11","modified_gmt":"2018-05-15T19:10:11","slug":"the-matlab-technical-computing-environment","status":"publish","type":"post","link":"https:\/\/blogs.mathworks.com\/cleve\/2018\/05\/14\/the-matlab-technical-computing-environment\/","title":{"rendered":"The MATLAB Technical Computing Environment"},"content":{"rendered":"<div class=\"content\"><!--introduction--><p>The ACM Special Interest Group on Programming Languages, SIGPLAN, expects to hold the fourth in a series of conferences on the History of Programming Languages in 2020, see <a href=\"https:\/\/hopl4.sigplan.org\/\">HOPL-IV<\/a>.  The first drafts of papers are to be submitted by August 2018.  That long lead time gives me the opportunity to write a detailed history of MATLAB. I plan to write the paper in sections, which I'll post in this blog as they are available. This is the seventh, and final, installment.<\/p><p>MATLAB has evolved over the past 35 years into a rich technical computing environment.  Here is an overview of some of the tools available.<\/p><!--\/introduction--><h3>Contents<\/h3><div><ul><li><a href=\"#05069baf-d30d-4c32-9b3c-03d6db39626a\">Desktop<\/a><\/li><li><a href=\"#eddaa68c-3157-4bcb-bfb8-0057f90484c9\">Workspace<\/a><\/li><li><a href=\"#0af88896-e921-4117-b27b-0b94a0852e0b\">Editor\/Debugger<\/a><\/li><li><a href=\"#b93a5cd7-5ee7-4952-b7af-63ea4133e7d3\">Live Editor<\/a><\/li><li><a href=\"#92aaf258-3dc8-4ad8-899c-a8ed29dcdeed\">Parallel computing<\/a><\/li><li><a href=\"#ab1ba94a-b690-4178-9720-e9a88258d1ad\">GPUs<\/a><\/li><li><a href=\"#48df90db-d7f5-49e0-82bd-c545dabf7320\">Toolboxes<\/a><\/li><\/ul><\/div><h4>Desktop<a name=\"05069baf-d30d-4c32-9b3c-03d6db39626a\"><\/a><\/h4><p>The MATLAB desktop was introduced in 2000. Here is the default layout of the desktop.  This snapshot was taken while I was working on <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2018\/04\/30\/matlab-history-modern-matlab-part-2\/\">my previous post<\/a>.  Four panels are visible, the current folder viewer on the left, the workspace viewer on the right, the editor\/debugger in the top center, and the traditional command window in the bottom center.  A file viewer and a command history window are not in the default layout, but can be included in personalized layouts.<\/p><p>Any of the panels can be closed, or undocked into a standalone window. I have two screens available on the desk in my office.  I usually put the command window on one screen and the editor on the other.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/desktop.png\" alt=\"\"> <\/p><h4>Workspace<a name=\"eddaa68c-3157-4bcb-bfb8-0057f90484c9\"><\/a><\/h4><p>Here are the contents of the workspace when I execute the source script for my previous post.  If I click on any of the variables, it will be opened in an appropriate viewer<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/workspace.png\" alt=\"\"> <\/p><h4>Editor\/Debugger<a name=\"0af88896-e921-4117-b27b-0b94a0852e0b\"><\/a><\/h4><p>When I work on this blog, I spend most of my time using this MATLAB editor. The source for each post is an executable script, with descriptive text in comments and section headings in comments beginning with double percent signs, <tt>%%<\/tt>. The final production of a post is initiated with the \"Publish\" tab. I have pretty much abandoned my old Unix text editor, \"vi\", after many years of faithful service.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/editor.png\" alt=\"\"> <\/p><h4>Live Editor<a name=\"b93a5cd7-5ee7-4952-b7af-63ea4133e7d3\"><\/a><\/h4><p>The Live Editor was introduced in 2016 and is still under active development. MATLAB input, output and graphics are combined in a single interactive document.  The document may be exported to HTML, PDF, or LaTeX.<\/p><p>Here are a few examples.  The table generated by the small gradebook from <a href=\"https:\/\/blogs.mathworks.com\/cleve\/2018\/04\/30\/matlab-history-modern-matlab-part-2\/\">my previous post<\/a> is nicely formatted.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/gradebook.png\" alt=\"\"> <\/p><p>Expressions from the Symbolic Toolbox are typeset.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/symbolic2.png\" alt=\"\"> <\/p><p>And graphical output may be included in the document.<\/p><p><img decoding=\"async\" vspace=\"5\" hspace=\"5\" src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/symbolic3.png\" alt=\"\"> <\/p><h4>Parallel computing<a name=\"92aaf258-3dc8-4ad8-899c-a8ed29dcdeed\"><\/a><\/h4><p>The Parallel Computing Toolbox (PCT) was introduced at the Super Computing conference in 2004.  The next year, at SC05, Bill Gates gave the keynote talk, using MATLAB to demonstrate Microsoft's entry into High Performance Computing.<\/p><p>The toolbox supports coarse grained, distributed memory parallelism by running many MATLAB workers on many machines in a cluster, or on many cores in a single machine.  Originally MATLAB used MPI for the message passing, but in more recent versions of the toolbox our own utilities have replaced MPI.<\/p><p>By far the most popular feature of the PCT is the parallel for loop command, <tt>parfor<\/tt>.<\/p><h4>GPUs<a name=\"ab1ba94a-b690-4178-9720-e9a88258d1ad\"><\/a><\/h4><p>Support for Graphics Processing Units was added to the Parallel Computing Toolbox in 2010.  Eight years later, in release R2018a, the <tt>gpuarray<\/tt> has grown to have 385 associated methods, including all of the familiar matrix computations, <tt>lu<\/tt>, <tt>eig<\/tt>, <tt>svd<\/tt> and <tt>mldivide<\/tt> (backslash).<\/p><h4>Toolboxes<a name=\"48df90db-d7f5-49e0-82bd-c545dabf7320\"><\/a><\/h4><p>Much of modern MATLAB's power derives from the toolboxes available for specialized applications.  In release 2018a there are 63 of them. Here is the list.<\/p><p><b>Parallel Computing<\/b><\/p><div><ul><li>MATLAB Distributed Computing Server<\/li><li>Parallel Computing Toolbox<\/li><\/ul><\/div><p><b>Math, Statistics, and Optimization<\/b><\/p><div><ul><li>Curve Fitting Toolbox<\/li><li>Global Optimization Toolbox<\/li><li>Model-Based Calibration Toolbox<\/li><li>Neural Network Toolbox<\/li><li>Optimization Toolbox<\/li><li>Partial Differential Equation Toolbox<\/li><li>Statistics and Machine Learning Toolbox<\/li><li>Symbolic Math Toolbox<\/li><li>Text Analytics Toolbox<\/li><\/ul><\/div><p><b>Control Systems<\/b><\/p><div><ul><li>Aerospace Toolbox<\/li><li>Automated Driving System Toolbox<\/li><li>Control System Toolbox<\/li><li>Fuzzy Logic Toolbox<\/li><li>Model Predictive Control Toolbox<\/li><li>Robotics System Toolbox<\/li><li>Robust Control Toolbox<\/li><li>System Identification Toolbox<\/li><\/ul><\/div><p><b>Signal Processing and Wireless Communications<\/b><\/p><div><ul><li>Antenna Toolbox<\/li><li>Audio System Toolbox<\/li><li>Communications System Toolbox<\/li><li>DSP System Toolbox<\/li><li>LTE HDL Toolbox<\/li><li>LTE System Toolbox<\/li><li>Phased Array System Toolbox<\/li><li>RF Toolbox<\/li><li>Signal Processing Toolbox<\/li><li>Wavelet Toolbox<\/li><li>WLAN System Toolbox<\/li><\/ul><\/div><p><b>Image Processing and Computer Vision<\/b><\/p><div><ul><li>Automated Driving System Toolbox<\/li><li>Computer Vision System Toolbox<\/li><li>Image Acquisition Toolbox<\/li><li>Image Processing Toolbox<\/li><li>Mapping Toolbox<\/li><li>Vision HDL Toolbox<\/li><\/ul><\/div><p><b>Test and Measurement<\/b><\/p><div><ul><li>Data Acquisition Toolbox<\/li><li>Image Acquisition Toolbox<\/li><li>Instrument Control Toolbox<\/li><li>OPC Toolbox<\/li><li>Vehicle Network Toolbox<\/li><\/ul><\/div><p><b>Computational Finance<\/b><\/p><div><ul><li>Database Toolbox<\/li><li>Datafeed Toolbox<\/li><li>Econometrics Toolbox<\/li><li>Financial Instruments Toolbox<\/li><li>Financial Toolbox<\/li><li>Risk Management Toolbox<\/li><li>Spreadsheet Link<\/li><li>Trading Toolbox<\/li><\/ul><\/div><p><b>Computational Biology<\/b><\/p><div><ul><li>Bioinformatics Toolbox<\/li><li>SimBiology<\/li><\/ul><\/div><p><b>Code Generation<\/b><\/p><div><ul><li>Filter Design HDL Coder<\/li><li>Fixed-Point Designer<\/li><li>GPU Coder<\/li><li>HDL Coder<\/li><li>HDL Verifier<\/li><li>MATLAB Coder<\/li><li>Vision HDL Toolbox<\/li><\/ul><\/div><p><b>Application Deployment<\/b><\/p><div><ul><li>MATLAB Compiler<\/li><li>MATLAB Compiler SDK<\/li><li>Spreadsheet Link<\/li><\/ul><\/div><p><b>Database Access and Reporting<\/b><\/p><div><ul><li>Database Toolbox<\/li><li>MATLAB Report Generator<\/li><\/ul><\/div><script language=\"JavaScript\"> <!-- \r\n    function grabCode_3a22466d27144641aed7051e5e03e30c() {\r\n        \/\/ Remember the title so we can use it in the new page\r\n        title = document.title;\r\n\r\n        \/\/ Break up these strings so that their presence\r\n        \/\/ in the Javascript doesn't mess up the search for\r\n        \/\/ the MATLAB code.\r\n        t1='3a22466d27144641aed7051e5e03e30c ' + '##### ' + 'SOURCE BEGIN' + ' #####';\r\n        t2='##### ' + 'SOURCE END' + ' #####' + ' 3a22466d27144641aed7051e5e03e30c';\r\n    \r\n        b=document.getElementsByTagName('body')[0];\r\n        i1=b.innerHTML.indexOf(t1)+t1.length;\r\n        i2=b.innerHTML.indexOf(t2);\r\n \r\n        code_string = b.innerHTML.substring(i1, i2);\r\n        code_string = code_string.replace(\/REPLACE_WITH_DASH_DASH\/g,'--');\r\n\r\n        \/\/ Use \/x3C\/g instead of the less-than character to avoid errors \r\n        \/\/ in the XML parser.\r\n        \/\/ Use '\\x26#60;' instead of '<' so that the XML parser\r\n        \/\/ doesn't go ahead and substitute the less-than character. \r\n        code_string = code_string.replace(\/\\x3C\/g, '\\x26#60;');\r\n\r\n        copyright = 'Copyright 2018 The MathWorks, Inc.';\r\n\r\n        w = window.open();\r\n        d = w.document;\r\n        d.write('<pre>\\n');\r\n        d.write(code_string);\r\n\r\n        \/\/ Add copyright line at the bottom if specified.\r\n        if (copyright.length > 0) {\r\n            d.writeln('');\r\n            d.writeln('%%');\r\n            if (copyright.length > 0) {\r\n                d.writeln('% _' + copyright + '_');\r\n            }\r\n        }\r\n\r\n        d.write('<\/pre>\\n');\r\n\r\n        d.title = title + ' (MATLAB code)';\r\n        d.close();\r\n    }   \r\n     --> <\/script><p style=\"text-align: right; font-size: xx-small; font-weight:lighter;   font-style: italic; color: gray\"><br><a href=\"javascript:grabCode_3a22466d27144641aed7051e5e03e30c()\"><span style=\"font-size: x-small;        font-style: italic;\">Get \r\n      the MATLAB code <noscript>(requires JavaScript)<\/noscript><\/span><\/a><br><br>\r\n      Published with MATLAB&reg; R2018a<br><\/p><\/div><!--\r\n3a22466d27144641aed7051e5e03e30c ##### SOURCE BEGIN #####\r\n%% The MATLAB Technical Computing Environment\r\n% The ACM Special Interest Group on Programming Languages, SIGPLAN,\r\n% expects to hold the fourth in a series of conferences on\r\n% the History of Programming Languages in 2020, see\r\n% <https:\/\/hopl4.sigplan.org\/ HOPL-IV>.  The first drafts of\r\n% papers are to be submitted by August 2018.  That long lead time\r\n% gives me the opportunity to write a detailed history of MATLAB.\r\n% I plan to write the paper in sections, which I'll post in\r\n% this blog as they are available.\r\n% This is the seventh, and final, installment.\r\n%\r\n% MATLAB has evolved over the past 35 years into a rich technical \r\n% computing environment.  Here is an overview of some of the tools\r\n% available.\r\n  \r\n%% Desktop\r\n% The MATLAB desktop was introduced in 2000.\r\n% Here is the default layout of the desktop.  This snapshot was taken\r\n% while I was working on\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2018\/04\/30\/matlab-history-modern-matlab-part-2\/\r\n% my previous post>.  Four panels are visible,\r\n% the current folder viewer on the left, the workspace viewer on the\r\n% right, the editor\/debugger in the top center, and the traditional\r\n% command window in the bottom center.  A file viewer and a\r\n% command history window are not in the default layout, but can be\r\n% included in personalized layouts.\r\n%\r\n% Any of the panels can be closed, or undocked into a standalone window. \r\n% I have two screens available on the desk in my office.  I usually put\r\n% the command window on one screen and the editor on the other.\r\n%\r\n% <<desktop.png>>\r\n\r\n%% Workspace\r\n% Here are the contents of the workspace when I execute\r\n% the source script for my previous post.  If I click on any\r\n% of the variables, it will be opened in an appropriate viewer \r\n%\r\n% <<workspace.png>>\r\n\r\n%% Editor\/Debugger\r\n% When I work on this blog, I spend most of my time using this MATLAB editor.\r\n% The source for each post is an executable script, with\r\n% descriptive text in comments and section headings in\r\n% comments beginning with double percent signs, |%%|.\r\n% The final production of a post is initiated with the \"Publish\" tab.\r\n% I have pretty much abandoned my old Unix text editor, \"vi\",\r\n% after many years of faithful service.\r\n%\r\n% <<editor.png>>\r\n\r\n%% Live Editor\r\n% The Live Editor\r\n% was introduced in 2016 and is still under active development.\r\n% MATLAB input, output and graphics are combined in a single interactive\r\n% document.  The document may be exported to HTML, PDF, or LaTeX.\r\n\r\n%%\r\n% Here are a few examples.  The table generated by the small gradebook from\r\n% <https:\/\/blogs.mathworks.com\/cleve\/2018\/04\/30\/matlab-history-modern-matlab-part-2\/\r\n% my previous post> is nicely formatted.\r\n%\r\n% <<gradebook.png>>\r\n%\r\n\r\n%%\r\n% Expressions from the Symbolic Toolbox are typeset.\r\n%\r\n% <<symbolic2.png>>\r\n%\r\n\r\n%%\r\n% And graphical output may be included in the document.\r\n%\r\n% <<symbolic3.png>>\r\n\r\n%% Parallel computing\r\n% The Parallel Computing Toolbox (PCT) was introduced at the Super\r\n% Computing conference in 2004.  The next year, at SC05, Bill Gates\r\n% gave the keynote talk, using MATLAB to demonstrate Microsoft's\r\n% entry into High Performance Computing.  \r\n%\r\n% The toolbox supports coarse grained, distributed memory parallelism\r\n% by running many MATLAB workers on many machines in a cluster,\r\n% or on many cores in a single machine.  Originally MATLAB used MPI\r\n% for the message passing, but in more recent versions of the toolbox\r\n% our own utilities have replaced MPI.\r\n%\r\n% By far the most popular feature of the PCT is the parallel for loop\r\n% command, |parfor|.  \r\n\r\n%% GPUs\r\n% Support for Graphics Processing Units was added to the Parallel\r\n% Computing Toolbox in 2010.  Eight years later, in release R2018a,\r\n% the |gpuarray| has grown to have 385 associated methods, including\r\n% all of the familiar matrix computations, |lu|, |eig|, |svd| and\r\n% |mldivide| (backslash).\r\n\r\n%% Toolboxes\r\n% Much of modern MATLAB's power derives from the toolboxes available\r\n% for specialized applications.  In release 2018a there are 63 of them.\r\n% Here is the list.\r\n%\r\n% *Parallel Computing*\r\n%\r\n% * MATLAB Distributed Computing Server\r\n% * Parallel Computing Toolbox\r\n%\r\n% *Math, Statistics, and Optimization*\r\n%\r\n% * Curve Fitting Toolbox\r\n% * Global Optimization Toolbox\r\n% * Model-Based Calibration Toolbox\r\n% * Neural Network Toolbox\r\n% * Optimization Toolbox\r\n% * Partial Differential Equation Toolbox\r\n% * Statistics and Machine Learning Toolbox\r\n% * Symbolic Math Toolbox\r\n% * Text Analytics Toolbox\r\n%\r\n% *Control Systems*\r\n%\r\n% * Aerospace Toolbox\r\n% * Automated Driving System Toolbox\r\n% * Control System Toolbox\r\n% * Fuzzy Logic Toolbox\r\n% * Model Predictive Control Toolbox\r\n% * Robotics System Toolbox\r\n% * Robust Control Toolbox\r\n% * System Identification Toolbox\r\n%\r\n% *Signal Processing and Wireless Communications*\r\n% \r\n% * Antenna Toolbox\r\n% * Audio System Toolbox\r\n% * Communications System Toolbox\r\n% * DSP System Toolbox\r\n% * LTE HDL Toolbox\r\n% * LTE System Toolbox\r\n% * Phased Array System Toolbox\r\n% * RF Toolbox\r\n% * Signal Processing Toolbox\r\n% * Wavelet Toolbox\r\n% * WLAN System Toolbox\r\n%\r\n% *Image Processing and Computer Vision*\r\n%\r\n% * Automated Driving System Toolbox\r\n% * Computer Vision System Toolbox\r\n% * Image Acquisition Toolbox\r\n% * Image Processing Toolbox\r\n% * Mapping Toolbox\r\n% * Vision HDL Toolbox\r\n%\r\n% *Test and Measurement*\r\n%\r\n% * Data Acquisition Toolbox\r\n% * Image Acquisition Toolbox\r\n% * Instrument Control Toolbox\r\n% * OPC Toolbox\r\n% * Vehicle Network Toolbox\r\n%\r\n% *Computational Finance*\r\n%\r\n% * Database Toolbox\r\n% * Datafeed Toolbox\r\n% * Econometrics Toolbox\r\n% * Financial Instruments Toolbox\r\n% * Financial Toolbox\r\n% * Risk Management Toolbox\r\n% * Spreadsheet Link\r\n% * Trading Toolbox\r\n%\r\n% *Computational Biology*\r\n%\r\n% * Bioinformatics Toolbox\r\n% * SimBiology\r\n%\r\n% *Code Generation*\r\n%\r\n% * Filter Design HDL Coder\r\n% * Fixed-Point Designer\r\n% * GPU Coder\r\n% * HDL Coder\r\n% * HDL Verifier\r\n% * MATLAB Coder\r\n% * Vision HDL Toolbox\r\n%\r\n% *Application Deployment*\r\n%\r\n% * MATLAB Compiler\r\n% * MATLAB Compiler SDK\r\n% * Spreadsheet Link\r\n%\r\n% *Database Access and Reporting*\r\n%\r\n% * Database Toolbox\r\n% * MATLAB Report Generator\r\n% \r\n\r\n##### SOURCE END ##### 3a22466d27144641aed7051e5e03e30c\r\n-->","protected":false},"excerpt":{"rendered":"<div class=\"overview-image\"><img src=\"https:\/\/blogs.mathworks.com\/cleve\/files\/twofuns.png\" class=\"img-responsive attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" \/><\/div><!--introduction--><p>The ACM Special Interest Group on Programming Languages, SIGPLAN, expects to hold the fourth in a series of conferences on the History of Programming Languages in 2020, see <a href=\"https:\/\/hopl4.sigplan.org\/\">HOPL-IV<\/a>.  The first drafts of papers are to be submitted by August 2018.  That long lead time gives me the opportunity to write a detailed history of MATLAB. I plan to write the paper in sections, which I'll post in this blog as they are available. This is the seventh, and final, installment.... <a class=\"read-more\" href=\"https:\/\/blogs.mathworks.com\/cleve\/2018\/05\/14\/the-matlab-technical-computing-environment\/\">read more >><\/a><\/p>","protected":false},"author":78,"featured_media":3318,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[4,19,20],"tags":[],"_links":{"self":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3302"}],"collection":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/comments?post=3302"}],"version-history":[{"count":4,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3302\/revisions"}],"predecessor-version":[{"id":3320,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/posts\/3302\/revisions\/3320"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media\/3318"}],"wp:attachment":[{"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/media?parent=3302"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/categories?post=3302"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.mathworks.com\/cleve\/wp-json\/wp\/v2\/tags?post=3302"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}