domingo, 31 de dezembro de 2017

Feliz 2018!


A todos os meus conhecidos, amigos e alguns não tão amigos assim, meus sinceros votos de feliz ano novo! Que 2018 seja muito melhor que este 2017. Vamos deixar a inércia para trás e realizar os bons projetos que ainda estão engavetados. Lembrar do passado apenas para não cometer os mesmos erros, parafraseando um certo escritor: por que repetir os erros do passado se existem tantos novos erros pela frente?! Vamos exercitar mais a razão e menos a paixão cega (e, quase sempre, burra). Temos que pensar um pouco mais no coletivo e menos no individual. A sociedade e a natureza agradecem. Sobriedade e humildade nas conquistas e resiliência nos momentos mais difíceis. Afinal, a vida segue, mesmo quando não queremos.

quarta-feira, 27 de dezembro de 2017

Solução de sistema de equações não lineares

Solução iterativa de um sistema de equações não lineares.

A solução de sistemas de equações lineares é relativamente fácil e podemos tentar diversas abordagens para encontrar uma solução. Sistemas de equações não lineares são bem mais complicados de resolver. Por exemplo, o sistema $$\begin{array}{rc} x^2 + y^3 - 2 & = 0 \\ -x^2 + y & = 0 \end{array}$$ é exemplo de um sistema não linear. Para este caso específico, como temos apenas duas funções polinomiais, podemos até calcular uma solução analítica, mas, de modo geral, isso não é possível. Então, devemos recorrer a algum método numérico iterativo. Para estes casos, talvez o método mais popular (talvez "popular" não seja o termo mais adequado aqui) seja o método de Newton-Raphson. Nesta postagem iremos fazer uma pequena variação para evitar o cálculo do Jacobiano (matriz de derivadas parciais do sistema) de forma analítica, lembrando do fato: $$ \frac{df}{dx} \cong \frac{f(x+h) - f(x-h)}{2h} $$ Formalizando um pouco. Seja um sistema de equações na forma \[ \begin{array}{cc} f_1(x_1, x_2, \ldots x_n) & = 0 \\ f_2(x_1, x_2, \ldots x_n) & = 0 \\ f_3(x_1, x_2, \ldots x_n) & = 0 \\ \vdots & \vdots \\ f_n(x_1, x_2, \ldots x_n) & = 0 \\ \end{array} \] A sua solução é da forma: \begin{equation} \left[\begin{array}{c} x^{k+1}_1\\ x^{k+1}_2\\ \vdots\\ x^{k+1}_n \end{array}\right] = \left[\begin{array}{c} x^{k}_1\\ x^{k}_2\\ \vdots\\ x^{k}_n \end{array}\right] - \left[\begin{array}{cccc} \frac{\partial f_1}{\partial x^k_1} & \frac{\partial f_1}{\partial x^k_2} & \cdots & \frac{\partial f_1}{\partial x^k_n}\\ \frac{\partial f_2}{\partial x^k_1} & \frac{\partial f_2}{\partial x^k_2} & \cdots & \frac{\partial f_2}{\partial x^k_n}\\ \vdots & \vdots & \vdots & \vdots \\ \frac{\partial f_n}{\partial x^k_1} & \frac{\partial f_n}{\partial x^k_2} & \cdots & \frac{\partial f_n}{\partial x^k_n}\\ \end{array}\right]^{-1} \left[\begin{array}{c} f_1(x^k_1, \ldots, x^k_n) \\ f_2(x^k_1, \ldots, x^k_n) \\ \vdots \\ f_n(x^k_1, \ldots, x^k_n) \\ \end{array}\right] \end{equation} com x$_0$ sendo um chute inicial. Se esse chute inicial for próximo o suficiente, a solução deve convergir. Por exemplo, vamos considerar o sistema de equações não lineares $$ \begin{array}{rr} \cos(\pi x_1/2) + \ln(x_1 x_2 x_3) + x^2_3-10.8&=0\\ x_1 x_2 x_3 + \sqrt{x_1 x_3 + x_2} + \cos(\pi x_3/2) - 8.2 &=0\\ x_1 x_3 + \exp(-x_1 x_2) - \cos(\pi x_2 x_3/6) - 4.2 &=0\\ \end{array} $$ com um chute inicial igual a x$_0$ = [0,5; 1,0; 1,5]$^T$.

O código Scilab abaixo resolve esse sistema:

// função 1: entrada: "x1", "x2" e "x3":
function f1 = fx1(x1,x2,x3)
    f1 = cos(%pi*x1/2) + log(x1*x2*x3) +x3*x3-10.8; //round(5*(cos(%pi*1/2) + log(1*2*3) +3*3))/5; //(cos(%pi*1/2) + log(2*3) +3*3);
endfunction

// função 1: entrada: "x1", "x2" e "x3":
function f2 = fx2(x1,x2,x3)
  f2 = x1*x2*x3 + sqrt(x1*x3+x2) +cos(%pi*x3/2)-8.2; //round(5*(1*2*3 + sqrt(1*3+2) +cos(%pi*3/2)))/5; //(1*2*3 + sqrt(1*3) +cos(%pi*3/2));
endfunction

// função 1: entrada: "x1", "x2" e "x3":
function f3 = fx3(x1,x2,x3)
  f3 = x1*x3 + exp(-x1*x2) -cos(%pi*x2*x3/6)-4.2; //round(5*(1*3 + exp(-1*2) -cos(%pi*2*3/6)))/5; //(1*3 + exp(-1*2) -cos(%pi*2*3/6));
endfunction

clc;

// valores iniciais e passo h:
x1 = 0.5; x2 = 1; x3 = 1.5; h = 0.0001; h2 = 2*h;

// vetor inicial, erro inicial e contador do laço
x = [x1; x2; x3]; er = 1; k=0;
while abs(er)>0.0001
     // Jacobiano:
      J = [(fx1(x1+h,x2,x3)-fx1(x1-h,x2,x3))/h2, (fx1(x1,x2+h,x3)-fx1(x1,x2-h,x3))/h2, (fx1(x1,x2,x3+h)-fx1(x1,x2,x3-h))/h2
            (fx2(x1+h,x2,x3)-fx2(x1-h,x2,x3))/h2, (fx2(x1,x2+h,x3)-fx2(x1,x2-h,x3))/h2, (fx2(x1,x2,x3+h)-fx2(x1,x2,x3-h))/h2
            (fx3(x1+h,x2,x3)-fx3(x1-h,x2,x3))/h2, (fx3(x1,x2+h,x3)-fx3(x1,x2-h,x3))/h2, (fx3(x1,x2,x3+h)-fx3(x1,x2,x3-h))/h2];
      Ji = inv(J);  // inversa do Jacobiano
      Fx = [fx1(x1,x2,x3); fx2(x1,x2,x3); fx3(x1,x2,x3)];
      e = - Ji*Fx;  // erro
      x = x + e;   // atualizando x
      x1 = x(1);
      x2 = x(2);
      x3 = x(3);
      disp(x);  // mostrando o resultado
      er = max(abs(e));
      k=k+1;
      if k>10 then er = 0; end; // teste para sair do laço
end;
disp([k, er, x1, x2, x3]);  // resultado final

A resposta é:
    2.8279168
    3.187974 
    2.5561181

    0.3258810
    2.0366685
    3.7243397

    0.8161449
    1.9556474
    2.9552854

    1.0297346
    1.9228066
    3.0044189

    1.0189457
    1.9414167
    3.0077076

    1.0191206
    1.9412045
    3.0077546

    1.0191206
    1.9412045
    3.0077546

Solução:
    7.    1.163D-08    1.0191206    1.9412045    3.0077546

quinta-feira, 21 de dezembro de 2017

JME: Nova revista científica do IFCE



Divulgando

O Instituto Federal do Ceará agora conta com uma nova revista científica: o Journal of Mechatronics Engineering (JME) é uma publicação eletrônica que tem por objetivo contribuir com a divulgação científica internacional, exclusivamente por meio de artigos na área na língua inglesa. Com primeiro prazo de submissão de artigos/papers abertos até 31 de janeiro de 2018, a edição de estreia está prevista para abril de 2018.
Podem participar (com artigos originais em inglês) profissionais, pesquisadores, professores e estudantes graduados e pós-graduados das áreas das Engenharias Elétrica, Eletrônica, Mecatrônica, Biomédica, Informática na Saúde, Mecânica, da Computação, de Materiais e Ensino de Engenharia.
De acordo com o editor-chefe da publicação e professor do campus de Fortaleza, Auzuir Ripardo de Alexandria, o Journal of Mechatronics Engineering servirá de veículo para publicação de trabalhos realizados em outros países e no Brasil, já nascendo internacional. “Sendo um veículo com foco em publicações na área de Mecatrônica, ajudará a fortalecer a imagem do IFCE como centro de excelência na área específica, que está dentro das linhas de atuação do Polo de Inovação Embrapii do IFCE", explica.
Além disso tudo, Auzuir Ripardo acrescenta que o JME colaborará para o fortalecimento dos programas de pós-graduação do IFCE, especialmente o da Ciência da Computação, o de Engenharia Telecomunicações e o de Energias Renováveis.
Saiba mais sobre a revista no portal da publicação eletrônica ou no Facebook da revista.  
*** Fonte aqui.
---------------------------------------------------------
The Journal of Mechatronics Engineering is a semiannually electronic publication created by the Federal Institute of Ceará - IFCE. The aim of this work is to contribute to the dissemination of knowledge through the publication of scientific papers  in English language. Through this, work the editorial board of the journal invites researchers, professionals, undergraduate and graduate students to share their experiences with the scientific and academic community through our electronic journal.
 Important information: 
  • Submissions until January, 31th for the first issue (Date of publication: April, 2018);
  • General articles on continuous demand can also be submitted.

sexta-feira, 15 de dezembro de 2017

Aproximação de uma função por soma de senos e cossenos

Exemplos de sinais periódicos.

Algumas vezes, desejamos aproximar um sinal periódico (possivelmente ruidoso) por uma soma de senos e cossenos. Sabemos que (quase) qualquer sinal periódico, por exemplo uma onda quadrada, pode ser decomposto em uma soma infinita de senos e cossenos cujas frequências são múltiplas da frequência fundamental do sinal periódico. Essa é a famosa Série de Fourier (ver aqui).

Nesta postagem, usando o Scilab e o comando fft, vamos ver como encontrar as principais componentes de seno e cosseno de um sinal periódico arbitrário. A ideia básica é calcular o espectro do sinal periódico com o comando fft e, em seguida, "montar" um sinal com as componentes de maior amplitude. Essa estratégia, se o sinal tiver vários períodos, acaba por filtrar algum ruído existente na função.

Seja o sinal indicado abaixo, quais suas componentes em termos de seno e cosseno?

Na figura acima, temos 10 períodos de um sinal periódico ruidoso, seu período vale 100 unidades de tempo (= 1 segundo). A análise é feita com o comando fft:

Com essas componentes, chegamos ao seguinte sinal: $$s(t) = 1.009\cos(2\pi t) + 0.495\sin(4\pi t) - 0.3013\cos(6\pi t) + 0.046\sin(8\pi t) + 0.0831\cos(8\pi t) + 0.052\cos(10\pi t)$$.
Para comparação, o sinal "exato" é:
$$s(t) = \cos(2\pi t) + 0.5\sin(4\pi t) - 0.3\cos(6\pi t) + + 0.1\cos(8\pi t + 0.5) + 0.05\cos(10\pi t)$$. Graficamente:
Código Scilab:

close; close;
t=0:0.01:(10-0.01);
p2=2*%pi;
s = cos(p2*t) + 0.5*sin(2*p2*t) - 0.3*cos(3*p2*t) +...
 0.1*cos(4*p2*t + 0.5) + 0.05*cos(5*p2*t);
sp = s;
s = s + 0.1*rand(s,'n');
plot(s); xgrid;

f = 1:max(size(s));
f = f - 1;
f = f/max(f); f = f*100;
sf = fft(s);
sfr = real(sf);
sfc = imag(sf);
// subplot(2,1,2);
figure;
plot(f(1:200), sfr(1:200),'m');
plot(f(1:200), sfc(1:200),'r');
legend('Componentes em fase','Componentes em quadratura');
//pega picos:
tt = 1:max(size(s));
tt=tt-1; tt=tt*0.01;
p = zeros(1,5);
fp = p;
ss = 0*tt;
tam2 = round(max(size(sfr))/2);
sfr = sfr(1:tam2); sfr(1) = 0;
sfc = sfc(1:tam2); sfc(1) = 0;
m = mean(s);
picoc = 0
picos = 0;
kf = 500; //fator de escala - 10 períodos e dt = 0,01;
for k=1:6
    [a,b] = max(abs(sfr));
    fq = round(f(b));
    if abs(sfr(b))>picoc then picoc = abs(sfr(b)); end;
    if abs(sfr(b))>(picoc/30) then
        ss = ss + sfr(b)*cos(fq*p2*tt)/kf;
        disp([fq,sfr(b)/kf,0]);
    end;
    sfr(b) = 0;
    [a,b] = max(abs(sfc));
    fq = round(f(b));
    if abs(sfc(b))>picos then picos = abs(sfc(b)); end;  
    if abs(sfc(b))>(picoc/30) then
        ss = ss - sfc(b)*sin(fq*p2*tt)/kf;
        disp([fq,sfc(b)/kf,1]);
    end;
    sfc(b) = 0;
end
ss = m + ss;
figure; plot(tt,sp,'m',tt,ss,'b',tt,s,'r');
legend('Sinal puro','Sinal calculado','Sinal com ruído');

sábado, 9 de dezembro de 2017

Palestra: Uma Abordagem para Detecção de Pessoas em Imagens de Veículos Aéreos Não-Tripulados


O PPGCC-IFCE promove, na próxima quarta-feira (13), palestra sobre pesquisa em Computação Embarcada e VANT. 

Título: 
Uma Abordagem para Detecção de Pessoas em Imagens de Veículos Aéreos Não-Tripulados

Palestrante:
  • Marco Aurélio Wehrmeister, Dr. (Lattes aqui).
  • Prof da UTFPR e pesquisador no CPGEI (Programa de pós-graduação em Eng Elétrica e Informática Industrial).
  • Sua área de interesse é Sistemas Embarcados e de Tempo-Real, desde a especificação e projeto até a implementação. 
  • Coordenador do Laboratório de Engenharia de Sistemas Computacionais (LESC) e pesquisador do Laboratório Avançado de Sistemas Embarcados e Robótica (LASER) da UTFPR.

O que: Palestra - Uma Abordagem para Detecção de Pessoas em Imagens de Veículos Aéreos Não-Tripulados
Quando: 13.12.17 (quarta-feira). 18:30h
Onde: Auditório Iran Ralpp, IFCE, Campus Fortaleza, av 13 de Maio 2081.

quinta-feira, 7 de dezembro de 2017

Nova dica de leitura: TED Talks - O guia oficial do TED para falar em público



Quem nunca precisou falar em público e ficou ligeiramente nervoso, sem saber direito o que falar ou como falar ou como se mover? Às vezes, nós metemos em situações em que temos que falar para um grande público e não temos a opção de "desistir". Temos que ir em frente e apresentar alguma coisa a público que não conhecemos bem. Como resolver um problema desse tipo? Ou pelo menos como não piorar as coisas com uma apresentação cheia de falhas? Uma dica básica: planejamento.

No livro de Chris Anderson (ANDERSON, Chris. TED Talks: o guia oficial do TED para falar em público. Rio de Janeiro: Intrínseca, 2016. 239 p. ISBN 9788580579352) temos muito mais que isso. São várias histórias e dicas de como impressionar positivamente o seu público e, claro, transmitir aquilo que você quer de forma que cause um bom impacto. O livro, naturalmente, tem uma leitura fácil e prazerosa. Fica aí, em poucas linhas, mais uma dica de leitura.

sábado, 2 de dezembro de 2017

Dica de leitura: Oppenheimer


Sem dúvida, Oppenheimer (Julius Robert Oppenheimer - Nova Iorque, 22 de abril de 1904 - Princeton, 18 de fevereiro de 1967) foi um dos maiores físicos do século XX, mas que não ganhou o prêmio Nobel de Física. Um pequeno livro, formato de bolso, tenta mostrar os aspectos humanos e as contribuições desse personagem complexo em mundo que se tornava cada vez mais bélico e louco. O livro é de autoria de José Maria Filardo Bassalo (Lattes aqui) e Francisco Caruso Neto (Lattes aqui), dois caras que entendem muito de física. Ao londo do texto são apresentadas várias referências acadêmicas sobre os trabalhos científicos citados. No posfácio do livro lemos (Alfredo Marques - Centro Brasileiro de Pesquisas Físicas):
A vida intelectual e efetiva de John Robert Oppenheimer, minuciosamente trabalhada neste livro, evoca a figura do mito histórico, tão imensa foi sua atuação em grandes temas político-científicos que marcaram o turbulento século XX. Com extensa faixa de interesses culturais e científico, seu pensamento parecia acomodar temas contraditórios, a espera de melhores provas para selecioná-los, alterativas extravagantes, beirando mesmo o impossível. Encantavam-no grandes desafios. 
A forte personalidade, exuberante cultura e impulso desassombrado que o levou algumas vezes à brutal agressão, inspiraram também manifestações de poetas, músicos, romancistas, teatrólogos, alunos e colegas de trabalho. Ninguém teve dele uma opinião rigorosamente neutra, balançando entre extremos, do profano ao sagrado, segundo sua atuação. 
Atuou nos desenvolvimentos científicos mais significativos do século XX, dos fundamentos da Mecânica Quântica à Radiação Cósmica e à Cosmologia. Suas contribuições, muitas vezes incompletas, mas suficientes para indicar caminhos, lhe valeram a acusação de displicente. Teve algumas indicações mal sucedidas ao Prêmio Nobel de Física. Alguns dos que perseveraram ao longo das linhas que abriu, mas não concluiu, se contam, entretanto, entre detentores daquela premiação. 
Como Diretor Científico do Laboratório de Los Alamos foi figura do maior destaque no desenvolvimento da bomba atômica. A despeito de seus numerosos relacionamentos com membros do partido comunista americano, seu irmão Frank e sua cunhada, para não falar da mulher com quem casou, a chefia do Projeto Manhattan decidiu ignorá-los, e assim fez enquanto os Estados Unidos e a USSR combatiam do mesmo lado da segunda guerra. Considerou também que o desenvolvimento da bomba incorporava desafios sem precedentes, distribuídos por uma extensa faixa de problemas novos cuja solução demandaria não apenas ideias e conhecimentos inovadores, mas atuação ousada e pronta. Estas condições fizeram de Oppenheimer a escolha ideal. O apelido que nasceu no auditório de uma conferência que fez na Holanda logo se generalizou. 
Dado o clima de afeto e familiaridade emanado do uso de apelidos, entendo que representa o acato dos contemporâneos à importância de sua controvertida figura.