A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5.

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5."— Transcrição da apresentação:

1 Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5

2 Ludwig Krippahl, Na aula de hoje... Estruturas. Vectores de estruturas (structure arrays). Leitura formatada. Recursividade Gráficos 3D

3 Ludwig Krippahl, Estruturas Vectores e matrizes guardam valores de um só tipo. Estruturas podem guardar valores de vários tipos. Sintaxe: variável.campo

4 Ludwig Krippahl, Estruturas Exemplo: octave:7> prato.nome="filetes"; octave:8> prato.preco=12.5; octave:9> prato.pedidos=[10,2,3,5,9,5,9]; octave:10> prato prato = { nome = filetes pedidos = preco = }

5 Ludwig Krippahl, Estruturas prato = { nome = filetes pedidos = preco = } Estrutura

6 Ludwig Krippahl, Estruturas prato = { nome = filetes pedidos = preco = } Campos

7 Ludwig Krippahl, Estruturas prato = { nome = filetes pedidos = preco = } Valores

8 Ludwig Krippahl, Estruturas Recapitulando nome_da_variavel.campo1=val1 nome_da_variavel.campo2=val2 nome_da_variavel.campo3=val3 Cada campo pode ter um valor de tipo diferente, incluindo ser outra estrutura.

9 Ludwig Krippahl, Estruturas Estrutura de estrutura... octave:13> cliente.nome="Vitor Meireles"; octave:14> cliente.prato=prato cliente = { nome = Vitor Meireles prato = { nome = filetes pedidos = preco = }

10 Ludwig Krippahl, Structure arrays Podemos criar vectores de estruturas, desde que as estruturas tenham os mesmos campos (os valores do mesmo campo podem ser de tipos diferentes, mas não convém...) x.a=1 x.b=2 y.a=3 y.b=s V=[x,y]

11 Ludwig Krippahl, Structure arrays Não podemos criar vectores de estruturas se os campos forem diferentes y.c=4(acrescentamos um campo c ao y) V=[x,y](dá erro...)

12 Ludwig Krippahl, Structure arrays Um vector de estruturas funciona como um vector. for f=1:10 x(f).a=f; endfor x(2:2:10) Nota: podemos criar um vector atribuindo valores aos seus elementos: v(1)=1, v(2)=1...

13 Ludwig Krippahl, Structure arrays Se acrescentarmos um campo a um elemento acrescenta a todos, mas vazio. for f=1:10 x(f).a=f; endfor x(2:2:10) x(2).b=0

14 Ludwig Krippahl, Structure arrays Podemos também atribuir um valor a um campo de todos (ou alguns) elementos do vector x(:).b=1 x(1:5).b=2

15 Ludwig Krippahl, Exemplo: massa molecular Uma função que receba uma fórmula química e devolva a massa molecular. massamol(CHCl3) ans =

16 Ludwig Krippahl, Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos (e.g. Cl3 são 3 àtomos de Cl) Somar tudo.

17 Ludwig Krippahl, Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt (SQNomeNAMassaGP) AcActinium AgSilver AlAluminium AmAmericium

18 Ludwig Krippahl, Exemplo: massa molecular Saber as massas atómicas Ficheiro elementos.txt Separado por tabs

19 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Variáveis onde guardar os valores.

20 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Identificador do ficheiro

21 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Formatação dos valores a ler (string, string, inteiro, fraccionário, inteiro, inteiro)

22 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) O fscanf considera qualquer espaço em branco (espaço, tab, nova linha) como separando os valores e ignora-o. Por isso não precisamos dizer onde estão os tabs, etc. Mas se houver um espaço numa string o fscanf pensa que são duas.

23 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Para os códigos da formatação ver printf (14.2.4)

24 Ludwig Krippahl, Exemplo: massa molecular Leitura formatada (fscanf) [simb,nome,na,massa,grupo,periodo]= fscanf(id,"%s%s%d%f%d%d","C"); Indica que é para funcionar como na linguagem C. É importante não esquecer isto.

25 Ludwig Krippahl, Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%s%s%d%f%d%d","C"); els(f).simb=simb; els(f).nome=nome; els(f).na=na; els(f).massa=massa; els(f).grupo=grupo; els(f).periodo=periodo; f=f+1; endwhile fclose(id); endfunction

26 Ludwig Krippahl, Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Abre o ficheiro

27 Ludwig Krippahl, Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Enquanto não chega ao fim lê cada linha para várias variáveis

28 Ludwig Krippahl, Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction e constrói o elemento f do vector de estruturas

29 Ludwig Krippahl, Exemplo: massa molecular function els=lerelementos(nome) id=fopen(nome,"r"); f=1; while !feof(id) [simb,nome,na,massa,grupo,periodo]=fscanf(id,"%.... els(f).simb=simb; [...] f=f+1; endwhile fclose(id); endfunction Incrementa f para o próximo elemento

30 Ludwig Krippahl, Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.

31 Ludwig Krippahl, Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva.

32 Ludwig Krippahl, Exemplo: massa molecular Decompor a fórmula: Retirar da primeira letra até à primeira maiúscula. Decompor o resto, se sobrar. Função recursiva. Decompor CH3Cl é C, e decompor H3Cl

33 Ludwig Krippahl, Recursividade Factorial: N! = N * (N-1) * (N-2) *.. N! = N * (N-1)!

34 Ludwig Krippahl, Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Condição de paragem. É importante ser primeiro (ou antes de chamar a função novamente)

35 Ludwig Krippahl, Recursividade Factorial: function f=factorial(n) if n<=1 f=1; else f=n*factorial(n-1); endif endfunction Chamada recursiva. N!= N* (N-1)!

36 Ludwig Krippahl, Exemplo: massa molecular function le=decompor(formula) le=[]; if length(formula)>0 Guarda o 1º elemento, incluindo o número. Em p guarda a posição do próximo elemento if p<=length(formula) le=[le,decompor(formula(p:length(formula)))]; endif endfunction

37 Ludwig Krippahl, Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Guarda 1ª letra. A quantidade é string vazia e assume que não há próxima

38 Ludwig Krippahl, Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor A partir do 2º caracter, se for digito vai para a string da quantidade

39 Ludwig Krippahl, Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor senão, se for minúscula vai para o elemento.

40 Ludwig Krippahl, Exemplo: massa molecular le(1).el=formula(1); quant=""; p=length(formula)+1; for f=2:length(formula) if isdigit(formula(f)) quant=[quant,formula(f)]; elseif islower(formula(f)) le(1).el=[le(1).el,formula(f)]; else p=f; break; endif endfor Caso contrário há próximo. Guarda-se a posição em p e termina-se este ciclo

41 Ludwig Krippahl, If, caso geral (if, elseif, else) if cond1 se a cond1 for verdadeira elseif cond2 se a cond1 for falsa e a cond2 verdadeira elseif else caso nenhuma seja verdadeira endif

42 Ludwig Krippahl, Exemplo: massa molecular if !strcmp(quant,"") le(1).quant=str2num(quant); else le(1).quant=1; endif Terminado o ciclo guarda-se o número na quantidade, ou 1 se nenhuma quantidade foi encontrada

43 Ludwig Krippahl, Exemplo: massa molecular Precisamos de: Saber as massas atómicas Decompor a fórmula guardando o número de átomos Somar tudo.

44 Ludwig Krippahl, Exemplo: massa molecular Encontrar a massa de um elemento na tabela function m=massael(simbolo,lista) m=0; for f=1:length(lista) if strcmp(lista(f).simb,simbolo) m=lista(f).massa; break endif endfor endfunction

45 Ludwig Krippahl, Exemplo: massa molecular Calcular tudo function m=massamol(formula) lista=lerelementos("elementos.txt") c=decompor(formula); m=0; for f=1:length(c) m=m+massael(c(f).el,lista)*c(f).quant; endfor endfunction

46 Ludwig Krippahl, Resumindo Leitura formatada (fscanf) Estruturas e vectores de estruturas Recursividade Massa molecular Ler os dados Partir a fórmula química em elementos e número Percorrer o vector encontrando a massa de cada elemento e somando

47 Ludwig Krippahl, Gráficos 3D Função meshgrid: cria matrizes para x, y [xx,yy]=meshgrid(1:3,4:6) xx = yy =

48 Ludwig Krippahl, Gráficos 3D Função mesh: traça o gráfico 3D rede x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); mesh(xx,yy,xx.^2-yy.^2+xx.*yy)

49 Ludwig Krippahl, Gráficos 3D

50 Ludwig Krippahl, Gráficos 3D Função surf: traça o gráfico 3D sólido x=-10:10; y=-10:10; [xx,yy]=meshgrid(x,y); surf(xx,yy,xx.^2-yy.^2+xx.*yy)

51 Ludwig Krippahl, Gráficos 3D

52 Ludwig Krippahl, Gráficos 3D Resumo: usar meshgrid para criar as matrizes para o x e y a partir dos vectores. calcular o z a partir das matrizes criadas com o meshgrid. mesh(x,y,z) para desenhar a rede surf(x,y,z) para superfície sólida.

53 Ludwig Krippahl, Resumindo... Estruturas e vectores de estruturas Secção 6.1 Data Structures Leitura formatada Secção 14.2 C-Style I/O Functions if – elseif – else Secção 10 Statements (10.1 para o if) Recursividade Gráficos 3D Secção 15.1 Plotting Basics

54 Ludwig Krippahl, Próximas teóricas... 6: apresentação do trabalho 1 7: revisões e dúvidas

55 Ludwig Krippahl, Próxima prática Cálculo do ponto isoeléctrico de proteínas. Trabalho 1 de 07-08

56 Ludwig Krippahl, Problema Proteínas Sequência de aminoácidos

57 Ludwig Krippahl, Problema Ponto isoeléctrico Dois grupos protonáveis pKa=10 pKa=2

58 Ludwig Krippahl, Problema Ponto isoeléctrico Henderson-Hasselbalch

59 Ludwig Krippahl, Problema Ponto isoeléctrico pH=0, carga +1 pKa=10 pKa=2 +1 0

60 Ludwig Krippahl, Problema Ponto isoeléctrico pH=2, carga +0.5 pKa=10 pKa=

61 Ludwig Krippahl, Problema Ponto isoeléctrico pH=7, carga 0 pKa=10 pKa=2 +1

62 Ludwig Krippahl, Problema Ponto isoeléctrico pH=10, carga -0.5 pKa=10 pKa=2 +0.5

63 Ludwig Krippahl, Problema Ponto isoeléctrico pH=12, carga -1 pKa=10 pKa=2 0

64 Ludwig Krippahl, Problema Proteínas

65 Ludwig Krippahl, Problema Proteínas

66 Ludwig Krippahl, Problema Proteínas +1

67 Ludwig Krippahl, Problema Proteínas

68 Ludwig Krippahl, Ficheiro pKas.txt CodigoCOOHNH3C.L.Carga(Desp) A C D E F V W Y

69 Ludwig Krippahl, Simplificação Calcular a carga a cada pH considerando: NH3 do primeiro da sequência Tem carga 0 desprotonado COOH do último da sequência Tem carga -1 desprotonado Cadeias laterais dos intermédios Ler a carga na tabela

70 Ludwig Krippahl, Cargas em função do pH

71 Ludwig Krippahl, Ficheiro seqs.txt > UniProt/Swiss-Prot|P00273|DESR_DESGI Desulforedoxin ANEGDVYKCELCGQVVKVLEEGGGTLVCCGEDMVKQ >UniProt/Swiss-Prot|P14073|FER_BUTME Ferredoxin AYKITDECIACGSCADQCPVEAISEGSIYEIDEALCTDCGACADQCPVEAIVPED >UniProt/Swiss-Prot|Q46495|DESR_DESBR Desulfoferrodoxin MPERLQVYKCEVCGNIVEVLNGGIGELVCCNQDMKLMSENTVDAAKEKHVPVIEKIDGGY KVKVGAVAHPMEEKHYIQWIELLADDKCYTQFLKPGQAPEAVFLIEAAKVVAREYCNIHG HWKAEN >UniProt/Swiss-Prot|P14393|GLB_APLJU Globin ALSAADAGLLAQSWAPVFANSDANGASFLVALFTQFPESANFFNDFKGKSLADIQASPKL RDVSSRIFARLNEFVSNAADAGKMGSMLQQFATEHAGFGVGSAQFQNVRSMFPGFVASLS APAADAAWNSLFGLIISALQSAGK >UniProt/TrEMBL|Q4VSD1|Q4VSD1_9HIV1 Protease SSCSFPQITLWQRTLVTVKIGGQLKEALLDTGADDTVLEDINLPGKWKPRMIGGIGGFIK VKQYDQILIEICGKKAIGTVLVGPTPVNIIGRNMLTQIGCTLNFPISPI

72 Ludwig Krippahl, Ler sequências de proteínas. O formato FASTA é um formato de texto para guardar sequências. As linhas começadas por > identificam a molécula (proteína, RNA, ou DNA): >UniProt/Swiss-Prot|P00273|DE....

73 Ludwig Krippahl, Objectivo da aula Perceber o problema Compreender as funções e ficheiros fornecidos Planear como encaixam Implementar o que falta para pôr tudo a funcionar: Ler o ficheiro das sequências e produzir um ficheiro com os pontos isoeléctricos.

74 Ludwig Krippahl, Dúvidas


Carregar ppt "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 5."

Apresentações semelhantes


Anúncios Google