ludwig krippahl, 2007 programação para as ciências experimentais 2006/7 teórica 1

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

Upload: internet

Post on 17-Apr-2015

106 views

Category:

Documents


1 download

TRANSCRIPT

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

Ludwig Krippahl, 2007

Programação para as Ciências Experimentais

2006/7

Teórica 1

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

Ludwig Krippahl, 2007 2

Informação

Página de PCE:• http://ssdi.di.fct.unl.pt/cursos/pce/

Lista de discussão:• https://mail.di.fct.unl.pt/mailman/listinfo/di-pce

Não há aula teórica no dia 2• Compensar?...

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

Ludwig Krippahl, 2007 3

Na aula de hoje...

Objectivos, trabalhos e avaliação Aulas teóricas e práticas Octave e EdiPO

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

Ludwig Krippahl, 2007 4

Objectivos

Conceitos básicos de programação em Octave/MATLAB.

Métodos numéricos e de simulação. Processamento de dados com Octave e

Excel.

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

Ludwig Krippahl, 2007 5

Avaliação Prática

Obrigatória.• 8 aulas.

• Mínimo 9.5 de nota (9.49999, reprova).

• Conta 25% da nota final.

Quem tem frequência não se inscreve!• A menos que queira fazer melhoria...

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

Ludwig Krippahl, 2007 6

Avaliação Prática: Trabalhos

Fichas das aulas:• 10% da nota prática.

• Uma por aula de exercícios.

• Avaliadas em conjunto no final do semestre, como parte da avaliação do desempenho e participação de cada aluno.

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

Ludwig Krippahl, 2007 7

Avaliação Prática: Trabalhos

Teste de Octave:• 20% da nota prática.

• Semana de 13-3 a 16-3.

• Teste à capacidade de usar o Octave para resolver problemas que exijam sequências de alguns comandos.

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

Ludwig Krippahl, 2007 8

Avaliação Prática: Trabalhos

Primeiro trabalho prático (Octave):• 30% da nota prática.

• Data a anunciar, 2 aulas + trabalho em casa.

• Resolução de problemas numéricos (simulação e/ou integração) com programação em Octave.

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

Ludwig Krippahl, 2007 9

Avaliação Prática: Trabalhos

Segundo trabalho (Octave+Excel):• 40% da nota prática.

• A anunciar, 2-3 aulas + trabalho em casa.

• Resolução de problemas com programação Octave e folha de cálculo (Excel). Inclui manipulação de ficheiros e partilha de dados entre as duas aplicações.

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

Ludwig Krippahl, 2007 10

Avaliação Teórica

Exame individual escrito:• Principalmente Octave.

• Um pouco de Excel.

• Vestígios de conceitos teóricos.

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

Ludwig Krippahl, 2007 11

Nota final

Prática:• 0.1*Fichas+0.2*Teste+0.3*TP1+0.4*TP2

Se Prática >= 9.5, Exame (e frequência) Nota final 0.25 * Prática + 0.75 * Exame Arredondada só no final, ao inteiro mais

próximo. Sem excepções, incluindo 9.49

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

Ludwig Krippahl, 2007 12

Aulas Práticas

Praticar e tirar dúvidas. Fazer parte dos trabalhos (outra parte

em casa). Todos os trabalhos e fichas para enviar

como attachment para [email protected]

Não enviem nada no corpo do email (não o vamos ler...)

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

Ludwig Krippahl, 2007 13

Aulas Práticas

Levar pendisk ou semelhante (com USB) Criar/copiar pasta para My Documents No final, copiar tudo para o pendisk. O que deixarem no PC do laboratório

pode ser apagado...

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

Ludwig Krippahl, 2007 14

Aulas Teóricas

Não é para decorar. Alguma flexibilidade:

• Rever matéria

• Abordar um problema específico

• Dúvidas...

Mas com uma aula de antecedência...

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

Ludwig Krippahl, 2007 15

Octave

Versão gratuita e open-source do Matlab

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

Ludwig Krippahl, 2007 16

Octave

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

Ludwig Krippahl, 2007 17

Octave

Alguns comandos:• pwd (present working directory)

• ls (list), ou dir

• cd (change directory)• Nota: na emulação do linux, o computador é

chama-se cygdrive. Em vez de \ usar /

• E.g. Mudar para a raiz do disco d:

cd “/cygdrive/d”

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

Ludwig Krippahl, 2007 18

Octave

Comando, resultado, comando...octave:10> 2+3

ans = 5

octave:11> ans+5

ans = 10

octave:12>

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

Ludwig Krippahl, 2007 19

Octave

; se não queremos ver o resultadooctave:12> 12*5;

octave:13> 23+1;

octave:14>

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

Ludwig Krippahl, 2007 20

Octave

Operações básicas:• + - * / ^

Variáveis:• Nome começa com letra, pode conter letras,

números, ou underscore ( _ )

• Var1, var1, x, xpto, XPTO, uma_variavel

• = atribui um valor à variável: x = 0

• Atenção à maiúsculas e minúsculas...

• ans é uma variável

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

Ludwig Krippahl, 2007 21

Octave

Exemplos• X=2 atribui 2 à variável X

• A=x erro.

• A=X OK.

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

Ludwig Krippahl, 2007 22

EdiPO

Editor de Programas Octave• Usem o ficheiro de Rascunho.

• Guardem-no

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

Ludwig Krippahl, 2007 23

Exemplo

Cálculo de concentração.• NaCL: massa molar 58.4 g/mol

• Concentração de 2g em 125ml?

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

Ludwig Krippahl, 2007 24

Exemplo

Cálculo de concentração.• NaCL: massa molar 58.4 g/mol

• Concentração de 2g em 125ml?

mmNaCl=58.4

v=0.125

q=2/mmNaCl

c=q/v

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

Ludwig Krippahl, 2007 25

Gestão de Variáveis

who lista as variáveis definidas clear “esquece-se” delas

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

Ludwig Krippahl, 2007 26

Vectores e matrizes

• Números entre [ ]

• Espaço ou virgula representa coluna nova.

• Ponto e vírgula representa linha nova.

• Vector coluna:• [1;2;3]

• Vector linha:• [1 2 3] ou [1 2 3]

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

Ludwig Krippahl, 2007 27

Vectores e matrizes

• Matriz: [1,2,3;4,5,6;7,8,9]

octave:14> m=[1,2,3;4,5,6;7,8,9]

m =

1 2 3

4 5 6

7 8 9

octave:15>

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

Ludwig Krippahl, 2007 28

Composição de vectores e matrizes

octave:15> m=[1,2;3,4]

m =

1 2

3 4

octave:16> m2=[5,6;7,8]

m2 =

5 6

7 8

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

Ludwig Krippahl, 2007 29

Composição de vectores e matrizes

octave:17> [m;m2]ans = 1 2 3 4 5 6 7 8octave:18> [m,m2]ans = 1 2 5 6 3 4 7 8octave:19>

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

Ludwig Krippahl, 2007 30

Composição de vectores e matrizes

• Atenção: tem que “encaixar”

• Matriz 2x2 com uma de 3x3 não dá

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

Ludwig Krippahl, 2007 31

Transposta: ‘ (plica)

octave:19> v=[1,2,3]v = 1 2 3octave:20> v'ans = 1 2 3octave:21>

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

Ludwig Krippahl, 2007 32

Produto de matrizes

m1 = 1 2 3 4

m2 = 2 2 2 2

m1*m2 = 6 614 14

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

Ludwig Krippahl, 2007 33

Produto de matrizes, .

m1 = 1 2 3 4

m2 = 2 2 2 2

m1.*m2 = 2 46 8

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

Ludwig Krippahl, 2007 34

Operação elemento a elemento

O ponto antes do operador indica que a operação é elemento a elemento.• M1.*M2: multiplicar cada elemento de M1

pelo correspondente em M2

• M1.^M2: elevar cada elemento de M1 pelo correspondente em M2

• Etc...

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

Ludwig Krippahl, 2007 35

Séries

No Octave podemos criar um vector linha com uma série indicando:

Inicio: [passo:] fim O passo é opcional.

• E.g. 1:2:5

[1,3,5]

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

Ludwig Krippahl, 2007 36

Sériesoctave:29> 1:0.5:3ans = 1.0000 1.5000 2.0000 2.5000 3.0000octave:30> 3:-1:0ans = 3 2 1 0octave:31> 1:10ans = 1 2 3 4 5 6 7 8 9 10octave:32> 1:9.5ans = 1 2 3 4 5 6 7 8 9

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

Ludwig Krippahl, 2007 37

Para que é que isto serve?

Cada casal de coelhos tem 4 filhos. Quantos coelhos ao fim de 10 gerações?

Dez gerações, de 1 a 10 Em cada geração temos 2, 4, 8, 16 Ou seja 21, 22, 23, 24.

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

Ludwig Krippahl, 2007 38

Para que é que isto serve?

octave:33> G=1:10

G =

1 2 3 4 5 6 7 8 9 10

octave:34> Coelhos=2.^G

Coelhos =

2 4 8 16 32 64 128 256 512 1024

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

Ludwig Krippahl, 2007 39

Aceder parte da matriz

M(linhas, colunas) Linhas e colunas pode ser vector, e

pode ser definido por uma série.

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

Ludwig Krippahl, 2007 40

Aceder parte da matriz

octave:35> m=[1,2;3,4]m = 1 2 3 4octave:36> m(2,2)ans = 4octave:37> m([1,2],2)ans = 2 4

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

Ludwig Krippahl, 2007 41

Aceder parte da matriz

octave:38> m(:,:)

ans =

1 2

3 4

octave:39> m(2:-1:1,1)

ans =

3

1

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

Ludwig Krippahl, 2007 42

Aceder parte da matriz

octave:40> m([2,1],1)

ans =

3

1

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

Ludwig Krippahl, 2007 43

Aceder parte da matriz

Elementos par da segunda linha• M( 2 , 2:2:30 ) 2, 4, 6, 8....

Duas em duas linhas, todas as colunas• M(1:3:50, : ) 1, 3, 5... : quer dizer tudo

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

Ludwig Krippahl, 2007 44

Funções e operador p/ matrizes

det determinante inv inversa

\ M \ V : resolve sistema 2x+y=0 (Eliminação de Gauss) x-y=2

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

Ludwig Krippahl, 2007 45

Funções e operador p/ matrizes

\ M \ V : resolve sistema

2x+y=0

x-y=2

octave:8> m=[2,1;1,-1]m = 2 1 1 -1octave:9> r=[0;2]r = 0 2octave:10> m\rans = 0.66667 -1.33333

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

Ludwig Krippahl, 2007 46

Funções para matrizes (ou não)

eye identidade zeros ones rand aleatório, entre 0 e 1.

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

Ludwig Krippahl, 2007 47

Funções para matrizes (ou não)

Sem argumentos: um escalar:

octave:51> eye

ans = 1

octave:52> rand

ans = 0.22768

octave:53> zeros

ans = 0

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

Ludwig Krippahl, 2007 48

Funções para matrizes (ou não) Um argumento: matriz quadrada.octave:54> eye(2)ans = 1 0 0 1octave:55> rand(3)ans = 0.854082 0.101465 0.290800 0.510179 0.018994 0.088951 0.716649 0.855890 0.813545

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

Ludwig Krippahl, 2007 49

Funções para matrizes (ou não) Dois argumentos: linhas, colunasoctave:56> zeros(2,3)ans = 0 0 0 0 0 0octave:57> ones(1,10)ans = 1 1 1 1 1 1 1 1 1 1octave:58>

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

Ludwig Krippahl, 2007 50

Funções para matrizes (ou não)

Regra geral: funções que o Octave fornece servem para escalares e matrizes.

octave:58> sin(2)

ans = 0.90930

octave:59> sin([1,2;3,4])

ans =

0.84147 0.90930

0.14112 -0.75680

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

Ludwig Krippahl, 2007 51

Funções para matrizes (ou não)

octave:60> sin(0:pi/10:pi) ans = Columns 1 through 8: 0.00000 0.30902 0.58779 0.80902 0.95106

1.00000 0.95106 0.80902 Columns 9 through 11: 0.58779 0.30902 0.00000 octave:61>

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

Ludwig Krippahl, 2007 52

Strings (texto) Um string é uma sequência de caracteres,

delimiatada por “ ” ou ‘ ’.octave:67> a="string"a = stringoctave:68> b="outra string"b = outra stringoctave:69> c=stringerror: `string' undefined near line 69 column 3error: evaluating assignment expression near

line 69, column 2

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

Ludwig Krippahl, 2007 53

Strings (texto)

Excepção para a regra de tamanho quando combinamos vectores:

octave:69> [a;b]

ans =

string

outra string

(linhas ajustadas acrescentando espaços)

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

Ludwig Krippahl, 2007 54

Strings (texto)

Excepção para a regra de tamanho quando combinamos vectores:

(linhas ajustadas acrescentando espaços)

octave:73> [[a;b][‘-';‘-']]

ans =

string -

outra string-

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

Ludwig Krippahl, 2007 55

Funções para strings (experimentem) findstr(s,t) : Encontra todas as posições de da menor na

maior. split(s,t) : Divide uma string num vector (coluna) de

strings separados por t strrep(s, x, y) : substitui todas as ocorrências de x por y

na string s str2num(s) : converte um número representado numa

string para um número tolower(s) / toupper(s) : converte uma string para

minúsculas/maiúsculas strcmp(s1,s2) : compara as strings s1 com s2, se forem

iguais retorna 1, se diferentes retorna 0

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

Ludwig Krippahl, 2007 56

Funções para strings (exemplos)

octave:74> findstr('a','abcababba')

ans =

1 4 6 9

octave:75> findstr('abcababba','a')

ans =

1 4 6 9

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

Ludwig Krippahl, 2007 57

Funções para strings (exemplos)

octave:76> split('um;dois;três;quatro',';')

ans =

um

dois

três

quatro

octave:77>

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

Ludwig Krippahl, 2007 58

Gráficos 2D

plot(x,y) (x e y vectores) hold on para não tirar gráfico

anterior clearplot apagar multiplot(cols,linhas), oneplot subwindow(coluna, linha) Atenção: coluna primeiro, linha depois!

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

Ludwig Krippahl, 2007 59

Gráficos 3D

Nos gráficos 3D o domínio é um par de matrizes, e não um vector. Para criar as matrizes a partir dos vectores x e y:

[mx,my]=meshdom(x,y); Usar ; senão aparece imenso lixo... Meshdom devolve 2 matrizes, por isso

especificar [m1,m2].

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

Ludwig Krippahl, 2007 60

Gráficos 3D (exemplo)

oneplot

clearplot

x=-5:5;

y=-1:9;

[X,Y]=meshdom(x,y);

mesh(X,Y,10*X.^2-Y.^3);

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

Ludwig Krippahl, 2007 61

Para estudar isto

Guia de estudo, secções 1 e 2 Manual Octave

• Capitulos 1 (geral), 5 (strings), 8.1 (indexação)

Praticar...