Introdução ao Direcionada para o método de elementos finitos Adriano Chaves Lisboa. Douglas Alexandre Gomes Vieira 24 de agosto de 2009 Introdução ao
Tipo de linguagem Bibliotecas básicas Caixas de ferramenta Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Figura Parâmetros de objetos Eixo Introdução ao
Tipo de linguagem Conteúdo Tipo de linguagem Bibliotecas básicas Caixas de ferramenta Linguagem interpretada tempo de interpretação tempo de execução k = k + 1, k Z x = A 1 b, A C 1000 1000 macro-operações matrizes operadores e funções mais recorrentes identificação automática de tipo Lógico: b = true Numérico: k = 1, z = 1 + i Caractere: s = a Estrutura: s.a = 1 Célula: c = {1, a } Introdução ao
Tipo de linguagem Bibliotecas básicas Caixas de ferramenta Bibliotecas básicas Interface do : e.g. edit, help básicas sobre tipos: e.g. char, sum, max matemáticas: e.g. sin, cos, erf, gamma, bessel, ellipke Métodos numéricos básicos: e.g. polinômios, integração, LU : e.g. polilinhas, malhas Manipulação de arquivos Data e hora Áudio e vídeo Interface do computador: e.g. porta serial Interface gráfica Matrizes esparsas Introdução ao
Tipo de linguagem Bibliotecas básicas Caixas de ferramenta Caixas de ferramenta Estatística Mapas Equações diferenciais parciais Matemática simbólica... Introdução ao
Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Prompt o prompt é uma janela onde os comandos dados linha por linha cada comando é escrito após >> e é executado ao teclar ENTER To get started, select MATLAB Help or Demos from the Help >> Hello, world! tudo escrito após o caracter % é comentário, e não comando >> % nada irá acontecer após teclar ENTER >> clc % comando para limpar a tela do prompt Introdução ao
Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Declarando variáveis todas variáveis são inicializadas para detectar seu tipo atribuição >> a = 1 % <a> é um double inicializado com 1 >> a = c % <a> agora é um caracter inicializado com c variável ans é criada quando nenhum nome é dado >> 1 % <ans> é um double inicializado com 1 >> c % <ans> agora é um caracter inicializado com c Introdução ao
Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Constantes numéricas importantes pi: o número π = 3, 1415926... i, j: o número imaginário i = j = 1 inf: infinito inf = 1/0 NaN: not-a-number NaN = 0/0 = inf*0 Introdução ao
Mostrando variáveis Conteúdo Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis o ponto e vírgula impede que o valor da variável seja mostrado... >> 1; % atribui mas não mostra o valor de <ans> >> a = c ; % atribui mas não mostra o valor de <a>... e se a variável já está definida ela pode ser mostrada >> a = pi; % <a> é um double inicializado com pi >> a % mostra o valor de <a> >> a; % nada acontece >> b % erro: b não existe Introdução ao
Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Listando variáveis listando variáveis existentes who lista variáveis whos lista variáveis com seus respectivos tipos >> i; % <ans> é um double complexo inicializado com 0 + i >> a = c ; % <a> é um caracter inicializado com c >> b = false; % <b> é um binário inicializado com false >> who >> whos Introdução ao
Prompt Declarando variáveis Mostrando variáveis Listando variáveis Destruindo variáveis Destruindo variáveis destruindo variáveis clear x y z destrói variáveis x, y e z clear all destrói todas as variáveis >> i; % <ans> é um double complexo inicializado com 0 + i >> all = c ; % <all> é um caracter inicializado com c >> b = false; % <b> é um binário inicializado com false >> who >> clear all % destrói variável <all> >> who >> clear all % destrói todas as variáveis: <ans> e <b> >> who Introdução ao
lista de elementos é delimitada por parenteses elementos de uma mesma linha são separados por vírgula ou espaço para mudar de linha é usado ponto e vírgula >> a = [1 2 3] % define vetor <a> 1 x 3 >> b = [1; 2; 3] % define vetor <b> 3 x 1 >> c = [1, 2; 3, 4] % define matriz <c> 2 x 2 >> d = [1-2 3; 3-4 1 2] % define matriz <d> 2 x 3 >> e = [1 2; 3 4 5] % erro: concatenação inconsistente >> f = [c d] % define matriz <f> 2 x 5 Introdução ao
Operador : Conteúdo o operador : permite definir um vetor por incremento i:f gera o vetor [i i + 1 i + 2... f ] i:d:f gera o vetor [i i + d i + 2d... i + nd], onde i + nd f >> a = 1:3 % define vetor <a> 1 x 3 >> b = 1:2:6 % define vetor <b> 1 x 3 >> c = [4:-1:1; 1 2:2:4 1] % define matriz <c> 2 x 4 Introdução ao
Conteúdo qualquer variável pode ser salva e restaurada de maneira muito simples save file x y z salva as variáveis x, y e z no arquivo file.mat load file carrega as variáveis x, y e z do arquivo file.mat >> a = 1:3 % define vetor <a> 1 x 3 >> b = 2 % define variável <b> >> save mydata a b % salva variáveis <a> e <b> >> clear all % destrói variáveis <a> e <b> >> load mydata % restaura variáveis <a> e <b> >> clear all % destrói variáveis <a> e <b> >> load mydata b % restaura apenas variável <b> Introdução ao
Conteúdo como salvar uma sequência de comandos do prompt? scripts: sequência de comandos, como feita no prompt funções: permite receber e retornar variáveis possui um editor de texto com marcador de sintaxe >> edit % mostra editor >> edit clc % abre arquivo clc.m no editor Introdução ao
Conteúdo sequência de comandos compartilha escopo do prompt % este código está salvo em um arquivo test.m a = 1:3 % define variável <a> no escopo do prompt who % lista todas variáveis do prompt (incluindo <a>) Introdução ao
Problema de treliças Conteúdo y 4 4 250kN 3 3 2 0,3m Área de seção: A = 0, 0001m 2 Módulo de Young: E = 295GN/m 2 2 1 1 200kN x 0,4m Introdução ao
Definição de um problema de treliças 4 1 y 4 3 1 0,4m 250kN 3 2 0,3m 2 200kN x p: matrix 4 2 com as coordenadas (x, y) dos nós e: matrix 4 2 com a conectividade (i, j) de aresta b: matrix 4 2 binária indicando coordenadas fixas de cada nó f: matrix 4 2 com a força externa em cada nó A: vetor 4 1 com a área de seção de cada aresta E: vetor 4 1 com o módulo de Young de cada aresta Introdução ao
de definição de um problema de treliças % este código está salvo em um arquivo truss.m p = [0 0;.4 0;.4.3; 0.3]; % coordenadas dos nós (m) e = [1 2; 3 2; 1 3; 4 3]; % connectividade de aresta b = [1 1; 0 1; 0 0; 1 1]; % coordenadas fixas de cada nó f = [0 0; 20e4 0; 0-25e4; 0 0]; % força externa em cada nó (N) A = [1e-4; 1e-4; 1e-4; 1e-4]; % área de cada barra (mˆ2) E = [295e9; 295e9; 295e9; 295e9]; % módulo de Young (Pa) Introdução ao
Conteúdo if <expressão lógica> <procedimento> elseif <expressão lógica> <procedimento> else <procedimento> end switch <variável> case <constante> <procedimento> case <constante> <procedimento> otherwise <procedimento> end Introdução ao
Conteúdo for <contador> = <vetor> <procedimento> end while <expressão lógica> <procedimento> end break % sai do loop mais interno continue % pula o restante do código do loop return % sai da função ou script Introdução ao
com matrizes Conteúdo são definidas na linguagem todas as operações básicas com matrizes p = [0 0;.4 0;.4.3; 0.3] % matriz 4 x 2 d = [1; 1] % vetor 2 x 1 p % matriz 2 x 4: transposto de matriz p + 2*p % matriz 4 x 2: adição de matrizes p*d % vetor 4 x 1: multiplicação de matrizes (p *p)ˆpi % matriz 2 x 2: exponenciação de matriz (p *p)\d % vetor 2 x 1: inverão de matriz d/(p *p) % erro: dimensões não concordam Introdução ao
elemento-a-elemento adição e subtração são naturalmente operações elemento-a-elemento são definidas na linguagem outras operações elemento-a-elemento estas operações são identificadas com um ponto antes do operador a = [0 0;.4 0;.4.3] % matriz 3 x 2 b = [.4.3;.4 0; 0 0] % matriz 3 x 2 a.*b % matriz 3 x 2: multiplicação elemento-a-elemento a./b % matriz 3 x 2: divisão elemento-a-elemento a.ˆb % matriz 3 x 2: exponenciação elemento-a-elemento a.*b % erro: dimensões não concordam Introdução ao
lógicas e comparativas são definidas na linguagem todas as operações lógicas e comparativas básicas com matrizes a = [0 2; 3 3; 2 0] % matriz 3 x 2 a == 3 % valor: [false false; true true; false false] a = 2 % valor: [true false; true true; false true] a < 3 % valor: [true true; false false; true true] a % valor: [true false; false false; false true] a & (a-2) % valor: [false false; true true; false false] Introdução ao
Conteúdo o primeiro índice de uma matriz é relativo à linha o segundo índice de uma matriz é relativo à coluna matrizes podem ser indexadas por vetores variável especial end tamanho ao longo da respectiva dimensão variável especial : todos elementos ao longo da respectiva dimensão M = [1 2 3; 4 5 6] % define matriz 2 x 3 M(2,1) % valor: [4] M(1,end) % valor: [3] M(2,:) % valor: [4 5 6] M(:,2) % valor: [2; 5] M(:,2:end) % valor: [2 3; 5 6] M(:,[3 1 2 3]) % valor: [3 1 2 3; 6 4 5 6] Introdução ao
linear Conteúdo uma matriz é armazenada na memória como um vetor segundo a ordem de indexação... e.g. [1 2 3; 4 5 6] é armazenada como 1, 4, 2, 5, 3, 6... e quando é indexada com apenas um índice, ela retorna o respectivo elemento matrizes podem ser indexadas linearmente por vetores M = [1 2 3; 4 5 6] % define matriz 2 x 3 M(3) % valor: [2] M(end) % valor: [6] M(1:3) % valor: [1 4 2] M(1:end) % valor: [1, 4, 2, 5, 3, 6] M([end/2:end] ) % valor: [2; 5; 3; 6] M(:) % valor: [1; 4; 2; 5; 3; 6] Introdução ao
lógica Conteúdo um vetor lógico b pode ser usado para indexar uma matriz...... e o resultado é equivalente à indexação com as posições que contêm elementos true M = [1 2 3; 4 5 6] % define matriz 2 x 3 M(:,M(1,:)>1) % valor: [2 3; 5 6] M(M<=4) % valor: [1; 4; 2; 3] Introdução ao
Conteúdo sequência de comandos escopo próprio e não enxerga o escopo do prompt pode receber e retornar vários parâmetros % este código está salvo em um arquivo func.m function [x,y,z] = func(r,s,t) x = r + s + t; y = r.*s.*t; z = (r./s).ˆt; Introdução ao
Help de arquivos.m Conteúdo o comando help mostra o texto de ajuda do arquivo.m help clc % exibe ajuda sobre clc.m help help % exibe ajuda sobre help.m o texto de ajuda exibido são as primeiras linhas contíguas de comentários do arquivo.m function ajuda %AJUDA Este é o texto de ajuda da função ajuda. % este código está salvo em um arquivo ajuda.m % Exemplo: % help ajuda % exibe este texto % See also HELP. %Este comentário não faz parte da ajuda. Introdução ao
matemáticas do trigonométricas: sin, cos, tan, atan, asin, acos logaritmas e exponenciais: exp, log, log2, log10 Introdução ao
de matrizes Conteúdo Especiais: zeros, ones, eye, rand, randn Tamanho: isempty, size, length Classificação: sort, unique Valor: sum, max, min, mean Formato: reshape, repmat, ndgrid Partes: diag, triu, tril Lógica: all, any, find Inteira: round, fix, ceil, floor, gcd, rem Conjuntos: ismember, intersect, union, setdiff, setxor Introdução ao
Matrizes esparsas Conteúdo matrizes esparsas só armazenam elementos não nulos speye gera uma matriz identidade esparsa I = speye(3) % matriz identidade 3 x 3 I = speye(3,3) % mesma matriz identidade 3 x 3 I = speye(3,4) % matriz identidade 3 x 4 S = sparse(m) converte a matriz cheia M para matriz esparsa S M = full(s) converte a matriz esparsa S para matriz cheia M Introdução ao
Matrizes esparsas Conteúdo sparse(i,j,v,m,n) gera uma matriz esparsa m n onde elementos não nulos v são colocados nas posições indexadas por i e j, e elementos indexados à mesma posição são somados S = sparse(2,3) % [0 0 0; 0 0 0] S = sparse(1,[2 1e3],[1 10],1,1e3) % [1 0... 0 1000] S = sparse([2 1 2],1:3,4,2,3) % [0 4 0; 4 0 4] S = sparse([1 3; 4 3],1,1,5,1) % [1; 0; 2; 1; 0] Introdução ao
Método de elementos finitos para treliças Entrada: Saída: p: matriz n 2 de coordenadas dos nós e: matriz m 2 com connectividade de arestas f : matriz n 2 com força externa em cada nó b: matriz n 2 sinalizando coordenadas fixas em cada nó A: vetor m 1 área de seção de cada barra E: vetor m 1 módulo de Young de cada barra d: matriz n 2 com o deslocamento de cada nó σ: vetor m 1 com a tensão em cada barra Introdução ao
Protótipo da função Conteúdo Dado p, e, f, b, A e E, determinar d e σ function [d,sigma] = solvetruss(p,e,f,b,a,e) %SOLVETRUSS Solução do problema de treliças. Introdução ao
Formulação Conteúdo e i1 O deslocamento dos nós d = [d x d y ] R n 2 pode ser determinado pelo sistema de equações lineares [ ] [ ] fx dx = K L i A i i e i2 f y d y K i = AiEi L i aa T = K i11 K i12 K i13 K i14 K i21 K i22 K i23 K i24 K i31 K i32 K i33 K i34 K i41 K i42 K i43 K i44 a = [cos θ i cos θ i sin θ i sin θ i] e i1 e i2 e i1 + n e i2 + n onde i = 1,..., m, K R 2n 2n é a matriz de rigidez e f = [f x f y ] R n 2 é o vetor de força. Introdução ao
Comprimento e ângulo das barras Dado p e e, determinar L e θ % comprimento das barras (m) dp = p(e(:,2),:) - p(e(:,1),:); L = sum(dp.ˆ2, 2).ˆ.5 % ângulo das barras (rad) theta = atan2(dp(:,2), dp(:,1)); Introdução ao
Construção da matriz de rigidez % matriz de rigidez n = size(p,1); % número de nós c = cos(theta); s = sin(theta); c2 = A.*E./L.*c.*c; cs = A.*E./L.*c.*s; s2 = A.*E./L.*s.*s; kd = [c2 c2 s2 s2]; % elementos diagonais knd = [-c2 -s2 cs cs -cs -cs]; % elementos não-diagonais ie = [e e+n... e(:,1) e(:,1)+n e(:,[1 2 1 2])... e(:,2) e(:,2)+n e(:,[1 2 2 1])+n]; je = [e e+n... e(:,2) e(:,2)+n e(:,[1 2 2 1])+n... e(:,1) e(:,1)+n e(:,[1 2 1 2])]; K = sparse(ie,je,[kd knd knd],2*n,2*n); Introdução ao
Condições de contorno Conteúdo Os deslocamentos relativos às coordenadas fixas dos nós são nulos. % condições de contorno ib = find(b(:)); K(ib,:) = 0; K(:,ib) = 0; K(ib+2*n*(ib-1)) = 1; f = f(:); f(ib) = 0; Introdução ao
Deslocamento e tensão Conteúdo % deslocamento (m) d = full(reshape(k\f,n,2)); % tensão (Pa) sigma = E.*sum([-c -s c s].*... [d(e(:,1),:) d(e(:,2),:)],2)./l; Introdução ao
Figura Parâmetros de objetos Eixo Figura figura é uma janela que pode conter axes: eixos para gráficos uicontrol: controles de interface de usuário uma figura é unicamente identificada por um número (handle) retornado pela função que a cria axes e uicontrol são adicionados na figura corrente gcf retorna o handle da figura corrente clf destrói todos objetos filhos da figura corrente figure % cria uma nova janela h2 = figure % cria uma nova figura h3 = figure % cria uma nova figura h4 = gcf % <h4> é igual a <h3> figure(h2) % torna a figura <h2> corrente h5 = gcf % <h5> é igual a <h2> Introdução ao
Figura Parâmetros de objetos Eixo Parâmetros de objetos todo objeto gráfico do é definido por parâmetros cada parâmetro é setado por um par de argumentos o primeiro é uma string com o nome do parâmetro o segundo é um valor para o parâmetro set e get permitem setar e pegar parâmetros de um objeto através do respectivo handle h1 = figure( color, white, name, White ) h2 = figure( color, black, name, Black ) set(h1) % mostra todas opções para os parâmetros de <h1> get(h1) % mostra todos os valores dos parâmetros de <h1> get(h2, color ) % pega cor de <h2> set(h2, color, red, name, Red ) % muda parâmetros de <h2> get(h2, color ) % pega cor de <h2> Introdução ao
Figura Parâmetros de objetos Eixo Eixo eixos são objetos contidos em uma figura e podem conter gráficos um eixo é unicamente identificado por um número (handle) retornado pela função que o cria gráficos são plotados no eixo corrente gca retorna o handle do eixo corrente cla destrói todos objetos filhos do eixo corrente % uma figura será automaticamente criada caso não exista nenhum h1 = axes( nextplot, add ) % cria um novo eixo h2 = axes( color, black ) % cria um novo eixo set(h1, position,[.1.1.8.3]) % muda posição de <h1> set(h2, position,[.1.6.8.3]) % muda posição de <h2> axes(h1) % torna eixo <h1> corrente Introdução ao
Figura Parâmetros de objetos Eixo Atalhos úteis para parâmetros de eixos para facilitar o uso, foram definidas uma série de funções para setar parâmetros de eixos nas formas mais recorrentes hold on próximo objeto será adicionado aos objetos do eixo, e equivale a set(gca, nextplot, add ) hold off próximo objeto substituirá todos os objetos do eixo, e equivale a set(gca, nextplot, replace ) box, grid, axis, view, zoom, pan Introdução ao
Polilinhas Conteúdo Figura Parâmetros de objetos Eixo Criadas pelas funções plot e plot3 % uma figura e um eixo serão automaticamente criados t = 0:pi/8:10*pi; % parâmetro de curva x = cos(t); % coordenada x y = sin(t); % coordenada y 10 z = t/pi; % coordenada z 5 plot(z.*x, z.*y, k:,... % espiral z(end)*x, z(end)*y, r- ) % círculo 0 10 hold on % próximo plot será adicionado 5 plot3(z.*x, z.*y, z, b.- ) % hélice 0 5 axis image % ajusta eixos aos gráficos 10 view(3) % coloca câmera em um "ângulo 3D" legend( espiral, círculo, hélice cônica ) 10 5 0 espiral círculo hélice cônica 10 5 Introdução ao
Figura Parâmetros de objetos Eixo Cores direto: vetor com 3 componentes RGB no intervalo [0, 1] strings são aceitas como argumentos para cores pré-definidas e.g. branco é [1 1 1], preto é [0 0 0], azul é [0 0 1] mapa de cores: escalar interpolação linear para mapear um intervalo de valores [a,b] no índice da paleta de cores pode ser definida apenas uma paleta de cores para cada figura pode ser definido apenas um intervalo de valores para cada eixo Introdução ao
Malhas Conteúdo Figura Parâmetros de objetos Eixo Criadas pela função patch % uma figura e um eixo serão automaticamente criados p = [0 0 0; 1 0 0; 1 1 0; 0 1 0;... 0 0 1; 1 0 1; 1 1 1; 0 1 1]; % vértices t = [4 3 2 1; 5 6 7 8; 1 2 6 5;... 2 3 7 6; 3 4 8 7; 4 1 5 8]; % faces patch( vertices, p, faces, t,... facevertexcdata, p, facecolor,... interp, edgecolor, [0 0 0]) axis image view(3) xlabel( r ) ylabel( g ) zlabel( b ) title( cubo RGB ) Introdução ao
Grades Conteúdo Figura Parâmetros de objetos Eixo Suprfícies em grades criadas pelas funções surf e mesh Curvas de nível em grades criadas pelas funções contour, contour3 e contourf % uma figura e um eixo serão automaticamente criados x = 0:5; 25 y = 0:5; 20 z = x *y; 15 surf(-x, y, z) 10 hold on 5 mesh(x, y, z) 0 5 contour(x, -y, z, 16) 0 contourf(-x, -y, z, 16) 5 5 axis([-5 5-5 5 0 25]) 0 5 Introdução ao
Plotando problema de treliças Figura Parâmetros de objetos Eixo figure( Color, [1 1 1], Name, Truss problem,... NumberTitle, off ) axes( nextplot, add ) Truss problem h = patch( Vertices, p, Faces, e,... EdgeColor,[0 0 0]); % graph quiver(p(:,1), p(:,2), f(:,1), f(:,2),....3, Color, [1 0 0]); % external forces ip = find(sum(b,2)==1); plot(p(ip,1), p(ip,2), ro ); % supports ip = find(sum(b,2)==2); plot(p(ip,1), p(ip,2), rˆ ); % supports axis image off title( Truss problem ) Introdução ao
Figura Parâmetros de objetos Eixo Plotando resultado do problema de treliças figure( Color, [1 1 1], Name, Stress,... NumberTitle, off ) axes( nextplot, add ) patch( Vertices, p, Faces, e,... EdgeColor,[1 1 1]*.9) pd = p(e,:) + d(e,:); sigmad = [sigma; sigma]; ed = reshape(1:size(pd,1),size(pd,1)/2,2); patch( Vertices, pd, Faces, ed,... FaceVertexCData, sigmad,... EdgeColor, flat ) axis image off title( Stress ) colorbar Stress x 10 9 1 0 1 2 Introdução ao
Introdução ao (este texto) : getting started guide Introdução ao