PHP e interpolação linear

PHP (acrônimo para “PHP: Hypertext Preprocessor”, originalmente Personal Home Page) é uma linguagem interpretada livre, usada principalmente para o desenvolvimento de aplicações no lado do servidor, capazes de gerar conteúdo dinâmico na World Wide Web. Surgiu em meados de 1994, como um pacote de programas CGI criados por Rasmus Lerdorf, com o nome Personal Home Page Tools, para substituir um conjunto de scripts Perl que ele usava no desenvolvimento de sua página pessoal. Figura entre as primeiras linguagens passíveis de inserção em documentos HTML.

O php pode ser instalado pelo comando “apt-get install php”. Possui modo terminal (Interactive mode) acessível pelo comando “php -a”. Para executar um script escrito em php, executar “php nome_do_script.php” no terminal de texto.

Quando o código é inserido em um documento HTML, utilize as tags “” para fechar. Se for um script para ser executado diretamente na linha de comando, utilize também “#!/usr/bin/php” na primeira linha do arquivo de código. Sempre utilize ponto e vírgula no final de cada linha e cifrão no início do nome de cada variável. Para comentar, são utilizadas duas barras antes de uma linha ou “/* comentário */” para mais de uma linha de comentário.

As variáveis em PHP podem ser string, inteiro, float (número real), booleano, array, objeto ou resource (gerado para controle de arquivos, conexões de internet e conexão com banco de dados). A função “floatval” retorna o valor float da variável. Geralmente, a precisão de casas decimais ficam na linha “ini_set(“precision”, 3)” do arquivo de configurações “php.ini”, mas pode ser impressa de outros modos usando a função “round($var,$n_casas)” ou “number_format()”.

Os operadores matemáticos e lógicos são basicamente os mesmos utilizados em outras linguagens. Dentre os operadores aritméticos, destauqe para a multiplicação, que é dada por asterisco, e divisão, que é uma barra. A comparação é dada pelos sinais gráficos “maior que” e “menor que”, podendo atual junto a um sinal de igual; a igualdade é dada por dois sinais de igual, enquanto que “!=” indica “diferente de”.

Os vetores e matrizes em PHP, diferente do que ocorre em C/C++ e Pascal, são estruturas dinâmicas. Desse modo, é possível inserir novos valores sequencialmente, sem informar previamente o tamanho do vetor ou mesmo a posição onde o dado será guardado – basta inicializar a variável como “array()”. Veja um script como exemplo de trabalho com vetor no final desse post.

Com relação aos loops (laços), existe o FOR e o WHILE:

// Exemplo de uso de for
for ($i = 1; $ <= 10; $i++){
	print $i;
}
// Exemplo de uso de while
$a = 1;
while ($a < 11){
	print $a;
	$a++;
}

Nos exemplos acima, as rotinas devem imprimir valores de 1 a 10 usando cada um dos comandos.

Interpolação

Interpolação linear é um método matemático que se utiliza de uma função linear p(x) (um polinômio de primeiro grau) para representar, por aproximação, uma suposta função f(x) que originalmente representaria as imagens de um intervalo descontínuo (ou degenerado) contido no domínio de f(x). Para dados que variem de maneira linear (ou seja, como uma reta) ou cujo os pontos estejam próximos, é uma estimativa razoável considerar uma função de 1º grau, do tipo “y = f(x) = ax + b”, para descrever seu comportamento. O valor de “b” (coeficiente linear) é definido como o encontro da reta com o eixo y, enquanto que “a” (coeficiente angular) é definido como o ângulo da reta com relação ao eixo x.

Tabela de dados, gráfico e equação utilizada para interpolação linear do ponto k. Arte: ViniRoger.
Tabela de dados, gráfico e equação utilizada para interpolação linear do ponto k. Arte: ViniRoger.

A interpolação é calculada através da proporção entre as distâncias nos eixos x e y dos pontos 1, 2 e k, conforme indicado na figura acima (k é o ponto a ser interpolado). No caso, temos que a distância, no eixo y, entre 1 e k está para a distância entre 2 e 1 ASSIM COMO a distância, no eixo x, entre 1 e k está para a distância entre 2 e 1. Isolando o valor a ser descoberto (yk), temos a equação em destaque. No caso do script a ser utilizado, o ponto está à frente do conjunto de dados, e podemos considerar a razão entre as diferenças envolvendo x como sendo igual a dois (indica a diferença entre o número de linhas dos dois dados considerados para fazer a interpolação).

Exemplo de script

O exemplo a seguir deve baixar arquivo XML e gravar os valores em um vetor, além de incluir o último valor como a interpolação dos anteriores. Nele, é possível encontrar o uso das funções date e simplexml_load_file, que interpreta um arquivo XML e o transforma em um objeto. O comando “foreach” funciona somente com arrays, varrendo uma dada matriz e, em cada ‘loop’, o valor do elemento corrente é atribuído à variável $valor e o ponteiro interno da matriz é avançado em uma posição (assim, será tratado o próximo elemento na iteração seguinte). Também é utilizada a sintaxe de orientação a objeto e comparação usando IF.

#!/usr/bin/php
<?php $Estacao = 421; $data = date("d/m/Y", strtotime('-14 days')); $Obs = simplexml_load_file('http://www.site.com.br/observados.php?Est='.$Estacao.'&Data='.$data); $vetor = array(); $i = 0; foreach ($Obs->observados as $valor) {
	$vol = $valor->volume;
	$vetor[] = $vol;
	$i += 1;
}
// Interpolar valor e colocar na última posição do vetor
$r = 2; // razão definida pelo número de linhas entre os valores
$a = (floatval($vetor[$i-1]) - floatval($vetor[$i-2])) * $r; // Coeficiente angular
$b = $vetor[$i-2];// Coeficiente linear
$y = floatval($a)+floatval($b); // Valor interpolado
// Imprime resultados
$tamanho = count($Obs->observados);
if ($tamanho >= 11){
     echo "Penúltimo valor: ".$vetor[$i-2].". Último: ".$vetor[$i-1].". Interpolado: ".$y.chr(10);
}
else
{
     echo "Quantidade insuficiente de dados.".chr(10);
}
?>

O elemento “chr(10)” imprime uma quebra de linha. Note que, ao concatenar uma variável a uma string (texto entre aspas), deve-se utilizar um ponto para separar cada uma das partes.

Veja o que é um arquivo XML e outro exemplo de script em PHP de como extrair dados desse tipo de arquivo clicando no link. Outra opção para organizar dados e interpolar usando R pode ser vista no link.

One comment

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.