Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouIsabel Lias Alterado mais de 10 anos atrás
1
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 4
2
Ludwig Krippahl, 2009 2 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
3
Ludwig Krippahl, 2009 3 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)
4
Ludwig Krippahl, 2009 4 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
5
Ludwig Krippahl, 2009 5 Funções O que nós fazemos Criamos o ficheiro funcaoqq.m Nesse ficheiro declaramos a função: function res=funcaoqq(arg1,arg2).... endfunction
6
Ludwig Krippahl, 2009 6 Funções function res = funcaoqq( arg1, arg2 ) Indica que é a declaração de uma função.
7
Ludwig Krippahl, 2009 7 Funções function res = funcaoqq( arg1, arg2 ) Nome da variável com o valor a devolver
8
Ludwig Krippahl, 2009 8 Funções function [res1, res2] = funcaoqq( arg1.. Se devolve vários valores, usamos um vector de variáveis
9
Ludwig Krippahl, 2009 9 Funções function res = funcaoqq( arg1, arg2 ) Variáveis (locais) para onde são copiados os valores dados à função como argumentos
10
Ludwig Krippahl, 2009 10 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.
11
Ludwig Krippahl, 2009 11 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
12
Ludwig Krippahl, 2009 12 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...
13
Ludwig Krippahl, 2009 13 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.
14
Ludwig Krippahl, 2009 14 Função: polinomio Polinómio: Y= k 1 + k 2 *x + k 3 *x 2 + k 4 *x 3...
15
Ludwig Krippahl, 2009 15 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... ]
16
Ludwig Krippahl, 2009 16 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
17
Ludwig Krippahl, 2009 17 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
18
Ludwig Krippahl, 2009 18 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
19
Ludwig Krippahl, 2009 19 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))
20
Ludwig Krippahl, 2009 20 Função: polinomio (exemplos) plot(-10:10, polinomio([2,3,-1], -10:10))
21
Ludwig Krippahl, 2009 21 Uma raiz de um polinómio Método da bissecção.
22
Ludwig Krippahl, 2009 22 Uma raiz de um polinómio y = 0.3+x – x 2 + x 3 x = -0.23309
23
Ludwig Krippahl, 2009 23 Uma raiz de um polinómio Começamos com um intervalo que inclui o zero: [-1,1]
24
Ludwig Krippahl, 2009 24 Uma raiz de um polinómio Começamos com um intervalo que inclui o zero: [-1,1] Os extremos têm sinal diferente: - +
25
Ludwig Krippahl, 2009 25 - + Uma raiz de um polinómio Dividir ao meio: (-1 +1)/2 = 0
26
Ludwig Krippahl, 2009 26 - + Uma raiz de um polinómio Calculamos y(0)= 0.3 +
27
Ludwig Krippahl, 2009 27 - + Uma raiz de um polinómio Calculamos y(0)= 0.3 O intervalo com sinais opostos nos extremos contém o zero +
28
Ludwig Krippahl, 2009 28 - + Uma raiz de um polinómio + -
29
Ludwig Krippahl, 2009 29 - + Uma raiz de um polinómio + --
30
Ludwig Krippahl, 2009 30 Uma raiz de um polinómio Quando paramos? Quando o intervalo for pequeno Precisão.
31
Ludwig Krippahl, 2009 31 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
32
Ludwig Krippahl, 2009 32 Uma raiz de um polinómio function xm=zeropol(coefs,x1,x2,prec) Argumentos: Coeficientes Intervalo Precisão.... endfunction
33
Ludwig Krippahl, 2009 33 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
34
Ludwig Krippahl, 2009 34 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
35
Ludwig Krippahl, 2009 35 Uma raiz de um polinómio O resultado é o ponto médio: function xm=zeropol(coefs,x1,x2,prec)... endfunction
36
Ludwig Krippahl, 2009 36 Uma raiz de um polinómio y = 0.3+x – x 2 + x 3 x = -0.23309 zeropol([0.3,1,-1,1],-1,1,0.01)
37
Ludwig Krippahl, 2009 37 Uma raiz de um polinómio zeropol([0.3,1,-1,1],-1,1,0.01)
38
Ludwig Krippahl, 2009 38 Representação de números A que precisão podemos ir?
39
Ludwig Krippahl, 2009 39 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
40
Ludwig Krippahl, 2009 40 Representação de números Expoente: 11 bits, Mantissa: 52 bits (sinal) mantissa * 2 expoente Máximo valor: 1.7977x 10 308 (realmax, 1.7977e308 ) Precisão (épsilon) 2.2204x 10 -16 (eps, 2.2204e-16)
41
Ludwig Krippahl, 2009 41 Representação de números Precisão (épsilon) 2.2204x 10 -16 (eps, 2.2204e-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
42
Ludwig Krippahl, 2009 42 Representação de números Exemplo: Duas casas decimais: 1.00 1.00x10 -3 1.00x10 -6 1.00 + 1.00x10 -3 = 1.00 Epsilon = 0.01 (à parte de arredondamentos...)
43
Ludwig Krippahl, 2009 43 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
44
Ludwig Krippahl, 2009 44 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)
45
Ludwig Krippahl, 2009 45 O zero de uma função A nossa função genérica será. y = nome(params,x)
46
Ludwig Krippahl, 2009 46 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
47
Ludwig Krippahl, 2009 47 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 = 0.84147 octave:23> feval("sin",1) ans = 0.84147
48
Ludwig Krippahl, 2009 48 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)
49
Ludwig Krippahl, 2009 49 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);
50
Ludwig Krippahl, 2009 50 O zero de uma função Para calcular uma raíz do polinómio: z=zerofn("polinomio",coefs,-1,1,0.0001)
51
Ludwig Krippahl, 2009 51 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.
52
Ludwig Krippahl, 2009 52 Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3
53
Ludwig Krippahl, 2009 53 Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3 nome do ficheiro
54
Ludwig Krippahl, 2009 54 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
55
Ludwig Krippahl, 2009 55 Ficheiros fopen(nome,modo [, arquitectura]) normalmente usamos só os primeiros dois argumentos: octave:7> teste=fopen("teste.txt","w") teste = 3 Identificador
56
Ludwig Krippahl, 2009 56 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);
57
Ludwig Krippahl, 2009 57 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.
58
Ludwig Krippahl, 2009 58 Ficheiros Ler do ficheiro exemplo: id=fopen(teste.txt,r) s=fgetl(id) fclose(id); (s fica com o valor qualquer coisa)
59
Ludwig Krippahl, 2009 59 Ficheiros Sabemos que o ficheiro chegou ao fim com a função feof: feof( identificador ) Devolve true se o ficheiro estiver no fim.
60
Ludwig Krippahl, 2009 60 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)
61
Ludwig Krippahl, 2009 61 Mais informação: Sobre o método da bissecção: http://en.wikipedia.org/wiki/Bisection_method Sobre ficheiros Capítulo 14 do manual Octave
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.