Informá(ca para as Ciências e Engenharias Versão : C (Engenharia Civi) Aua 10 Pedro Barahona 2016 / 17
Sumário Introdução aos sistemas de bases de dados: Interrogações mais compexas em SQL. Simuação de modeos conpnuos: Evoução de duas popuações na reação predador-presa. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 2
Queries com várias Tabeas Geramente as perguntas às base de dados envovem mais de uma tabea. Exempo de query mais compexa Quais os Ptuos dos fimes augados peo Artur Meirees? Neste caso, a informação reevante está organizada em várias tabeas Fimes Augueres Cientes 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 3
Exempo Tabea de Fimes Tabea de Fimes de uma base de dados DBvideos 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 4
Exempo Tabea de Cientes Tabea de Cientes de uma base de dados DBvideos 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 5
Exempo Tabea de Augueres A tabea Augueres tem duas chaves externas: FiIme_id, que a iga à tabea fimes Ciente_id, que a iga à tabea cientes Auguer_id é a sua chave primária 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 6
Queries com várias Tabeas Quais os Ptuos dos fimes augados peo Artur Meirees? 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 7
Queries com várias Tabeas Ligar 2 tabeas Podemos unir tabeas usando a condição WHERE da instrução SELECT O campo A da tabea1 deve ser igua ao campo B da tabea 2 Opcionamente a ista de respostas vem ordenada peo campo C SELECT ista-campos FROM tabea1, tabea2 WHERE tabea1.campoa = tabea2.campob ORDER BY campoc; 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 8
Queries com várias Tabeas Query: Quais os Ptuos dos fimes augados? As duas tabeas têm um campo Fime_id 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 9
Queries com várias Tabeas Ligar 2 tabeas Quais os Ptuos dos fimes augados? As duas tabeas têm um campo Fime_id db >> SELECT Fimes.Tituo...>> FROM Fimes, Augueres...>> WHERE Fimes.Fime_id = Augueres.Fime_id; Idade do Geo Eizabeth Regresso ao Futuro Aien db >> 17 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 10
Queries com várias Tabeas Ligar 2 tabeas Aterna(va: Usar um JOIN Se o nome do campo for igua nas duas tabeas basta indicar o campo, não é preciso indicar a tabea (e.g. id_tabea2) SELECT ista-campos FROM tabea1 JOIN tabea2 USING(id_tabea2) WHERE condição extra ORDER BY campoc; 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 11
Queries com várias Tabeas Query (2 tabeas): Quais os Ptuos dos fimes augados? As duas tabeas têm um campo Fime_id db >> SELECT Tituo...>> FROM Fimes JOIN Augueres...>> USING (Fime_id); Idade do Geo Eizabeth Regresso ao Futuro Aien db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 12
Queries com várias Tabeas Query (2 tabeas): Quais os Ptuos e datas de auguer dos fimes augados? As duas tabeas têm um campo Fime_id db >> SELECT Tituo, Augueres.Data_auguer...>> FROM Fimes JOIN Augueres...>> USING (Fime_id); Idade do Geo 05/10/14 Eizabeth 05/12/14 Regresso ao Futuro 05/13/14 Aien 05/11/14 db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 13
Queries com várias Tabeas Query (2 tabeas): Quais os Ptuos e datas de auguer dos fimes augados? Nota: Não havendo ambiguidade pode omi(r-se o nome da tabea. db >> SELECT Tituo, Augueres.Data_auguer...>> FROM Fimes JOIN Augueres...>> USING (Fime_id); Idade do Geo 05/10/14 Eizabeth 05/12/14 Regresso ao Futuro 05/13/14 Aien 05/11/14 db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 14
Queries com várias Tabeas Query (3 tabeas): Quais os Ptuos dos fimes augados e que pessoas os augaram? 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 15
Queries com várias Tabeas Query (3 tabeas): Quais os Ptuos dos fimes augados e que pessoas os augaram? db >> SELECT Tituo, Nome...>> FROM Fimes, Augueres, Cientes...>> WHERE (Cientes.Ciente_id = Augueres.Ciente_id...>> AND Fimes.Fime_id = Augueres.Fime_id Idade do Geo Joana Fonseca Eizabeth Artur Meirees Regresso ao Futuro Marceo Rebeo de Sousa Aien Pedro Passos Coeho db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 16
Queries com Agregações Por vezes pretendemos obter como resposta não o vaor dos campos mas sim uma determinada agregação desses campos. As agregações mais comuns são Contagens (quantos registos sa(sfazem a query? Somas (qua a soma/ produto dos campos seeccionados) Nota: Não há produtos que podem ser ob(dos com a conversão via ogaritmos: exp(sum(n(*))) Máximos e Mínimos (qua o maior/menor campo seeccionado) Em campos de texto a ordem é exicográfica 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 17
Queries com Agregações Query (contagem - agregação): Quantos fimes foram augados? db >> SELECT Count (Auguer_Id) FROM Fimes; 4 db >> Nota: Agumas variantes SQL COUNT(campo) : conta não NULL no campo SQL COUNT(*) : conta registos (inhas) SQL COUNT(DISTINCT campo) : conta diferentes 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 18
Queries com várias Tabeas Query (contagem + wid cards): Quantos cientes têm Sousa no nome? db >> SELECT Count(*) FROM Cientes...>> WHERE Nome LIKE "%Sousa% ; 2 db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 19
Queries com várias Tabeas Query (outras agregações mínimo): Em quantas datas foram feitos augueres? db >> SELECT Count(Data_Auguer)FROM Augueres; 4 db >> SELECT Count(DISTINCT Data_Auguer)FROM Augueres; 3 db >> 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 20
Queries com várias Tabeas Query (outras agregações mínimo): Qua a data do primeiro auguer db >> SELECT Min(Data_Auguer) FROM Augueres; 2013/11/11 db >> Notar a importância da forma como se escrevem datas de forma a poder usar as funções max/min 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 21
Sumário Introdução aos sistemas de bases de dados: Interrogações mais compexas em SQL. Simuação de modeos conpnuos: Evoução de duas popuações na reação predador-presa. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 22
Evoução de uma popuação com crescimento não restringido [1] Seja P o vaor de uma popuação (ou seja, o número de eementos da popuação). Seja r a taxa de crescimento per-capita da popuação. O crescimento não restringido da popuação é dado por: P t = rp O crescimento não restringido é exponencia, se r > 0. Soução de P(t) = c e r t sendo c = P inic A soução de outros probemas nem sempre é fáci 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 23
Evoução de uma popuação com crescimento não restringido [2] P inic = 100 e r = 0.1 P(t) P t = rp 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 24
Evoução de duas popuações na reação predador-presa [1] Sejam P e V os vaores das popuações de Predadores e de Presas (Ví(mas). Seja c V a taxa de crescimento per-capita das presas. Seja m V a taxa de mortaidade das presas em função do nº de predadores e do nº de presas. Seja c P a taxa de crescimento dos predadores em função da mortaidade das presas. Seja m P a taxa de mortaidade per-capita dos predadores. Os crescimentos das duas popuações são dados peas equações de Lotka- Voterra: V t = c VV m V VP P t = c Pm V VP m P P 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 25
Evoução de duas popuações na reação predador-presa [2] O número de presas V: aumenta naturamente, sem infuência dos predadores (c V V); diminui naturamente e devido aos predadores (m V V P). O número de predadores P: aumenta naturamente e devido às presas mortas (c P m V V P); diminui naturamente, sem infuência das presas (m P P). V t = c VV m V VP P t = c Pm V VP m P P 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 26
Evoução de duas popuações na reação predador-presa [3] Presas V inic = 100 c V = 0.1 m V = 0.01 Predadores P inic = 10 c P = 0.2 m P = 0.1 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 27
Cácuo do vaor de uma popuação Q [1] No tempo t, o vaor da popuação Q é Q(t) e dq/dt é f(t). Qua é o vaor de Q no tempo t + dt? Intui>vamente, f(t) indica a taxa de variação da função Q no ponto t (o decive da tangente). Para dt pequeno: Se f(t) > 0, Q(t+dt) > Q(t). Se f(t) = 0, Q(t+dt) = Q(t). Se f(t) < 0, Q(t+dt) < Q(t). Figura dos sides da discipina de Computação, eccionada peo Prof. Jorge Cruz, Departamento de Informá>ca da FCT/UNL. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 28
Cácuo do vaor de uma popuação Q [2] No ponto t, o vaor de Q é Q(t) e dq/dt é f(t). Qua é o vaor de Q no tempo t + dt (se dt for pequeno)? Peo método de Euer, no tempo t + dt, a variação de Q pode ser aproximada por dt f(t) (ou seja dq = dq/dt *dt) e portanto Q(t+h) Q(t) + h f(t). Conhece-se um majorante do erro come(do, que é tanto menor quanto menor for h. Pode-se programar a simuação da evoução de Q. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 29
Probema do Predador-Presa [1] Pretende-se simuar a evoução de duas popuações, uma de presas e uma de predadores, apicando o modeo de Lotka-Voterra. A simuação deve produzir dois gráficos: Um que mostra a evoução das popuações ao ongo do tempo. Outro que mostra a reação entre o número de presas e o número de predadores do sistema (sem referência ao tempo). 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 30
Probema do Predador-Presa [2] O primeiro gráfico mostra a evoução das popuações ao ongo do tempo. As abcissas representam o tempo e as ordenadas representam o número de eementos da respe(va popuação. Exempo para: V inic = 100 c V = 0.1 m V = 0.01 P inic = 10 c P = 0.2 m P = 0.1 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 31
Probema do Predador-Presa [3] O segundo gráfico (uma única inha) mostra a reação entre o número de presas e o número de predadores do sistema, sem referência ao tempo. Cada ponto indica um estado do sitema, representando a sua abcissa e ordenada, respec(vamente o nº de presas nesse estado; o nº de predadores nesse estado. Exempo para: V inic = 100 c V = 0.1 m V = 0.01 P inic = 10 c P = 0.2 m P = 0.1 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 32
Resoução Probema 1. Compreender totamente o probema. Feito 2. Caracterizar o probema. Probema: Predador-presa (modeo de Lotka-Voterra). Entrada: (vetor) 4 constantes das taxas do modeo, (inteiro) presinic, (inteiro) predinic, (inteiro) numero de passos de simuação do sistema, (rea) duração em tempo de cada passo Saída: nenhuma. São gerados 2 gráficos 3. Generaizar o probema (sempre que for possíve). Não vamos generaizar este probema. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 33
Resoução Agoritmo [1] 4. Desenhar o agoritmo para resover o probema. a) Decompor o probema em 3 sub-probemas i. Cacuar a evoução das duas popuações peo modeo de Lotka- Voterra. ii. Desenhar a evoução das duas popuações ao ongo do tempo (duas inhas independentes). iii. Desenhar os estados do sistema (uma única inha que reaciona as duas popuações). 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 34
Resoução Agoritmo [3] b) Iden(ficar, caracterizar e generaizar cada sub-probema. Probema: Cácuo das popuações peo modeo de Lotka-Voterra. Entrada: (vetor) 4 constantes, (inteiro) presinic, (inteiro) predinic, (inteiro) numpassos, (rea) passot Saída: (matriz com numpassos+1 inhas e 2 counas) popuacoes 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 35
Resoução Agoritmo [4] b) Iden(ficar, caracterizar e generaizar cada sub-probema. Probema: Desenho das presas e dos predadores com inhas independentes (ao ongo do tempo). Entrada: (matriz com numpassos + 1 inhas e 2 counas) popuacoes Saída: nenhuma. É gerado um gráfico de inhas 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 36
Resoução Agoritmo [5] b) Iden(ficar, caracterizar e generaizar cada sub-probema. Probema: Desenho das presas e dos predadores com uma única inha (que depende de ambos). Entrada: (matriz com numpassos + 1 inhas e 2 counas) popuacoes Saída: nenhuma. É gerado um gráfico de inha 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 37
Agoritmo Programa principa Resumindo: predadorpresa (consts, presinic, predinic, numpassos, passot) : popus = otkavoterra(consts, presinic, predinic, numpassos, passot), desenhapredpresind(popus), desenhapredpresdep(popus). 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 38
Resoução Programa [1] 5. Para cada sub-probema, desenhar o agoritmo para o resover. 6. Para cada sub-probema (começando peos mais simpes), impementar o respe(vo agoritmo e testar o sub-programa. i. Cacuar a evoução das duas popuações peo modeo de Lotka- Voterra. ii. Desenhar a evoução das duas popuações ao ongo do tempo (duas inhas independentes). iii. Desenhar os estados do sistema (uma única inha que reaciona as duas popuações). 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 39
Resoução Programa [3] 5. Para cada sub-probema, desenhar o agoritmo para o resover. 6. Para cada sub-probema (começando peos mais simpes), impementar o respe(vo agoritmo e testar o sub-programa. Probema: Cácuo das popuações peo modeo de Lotka-Voterra. Entrada: (vetor) 4 constantes, (inteiro) presinic, (inteiro) predinic, (inteiro) numpassos, (rea) passot Saída: (matriz com numpassos+1 inhas e 2 counas) popuacoes Impementar a função popus = otkavoterra( consts, presinic, predinic,... numpassos, passot ) 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 40
Agoritmo otkavoterra 1. Criar a matriz popus com numpassos+1 inhas e 2 counas. 2. Preencher a 1ª inha de popus com [presinic, predinic]. 3. Em cada um dos numpassos passos: a) Cacuar os novos vaores das popuações, com os vaores atuais, as constantes e o passot, segundo o modeo: V t = c V V m V VP P t = c P m V VP m P P b) Preencher a próxima inha de popus com os novos vaores das popuações. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 41 41
Função otkavoterra [1] A função recebe os parâmetros e iniciaiza o primeiro estado (inha) function popus = otkavoterra( consts, presinic, predinic,... numpassos, passot ) % documentação em anexo popus = zeros(numpassos + 1, 2); cv = consts(1); % Taxa de crescimento das presas (c V ). mv = consts(2); % Taxa de mortaidade das presas (m V ). mp = consts(3); % Taxa de mortaidade dos predadores (m P ). cp = consts(4); % Taxa de crescimento dos predadores (c P ). presas = presinic; predadores = predinic; popus(1, :) = [presas, predadores]; % Estado inicia. for i = 1 : numpassos... % preenche a inha i+1 da matriz popus end end 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 42
Função otkavoterra [2] Cada inha é cacuada em função da anterior, cacuando-se primeiro a derivada das popuações (presas e predadores) function popus = otkavoterra (...) end... for i = 1 : numpassos end mortepresporpred = mv * presas * predadores; derpresas = cv * presas mortepresporpred; derpredadores = cp * mortepresporpred mp * predadores; presas = presas + passot * derpresas; V t = c VV m V VP predadores = predadores + passot * derpredadores; popus(i + 1, :) = [presas, predadores]; P t = c Pm V VP m P P Q(t+h) Q(t) + dt dq/dt 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 43
Resoução Programa [3] 5. Para cada sub-probema, desenhar o agoritmo para o resover. 6. Para cada sub-probema (começando peos mais simpes), impementar o respe(vo agoritmo e testar o sub-programa. Probema: Desenho das presas e dos predadores com inhas independentes (ao ongo do tempo). Entrada: (matriz com numpassos + 1 inhas e 2 counas) popuacoes Saída: nenhuma. É gerado um gráfico de inhas Impementar a função desenhapredpresind( popus ) 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 44
Função desenhapredpresind [1] A função desenha as duas inhas, uma de cada vez function desenhapredpresind( popuacoes ) % documentação em anexo end numlinhas = size(popuacoes, 1); tempo = [0 : numlinhas 1]; % Desenho das presas a azu (com egenda). pot(tempo, popuacoes(:, 1), 'b;presas;'); hod on; % Desenho dos predadores a vermeho (com egenda). pot(tempo, popuacoes(:, 2), 'r;predadores;'); xabe('tempo'); yabe('numero de eementos da popuacao'); hod off; 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 45
Resoução Programa [3] 5. Para cada sub-probema, desenhar o agoritmo para o resover. 6. Para cada sub-probema (começando peos mais simpes), impementar o respe(vo agoritmo e testar o sub-programa. Probema: Desenho das presas e dos predadores com uma única inha (que depende de ambos). Entrada: (matriz com numpassos + 1 inhas e 2 counas) popuacoes Saída: nenhuma. É gerado um gráfico de inha Impementar a função desenhapredpresdep( popus ) 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 46
Função desenhapredpresind [1] Neste caso a função só desenha uma inhas function desenhapredpresdep( popuacoes ) % documentação em anexo end pot(popuacoes(:, 1), popuacoes(:, 2)); xabe('presas'); yabe('predadores'); 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 47
Resoução Programa [5] 7. Impementar o agoritmo que resove o probema e testar o programa pedido. Probema: Predador-presa (modeo de Lotka-Voterra). Entrada: (vetor) 4 constantes das taxas do modeo, (inteiro) presinic, (inteiro) predinic, (inteiro) numero de passos de simuação do sistema, (rea) duração em tempo de cada passo Saída: nenhuma. São gerados 2 gráficos Impementar a função predadorpresa(consts, presinic, predinic, numpassos, passot) 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 48
Agoritmo Programa principa A função cacua a matriz e desenha os dois gráficos, gerando duas figuras. function predadorpresa( consts, presinic, predinic,... end numpassos, passot ) popus = otkavoterra( consts, presinic, predinic,... numpassos, passot); figure(1); desenhapredpresind(popus); figure(2); desenhapredpresdep(popus); 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 49
Teste 1 consts = [0.1, 0.01, 0.1, 0.2]; predadorpresa(consts, 100, 10, 250000, 0.001) Figura 1 Figura 2 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 50
Teste 2 consts = [0.1, 0.01, 0.1, 0.2]; predadorpresa(consts, 200, 10, 250000, 0.001) Figura 1 Figura 2 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 51
Sumário Introdução aos sistemas de bases de dados: Interrogações mais compexas em SQL. Simuação de modeos conpnuos: Evoução de duas popuações na reação predador-presa. 22 Maio 2017 10: SQL (várias tabeas); Simuação modeos conpnuos 52