Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Material pedagógico Multiplicar x 5 Clica!
Métodos, Parâmetros, Argumentos e Contratos
Celso C. Ribeiro Caroline T. Rocha
Introdução à Programação usando Processing Programação Gráfica 2D Animações Exercício Animações 14/10/09 Bruno C. de Paula 2º Semestre 2009 > PUCPR >
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
1 INQUÉRITOS PEDAGÓGICOS 2º Semestre 2003/2004 ANÁLISE GERAL DOS RESULTADOS OBTIDOS 1.Nº de RESPOSTAS ao inquérito 2003/2004 = (42,8%) 2.Comparação.
Sumário, aula 9 Elasticidade Elasticidade arco Elasticidade no ponto
Sumário, aula 10 Exercícios sobre elasticidade Elasticidade e despesa
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 12.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 11.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 5.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 9.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 3.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 10.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 6.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 13.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 9.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 2.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 4.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 10.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 7.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 10.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2.
29 Outubro 2005Funções: Zeros, Máximos e Mínimos1 Jorge Cruz DI/FCT/UNL Programação para as Ciências Experimentais 1º Semestre 2005/2006.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Funções, Condições e Ciclos.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 3.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 11.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
Ciclos, Vectores e Gráficos Simulação da Queda de Corpos II
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Funções, Condições e Ciclos 3.1Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Octave Funções, Condições e Ciclos.
Introdução (Informal) à Programação
Excel Profa. Cristina M. Nunes.
Fase II - Refinamento Aurora Pozo.
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
FUNÇÃO MODULAR.
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
CAP. 2 RESPOSTA EM FREQÜÊNCIA TE 054 CIRCUITOS ELETRÔNICOS LINEARES
Aula 4 Nomes, Vinculações, Tipos e Escopos
Aula 6 Subprogramas Universidade do Vale do Rio dos Sinos
Classes e objetos P. O. O. Prof. Grace.
Provas de Concursos Anteriores
APRESENTAÇÃO Está prevista a utilização de 6 aulas (6 blocos de 90 minutos) para o ensino do Subtema das Funções Quadráticas. Todas as aulas servirão.
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Introdução a Computação e Cálculo Numérico
PROGRAMAÇÃO ESTRUTURADA II
1 António Arnaut Duarte. 2 Sumário: primeiros passos;primeiros passos formatar fundo;formatar fundo configurar apresentação;configurar apresentação animação.
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Estruturas de Dados com Jogos
Funções Universidade Federal de Ouro Preto - UFOP
Salas de Matemática.
Coordenação Geral de Ensino da Faculdade
Entendendo as definições de classe
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
1 2 Observa ilustração. Cria um texto. Observa ilustração.
Amintas engenharia.
SairPróximo Itens de Seleção Probabilidades e Combinatória Cálculo de Probabilidades. Regra de Laplace. ITENS DE SELEÇÃO DOS EXAMES NACIONAIS E TESTES.
MATRICIAL CONSULTORIA LTDA. PREFEITURA MUNICIPAL DE GARIBALDI 23/10/ : ATENÇÃO Os locais descritos nas planilhas anexas não correspondem ao total.
1 Aplicações do Fecho Regular. 2 A interseção de uma linguagem livre de contexto e uma linguagem regular é uma linguagem livre de contexto livre de contexto.
Campus de Caraguatatuba Aula 2: Somatório e Produtório
BCC /01 Aula Teórica 09 Funções Material Didático Proposto. 1 BCC701 – Programação de Computadores I Universidade Federal de Ouro Preto Departamento.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 12.
Transcrição da apresentação:

Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4

Ludwig Krippahl, Na aula de hoje... Revisão: function, if, for, while Encontrar o zero de um polinómio Precisão, representação de valores numéricos Encontrar o zero de uma função contínua Encontrar o mínimo de uma função contínua

Ludwig Krippahl, Funções Para usar a função Se retorna uma variável: x = funcaoqq(arg1, arg2) Se retorna mais que uma: [x,y,z] = outrafn(arg1, arg2)

Ludwig Krippahl, Funções O que o Octave faz funcaoqq – não há nada com este nome em memória. Procura ficheiro funcaoqq.m Nesse ficheiro executa a função

Ludwig Krippahl, Funções O que nós fazemos Criamos o ficheiro funcaoqq.m Nesse ficheiro declaramos a função: function res=funcaoqq(arg1,arg2).... endfunction

Ludwig Krippahl, Funções function res = funcaoqq( arg1, arg2 ) Indica que é a declaração de uma função.

Ludwig Krippahl, Funções function res = funcaoqq( arg1, arg2 ) Nome da variável com o valor a devolver

Ludwig Krippahl, Funções function [res1, res2] = funcaoqq( arg1.. Se devolve vários valores, usamos um vector de variáveis

Ludwig Krippahl, Funções function res = funcaoqq( arg1, arg2 ) Variáveis (locais) para onde são copiados os valores dados à função como argumentos

Ludwig Krippahl, Funções function res = funcaoqq( arg1, arg2 ) endfunction Todas a variáveis declaradas aqui e no corpo da função são locais. Só existem dentro da função e não afectam nem são afectadas por variáveis externas.

Ludwig Krippahl, Controlo de execução: if if condição else endif Isto é executado se a condição for verdadeira (não for 0) Isto é executado se a condição for false (0). O else é opcional

Ludwig Krippahl, Controlo de execução: while while condição endwhile Executado enquanto a condição for verdadeira (não for 0). É preciso garantir que dentro do ciclo o valor da condição muda, senão o ciclo não acaba...

Ludwig Krippahl, Controlo de execução: while for var=vector endfor Esta parte é repetida uma vez para cada valor no vector. A variável var toma cada um dos valores do vector a cada iteração.

Ludwig Krippahl, Função: polinomio Polinómio: Y= k 1 + k 2 *x + k 3 *x 2 + k 4 *x 3...

Ludwig Krippahl, Função: polinomio Polinómio: Y= k 1 + k 2 *x + k 3 *x 2 + k 4 *x 3... Coeficientes num vector: [ k 1, k 2, k 3, k 4... ]

Ludwig Krippahl, Função: polinomio function y=polinomio(coefs,x) xx=x; y=coefs(1); for f=2:length(coefs) y=y+coefs(f)*xx;indentação, torna xx=x*xx;mais legível. endfor endfunction

Ludwig Krippahl, Função: polinomio function y=polinomio(coefs,x) xx=x; y=coefs(1); for f=2:length(coefs) y=y+coefs(f)*xx;Erro se x for um xx=x*xx;vector. endfor endfunction

Ludwig Krippahl, Função: polinomio function y=polinomio(coefs,x) xx=x; y=coefs(1); for f=2:length(coefs) y=y+coefs(f)*xx;já funciona com xx=x.*xx;vectores endfor endfunction

Ludwig Krippahl, Função: polinomio (exemplos) Calcular o valor de y = 2+3x-x 2 para x=3 octave:16> polinomio([2,3,-1],3) ans = 2 Traçar o gráfico de y = 2+3x-x 2 entre -10 e 10: plot(-10:10, polinomio([2,3,-1], -10:10))

Ludwig Krippahl, Uma raiz de um polinómio Método da bissecção.

Ludwig Krippahl, Uma raiz de um polinómio y = 0.3+x – x 2 + x 3 x =

Ludwig Krippahl, Uma raiz de um polinómio Começamos com um intervalo que inclui o zero: [-1,1]

Ludwig Krippahl, Uma raiz de um polinómio Começamos com um intervalo que inclui o zero: [-1,1] Os extremos têm sinal diferente: - +

Ludwig Krippahl, Uma raiz de um polinómio Dividir ao meio: (-1 +1)/2 = 0

Ludwig Krippahl, Uma raiz de um polinómio Calculamos y(0)= 0.3 +

Ludwig Krippahl, Uma raiz de um polinómio Calculamos y(0)= 0.3 O intervalo com sinais opostos nos extremos contém o zero +

Ludwig Krippahl, Uma raiz de um polinómio + -

Ludwig Krippahl, Uma raiz de um polinómio + --

Ludwig Krippahl, Uma raiz de um polinómio Quando paramos? Quando o intervalo for pequeno Quando no ponto médio y próximo de 0. Precisão.

Ludwig Krippahl, Uma raiz de um polinómio Algoritmo: Dado: x1, x2, precisão Enquanto abs(x2-x1)>precisão repetir ym = valor no ponto médio xm Se abs(ym)<precisão, pára Caso contrário, escolhe o intervalo x1,xm ou xm,x2 onde os sinais sejam opostos

Ludwig Krippahl, Representação de números A que precisão podemos ir?

Ludwig Krippahl, Representação de números Um número no Octave é representado com 64 bits (double precision): Sinal (+, -) : 1 bit Expoente: 11 bits Mantissa: 52 bits (sinal) mantissa * 2 expoente

Ludwig Krippahl, Representação de números Expoente: 11 bits, Mantissa: 52 bits (sinal) mantissa * 2 expoente Máximo valor: x (realmax, e308 ) Precisão (épsilon) x (eps, e-16)

Ludwig Krippahl, Representação de números Precisão (épsilon) x (eps, e-16) O menor número que somado a 1 dá um resultado diferente de 1: octave:17> (1+eps)==1 ans = 0 octave:18> (1+eps/2)==1 ans = 1

Ludwig Krippahl, Representação de números Importante: Todos os dados no computador são sequências de bits. A memória é limitada (64 bits para os números), por isso a precisão é limitada. Normalmente não há problema, mas atenção aos arredondamentos: octave:20> sqrt(2)^2==2 ans = 0

Ludwig Krippahl, O zero de uma função Suponhamos que uma função y=f(x) pode ser especificada por um vector de parâmetros (constantes) e pelo nome. e.g: function y=polinomio(coefs,x)

Ludwig Krippahl, O zero de uma função A nossa função genérica será. y = nome(params,x) Para a função que encontra o zero temos que enviar o nome, os parâmetros, o intervalo, e a precisão. function xm=zerofn(func,params,x1,x2,prec)

Ludwig Krippahl, O zero de uma função Para avaliar a função func usamos a função do Octave feval: feval(nome,arg1,arg2, arg3) é o mesmo que nome(arg1, arg2, arg3) octave:22> sin(1) ans = octave:23> feval("sin",1) ans =

Ludwig Krippahl, O zero de uma função Em vez de: y1=polinomio(coefs,x1); y2=polinomio(coefs,x2); Fica y1=feval(func,params,x1); y2=feval(func,params,x2);

Ludwig Krippahl, O zero de uma função Para calcular uma raíz do polinómio: z=zerofn("polinomio",coefs,-1,1,0.0001)

Ludwig Krippahl, O mínimo de uma função Método da razão dourada

Ludwig Krippahl, O mínimo de uma função Tal como encurralámos a raiz num intervalo, vamos fazer o mesmo com o mínimo, mas precisamos de 3 pontos: a b c

Ludwig Krippahl, O mínimo de uma função Se x 1 <x 2 <x 3 e y 2 <y 1 e y 2 <y 3 então tem que haver um mínimo local entre x 1 e x 3 x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função O algoritmo é (novamente) partir os intervalos, testar, e repetir até que seja suficientemente pequeno x1 x2 x3

Ludwig Krippahl, O mínimo de uma função Guardar sempre os 3 pontos consecutivos em que o do meio é menor que os extremos. x1 x2 x3

Ludwig Krippahl, O mínimo de uma função Como dividir o intervalo: O ideal é manter as proporções. Dividir ao meio não é bom. x1 x2 x3

Ludwig Krippahl, O mínimo de uma função Como dividir o intervalo: x1 x2 x3 x4 x5

Ludwig Krippahl, O mínimo de uma função Como dividir o intervalo: Escolher o ponto novo no intervalo maior e Partir pela razão dourada: (a+b)/a = a / b a= (a+b) b= ( ) (a+b)

Ludwig Krippahl, O mínimo de uma função Detalhes: Escolher o lado maior if abs(x1-xm)>abs(x2-xm) false, lado maior xm x2 x1 x2 xm

Ludwig Krippahl, O mínimo de uma função Detalhes: Calcular novo ponto xn (c1=0.618; c2=1-c1) xn=c1*xm+c2*x2 x1 x2 xmxn

Ludwig Krippahl, O mínimo de uma função Detalhes: Calcular yn=f(xn) yn=feval(func,params,xn); x1 x2 xmxn

Ludwig Krippahl, O mínimo de uma função Detalhes: se yn<xn, xn será o novo xm, e xm o novo x1 ym=yn x1=xm xm=xn x1 x2 xmxn

Ludwig Krippahl, O mínimo de uma função Detalhes: caso contrário xn será o novo x2 x1 x2 xmxn

Ludwig Krippahl, O mínimo de uma função Se o lado maior for entre x1 e xm, mesma coisa, mas trocando o x1 e o x2...

Ludwig Krippahl, O mínimo de uma função Como podemos seguir o cálculo: guardar o xn e yn num vector (pontos). function [xm,pontos]=minfnpts(func,params,x1,xm,x2,prec)... guardar os 3 pontos iniciais: y1=feval(func,params,x1); y2=feval(func,params,x2); ym=feval(func,params,xm); pontos=[x1,x2,xm;y1,y2,ym];

Ludwig Krippahl, O mínimo de uma função Como podemos seguir o cálculo: guardar o xn e yn num vector (pontos). while abs(x2-x1)>prec... durante o ciclo guardar cada xn, yn: pontos=[pontos,[xn;yn]];

Ludwig Krippahl, O mínimo de uma função Como podemos seguir o cálculo: guardar o xn e yn num vector (pontos). Depois de chamada a função, fazer o plot: coefs=[0.3,-5,1] v=-10:10; clearplot plot(v,polinomio(coefs,v));traça o polinómio [x,p]=minfnpts("polinomio",coefs,-10,0,10,0.001) hold on plot(p(1,:),p(2,:),"+")traça os pontos

Ludwig Krippahl, O mínimo de uma função

Ludwig Krippahl, Mais informação: Numerical Recipes Raiz: 9.1 Mínimo: 10.1

Ludwig Krippahl, Próxima aula: Apresentação do trabalho prático: A partir de uma lista de strings com equações de reacções químicas, constantes de equilíbrio, e concentrações iniciais, calcular as concentrações de equilíbrio de todas as espécies tendo em conta todas as reacções. Revisões function, if, while, for: muito importante ter isto bem sabido...

Ludwig Krippahl, Dúvidas...