Aula 4
19/Set - Números aleatórios; Endereçamento de vetores e matrizes
|
- Outros comandos relacionados a plotagem:
- Comando figure
- Comando subplot
- Comando close all para fechar todas figuras
- Comando randi para valores inteiros uniformemente distribuídos
- Comando rand para valores uniformemente distribuídos
- Comando randn para valores normalmente distribuídos
- Comando hist e histogram para cálculo/visualização do histograma
- Endereçamento de vetores e matrizes
-
- Palavra-chave end
- Indexação/submatrizes do lado esquerdo vs do lado direito
- Exclusão de linha ou coluna
- 1. Crie uma matriz A de tamanho 15 x 15 de inteiros.
- a) Extraia o elemento da segunda linha e quarta coluna de A, armazenando na variável u
- b) Crie um vetor v formado pelos elementos da segunda coluna de A
- c) Crie um vetor w formado pelos elementos da última linha de A
- d) Crie uma matriz B formada pelos elementos da segunda até a décima coluna de A
- e) Crie uma matriz C formada pelos elementos da quinta até a penúltima linha de A
- f) Crie uma matriz D formada pelos elementos da sétima até a penúltima linha e das 3 últimas colunas de A
- g) Crie uma matriz E formada pelas linhas pares e colunas múltiplas de 3 de A
- h) Crie uma matriz F formada pelas linhas 1 a 7 e mais a 13 e pelas colunas 4, 5 e 1 de A
- 2. Assuma que a matriz C seja definida como abaixo e determine o conteúdo das seguintes submatrizes. Descubra a saída dos comandos antes de executá-los.
- a) C(2, :)
- b) C(:, end)
- c) C(1:2, 2:end)
- d) C(6)
- e) C(4:end)
- f) C(1:2, 2:4)
- g) C([1 3], 2)
- h) C([2 2], [3 3])
- 3. Determine a saída no command window após a execução dos comandos abaixo. Descubra a saída dos comandos antes de executá-los.
- A = [1 2 3; 4 5 6; 7 8 9]
- A([3 1], :) = A([1 3], :)
- A([1 3], :) = A([2 2], :)
- A = A(:, [2 2])
- 4. Determine o conteúdo da matriz A após a execução das seguintes declarações. Descubra a saída dos comandos antes de executá-los.
- a) A = eye(3,3);
- b = [1 2 3];
- A(2, :) = b;
- b) A = eye(3,3);
- b = [4 5 6];
- A(:, 3) = b';
- c) A = eye(3,3);
- b = [7 8 9];
- A(3, :) = b([3 1 2]);
|
Aula 5
21/Set - Aula de exercícios
|
- 1. A tabela a seguir mostra o salário por hora, as horas de trabalho e a produção (número de dispositivos produzidos) em uma semana para cinco fabricantes de dispositivos.
|
Trabalhador 1
|
Trabalhador 2
|
Trabalhador 3
|
Trabalhador 4
|
Trabalhador 5
|
Salário por hora ($) |
5,00 |
5,50 |
6,50 |
6,00 |
6,25
|
Horas de trabalho (h) |
40 |
43 |
37 |
50 |
45
|
Produção (dispositivos) |
1000 |
1100 |
1000 |
1200 |
1100
|
- Utilize o MATLAB para responder essas questões:
- a) Quanto cada trabalhador recebeu na semana?
- b) Qual foi o salário total pago?
- c) Quantos dispositivos foram fabricados?
- d) Qual é o custo médio para se produzir um dispositivo?
- e) Quantas horas são necessárias, em média, para se produzir um dispositivo?
- f) Assumindo que a produção de cada trabalhador tenha a mesma qualidade, qual trabalhador é o mais eficiente? Qual é o menos eficiente?
- 2. A aproximação de Bhaskara I para a função seno em graus é dada por:
- Crie uma figura contendo 3 plots:
- A função seno original
- A aproximação de Bhaskara I
- O erro da aproximação
- 3. Se uma bola estacionária é lançada da altura acima da superfície da terra, com velocidade vertical , a posição e a velocidade da bola como função no tempo serão dadas pelas equações
- onde g é a aceleração da gravidade (-9,81 m/s²). Escreva um programa de MATLAB que desenhe a altura e a velocidade como função do tempo. Faça com que e sejam parâmetros da script. Não deixe de incluir as legendas apropriadas.
- 4. Joãozinho depositou num fundo de investimento com taxa de juros ao mês. Faça um gráfico do saldo do investimento. Em quanto tempo o valor depositado será dobrado? Dica: (link)
- 1. Plote um círculo com raio 2 e centrado no ponto (4,3). Dica: use equações paramétricas.
- 2. Repita o Exercício 6 da Aula 3 (Fourier) para um número de termos genérico.
- 3. Plote o símbolo do Batman (para quem tem dúvida, link).
|
Aula 6
26/Set - Concatenação de matrizes; Polinômios; Conjuntos; Texto; Entrada e saída de dados
|
- Concatenação de vetores e matrizes
- Comandos repmat e reshape
- Comandos sort, unique
- Comandos union (), intersect (), setdiff (), setxor (diferença simétrica)
- 1. Mostre todos os inteiros positivos múltiplos de 3 ou 5 menores que 100
- 2. Mostre todos os inteiros positivos múltiplos de 3 e 5 menores que 200
- 3. Mostre todos os inteiros positivos múltiplos de 3 ou 5 mas não de ambos menores que 125
- Representação de polinômios a partir de vetores
- Comandos polyval, poly e roots
- Comandos conv e deconv para multiplicação e divisão de polinômios
- Comandos polyder e polyint para derivada e integral de polinômios
- Trabalhando com texto (string)
- Comando input para entrada de dados
- Comando disp para saída de dados
- Comandos num2str e str2num
- Entrada de dados sem a tecla ENTER
- 1. Criar uma calculadora de IMC com perguntas (input) para massa e altura. Use o disp para exibir o resultado de forma agradável ao usuário.
|
Aula 7
28/Set - Variáveis lógicas; Operadores; Controle de fluxo de dados - if
|
- Endereçamento lógico de vetores e matrizes
Operador
|
Significado
|
< |
Menor que
|
<= |
Menor ou igual a
|
> |
Maior que
|
>= |
Maior ou igual a
|
== |
Igual a
|
~= |
Não é igual a
|
- Operadores lógicos (vetores):
Operador
|
Nome
|
& |
AND
|
ǀ |
OR
|
~ |
NOT
|
xor(a,b) |
XOR
|
- Operadores lógicos curto-circuito:
Operador
|
Nome
|
&& |
AND
|
ǀǀ |
OR
|
-
- Comandos strcmp e strcmpi
- 1. Sejam x = [1 7 5 3 8 2] e y = [1 8 2 3 9 1]. Encontre os resultados dos seguintes comandos antes de executá-los:
- a) z = x < 6
- b) z = x <= y
- c) z = x == y
- d) z = x ~= y
- 2. A tabela abaixo mostra as temperaturas diárias (em Celsius) em três cidades diferentes.
Cidade \ Temperatura
|
Dia 1
|
Dia 2
|
Dia 3
|
Dia 4
|
Dia 5
|
Dia 6
|
Dia 7
|
Palhoça |
10 |
13 |
6 |
5 |
-1 |
10 |
4
|
São José |
19 |
13 |
3 |
5 |
1 |
22 |
14
|
Biguaçu |
30 |
2 |
3 |
-1 |
10 |
-2 |
40
|
- Determine em quais dias:
- a) A temperatura na Palhoça é maior que 8 °C.
- b) A temperatura em São José se encontra entre 1 °C e 15 °C (incluindo ambos os extremos).
- c) Fez mais frio na Palhoça que em São José.
- d) Biguaçu foi a cidade mais quente de todas.
- 3. A altura e a velocidade de um projétil lançado com uma velocidade e um ângulo com a horizontal são dadas, em funcão do tempo t, por
- respectivamente, em que g é a aceleração da gravidade. O projétil atinge o solo quando , o que ocorre no tempo . Suponha que °, m/s e m/s².
- a) Plote os gráficos da altura e da velocidade do projétil, de até .
- b) Determine os instantes de tempo em que a altura é de no mínimo 15 m.
- c) Determine os instantes de tempo em que a altura é de no mínimo 15 m e, ao mesmo tempo, a velocidade é de no máximo 36 m/s.
- c) Determine os instantes de tempo em que a altura é de no mínimo 15 m ou a velocidade é de no máximo 36 m/s.
- Controle de fluxo de dados:
- As sentenças if, else e elseif
- 1. Crie um código que calcula o valor gasto total (em R$) e o peso total (em kg) da compra de algumas unidades de arroz (5 kg), feijão (1 kg) e café (500 g).
- O usuário deve fornecer quantas unidades quer comprar de cada produto (comando input).
- Os dados devem ser validados: verificar se o usuário forneceu alguma quantidade negativa.
- Condições de compra:
- O preço unitário do arroz é R$15,00. Se comprar 3 ou mais, o preço cai para R$14,00 cada.
- O preço unitário do feijão é R$12,00. Se comprar 4 ou mais, o preço cai para R$11,50 cada.
- O preço unitário do café é R$10,00. Se comprar 3 ou mais, o preço cai para R$9,25 cada.
- 2. Implemente uma calculadora com as quatro operações básicas, recebendo a escolha de operação e números com o comando input. Não se esqueça de implementar proteções para as entradas de dados (divisão por zero, vetores, etc).
|
Aula 8
03/Out - Controle de fluxo de dados - switch; Structs; Cells
|
- Um único valor
- Múltiplos valores
- 1. Reescreva o código da calculadora da aula anterior fazendo o uso da sentença switch
- Criando estruturas com o operador "."
- Criando estruturas com o comando struct
- Comando isfield para identificar se um campo existe ou não
- Comando rmfield para remover campo da estrutura
- 1. Crie um arranjo de estruturas que contenha os os seguintes campos de informação concernentes a pontes rodoviárias em uma cidade: localização da ponte, carga máxima (toneladas), ano de construção, ano agendado para a manutenção.
- a) Insira os dados abaixo na estrutura:
Localização
|
Carga máxima
|
Ano de construção
|
Agendamento para a manutenção
|
Smith St.
|
80
|
1928
|
2011
|
Hope Ave.
|
90
|
1950
|
2013
|
Clark St.
|
85
|
1933
|
2012
|
North Rd.
|
100
|
1960
|
2012
|
- b) Edite o arranjo de estruturas para mudar de 2012 para 2018 o ano agendado para a manutenção da ponte Clark St.
- c) Adicione a seguinte ponte ao arranjo de estruturas:
Localização
|
Carga máxima
|
Ano de construção
|
Agendamento para a manutenção
|
Shore Rd.
|
85
|
1997
|
2014
|
- 2. Crie uma estrutura que contenha todas as informações necessárias para construir um diagrama de um conjunto de dados. No mínimo, a estrutura deve conter os seguintes campos:
- x_data: dado referente ao eixo "x"
- y_data: dado referente ao eixo "y"
- title: título do diagrama
- x_label: rótulo do eixo "x"
- y_label: rótulo do eixo "y"
- x_range: faixa de valores exibidos no eixo "x"
- y_range: faixa de valores exibidos no eixo "y"
- Você pode adicionar outros campos que aumentem seu controle sobre o diagrama final.
- Depois de criar essa estrutura, escreva um programa no MATLAB que use a estrutura para gerar um gráfico. O programa deve aplicar características iniciais inteligentes se alguns campos de dados estiverem faltando.
- Arranjo de células: texto e números
- Comando celldisp e cellplot
- 1. Repita os exercícios anteriores de estruturas usando células
|
Aula 9
05/Out - Estruturas de repetição - for e while
|
- Laços for
- Laços while
- Sentenças break e continue
- 1. Acrescente à calculadora a possibilidade de continuar realizando cálculos até que o usuário solicite a saída digitando 's'.
- 2. Escreva um programa que calcule o fatorial de um número, utilizando for e while.
- 3. Escreva um programa que calcule os n primeiros termos da sequência de Fibonacci, dispondo-os num vetor.
- 4. Considere os códigos abaixo:
Símbolo
|
A
|
B
|
C
|
D
|
E
|
F
|
Código 1
|
000
|
001
|
010
|
011
|
100
|
101
|
Código 2
|
00
|
10
|
11
|
010
|
0110
|
0111
|
- a) Escreva um programa que codifique uma sequência de símbolos, gerando a sequência de bits correspondente. Seu programa deverá funcionar tanto para o código 1 quanto para o código 2. Teste seu programa com a seguinte string: F A D A B A B A C A.
- b) Escreva um programa que decodifique uma string recuperando a sequência de símbolos original. Teste seu programa com a seguinte sequência de bits:
- Código 1: 001000001000101100011100
- Código 2: 10001000011101100100110
- c) Junte os dois códigos anteriores num único programa, onde o usuário seleciona a operação (codificação ou decodificação), o código (1 ou 2), e entra com o dado a ser operado.
- 5. Escreva um programa que implementa o jogo Genius®. O programa deverá gerar uma sequência aleatória de letras e/ou números e exibir um por um na tela, limpando-a em seguida. Após isso, aguardará o usuário entrar com a sequência.
- 6. A série de Fourier é uma representação em série de funções periódicas em termos de senos e cossenos. A representação em série de Fourier da função
- é
- .
- Plote em um mesmo gráfico a função f(x) e sua representação em série g(x), utilizando um número de termos definido pelo usuário.
|
Aula 10
10/Out - Funções; Importação de dados; Solução de sistemas de equações
|
- Funções definidas pelo usuário
- Único retorno
- Múltiplos retornos
- Comando return
- 1. Adapte os Exercícios 2 e 3 da Aula 9 de modo a utilizar funções.
- 2. Escreva uma função que retorna a média aritmética e a média geométrica de dois dados números.
- 3. Escreva uma função que determina o tempo (em anos) necessário para que você acumule pelo menos VF (em dólares) em uma conta bancária se você depositar inicialmente V0 (em dólares) e mais P (em dólares) ao final de cada ano, com um rendimento anual de R%.
- 4. Fazer o plot de um sinal de tensão versus tempo, como da figura, usando os conceitos da aula de hoje.
- Não esquecer de nomear os eixos.
- 5. Escreva uma função que implementa a Cifra de César. A entrada da função deve ser:
- O string a ser codificado/decodificado;
- O deslocamento a ser aplicado em cada letra do string, podendo ser um inteiro positivo (deslocamento para a direita) ou negativo (deslocamento para a esquerda).
- 6. Escreva uma função que retorna todos os números primos menores ou iguais a um dado inteiro n. Utilize o algoritmo do Crivo de Erastótenes.
- Comando uiimport
- Formato do separador decimal (. ou ,)
- Exemplo: usar Celular4g.txt, importar e trabalhar com as funções de matrizes.
- 1. Com o arquivo Add_user.txt (Adições Líquidas de Aparelhos 4G das Operadoras no período), calcular a soma dos anos 2014, 2015 e 2016 (até o momento) por operadora e a soma e a média por período.
- Sistemas de equações lineares
- Encontrando a solução de Ax = b com A\b
|
Aula 11
Aula 12
19/Out - Gráficos em 2D e 3D
|
- Revisão: Comandos plot, stem, bars e stairs
- Comandos semilogx, semilogy e loglog
-
- , onde k é um parâmetro.
- Números complexos e funções abs e angle
- Comando plotyy para plotar gráficos com dois eixos em y.
- Letras gregas nos gráficos:
Letra
|
Representação
|
|
\alpha
|
|
\beta
|
|
\gamma
|
|
\delta
|
|
\epsilon
|
|
\kappa
|
|
\lambda
|
|
\mu
|
|
\nu
|
|
\omega
|
|
\phi
|
|
\pi
|
|
\chi
|
|
\psi
|
|
\rho
|
|
\sigma
|
|
\tau
|
|
\upsilon
|
|
\Sigma
|
|
\Pi
|
|
\Lambda
|
|
\Omega
|
|
\Gamma
|
- 1. Plote em vermelho a função polar
- , de .
- 2. Plote o gráfico da função utilizando todos os quatro tipos de combinações de eixos (linear/logarítmico).
- 3. As seguintes funções descrevem as oscilações em circuitos elétricos e as vibrações de máquinas e estruturas. Sobreponha as plotagens dessas funções no mesmo eixo. Como elas são similares, defina qual é a melhor forma de plotá-las e de rotulá-las para evitar confusão.
-
-
- Comando view
- Rótulo no eixo z: zlabel
-
- Comando meshgrid para criar uma malha 3D
- Comando surf para plot de função de f(x,y)
- Comando shading, com parâmetros flat, faceted e interp
- Comando alternativo mesh
- Exemplo: Símbolo da Itapema FM incompleto:
- [X,Y] = meshgrid(-20:0.5:20);
- R = sqrt(X.^2 + Y.^2) + eps;
- Z = sin(R)./R;
- surf(X,Y,Z)
- Comandos contour, surfc e meshc
Arquivo:FIC Matlab Exercicios plot.pdf
|
Aula 13
24/Out - Toolbox simbólico
|
Básico
- Comandos syms e sym
- Comandos pretty e latex
- Comando subs
- Valores via argumento da função
- Valores retirados do workspace
- Comandos factor, expand, collect e simplify
Cálculo
- Comando diff: Derivada primeira, segunda, terceira, etc.
- Comando int: Integrais indefinidas e definidas
- Interlúdio: comandos assume e assumptions
- Comando taylor: Séries de Taylor
- Comando symsum: Somatórios / séries
- Outros: dsolve, fourier, laplace, partfrac
Solução de equações
Códigos executados em sala
|
Aula 14
26/Out - Interface gráfica
|
Aula
Proposta de Interface gráfica
|
function varargout = Interface(varargin)
% INTERFACE MATLAB code for Interface.fig
% INTERFACE, by itself, creates a new INTERFACE or raises the existing
% singleton*.
%
% H = INTERFACE returns the handle to a new INTERFACE or the handle to
% the existing singleton*.
%
% INTERFACE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in INTERFACE.M with the given input arguments.
%
% INTERFACE('Property','Value',...) creates a new INTERFACE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before Interface_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to Interface_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help Interface
% Last Modified by GUIDE v2.5 19-Apr-2017 19:45:52
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @Interface_OpeningFcn, ...
'gui_OutputFcn', @Interface_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before Interface is made visible.
function Interface_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to Interface (see VARARGIN)
handles.contador = 0;
display(handles.contador)
assignin('base','handles',handles)
% Choose default command line output for Interface
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes Interface wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = Interface_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on button press in btnDesenhar.
function btnDesenhar_Callback(hObject, eventdata, handles)
% hObject handle to btnDesenhar (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%Incrementa o contador
handles.contador = handles.contador + 1;
display(handles.contador)
%handles
%Axis 1
hold(handles.axes1,'off')
amostras = [0:1:1000];
if not(isempty(str2num(get(handles.edtFrequencias,'String'))))
Freq = str2num(get(handles.edtFrequencias,'String'))
onda = 2*pi*Freq*0.001*amostras;
plot(handles.axes1,sin(onda))
grid(handles.axes1,'on')
assignin('base','contador',handles.contador);
assignin('base','hObject',hObject)
% Update handles structure
guidata(hObject, handles);
if (get(handles.rbtCosseno,'Value') == 1)
%Axis 2
plot(handles.axes2,cos(onda))
grid(handles.axes2,'on')
elseif (get(handles.rbtTangente,'Value') == 1)
%Axis 2
plot(handles.axes2,tan(onda))
grid(handles.axes2,'on')
ylim(handles.axes2,[-2,2])
else
errordlg('Selecione uma onda de saída!')
end
end
% --- Executes on button press in rbtCosseno.
function rbtCosseno_Callback(hObject, eventdata, handles)
% hObject handle to rbtCosseno (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of rbtCosseno
set(hObject,'Value',1)
set(handles.rbtTangente,'Value',0)
% --- Executes on button press in rbtTangente.
function rbtTangente_Callback(hObject, eventdata, handles)
% hObject handle to rbtTangente (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hint: get(hObject,'Value') returns toggle state of rbtTangente
set(hObject,'Value',1)
set(handles.rbtCosseno,'Value',0)
function edtFrequencias_Callback(hObject, eventdata, handles)
% hObject handle to edtFrequencias (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edtFrequencias as text
% str2double(get(hObject,'String')) returns contents of edtFrequencias as a double
% --- Executes during object creation, after setting all properties.
function edtFrequencias_CreateFcn(hObject, eventdata, handles)
% hObject handle to edtFrequencias (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
</syntaxhighlight>
|
|
Aula 15
31/Out - Projeto
|
Aula dedicada ao projeto.
|
Aula 16
07/Nov - Projeto
|
Aula dedicada ao projeto.
|
Aula 17
09/Nov - Projeto
|
Aula dedicada ao projeto.
|
Questões da turma
Projetos finais
Ideias
Hachuras em gráficos de barras
Implementar uma função em MATLAB que plote um gráfico de barras com hachuras. O comportamento deve ser semelhante ao comando bar, nativo do MATLAB, mas parâmetros poderão ser acrescentados para controle da trama. Um exemplo de resultado pode ser visto na figura abaixo:
Genius®
Implementar uma versão avançada do jogo Genius® construído na aula 9, adicionando sons, elementos gráficos, etc.
Outros
- relógio analógico
- dtmf
- sudoku
- jogo da velha
- contar moedas
- esteganografia
- batalha naval
|