Apendice
Solu¸
c˜
ao do Problema 1.2 usando o SCILAB
No c´odigo a seguir definimos os cantos do triˆangulo atrav´es dos vetores A, B, e C. A partir desses vetores obtemos os vetores que definem os lados do triˆangulo, i.´e, AB, CA e CB // Solucao do Problema 1.2
// Definimos os pontos A, B e C A=[4 1 2];
B=[1 -1 0]; C=[5 -3 -4];
// O vetor CA e definido por CA=A-C;
// O vetor CB e definido por CB=B-C;
// O angulo interno ao canto C e entao obtido utilizando-se a // definicao de produto escalar: A.B = |A||B| cos(theta) THETA=acos(CA*CB’/(norm(CA)*norm(CB)))*180/%pi
// O vetor AB e definido por AB=B-A;
// Para determinarmos se o triangulo e retangulo ou nao basta verificarmos // se dois dos vetores que definem os lados sao perpendiculares. Nesse caso // o produto escalar desses dois vetores sera igual a zero.
// Verificando a ortogonalidade entre AB e CA AB*CA’
// Verificando a ortogonalidade entre AB e CB AB*CB’
Defini¸
c˜
ao da fun¸
c˜
ao “ProdVet” para obter produtos vetoriais
No SCILAB o produto vetorial n˜ao ´e pr´e definido. A seguir apresentamos uma fun¸c˜ao que executa essa opera¸c˜ao. Essa funcao sera utilizada nos c´odigos que executem produtos vetoriais, por exemplo, o Problema 1.3 a seguir.
function [p] = ProdVet(u,v)
// Calcula o produto vetorial de dois vetores u e v.
// Os vetores u e v podem ser vetores linha ou coluna, mas // cada um deles deve ser tri-dimensional.
[nu,mu] = size(u); [nv,mv] = size(v);
if nu*mu <> 3 | nv*mv <> 3 then
error(’Os vetores devem ser tri-dimensionais’) abort;
end
A1 = [ u(2), u(3); v(2), v(3)]; A2 = [ u(3), u(1); v(3), v(1)]; A3 = [ u(1), u(2); v(1), v(2)];
px = det(A1); py = det(A2); pz = det(A3); p = [px, py, pz]
// Fim da funcao
Solu¸
c˜
ao do Problema 1.5 usando o SCILAB
Esse c´odigo utiliza a fun¸c˜ao que executa a opera¸c˜ao de produto vetorial definida acima. // Solucao do Problema 1.5
u=[6/7 -3/7 2/7] v=[2/7 6/7 3/7] w=[-3/7 -2/7 6/7]
// Verificando se sao unitarios: norm(u), norm(v), norm(w)
// funcao definida acima getf("cross")
// Verificando se sao ortogonais e formam uma base direita. // Sabemos que da definicao de base ortogonal direita temos que // (u x v).w = (v x w).u = (w x u).v =1
ProdVet(u,v)*w’ ProdVet(v,w)*u’ ProdVet(w,u)*v’ //
// A transformacao de coordenada e obtida por
// | u | | i.u j.u k.u | | i |
// | v | = | i.v j.v k.v | | j |
// | w | | i.w j.w k.w | | k |
//
// A base antiga e dada pelos unitarios i, j e k, definidos como i=[1 0 0];
j=[0 1 0]; k=[0 0 1];
// Assim obtemos a matriz transformacao
T=[i*u’ j*u’ k*u’; i*v’ j*v’ k*v’; i*w’ j*w’ k*w’] // Definimos os vetores a, b e c
a=[0 3 2] b=[-1 4 -3] c=[2 -2 -2]
// Os vetores na base nova sao dados por a=T*a’
b=T*b’ c=T*c’
Solu¸
c˜
ao do Exemplo 2.13 usando o SCILAB
Para exemplificarmos a utiliza¸c˜ao do SCILAB na solu¸c˜ao de um problema de treli¸ca vamos resolver, novamente, o exemplo 2.13 do texto. A id´eia ´e resolvermos um sistema linear de equa¸c˜oes. Sabemos que a treli¸ca em quest˜ao, ´e plana e simples. Portanto, a condi¸c˜ao de que a soma das for¸cas atuando em cada n´o tem que ser nula nos fornece 2 equa¸c˜oes. O desenho abaixo ajuda-nos a entender o processo. A treli¸ca ´e composta por 7 elementos, portanto, temos 7 for¸cas a serem determinadas (as for¸cas que atuam em cada elemento). No desenho elas s˜ao designadas por fa (for¸cas no elemento a) at´e fg.
Necessitamos 7 equa¸c˜oes linearmente independentes. Os n´os C, D e E nos fornecem 2 equa¸c˜oes cada, e como sabemos que o apoio B ´e m´ovel na dire¸c˜ao horizontal, esse n´o nos fornece 1 equa¸c˜ao, totalizando as 7 de que necessitamos.
100 N
f
f
f
d c aa
b
c
d
e
f
g
100 N
200 N
300 N
f
af
bf
af
df
df
cf
bf
ff
ff
f
g gf
ef
ef
c(a)
(b)
A
B
C
D
E
D
4
3
O n´o D fornece as seguintes equa¸c˜oes:
−facos θ + fccos θ + fd= 0 −fasen θ − fcsen θ − 100 = 0 Do n´o C temos: −fd− fecos θ + fgcos θ + 200 = 0 −fesen θ − fgsen θ = 0 Do n´o E, temos: −fb− fccos θ + fecos θ + ff = 0 fcsen θ + fesen θ − 300 = 0
Essas equa¸c˜oes podem ser agrupadas para fornecer o seguinte sistema − cos θ 0 cos θ 1 0 0 0 − sen θ 0 − sen θ 0 0 0 0 0 0 0 −1 − cos θ 0 cos θ 0 0 0 0 − sen θ 0 − sen θ 0 −1 − cos θ 0 cos θ 1 0 0 0 sen θ 0 sen θ 0 0 0 0 0 0 0 −1 − cos θ fa fb fc fd fe ff fg = 0 100 −200 0 0 300 0
A solu¸c˜ao desse sistema fornece o valor das for¸cas (fa...fg) que atuam em cada elemento.
Observe que se o resultado for positivo, ent˜ao a for¸ca tem o sentido indicado na Figura acima (ou seja, ser´a uma for¸ca de tra¸c˜ao sobre a barra, caso contr´ario, se o resultado for negativo, ent˜ao o sentido que atribuimos na Figura est´a ao contr´ario do que ´e, e a for¸ca ser´a, ent˜ao, de compress˜ao.
// Resolveremos o seguinte sistema |A|.|F| = |B| onde a |A| e a // matriz que contem as direcoes das forcas, |F| e a matriz
// unidimencional das forcas e |B| representa a carga sobre a trelica // Define-se o numero de elementos
n=7;
// Define-se as matrizes A(n,n) e B(n,1) com todos os elementos iguais // a zero
A = zeros(n,n); B = zeros(n,1);
// Angulo que define a inclinacao de alguns dos elementos da trelica angulo = atan(4/3);
c=cos(angulo); s=sin(angulo);
// Definicao das matrizes do sistema
A(3,7) = c; A(4,5) = -s; A(4,7) = -s; A(5,2) = -1; A(5,3) = -c; A(5,5) = c; A(5,6) = 1; A(6,3) = s; A(6,5) = s; A(7,6) = -1; A(7,7) = -c;
// Matriz B (elementos diferentes de zero) B(2,1) = 100; B(3,1) = -200; B(6,1) = 300; // matriz A A // matriz B B
// Determinacao das forcas nos elementos (F = inversa{A} * B) F = inv(A)*B
Solu¸
c˜
ao do Problema 2.18 usando o SCILAB
Como segundo exemplo de solu¸c˜ao num´erica de uma treli¸ca simples, vamos resolver a treli¸ca do Problema 2.18. O m´etodo ´e identico ao utilizado no exemplo anterior. No caso da treli¸ca do Problema 2.18 temos 13 elementos, o que significa 13 for¸cas a serem determinadas. Cada um dos n´os, representado na Figura abaixo pelas letras B, C, D, F , G e H, fornece 2 equa¸c˜oes de equil´ıbrio. No caso do n´o E, sabemos que a soma das componentes na horizontal tem que ser igual a zero. Portanto, temos as 13 equa¸c˜oes necess´arias `a solu¸c˜ao do problema.
O c´odigo SCILAB ´e dado a seguir. A execu¸c˜ao desse c´odigo fornece como resposta: fa = −10.0 kN
fb = −5.83 kN
fd = −10.0 kN fe = 8.00 kN ff = 8.00 kN fg = 8.00 kN fh = 8.00 kN fi = 0.00 kN fj = −4.17 kN fk = 5.00 kN fl = −4.17 kN fm = 0.00 kN
B
C
D
E
F
G
H
5 kN
2 kN
5 kN
1,5 m 1,5 m 3 m 2 m 2m 2 m 2 mA
d
c
h
i
j
k
l
a
b
e
f
g
m
Solu¸
c˜
ao do Exemplo 3.9 usando o SCILAB
O c´odigo a seguir foi escrito para resolver o exemplo 3.9 e desenhar o gr´afico da velocidade do pist˜ao e velocidade angular do bra¸co 2 como fun¸c˜ao do ˆangulo do bra¸co 1.
// define-se um vetor contendo o valor do angulo theta, com
// valor inicial igual a "arccos(-.6)", que e’ o angulo utilizado // no Exemplo 3.9. Os valores sao incrementados de -0.01 radianos // (rotacao no sentido horario) ate’ realizar 2 voltas completas. theta=[acos(-.6):-.01:-4*%pi+acos(-.6)]’;
// determina-se o tamanho do vetor theta s=size(theta);
// define-se matrizes de dimensoes tamanho de theta X 3 // r1 e’ o vetor que localiza o ponto "A", r2 e’ o vetor que // localiza "B" com relacao a "A", v e’ a velocidade de "A" e // vb uma matriz de dimensao tamanho de theta X 2 que ser’a obtida // como solucao do problema, onde vb(:,1) e’ a velocidade linear do // ponto "B" e vb(:,2) a velocidade angular do braco 2.
r1 = zeros(s(1,1),3); r2 = zeros(s(1,1),3); v = zeros(s(1,1),3); vb = zeros(s(1,1),2);
// Calcula-se as componentes do vetor r1 em funcao do angulo theta r1(:,1)=5*cos(theta);
r1(:,2)=5*sin(theta);
// Calcula-se as componentes do vetor r2 em funcao do angulo theta r2(:,1)=sqrt(13^2 - r1(:,2)^2);
r2(:,2)=r1(:,2); getf("cross");
// A velocidade angular do braco 1 e’ igual a -10 rad/s na direcao // horaria
// Calcula-se a velocidade linear do ponto "A" (va= omega X r1). // Em seguida monta-se o sistema que nos dara’ a velocidade angular // do braco 2 e a velocidade do ponto "B", impondo-se a condicao // de que a componente vertical ("y") dessa velocidade e’ igual a // zero (ver exemplo 3.9 do texto).
for i = 1:s(1,1)
v(i,:) = ProdVet(w,r1(i,:)); A=[1 -r2(i,2); 0 -r2(i,1)]; B=[v(i,1); v(i,2)];
vb(i,:)=(inv(A)*B)’; end
// grafico de vb e da velocidade angular do braco 2. xbasc()