Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 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
UNICAMP Universidade Estadual de Campinas Centro Superior de Educação Tecnológica Divisão de Telecomunicações Propagação de Ondas e Antenas Prof.Dr. Leonardo.
INFORMAÇÕES COMPLEMENTARES
Material pedagógico Multiplicar x 5 Clica!
Vamos contar D U De 10 até 69 Professor Vaz Nunes 1999 (Ovar-Portugal). Nenhuns direitos reservados, excepto para fins comerciais. Por favor, não coloque.
Métodos, Parâmetros, Argumentos e Contratos
Operadores e Funções do LINGO
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
Exercício do Tangram Tangram é um quebra-cabeças chinês no qual, usando 7 peças deve-se construir formas geométricas.
Nome : Resolve estas operações começando no centro de cada espiral. Nos rectângulos põe o resultado de cada operação. Comprova se no final.
Copyright (c) 2003 by Valery Sklyarov and Iouliia Skliarova: DETUA, IEETA, Aveiro University, Portugal.
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, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 4.
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 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 8.
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.
Introdução aos Computadores e à Programação DI-FCT-UNL-2005/2006 Introdução 1.1 Octave Cadeias e ficheiros.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 2.
Introdução aos Computadores e Programação DI-FCT-UNL-2003/2004 Programação 5.1 Octave Programação.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 2.
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 5.
Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 4.
Vectores (e Listas) : Pesquisa e Ordenação
Introdução aos Computadores e à Programação DI-FCT-UNL-2006/2007 Ficheiros 5.1 Octave Ficheiros.
1 Funções Trajectória de Projéctil DI/FCT/UNL 1º Semestre 2004/2005.
11 de Maio de 2006Listas e Ordenação1 Pedro Barahona DI/FCT/UNL Introdução aos Computadores e à Programação 2º Semestre 2005/2006.
Excel Profa. Cristina M. Nunes.
Campus Curitiba Departamento Acadêmico de Matemática Angela Olandoski Barboza UTFPR – Damat.
Curso de ADMINISTRAÇÃO
Relações Adriano Joaquim de O Cruz ©2002 NCE/UFRJ
EXPRESSÕES ARITMÉTICAS
FUNÇÃO MODULAR.
Linguagem PHP Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Aula 4 Nomes, Vinculações, Tipos e Escopos
Tratamento de Ficheiros
Provas de Concursos Anteriores
Renda até 2 SM.
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
(CESPE/ Técnico Judiciário do TRT 17ª Região/ES) O Superior Tribunal de Justiça entende que o candidato aprovado em concurso público dentro do limite.
MECÂNICA - DINÂMICA Exercícios Cap. 13, 14 e 17. TC027 - Mecânica Geral III - Dinâmica © 2013 Curotto, C.L. - UFPR 2 Problema
1 CENTRO DE DESENVOLVIMENTO E PLANEJAMENTO REGIONAL – 2006 P Ó S-GRADUA Ç ÃO EM ECONOMIA Microeconomia I Prof.: Edson Domingues Cap í tulo II: Escolha.
CATÁLOGO GÉIA PÁG. 1 GÉIA PÁG. 2 HESTIA PÁG. 3.
Estruturas de Dados com Jogos
Funções Universidade Federal de Ouro Preto - UFOP
Múltiplos de um número Sonia Regina de Souza Guedes.
Entendendo as definições de classe
Projeto Marcas que Eu Gosto 1 PROJETO MARCAS QUE EU GOSTO Estudos Quantitativo de Consumidores Janeiro / 2005.
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
1 2 Observa ilustração. Cria um texto. Observa ilustração.
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.
Olhe fixamente para a Bruxa Nariguda
Máquina de Turing Universal
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.
AM020C A interface entre Meio Ambiente, Sociedade e Economia Indicadores de produtividade e empregabilidade da agricultura do Brasil. Aluna Andressa Santos.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 12.
Transcrição da apresentação:

Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 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 Ler e escrever ficheiros

Ludwig Krippahl, Funções Para usar a função Se devolve um valor: x = funcaoqq(arg1, arg2) Se devolve mais que um: [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 Não declarem funções em memória

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: for 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, Função: polinomio (exemplos) 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 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 Escolhe o intervalo x1,xm ou xm,x2 onde os sinais sejam opostos

Ludwig Krippahl, Uma raiz de um polinómio function xm=zeropol(coefs,x1,x2,prec) Argumentos: Coeficientes Intervalo Precisão.... endfunction

Ludwig Krippahl, Uma raiz de um polinómio function xm=zeropol(coefs,x1,x2,prec) y1=polinomio(coefs,x1); y2=polinomio(coefs,x2); primeiro calcular y nos extremos.... endfunction

Ludwig Krippahl, Uma raiz de um polinómio while abs(x1-x2)>precenquanto não termina xm=(x1+x2)/2;calcula o ponto médio ym=polinomio(coefs,xm); if y1*ym<0 x2=xm;se o 0 está na primeira metade y2=ym;desloca o ponto 2 else x1=xm;caso contrário y1=ym;desloca o ponto 1 endif endwhile

Ludwig Krippahl, Uma raiz de um polinómio O resultado é o ponto médio: function xm=zeropol(coefs,x1,x2,prec)... endfunction

Ludwig Krippahl, Uma raiz de um polinómio y = 0.3+x – x 2 + x 3 x = zeropol([0.3,1,-1,1],-1,1,0.01)

Ludwig Krippahl, Uma raiz de um polinómio zeropol([0.3,1,-1,1],-1,1,0.01)

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 internamente com 64 bits: 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 Exemplo: Duas casas decimais: x x x10 -3 = 1.00 Epsilon = 0.01 (à parte de arredondamentos...)

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)

Ludwig Krippahl, O zero de uma função A nossa função genérica será. y = nome(params,x) Exemplo: y=sin(a*x)+b function y=sinab(params,x) y=sin(params(1)*x)+params(2); endfunction

Ludwig Krippahl, O zero de uma função Para avaliar uma função 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 Para a função que encontra o zero temos de enviar o nome da função a usar, 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 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, Ficheiros Para aceder a um ficheiro temos sempre de o identificar com um número correspondente ao ficheiro aberto. Usamos a função fopen para abrir o ficheiro e obter o identificador, fclose para fechar e deixar livre o ficheiro para outras aplicações.

Ludwig Krippahl, Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3

Ludwig Krippahl, Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3 nome do ficheiro

Ludwig Krippahl, Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3 w: write, para escrita r: read, para leitura a: append, acrescentar

Ludwig Krippahl, Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3 Identificador

Ludwig Krippahl, Ficheiros Escrever no ficheiro fprintf(id,var) escreve o valor de var no ficheiro exemplo: id=fopen(teste.txt,w) fprintf(id,qualquer coisa) fclose(id);

Ludwig Krippahl, Ficheiros Ler dados de um ficheiro: fgetl( identificador, comprimento) Lê uma linha do ficheiro identificado, ou o número de caracteres no comprimento. Se o comprimento é omitido, lê todos os caracteres até ao final da linha. Se não há mais linhas devolve -1.

Ludwig Krippahl, Ficheiros Ler do ficheiro exemplo: id=fopen(teste.txt,r) s=fgetl(id) fclose(id); (s fica com o valor qualquer coisa)

Ludwig Krippahl, Ficheiros Sabemos que o ficheiro chegou ao fim com a função feof: feof( identificador ) Devolve true se o ficheiro estiver no fim.

Ludwig Krippahl, Resumindo: Saber bem: Funções Controlo de execução (if, while, for) Hoje Bissecção feval para poder enviar como argumento o nome de uma função. Ficheiros (fopen, identificador, fprintf, fgetl)

Ludwig Krippahl, Mais informação: Sobre o método da bissecção: Sobre ficheiros Capítulo 14 do manual Octave