Você está na página 1de 3

11/19/23 12:52 PM untitled4.

m 1 of 3

% Propriedades do material e dimensões da barra


% Aqui estamos definindo constantes que descrevem a barra:
%E é o módulo de elasticidade, que quantifica a rigidez de um material.
%L é o comprimento da barra.
%F é a força de tração aplicada na extremidade da barra.
%d0 e dL são os diâmetros da barra nas extremidades, indicando que a barra não é
prismática (tem formato cônico).

E = 2e11; % Módulo de elasticidade (Pa)


L = 0.15; % Comprimento da barra (m)
F = 1500; % Força de tração (N)
d0 = 0.04; % Diâmetro no engaste (m)
dL = 0.02; % Diâmetro na extremidade livre (m)
% Número de elementos finitos
N = 2;

% Intervalo para variação do número de elementos finitos


N_variacao = 1:1:2; % Varia de 2 a 100 elementos
tensao_maxima = zeros(length(N_variacao), 1); % Armazena a tensão máxima para cada
N

for idx = 1:length(N_variacao)


N = N_variacao(idx);

%Os vetores são inicializados com zeros para armazenar


% os deslocamentos dos nós (displacements),
% as tensões (stresses) e as deformações (strains) que serão calculados.
% Cada nó (exceto o primeiro, que é fixo)
% terá um deslocamento associado, e cada elemento terá uma tensão e deformação.
% Inicialização de vetores para armazenar resultados
displacements = zeros(N+1, 1);
stresses = zeros(N, 1);
strains = zeros(N, 1);

% Criação da malha de elementos finitos


% Criação da malha de elementos finitos
dx = L / N;

% Montagem da matriz de rigidez global


K = zeros(N+1);
for i = 1:N
% Calcula os pontos médios do elemento atual
x1 = (i-1) * dx;
x2 = i * dx;

% Calcula os diâmetros nas extremidades do elemento


D1 = d0 - (d0 - dL) * x1 / L;
D2 = d0 - (d0 - dL) * x2 / L;

% Calcula o diâmetro médio do elemento


Dmedio = (D1 + D2) / 2;

% Calcula a área da seção transversal com base no diâmetro médio


11/19/23 12:52 PM untitled4.m 2 of 3

A = pi * (Dmedio / 2)^2;

% Calcula a matriz de rigidez local do elemento


K_local = (E * A / dx) * [1, -1; -1, 1];

% Adiciona a matriz de rigidez local à matriz global


K(i:i+1, i:i+1) = K(i:i+1, i:i+1) + K_local;
end

% Aplicação das condições de contorno


%Aqui removemos a primeira linha e coluna da matriz de rigidez para representar que
o primeiro nó é fixo (engaste), e não pode se mover.
%O vetor de forças F_vector é atualizado para incluir a força de tração no último
nó.
K(1,:) = [];
K(:,1) = [];
F_vector = zeros(N, 1);
F_vector(end) = F;

% Cálculo dos deslocamentos


% Aqui resolvemos o sistema de equações lineares para encontrar os deslocamentos
nodais.
% O operador \ no MATLAB é utilizado para resolver sistemas lineares
% e é mais eficiente e estável do que calcular a inversa da matriz de rigidez.
displacements(2:end) = K \ F_vector;

% Cálculo de deformações e tensões


% Deformações (strains) são calculadas como a diferença entre deslocamentos
% de nós adjacentes dividida pelo comprimento do elemento.
% As tensões (stresses) são então calculadas a partir das deformações
% multiplicando pela constante de elasticidade E.
for i = 1:N
strains(i) = (displacements(i+1) - displacements(i)) / dx;
stresses(i) = E * strains(i);
end
% Armazenamento da tensão máxima para o valor atual de N
tensao_maxima(idx) = max(abs(stresses));
end

% Plot dos resultados


figure(1);
plot(1:N, displacements(2:end), 'LineWidth', 2);
title('Deslocamentos Nodais');
xlabel('Nó');
ylabel('Deslocamento (m)');

figure(2);
plot(1:N, strains, 'LineWidth', 2);
title('Deformações nos Elementos');
xlabel('Elemento');
ylabel('Deformação');
11/19/23 12:52 PM untitled4.m 3 of 3

figure(3);
plot(1:N, stresses, 'LineWidth', 2);
title('Tensões nos Elementos');
xlabel('Elemento');
ylabel('Tensão (Pa)');

% Plot da análise de sensibilidade de malha


figure;
plot(N_variacao, tensao_maxima, 'LineWidth', 2);
title('Análise de Sensibilidade de Malha');
xlabel('Número de Elementos Finitos');
ylabel('Tensão Máxima (Pa)');
grid on;

% Cálculo do erro de convergência


erro_convergencia = zeros(length(N_variacao), 1);
tensao_maxima_referencia = tensao_maxima(end); % Considerando a tensão máxima para
o maior N como referência

for idx = 1:length(N_variacao)


erro_convergencia(idx) = abs((tensao_maxima_referencia - tensao_maxima(idx)) /
tensao_maxima_referencia);
end

% Exibir os erros para cada 5 elementos


disp('Erro de convergência para cada 5 elementos:' );
for idx = 1:5:length(N_variacao)
fprintf('N = %d, Erro de Convergência: %.4f%%\n', N_variacao(idx),
erro_convergencia(idx) * 100);
end

% Plot do erro de convergência


figure;
plot(N_variacao, erro_convergencia, 'LineWidth', 2);
title('Erro de Convergência da Tensão Máxima');
xlabel('Número de Elementos Finitos');
ylabel('Erro Relativo');
grid on;

Você também pode gostar