Eu me meto em cada uma…
Mas antes de mais nada, a resposta: y = 2062,203 * exp( ( ( ln(x) + 3,254 ) ^2 ) / 185,219 ) – 1911,206 (para pressões > 0,33)
E esse impressionante resultado começou com a seguinte conversa: “André, eu preciso da inversa de uma função”.
Ok, pensei eu, inversões de função existem algumas online, isso não vai requerer nem instalação de software especializado. Qual função?
“A inversa da função dessa tabela“.
Ah… Não é a inversa de uma função conhecida… Primeiro é preciso deduzir uma função apropriada à tabela para depois inverter. Imediatamente vem aquele feeling de problema mal especificado…
Tabela de termodinâmica, gráfico da função uma exponencial para cima não lá muito “redondo”. Como eu entendo quase nada da matemática subjacente à termodinâmica macroscópica, a conversa seguinte foi no sentido de determinar a natureza do gráfico da função. Respostas no sentido de ser polinomial de 4ª ordem.
Uma inversa de um polinômio à quarta? Isso não vai ser muito pequeno…
Foram bem umas duas horas lidando com sites que “descobriam” os fatores apropriados à funções polinomiais. Sem muito sucesso, porque os resultados quando plotados não ficavam lá muito parecidos com o gráfico inicial. Tentativas de diminuir o grau do polinômio não foram muito melhores. Fora que as inversões dessas funções davam uns monstrinhos de mais de página, como esperado. A fome bate e a pesquisa é interrompida para almoço.
Durante o almoço a conversa continua sobre o problema. Ou antes, como seria a solução do problema. A conversa se desvia para o truque conceitual que o pessoal da matemática/computação as vezes usa para problemas que são intratáveis: apelar a um oráculo.
No caso, um oráculo ideal, onisciente e onipotente. Claro que fazer um oráculo assim é impossível na prática, mas supondo que existisse tal oráculo, que tipo de resposta que esperaria que ele fornece?
Nisso o cara para e pensa: uma resposta curta, uma linha.
Bom, esse é um problema bem diferente do inicial. Em vez de procurar uma função da tabela para depois inverter, inverte-se a tabela e procura-se uma função curta que aproxime a nova tabela. Talvez seja tão difícil de enumerar um problema quanto o outro, mas agora há uma restrição artificial (uma linha), que pelo menos o torna menor. É impossível de construir um oráculo que “tente” todas as combinações de fórmulas e parâmetros, mas é bem mais fácil de construir um oráculo que tente fórmulas curtas.
Até isso já tem pronto, online, hoje em dia. Com direito a repositório de funções, multi task hospedado, programação genética para evoluir fatores e relatórios com tal requinte de informação que coloca muito trabalho universitário no chinelo… (ver abaixo)
20 minutos depois a resposta aparece. Aliás, várias, já devidamente ordenadas por aderência aos dados informados.
E a resposta escolhida é bela. Suficientemente curta para ser operada algebricamente (outro requisito, não demandado inicialmente) e suficientemente aproximado para ser usado como uma inversão interpolada. Uma interpolação invertida de uma tabela empírica, devo acrescentar…
Seria tema de livros discutir as implicações filosóficas de uma função aleatória que dá a interpolação de um processo físico. Ainda mais uma função que não tem a estrutura da processo interpolado, menos ainda, invertido. Mas não deixa de ser um daqueles raros momentos que a força bruta ingênua acaba produzindo um resultado inesperadamente útil.
Detalhe: como a solução usou de programação genética para evoluir os parâmetros, então fórmula e parâmetros são aleatórios. Tudo, enfim.
O momento que a lista de soluções apareceu e o cara se entusiasmou de ver a aderência me fez lembrar de uma passagem de Travelling Salesman, onde um truque levemente diferente (a transmutação de um problema em outro) torna um problema impossível em possível, apenas com um rearranjo de forma. No meu caso, foi o abandono da explicação “correta” que levou a solução “boa” (que o pessoal da psicologia reconhecerá como um caso de rigidez funcional). O inicialmente queria a inversa de uma função desconhecida, mas o que ele precisava era de uma função algebricamente simples que fosse próxima da inversa da tabela. Que em retrospectiva é óbvio: uma interpolação de um processo empírico é por definição impreciso. Então uma aproximação aleatória é perfeitamente válida.
Bom, é isso.
Se teve paciência de ler até aqui, bem imagino que és uma pessoa bem nerd, que provavelmente tem amigos nerds engenheiros. Se quiser ter umas discussões bem incomuns com eles vai a dica: repassem aos amigos engenheiros apenas o título da mensagem e a fórmula acima, e peça a eles a tentarem validar o resultado ou ainda explicar se está “certo” a fórmula. Já adianto que será confuso pra caramba para eles e para ti 🙂
Agora, se achou o desafio interessante e quiser replicar por conta própria, os inputs únicos são:
- Paginas 14 e 15, colunas 1 e 3 disso;
- A inversa delas, em uma linha.
E boa caça 🙂
EDIT: Poucas semanas após a publicação do post o serviço saiu do ar, passando da existência a um mito. O fonte ainda sobreviveu, mas não o serviço pronto. A internet se tornou um lugar um pouco menor, com a perda desse desconhecido, mas impressionante recurso 🙁