# MATLAB

MATLAB (MATrix LABoratory) trata-se de um software interativo de alta performance voltado para o cálculo numérico. O MATLAB integra análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos em ambiente fácil de usar, onde problemas e soluções são expressos somente como eles são escritos matematicamente, ao contrário da programação tradicional.
O MATLAB é um sistema interativo cujo elemento básico de informação é uma matriz que não requer dimensionamento. Esse sistema permite a resolução de muitos problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. Além disso, as soluções dos problemas são expressas quase exatamente como elas são escritas matematicamente.

## Histórico

O MATLAB é um software destinado a fazer cálculos com matrizes. MATLAB foi criado no fim dos anos 1970 por Cleve Moler, então presidente do departamento de ciência da computação da Universidade do Novo México. Ele logo se espalhou para outras universidades e encontrou um forte uso no âmbito da comunidade matemática aplicada.
Jack Little, um engenheiro, conheceu a linguagem MATLAB durante uma visita feita por Moler à Universidade de Stanford, em 1983. Reconhecendo o seu potencial comercial, ele juntou-se a Moler e Steve Bangert. Eles reescreveram MATLAB em C; e em 1984, fundaram a MathWorks e prosseguiram no seu desenvolvimento. As bibliotecas reescritas (LINPACK e EISPACK) ficaram conhecidas como LAPACK (incorporada ao MATLAB na versão do ano 2000).
MATLAB foi adotado pela primeira vez por engenheiros de projeto de controle, a especialidade de Little; e rapidamente se espalhou para outros campos de aplicação. Agora, é também utilizado nas áreas da educação, em especial o ensino da álgebra linear e análise numérica; e é muito popular entre os cientistas envolvidos com o processamento de imagem.

## Sintaxe

MATLAB é construído na linguagem MATLAB, às vezes chamada M-código ou simplesmente M. No Gerenciador de Programas do Microsoft Windows, deve-se abrir o grupo de programas do MATLAB para Windows, que contém o ícone do aplicativo MATLAB. Um duplo clique no ícone MATLAB carrega o aplicativo MATLAB. Quando o MATLAB é carregado, duas janelas são exibidas: a Janela de Comando (Command Windows) e Janela Gráfica (Graphic Windows). A Janela de Comando é ativada quando se inicializa o MATLAB; e o prompt padrão (>>) é exibido na tela.
MATLAB pode ser usado como um shell interativo de matemática. Sequências de comandos podem ser guardadas em um arquivo de texto, tipicamente utilizando o MATLAB Editor, como um script; ou encapsulado em uma função, alargando os comandos disponíveis.

### Variáveis

As variáveis são definidas com o operador “=”. MATLAB é dinamicamente digitado, o que significa que variáveis podem ser atribuídas sem declarar seu tipo, mas este pode ser alterado. Os valores podem vir de constantes, a partir de cálculos que envolvam valores de outras variáveis; ou a partir da saída de uma função. Por exemplo:

### Vetores e matrizes

MATLAB é um Matrix Laboratory; e como tal, fornece muitas maneiras convenientes para a criação de matrizes de várias dimensões. No vocabulário MATLAB, um vetor refere-se a uma dimensão (1 × N ou N × 1), comumente referida como um vetor em outras linguagens de programação. A matriz geralmente se refere a uma matriz multidimensional, isto é, uma matriz com mais de uma dimensão, por exemplo, uma N × M, uma N × M × L, entre outras, onde N, M e L são superiores a 1. Em outras linguagens, uma matriz pode ser referida como um "array de arrays", ou "array de arrays de arrays", ou simplesmente como um array multidimensional.
MATLAB oferece uma maneira simples de definir arrays simples, usando a sintaxe "inicial: incremento: final". Por exemplo:
Define uma variável chamada array (ou atribui um novo valor a uma variável já existente com o nome array), que é constituída por uma matriz dos valores 1, 3, 5, 7 e 9; ou seja, a matriz começa em 1, o valor inicial, e cada valor é incrementado a partir do valor anterior em 2 (incremento do valor); e para quando ele chega a 9, mas não ultrapassa o valor 9 (9 sendo o valor final).
O valor do incremento pode ficar fora desta sintaxe (junto com os “:”), para usar um valor padrão de incremento 1.
Atribui à variável chamada "ari" um array com os valores 1, 2, 3, 4 e 5, uma vez que o valor padrão 1 é usado como o incremento.
A indexação é uma base de [5], que é a convenção usual para matrizes em matemática. Isso é atípico para linguagens de programação, cujos arranjos mais frequentemente começam com zero.
Matrizes podem ser definidas separando os elementos de uma fila com espaço em branco; ou usando vírgula e ponto-e-vírgula para terminar cada linha. A lista de elementos deve ser cercada por colchetes:. Parênteses: são usados para acessar os elementos e subarrays (eles também são usados para denotar uma função "argumento lista").
Uma matriz identidade de tamanho n podem ser gerada usando a função eye; e matrizes de qualquer tamanho ou aquelas com zeros podem ser geradas com as funções zeros e ones, respectivamente.
A maior parte das funções MATLAB pode aceitar matrizes; e irá aplicar-se a cada elemento. Por exemplo, mod (2 * J, n) irá multiplicar cada elemento em "J" a 2 e, em seguida, reduzir cada elemento módulo n. MATLAB não inclui padrão "para" e "enquanto", mas usando MATLAB's vectorized, a notação produz um código que muitas vezes é mais fácil de ler e mais rápido para executar. Este código, a partir da função magic.m, cria um cubo mágico M, para valores de n (MATLAB função meshgrid é aqui utilizada para gerar matrizes quadradas e I.J contendo 1: n).

## Extensões

O programa dispõe de diversas extensões (chamadas toolboxes ou blocksets). Além dos módulos adicionais, o MATLAB conta com o Simulink, um ambiente de simulação baseado em diagrama de blocos; e plataforma para Model-Based Design. As suas extensões são:
* Simulink
* Parallel Computing Toolbox
* MATLAB Distributed Computing Server
* Symbolic Math Toolbox
* Partial Differential Equation Toolbox
* Statistics and Machine Learning Toolbox
* Curve Fitting Toolbox
* Optimization Toolbox
* Global Optimization Toolbox
* Neural Network Toolbox (for Deep Learning)
* Text Analytics Toolbox
* Model-Based Calibration Toolbox
* Control System Toolbox
* System Identification Toolbox
* Fuzzy Logic Toolbox
* Robust Control Toolbox
* Model Predictive Control Toolbox
* Aerospace Toolbox
* Aerospace Blockset
* Robotics System Toolbox
* Signal Processing Toolbox
* DSP System Toolbox
* Audio System Toolbox
* Communications System Toolbox
* Wavelet Toolbox
* RF Toolbox
* RF Blockset
* Antenna Toolbox
* Phased Array System Toolbox
* LTE System Toolbox
* WLAN System Toolbox
* Image Processing Toolbox
* Computer Vision System Toolbox
* Automated Driving System Toolbox
* Vision HDL Toolbox
* Image Acquisition Toolbox
* Mapping Toolbox
* Data Acquisition Toolbox
* Instrument Control Toolbox
* OPC Toolbox
* Vehicle Network Toolbox
* ThingSpeak
* Financial Toolbox
* Econometrics Toolbox
* Datafeed Toolbox
* Database Toolbox
* DO Qualification kit (for DO-178)
* IEC Certification Kit (for ISO 26262 e IEC 61508)
* Spreadsheet Link (for Microsoft Excel)
* Financial Instruments Toolbox
* Trading Toolbox
* Risk Management Toolbox
* Bioinformatics Toolbox
* SimBiology
* MATLAB Coder
* Simulink Coder
* Embedded Coder
* GPU Coder
* HDL Coder
* LTE HDL Toolbox
* HDL Verifier
* Filter Design HDL Coder
* Fixed-Point Designer
* MATLAB Compiler
* MATLAB Compiler SDK
* MATLAB Production Server
* MATLAB Report Generator
* Powertrain Blockset
* Simulink PLC Coder
* Simulink Report Generator
* Simulink Requirements
* Simulink Check
* Simulink Coverage
* Simulink Control Design
* Simulink Coder Inspector
* Simulink Design Optmization
* Simulink Design Verifier
* Simulink Real-Time
* Simulink Desktop Real-Time
* Simscape
* Simscape Multibody
* Simscape Driveline
* Simscape Fluids
* Simscape Electronics
* Simscape Power Systems
* SimBiology
* Simulink Test
* Stateflow
* SimEvents
* Simulink 3D Animation
* Simulink Report Generation
* Polyspace Bug Finder
* Polyspace Code Prover
* MATLAB Reservoir Simulation Toolbox

## Exemplos de código-fonte

O MATLAB é uma combinação de muitas das linguagens mais utilizadas, tais como C, Java e Basic. Esta linguagem segue então de uma maneira muito fiel à maior parte dos aspectos das linguagens que estiveram na sua origem. Esta é então uma das grandes vantagens do MATLAB: um programador de C não terá grandes dificuldades em se adaptar a esta linguagem, visto que os códigos-fonte são muito parecidos; e um programador de Java não terá grande dificuldade em se adaptar à construção de objetos GUI em MATLAB (no entanto, o MATLAB tem também um bom componente de interface não gráfica).

### Olá Mundo

O já habitual programa em que se cria uma simples mensagem na tela que diz "Olá Mundo". Para isso, em MATLAB, usa-se a função disp.
1 disp('Olá Mundo');
A função disp tanto pode ser usada para impressão directa, ou seja, o programador escreve no código-fonte aquilo que deve sempre ser impresso; ou nomeia uma função, na qual escreve aquilo que quer; ou pede ao user para escrever numa variável de entrada o que deseja.
Obs.: Na versão 2008b, não é necessário colocar o ";" (ponto-e-vírgula) no final do disp.
Usando variáveis:
No primeiro caso, o MATLAB retornaria a mensagem "Olá Mundo". Mas no 2.º caso, a mensagem a ser escrita iria ser decidida pelo user. Para que seja possível ao user dar alguma ordem ao software, existe a função input. Para se compreender melhor esta função, apresenta-se de seguida um programa de baixa complexidade, que servirá também de introdução às estruturas aninhadas.
Nota: no final de cada linha de código em MATLAB, é conveniente escrever ";". Este caractere serve para omitir o aparecimento do valor de variáveis no dispositivo de saída.

### Informação Idades

Neste programa, pretende-se iniciar o uso da função input e das estruturas aninhadas. Neste simples software, o usuário vai introduzir um determinado valor numérico, que deverá corresponder a uma idade; e o programa devolverá uma determinada mensagem de acordo com o valor introduzido.
Com este software, pretende-se de uma forma simples fazer entender como funciona uma estrutura nested e compreender melhor a função input.
* Função input: com a função input, é pedido ao utilizador que retorne um certo valor alfanumérico ao sistema, sendo que o programa só continua quando o utilizador retornar esse valor. É como num pedy-paper, quando nos deparamos com uma pergunta e só podemos avançar quando lhe respondermos. O que acontece neste programa é que o utilizador retorna um valor numérico à variável "idade", para depois ser analisado. Repare que no programa anterior, o da mensagem escolhida pelo user, a função input era usada com a seguinte sintaxe: texto = input('Escreva a sua mensagem--> ','s'); enquanto que no programa de informação de idades, é escrito assim: idade = input('Escreva uma idade--> ');. A parte do 's' é usada com a função input quando queremos dar a possibilidade ao user de retornar à variável qualquer tipo de valor que ele queira (tanto números como letras). Quando não se usa esta sintaxe, pretende-se que o user apenas introduza valores do tipo numérico, sendo que quando isso não acontece, aparece a seguinte mensagem de aviso no ecrã:

### Método de Newton
## MATLAB no Brasil

Referência em Model-Based Design e Model-Based System Engineering na América Latina e especialista em tecnologias da Indústria 4.0, a OPENCADD é a distribuidora exclusiva dos softwares MATLAB® e Simulink® no Brasil.
Fundada com a missão de enriquecer a indústria brasileira com as mais avançadas soluções tecnológicas, a OPENCADD ajudou a fortalecer a presença do MATLAB e Simulink em território brasileiro. A parceria exclusiva com a MathWorks permite à OPENCADD disponibilizar licenças, treinamentos e suporte especializado, garantindo que os usuários brasileiros possam extrair o máximo dessas plataformas.
Isso acontece através de workshops, cursos de treinamento e suporte personalizado, onde a OPENCADD capacita de engenheiros à cientistas para enfrentarem desafios técnicos de maneira mais eficaz, promovendo a inovação e a excelência nas áreas em que atuam.