ludwig krippahl, 2007 programação para as ciências experimentais 2006/7 teórica 1
TRANSCRIPT
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?...
Ludwig Krippahl, 2007 3
Na aula de hoje...
Objectivos, trabalhos e avaliação Aulas teóricas e práticas Octave e EdiPO
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.
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...
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.
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.
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.
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.
Ludwig Krippahl, 2007 10
Avaliação Teórica
Exame individual escrito:• Principalmente Octave.
• Um pouco de Excel.
• Vestígios de conceitos teóricos.
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
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...)
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...
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...
Ludwig Krippahl, 2007 15
Octave
Versão gratuita e open-source do Matlab
Ludwig Krippahl, 2007 16
Octave
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”
Ludwig Krippahl, 2007 18
Octave
Comando, resultado, comando...octave:10> 2+3
ans = 5
octave:11> ans+5
ans = 10
octave:12>
Ludwig Krippahl, 2007 19
Octave
; se não queremos ver o resultadooctave:12> 12*5;
octave:13> 23+1;
octave:14>
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
Ludwig Krippahl, 2007 21
Octave
Exemplos• X=2 atribui 2 à variável X
• A=x erro.
• A=X OK.
Ludwig Krippahl, 2007 22
EdiPO
Editor de Programas Octave• Usem o ficheiro de Rascunho.
• Guardem-no
Ludwig Krippahl, 2007 23
Exemplo
Cálculo de concentração.• NaCL: massa molar 58.4 g/mol
• Concentração de 2g em 125ml?
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
Ludwig Krippahl, 2007 25
Gestão de Variáveis
who lista as variáveis definidas clear “esquece-se” delas
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]
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>
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
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>
Ludwig Krippahl, 2007 30
Composição de vectores e matrizes
• Atenção: tem que “encaixar”
• Matriz 2x2 com uma de 3x3 não dá
Ludwig Krippahl, 2007 31
Transposta: ‘ (plica)
octave:19> v=[1,2,3]v = 1 2 3octave:20> v'ans = 1 2 3octave:21>
Ludwig Krippahl, 2007 32
Produto de matrizes
m1 = 1 2 3 4
m2 = 2 2 2 2
m1*m2 = 6 614 14
Ludwig Krippahl, 2007 33
Produto de matrizes, .
m1 = 1 2 3 4
m2 = 2 2 2 2
m1.*m2 = 2 46 8
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...
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]
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
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.
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
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.
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
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
Ludwig Krippahl, 2007 42
Aceder parte da matriz
octave:40> m([2,1],1)
ans =
3
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
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
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
Ludwig Krippahl, 2007 46
Funções para matrizes (ou não)
eye identidade zeros ones rand aleatório, entre 0 e 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
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
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>
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
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>
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
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)
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-
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
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
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>
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!
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].
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);
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...