Você está na página 1de 29
INTRODUÇÃO AO MATLAB 30 e 31 de Maio de 2006. FEIS-UNESP Prof a . Dr
INTRODUÇÃO AO MATLAB 30 e 31 de Maio de 2006. FEIS-UNESP Prof a . Dr
INTRODUÇÃO AO MATLAB 30 e 31 de Maio de 2006. FEIS-UNESP Prof a . Dr

INTRODUÇÃO AO MATLAB

30 e 31 de Maio de 2006.

FEIS-UNESP

Prof a . Dr a . Erica Regina Marani Daruichi Machado Guilherme Borges Moreira

1.INTRODUÇÃO

O MATALB é um ambiente computacional e também uma linguagem de programação, sendo

um software amplamente difundido na área acadêmica. Estudantes de várias universidades do mundo

têm utilizado o MATLAB para obter respostas aos seus problemas e principalmente para entender como obtê-las.

Devido à diversidade de aplicações científicas, de engenharia, computação numérica, de análise e visualização de dados e outras, o MATLAB se tornou o ambiente de computação técnicas de grande versatilidade.

Exemplos de aplicação do MATLAB: Estudante de física analisando e visualizando dados de seus experimentos com campos magnéticos; Controle de sistemas; Processo de codificação e compressão para TV digital; Modelagem de sistemas; Transformadas; Operações elementares; Estatística; Redes Neurais; Lógica Fuzzy

O ambiente MATLAB permite que o usuário utilize suas funções sem a necessidade de uma

programação elaborada. Entretanto, como linguagem de programação permite a construção de ferramentas e funções pelo usuário (são os arquivos *.M).

As TOOLBOXES são coleções de funções úteis relacionadas a um assunto. Essas TOOLBOXOES são elaboradas por pesquisadores de todo o mundo, em vários campos tais como

controle, processamento de sinais, identificação de sistemas, alguns exemplos de TOOLBOXES.

Neste mini-curso serão apresentados

O objetivo do curso é introduzir usuário no ambiente Matlab e apresentar suas ferramentas

básicas. Uma vez conhecido o ambiente, o usuário pode procurar os recursos necessários dentro do próprio Matlab, através dos menus Help. Será apresentado o ambiente do Simulink e ilustradas algumas simulações de instruções básicas.

Por sua simplicidade e clareza, os tópicos, texto e exemplos deste curso foram extraídos do livro MATLAB Versão Estudante 5.3, Guia do Usuário. Este livro contém instruções básicas do software, que é o objeto deste curso.

2.OPERAÇÕES BÁSICAS - MATEMÁTICA ELEMENTAR

Operação

Símbolo

Exemplo

Adição,

a+b

+

5+3

 

Subtração

a-b

-

23-12

 

Multiplicação

a*b

*

3.14*0.85

 

Divisão

a÷ b

/ ou \

56/8=8\56

 

Potenciação

^

5^2

 

»

2*3+(5*48)-(4*23)

» 8/56

ans =

 

ans =

 

154

0.1429

»

56\8

ans =

0.1429

3.VARIÁVEIS

3.1.DECLARAÇÃO DE VARIÁVEIS

Assim como qualquer outra linguagem de programação, o MATLAB tem regras a respeito dos nomes das variáveis.

os nomes das variáveis devem ser palavras únicas, sem inclusão de espaços;

N=1;

os nomes das variáveis devem começar com uma letra, seguida de um número qualquer de letras, algarismos ou sublinhas.

A12345=10

N1=1;

Rua_2=12

N_a=1

123_rua χ

as variáveis são sensíveis a maiúsculas e minúsculas;

A=3;

caracteres

de

pontuação

não

são

A!=3

a=5 ;

permitidos.

A1&3=2χ

 

B=A+a

podem

conter

até

19

abcdefg

não é necessário declarar a variável

 

A=3.32+i

caracteres

j=1

 

se uma instrução for muito longa, coloque ( ) seguidas de <ENTER>.

N=1+x

2

   

+2*x+3

3.2.VARIÁVEIS ESPECIAIS

O MATLAB tem diversas variáveis especiais

Ans

Nome de uma variável padrão usada para resultados

NAN

Não-número

 

E: 0/0

Pi

Razão entre o perímetro da circunferência e seu diâmetro

i e j

i = j =

−1
−1

eps

Menor número que, somado a 1, cria um número de ponto flutuante maior que 1 no computador.

Realmin

Menor

número

real

positivo

utilizável

Inf

Infinito, 1/0.

Realmax

Maior

número

real

positivo

utilizável

3.3.REDEFINIÇÃO DE VARIÁVEIS

3.3.1. O COMANDO DE ATRIBUIÇÃO É AUTODESTRUTIVO.

Ao inserir um novo valor na variável o valor antigo é destruído. O MATLAB faz os cálculos utilizando os valores conhecidos no momento em que o cálculo foi solicitado

» a=3.21+i

a =3.2100 + 1.0000i

» b=2

b = 2

» a=3

a = 3

» c=a+b

c =5

3.3.2. EXCLUSÃO MANUAL

As variáveis do espaço de trabalho do MATLAB podem ser excluídas incondicionalmente usando-se o comando clear.

»a=3.21+i

» clear a

a

=

3.2100 + 1.0000i

» c=a+b

 

??? Undefined function or variable 'a'.

»

b=2

 

b

=

2

3.3.3. LISTA DE VARIÁVEIS

Para listar todas as variáveis utilizadas na área de trabalho digite o comando who.

» who Your variables are:

b

4.AJUDA ON-LINE

4.1.HELP

Utilizado no caso em que não se sabe o nome do tópico a respeito do qual se necessita de informações. Digite help e a tela descreverá categorias sobre as quais você pode obter ajuda.

4.2.HELP < TÓPICO>

Utilizado no caso em que se sabe o nome o tópico a respeito do qual se necessita de informações

» help sqrt SQRT

Square root.

SQRT(X) is the square root of the elements of X. Complex results are produced if X is not positive

See also SQRTM. Overloaded methods help sym/sqrt.m

4.3. COMANDO LOOKFOR

Utilizado quando não tiver certeza da existência e da grafia exata de um tópico. Este comando fornece ajuda fazendo uma busca em toda primeira linha dos tópicos de ajuda e retornando aqueles que contêm a palavra-chave que você especificou. A palavra chave não precisa ser um comando MATLAB.

» lookfor complex CONJ Complex conjugate. CPLXPAIR Sort numbers into complex conjugate pairs IMAG Complex imaginary part. REAL Complex real part. CDF2RDF Complex diagonal form to real block diagonal form. RSF2CSF Real block diagonal form to complex diagonal form.

4.4.HELP DA BARRA DE MENU

Na barra de menus do MATLAB selecione o menu Help e verifique as opções.

5.CARACTERÍSTICAS CIENTÍFICAS

O MATLAB oferece diversas funções importantes nas ciências em geral. A tabela a seguir

apresenta uma lista parcial de funções básicas suportadas por MATLAB.

abs(x)

valor absoluto ou módulo de um n o

acos(x)

arco cosseno

acosh(x)

arco cosseno hiperbólico

angle(x)

ângulo de um n o complexo

asin(x)

arco seno

asinh(x)

arco seno hiperbólico

atan(x)

arco tangente

atan2(x,y)

arco tangente em quatro quadrantes

ceil(x)

arredondar para mais infinito

conj(x)

conjugado complexo

cos(x)

cosseno

cosh(x)

cosseno hiperbólico

exp(x)

exponencial

fix(x)

arredondar par zero

floor(x)

arredondar para menos infinito

imag(x)

parte imaginária de um n o complexo

log 10

logaritmo na base 10

log(x)

logaritmo natural

real(x)

parte real de um n o complexo

sqrt(x)

raiz quadrada

rem(x,y)

resto da divisão de x por y

round(x)

arredondar para o próximo n o inteiro

sing(x)

retorna o sinal do argumento

sin(x)

seno

sinh(x)

seno hiperbólico

tanh(x)

tangente hiperbólica

tan(x)

Tangente

   

5.1.HELP DAS FUNÇÕES

Para conhecer saber mais sobre as funções consulte o menu Help elfun.

6.MANIPULAÇÃO DE DADOS

6.1.FORMATOS E VISUALIZAÇÃO DE DADOS – FORMATOS NUMÉRICOS

format short

34.5667

Apresentação padrão

format long

34.56666666666666

16

dígitos

format short e

3.4567e+001

5 dígitos mais expoente

format long e

3.456666666666666e+001

16

dígitos mais expoente

format hex

4041488888888888

hexadecimal

format bank

34.57

duas casas decimais

format rat

1037/30

aproximação racional

Matlab não altera a

representação interna de um número quando optamos por diferentes formatos, somente a

visualização é alterada.

O

6.2.OUTRAS CARACTERÍSTICAS BÁSICAS

A vírgula indica ao MATLAB para mostrar o resultado; o ponto-e-vírgula suprime a visualização;

A execução do MATLAB pode ser interrompida a qualquer momento pressionando CTRL-C;

O comando quit termina a execução do MATLAB;

Todo texto depois do sinal de porcentagem (%) é considerado um comentário;

Pode-se colocar mais de um comando em uma linha, separando-os por vírgula ou ponto-e-vírgula.

O comando clc apaga os dados da tela, mas não a memória (clear).

6.3.ENTRADA DE DADOS – INPUT

A função input permite a entrada de dados via teclado. Após esta instrução o MATLAB

interrompe a execução do programa e espera que o usuário digite algum valor, que pode ser numérico ou literal (este valor deve ser inserido entre plicas ‘ ’) .

» a=input(' ') 'curso' a =curso

» a=input(' ')

15

a =15

6.4.APRESENTAÇÃO DE TEXTOS - DISP

Para apresentar textos na tela utiliza-se o comando disp.

» disp('Curso de MATLAB') Curso de MATLAB

5

6.5.ARMAZENAMENTO DE DADOS - SAVE X LOAD

Este comando salva todas as variáveis em um arquivo em disco chamado matlab.mat. Para recuperar as variáveis em uma outra seção do MATLAB, pode-se executar o comando load para restaurar o espaço de trabalho com as variáveis de matlab.mat. Podem ser utilizados os comandos save e load em arquivos com outros nomes, ou salvar somente algumas variáveis.

» save dados a b

» clear

» load dados

Resultado semelhante pode ser obtido utilizando o item de menu

Save Workspace as

e Load Workspace

do menu FILE.

7. GERENCIAMENTO DE ARQUIVOS

O MATLAB apresenta diversos comandos de gerenciamento de arquivos que lhe permitem listar nomes de arquivos, visualizar e excluir arquivos M, mostrar e mudar o diretório atual ou fichário.

what

Retorna uma listagem de todos os arquivos M do diretório

dir, ls

Lista todos os arquivos do diretório

type nome

Mostra o arquivo M nome.m na janela de comandos

delete nome

Exclui o arquivo M nome.m

cd, chdir caminho

Muda para o diretório dado por caminho

cd, pwd

Mostra o diretório de trabalho atual

which nome

Mostra o caminho para o para o diretório nome

8.VETORES E MATRIZES

Para criar um vetor ou uma matriz no MATLAB, coloca-se um colchete esquerdo, introduzem-se os valores desejados separados por espaços ou por vírgulas e em seguida fecha-se o colchete direito. Separando os elementos por espaços ou vírgulas especificam-se elementos de colunas diferentes; separando os elementos com pontos-e-vírgulas especificam-se elementos de linhas diferentes.

8.1.VETORES

8.1.1. VETOR LINHA X VETOR COLUNA

Vetor linha

» x=[3 2 1 5 6]

 

» x=[3,2,1,5,6]

 

x = 3

2

1

5

6

7

x = 3

2

1

5

6

Vetor coluna

»

x=[3 2 1]'

»

x=[3; 2; 1]

x

=3

x

=3

2

2

1

1

8.1.2. ESPECIFICAÇÃO DE VETOR POR DOIS PONTOS

Sintaxe:

começa em x 0 , incrementa de inc e termina em

x f .

(x 0 :inc:xf) cria um vetor que

Os valores podem ser assumidos em forma decrescente. Quando o incremento “inc” não é especificado explicitamente, ele assume o valor 1.

» y=0:0.1:0.5

 

y =

0

0.1000

0.2000

0.3000

0.4000 0 .5000

»

y=-3:1:1

 

% ou

y=-3:1

   

y =

-3

-2

-1

0

1

»

y=1:5

y =

1

2

3

4

5

6

8.1.3.

LEITURA DE VETOR

» x=input('') [1 2 3 4 5 6]

x =

2

1

% Leitura de um vetor via teclado

3

4

5

6

8.1.4. ENDEREÇAMENTO

No Matlab, elementos de conjunto individuais são acessados usando-se subscritos, ou seja, x(1) é o primeiro elemento de x, x(2) é o segundo elemento de x e assim por diante. No exemplo 8.1.2:

» y(3)

   

» y(4)

 

» y(2:4) ans = -2

 

» y(2:2:5)

 

» y([5 2 4 1])

 

ans =

-1

ans =

0

-1

0

ans =

-2

0

ans = 1

-2

0

-3

 

8.1.5.

OPERAÇÕES COM VETORES

 

Quando se trata de operações com vetores na multiplicação, divisão e potenciação introduzem um ponto antes do símbolo da operação. Isto indica ao MATLAB que as operações se tratam de vetores e não de matrizes.

»

x=(0:0.1:0.5)*pi % multiplica cada elemento por pi

»

a=-4:-1, b=1:4

 

x =

0

0.3142

0.6283

0.9425

1.2566

a =

-4

-3

-2

-1

1.5708

 

b =

1

2

3

4

» a=-1:2; b=1:3;

 

»

e=a.*b

%multiplicação elemento por elemento

» c=[a b]

 

e =

-4

-6

-6

-4

c =

-1

 

0

1

2

1

2

3

 
 

»

f=a./b

»

d=[a(1:2:4) 5 5 5]

 

f =

-4.0000

-1.5000

-0.6667

-0.2500

d =

-1

 

1

5

5

5

 
 

»

x=input('')

%entrada de vetores via teclado

»

a-2

[1 2 3 4 5 6]

ans =

-3

-2

-1

0

x =

1

2

3

4

5

6

»

5*a-3

   

ans =

-8

-3

2

7

8.1.6. COMANDO LINSPACE

Sintaxe: linspace (primeiro_valor, último_valor, número_de_ valores). Este comando cria um conjunto de valores (vetor) onde é possível determinar o número de pontos, mas não o incremento.

» x=linspace(0,pi,12) x = Columns 1 through 7 Columns 8 through 12 0 0.2856 0.5712
» x=linspace(0,pi,12)
x = Columns 1 through 7
Columns 8 through 12
0
0.2856
0.5712
0.8568
1.1424
1.4280
1.7136
1.9992
2.2848
2.5704
2.8560
3.1416

8.1.7.

COMANDO LOGSPACE

Sintaxe: logspace(primeiro_expoente, último_expoente, número_de_ elementos) Este comando cria um conjunto de valores (vetor) com espaçamento logarítmico.

» x=logspace(0,2,11)

x = Columns 1 through 7

1.0000

1.5849

2.5119

3.9811

6.3096

10.0000

Columns 8 through 1

15.8489

25.1189

39.8107

63.0957 100.0000

O conjunto começa em 10 0 , termina em 10 2 e contém 11 elementos.

8.2.MATRIZES

8.2.1. INTRODUÇÃO DE UMA MATRIZ

Pode-se entrar com matrizes no MATLAB de diversas maneiras:

Entrar com uma lista explícita de elementos.

Gerar matrizes utilizando funções e linhas de comando do MATLAB.

Criar matrizes em arquivos-M.

Chamar matrizes de um arquivo de dados externo.

A maneira mais fácil de declarar matrizes é fazendo a explicitação da lista de elementos na linha

de comando, seguindo as convenções abaixo:

Separar os elementos da lista de elementos através de espaços ou vírgulas. Colocar os elementos entre colchetes, [ ]. Usar (;) ponto-e-vírgula para indicar o fim de uma linha.

Por exemplo, entrando com a linha de comando.

» A=[1 2 3;4 5 6;7 8

0]

A =

1

2

3

4

5

6

7

8

0

»

B=[100;213;521]

B =

100

213

521

8.2.2. OPERAÇÕES COM MATRIZES

%

Calculo de determinante

%Divisão de matrizes

»

A=[1 2 3;4 5 6;7 8 0]

»

x=(A\B)’ % inv(A)*B

 

x

=-46.3333 105.6667 -21.6667

»

m=det(A)

 

m

=

27

%Utiliza a Técnica de fatoração LU e representa a resposta como a divisão

%

Calculo da inversa

 

esquerda de A por B. O Operador não

»

x

x=inv(A)

= -1.7778 0.8889 -0.1111

tem o ponto precedente porque se trata

de divisão matricial e não operação de

elementos. É mais rápida porque realiza menos cálculos internos. %No caso de sistemas lineares, se houver mais equações do que incógnitas, isto é, em um caso

 

1.5556

-0.7778

0.2222

-0.1111 0.2222 -0.1111

%Multiplicação de Matrizes

»

Y

Y=A*B

= 2089

 

superdeterminado, o uso do operador \

automaticamente encontra a solução

 

4591

que minimiza o erro quadrado de (Ax-

2404

b=0) (solução dos mínimos quadrados)

% Caso subdeterminado » x=(pinv(A)*B)'

x = -46.3333 105.6667 -21.6667

%Obtém-se a solução na

qual o comprimento euclidiano ou norma de x é menor do que em qualquer outra solução possível. %A solução é baseada no pseudo-inverso (solução de

mínima).

norma

Alternativamente ou operador de divisão calcula a solução que tem zero para alguns elementos de x.

8.2.3.

MANIPULAÇÃO MATRICIAL

» A(3,2)=0

A =

% altera o elemento da linha 3

% e coluna 2 de 8 para 0

1

2

3

4

5

6

7

0

9

» A(2,5)=1

 

% coloca 1 na segunda linha

A =

% e na quinta coluna.Como

1

2

3

0

0 % a matriz A não tem cinco

4

5

6

0

1 % colunas, o tamanho de A

7

0

9

0

0 % é aumentado

conforme

% necessário e A é % preenchida com zeros.

»A=[1 2 3;4 5 6;7 8 9];

»

B=A(3:-1:1,1:3)

% ou B=A(3:-1:1,:)

B

=

7

8

9

% cria uma matriz B

4

5

6

% colocando as linhas da

1

2

3

% matriz A em ordem inversa

»

C=[A B(:,[1 3])]

 

%matriz A e todas as

C

=

% linhas da matriz B

1

2

3

7

9

%das colunas 1 e 3

4

5

6

4

6

7

8

9

1

3

8.2.4. MATRIZES ESPECIAIS

% matriz nula

» x=zeros(3)

x = 0

0

0

0

0

0

0

0

0

% matriz unitária

%2 linhas,4 colunas

» x=ones(2,4)

x =1

1

1

1

1

1

1

1

%matriz de elementos iguais

» x=ones(3)*pi

x =3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

% matriz identidade

» x=eye(3)

» x=eye(3,2)

x =1

0

0

x= 1

0

0

1

0

0

1

0

0

1

0

0

%matriz de elementos iguais

» x=ones(3)*pi

x =3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

3.1416

% matriz de n o aleatórios

» x=rand(3,1)

x =0.9501

0.2311

0.6068

% comprimento da matriz

» A=-200:pi:100

» size(A)

ans =

% matriz com 1 linha e 96

colunas

1

96

» length(A)

ans =

96

% retorna o comprimento do vetor

» A=[1 2 3 4; 5 6 7 8]; » size(A) ans = 2 4
» A=[1 2 3 4; 5 6 7 8];
» size(A)
ans =
2
4 % 2 linhas
e 4
colunas
» length(A)
ans =
4
% retorna o n o de linhas
% ou o n o de colunas,
% o que for maior.
%encontrar elementos específicos
% acha os subscritos (posição) onde a
expressão relacional é verdadeira
» x=(-3:3)
x = -3
-2
-1
0
1
2
3
» k=find(abs(x)>1)
k =
1
2
6
7
» A=[1 2 3;4 5 6;7 8 9];
» [i,j]=find(A<5)
i =1
j= 1
2
1
1
2
1
3

8.3.HELP DE MATRIZES E VETORES

Para conhecer mais funções sobre matrizes consulte o Help matfun (funções com matrizes), Help elmat (matrizes elementares), Help sparfun.

9.GRÁFICOS

Como exemplo inicial, será ilustrado a função seno no intervalo [0,2π] com 30 pontos.

» x=linspace(0,2*pi,30);

» y=sin(x);

» plot(x,y)

» x=linspace(0,2*pi,30); » y=sin(x); » plot(x,y) Características da função plot: escolhe automaticamente

Características da função plot:

escolhe automaticamente os limites dos eixos, marcar os pontos individuais e desenha linhas retas entre eles. plota múltiplos conjuntos de dados nos mesmos eixos; utiliza diferentes tipos de linhas;

marca somente os pontos de dados sem interliga-los; coloca nomes nos eixos e títulos;

linhas de grade; usa cores distintas para diferentes curvas

» z=cos(x) % duas curvas nos mesmos eixos »plot(x,y,'r-o',x,z,'b-+') % seno (vermelho, ‘o’) ,
» z=cos(x)
% duas curvas nos mesmos eixos
»plot(x,y,'r-o',x,z,'b-+')
% seno (vermelho, ‘o’) , cosseno (azul,‘+’)
% nomeia o eixo horizontal
»xlabel('x (rad)')
% nomeia o eixo vertical
» ylabel('Ilustração do comando plot')
% coloca um título
» title('Funções seno(x) e cosseno(x)')
% linhas de grade
» grid
% limite dos eixos
% define os valores máximo e mínimo
dos eixos usando um vetor linha
»axis([0 6.5 -1 1])
% inserir textos no gráfico
»text(2.8,0.53,'sen(x)')
% inserir textos no gráfico a partir da
posição do cursor (dê um clique na
posição desejada)
» gtext('cos(x)')
Os textos ‘seno’, ‘cos’ podem ser introduzidos
diretamente na figura, assim como a
espessura das linhas.

9.1.1. ESTILOS DE LINHA, MARCADORES E CORES

Símbolo

Cor

Símbolo

Tipo de linha

y

amarelo

.

ponto

m

magenta

o

círculo

c

ciano

x

x-marca

r

vermelho

+

mais

g

verde

*

asterisco

b

azul

-

linha contínua

w

branco

:

linha pontilhada

k

preta

-.

traços e pontos

   

--

linha tracejada

9.2.EIXOS

axis([xmin xmax ymin ymax])

define os valores máximo e mínimo dos eixos

axis auto

retorna o escalamento de eixos para o modo automático padrão:

xmion=min(x), xmax=max(x)

axis(axis)

congela a escala nos seus limites atuais

axis square

(‘square’)

faz com que o gráfico seja quadrado e não retangular

axis on

(‘on’)

liga nomes de eixos, marcadores e grade

axis off

(‘off’)

desliga todos os nomes de eixos, grades e marcadores

axis equal

(‘equal’)

define os fatores de escalamento para ambos os eixos com sendo iguais

9.3.FIGURE

Se você desejar dois ou mais gráficos em diferentes janelas, use o comando figure ou a seleção New figure do menu File, na janela de comandos. O comando figure sem argumentos cria uma nova janela. O comando figure(n) abre uma janela específica de número n.

9.4.COMANDO HOLD ON

Permite que seja adicionada mais de uma curva no mesmo gráfico. Quando o hold on é acionado, o MATLAB não remove as curvas já existentes quando novos comandos plot são emitidos. Em vez disso, ele acrescenta novas curvas nos eixos já existentes. Contudo, se os novos valores não se ajustarem aos limites de eixos em vigor, os eixos podem ser reescalados. Fazendo hold off, libera-se a janela atual para novos gráficos. O comando hold sem argumentos comuta a função entre liga e desliga.

9.5.O COMANDO SUBPLOT

O comando subplot(m,n,p), divide a janela atual em uma matriz m por n de áreas gráficas e faz com que a p-ésima área fique ativa. Os subgráficos são numerados da esquerda para a direita, ao longo da linha superior, daí para a segunda linha.

» y=sin(x);

» z=cos(x);

»w=[y;z],

» a=2*sin(x).*cos(x),

» b=sin(x)./(cos(x)+eps)

» subplot(2,2,1)

» plot(y,z),title('Seno x cosseno' )

» subplot(2,2,2)

» plot(x,y,x,2*y.*z, '--'),

» title('2Seno(x)cosseno(x)=sen(2x)' )

» subplot(2,2,3)

» plot3(y,z,x),grid

»title('Gráfico Tridimensional'), »xlabel('sin(x)'), »ylabel('cos(x)'),zlabel('x')

» subplot(2,2,4)

» plot(x,b), axis([0 2*pi -20 20]),

» title('sen(x)/cos(x)')

» subplot(2,2,4) » plot(x,b), axis([0 2*pi -20 20]), » title('sen(x)/cos(x)') 11

9.6.OUTRAS CARACTERÍSTICAS

loglog

Mesmo que o plot mas as duas escalas são logarítmicas

 

semilog

Escala logarítmica para o eixo x e linear para y

 

semilogy

Escala logarítmica para o eixo y e linear para x

 

polar(t,r,s)

Coordenadas polares,t é vetor ângulo em radianos, r é o vetor raio, s descreve cor, marcadores

bar(x,y)

Gráfico de barras

stairs(x,y)

Gráfico escada

hist(y,n)

Desenha um histograma com n divisões do vetor y.

 

hist(y,x)

Desenha um histograma usando as divisões especificadas no vetor x.

hist(y)

Faz um histograma de dez divisões para os dados do vetor y

rose(t)

Desenha um histograma polar com 20 divisões para os ângulos do vetor t. (t,n), (t,x)

stem(y)

Cria um gráfico dos pontos de dados de y conectado ao eixo horizontal por uma linha

stem(x,y)

Cria um gráfico de pontos de dados de y nos valores especificados em x.

[x,y]=ginput(n)

Seleciona n pontos de um gráfico em uso por meio do mouse e retorna suas coordenadas nos vetores de coluna x e y. Se n é omitido, pode-se obter um n o infinito de pontos até teclar <enter>

fplot(‘fun’,[xmi

Cria um gráfico da função fun sobre o intervalo xminxxmax com escalamento automático do eixo y. Fplot(‘fun’,[xmim max]) especifica também y. Há restrições de funções. Consulte o Help.

m max])

%

polares

 

»t=0:0.01:2*pi,

»t=0:0.01:2*pi,

»r=sin(2*t).*cos(2*t);

»subplot(3,2,1);

»polar(t,r), »title ('Gráfico polar');

%

gráfico de barras

»x=-2.9:0.2:2.9;

»y=exp(-x.*x);

»subplot(3,2,2);

»bar(x,y,'w'); »title('Gráfico de barras') »ylabel('Curva normal');

%

gráfico escada

»subplot(3,2,3);

»stairs(x,y),

»title('Gráfico em

escadas') »ylabel('Curva normal');

%

histograma

»subplot(3,2,4);

»y=randn(5000,1);

»hist(y,x); »title('Histograma de dados Gaussianos');

%

hastes

 
12
12

Figura 2

»subplot(3,2,5);

»y=randn(50,1);

»stem(y,':'); »title('Gráfico de haste'), »ylabel('Dados Aleatórios')

»x=linspace(-3,2*pi,330)

»y=sin(x).^2./(x+eps);

%função

»plot(x,y), »title('Gráfico de sen(x)^2/x')

»subplot(3,2,6);

»[a,b]=ginput(4);

»fplot('sin(x)./x',[-20 20 -.4 1.2]) »title('Fplot de sen(x)/x) ') »xlabel('x'),ylabel('f(x)')

»hold on

»plot(a,b,'bo')

»hold off

9.7.GRÁFICOS TRIDIMENSIONAIS

Formato generalizado:

plot3(x 1 ,y 1 ,z 1 ,S 1 ,x 2 ,y 2 ,z 2 ,S 2 , ), onde x n , y n e z n são vetores ou matrizes e s n especifica as cores, símbolos marcadores e/ou estilos de linhas).

»t=0:pi/50:10*pi

»plot3(sin(t),cos(t),t)

»title('Helice'),xlabel('sen(t)')

»ylabel('cos(t'),zlabel('t')

»ylabel('cos(t'),zlabel('t') 9.8.GRÁFICOS DE REDES E SUPERFÍCIE O Matlab define uma

9.8.GRÁFICOS DE REDES E SUPERFÍCIE

O Matlab define uma superfície de rede por meio das coordenadas z de pontos acima de uma

grade retangular no plano xy. Ele forma um gráfico unindo pontos adjacentes com linhas retas. O resultado se parece com uma rede de pesca com nós nos pontos de dados. Estes gráficos são muito úteis na visualização de grandes matrizes ou para a representação gráfica de funções de duas variáveis.

9.8.1. FUNÇÃO MESHGRID

O primeiro passo para gerar um gráfico de rede de uma função de duas variáveis é gerar matrizes

X e Y que consistam em linhas e colunas repetidas, respectivamente, sobre um intervalo das variáveis x e y. Isto pode ser feito pela função meshgrid. [X,Y] = meshgrid(x,y) cria uma matriz x, cujas linhas são cópias do vetor x, e uma matriz Y, cujas colunas são cópias do vetor y. Esse par de matrizes pode então ser usado para calcular funções de duas variáveis usando os recursos convencionais.

» x=-7.5:.5:7.5; y=x;

» [X,Y]=meshgrid(x,y);

» R=sqrt(X.^2+Y.^2)+eps;

» Z=sin(R)./R

» mesh(X,Y,Z)

» surf(X,Y,Z)

» Z=sin(R)./R » mesh(X,Y,Z) » surf(X,Y,Z) 9.8.2. FUNÇÃO SURF Um gráfico de superfície da me sma
» Z=sin(R)./R » mesh(X,Y,Z) » surf(X,Y,Z) 9.8.2. FUNÇÃO SURF Um gráfico de superfície da me sma

9.8.2. FUNÇÃO SURF

Um gráfico de superfície da mesma matriz Z (usado na função mesh) se parece com o gráfico em rede, exceto pelo fato de que os espaços entre as linhas são preenchidos.

9.8.3. FUNÇÃO PEAKS

Esta função (peaks.m) gera uma matriz quadrada de dados. Os dados são baseados em uma função de duas variáveis e contêm pontos de dados para x e y, no intervalo –3 a 3.

contêm pontos de da dos para x e y, no intervalo –3 a 3. f (

f (

x

,

y

)

(

= 2 1 x

)

2 e

2

( + )

y

1

y ) ( = 2 1 − x ) 2 e 2 − ( + )
y ) ( = 2 1 − x ) 2 e 2 − ( + )
y ) ( = 2 1 − x ) 2 e 2 − ( + )

x 2

(

x

5

)

10 x y e

5

3

y 1 x 2 ( x 5 ) − 10 − x − y e 5
y 1 x 2 ( x 5 ) − 10 − x − y e 5
y 1 x 2 ( x 5 ) − 10 − x − y e 5
y 1 x 2 ( x 5 ) − 10 − x − y e 5

x

2

y

2 1

3

e

( + )

y

1

1 x 2 ( x 5 ) − 10 − x − y e 5 3
1 x 2 ( x 5 ) − 10 − x − y e 5 3

2

y

2

Você pode especificar o tamanho da matriz quadrada de dados gerada por peaks passando- lhe argumentos. Se omitir os argumentos, seu padrão será 31.

»M=peaks(20)

»plot(M) »title('Gráfico de Peaks') »mesh(M)

»plot(M) »title('Gráfico de Peaks') »mesh(M) 9.8.4. GRÁFICOS DE CONTORNO Mostram linhas de elevação

9.8.4. GRÁFICOS DE CONTORNO

Mostram linhas de elevação ou altura constante (um exemplo é o mapa topográfico). Os gráficos de contorno bi e tridimensionais são gerados usando-se as funções contour e controur3, respectivamente.

[x,y,z]=peaks;

contour(x,y,z,20);

contour3(x,y,z,20);

[x,y,z]=peaks; contour(x,y,z,20); contour3(x,y,z,20); Outra forma de visualizar informações sobre contorno é
[x,y,z]=peaks; contour(x,y,z,20); contour3(x,y,z,20); Outra forma de visualizar informações sobre contorno é

Outra forma de visualizar informações sobre contorno é usar cores para representar alturas. A função pcolor mapeia em um conjunto de cores e apresenta a mesma informação do gráfico de contorno, na mesma escala. Exemplo: digite ‘z=peaks’ e em seguida ‘pcolor(z)’. Uma vez que pcolor e contour mostram a mesma informação na mesma escala, é sempre útil superpor os dois.

» [x,y,z]=peaks;

» colormap(hot)

» pcolor(x,y,z)

» shading flat

» hold on

» contour(x,y,z,20,'k');

» hold off

» hold on » contour(x,y,z,20,'k'); » hold off 9.9.HELP DE GRÁFICOS Para conhecer mais funções sobre

9.9.HELP DE GRÁFICOS

Para conhecer mais funções sobre gráficos consulte Help graphics, Help graph2d, Help graph3d, Help specgraph.

10.ANÁLISE DE DADOS

A análise de dados no Matlab é feita em matrizes orientadas por colunas. As diversas variáveis são armazenadas em colunas individuais e cada linha representa uma observação diferente de cada variável. Nesta análise podem ser verificados os valores críticos do conjunto, como o valor máximo, o mínimo, o valor médio, a covariância, a correlação

» a=20:-1:0

» b=linspace(-1,9,length(a));

» c=linspace(10,100,length(a));

» x=[a',b',c'] % média de cada coluna

» media=mean(x)

%media das três colunas

» m_media=mean(media) m_media = 23

» maximo=max(x) % valor máximo de cada

coluna

maximo =

20

9

100

» [maximo,p]=max(x)

maximo = 20

%Indica o valor máximo e

%o local onde ocorreu

9

100

p

= 1

21

21

»

[minimo,q]=min(x)

% Indica o valor mínimo

e

o minimo = 0

-1

10

% local onde ocorreu

q

= 21

1

1

10.1.HELP DE ANÁLISE DE DADOS

Para conhecer mais funções de análise de dados consulte Help datafun.

11.POLINÔMIOS

11.1.RAÍZES X POLINÔMIO

Achar as raízes de um polinômio é encontrar os valores para os quais o polinômio é igual a zero. No Matlab, um polinômio é representado por um vetor de linha dos seus coeficientes em ordem decrescente. As raízes do polinômio são obtidas pelo comando roots. O Matlab adota como convenção colocar os polinômios como vetores de linha e as raízes como vetores de coluna. Dadas às raízes de um polinômio, também é possível construir o polinômio associado, através do comando poly.

» p=[1 -12 0 25 116];

» r=roots(p) r = 11.7473

2.7028

-1.2251 + 1.4672i -1.2251 - 1.4672i

» pp=poly(r) pp = 1.0000 -12.0000

-0.0000

25.0000 116.0000

11.2.OPERAÇÕES COM POLINÔMIOS

» a=[1 2 3 4];

» b=[1 2 9 16];

» s=a+b

s =

2

% adição

4

12

20

» e=s+[0 0 1 s(4)] e = 2 4 13 40 » [q,r]=deconv(e,b) q =
» e=s+[0 0 1 s(4)]
e =
2
4
13
40
» [q,r]=deconv(e,b)
q = 2
r =
0
0
-5
8
% divisão
% quociente
% resto da divisão

% Multiplicação polinomial

» c=conv(a,b) % convolução

»c = 1

4

16

44

67

84

64

»x=linspace(-1,3);

»p=[1 4 -7 -10];

% calcula o valor de p(x) nos valores x % armazena os valores em v

»v=polyval(p,x)

»plot(x,v) »title('x^3+4x^2-7x-10'), xlabel('x')

15
15

11.3.HELP DE POLINÔMIOS

Para conhecer mais funções de análise de dados consulte Help polyfun.

12.AJUSTE DE CURVAS E INTERPOLAÇÃO

Em diversas áreas do conhecimento, com freqüência é necessário descrever os dados obtidos experimentalmente por meio de uma função analítica. Há duas alternativas pra resolver o problema:

interpolação e ajuste de curvas ou regressão.

12.1.AJUSTE DE CURVAS

Para o Matlab, o melhor ajuste de curvas é interpretado como sendo a minimização da soma do

erro quadrado dos pontos de dados e a curva utilizada é restrita a polinômios. Matematicamente falando, isso é denominado ajuste de curvas a um polinômio pelo mínimo quadrado (abreviação da minimização da soma do erro quadrado). Este método tem como objetivo achar alguma curva suave que “melhor se ajuste” aos dados, mas que não necessariamente passe por quaisquer dos pontos.

A função polyfit resolve o problema do ajuste de curvas pelo método dos mínimos quadrados.

A escolha da ordem do polinômio é de certa forma, arbitrária. Necessita-se de dois pontos para

definir uma reta ou um polinômio de primeira ordem. Necessita-se de três pontos para definir um polinômio quadrático ou de segunda ordem. Seguindo-se essa progressão, necessita-se de n+1 pontos de dados para especificar de forma única um polinômio de ordem n. No exemplo acima, onde há 11 pontos, poderíamos escolher um polinômio até a décima ordem. Entretanto, das as propriedades dos polinômios de ordem superior, não se deve escolher a ordem com um valor mais alto que o necessário. Além disso, à medida que a ordem do polinômio aumenta, a aproximação torna-se menos suave, já que os polinômios de ordem superior podem ser derivados mais vezes até que se tornem zero.

» x=[0:0.1:1];

» y=[-0.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];

» n=2;

» p=polyfit(x,y,n)

p =

-9.8108

20.1293

-0.0317

% cria os dados para o eixo xi

» xi=linspace(0,1,100);

» z=polyval(p,xi);

% calcula o polinômio p nos pontos de xi

% y

» plot(x,y,'o',x,y,xi,z,':')

»pp=polyfit(x,y,10)

»zz=polyval(pp,xi)

»plot(xi,zz,'-')

»xlabel('x'), ylabel ('y=f(x)') »title('Ajuste de Curva')

» xlabel('x'), ylabel ('y=f(x)')

» title('Ajuste de Curva’)

=− .

9 8108x

2 +

20 1293x

.

.

0 0317

=− . 9 8108x 2 + 20 1293x . − . 0 0317 12.2.INTERPOLAÇÃO A interpolação

12.2.INTERPOLAÇÃO

A interpolação é definida como sendo uma forma de estimar os valores de uma função entre

aqueles fornecidos por um conjunto de dados. A interpolação é uma ferramenta valiosa quando não se pode calcular rapidamente a função nos pontos intermediários desejados. Por exemplo, isso ocorre

quando os pontos de dados resultam de medições experimentais ou de procedimentos computacionais demorados.

12.2.1. INTERPOLAÇÃO LINEAR

A interpolação linear considera que os valores intermediários caem em uma linha reta entre os

pontos definidos. Com certeza, à medida que se têm mais pontos de dados e a distância entre eles diminui, a interpolação linear torna-se mais precisa. Considere o exemplo de registro de temperatura. Foram realizadas algumas medidas de temperatura ao longo de um dia e deseja-se estimar o valor da temperatura em horários diferentes dos que foram realizadas as medidas.

horários diferentes dos que foram realizadas as medidas. » h=1:12 % horário das medições % valores

» h=1:12 % horário das medições

% valores lidos em graus Celsius

» t=[5 8 9 15 25 29 31 30 22 25 27 24]

» plot(h,t,h,t, '+')

» xlabel('Hora'),ylabel('Graus Celsius')

» t1=interp1(h,t,9.3)

» t2=interp1(h,t,[3.2 6.5 7.1 11.7])

» t1 =22.9000

» 30.0000

t2 =10.2000

30.9000 24.9000

»[a,b]=ginput(1)

% seleciona um ponto da curva

12.2.2.INTERPOLAÇÃO CÚBICA

Em vez de pressupor que uma linha reta conecta os pontos de dados, podemos considerar que alguma curva suave se ajusta a eles. A suposição mais comum é a de que um polinômio de terceira

ordem, isto é, um polinômio cúbico, seja usado para modelar cada segmento entre pontos consecutivos

e que a inclinação de cada polinômio cúbico se ajuste nos pontos dados. Este tipo de interpolação é chamado de splines cúbicas ou apenas splines.

A função interp1 possui algumas restrições: não se pode pedir resultados fora da variável

independente; a variável independente tem que ser monotônica (crescente ou decrescente).

» h=1:12 » t=[5 8 9 15 25 29 31 30 22 25 27 24]
» h=1:12
» t=[5 8 9 15 25 29 31 30 22 25 27 24]
» hh=1:0.1:12
» tt=interp1(h,t,hh,'spline')
» plot(h,t,h,t, '+',hh,tt)
xlabel('Hora'),ylabel('Graus
Celsius'),title('Temperatura')
»
» t1=interp1(h,t,9.3,'spline')
t1 =21.8577
» t2=interp1(h,t,[3.2 6.5 7.1 11.7],’spline’)
t2 =9.6734
30.0427
31.1755
25.3820

12.2.3.INTERPOLAÇÃO BIDIMENSIONAL

A interpolação bidimensional interpola funções de duas variáveis, z=f(x,y). Utilize a função

interp2.

12.3.HELP DE GRÁFICOS

Para conhecer mais sobre funções de interpolação consulte Help polyfun.

13.PROGRAMAÇÃO

Os programas podem ser redigidos no editor de texto e salvos como um arquivo.m. Para executar

o programa basta digitar o seu nome área de trabalho do Matlab. Se necessário, mude o diretório da

área de trabalho para a pasta onde está armazenado o programa. A área de trabalho padrão utiliza a

pasta Work, do Maltab.

% Programa apresentacao.m clear clc

disp 'Execução de programas no Matlab'

disp( '

disp 'Conversão de graus para radianos' x=input('Digite o valor de x em graus: ')

disp 'Valor de x em radianos '

x=x*pi/180

')

» apresentacao

As linguagens de programação de computadores apresentam características que permitem o controle de fluxo de execução de comando, com base em estruturas de tomada de decisões. O controle de fluxo é um recurso poderoso, pois permite que cálculos feitos anteriormente influenciem operações futuras. Como estas estruturas freqüentemente envolvem diversos comandos Matlab, elas em geral aparecem em arquivos M, em vez de serem introduzidas diretamente no prompt do Matlab.

13.1.LOOPS FOR

Os loops for (repetição determinística)

possibilitam que uma série de comandos seja repetida

por um número de vezes fixo e predefinido. A forma geral do loop for é

for x= xi:xp:xf Comandos end

Um loop for não pode ser terminado reatribuindo-lhe a variável de loop dentro do loop for

Qualquer conjunto válido Matlab é aceitável no loop for.

%% programa loopfor_1.m for n=1:1:10

x(n)=sin(n*pi/10);

end

%% programa loopfor_1.m for n=1:1:10

x(n)=sin(n*pi/10);

n=10 % não causará nenhum efeito end

%%%%%%% programa loopfor_2.m dados=[ 3 9 45 6; 7 16 -1 5]; for n=dados

x=n(1)-n(2)

end

13.2.LOOPS WHILE

Ao contrário do loop for, que executa um grupo de comandos um número fixo de vezes, o loop while executa um grupo de comandos um número indefinido de vezes. Forma geral do loop while:

while expressão

Comandos

end

Os comandos entre as instruções while e end são executados enquanto todos os elementos em expressão forem verdadeiros.

%%%%%%% programa loopwhile_1.m

num=0;eps=1;

while (1+eps)>1

eps=eps/2;

num=num+1;

end

13.3.IF-ELSE-END

Em diversas situações, as seqüências de comandos têm de ser executadas condicionalmente, com base em um teste relacional.

if condição

if condição Comandos_v else

if condição_1

%%% programa ifthen_1.m idade=input('Digite a idade: ') if idade<=14 disp ('Criança')

Comandos

comandos_1

end

Comandos_f

elseif condicao_2

 

end

comandos_2

 

elseif condicao_3

elseif idade>14 & idade<=18 disp ('Adolescente')

 
 

comandos_3

else if

elseif idade>18 & idade<=60 disp ('Adulto')

else

else

Comandos

disp('Idoso')

end

end

13.4.FUNÇÕES DE ARQUIVO M

Quando utilizamos funções do Matlab como inv, abs, angle e sqrt, o Matlab toma as variáveis que foram definidas, calcula os resultados desejados usando sua entrada e depois devolve os resultados. Os comandos executados pela função, assim como quaisquer variáveis intermediárias criadas por esses comandos, encontram- se ocultos. Apenas os dados de entrada e saída são disponíveis. Essas propriedades fazem das funções ferramentas muito poderosas para executar comandos que incluem dentro deles funções matemáticas úteis ou seqüências de comandos que apareçam freqüentemente quando algum problema de maior porte estiver sendo resolvido. Devido à deste recurso, o MATLAB apresenta uma estrutura que lhe permite criar suas próprias funções na forma de arquivos M armazenados em seu computador. Um arquivo M de função é semelhante a um arquivo de instrução, pois se trata também de um arquivo-texto com extensão.m. Assim como no caso dos arquivos M de instrução, os arquivos M de função não são introduzidos a partir da janela de comandos, mas sim de arquivos textos externos criados com um editor de texto. A primeira linha de uma função M define o arquivo M como uma função, especifica seu nome e os nomes de suas variáveis de entrada e saída.

function y = fliplr(x)

%FLIPLR Flip matrix in left/right direction. %FLIPLR(X) returns X with row preserved and columns flipped in the left/right direction

% X = 1 2 3

% 4 5 6

becomes 3 2 1

6 5 4

if ndims(x)~=2, error('X must be a 2-D matrix.'); end [m,n] = size(x);

y = x(:,n:-1:1);

13.5.CRIANDO UMA FUNÇÃO

Digite no editor de texto do Matlab a função “operacao” mostrada abaixo. Salve o arquivo como operacao.m no diretório de trabalho. Em seguida faça o teste

function r=operacao(x)

r=x^2+2*x+x^(1/2);

» x=4;

» operacao(x)

ans =

26

function r=operacao2(x,y,z)

r=x^2+2*y+z^(1/2);

» x=3;y=2;z=1;

» operacao2(x,y,z)

14

ans =

19

13.6.HELP DE PROGRAMAÇÃO

Para saber mais sobre instruções de programação consulte Help lang.

14.SIMULINK

Simulink é um software para modelagem, simulação e análise de sistemas dinâmicos. Ele suporta sistemas lineares e não lineares, modelados em tempo contínuo, discreto ou híbrido. Para modelagem, SIMULINK fornece uma interface gráfica para construção de modelos em diagramas de blocos, usando operações de clique-e-arrasta do mouse. O software contém um bloco de biblioteca de fontes, componentes lineares, não lineares e conectores. Depois que o modelo é definido, ele pode ser simulado usando um método de integração a ser escolhido na janela de comandos do Matlab.

14.1.BIBLIOTECA

janela de menus

do Simulink. Crie um novo modelo. Será apresentada uma nova janela em branco (janela de modelo) onde serão inseridos os blocos do modelo.

Após ativar o Simulink na barra de ferramentas do Matlab será apresentada a

14.2.CONSTRUÇÃO DE UM MODELO

Será ilustrado a evolução da função ‘sen(x(t))’, ‘sen(2x(t))’ e ‘| sen(x(t))| ’ .

Na janela de menus selecione Simulink, seguida Sources e depois escolha Signal Generator block. Arraste o bloco para dentro da janela de modelo e escolha a função sin(x) (dê dois cliques do bloco). faça uma cópia deste bloco e escolha a função cos(x). no menu Sinks, repita o procedimento para Scope (osciloscópio), To Workspace (armazenador) o ganho é obtido no menu Math, e o mux no menu Signal & Systems. conecte as entradas e saídas dos blocos, como ilustra a figura. Ajuste os parâmetros na opção Parameters ( tempo inicial, final e método de simulação) do menu Simulation; digite a=3, na tela de trabalho do Matlab. Inicie a simulação selecionando Start no menu Simulation da janela de modelo.

na tela de trabalho do Matlab. Inicie a simulação selecionando Start no menu Simulation da janela
na tela de trabalho do Matlab. Inicie a simulação selecionando Start no menu Simulation da janela

Nesta simulação foram armazenados os valores do sen(x), na variável valores_sin, os valores de sen(x)*3, na variável valores_ganho, os valores de |sen(x)|, na variável valores_abs e os valores do tempo, armazenados na variável tempo. Estas variáveis podem ser utilizadas normalmente no Matlab e todas tem o mesmo número de componentes.

» length(tempo)

ans =

» [tempo(1:5) valores_sin(1:5) valores_ganho(1:5)

valores_abs(1:5)]

61

ans =

0

0

0

0

0.0000

0.0000

0.0000

0.0000

0.0600

0.3681

1.1044

0.3681

0.1200

0.6845

2.0536

0.6845

0.1800

0.9048

2.7145

0.9048

»plot(tempo,valores_sin,'bo',tempo,valores_ganho,'r

+',tempo,valores_abs,'g')

+',tempo,valores_abs,'g') 15.MATEMÁTICA SIMBÓLICA Expressões simbólicas são

15.MATEMÁTICA SIMBÓLICA

Expressões simbólicas são strings de caracteres ou conjuntos de strings de caracteres que representam número, funções, operadores e variáveis. As variáveis não necessitam ter valores predefinidos. Equações simbólicas são expressões simbólicas quem contêm um sinal de igualdade. A aritmética simbólica é a prática de resolução dessas equações por meio da aplicação de regras conhecidas e de identidade a determinados símbolos, exatamente da forma como se resolve em álgebra ou cálculo.

15.1.REPRESENTAÇÃO DE EXPRESSÕES SIMBÓLICAS

As funções simbólicas do MATLAB possibilitam manipular essas expressões de diversas formas:

% derivada de cos(x) em relação a x

% representação implícita

» diff('cos(x)')

ans =-sin(x)

% cria uma matriz simbólica, representação

explícita: uso obrigatório de sym

» M=sym('[a,b;c,d]') M =[ a, b] [ c, d]

% encontra o determinante da matriz simbólica M

» determ(M)

ans =a*d-b*c

%

string de caracteres (não usa sym)

»

M=('[a,b;c,d]')

M

=[a,b;c,d]

15.2.VARIÁVEIS SIMBÓLICAS

Quando se trabalha com expressões simbólicas contendo mais de uma variável, uma variável é a variável independente. Se não for dito ao MATLAB qual variável é a independente, ele seleciona um baseado na regra seguinte:

O caractere padrão escolhido é x. Se não existir x, aquele mais próximo de x, alfabeticamente falando, é escolhido. Se houver empate, o caractere posterior no alfabeto será o escolhido.

Ex: ‘1/(5+cos(x)’)

variável livre: x

‘sin(pi/4)-cos(3/5)’ variável livre: x

‘3*y+z’

variável livre: y

‘a+sin(t)’ variável livre: t

15.2.1.ESPECIFICANDO A VARIÁVEL INDEPENDENTE

% deriva em relação a ‘n’

» diff('x^n','n')

ans = x^n*log(x)

» diff('sin(omega)*a') ans = cos(omega)*a

» diff('sin(omega)*a+t') ans = 1

% deriva em relação a ‘omega’

» diff('sin(omega)*a+t','omega') ans = cos(omega)*a

15.3.OPERAÇÕES ALGÉBRICAS PADRÃO

»f='2*x^2+3*x-5'; »g='x^2-x+1' »symadd(f,g) ans =3*x^2+2*x-4

»symmul(f,g) ans = x^2+4*x-6

»symdiv(f,g) ans =(2*x^2+3*x-5)/(x^2-x+1)

»sympow(f,’3’)

ans =(2*x^2+3*x-5)^3

% expressão simbólica % soma de expressões simbólicas

% multiplicação de expressões simbólicas

% divisão de expressões simbólicas

% encontra a expressão simbólica para f^3

15.3.1.OPERAÇÕES AVANÇADAS

» f='cos(x)'; g='sin(2*x)'; % cria funções simbólicas

» symop(f, '/',g,'+',3)

% combina as duas

ans =cos(x)/sin(2*x)+3

» f=sym('1/(1+x^2)');g=sym('sin(x)'

» h=sym('1/(1+u^2)');k=sym('sin(v)');

% encontra a expressão para f(g(x))

» compose(f,g)

ans =1/(1+sin(x)^2)

%dados h(u), k(v),encontre h(k(v))

» compose(h,k,'u','v')

ans =1/(1+sin(v)^2)

15.3.2.FUNÇÃO INVERSA

A função inv(x) calcula a inversa de x, seja x simbólico ou numérico. O inverso funcional é calculado pela função finverse(x). O inverso funcional, digamos f(x), é a expressão g(x) que satisfaz a condição g(f(x))=x. Por exemplo, o inverso funcional de e x é ln(x), já que ln(e x ) =x. O inverso funcional de sen(x) é arcsen(x). O inverso funcional de (1/tan(x)) é arctan(1/x).

» inv(sym('1/x'))

ans =x

» finverse(sym('1/x')) % o inverso de 1/x é 1/x

ans =1/x

» finverse(sym('x^2'))

% já que ‘1/(1/x) =x’

Warning: finverse(x^2) is not unique. ans = x^(1/2)

» finverse(sym('a*x+b')) % solução para

‘g(f(x))=x’

ans =-(b-x)/a

» t=sym('a*b+c*d-a*z') t =a*b+c*d-a*z

» finverse(t,'a')

ans =-(c*d-a)/(b-z) % solução para ‘g(f(a))=a’

15.3.3.SOMATÓRIA DE SÉRIES

x1

0

x

2

» f=sym('x^2');

» symsum(f) ans = 1/3*x^3-1/2*x^2+1/6*x

» f=sym('(2*n-1)^2');

» symsum(f,1,'n')

ans = 11/3*n+8/3-4*(n+1)^2+4/3*(n+1)^3

» factor(ans) %muda a forma da resposta ans =1/3*n*(2*n-1)*(2*n+1)

15.4. FUNÇÕES DE CONVERSÃO

Serão apresentadas algumas funções que convertem expressões simbólicas em valores numéricos e vice-versa. Algumas funções simbólicas automaticamente convertem um número em sua representação simbólica caso ele seja um dos argumentos da função.

15.4.1.FUNÇÃO NUMERIC

A função sym pode receber um argumento numérico e converte em uma representação simbólica. A função numeric faz o contrário. Ele converte uma constante simbólica (expressão simbólica sem variáveis) em um valor numérico.

15.4.2.FUNÇÃO EVAL

Calcula uma string de caracteres. Dessa forma, eval é outra função que pode ser usada para converter uma constante simbólica em um número, ou calcular uma expressão.

» phi=sym('(1+sqrt(5))/2')

 

» f=sym('2*x^2+x^3-3*x+5');

» numeric(phi)

% converte em valor um numérico

» n=sym2poly(f)

% extrai o vetor de coeficientes

ans =

1.6180

n =

1

2

-3

5

» eval(phi)

 

ans =

1.6180

» poly2sym(n)

 

% recria o polinômio em x

» poly2sym(n,'s')

% recria o polinômio em s

ans =2*x^2+x^3-3*x+5

ans =s^3+2*s^2-3*s+5

 

15.4.3.FUNÇÃO POLY2SYM X SYM2POLY

 

A função simbólica sym2poly converte um polinômio simbólico em seu vetor de coeficientes

equivalente no MATLAB. A função poly2sym faz o inverso e possibilita especificar a variável a ser usada na expressão resultante.

15.5.SUBSTITUIÇÃO DE VARIÁVEIS

A função subs permite mudar a variável em uma expressão simbólica. O formato é subs(f,novo,antigo), sendo f uma expressão simbólica e novo e antigo caracteres ou outras expressões simbólicas.

» f='a*x^2+b*x+c';

» subs(f,'s','x')

% substitui ‘x’ por ‘s’ na expressão f

ans =a*s^2+b*s+c

15.6.DERIVAÇÃO

A derivação de uma expressão simbólica usa da função diff em uma dentre quatro formas:

» f='a*x^3+x^2-b*x-x'; % expressão simbólica

» F=sym('[a*x,b*x^2;c*x^3,d*x]');% matriz simbólica

» diff(f)

% deriva em relação ao padrão (x)

» diff(F)

ans =[

% deriva os elementos em relação a x

a,

2*b*x]

ans =3*a*x^2+2*x-b-1

 

[ 3*c*x^2,

d]

diff(f,'a') % deriva f em relação a ‘a’ ans =x^3

»

» M=[(1:8).^2]

 

% cria um vetor

M = 1

4

9

16

25

36

49

64

»

ans =6*a*x+2

diff(f,2)

% deriva f 2 vezes em relação a ‘x’

»

diff(M)

%encontra a diferença entre os elementos

   

ans =

3

5

7

9

11

13

15

»

diff(f,'a',2)

% deriva f 2 vezes em relação a ‘a’

 

ans =0

15.7.INTEGRAÇÃO

A função de integração int(f), onde f é uma expressão simbólica, tenta encontrar outra expressão simbólica F tal que diff(F)=f. A integral ou antiderivada talvez não exista em forma fechada, ou pode existir mas o software não consegue achá-la, ou o software pode achá-la eventualmente, mas não consegue terminar o cálculo por falta de memória ou tempo. Quando o MATLAB não pode encontrar a antiderivada, ele devolve o comando sem ser processado. Como a função de derivada, a função de integração tem mais de uma forma.

» f=sym('sin(s+2*x)');

» int(f)

1/2*cos(s+2*x)

» int(f,'s')

%função simbólica

%integra em relação a x ans =-

%integra em relação a s

ans =-cos(s+2*x)

» int(f,pi/2,pi)

ans =-cos(s)

% integra em relação a x de π/2 a π

» int(f,'s',pi/2,pi) % integra em relação a s de π/2 a π ans =2*cos(x)^2-1-2*sin(x)*cos(x)

» f=sym('[a*x,b*x^2;c*x^3,d*s]');

» int(f)

conjunto

ans =[ 1/2*a*x^2, 1/3*b*x^3]

% integra os elementos de um

[ 1/4*c*x^4,

d*s*x]

15.8.FUNÇÃO SOLVE

Essa função avalia a o string de caracteres simbólicos com apenas uma variável para o valor, no qual a função é definida como igual a zero. A função solve(f), onde f é função de x, calcula x para

f(x)=0.

» solve('(3*x^2+2*x+1)=(5*x+12)')

ans =[ 1/2+1/6*141^(1/2)]

1/6*141^(1/2)]

» numeric(ans)

ans =

[ 1/2-

2.4791

-1.4791

» v=sym('-10*t+20');

» solve(v) %encontrar o valor de t quando v(t)=0

ans =2

15.9.REPRESENTAÇÃO GRÁFICA DE EXPRESSÕES SIMBÓLICAS

A função ezplot traça o gráfico de uma função simbólica dada no domínio –2*π ≤ t2*π e escala o eixo y de forma adequada.

» y=sym('-5*t^2+20*t+30');

» ezplot(y) % cria um gráfico a partir da função

»ezplot(y,[0 6])

% cria o gráfico e limita o eixo

»ezplot(y,[0 6]) % cria o gráfico e limita o eixo 15.10.FORMATAÇÃO E SIMPLIFI CAÇÃO DE EXPRESSÕES

15.10.FORMATAÇÃO E SIMPLIFICAÇÃO DE EXPRESSÕES

Às vezes, o MATLAB retorna uma expressão simbólica que é difícil de ler. Entretanto, há diversas ferramentas disponíveis para ajudar a tornar a expressão mais legível.

15.10.1.FUNÇÃO PRETTY

Tenta exibir uma expressão simbólica de forma semelhante as dos livros de matemática.

» f=taylor(sym('log(x+1)/(x-5)'))

f = -1/5*x+3/50*x^2-41/750*x^3+293/7500*x^4-1207/37500*x^5

» f=taylor(sym('log(x+1)/(x-5)')) f = -1/5*x+3/50*x^2-41/750*x^3+293/7500*x^4-1207/37500*x^5

» g=int(sym('log(x)/exp(x^2)'))

» pretty(g)

» g=int(sym('log(x)/exp(x^2)')) » pretty(g)

As expressões simbólicas podem ser apresentadas em muitas formas equivalentes. Algumas formas podem ser preferíveis a outras em diferentes situações.

%cria uma função

%representa como um produto de polinômios

»

f=sym('(x^2-1)*(x-2)*(x-3)')

»

factor(ans)

f =(x^2-1)*(x-2)*(x-3)

ans =(x-1)*(x-2)*(x-3)*(x+1)

%reúne todos os termos semelhantes

»

expand(f)

% distribui o produto nas somas

»

collect(f)

ans =x^4-5*x^3+5*x^2+5*x-6

ans = x^4-5*x^3+5*x^2+5*x-6

%muda para a representação aninhada

»

horner(ans)

15.10.2.FUNÇÃO SIMPLIFY

 

ans =-6+(5+(5+(-5+x)*x)*x)*x

 

É uma ferramenta poderosa, de utilização geral, que tenta simplificar uma expressão pela

aplicação de muitos tipos diferentes de identidades algébricas envolvendo somas, potências inteiras e fracionárias, funções trigonométricas, exponenciais, logarítmicas, funções de Bessel, hipergeométricas e gama.

15.10.3. FUNÇÃO SIMPLE

É uma das mais poderosas, mas a menos ortodoxa de todas as ferramentas de simplificação. A função simple tenta usar várias ferramentas diferentes de simplificação e seleciona a forma que tem o menor número de caracteres na expressão resultante. Algumas vezes é útil usar simple mais de uma vez, a fim de tentar uma operação de simplificação diferente ao da primeira.

» simplify(sym('log(2*x/y)'))

ans =log(2)+log(x/y)

» simplify(sym('sin(x)^2+3*x+cos(x)^2-5'))

ans =-4+3*x

» f=sym('(1/x^3+6/x^2+12/x+8)^(1/3)');

» simple(f)

% serão apresentadas algumas

ans = (2*x+1)/x %passagens antes do resultado

» simple(ans)

ans =2+1/x

15.11.FRAÇÕES PARCIAIS

As funções simbólicas do MATLAB podem ser usadas para converter uma expressão simbólica em sua representação fracionária parcial. Dado um polinômio racional f, int(f) integrará a função e geralmente separará os termos. Então, diff(ans) derivará cada termo a fim de obter a expressão original f na forma de uma soma de termos, que é a representação de função em frações parciais.

»

y=sym('(10*s^2+40*s+30)/(s^2+6*s+8)');

» g='(x^3+5)/(x^2-1)';

% encontra a representação fracionária de y

» diff(int(g))

»

diff(int(y))

ans = x+3/(x-1)-2/(1+x)

ans =10-15/(s+4)-5/(s+2)

» pretty(ans)

3

2

»

pretty(ans)

x + ----- - -----

x - 1 1 + x

x - 1

1 + x

15.12.LATEX E FORTRAN

O comando latex é útil para quem usa o programa LaTeX para processamento de texto ou

editoração eletrônica. Esse comando retorna o código LaTeX necessário para criar a expressão que você fornecer e pode ainda armazenar o código LaTeX em um arquivo. O comando fortran produz o

código da linguagem de programação FORTRAN.

» f = taylor(sym('log(1+x)') );

» latex(f) % produz o código LaTeX da função

ans =x-1/2\,{x}^{2}+1/3\,{x}^{3}-1/4\,{x}^{4}+1/5\,{x}^{5}

25

% produz o código fortran da expressão simbólica f » fortran(f)

ans =

t0 = x-x**2/2+x**3/3-x**4/4+x**5/5

15.13.INSTRUÇÃO DIGITS

O Matlab se baseia exclusivamente na aritmética de ponto flutuante do computador para o

processamento dos números. Embora sejam rápidas, as operações de ponto flutuante são limitadas pelo

número máximo de dígitos e podem introduzir erros de arredondamento em cada operação; elas não podem produzir resultados exatos.

A precisão relativa das operações aritméticas individuais em Matlab é cerca de 16 dígitos de

precisão a menos que se redefina o número de dígitos (n) pela instrução digits(n). A conseqüência do

aumento do número de dígitos é o aumento do tempo total de processamento, embora a visualização dos resultados não seja alterada. A instrução vpa permite visualizar os dados na precisão desejada.

» format long

» pi

ans =

» digits

3.14159265358979

Digits = 16

» vpa('pi')

% precisão digits

(16)

ans =3.141592653589793

» digits(20)

» vpa('pi')

% precisão digits (20)

ans =3.1415926535897932385

» vpa('pi',30)

% apresenta o resultado com 30 dígitos

ans =3.14159265358979323846264338328

» A=sym('[1/4,log(sqrt(2));exp(1),3/7]');

» vpa(A,8)

ans = [ .250000000000000000, .346573590279972655]

[ 2.71828182845904524, .428571428571428571]

15.14.RESOLUÇÃO DE EQUAÇÕES

O Matlab permite resolver equações simbólicas usando-se ferramentas simbólicas. Se a expressão não for uma equação (não contiver um sinal de igualdade), a função solve define a expressão simbólica como sendo igual a zero antes de resolvê-la.

» solve('a*x^2+b*x+c')

ans =[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))] [ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

» solve('a*x^2+b*x+c', 'b') % resolve para b ans =-(a*x^2+c)/x

» f=solve('cos(x)=sin(x)') f =1/4*pi

% raízes da equação

» e1='d+(c+u)/2=v'; e2='u=c+d+v-10';

» e3='v+d=u+c/4'; e4='v+u=c+8*d-1';

» [x1,x2,x3,x4]=solve(e1,e2,e3,e4,'u,c,d,v')

x1 =8

x2 =3

x3 =16

x4 =15

15.15.EQUAÇÕES DIFERENCIAIS

A função dsolve encontra soluções simbólicas para equações diferenciais ordinárias. A sintaxe

de dsolve é um pouco diferente da maioria das outras funções. As equações são definidas usando-se a letra D para significar derivação e D2 e D3 etc. para significar derivações repetidas. Quaisquer letras após D maiúsculo são consideradas variável dependente. A equação d 2 y/dx=0 é representada pela expressão simbólica D2y=0. A variável independente pode ser especificada ou então será tomada pelo padrão seguindo-se a regra do symvar.

» dsolve('Dy=1+y^2')

ans = tan(t+C1)

% encontra a solução geral para

% C1 é uma constante de integração

dy / dt =1+y 2

» y=dsolve('Dy=1+y^2','y(0)=1') % adiciona uma condição incial y =tan(t+1/4*pi)

» dsolve('Dy=1+y^2','y(0)=1','v')

ans =tan(v+1/4*pi)

% especifica a variável independente dy / dv

15.15.1.EQUAÇÕES DIFERENCIAIS DE SEGUNDA ORDEM

Considere a equação de segunda ordem

d

2

y

=

cos(2t)

dy

(0)

=

0,

y(0)

=

2

   

y,

dt

 

dt

 

» y=dsolve('D2y=cos(2*t)-y','Dy(0)=0','y(0)=1')

y

=(1/2*sin(t)+1/6*sin(3*t))*sin(t)+(1/6*cos(3*t)-1/2*cos(t))*cos(t)+4/3*cos(t)

»

y=simple(y)

y

=-1/3*cos(2*t)+4/3*cos(t)

Considere a equação de segunda ordem