Escolar Documentos
Profissional Documentos
Cultura Documentos
Fundamentos de Matlab para Engenheiros PDF
Fundamentos de Matlab para Engenheiros PDF
®
MATLAB para
Engenheiros
Fernando Wesley
Recife/PE - 2012
®
FUNDAMENTOS DO MATLAB
PARA ENGENHEIROS
i
UNIVERSIDADE DE PERNAMBUCO
Capítulo 5 – Polinômio 66
5.1 – Polinômios e suas raízes 66
5.1.1 – Raízes de um polinômio 66
5.1.2 – Encontrar polinômio através de raízes 67
5.2 – Multiplicação e divisão de polinômios 68
5.2.1 – Multiplicação polinomial 68
5.2.2 – Divisão polinomial 69
5.3 – Simplificação de polinômios em frações parciais 71
5.4 – Avaliação de valores de polinômios 72
5.5 – Integração e derivação de polinômios 74
5.5.1 – Derivação de polinômios 74
5.5.2 – Integração de polinômios 74
Exercícios de fixação 76
Capítulo 6 – Gráficos 78
6.1 – Gráficos em duas dimensões 78
6.1.1 – Gráficos simples em duas dimensões 78
6.1.2 – Múltiplos gráficos em duas dimensões 81
6.1.3 – Múltiplos gráficos em uma janela 82
6.1.4 – Utilização do comando subplot 84
6.1.5 – Gráficos especializados 85
6.1.5.1 – Barras 85
6.1.5.2 – Gráfico Pizza 87
6.1.5.3 – Área 88
6.2 – Gráficos em três dimensões 89
6.2.1 – Gráficos simples em três dimensões 89
6.2.2 Comando Mesh, Contour e Surf 92
Exercícios de fixação 95
1.1 - Introdução
Para limpá-la se utiliza o comando [>> clear]. Obs: O usuário pode fazer
a limpeza de apenas um dos itens caso da memória temporária, sendo o
comando responsável o clear seguido do nome da variável desejada de
exclusão [ex.: clear b].
O MATLAB contém além das variáveis que são criadas pelo usuário as
variáveis especiais, que são comuns no dia-a-dia do programador, são elas:
O maior valor real que pode ser encontrado no MATLAB® pode ser
encontrado utilizando o comando realmax. Um valor que seja maior do que
esse valor real, será interpretado pela máquina como valor infinito, da mesma
forma será para algum valor abaixo do valor mínimo, realmin. Para o caso do
valor zero, é necessário conhecer sobre a precisão numérica do MATLAB®,
através do comando eps. Qualquer valor abaixo do eps não será reconhecido
caso a operação executada com valores em uma escala superior, e o resultado
para o MATLAB® será considerado como zero.
1.6 Erros
1) Sintaxe
2) Argumentos
3) Interrupção
4) Memória
5) Java Script
>> 2 * 2 + 4
ans =
>> 2 * 2 + 4 / 2
ans =
>> 2 * (4 + 4) / 2
ans =
>> 2 * (4 * 4 – 2) / 2
ans =
14
>> 2 * (4 * (4 – 2)) / 2
ans =
>> 4 ^ 2
ans =
16
>> 4 ^ 2 * 2
ans =
32
>> 2 ^ (3 * 3)
ans =
512
>> 2 / 4
ans =
0.5
>> 2 \ 4
ans =
>> 5.347e2
ans =
534.700
>> 5.347E-2
ans =
0.0535
As operações no MATLAB® são organizadas em uma ordem de
prioridades, que pode ser chamada de hierarquia. A prioridade pode ser visto
de acordo com a tabela 1.1.
ans =
0.56
>> format short
>> var
ans =
0.5556
TRIGONOMÉTRICAS
sin cos tan sec csc cot
sind cosd tand secd cscd cotd
sinh cosh tanh sech csch coth
asin acos atan asec acsc acot
asind acosd atand asecd acscd acotd
asinh acosh atanh asech acsch acoth
EXPONENCIAL
exp log log10 log2 reallog sqrt
ARREDONDAMENTOS
fix floor ceil round mod rem
1.10 – Help
que utilizam o software, sendo considerado como uma das mais completas
interfaces de ajuda na classe dos softwares acadêmicos.
Exercícios de fixação
a = 1, b = 100 e c = 0.01
a) >> A = [1 2 3 4; 2: 2: 10]
b) >> B = sen(0.92)
c) >> C = sin(0,92)
d) >> D = (3 + 5 – 2*cos(pi) – exp(3))/(ln(1))
e) >> Módulo = abs(cos(-22) + 3^4)
>> A = [2 4 6]
A =
2 4 6
>> A = [2;4;6]
A =
2
4
6
A =
1 2 3
4 5 6
7 8 9
>> I = eye(5)
I =
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
>> Z = zeros(3,2)
Z =
0 0
0 0
0 0
>> U = ones(2,3)
U =
1 1 1
1 1 1
>> W = rand(2,3)
W =
>> A = 10:1:20
A =
10 11 12 13 14 15 16 17 18 19 20
>> A = 10:2:20
A =
10 12 14 16 18 20
A =
1 2 3 4 5
2 4 6 8 10
Sejam as matrizes
>> A + B
??? Error using ==> plus
Matrix dimensions must agree.
>> B + C
ans =
5 5 4
-3 7 9
>> B * C
??? Error using ==> mtimes
Inner matrix dimensions must agree.
>> A * B
ans =
-8 11 10
-20 29 22
-32 47 34
>> D = [1 2; 3 4]
D =
1 2
3 4
>> E = [5 6; 7 8]
E =
5 6
7 8
>> D * E
ans =
19 22
43 50
É diferente de
>> D .* E
ans =
5 12
21 32
>> D / E
ans =
3.0000 -2.0000
2.0000 -1.0000
É diferente de
>> D ./ E
ans =
0.2000 0.3333
0.4286 0.5000
>> D ^ 2
ans =
7 10
15 22
É diferente de
>> D .^ 2
ans =
1 4
9 16
ans =
1 10 100
2 20 200
3 30 300
>> G = F’
ans =
1 2 3
10 20 30
100 200 300
Escreva a matriz:
>> A(1)
ans =
>> A(3)
ans =
-2
>> A(5)
ans =
>> A(7)
ans =
-1
>> A(8)
ans =
>> A(1,2)
ans =
>> A(3,1)
ans =
-2
>> A(2,2)
ans =
>> A(3,3)
ans =
-1
>> A(:,3)
ans =
-1
-1
>> A(2,:)
ans =
1 0 6
>> A(1:2,1:3)
ans =
3 4 -1
1 0 6
>> A(7) = 0
A =
3 4 0
1 0 6
-2 9 -1
>> A(9) = 0
A =
3 4 0
1 0 6
-2 9 0
A =
3 4 -1
1 0 6
-2 9 -1
ans =
>> size(A)
ans =
3 3
>> ndims(A)
ans =
>> length(A)
ans =
>> diag(A)
ans =
-1
>> triu(A)
ans =
3 4 -1
0 0 6
0 0 -1
>> tril(A)
ans =
3 0 0
1 0 0
-2 9 -1
>> C = 2 - 3i
C =
2.0000e+000 -3.0000e+000i
>> D = 3 - 4j
D =
3.0000e+000 -4.0000e+000i
>> E = C + D
E =
5.0000e+000 -7.0000e+000i
>> F = C*D
F =
-6.0000e+000 -1.7000e+001i
>> G = C/D
G =
7.2000e-001 -4.0000e-002i
A =
>> B = [1 -3 2] +i*[-2 -4 1]
B =
>> C = A + B
C =
>> D = A.*B
D =
Mais funções:
EXERCÍCIO APLICADO
Um grande forno industrial é suportado, em sua base, por três longas
colunas de concreto refratário, com 1 m por 1 m de lado, cada. Durante a
operação em condições de regime estacionário, a instalação é de tal forma que
três superfícies de cada coluna são mantidas a 500 K, enquanto a outra(inferior)
é exposta a uma corrente de ar para a qual T∞ = 300 K e h = 10 W/m2K. Uma
passagem abaixo de cada coluna garante que as mesmas sejam periodicamente
vistoriadas por técnicos. Utilizando uma rede de malha com Δx = Δy = 0,25 m,
determine se as passagens oferecem risco de queimadura aos técnicos.
(Transferência de calor e massa – Peter Incropera & De Witt, 5ed. LTC)
Considerações:
1. Regime estacionário.
2. Condução bidimensional.
3. Propriedades constantes.
4. Sem geração interna de calor.
internos não-simétricos:
Nó 1: T2 + T3 + 1000 – 4T1 = 0
Nó 3: T1 + T4 + T5 + 500 – 4T3 = 0
Nó 5: T3 + T6 + T7 + 500 – 4T5 = 0
internos simétricos:
Nó 2: 2T1 + T4 + 500 – 4T2 = 0
Nó 4: T2 + 2T3 + T6 – 4T4 = 0
Nó 6: T4+ 2T5 + T8 – 4T6 = 0
A =
-4 1 1 0 0 0 0 0
2 -4 0 1 0 0 0 0
1 0 -4 1 1 0 0 0
0 1 2 -4 0 1 0 0
0 0 1 0 -4 1 1 0
0 0 0 1 2 -4 0 1
0 0 0 0 2 0 -9 1
0 0 0 0 0 2 2 -9
>> C = [-1000;-500;-500;0;-500;0;-2000;-1500]
C =
-1000
-500
-500
0
-500
0
-2000
-1500
>> T = inv(A)*C
T =
489.3047
485.1538
472.0651
462.0058
436.9498
418.7393
356.9946
339.0520
Porém, observe que a saída, neste caso uma matriz, não nos dá uma ideia
imediata do comportamento do sistema, além de ser mal visualizável. A fim de
dar um caráter mais profissional aos resultados é sugerido que os dados sejam
interpretados graficamente. Neste caso, como se trata de um mapeamento
bidimensional de uma grandeza física, podemos interpretá-los usando o
mapeamento de grandeza por escala de espectro visível.
Final =
>> imagesc(Final)
>> colorbar
>> grid
Exercícios de fixação
4. Uma matriz de 3 dimensões pode ser considerada como uma que possui
largura, comprimento e profundidade. Nessa situação, a matriz que
desejamos deve ter 3 linhas, 4 colunas e 2 páginas de „profundidade‟.
6. Crie uma matriz linha cujo valor dos elementos variem de 1 a 100 com
incremento de 2. Visualize-a pelo mapa de cores. No final da linha da
matriz adicione elementos que variem de 100 a 1, na forma decrescente.
Visualize a matriz resultante no mapa de cores.
No editor de texto existe uma tênue linha vertical que divide a tela
aproximadamente pela metade, sendo essa linha o limite de impressão do
MATLAB®. É também recomendado que o usuário não ultrapasse essa linha,
pois em caso de necessitar imprimir o código fonte escrito, provavelmente o
resultado será uma impressão desconfigurada. Caso o usuário tenha um código
extenso, pode utilizar o comando três pontos (...) para indicar ao programa que
o código continua na linha inferior. Os três pontos apresentarão coloração azul.
Assim:
>> x = 3*sin(exp(52.3))+22/(cos(43)*2.44);
if x >= 100
resposta = 'X é maior do que 100'
elseif x < 10
resposta = 'X é menor do que 10'
else
resposta = 'X está entre 10 e 100'
end
EXERCÍCIO APLICADO 1
Problema 3.1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O Script abaixo tem uma sugestão de resolução do problema 3.1 %
% %
% Data de criação: 15 de setembro de 2008. %
% Data da última atualização: 03 de janeiro de 2012. %
% Criado por: Phillipi Rodrigo de Oliveira Souza. %
% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
clear;clc
A = log10(1000);
switch A
case 1
var = „Número 1.„
case 2
var = „Número 2.„
case 3
var = „Número 3.„
otherwise
var = „Número não definido.„
end
EXERCÍCIO APLICADO 2
Problema 3.2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% O Script "Mod2_Prbl2_2" tem a sugestão de solução do Problema 3.2 %
% estrutura de seleção (switch-case-otherwise). %
% %
% Data de criação: 21 de setembro de 2008. %
% Data da última atualização: 03 de janeiro de 2012. %
% Criado por: Phillipi Rodrigo de Oliveira Souza. %
% Atualizado por: Fernando Wesley Cavalcanti de Araújo. %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
switch semsinal
case 1
num_protc_seg = 1378; % nº protc seg a ser gerado
errordlg('Falha de comunicação com Termopar 12.','ERRO')
return
otherwise
num_protc_seg = 1379; % nº protc seg a ser gerado
end
switch sinal
case sinal <= 900
num_protc_seg = 2378; % nº protc seg a ser gerado
warndlg('Temperatura do leito abaixo do permitido.','PERIGO')
case sinal < 1200
num_protc_seg = 2379; % nº protc seg a ser gerado
otherwise
num_protc_seg = 2380; % nº protc seg a ser gerado
warndlg('Temperatura do leito acima do permitido.','PERIGO')
end
for x = 1:15
y = sin(x*pi) + exp(x*2);
end
EXERCÍCIO APLICADO 3
Problema 3.3
clear;clc
% criação da diagonal principal
for i = 1:1:6
for j = 1:1:6
if i == j
A(i,j) = -4;
end
end
end
for i = 7:1:8
for j = 7:1:8
if i == j
A(i,j) = -9;
end
end
end
if i == j-1
A(i,j) = 1;
end
end
end
if i == j-2
A(i,j) = 1;
end
end
end
if i == j+1
A(i,j) = 2;
end
end
end
if i == j+2
A(i,j) = 1;
end
end
end
for i = 7:1:8
for j = 1:1:8
if i == j+2
A(i,j) = 2;
end
end
end
m = 2;
for I = 1:10
for J = 1:10
while I < m
if I == J
A(I,J) = 2;
elseif abs(I-J) == 1
A(I,J) = -1;
else
A(I,J) = 0;
end
I = I + 1;
end
end
end
EXERCÍCIO APLICADO 4
Problema 3.4
𝑓(𝑥𝑖 )
xi+1 = xi -
𝑓′ (𝑥𝑖 )
clear, clc
y1 = inputdlg('digite um número inicial');
y1 = str2double(y1);
erro = 1;
contador = 0;
contador
erro
y1
contador =
erro =
5.2603e-008
y1 =
1.7963e+000
contador =
42
erro =
4.5807e-007
y1 =
1.7963e+000
Exercícios de fixação
Capítulo 4 – Funções
onde:
6430
v =
212
s =
6430
DICA:
ans =
ans =
reconhecidas por qualquer função que explicite sua categoria como global em
seu código.
DICA: como as variáveis globais podem ser reconhecidas por qualquer função,
evite declarar variáveis com nomes de fácil conflito como, “x”, ”m” ou ”i”. Utilize
os comandos whos, clear e isglobal para gerenciar variáveis globais.
EXERCÍCIO APLICADO 1
clc, clear
% Testes 'anti-bug'
temp = str2double(temp);
unidadeinicial = char(unidadeinicial);
unidadefinal = char(unidadefinal);
if a == 0
errordlg('O valor da temperatura não foi reconhecida!!','Atenção!!!');
return
end
if unidadeinicial == 'f'
fahrenheit
end
if unidadeinicial == 'k'
kelvin
end
if unidadefinal == 'c'
resultado = temp;
mostrar = 'a temperatura obtida em celsius é: ';
end
if unidadefinal == 'f'
resultado = temp*1.8 + 32;
mostrar = 'a temperatura obtida em fahrenheit é: ';
end
if unidadefinal == 'k'
resultado = temp + 273;
mostrar = 'a temperatura obtida em kelvin é: ';
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
if unidadefinal == 'c'
resultado = (temp-32)/1.8;
mostrar = 'a temperatura obtida em celsius é: ';
end
if unidadefinal == 'f'
resultado = temp;
mostrar = 'a temperatura obtida em fahrenheit é: ';
end
if unidadefinal == 'k'
resultado = (temp-32)/1.8 + 273;
mostrar = 'a temperatura obtida em kelvin é: ';
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
function kelvin
if unidadefinal == 'c'
resultado = temp - 273;
mostrar = 'a temperatura obtida em celsius é: '
end
if unidadefinal == 'f'
resultado = 1.8*(temp - 273) + 32;
mostrar = 'a temperatura obtida em fahrenheit é: '
end
if unidadefinal == 'k'
resultado = temp;
mostrar = 'a temperatura obtida em kelvin é: '
end
resultado = num2str(resultado);
s = strcat(mostrar, resultado, 'º ', unidadefinal)
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B = dlmread('matriz.txt','-')
B =
1 2 3
4 5 6
7 8 9
Caso não se tenha certeza qual tipo de dados a serem manipulados, use
a função importdata. Essa função recebe qualquer extensão da tabela anterior.
Mas, se ela recebe qualquer extensão então porque utilizar as outras? A função
importdata é uma função genérica e como tal não contém todas as
características de armazenamento que cada uma tem individualmente. Como
ela possui um código de armazenamento padrão, pode ser possível um trabalho
a mais para conseguir extrair o que se deseja.
Para saber quais são as funções que podem ser importadas e exportadas
pelo MATLAB e os comandos necessários para que ocorram tais modificações
digite >> help fileformats.
Exercícios de fixação
2. Escreva uma „function‟ que calcule a área de um trapézio, sendo „a‟ a base
menor, „b‟ a base maior e „h‟ a altura do mesmo.
5. Crie uma função para que o programa indique qual é o maior divisor
comum entre dois números digitados pelo usuário. Utilize comandos
antibugs para evitar inserção de valores incoerentes.
7. Crie uma função que leia três números e os imprima em forma crescente.
Crie uma restrição para que os valores inseridos sejam inteiros entre 1 e
10, e o programa deve imprimir o nome (não o valor) e a ordem dos
valores em apenas uma linha.
Capítulo 5 – Polinômios
>> = g = [2 0 -3 7 0]
f(x) = x² - 7x + 12
>> f = [1 -7 12]
f =
1 -7 12
>> x = roots(f)
x =
>> g = [-1 4 0 8]
66
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
g =
-1 4 0 8
>> x = roots(g)
x =
4.4111e+000
-2.0557e-001 +1.3309e+000i
-2.0557e-001 -1.3309e+000i
Por exemplo, caso o usuário deseje conhecer o polinômio cujas raízes são
x1 = 2 e x2 = -6, deve fazer da seguinte maneira.
>> r = [2 -6]
r =
2 -6
>> x = poly(r)
x =
1 4 -12
67
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
s =
>> r = poly(s)
r =
Columns 1 through 5
Column 6
5.0000e+001
>> A = [1 2; 3 4]
A =
1 2
3 4
>> b = poly(A)
b =
A = 2x + 5 e B = -x + 4
>> a = [2 5]
68
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
a =
2 5
>> b = [-1 4]
b =
-1 4
>> c = conv(a,b)
c =
-2 3 20
>> d = [2 -3 12]
d =
2 -3 12
>> f = [-14 3]
f =
-14 3
>> g = conv(-d,3.5*f)
g =
[r,q] = deconv(a,b)
69
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Para realizar a divisão da função a(x) = 3x² - 3x + 6 pela função b(x) = 3x,
o resultado pode ser visto logo abaixo.
>> a = [3 -3 6]
a =
3 -3 6
>> b = [3]
b =
>> c = deconv(a,b)
c =
1 -1 2
S(x) = x³ + 2x
>> r = [ 1 -4 0 3 0 -2]
r =
1 -4 0 3 0 -2
>> s = [3 0 2 0]
s =
3 0 2 0
w =
k =
Columns 1 through 5
0 0 0 5.6667e+000 4.4444e-001
Column 6
Instrutor: Fernando Wesley
Recife/PE - 2012
70
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
-2.0000e+000
[r,p,k] = residue(A,B)
Onde: r = numeradores
p = denominadores
k = termo livre
>> A = [1 -8 16]
A =
1 -8 16
>> B = [1 -4 2]
B =
1 -4 2
r =
Instrutor: Fernando Wesley
Recife/PE - 2012
71
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
1.2132e-001
-4.1213e+000
p =
3.4142e+000
5.8579e-001
k =
Caso se deseje saber o valor que o polinômio p(x) possui para um certo
valor de x, deve-se definir primeiramente o x, para logo após realizar o cálculo
do polinômio em questão.
>> x = 4
x =
f =
136
72
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
r = polyval(p,x)
x = intervalo desejado
>> x = 2:6
x =
2 3 4 5 6
f =
>> x = 2:6
x =
2 3 4 5 6
>> f = [3 -4 2 0]
f =
3 -4 2 0
>> x = polyval(f,x)
x =
73
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
>> A = [1 3 5 10]
A =
1 3 5 10
>> B = polyder(A)
B =
3 6 5
>> A = [2 5 -4 12 5]
A =
2 5 -4 12 5
>> B = polyint(A)
74
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
B =
Columns 1 through 5
Column 6
C =
Columns 1 through 5
Column 6
4.3000e+000
75
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
Exercícios de fixação
a) A(x) = 4x² - 3x + 5
b) B(x) = x³ - 4x + 2x -12
c) C(x) = x4 – x² - 9
d) D(x) = x4 – 4x³ - 4x²
e) E(x) = x8 – 4x6 + 34x5 - 2.55x³ +32x
R(x) = x³ - x² - 5x + 7
S(x) = -4x² + 7
T(x) = 2x -1
a) A(x) = 2R x T
b) B(x) = R x 0,4T x 0,67S
c) C(x) = S² x 4,5RT
d) D(x) = S/(R x 1,5T)
e) E(x) = (5,6T/R)/(12,8S/T)
76
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 5
77
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 6
Capítulo 6 – Gráficos
Passo Nome
01 Preparação dos dados (leitura e tratamento)
02 Seleção e configuração da posição do gráfico na janela de exibição
03 Chamada da função do gráfico
04 Selecionar coloração das linhas e símbolos
05 Configurar eixos, legendas e título do gráfico
Tabela 6.1 – Passo a passo para construção de gráficos.
Passo 1:
x = -3:0.1:3
y = x.*cos(-x)
Passo 2:
figure('Name','Gráfico','Number','off','Color','c')
Passo 3 e 4:
plot(x,y)
plot(x,y,’bs’)
plot(x,y,’r+’)
Passo 5
grid
legend(‘curva’)
xlabel(‘eixo x’)
ylabel(‘eixo y’)
title(‘grafico x.cos(-x)’)
gtext(‘ponto de inflexão’)
Comando Atribuição
loglog Valor logarítmico de x e y.
semilogx(i) Valor logarítmico de x e linear para y.
impulse Resposta ao impulso.
step Resposta ao degrau.
bode Diagrama de BODE.
polar Gráficos com eixos de coordenadas polares.
nichols Diagrama de Nichols.
nyquist Diagrama de Nyquist.
zpplot Zeros e pólos de funções transferência.
resid Análise de correlações e correlações cruzadas.
sim Simulação de modelos matemáticos.
Tabela 6.3 – Estruturas de exibição gráfica.
>> loglog(x,y)
>> semilogx(x,y)
t = 0:0.1*pi:2*pi
x = sin(t)
plot(t,x)
xlabel('t')
ylabel('seno(t)')
title('seno(t) x t')
t = 0:0.1*pi:2*pi
y = cos(t)
plot(t,y)
xlabel('t')
ylabel('cosseno(t)')
title('cosseno(t) x t')
y= exp(x).*sin(x);
z= exp(x).*cos(x);
m= 0.09*exp(x).*x;
plot(x,y,'r.',x,z,'m^',x,m,'k:')
grid on
legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')
Figura 6.2 – Exibição gráfica do exemplo com vários gráficos em apenas uma janela
y=exp(x).*sin(x);
z=exp(x).*cos(x);
m=0.09*exp(x).*x;
hold on
plot(x,y,'r.')
plot(x,z,'m^')
plot(x,m,'k:')
grid on
legend('exp(x)*sin(x)', 'exp(x)*cos(x)','0.09*exp(x)*x')
t = -2*pi:0.1*pi:2*pi;
x = cos(t)
subplot(2,2,1)
plot(t, x,'r--')
axis([-2*pi 2*pi,-1 1])
title('cos(t)')
grid on
y = sin(t)
subplot(2,2,2)
plot(t, y,'b*')
axis([-2*pi 2*pi,-1 1])
title('sen(t)')
grid on
z = sin(t).*cos(t)
subplot(2,2,3)
plot(t, z, 'g-.')
axis([-2*pi 2*pi,-1 1])
title('sen(t).cos(t)')
grid on
subplot(2,2,4)
plot(sin(t), cos(t),'k+')
axis equal
title('sen(t) x cos(t)')
grid on
Figura 6.3 – Exibição gráfica da figura resultante do exemplo com o comando subplot
6.1.5.1 Barras
subplot(2,1,1)
bar(turma,nota_alunos,'r')
xlabel('Turma')
ylabel('Nota média')
grid on
subplot(2,1,2)
bar(t,x,'c')
xlabel('t')
ylabel('sen(t)')
gtext('engenharia química')
gtext('engenharia civil')
gtext('engenharia mecânica')
gtext('engenharia de produção')
gtext('engenharia naval')
6.1.5.3 Área
x = -3*pi:0.1*pi:3*pi
y = cos(x).*(sin(0.2*x))
subplot(2,1,1)
area(x,y, 'facecolor', 'cyan')
grid on
z = sin(x).*(cos(0.2*x))
subplot(2,1,2)
area(x,z,-0.5, 'facecolor', 'yellow')
axis tight, grid on
t = 0: 0.01*pi:20*pi;
x = sin(t).*log(-0.2*t);
y = cos(t).*log(-0.2*t);
z = t;
plot3(x,y,z);
xlabel('x');
ylabel('y');
zlabel('z');
t = 0: 0.1:14;
x = sin(t).*exp(-0.1*t);
y = cos(t).*exp(-0.1*t);
z = t;
subplot(2,2,1); plot3(x,y,z);
xlabel('x');ylabel('y');zlabel('z');
title('Perspectiva padrão - plot3');
Figura 6.8: Uso do view e subplot para verificar diferentes perspectivas do mesmo gráfico
com uso do plot3.
subplot(3,2,1)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
mesh(z)
title('Mesh')
subplot(3,2,2)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
surf(z)
title('Surf')
subplot(3,2,3)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
meshc(z)
title('Meshc')
subplot(3,2,4)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
surfc(z)
title('Surfc')
subplot(3,2,5)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
contour(z)
title('Contour')
subplot(3,2,6)
[x,y] = meshgrid(-8:0.5:8);
r = sqrt(x.^2 + y.^2);
z = sin(r)./r;
contour3(z)
title('Contour3')
Figura 6.9: Exemplo de mesh, surf, meshc, surfc, contour e contour3 para um gráfico 3D.
Exercícios de fixação
1. Para a função x = sin(t), com -3π < t < 3π, use o comando plot para exibir o
gráfico e associado a ele os seguintes comandos para exibir o eixo.
a) axis off
b) axis on
c) axis square
d) axis tight
e) axis equal
f) axis ([ -pi pi -1 1])
subplot(2,1,2)
fplot('cos(1/x)', [0 1]) %não é necessário colocar ‘cos1./x’
title('utilizando o fplot');
explode = [0 0 0.5 0 0]
porcentagem_de_alunos = [18 22 13 27 20]
grafico_pizza = pie(porcentagem_de_alunos, explode)
% Caso 2D
t = -pi:pi/200:pi
x = sin(cos(tan(t)))-cos(tan(sin(t)))-tan(cos(t).*sin(t));
comet(t,x)
% Caso 3D
t = 0.5*pi:pi/600:5*pi;
x = cos(4*t);
y = sin(5*t);
z = 0.5*t;
comet3(x,y,z)
% Outro caso 3D
t = 0:0.1:100;
x = sin(t).*exp(-t/10);
y= cos(t).*exp(-t/14);
z = t;
comet3(x,y,z);
13. Funções como surf e mesh podem exibir os resultados de função de bessel. Um
exemplo está no código a seguir. Verfique o que ocorre quando se muda o
intervalo do meshgrid, e o termo de soma (0.03).
[x,y] = meshgrid(-5:0.5:5);
f = abs(besselj(0,abs(x)+abs(y))) + 0.03;
surfc(x,y,7*log(f));
7.1 Diferenciação
Como exemplos:
>> syms x
>> y = sin(x)
y = sin(x)
>> r = diff(y)
r = cos(x)
>> syms x
>> diff(2*sin(x)^2)
ans = 4*cos(x)*sin(x)
>> syms x
>> diff((2*sin(x))^2)
ans = 8*cos(x)*sin(x)
>> syms x
>> diff((2*sin(x))^2, 2)
>> syms x t
>> y = t^2*x*sin(x)
y = t^2*x*sin(x)
>> r = diff(y,t)
r = 2*t*x*sin(x)
>> r = diff(y,t,2)
r = 2*x*sin(x)
>> r = diff(y,x,t)
r = 2*t*x*sin(x)
Caso o usuário insira uma expressão que não seja simbólica, o resultado
será fornecido na forma de matriz vazia. Isso ocorrerá mesmo se o valor inserido
for numericamente definido no programa.
>> diff(cos(5))
ans =
[]
Em duas dimensões:
>> syms x y
s =
cos(y)
J =
[ cos(x), 0]
[ 0, -sin(y)]
Em três dimensões:
>> syms r l f
J =
[ sin(l), r*cos(l), 0]
>> syms x;
>> limit(sin(x)/x)
ans =
>> syms x
>> limit(cos(x)/x)
ans =
NaN
>> syms x
>> limit((x-2)/(x^2-4),2)
ans =
1/4
>> syms x
>> limit(1./x,x,0,'right')
ans =
Inf
>> syms x
>> limit(-1./x,x,0,'left')
ans =
-Inf
Caso haja dúvida por parte do leitor a respeito dos valores acima, pode-
se criar um gráfico para mostrar o comportamento da função 1/x.
>> x = -1:0.01:1;
>> y = 1./x;
>> plot(x,y)
>> syms x
v =
ans =
[exp(a), 0, NaN]
>> syms x
>> int(sin(x))
ans =
-cos(x)
>> syms x t
>> int(sin(x*t))
ans =
-cos(t*x)/t
>> syms x t
>> int(sin(x*t),t)
ans =
-cos(t*x)/x
>> syms x n
>> int(x^n,x)
ans =
>> syms x
>> f = x^2
f =
x^2
>> a = 0
a =
>> b = 1
b =
>> int(f,a,b)
ans =
1/3
>> syms x
>> f = log(x)*sqrt(x);
>> a = 0;
>> b = 3;
res =
3^(1/2)*(log(9) - 4/3)
>> syms x
>> f = exp(x)*x^2/7;
>> a = 1;
>> b = pi;
>> s = int(f,a,b)
s =
EXERCÍCIO APLICADO
hold on
Figura 7.3 – Exibição das assíntotas horizontal e vertical da função (3x² + 6x – 1)/(x² + x – 3).
crit_pts = solve(flinha);
resultado da função anterior, que nem sempre (raramente) está na forma mais
organizada possível. Outra função interessante é a pretty, que exibe na janela
de comando de maneira organizada o argumento que foi utilizado nela. É
aconselhado ao usuário testar as funções acima para conhecê-las
individualmente.
pt_inflx = solve(flinha2);
double(pt_inflx)
inflx = (pt_inflx(1));
Capítulo 8 – Simulink
8.1 – Introdução
Após o clique no ícone em questão, será aberta uma janela que pode ser
verificada na figura 8.2, que contém os principais modelos para construção dos
blocos no Simulink. Nela podem ser vistos comandos como a criação de um
novo arquivo, a janela de busca de blocos, a janela de descrição, a biblioteca e o
conjunto de blocos do MATLAB®.
112
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
situações especiais. Quanto aos blocos gerais, será visto uma introdução neste
capítulo.
113
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
No Simulink, alguns blocos podem ser ditos ‘principais’, pois são blocos
básicos é podem ser utilizados em praticamente qualquer ocasião na criação de
qualquer diagrama de blocos. Tais blocos são os seguintes: Somador (Sum),
Ganho (Gain), Constante (Cte), Integrador (Integrator), Derivativo (Derivative),
Bloco Multiplicativo, Bloco de funções e Osciloscópio (Scope).
114
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
115
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
116
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
117
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
118
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
8.3 – Exemplos
119
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Clica-se para abrir o osciloscópio e com ele aberto, clica-se no botão que
é responsável por abrir os parâmetros do osciloscópio. Após isso deve-se alterar
para 2 o valor de eixos aparentes. O diagrama de blocos ficará com a aparência
da figura 8.19. O resultado pode ser verificado clicando sobre o osciloscópio. O
resultado será conforme a figura 8.20.
120
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
121
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
Figura 8.21 – Sistema proposto com função seno adicionado de valor aleatório e dobro da
função cosseno.
122
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
123
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 8
a) x²
b) sen(x) + x³
c) x – 2(x² + 4)
d) x(cos(x)) + x² - 4/x
a) y’ + sen(y) – y
124
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
125
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
126
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
127
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
ATENÇÃO: não altere o código até se informar de como, onde e o que alterar.
1. Objetos de Assimilação;
2. Objetos de Atribuição;
3. Objetos Inertes.
128
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
129
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
O próximo passo será a alocação de uma área que servirá para exibir
inicialmente uma figura e posteriormente para exibição de gráficos. O objeto
que possui tais atribuições é o Axes, ver figura 9.9.
130
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Para alocação desse objeto proceda da mesma forma que o painel. Após
a execução desses passos seu guia de interfaces deverá possuir
aproximadamente a aparência da figura 9.10.
131
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Push Button
Check Button
Pop-up Menu
Obs. (1): o objeto Pop-up Menu precisa ser editado para que o mesmo possa
oferecer opções de escolha ao usuário. Os itens de escolhas podem ser
adicionados na propriedade String no inspetor de propriedades e cada escolha
será representada por um número. Assim, a escolha da linha um atribuirá valor
(Value) 1 ao objeto, a escolha da linha dois valor 2, e assim sucessivamente.
Obs. (2): com objetos de marcação como Check Box será atribuído valor
(Value) 1 quando ativado e 0 quando desativado.
132
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
133
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
134
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Esse botão será responsável pela leitura dos dados no painel de entrada
de dados e pelos cálculos referentes à resolução do problema. Primeiro
precisamos associar tal botão a uma função. Isso é feito na propriedade
CallBack no inspetor de propriedades.
Obs.: O nome inserido na função Callback deve ser idêntico ao da função. Evite
usar caracteres especiais e ponto. Também não use o nome da função como
outro que é conhecido geralmente (ex: for, while, quit), para evitar conflitos
internos.
obj = findobj('Tag','edit1');
tsim = get(obj,'String');
Proceda com esses passos para todos os objetos como mostra o exemplo
a seguir.
function calcular
global s v t
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Importação dos Dados da Interface
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','edit1');
Instrutor: Fernando Wesley
Recife/PE - 2012
135
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
S0 = get(obj,'String');
S0 = str2double(S0);
aux = isnan(S0);
if aux == 1
errordlg('O valor de S0 não foi definido.','Atenção!');
return
end
obj = findobj('Tag','edit2');
V0 = get(obj,'String');
V0 = str2double(V0);
aux = isnan(V0);
if aux == 1
errordlg('O valor de V0 não foi definido.','Atenção!');
return
end
obj = findobj('Tag','edit3');
a = get(obj,'String');
a = str2double(a);
aux = isnan(a);
if aux == 1
errordlg('O valor de a não foi definido.','Atenção!');
return
end
obj = findobj('Tag','edit4');
ti = get(obj,'String');
ti = str2double(ti);
aux = isnan(ti);
if aux == 1
errordlg('O valor de ti não foi definido.','Atenção!');
return
end
obj = findobj('Tag','edit5');
tf = get(obj,'String');
tf = str2double(tf);
aux = isnan(tf);
if aux == 1
errordlg('O valor de tf não foi definido.','Atenção!');
return
end
if tf<=ti
errordlg('O valor de tf deve ser maior do que ti','Atenção!');
return
end
obj = findobj('Tag','edit6');
dt = get(obj,'String');
dt = str2double(dt);
aux = isnan(dt);
if aux == 1
errordlg('O valor de dt não foi definido.','Atenção!');
return
end
136
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
if dt>=(tf-ti)
warndlg('O valor de dt deve ser menor do que o valor do
intervalo','Atenção!');
return
end
if dt <= 0
warndlg('O valor de dt deve ser maior do que zero! ','Atenção!');
return
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Cálculo do Espaço e Tempo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t = ti:dt:tf;
s = S0 + V0*t + (a*t.^2)/2;
v = V0 + a*t;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Exportação dos Dados para Interface
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','edit7');
set(obj,'Enable','on');
s_char = num2str(s(end));
set(obj,'String',s_char);
obj = findobj('Tag','edit8');
set(obj,'Enable','on');
v_char = num2str(v(end));
set(obj,'String',v_char);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Exibição Gráfica
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
obj = findobj('Tag','axes1');
set(obj,'Visible','On');
obj = findobj('Tag','popupmenu1');
popmenu = get(obj,'Value');
if popmenu == 1
warndlg('escolha um gráfico para exibição', 'Atenção')
return
elseif popmenu == 2
cla, gca
plot(t,s,'r')
grid on
title('Perfil de Espaço')
xlabel('Tempo (seg)')
ylabel('Espaço (m)')
return
Instrutor: Fernando Wesley
Recife/PE - 2012
137
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
elseif popmenu == 3
cla, gca
plot(t,v,'b')
grid on
title('Perfil de Velocidade')
xlabel('Tempo (seg)')
ylabel('Velocidade (m/s)')
return
elseif popmenu == 4
cla, gca
plot(t,s,'r--',t,v,'b');
title('Perfil de velocidade em azul, Perfil de Espaço em linha
tracejada');
grid on
xlabel('Tempo (seg)');
ylabel('Velocidade(m/s) e Espaço(m)');
legend('Espaço', 'Velocidade');
end
function limpar
obj = findobj('Tag','edit1');
set(obj,'String','');
obj = findobj('Tag','edit2');
set(obj,'String','');
obj = findobj('Tag','edit3');
set(obj,'String','');
obj = findobj('Tag','edit4');
set(obj,'String','');
obj = findobj('Tag','edit5');
set(obj,'String','');
obj = findobj('Tag','edit6');
set(obj,'String','');
obj = findobj('Tag','edit7');
set(obj,'String','','Enable','off');
obj = findobj('Tag','edit8');
set(obj,'String','','Enable','off');
obj = findobj('Tag','popupmenu1');
set(obj,'Value',1);
logo = imread('LOGO.jpg');
image(logo);
obj = gca;
set(obj,'xtick',[],'ytick',[]);
138
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
139
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Considerações Finais
2. Não crie nada fora dos padrões comerciais, no caso de uso profissional.
140
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
Exercícios de fixação
141
Introdução ao MATLAB®- POLI Júnior Engenharia Capítulo 9
9. Exiba gráficos de uma função que o usuário pode escolher. Para isso
forneça a ele as seguintes opções: seno, cosseno, tangente, logaritmo,
exponencial, x^n e uma constante, na qual o usuário escolhe os
argumentos de cada uma delas. A interface ainda deve receber os limites
e mostrar o gráfico resultante ao usuário.
10. Resolva o exercício de fixação 3.8 de forma que o usuário deva
primeiramente selecionar quantos dados deseja inserir no programa (até
o máximo de 10), aparecendo as caixas de texto para inserir após isso
(utilize o enable on/off e o visible on/off). Após isso mostre em
histograma o resultado.
11. Crie um programa de supermercado em MATLAB. Faça o seguinte: Antes
de iniciar é necessário um login (com senha) para que os espaços de
inserir texto e preço fiquem disponíveis a modificação. Após isso digite o
nome do produto e o preço do mesmo, de forma que após a soma possa
ser realizada e seja criada uma lista através de indexação. Ainda, crie um
botão para encerrar as compras, fornecendo ao usuário a opção de pagar
à vista, parcelado (de várias formas) e em cheque pré-datado. Escolhida a
opção, crie a opção que mostra o valor final. Ainda crie um botão para
apagar todos os dados, e outro para log-off do sistema.
142