Computação e Programação



Documentos relacionados
Tópicos avançados sobre funções (cont.)

Programação em MATLAB

COMPUTAÇÃO E PROGRAMAÇÃO

Sistemas e Sinais. Laboratório 0 (parte c) Miguel Pedro Silva e João Reis

Linguagem de Programação III Aula 2 - Apresentação da Disciplina

Sistemas e Sinais. Laboratório 0 (parte a) (Iniciação ao MATLAB ) Miguel Pedro Silva e João Reis

Notas de Aula MatLab - 2

RESOLUÇÃO. Computação e Programação (2009/2010-1º Semestre) 1º Teste (11/11/2009) Nome. Número. Leia com atenção os pontos que se seguem:

Sistemas e Sinais (LEE & LETI)

Curso Técnico em Redes

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Utilidades Diversas. Aplicações Informáticas para Engenharia. SérgioCruz

Aluísio Eustáquio da Silva

Computação e Programação

INTRODUÇÃO AO MATLAB - PARTE 2

Aula 2P - Comandos básicos do Matlab aplicados a PDS

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Computação e Programação

A pirâmide de Pascal

e à Linguagem de Programação Python

PROGRAMAÇÃO DE MICROPROCESSADORES 2011 / 2012

Descrição de Arquitectura e Design. SyncMasters

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

2 - Modelos em Controlo por Computador

MATLAB. Programação básica

Estrutura de Dados Básica

Mini Curso DESCOMPLICANDO C# Professor Hélio

Flash MX ActionScript

Fluxo Máximo a Custo Mínimo

Computação e Programação

José Romildo Malaquias

Prof Evandro Manara Miletto. parte 2

3ª Lista de Exercícios Representação de dados com agregados: Arrays e Matrizes

Expansão de Imagem #2

Introdução ao Excel. Principais fórmulas de Cálculo

Cell arrays e estruturas: exemplos

1 Introdução ao MatLab

Computação e Programação (2010/2011-1º Semestre)

UNIVERSIDADE FEDERAL DO PARANÁ

Programação de Computadores I BCC Simulado da Segunda Avaliação 17/12/2015 Valor (10,0) Duração: 110 minutos

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

Terceira Avaliação Visualg & Pascal

Árvores Binárias e Busca. Jeane Melo

Comandos de repetição while

Unidade IV: Ponteiros, Referências e Arrays

10) REGISTROS : Exemplos: var N,I: integer; A,B,C: real; CHAVE: boolean; CARAC: char; V: array[1..20] of real; M: array[1..10,1..

Computação e Programação

Cap.2.5: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Instituto Federal do Sertão-PE. Curso de PHP. Professor: Felipe Correia

1 Introdução. 2 Algumas funções úteis para lidar com strings

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

JavaScript (Funções, Eventos e Manipulação de Formulários)

Prof. Dr. Abel Gomes Cap.4: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

2º Laboratório de Sistemas e Sinais (LEIC Alameda 2005/06)

Java. Marcio de Carvalho Victorino

Programação WEB I Estruturas de controle e repetição

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Programação em MATLAB

Teoria da Computação - Programação OCaml Ficha de exercícios

Introdução a PHP (Estruturas de Controle)

Computação e Programação

FUNDAÇÃO EDUCACIONAL DE ITUIUTABA

Lógica de Programação

Aula 02: C# - Estruturas de Decisão

Mini Curso Introdução ao MATLAB

Jogo de Tabuleiro - Mancala Relatório Final

Departamento: Matemática Curso: Eng a Madeiras Ano: 1 o Semestre: 2 o Ano Lectivo: 2006/2007. Aula prática n o 1 - Introdução ao MATLAB

Tutorial de Matlab Francesco Franco

APOSTILA PHP PARTE 1

OPERADORES E ESTRUTURAS DE CONTROLE

MATLAB EM VIBRAÇÕES MECÂNICAS

Análise de complexidade

UNIVERSIDADE GAMA FILHO Laboratório de Controle I - MATLAB

MATLAB. Programação básica. Abordagem topo-base. Início. Definição das. Divisão em Sub-problemas. Divisão em Sub-problemas. Abordagem topo-base

TUTORIAL MATLAB MATEMÁTICA COMPUTACIONAL Aula 20-Novembro-2013

Pesquisa: localização de um Registo num Ficheiro (para aceder ao registo: ler/alterar informação) R. P. António Viera, 23. R. Carlos Seixas, 9, 6º

ESTRUTURAS DE DADOS I. Notas de Aula. Prof. Dr. Gilberto Nakamiti

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Introdução às Redes Neurais Artificiais

Universidade Federal de Minas Gerais Instituto de Ciências Agrárias

Conjunto (set) O tipo estruturado set representa, em Pascal, um conjunto de objectos de um dado tipo;

Para além das funções (comandos) pré-definidas no matlab, o utilizador pode também criar as suas próprias funções

PHP. Hypertext Pre-Processor

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Informática para Ciências e Engenharias 2014/15. Teórica 5

COMPUTAÇÃO e PROGRAMAÇÃO

Javascript 101. Parte 2

COMPUTAÇÃO E PROGRAMAÇÃO

1.a) Qual a diferença entre uma linguagem de programação de alto nível e uma linguagem de programação de baixo nível?

Uso de gnuplot em sessões iterativas

ENG1000 Introdução à Engenharia

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

Introdução à Programação

O Processo de Programação

ARQUITETURA DE COMPUTADORES

Aula Teórica 12. Material Didático Proposto

Árvores Binárias de Busca

Transcrição:

Computação e Programação 11ª Aula de (MATLAB : as instruções if-else, switch, for, while e funções) Miguel Pedro Silva e João Reis Instituto Superior Técnico, Dep. de Engenharia Mecânica - Secção Sistemas, Grupo de Controlo Automação e Robótica

Exercício 1 A função sigmoide é a a função que geralmente define a relação entrada/saída de um neurónio artificial (o elemento constituinte das redes neuronais). A sua expressão é a seguinte: y = 1 / (1+ e -Kx ) Escreva uma função, denominada sigmoide, que recebe um array de valores x, um valor real K, e retorna um array com os valores de y. Teste a função com um script de teste. 2

Exercício 1 (cont.) solução function y = sigmoide(x,k) % A função SIGMOIDE calcula a relação % entrada-saída da função y = 1 / (1+ e^(-k*x)). % % Chamada: y = sigmoide(x,k), em que K é um escalar % e x pode ser um escalar ou um array uni-dimensional [linhas_k, colunas_k] = size(k); [linhas_x, colunas_x] = size(x); if (linhas_x > 1 && colunas_x > 1) error('x tem que se um array uni-dimensional.') elseif ~(linhas_k == 1 && colunas_k == 1) error('k tem que ser um escalar.') y = 1./(1 + exp(-k*x)); 3

Exercício 1 (cont.) script de teste %Este script testa a função SIGMOIDE clc; clear all; close all; disp('este script testa a função SIGMOIDE'); %pede o valor de x e testa o valor x_incorrecto = true; while (x_incorrecto) entrada_x =... input('introduza um escalar ou array uni-dimens. x [e.g.: [-5:0.01:5]]: '); [linhas_entrada_x, colunas_entrada_x] = size(entrada_x); x_incorrecto = (linhas_entrada_x > 1 && colunas_entrada_x > 1); 4

Exercício 1 (cont.) script de teste %pede 3 valores de K e testa os seus valores K_incorrecto = true; while (K_incorrecto) entrada_k_1 = input('introduza um escalar K_1 [e.g.: 1]: '); entrada_k_2 = input('introduza um escalar K_2 [e.g.: 10]: '); entrada_k_3 = input('introduza um escalar K_3 [e.g.: 100]: '); entrada_k = [entrada_k_1, entrada_k_2, entrada_k_3]; [linhas_entrada_k, colunas_entrada_k] = size(entrada_k); K_incorrecto = (linhas_entrada_k ~= 1 colunas_entrada_k ~= 3); figure(100), hold on; for j=1:3, subplot(3,1,j), plot(entrada_x, sigmoide(entrada_x, entrada_k(j))); title(['k_', int2str(j), ' = ', int2str(entrada_k(j))]), grid on; 5

Exercício 2 Escreva uma função, denominada remove_elementos, que receba como argumentos dois arrays (vectores). O primeiro array éo array de onde se prete remover elementos, e o segundo array é constituído pelos índices dos elementos que se pretem retirar. A função deve retornar o array com os elementos removidos, e um outro array com os valores que foram removidos. Teste a função com um script de teste. 6

Exercício 2 (cont.) solução function [arr_mod, elem_remov] = remove_elementos(arr,ind_a_remov) % A função REMOVE_ELEMENTOS recebe dois arrays unidimionais % como parâmetros de entrada. % O primeiro array é o array que se prete remover elementos, % e o segundo array é constituídos pelos índices que se pretem % retirar ao array a manipular. % A função retornar o array com os elementos removidos, e um outro % array com os valores que foram removidos do array manipulado. [linhas_arr, colunas_arr] = size(arr); [linhas_ind_a_remov, colunas_ind_a_remov] = size(ind_a_remov); if (linhas_arr > 1 && colunas_arr > 1) error('o primeiro argumento tem que ser uni-dimensional.'); elseif (linhas_ind_a_remov > 1 && colunas_ind_a_remov > 1) error('o segundo argumento tem que ser uni-dimensional.'); 7

Exercício 2 (cont.) solução elseif (linhas_ind_a_remov == 0 && colunas_ind_a_remov == 0), % se receber um array vazio [] arr_mod = arr; %array mantém-se elem_remov = []; %elementos removidos é um array vazio [] return; elseif (min(ind_a_remov) < 1... max(ind_a_remov) > (max([linhas_arr, colunas_arr]))) error('não é possível remover um, ou mais, dos índices desejados.'); arr_logico = logical(ones(linhas_arr, colunas_arr)); arr_logico(ind_a_remov) = false; arr_mod = arr(arr_logico); elem_remov = arr(ind_a_remov); % coloca um zero lógico nas % posições a remover %remove os elementos %obtem os elementos removidos 8

Exercício 2 (cont.) script de teste %Este script testa a função REMOVE_ELEMENTOS clc; clear all; close all; disp('este script testa a função REMOVE_ELEMENTOS'); %pede o array uni-dimensional a modificar e testa-o array_incorrecto = true; while (array_incorrecto) entrada_array = input('introduza um array uni-dimensional: '); [linhas_entrada_array, colunas_entrada_array] =... size(entrada_array); array_incorrecto = (linhas_entrada_array > 1 &&... colunas_entrada_array > 1); 9

Exercício 2 (cont.) script de teste %pede o array uni-dimensional com os índices a remover e testa-o indices_incorrecto = true; while (indices_incorrecto) entrada_indices =... input('introduza um array com os índices a remover: '); [linhas_entrada_indices, colunas_entrada_indices]=... size(entrada_indices); indices_incorrecto =... (linhas_entrada_indices > 1 && colunas_entrada_indices > 1); [arr_mod, elem_remov] =... remove_elementos(entrada_array, entrada_indices); disp('array original:'); disp(entrada_array); disp('array modificado:'); disp(arr_mod); disp('elementos removidos:'); disp(elem_remov); 10

Exercício 3 Escreva uma função, denominada calcula_polinomio, que receba como argumentos: 1 array (vector), com os coeficientes do polinómio (por ordem decrescente); 1 array (vector), com os pontos para os quais se prete calcular o valor do polinómio; A função deve retornar: 1 array com a avaliação do polinómio nos pontos pretidos. Teste a função com um script. 11

Exercício 3 (cont.) solução function [val_pol] = calcula_polinomio(coef, pontos) % A função CALCULA_POLINOMIO recebe dois arrays unidimionais % como parâmetros de entrada: % um array com os coeficientes do polinómio (por ordem decrescente); % um array com os pontos para os quais que se prete calcular o % valor do polinómio; % A função retorna: % um array com a avaliação do polinómio nos pontos pretidos. [linhas_coef, colunas_coef] = size(coef); [linhas_pontos, colunas_pontos] = size(pontos); if (linhas_coef > 1 && colunas_coef > 1) error('o primeiro argumento tem que ser uni-dimensional.'); elseif (linhas_pontos > 1 && colunas_pontos > 1) error('o segundo argumento tem que ser uni-dimensional.'); elseif (linhas_coef == 0 && colunas_coef == 0) error('o primeiro argumento tem que ser não-vazio.'); 12

Exercício 3 (cont.) solução elseif (linhas_pontos == 0 && colunas_pontos == 0) error('o segundo argumento tem que ser não-vazio.'); if linhas_coef > 1 coef = coef'; % se for um vector coluna transforma em vector linha for k=1:length(pontos) vec_k_aux = [pontos(k)*ones(1,length(coef))]; %vector linha com cada ponto k vec_exp_aux = [length(coef)-1:-1:0]; %vector linha com os exponentes val_pol(k) = sum(coef.*(vec_k_aux.^vec_exp_aux)); 13

Exercício 3 (cont.) script de teste %Este script testa a função CALCULA_POLINOMIO clc; clear all; close all; disp('este script testa a função CALCULA_POLINOMIO'); % pergunta quantos polinómios prete testar valor_incorrecto = true; while (valor_incorrecto) num_pol = input('introduza o número de polinómios a testar [1 a 3]: '); valor_incorrecto = (num_pol > 3 num_pol < 1); % pede um array uni-dimensional com os pontos a calcular pontos = input('introduza um array com os pontos a calcular: '); % pede um array com os coeficientes do polinómio for k=1:num_pol, pol = input('introduza um array com os coefs. do polinómio: '); figure(k); hold on; plot(pontos, calcula_polinomio(pol,pontos)), title(['polinómio ' int2str(k)]), grid on; 14

Exercício 4 A famosa sequência de Fibonacci, foi descrita por Leonardo de Pisa, também conhecido como Fibonacci (1170-1250), para descrever o crescimento de uma população de coelhos. Os números descrevem o número de casais numa população de coelhos depois de n meses, considerando um conjunto pressupostos. (ver: http://pt.wikipedia.org/wiki/n%c3%bamero_de_fibonacci) A sequência é dada pela seguinte expressão: Primeiros termos: (0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,...), 15

Exercício 4 (cont.) Implemente uma função recursiva (denominada fibo.m) que calcule o enésimo termo da sequência de Fibonacci. Teste a função com um script. 16

Exercício 4 (cont.) solução function [termo_n] = fibo(n) % A função FIBO recebe % como parâmetro de entrada: % um valor n inteiro >=1; % A função retorna: % o n-termo da sequência de Fibonacci. if (n < 1 round(n) ~= n) error('o valor tem que ser um inteiro maior ou igual a 1.'); switch (n) case 1, termo_n = 0; case 2, termo_n = 1; otherwise, termo_n = fibo(n-1) + fibo(n-2); 17

Exercício 4 (cont.) script de teste %Este script testa a função FIBO clc; clear all; close all; disp('este script testa a função FIBO'); %pede o termo N até ao qual se prete calcular a sequência valor_incorrecto = true; while (valor_incorrecto) N = input(['introduza o termo N até onde prete calcular ',... 'a seq. de Fibonacci: ']); valor_incorrecto = (N < 1 round(n) ~= N); seq=[]; for k=1:n seq=[seq,fibo(k)]; figure(20); stem(1:n, seq), grid on; title(['sequência de Fibonacci até ao termo ' int2str(n)]); 18