Bastão de Asclépio & Símbolo de Integral

Bastão de Asclépio & Símbolo de Integral

invisible(Sys.setlocale("LC_CTYPE", "pt_BR.UTF-8"))
invisible(Sys.setlocale("LC_ALL","pt_BR.UTF-8"))

options(warn=-1)
suppressMessages(library(Deriv, warn.conflicts=FALSE))
suppressMessages(library(DescTools, warn.conflicts=FALSE))
suppressMessages(library(knitr, warn.conflicts=FALSE))
suppressMessages(library(nlsr, warn.conflicts=FALSE))
suppressMessages(library(REAT, warn.conflicts=FALSE))
suppressMessages(library(reticulate, warn.conflicts=FALSE))
suppressMessages(library(stringr, warn.conflicts=FALSE))
suppressMessages(library(turner, warn.conflicts=FALSE))
suppressMessages(library(units, warn.conflicts=FALSE))
suppressMessages(library(xml2, warn.conflicts=FALSE))
# suppressMessages(library(crfsuite, warn.conflicts=FALSE))

# Abra o Terminal (Prompt de Comando (CMD) do Windows)
# python.exe -m pip install --upgrade pip
# Digite: pip install pacote
import numpy 
import matplotlib
import scipy
# import math 
# import fractions
# import sympy
# import cmath
# import statistics
# import pandas

Material

Pensamento

“A morte do homem começa no instante em que ele desiste de aprender.”

Albino Teixeira apud Leite (2009)

Conteúdo

1. Número real (Capítulo 1)

  1. Função e relação (Capítulo 3)
  2. Funções potência, periódica, exponencial e logarítmica (Capítulos 4, 5 e 6)
  3. Método gráfico (Capítulo 7)
  4. Série e limite (Capítulo 8)
  5. Derivada e integral (Capítulos 9 e 10)
  6. Equação diferencial ordinária (ODE) (Capítulo 11)
  7. Função de duas ou mais variáveis independentes (Capítulo 12)
  8. Probabilidade (Capítulo 13)
  9. Matriz, vetor e número complexo (Capítulos 14 e 15)

Livro adotado

Justificativa

A modelagem quantitativa realizada por meio da matemática, estatística e simulação é parte integrante do corpo de disciplinas necessárias para expressar, formular, resolver e comunicar problemas no âmbito das Ciências da Vida ou Biociências, pois ela consiste numa linguagem fundamental para elaborar modelos quantitativos sobre os fenômenos biológicos.

Bibliografia Geral

  • Allen, LJS (2007) An Introduction to Mathematical Biology. NJ: Pearson.
  • Barreira, S (2013) Matemática aplicada às ciências farmacêuticas com Excel. Vol. 1. Lisboa: Escolar Editora.
  • Bates, JHT & Sobel, BE (2003) The conceptual basis of mathematics in cardiology - (I) algebra, functions and graphs. Coronary Artery Disease 14:41–59.
  • Batschelet, E (1979) Introduction to mathematics for life scientists. 3rd ed. NY: Springer.
  • Batschelet, E (1978) Introdução à matemática para biocientistas. Tradução da 2ª ed. São Paulo: EDUSP e Rio de Janeiro: Interciência.
  • Bloomfield, VA (2014) Using R for numerical analysis in science and engineering. USA: CRC.
  • Fieller, N (2015) Basics of matrix algebra for statistics with R. USA: CRC.
  • Garfinkel, A et al. (2017) Modeling Life: The Mathematics of Biological Systems. USA: Springer.
  • Giordano, FR et al. (1997) A first course in mathematical modeling. 2nd ed. OH: Thomson.
  • Giordano, FR et al. (2015) A first course in mathematical modeling. 5th ed. OH: Thomson.
  • Hoppenstead, FC & Peskin, CS (1991) Mathematics in medicine and the life sciences. NY: Springer.
  • Jones, DS, Plank, MJ & Sleeman, BD (2009) Differential Equations and Mathematical Biology. 2nd ed. UK: CRC.
  • Leite, M (2009) SciLab: uma abordagem prática e didática. RJ: Ciência Moderna.
  • Massad, E, Menezes, RX, Silveira, PSP & Ortega, NRS (2004) Métodos quantitativos em medicina. Manole.
  • Neuhauser, C & Roper, ML (2018) Calculus for Biology and Medicine. 4th ed. USA: Pearson.
  • Nogueira, EA et al. (2008) Modelos matemáticos nas ciências não-exatas. SP: Blucher.
  • Nooney, GC (1966) Mathematical models in medicine: A diagnosis. Journal of Chronic 19(4): 325-32.
  • Nowak, MA (2006) Evolutionary dynamics exploring the equations of life. USA: Harvard.
  • Otto, SP & Day, T (2007) A biologist’s guide to mathematical modeling in ecology and evolution. NJ: Princeton.
  • Pack, AI & Murray-Smith, DJ (1972) Mathematical models and their applications in medicine. Scottish Medical Journal 17(12): 401-9. doi:10.1177/003693307201701205.
  • Paiva Jr, FP et al. (2021) Modelagem matemática e epidemiologia com aplicações. Curitiba: Appris.
  • Pauli, RU et al. (1980) Física 4: eletricidade, magnetismo, física moderna e análise dimensional. São Paulo: EPU. O livro apresenta a análise dimensional de forma didática e aplicada à Física.
  • Simão, C (1980) Manual do professor de física 4 de Pauli et al. São Paulo: EPU.
  • Rustagi, JS (1971) Mathematical models in medicine. International Journal of Mathematical Education in Science and Technology 2(2): 193–203. doi:10.1080/0020739710020209.
  • Siqueira, JO (2011) Fundamentos para cálculo: usando WolframAlpha. São Paulo: Saraiva. Soluções dos exercícios em https://www.researchgate.net/publication/326533655_Fundamentos_para_Calculo_-_Solucoes.
  • Siqueira, JO (2012) Fundamentos de métodos quantitativos: aplicados em Administração, Economia, Contabilidade e Atuária usando WolframAlpha e SCILAB. São Paulo: Saraiva. Soluções dos exercícios em https://www.researchgate.net/publication/326533772_Fundamentos_de_metodos_quantitativos_-_Solucoes.
  • Thompson, JR (1989) Empirical model building. NJ: Wiley.

Ferramentas computacionais

Matemática em YouTube

Introdução

O objetivo do primeiro capítulo é revisar algumas leis e regras de álgebra. Uma seleção enfatizando as necessidades dos biocientistas será oferecida.

Ao mesmo tempo, adicionaremos conceitos importantes que geralmente são negligenciados em livros didáticos de matemática.

Linguagens de programação

As linguagens R, Python, Scilab e WolframAlpha são ferramentais computacionais gratuitas que funcionam interativamente em RMarkdown.

As quatro linguagens de programação usadas nas aulas são:

R

R é uma linguagem de programação livre e gratuita utilizada em matemática aplicada à biologia para análise estatística, modelagem de sistemas biológicos e visualização de dados. Com um amplo conjunto de pacotes, R facilita a manipulação de grandes volumes de dados biológicos e a criação de modelos matemáticos para entender fenômenos naturais.

\(~\)Disponível em www.r-project.org


WolframAlpha

Wolfram Alpha é um mecanismo de computação gratuito baseado em conhecimento que responde a perguntas usando cálculos avançados e bancos de dados estruturados. Diferente de motores de busca tradicionais, ele processa consultas matemáticas, científicas, estatísticas e técnicas, fornecendo respostas exatas e visualizações gráficas.

\(~\)Disponível em www.wolframalpha.com


Scilab

Scilab é um software livre e gratuito para cálculo numérico, amplamente utilizado em engenharia, ciência e matemática aplicada. Ele oferece um ambiente para computação científica, incluindo álgebra linear, estatística, otimização e simulação. Com uma sintaxe semelhante à do MATLAB, o Scilab permite a criação de gráficos, modelagem de sistemas dinâmicos e desenvolvimento de algoritmos complexos.

\(~\)Disponível em www.scilab.org


Python

Python é uma linguagem interpretada, dinâmica, com suporte a programação procedural, funcional e orientada a objetos. Destaca-se pela sintaxe clara, indentação obrigatória e extensa biblioteca padrão, com ampla aplicação em análise de dados, matemática e estatística, especialmente com pacotes como NumPy, SciPy e Pandas.

\(~\)Disponível em www.python.org

Classificação

Nível de medição da variável (Stevens, 1951; Chrisman, 1998; Sarle, 1997):

  • nominal: nenhuma ordenação indicada
  • ordinal: ordenação possível; intervalos não definidos
  • intervalar/ graduada: ordenação possível; intervalos definidos; valor de referência arbitrário; proporções não têm sentido
  • proporcional/ razão (ratio): ordenação possível; intervalos definidos; valor de referência absoluto; proporções têm sentido

A categorização de objetos e eventos é o método mais simples de mensuração.

Atribuímos palavras, símbolos ou números a esses objetos. Este é o tipo mais primitivo de escala, chamado de escala nominal (do latim nomen = nome). Também dizemos que estamos trabalhando em nível nominal.

Ao categorizar espécies biológicas, classificar diferentes comportamentos de animais ou distinguir entre condições climáticas, operamos nesse nível. Da mesma forma, um etólogo utiliza escala nominal quando classifica animais como ativos, inativos, alertas, agressivos ou submissos.

Exemplo 1.2.1. A química é capaz de distinguir entre centenas de milhares, senão milhões, de substâncias diferentes. Primeiramente, cada substância pode ser classificada como um produto químico puro ou uma mistura de produtos químicos. Além disso, entre produtos químicos puros não há sobreposição; cada um é definido de maneira única. Gelo, água e vapor de água pertencem à mesma categoria, enquanto é feita uma clara distinção entre diferentes tipos de açúcares. Isso é bem diferente da linguagem cotidiana, na qual palavras como açúcar, sal, cera ou álcool não são bem definidas.

Obtemos uma maneira mais útil de mensuração se conseguimos ordenar objetos ou eventos. É fácil distinguir dois tons musicais diferentes em termos de altura. Não apenas os categorizamos, mas conseguimos ordená-los como mais graves ou mais agudos. Quando somos capazes de ordenar objetos e eventos, estamos usando uma escala ordinal (do latim ordo = ordem). Dizemos também que atingimos o nível ordinal.

Exemplo 1.2.2. Um pesquisador médico distingue algumas categorias de insuficiência renal provocada pelo consumo excessivo de certas substâncias químicas. Ele também pode ordenar essas categorias quanto à gravidade. Para isso, atribui convenientemente o número 0 à categoria “sem insuficiência”, o número 1 à “insuficiência leve”, o número 2 à “insuficiência moderada” e o número 3 à “insuficiência grave”. Ele criou, assim, uma escala ordinal com escores ou números de classificação 0, 1, 2 e 3. Observe que não é possível afirmar que o aumento da insuficiência leve para moderada seja igual ao aumento da insuficiência moderada para grave, embora a diferença numérica entre as categorias seja sempre 1.

Alcançamos um nível ainda mais elevado de mensuração quando os intervalos passam a ter significado. Considere a escala de temperatura Celsius (°C), antigamente chamada de escala centígrada. O ponto zero (0°C) é definido arbitrariamente como o ponto de congelamento da água sob a pressão de uma atmosfera. Entretanto, temperaturas de 1°C, 2°C, 3°C, etc., não representam apenas uma ordenação simples como na escala ordinal. Um intervalo de 1°C possui um significado físico real: o mercúrio de um termômetro sobe exatamente a mesma quantidade quando a temperatura aumenta em 1°C.

Sempre que tivermos uma escala com intervalos significativos, chamamos-na de escala intervalar. Dizemos também que trabalhamos no nível intervalar.

Existem escalas ainda mais úteis do que as nominais, ordinais ou intervalares. Considere o peso de um corpo. Aqui não precisamos definir um ponto zero arbitrário. O peso zero é um ponto de referência natural. Por essa razão, faz sentido afirmar que um animal pesa duas vezes mais que outro ou que seu peso aumentou dois por cento. Como a razão entre dois pesos tem significado real, chamamos essa escala de escala de razão ou dizemos que estamos trabalhando no nível de razão.

Observe como seria absurdo dizer que um corpo a 20°C está duas vezes mais quente que um corpo a 10°C. Da mesma forma, não faz sentido afirmar que o tempo avançou 50% ou que uma direção é dez vezes maior que outra direção. Portanto, no nível intervalar, razões não possuem necessariamente significado.

Exemplo 1.2.9. Comprimento, altura, espessura e volume de um corpo são mensurados em escalas de razão. Entretanto, precisamos diferenciar entre a altura de um corpo e a altitude de um local, que não está numa escala de razão (ver Exemplo 1.2.5). Altura pode ser interpretada como a diferença entre duas altitudes e, portanto, possui um ponto de referência claro, o zero. A altitude, por outro lado, tem um ponto de referência arbitrário. Na linguagem cotidiana, altitude é geralmente referida ao nível do mar, considerado absoluto. Apenas nessa condição faz sentido dizer que o Monte Everest é duas vezes mais alto que o Monte Rainier.

Exemplo 1.2.10. A temperatura tem um ponto mais baixo absoluto, em torno de -273°C. Portanto, é possível definir uma escala de razão para a temperatura. Assim, usando os intervalos da escala Celsius, foi criada a escala Kelvin. Nessa escala, 273°K corresponde ao ponto de congelamento e 373°K ao ponto de ebulição da água sob uma pressão de uma atmosfera. Com graus Kelvin faz sentido afirmar que 180°K é 80% mais quente que 100°K.

Usos incorretos e corretos de porcentagens

Porcentagens só podem ser aplicadas para quantidades medidas em uma escala de razão.

  • Exemplo 1.4.4 Um aumento de 50% e uma diminuição subsequente de 50% não se anulam. Se, por exemplo, a colheita de uma macieira aumenta de 120 kg para 180 kg em um ano, chamamos isso de aumento de 50%. Uma redução subsequente de 50%, no entanto, geralmente é relacionada a 180 kg como 100%. Assim, a colheita é reduzida para 90 kg em vez dos 120 kg originais.

Classificação completa de Sarle (1997)

Os níveis de mensuração envolvem diferentes propriedades (relações e operações) dos números ou símbolos que constituem as medições. Associado a cada nível de mensuração está um conjunto de transformações permitidas. Os níveis de mensuração mais comumente discutidos são os seguintes:

nominal:

Duas coisas recebem o mesmo símbolo se tiverem o mesmo valor do atributo.
As transformações permitidas são qualquer transformação um-para-um ou muitos-para-um, embora uma transformação muitos-para-um perca informação.
Exemplos: numeração de jogadores de futebol; números atribuídos a religiões em ordem alfabética, por exemplo, ateu=1, budista=2, cristão=3, etc.

ordinal:

As coisas são atribuídas a números de modo que a ordem dos números reflita uma relação de ordem definida no atributo. Duas coisas \(x\) e \(y\) com valores de atributo \(a(x)\) e \(a(y)\) recebem números \(m(x)\) e \(m(y)\) de forma que, se \(m(x) > m(y)\), então \(a(x) > a(y)\).
As transformações permitidas são qualquer transformação monotonicamente crescente, embora uma transformação que não seja estritamente crescente perca informação.

Exemplos: escala de Mohs para dureza de minerais; notas de desempenho acadêmico (A, B, C, …); taxa de sedimentação sanguínea como medida de intensidade de patologia.

intervalar:

As coisas são atribuídas a números de modo que as diferenças entre os números reflitam diferenças do atributo. Se \(m(x) - m(y) > m(u) - m(v)\), então \(a(x) - a(y) > a(u) - a(v)\).
As transformações permitidas são qualquer transformação afim \(t(m) = c \cdot m + d\), onde \(c\) e \(d\) são constantes; outra maneira de dizer isso é que a origem e a unidade de medida são arbitrárias.

Exemplos: temperatura em graus Fahrenheit ou Celsius; data no calendário.

log-intervalar:

As coisas são atribuídas a números de modo que as razões entre os números reflitam razões do atributo. Se \(m(x) / m(y) > m(u) / m(v)\), então \(a(x) / a(y) > a(u) / a(v)\).
As transformações permitidas são qualquer transformação de potência \(t(m) = c \cdot m^d\), onde \(c\) e \(d\) são constantes.

Exemplos: densidade (massa/volume); eficiência de combustível em mpg.

razão:

As coisas são atribuídas a números de modo que diferenças e razões entre os números reflitam diferenças e razões do atributo.
As transformações permitidas são qualquer transformação linear (similaridade) \(t(m) = c \cdot m\), onde \(c\) é uma constante; outra maneira de dizer isso é que a unidade de medida é arbitrária.
Exemplos: comprimento em centímetros; duração em segundos; temperatura em graus Kelvin.

absoluto:

As coisas são atribuídas a números de modo que todas as propriedades dos números reflitam propriedades análogas do atributo.
A única transformação permitida é a transformação identidade.

Exemplos: número de crianças em uma família; probabilidade.

Variável discreta por natureza: escala absoluta

São, legitimamente, as variáveis oriundas de contagens (e.g., número de mortes de motociclistas).

E.g., em 2019, na Cidade de São Paulo, SP:

Mortes de motociclistas ultrapassam as de pedestres no trânsito de SP pela primeira vez, diz relatório

Quantos motociclistas mortos esperamos ver em 12 meses simulados?

morte.mes <- 366/12
mortes <- rpois(n=12,lambda=morte.mes)
cat("Em doze meses, com taxa de ",morte.mes," morte/mês, podemos observar:\n",sep="")
Em doze meses, com taxa de 30.5 morte/mês, podemos observar:
print(mortes)
 [1] 23 31 28 31 19 29 48 20 28 40 35 18
plot(mortes, type="p")
lines(mortes, type="l", lty=2)

Para apreciar melhor a notícia: demo_PoissonMotos.R

Unidade de medida

Sistema Internacional de Unidades: Wikipédia

Na Matemática Aplicada, as variáveis têm unidade de medida no Sistema Internacional de Unidades (SI).

O Sistema Internacional de Unidades (SI) é o sistema de medidas padrão adotado globalmente para garantir uniformidade na ciência e tecnologia. Ele é baseado em sete unidades fundamentais, a partir das quais derivam todas as outras unidades.

Análise dimensional: homogeneidade dimensional

Este item está baseado em Pauli et al. (1980) e Simão (1980).

O princípio da homogeneidade dimensional estabelece que todas as expressões físicas devem ser dimensionalmente coerentes, ou seja, os termos de uma equação devem ter as mesmas dimensões. Isso significa que não se pode somar ou igualar grandezas com diferentes dimensões físicas.

Matematicamente, se uma equação tem a forma:

\[ A + B = C \]

Então, necessariamente:

\[ [A] = [B] = [C] \]

sendo que \([X]\) representa a dimensão da grandeza \(X\).

Esse princípio é utilizado para verificar a coerência de equações físicas e também para derivar relações entre grandezas.

As dimensões das grandezas físicas são expressas em termos das dimensões fundamentais do Sistema Internacional de Unidades (SI). As mais comuns são:

  1. Comprimento (L): metro (m)
  2. Massa (M): quilograma (kg)
  3. Tempo (T): segundo (s)
  4. Corrente elétrica (I): ampère (A)
  5. Temperatura (Θ): kelvin (K)
  6. Quantidade de substância (N): mol (mol)
  7. Intensidade luminosa (J): candela (cd)

Exemplos de grandezas derivadas e suas dimensões:

  • Velocidade: \([L T^{-1}]\)
  • Aceleração: \([L T^{-2}]\)
  • Força (F = m a): \([M L T^{-2}]\)
  • Energia (E = F d): \([M L^2 T^{-2}]\)
  • Potência (P = E/t): \([M L^2 T^{-3}]\)
  • Pressão (P = F/A): \([M L^{-1} T^{-2}]\)

Operações com unidades de medida

O pacote units do R e WolframAlpha permitem a manipulação de grandezas físicas com unidades, garantindo coerência dimensional e facilitando conversões automáticas.

Principais funcionalidades:

  1. Definição de unidades para variáveis numéricas.
  2. Conversão entre unidades compatíveis.
  3. Verificação de coerência dimensional para evitar operações incorretas.
  4. Integração com gráficos e tabelas, mantendo as unidades nos resultados.
    Exemplo de uso: ao definir uma velocidade em metros por segundo e multiplicá-la por um tempo em segundos, o resultado terá automaticamente a unidade de metros. Caso seja necessário converter para quilômetros, o pacote realiza a conversão sem necessidade de cálculos manuais.

Se houver tentativa de somar grandezas incompatíveis, como massa e distância, o pacote gera um erro, garantindo a consistência das operações.

Esse pacote é útil em modelagem matemática aplicada às ciências biológicas, ajudando a evitar erros em cálculos envolvendo grandezas físicas.

10 lb + 10 kg

84 kg / (1.69 m)^2

kg / m^2

convert mi^3 to ft^3

MCT <- c(70, 90, 100)
Estatura <- c(1.8, 1.7, 1.9)
class(MCT)
[1] "numeric"
units(MCT) <- "kg"
print(MCT)
Units: [kg]
[1]  70  90 100
class(MCT)
[1] "units"
units(Estatura) <- "m"
print(Estatura)
Units: [m]
[1] 1.8 1.7 1.9
IMC <- MCT/Estatura^2
print(IMC, digits=3)
Units: [kg/m^2]
[1] 21.6 31.1 27.7
print(IMC[1], digits=3)
21.6 [kg/m^2]
units::drop_units(MCT)
[1]  70  90 100
units::drop_units(Estatura)
[1] 1.8 1.7 1.9
units(MCT) <- units::make_units(kilogram)
print(MCT)
Units: [kg]
[1]  70  90 100
class(MCT)
[1] "units"
units(Estatura) <- units::make_units(meter)
print(Estatura)
Units: [m]
[1] 1.8 1.7 1.9
IMC <- MCT/Estatura^2
print(IMC, digits=3)
Units: [kg/m^2]
[1] 21.6 31.1 27.7
print(IMC[1], digits=3)
21.6 [kg/m^2]
a1 <- 10
units(a1) <- "m1 s-2"
print(a1)
10 [m/s^2]
a2 <- units::set_units(a1, mi/h^2)
print(a2)
80529.71 [mi/h^2]
units::ud_are_convertible("m", "km")
[1] TRUE
units::ud_are_convertible("s", "kg")
[1] FALSE
u <- units::valid_udunits()
udunits database from C:/Users/User/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
print(u$symbol)
  [1] "m"      "kg"     "s"      "A"      "K"      "mol"    "cd"     "rad"   
  [9] "sr"     "Hz"     "g"      "N"      "Pa"     "J"      "W"      "C"     
 [17] "V"      "F"      "Ω"      "S"      "Wb"     "T"      "H"      "°C"    
 [25] "lm"     "lx"     "kat"    "Bq"     "Gy"     "Sv"     "min"    "h"     
 [33] "d"      "π"      "°"      "'"      "\""     "L"      "t"      "eV"    
 [41] "u"      "au"     "ua"     ""       ""       "Å"      "a"      ""      
 [49] "b"      ""       ""       "Ci"     "R"      ""       ""       ""      
 [57] "°K"     ""       ""       "Bd"     "℃"      "kt"     ""       "%"     
 [65] "ppv"    "ppm"    "ppb"    "ppt"    "ppq"    ""       ""       ""      
 [73] ""       ""       ""       "lb"     ""       "gr"     ""       ""      
 [81] ""       ""       ""       ""       ""       ""       "dr"     ""      
 [89] ""       ""       ""       ""       ""       ""       ""       ""      
 [97] ""       ""       ""       ""       ""       ""       ""       ""      
[105] ""       ""       ""       "in"     "ft"     "yd"     "mi"     ""      
[113] ""       ""       "rps"    "rpm"    ""       ""       ""       ""      
[121] ""       ""       ""       ""       ""       "bu"     "pk"     ""      
[129] ""       "cc"     ""       ""       ""       ""       ""       "bbl"   
[137] ""       ""       "pt"     ""       ""       "oz"     "Tbl"    "fldr"  
[145] "tsp"    ""       ""       ""       ""       ""       ""       "BZ"    
[153] ""       ""       ""       ""       ""       ""       "yr"     ""      
[161] ""       ""       ""       ""       ""       ""       ""       ""      
[169] ""       ""       ""       ""       ""       ""       "H2O"    ""      
[177] ""       "Hg"     ""       ""       ""       ""       "kgf"    "ozf"   
[185] "lbf"    ""       "gf"     ""       ""       "atm"    "at"     "cm_H2O"
[193] ""       ""       "ftH2O"  "cm_Hg"  ""       ""       ""       "mm_Hg" 
[201] "in_Hg"  "psi"    "ksi"    ""       "B_SPL"  ""       "St"     ""      
[209] ""       ""       ""       ""       "cal"    ""       ""       "thm"   
[217] ""       "bev"    "VA"     ""       "hp"     ""       ""       ""      
[225] ""       ""       "BW"     "Bm"     ""       ""       ""       ""      
[233] ""       ""       ""       ""       ""       ""       "e"      ""      
[241] ""       ""       ""       ""       ""       "Oe"     ""       ""      
[249] ""       ""       ""       ""       ""       "BV"     "Bv"     "BµV"   
[257] "°R"     "°F"     ""       ""       ""       "sb"     "ph"     "nt"    
[265] ""       ""       ""       "gp"     ""       ""       "PVU"    ""      
[273] ""       ""       "DU"     ""      
print(u$definition[1:7])
[1] "The meter is the length of the path travelled by light in vacuum during a time interval of 1/299 792 458 of a second."                                                                                                                                                                                               
[2] " The kilogram is the unit of mass; it is equal to the mass of the international prototype of the kilogram."                                                                                                                                                                                                          
[3] "The second is the duration of 9 192 631 770 periods of the radiation corresponding to the transition between the two hyperfine levels of the ground state of the cesium 133 atom."                                                                                                                                   
[4] "The ampere is that constant current which, if maintained in two straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 meter apart in vacuum, would produce between these conductors a force equal to 2e-7 newton per meter of length."                                 
[5] "The kelvin, unit of thermodynamic temperature, is the fraction 1/273.16 of the thermodynamic temperature of the triple point of water."                                                                                                                                                                              
[6] "The mole is the amount of substance of a system which contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12. When the mole is used, the elementary entities must be specified and may be atoms, molecules, ions, electrons, other particles, or specified groups of such particles."
[7] "The candela is the luminous intensity, in a given direction, of a source that emits monochromatic radiation of frequency 540e12 hertz and that has a radiant intensity in that direction of 1/683 watt per steradian."                                                                                               
if (requireNamespace("xml2", quietly = TRUE)) {
  units::valid_udunits()
  units::valid_udunits_prefixes()
  if(interactive())
    View(units::valid_udunits())
}
udunits database from C:/Users/User/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
udunits database from C:/Users/User/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
print(units::valid_udunits_prefixes())
udunits database from C:/Users/User/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
# A tibble: 20 × 4
   symbol symbol_aliases name  value
   <chr>  <chr>          <chr> <dbl>
 1 Y      ""             yotta 1e+24
 2 Z      ""             zetta 1e+21
 3 E      ""             exa   1e+18
 4 P      ""             peta  1e+15
 5 T      ""             tera  1e+12
 6 G      ""             giga  1e+ 9
 7 M      ""             mega  1e+ 6
 8 k      ""             kilo  1e+ 3
 9 h      ""             hecto 1e+ 2
10 da     ""             deka  1e+ 1
11 d      ""             deci  1e- 1
12 c      ""             centi 1e- 2
13 m      ""             milli 1e- 3
14 µ      "μ, u"         micro 1e- 6
15 n      ""             nano  1e- 9
16 p      ""             pico  1e-12
17 f      ""             femto 1e-15
18 a      ""             atto  1e-18
19 z      ""             zepto 1e-21
20 y      ""             yocto 1e-24
mtcars$consumption <- units::set_units(mtcars$mpg, mi/gallon)
mtcars$power <- units::set_units(mtcars$hp, hp)

# Use units encoded into the data
ggplot2::ggplot(mtcars) +
  ggplot2::geom_point(ggplot2::aes(power, consumption))

# Convert units on the fly during plotting
ggplot2::ggplot(mtcars) +
  ggplot2::geom_point(ggplot2::aes(power, consumption)) +
  units::scale_x_units(unit = "W") + # 1 hp = 746 Watt
  units::scale_y_units(unit = "km/l")

# Resolve units when transforming data
ggplot2::ggplot(mtcars) +
  ggplot2::geom_point(ggplot2::aes(power, 1 / consumption))

# Reverse the y axis
ggplot2::ggplot(mtcars) +
  ggplot2::geom_point(ggplot2::aes(power, consumption)) +
  units::scale_y_units(trans="reverse")

Problema 1

Efetue as operações indicadas apresentando o resultado o mais simplificado possível e em unidades S.I.

  1. \(\dfrac{0.3}{0.53\times \left(5\,\text{cm}^{-1}\right)^2\times (1-0.3)^2}\times \dfrac{6.34\,\text{cm}^2\times 2.4\,\text{atm}\times 9.8\,\text{m}\,\text{s}^{-2}}{180\, \text{g}\,\text{cm}^{-1}\,\text{s}^{-1}\times 10\,\text{cm}}\)

Resposta:

3.878645e-03 [m^4/s^3]

Solução 1:

u1 <- 1
units(u1) <- "g cm-1 s-1"
u3 <- 1
units(u3) <- "kg m-1 s-1"
u2 <- 1
units(u2) <- "kg m-1 s-2" # 1 atm = 101325 Pa

a1 <- units::set_units(units::set_units(2.4, atm), 
                       units(u2), 
                       mode = "standard")

r <- (0.3/(0.53*
       units::set_units(units::set_units(5, 1/cm), 1/m)^2*
         ((1-0.3)^2))*
  units::set_units(units::set_units(6.34, cm^2), m^2)*
  units::set_units(units::set_units(2.4, atm), units(u2), 
                   mode="standard")*
     units::set_units(9.8, m/s^2))/
  (units::set_units(units::set_units(180, units(u1), 
                                     mode="standard"), 
                    units(u3), mode="standard")*
  units::set_units(units::set_units(10, cm), m))

format(r, scientific=TRUE) 
[1] "3.878645e-03 [m^4/s^3]"

Solução 2:

a <- 0.3
b <- 0.53
c <- units::set_units(5,"cm^-1")
# ou c <- units::set_units(5,"cm-1")
d <- 0.3
e <- units::set_units(6.34,"cm^2")
# ou e <- units::set_units(6.34,"cm2")
f <- units::set_units(2.4, "atm")
  # pressão = força / área
  # força = massa * aceleração
  # atm = massa * aceleração / área [g m s-2 m-2]
units::ud_are_convertible("atm", "(g*m/(s^2))/(m^2)")
[1] TRUE
units::ud_are_convertible("atm", "g m s^-2 m^-2")
[1] TRUE
units::ud_are_convertible("atm", "g m s-2 m-2")
[1] TRUE
units::ud_are_convertible("atm", "g/(s^2*cm)")
[1] TRUE
units::ud_are_convertible("atm", "g cm-1 s-2")
[1] TRUE
f <- units::set_units(f, "g cm-1 s-2")
g <- units::set_units(9.8,"m s-2")
  g <- units::set_units(g,"cm s-2")
h <- units::set_units(180,"g cm-1 s-1")
i <- units::set_units(10,"cm")

r <- (a/(b*c^2*(1-d)^2))*((e*f*g)/(h*i))
format(r, scientific=TRUE) 
[1] "3.878645e+05 [cm^4/s^3]"
r <- units::set_units(r,"m4 s-3")
format(r, scientific=TRUE) 
[1] "3.878645e-03 [m^4/s^3]"

Problema 2

Média e desvio-padrão de variável com unidade de medida:

v <- units::set_units(runif(3,1,5),"m")
mean(v)
2.660829 [m]
sd(v)
[1] 1.654128

Um problema com porcentagens

Crescimento de um potro

Suponha que um biólogo esteja estudando o crescimento de um potro. Quando ele começa sua investigação, o potro pesa 50 kg. O número é simplificado para facilitar a apresentação. Em um mês a massa corporal total (MCT) aumenta 20%, ou seja, 1/5 de 50 kg, e chega a 60 kg. Suponha que em um segundo mês a MCT aumente novamente em 20%; então tendemos a dizer “o aumento total é de 20% + 20% = 40%”.

Fig. 1.1. Crescimento de um potro.

Fig. 1.1. Crescimento de um potro.

\[ f=w\left(1+\dfrac{p}{100}\right)^n \]

\(n\in\mathbb{N^{\ast}}\): número de intervalos de tempo

\(p\in\mathbb{R_{+}^{\ast}}\): proporção de aumento da MCT num período de tempo

Este é um exemplo clássico de crescimento composto, onde os ganhos de um período são reinvestidos, por assim dizer, e contribuem para o crescimento em períodos subsequentes. No contexto do crescimento da massa corporal total (MCT) do potro, o erro comum é somar as taxas de crescimento sem considerar o efeito de composição.

No primeiro mês, o potro de 50 kg aumenta sua massa em 20%, o que leva a um aumento de 10 kg, resultando em uma MCT de 60 kg.

Para o segundo mês, o aumento de 20% não é aplicado ao peso original de 50 kg, mas ao novo peso de 60 kg. Isso significa que o aumento é de 20% de 60 kg, não de 50 kg. Vamos calcular o novo peso após o segundo mês para ver por que simplesmente somar as taxas de crescimento (20% + 20% = 40%) não dá uma descrição precisa do aumento total.

\[ \begin{align} \text{Aumento no segundo mês} &= 60 \,\text{kg} \times 20\% = 60 \,\text{kg} \times 0.20 = 12 \,\text{kg} \\ \text{Novo peso após o segundo mês} &= 60 \,\text{kg} + 12 \,\text{kg} = 72 \,\text{kg} \end{align} \]

Portanto, ao final do segundo mês, o peso do potro é de 72 kg. Para calcular o aumento percentual total, podemos usar a fórmula de crescimento composto ou simplesmente calcular a diferença percentual entre o peso inicial e o final:

\[ \begin{align} \text{Aumento percentual total} &= \left( \dfrac{\text{Peso final} - \text{Peso inicial}}{\text{Peso inicial}} \right) \times 100\% \\ \text{Aumento percentual total} &= \left( \dfrac{72 \,\text{kg} - 50 \,\text{kg}}{50 \,\text{kg}} \right) \times 100\%=44\% \end{align} \]

Vamos calcular isso para ver como o aumento total é realmente maior do que a soma simples das taxas de aumento mensal.

O aumento percentual total na massa corporal total (MCT) do potro, ao longo dos dois meses, é de 44%. Isso demonstra que o aumento real é maior do que a soma simples das taxas de crescimento mensal (20% + 20% = 40%), devido ao efeito de composição do crescimento.


\[\left(1+\dfrac{20}{100}\right)^2=1.44\]

(1+20/100)^2
[1] 1.44
w <- 50
r <- 0.2
for(t in 0:2)
{
  cat("\nPeso no tempo t(",t,")=",w,sep="")
  cat("\n\t... aumento de ",r*100,"%",sep="")
  w <- w*(1+r)
}

Peso no tempo t(0)=50
    ... aumento de 20%
Peso no tempo t(1)=60
    ... aumento de 20%
Peso no tempo t(2)=72
    ... aumento de 20%

(1+20/100)^2
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   1.44

Jacinto d’água

  • Problema 1.3.1 O Nilo Branco acima da represa em Jebel Aulia estava infestado por uma erva daninha conhecida como jacinto d’água. Em 1958 a planta cobria apenas 12 km2, mas o aumento anual foi de 50%.
  1. Qual área foi coberta \(1,2, \ldots, n\) anos depois?

  2. Quanto tempo levou para cobrir toda a área de remanso de 200 km2?

Solução:

  1. \(\text{Área} = 12 \times 1.5^n \;\text{km}^2, \;n = 1,2, \ldots\)

\[ \begin{align} 12 \times 1.5^n &= 200 \\ n \times \log(1.5) &= \log\left(\dfrac{200}{12}\right) \\ n &\approx 6.94 \;\text{anos} \end{align} \]

Portanto, a água represada foi totalmente coberto em 1965 (= 1958 + 7).

solve 12 1.5^n = 200 for n

log(200/12)/log(1.5)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   6.9387246
deff("[y]=f(x)","y=12*1.5^x - 200")
fsolve(7,f)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   6.9387246

cat("n =" , log(200/12)/log(1.5))
n = 6.938725
f <- function(x) 12*1.5^x-200
uni <- uniroot(f, c(0, 8))$root
cat("n =", uni)
n = 6.938745
curve(f(x), 0, 10, xlab="n", ylab="f(n)", 
      main=expression(f(n)==12*plain(x)*1.5^n-200))
points(uni, 0, pch = 16, cex = 1.2)
abline(h = 0, lty = 3)
abline(v = uni, lty = 3)

# changing axes
startyear <- 1958
curve(f(x), 0, 10, 
      xlab="ano = n+1958", 
      ylab="área (km²)", 
      axes=FALSE,
      main=expression(f(ano)==12*plain(x)*1.5^ano))
y <- seq(-200,600,by=100)
l <- y+200
axis(2,at=y,labels=l)
axis(1,at=0:10,labels=seq(startyear,startyear+10,by=1))
points(uni, 0, pch = 16, cex = 1.2)
abline(h = 0, lty = 3)
abline(v = uni, lty = 3)

area <- 12
r <- 0.5
ano <- ano0 <- 1958
while (1)
{
  cat("\nArea coberta em ",ano," = ",area,sep="")
  delta <- ano-ano0
  if(delta>0) {cat(" (após ",delta," anos)",sep="")}
  if (area >= 200)
  {
    break
  }
  cat("\n\t... aumento de ",r*100,"%",sep="")
  area <- area*(1+r)
  ano <- ano+1
}

Area coberta em 1958 = 12
    ... aumento de 50%
Area coberta em 1959 = 18 (após 1 anos)
    ... aumento de 50%
Area coberta em 1960 = 27 (após 2 anos)
    ... aumento de 50%
Area coberta em 1961 = 40.5 (após 3 anos)
    ... aumento de 50%
Area coberta em 1962 = 60.75 (após 4 anos)
    ... aumento de 50%
Area coberta em 1963 = 91.125 (após 5 anos)
    ... aumento de 50%
Area coberta em 1964 = 136.6875 (após 6 anos)
    ... aumento de 50%
Area coberta em 1965 = 205.0312 (após 7 anos)

# definição da função
def f(x):
    return 12 * 1.5**x - 200

# Encontrar raiz onde f(x)=0
raiz = scipy.optimize.brentq(f, 0, 10)

# Valores para o gráfico
x = numpy.linspace(0, 10, 200)
y = f(x)

# Gráfico
matplotlib.pyplot.plot(x, y, color='blue')
matplotlib.pyplot.axhline(y=0, linestyle='dotted', color='black')
matplotlib.pyplot.axvline(x=raiz, linestyle='dotted')
matplotlib.pyplot.plot(raiz, 0, 'o', markersize=8, color='red')
matplotlib.pyplot.xlabel('x')
matplotlib.pyplot.ylabel('f(x)')
matplotlib.pyplot.title('Gráfico da função e sua raiz')
matplotlib.pyplot.grid(False)
matplotlib.pyplot.show()

Leis algébricas

Quais expressões a seguir são equivalentes?

  1. \(1+p/100\)
  2. \((1+p)/100\)
  3. \(p/100+1\)
  4. \(p/(100+1)\)

Resposta:

  1. \(1+\dfrac{p}{100}\)
  2. \(\dfrac{1+p}{100}\)
  3. \(\dfrac{p}{100}+1\)
  4. \(\dfrac{p}{100+1}\)

Portanto, \(a=c\).

\[\Diamond\]

Números relativos

\[ \begin{align} |+5|&=5 \\ |-5|&=5 \end{align} \]

absolute -5

abs(-5)
[1] 5

abs(-5)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   5.

Nunca divida por zero!

Exemplo I. Os leitores familiarizados com o símbolo \(\infty\) que significa infinito podem estar inclinados a escrever \(3/0 = \infty\). No entanto, isso não é correto por dois motivos. Primeiramente, \(\infty\) não é um número, de modo que o sinal de igualdade não é aplicável. Em segundo lugar, se \(3/0 = \infty\) fosse verdadeiro, \(3/0 = -\infty\) também seria verdadeiro.

is 0 a positive number?

is infinity a real number?

x/0

Exemplo II. Observe que a equação \(x^2 = px\) não pode ser resolvida adequadamente se dividirmos cada lado por \(x\). Perderíamos a solução possível \(x = 0\).

Procedendo corretamente, coletamos os dois termos do lado esquerdo, fatoramos \(x\) e decidimos que \(x\) ou \(x - p\) deve ser zero:

\[ \begin{align} x^2&=px \\ x^2-px&=0 \\ x(x-p)&=0 \end{align} \]

Para \(p=1\), tem-se \(x(x-1)=0\).

x^2 = x

// Solucao correta e exata! 0 c -1 x + 1 x^2=0
y = poly([0 -1 1],"x","coeff")
roots(y)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 y  = 

  -x +x^2
 ans  =

   1. + 0.i
   0. + 0.i

# Solucao incorreta!
f <- function(x) x^2 - x
curve(f(x), 0, 2, xlab="x", ylab="f(x)", 
      main=expression(x^2-x==0))
uni <- uniroot(f, c(0, 2))$root
cat("x =", uni)
x = 0
points(uni, 0, pch = 16, cex = 1.2)
abline(h = 0, v = uni, lty = 3)

# Solucao correta, mas aproximada!
f <- function(x) x^2 - x
curve(f(x), -1, 2, xlab="x", ylab="f(x)", 
      main=expression(x^2-x==0))
All <- rootSolve::uniroot.all(f, c(-1, 2))
print(All)
[1] -0.0001680278  1.0001680278
points(All, y = rep(0, length(All)), pch = 16, cex = 1)
abline(h = 0, v = c(All[1], All[2]), lty = 3)

# Definir os coeficientes do polinômio f(x) = x² - x
coeficientes = [1, -1, 0]  # Representa x² - x

# Encontrar todas as raízes do polinômio
raizes = numpy.roots(coeficientes)
print("Raízes encontradas:", raizes)
Raízes encontradas: [1. 0.]
# Criar gráfico da função
x = numpy.linspace(-1, 2, 400)
y = x**2 - x  # Avaliação da função

matplotlib.pyplot.figure(figsize=(8, 6))
matplotlib.pyplot.plot(x, y, color='blue', label="f(x) = x² - x")
matplotlib.pyplot.axhline(0, color='black', linestyle='dotted')

# Marcar raízes no gráfico
for raiz in raizes:
    matplotlib.pyplot.axvline(x=raiz, color='gray', linestyle='dotted')
    matplotlib.pyplot.plot(raiz, 0, 'o', markersize=8, color='red')

matplotlib.pyplot.xlabel('x')
matplotlib.pyplot.ylabel('f(x)')
matplotlib.pyplot.title('Gráfico da função e suas raízes')
matplotlib.pyplot.grid(False)
matplotlib.pyplot.legend()
matplotlib.pyplot.show()

Desigualdades

Exemplo 1.7.1. Resolver a inequação: u é incógnita e p é parâmetro

\[ u(u-1)>p-4u+u^2 \]

solve u(u-1)>p-4u+u^2 for u

Resposta:

\(u>p/3\) and \(p \in \mathbb{R}\)

Exemplo II. Resolver a inequação

\[ x^2<2 \]

x^2<2

Resposta:

\[ -\sqrt{2}<x<\sqrt{2} \]

Médias

Média é uma medida de posição central de um conjunto de valores numéricos. Portanto, não pode ser calculada para variável ordinal e nominal.

Média geométrica em Biologia

Quando uma quantidade muda com o tempo ou quando um experimento é repetido várias vezes, temos que condensar a quantidade de dados para fins práticos. Uma maneira de fazer isso é calcular média ou valor médio.

Quando a quantidade em consideração é intervalar ou razão, o valor médio mais comum é a média aritmética.

\[ \bar{x}=\dfrac{x_{1}+x_{2}}{2} \]

Há ocasiões em que a média aritmética perde seu valor biológico significado.

A média geométrica só é aplicável se as grandezas envolvidas são medidos em uma escala de razão.

Considere o crescimento de um potro conforme descrito na Seção 1.3.

Em intervalos de tempo equidistantes, o potro atinge os pesos 50 kg, 60 kg, 72 kg.

A sequência foi o resultado da multiplicação de 50 kg repetidamente pelo fator constante 1.2. Achamos que 60 kg é a média adequada entre 50 kg e 72 kg. Porém, a média aritmética é \((50 + 72)/2 = 61\).

Peso do potro é uma variável de razão. Portanto, podemos usar a média geométrica que é definida pela fórmula \(x_{g}=\sqrt{x_{1} \times x_{2}}\). Obtemos \(\sqrt{50\times72} = \sqrt{3600} = 60\) que é o valor desejado.

\[ \begin{align} x_{g}&=\sqrt{x_{1} \times x_{2}} \\ \log(x_{g})&=\dfrac{\log(x_{1}) + \log(x_{2})}{2} \end{align} \]

simplify log(sqrt(x y))


mean (a,b,c) geometric mean (a,b,c) harmonic mean (a,b,c)

x <- c(50, 60, 72)
DescTools::Mean(x)
[1] 60.66667
DescTools::Gmean(x)
[1] 60
DescTools::Hmean(x)
[1] 59.34066

x = [50, 60, 72]

media_arit = numpy.mean(x)
media_geom = scipy.stats.gmean(x)
media_harm = scipy.stats.hmean(x)

print(f'Média Aritmética: {media_arit:.2f}')
Média Aritmética: 60.67
print(f'Média Geométrica: {media_geom:.2f}')
Média Geométrica: 60.00
print(f'Média Harmônica: {media_harm:.2f}')
Média Harmônica: 59.34

x = [50, 60, 72]
mean(x)
geomean(x)
harmean(x)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 x  = 

   50.   60.   72.
 ans  =

   60.666667
 ans  =

   60.000000
 ans  =

   59.340659

Média harmônica na Física

Em muitas situações que envolvem taxas e razões, a média harmônica fornece a média correta. Por exemplo, se um veículo percorre uma certa distância \(d\) na ida com velocidade \(x\) (por exemplo, 60 km/h) e retorna a mesma distância com velocidade \(y\) (por exemplo, 20 km/h), então a velocidade média do trajeto é a média harmônica de \(x\) e \(y\) (30 km/h), e não a média aritmética (40 km/h). O tempo total de viagem é o mesmo que se ele tivesse percorrido toda a distância a essa velocidade média harmônica. Isso pode ser demonstrado da seguinte forma:

\[ \begin{align} \text{Velocidade média para todo o percurso} &= \dfrac{\text{Distância total percorrida}}{\text{Soma do tempo de cada segmento}} \\ &= \dfrac{2d}{\dfrac{d}{x} + \dfrac{d}{y}} \\ &= \dfrac{2xy}{x + y} \\ \text{Velocidade média para todo o percurso}&=\dfrac{(x^{-1}+y^{-1})^{-1}}{2} \end{align} \]

Por outro lado, se o veículo percorre um determinado tempo a uma velocidade \(x\) e depois o mesmo tempo a uma velocidade \(y\), então a velocidade média é a média aritmética de \(x\) e \(y\), que no exemplo acima resulta em 40 km/h:

\[ \begin{align} \text{Velocidade média para todo o percurso} &= \dfrac{\text{Distância total percorrida}}{\text{Soma do tempo de cada segmento}}\\ &= \dfrac{xt + yt}{2t}\\ \text{Velocidade média para todo o percurso}&= \dfrac{x + y}{2} \end{align} \]

O mesmo princípio se aplica para mais de dois segmentos: se há uma série de subtrajetos com velocidades diferentes, e cada subtrajeto cobre a mesma distância, então a velocidade média é a média harmônica de todas as velocidades dos subtrajetos. Se cada subtrajeto leva o mesmo tempo, então a velocidade média é a média aritmética das velocidades dos subtrajetos.

Se nenhuma dessas condições for satisfeita, então uma média harmônica ponderada ou uma média aritmética ponderada pode ser necessária. No caso da média aritmética, a velocidade de cada parte do trajeto é ponderada pelo tempo gasto naquela parte. Já na média harmônica, o peso correspondente é a distância percorrida. Em ambos os casos, a fórmula final se reduz à divisão da distância total pelo tempo total.

No entanto, é possível evitar o uso da média harmônica no caso da ponderação por distância. Podemos reformular o problema considerando a “lenteza” da viagem (onde “lenteza” significa o inverso da velocidade, expresso em tempo por quilômetro). Para cada segmento do trajeto \(i\), a lenteza é dada por:

\[ s_i = \dfrac{1}{\text{velocidade}_i} \]

Então, basta calcular a média aritmética ponderada das lentezas \(s_i\), ponderadas por suas respectivas distâncias percorridas (normalizadas para que a soma seja 1). Isso dá a verdadeira média da lenteza da viagem (em tempo por quilômetro). Descobrimos, assim, que esse procedimento — que pode ser feito sem a necessidade de conhecer a média harmônica — equivale matematicamente ao cálculo da média harmônica. Isso demonstra por que a média harmônica funciona nesse caso.

Desigualdades das médias

A média aritmética é maior que a geométrica. A média geométrica é maior que a harmônica.

Para dois números reais positivos \(a\) e \(b\), considere:

\[ \left(\sqrt{a} - \sqrt{b}\right)^2 \geq 0 \]

Expandindo:

\[ a - 2\sqrt{ab} + b \geq 0 \]

Daí resulta diretamente:

\[ \dfrac{a + b}{2} \geq \sqrt{ab} \]

com a igualdade ocorrendo somente quando \(a = b\).

Sejam \(a\) e \(b\) dois números reais positivos. A média harmônica é definida como:

\[ H = \dfrac{2}{\dfrac{1}{a} + \dfrac{1}{b}} = \dfrac{2ab}{a + b} \]

Pela desigualdade entre média aritmética e geométrica, sabemos que:

\[ \dfrac{a + b}{2} \geq \sqrt{ab} \]

Invertendo ambos os lados (válido, pois \(a,b>0\)):

\[ \dfrac{2}{a+b} \leq \dfrac{1}{\sqrt{ab}} \]

Multiplicando ambos os lados por \(ab\):

\[ \dfrac{2ab}{a+b} \leq \sqrt{ab} \]

Portanto, concluímos que:

\[ H \leq \sqrt{ab} \leq \dfrac{a + b}{2} \]

Assim, fica demonstrado que, para quaisquer números positivos, a média harmônica é menor ou igual à média geométrica, que, por sua vez, é menor ou igual à média aritmética. A igualdade ocorre se e somente se \(a = b\).

Somatório

\[ \begin{align} \bar{x}&=\dfrac{x_{1}+x_{2}+\cdots+x_{n}}{n}=\dfrac{\sum_{i=1}^{n}{x_{i}}}{n} \\ \bar{x}&=\dfrac{\sum_{i=1}^{n}{x_{i}}}{n}=\dfrac{1}{n}\sum_{i=1}^{n}{x_{i}}=\sum_{i=1}^{n}{\dfrac{x_{i}}{n}} \end{align} \]

  • Mostre que o somatório dos desvios é nulo, i.e., \(\sum_{i=1}^{n}{\left(x_{i}-\bar{x}\right)}=0\).

  • Mostre que a média dos desvios absolutos é positiva, i.e.,\(\dfrac{1}{n}\sum_{i=1}^{n}{\left|x_{i}-\bar{x}\right|}\ge0\).

  • Mostre que a média dos desvios ao quadrado (variância populacional) é positiva, i.e., \(\dfrac{1}{n}\sum_{i=1}^{n}{\left(x_{i}-\bar{x}\right)^2}\ge0\).

Exemplo:

\(x_{i}\) \(x_{i}-\bar{x}\) \(\left(x_{i}-\bar{x}\right)^2\)
2.4 -0.3 0.09
3.1 +0.4 0.16
2.8 +0.1 0.01
2.9 +0.2 0.04
2.2 -0.5 0.25
2.8 +0.1 0.01
—- —— ———
16.2 0 0.56
  • Média: \(\bar{x}=16.2/6=2.7\)
  • Variância populacional: \(s^2=0.56/6=0.09\bar{3}\)

mean (2.4, 3.1, 2.8, 2.9, 2.2, 2.8)

population variance (2.4, 3.1, 2.8, 2.9, 2.2, 2.8)

x <- c(2.4, 3.1, 2.8, 2.9, 2.2, 2.8)
mean(x)
[1] 2.7
var(x)*((length(x)-1)/length(x)) 
[1] 0.09333333

x = [2.4, 3.1, 2.8, 2.9, 2.2, 2.8]
mean(x)
variance(x)*5/6
variance(x,"*", %nan)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 x  = 

   2.4   3.1   2.8   2.9   2.2   2.8
 ans  =

   2.7000000
 ans  =

   0.0933333
 ans  =

   0.0933333

Potência

Prefixos para Unidades de Medida

Símbolo Prefixo Fator Potência de 10
G giga- 1000000000 109
M mega- 1000000 106
k kilo- 1000 103
m mili- 0.001 10-3
μ micro- 0.000001 10-6
n nano- 0.000000001 10-9

Exemplos são μg (micrograma), μm (micrômetro, anteriormente denotado apenas por μ), nm (nanômetro), MHz (megaHertz = 106 ciclos por segundo), mHz (miliHertz = 10-3 ciclos por segundo).

print(units::valid_udunits_prefixes())
udunits database from C:/Users/User/AppData/Local/R/win-library/4.5/units/share/udunits/udunits2.xml
# A tibble: 20 × 4
   symbol symbol_aliases name  value
   <chr>  <chr>          <chr> <dbl>
 1 Y      ""             yotta 1e+24
 2 Z      ""             zetta 1e+21
 3 E      ""             exa   1e+18
 4 P      ""             peta  1e+15
 5 T      ""             tera  1e+12
 6 G      ""             giga  1e+ 9
 7 M      ""             mega  1e+ 6
 8 k      ""             kilo  1e+ 3
 9 h      ""             hecto 1e+ 2
10 da     ""             deka  1e+ 1
11 d      ""             deci  1e- 1
12 c      ""             centi 1e- 2
13 m      ""             milli 1e- 3
14 µ      "μ, u"         micro 1e- 6
15 n      ""             nano  1e- 9
16 p      ""             pico  1e-12
17 f      ""             femto 1e-15
18 a      ""             atto  1e-18
19 z      ""             zepto 1e-21
20 y      ""             yocto 1e-24

A unidade ppm indica quantas “partes por milhão” estão envolvidas. Assim, 1 mg significa 1 ppm em relação a 1 kg. Da mesma forma, 1 cm3 é 1 ppm em relação a 1 m3.

Portanto, recíprocos como 1/A também são escritos como A-1. Da mesma forma, encontramos m seg-1 em vez de m/s para a unidade de velocidade.

Em relação às potências de dez, mencionamos a frase “ordem de magnitude”. Quando se diz que duas quantidades são de diferentes ordens de magnitude, isso pode significar que elas não são comparáveis em tamanho ou que uma quantidade é pelo menos dez vezes maior que a outra. “Duas ordens de grandeza” significaria então um fator de cerca de 102 = 100.

Problema 1.10.2. A capacidade de oxigênio do sangue dos mamíferos é de cerca de 200 ml por litro de sangue. Se totalmente utilizada, esta quantidade de oxigênio produzirá uma energia de 4.2×103 J (Joule).

  1. Em quantos graus Celsius a temperatura de 1 litro de sangue pode ser aumentada por essa energia?
  2. Quantos metros um homem de 70 kg pode escalar até consumir o oxigênio de seus 3.5 litros de sangue?

Solução:

  1. O sangue se comporta como a água, quando aquecido: Um litro precisa da energia de 4.2×103 J ou mil calorias (kcal ou C) para um aumento de temperatura de 1o C. E esta é exatamente a energia que o oxigênio no sangue pode fornecer. Portanto, a resposta é 1o C.

  2. A energia necessária para erguer uma massa de 1 kg por 1 m é 9.81 Nm (Newtonmetro) = 9.81 J. Portanto, para cada metro para subir, um homem de 70 kg requer uma energia de 70×9.81 J m-1. A energia contida em 3.5 litros de sangue é 3.5×4.2×103 J = 14.7×103 J. Essa energia é suficiente para subir (14.7×103 J)/(70×9.81 J m-1) = 21 m.

Assim, ao subir, o corpo tem que renovar seu conteúdo de oxigênio pelo menos a cada 21 metros.

Potência fracionária

\[ x^{1/2}=\sqrt{x}, \; x \ge 0 \]

\[ x^{2/3}=\sqrt[3]{x^2}, \; x > 0 \]

\[ \sqrt{x^2}=|x| \]

sqrt(x^2)=|x|

Cálculo com números aproximados

Os pesquisadores estão frequentemente preocupados com a imprecisão dos números.

Uma fonte são erros na contagem ou incertezas nos instrumentos de leitura.

Outra fonte são as flutuações aleatórias na amostragem.

Finalmente, os inevitáveis erros de arredondamento também causam algumas dificuldades.

Suponha que um número como 14.07 tenha um erro não superior a 0.005, ou seja, um erro não maior que a metade do último dígito. Então o último decimal 7 é exato e dizemos que 14.07 tem quatro dígitos significativos (ou algarismos).

Problema. Quantos dígitos significativos tem o número 380?

Solução:

3.8×102 tem dois dígitos significativos.

3.80×102 tem três dígitos significativos.

O erro é no máximo 0.05×102 para o primeiro número e no máximo 0.005×102 para o segundo número. Sem potências, ambos os números seriam 380, não indicando, portanto, a precisão.

Exemplo. Arredondar para uma casa decimal, arredondar para o menor e maior inteiro, e truncar os números 4.65 e 4.75.

Solução:

Pode ser aplicado pela regra: 5 é arredondado para baixo sempre que o algarismo precedente é par e é arredondado para cima sempre que o algarismo anterior é ímpar. Assim, 4.65 e 4.75 são arredondados para 4.6 e 4.8, respectivamente.

Arredondar para uma casa decimal 4.65 = 4.6

Arredondar para uma casa decimal 4.75 = 4.8

Arredondar para o menor inteiro 4.65 = 4

Arredondar para o menor inteiro 4.75 = 4

Arredondar para o maior inteiro 4.65 = 5

Arredondar para o maior inteiro 4.75 = 5

Truncar 4.65 = 4

Truncar 4.75 = 4

round to 2 digits 4.65

round to 2 digits 4.75

Comando Aparência Resultado
round to 2 digits 4.05 4.1 4.0
round to 2 digits 4.15 4.2 4.2
round to 2 digits 4.25 4.3 4.3
round to 2 digits 4.35 4.4 4.4
round to 2 digits 4.45 4.5 4.4
round to 2 digits 4.55 4.6 4.5
round to 2 digits 4.65 4.7 4.6
round to 2 digits 4.75 4.8 4.8
round to 2 digits 4.85 4.9 4.9
round to 2 digits 4.95 5.0 5.0
Comando Aparência Resultado
round to 3 digits 14.05 14.1 14.0
round to 3 digits 14.15 14.2 14.2
round to 3 digits 14.25 14.3 14.2
round to 3 digits 14.35 14.4 14.4
round to 3 digits 14.45 14.5 14.4
round to 3 digits 14.55 14.6 14.5
round to 3 digits 14.65 14.7 14.7
round to 3 digits 14.75 14.8 14.7
round to 3 digits 14.85 14.9 14.9
round to 3 digits 14.95 15.0 15.0
Comando Aparência Resultado
round to 1 digits 0.05 0.05 0.05
round to 1 digits 0.15 0.2 0.1
round to 1 digits 0.25 0.3 0.2
round to 1 digits 0.35 0.4 0.4
round to 1 digits 0.45 0.5 0.4
round to 1 digits 0.55 0.6 0.6
round to 1 digits 0.65 0.7 0.6
round to 1 digits 0.75 0.8 0.8
round to 1 digits 0.85 0.9 0.9
round to 1 digits 0.95 1.0 0.9

round(4.65,1)
[1] 4.7
round(4.75,1)
[1] 4.8
floor(4.65)
[1] 4
floor(4.75)
[1] 4
ceiling(4.65)
[1] 5
ceiling(4.75)
[1] 5
trunc(4.65)
[1] 4
trunc(4.75)
[1] 4

round(4.75)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   5.
round(4.65)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   5.
floor(4.65)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   4.
floor(4.75)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   4.
ceil(4.65)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   5.
ceil(4.75)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   5.
int(4.65)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   4.
int(4.75)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   4.

O resultado de uma multiplicação ou divisão tem aproximadamente o mesmo número de dígitos significativos que o termo com o menor número de dígitos significativos.

Assim, em 14.04×2.3/39.7 = 0.813, o termo com menos dígitos significativos é 2.3. Tem um, no máximo dois dígitos significativos. Portanto, 0.813 não tem mais dígitos significativos. O resultado deve ser arredondado para 0.81 caso o fator 2.3 tenha apenas um dígito significativo.

14.04 2.3/39.7

14.04*2.3/39.7
[1] 0.8134005

14.04*2.3/39.7
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   0.8134005

Ocasionalmente, o número de dígitos significativos é aumentado. Isso pode acontecer com a média aritmética de dez ou mais medições se a dispersão for pequena o suficiente. Por razões que não podem ser explicadas aqui, a precisão da média aritmética é maior do que a das medições individuais. Por exemplo, suponha que dez folhas de uma árvore sejam selecionadas aleatoriamente e seus comprimentos medidos em cm sejam:

5.8 6.1 5.7 5.6 6.2 5.8 5.9 6.2 6.0 5.9.

Cada medição contém dois dígitos significativos. A média aritmética deve ser escrita 5.92 e tem uma precisão maior que dois dígitos significativos.

Uma aplicação

Para ilustrar o uso de potências fracionárias em biologia, consideramos a forma de quadrúpedes (Fig. 1.3). \(l\) denota o comprimento de um quadrúpede medido do quadril ao ombro e \(h\) denota a largura que é a espessura média do corpo medida na direção vertical. Então o tronco é comparado com uma barra uniforme de comprimento \(l\) e largura \(h\) apoiada em suas extremidades. A gravidade causa encurvamento da barra. A física mostra que a razão é limitada por algum valor. Se a proporção exceder esse valor, a barra cede.

\[ l/\sqrt[3]{h^2} \]

Embora o torso de um animal seja um sistema complicado que consiste em ossos, músculos e tendões e, portanto, bastante diferente de uma barra uniforme, a aplicação da razão \(l/\sqrt[3]{h^2}\) indica aproximadamente a limitação do comprimento dos quadrúpedes.

A maioria dos outros quadrúpedes tem uma proporção consideravelmente menor que 7. Desta forma, seus troncos são menos ameaçados pela gravidade. Animal com razão maior que 7 dificilmente poderia manter-se em suas patas. O tronco provavelmente tocaria o chão.

Alguns dos valores mais altos alcançados pelos quadrúpedes são:

Mamífero Quadrúpede \(l\) cm \(h\) cm \(l/\sqrt[3]{h^2}\)
Arminho (Mustela erminea) 12 4 4.8
Bassê 35 12 6.7
Tigre indiano (Panthera tigres) 90 45 7.1
Lhama (Lama glama) 122 73 7.0
Elefante indiano (Elephas maximus) 153 135 5.8

12/4^{2/3}

12/4^(2/3)
[1] 4.762203

12/4^(2/3)
quit
Scilab 2023.1.0 (May 23 2023, 09:23:00)
 ans  =

   4.7622032

Simplificação em R

nlsr::nlsSimplify(quote((a+b) + (a+b))) ## 2 * (a + b)
2 * (a + b)
nlsr::nlsSimplify(quote((a+b) - (a+b))) ## 0
[1] 0
nlsr::nlsSimplify(quote(log(exp(a+b)))) ## a + b
a + b
nlsr::nlsSimplify(quote(exp(log(a+b)))) ## a + b
a + b
Deriv::Simplify(quote((a+b) + (a+b))) ## 2 * (a + b)
2 * (a + b)
Deriv::Simplify(quote((a+b) - (a+b))) ## 0
[1] 0
Deriv::Simplify(quote(log(exp(a+b)))) ## a + b
a + b
Deriv::Simplify(quote(exp(log(a+b)))) ## exp(log(a + b))
exp(log(a + b))

Tipos numéricos em R

x <- 1L
is.integer(x) # TRUE
[1] TRUE
x <- 1:3
is.integer(x) # TRUE
[1] TRUE
x <- seq(1,3)
is.integer(x) # TRUE
[1] TRUE
x <- 1
is.double(x) # TRUE
[1] TRUE
x <- 1L
x <- as.double(x) 
is.double(x) # TRUE
[1] TRUE
pi # 3.141593
[1] 3.141593
is.double(pi) # TRUE
[1] TRUE
x <- "3.141593"
is.character(x) # TRUE
[1] TRUE
x <- as.double(x)
is.double(x) # TRUE
[1] TRUE
x <- "3.141593"
is.character(x) # TRUE
[1] TRUE
nchar(x) # 8
[1] 8
x <- as.numeric(x)
is.double(x) # TRUE
[1] TRUE
z <- 1 + 3i
is.complex(z) # TRUE
[1] TRUE
Re(z) # 1
[1] 1
Im(z) # 3
[1] 3
Mod(z) # h = √(x^2 + y^2) = 3.162278
[1] 3.162278
Arg(z) # angle = 1.249046
[1] 1.249046
Conj(z) # 1-3i
[1] 1-3i

Arredondamento em R

options(digits=7) # default
pi # 3.141593
[1] 3.141593
round(x=pi) # 3
[1] 3
round(x=pi, digits=0) # 3
[1] 3
round(x=pi, digits=2) # 3.14
[1] 3.14
round(x=pi, digits=20) # 3.141593
[1] 3.141593
signif(x=pi, digits=1) # 3
[1] 3
signif(x=pi, digits=2) # 3.1
[1] 3.1
signif(x=pi, digits=3) # 3.14
[1] 3.14
trunc(x=pi) # 3
[1] 3
ceiling(pi) # 4
[1] 4
floor(pi) # 3
[1] 3
options(digits=15) # default
round(x=pi, digits=15) # 3.14159265358979
[1] 3.14159265358979
options(digits=20) # default
round(x=pi, digits=20) # 3.1415926535897931???
[1] 3.141592653589793116

Formatação numérica em R

options(digits=7) # default
x <- pi 
x # 3.141593
[1] 3.141593
options(digits=3)
x # 3.14
[1] 3.14
x <- pi # 3.141593
f <- format(x) # "3.141593"
str(f) # chr "3.141593"
 chr "3.14"
print(f, quote=FALSE) # 3.141593
[1] 3.14
noquote(f) # 3.141593
[1] 3.14
f <- as.double(f) # 3.14 < 3.141593
str(f) # num 3.14
 num 3.14
toString(x) # "3.14159265358979"
[1] "3.14159265358979"
noquote(toString(x)) # 3.14159265358979
[1] 3.14159265358979
format(x, digits=7) # 3.141593
[1] "3.141593"
format(x, digits=17) # 3.1415926535897931
[1] "3.1415926535897931"
format(x/10, scientific=TRUE) # 3.141593e-01
[1] "3.14e-01"
format(c(6.0, 13.1), digits=2) # " 6" "13"
[1] " 6" "13"
format(c(6.0, 13.1), digits=2, nsmall=1) # " 6.0" "13.1"
[1] " 6.0" "13.1"
format(2, nsmall=4) # 2.0000
[1] "2.0000"
format(round(2.001, 2), nsmall=2) # 2.00
[1] "2.00"
format(2.1, decimal.mark=",") # "2,1"
[1] "2,1"
format('Running', justify='r', width=9) # "  Running"
[1] "  Running"
format('Running', justify='c', width=12) # "  Running   "
[1] "  Running   "
# various formats of pi
sprintf("%f", pi)       # "3.141593"
[1] "3.141593"
sprintf("%.3f", pi)     # "3.142"
[1] "3.142"
sprintf("%1.0f", pi)    # "3"
[1] "3"
sprintf("%5.1f", pi)    # "  3.1"
[1] "  3.1"
sprintf("%05.1f", pi)   # "003.1"
[1] "003.1"
sprintf("%+f", pi)      # "+3.141593"
[1] "+3.141593"
sprintf("% f", pi)      # " 3.141593"
[1] " 3.141593"
sprintf("%-10f", pi)    # "3.141593  "
[1] "3.141593  "
sprintf("%e", pi)       # "3.141593e+00"
[1] "3.141593e+00"
sprintf("%E", pi)       # "3.141593E+00"
[1] "3.141593E+00"
sprintf("%g", pi)       # "3.14159"
[1] "3.14159"
sprintf("%g", 1e6*pi)   # "3.14159e+06"
[1] "3.14159e+06"
sprintf("%.9g", 1e6*pi) # "3141592.65"
[1] "3141592.65"
sprintf("%G", 1e-6*pi)  # "3.14159E-06"
[1] "3.14159E-06"
sprintf("%.*f", 54, pi)
[1] "3.141592653589793115997963468544185161590576171875000000"
# "3.141592653589793115997963468544185161590576171875000000"

sprintf(paste0("e with %2d digits = %.", 
               1:18, "g"), 
        1:18, exp(1))
 [1] "e with  1 digits = 3"                  
 [2] "e with  2 digits = 2.7"                
 [3] "e with  3 digits = 2.72"               
 [4] "e with  4 digits = 2.718"              
 [5] "e with  5 digits = 2.7183"             
 [6] "e with  6 digits = 2.71828"            
 [7] "e with  7 digits = 2.718282"           
 [8] "e with  8 digits = 2.7182818"          
 [9] "e with  9 digits = 2.71828183"         
[10] "e with 10 digits = 2.718281828"        
[11] "e with 11 digits = 2.7182818285"       
[12] "e with 12 digits = 2.71828182846"      
[13] "e with 13 digits = 2.718281828459"     
[14] "e with 14 digits = 2.718281828459"     
[15] "e with 15 digits = 2.71828182845905"   
[16] "e with 16 digits = 2.718281828459045"  
[17] "e with 17 digits = 2.7182818284590451" 
[18] "e with 18 digits = 2.71828182845904509"
sprintf("%09s", month.name)
 [1] "  January" " February" "    March" "    April" "      May" "     June"
 [7] "     July" "   August" "September" "  October" " November" " December"
# [1] "  January" " February" "    March" "    April"
# [5] "      May" "     June" "     July" "   August"
# [9] "September" "  October" " November" " December"

xx <- pi * 10^(-5:4)
cbind(format(xx, digits = 4), formatC(xx))
      [,1]        [,2]       
 [1,] "3.142e-05" "3.142e-05"
 [2,] "3.142e-04" "0.0003142"
 [3,] "3.142e-03" "0.003142" 
 [4,] "3.142e-02" "0.03142"  
 [5,] "3.142e-01" "0.3142"   
 [6,] "3.142e+00" "3.142"    
 [7,] "3.142e+01" "31.42"    
 [8,] "3.142e+02" "314.2"    
 [9,] "3.142e+03" "3142"     
[10,] "3.142e+04" "3.142e+04"
cbind(formatC(xx, width = 9, flag = "-"))
      [,1]       
 [1,] "3.142e-05"
 [2,] "0.0003142"
 [3,] "0.003142 "
 [4,] "0.03142  "
 [5,] "0.3142   "
 [6,] "3.142    "
 [7,] "31.42    "
 [8,] "314.2    "
 [9,] "3142     "
[10,] "3.142e+04"
cbind(formatC(xx, digits = 5, 
              width = 8, format = "f", flag = "0"))
      [,1]         
 [1,] "00.00003"   
 [2,] "00.00031"   
 [3,] "00.00314"   
 [4,] "00.03142"   
 [5,] "00.31416"   
 [6,] "03.14159"   
 [7,] "31.41593"   
 [8,] "314.15927"  
 [9,] "3141.59265" 
[10,] "31415.92654"
cbind(format(xx, digits = 4), 
      formatC(xx, digits = 4, format = "fg"))
      [,1]        [,2]        
 [1,] "3.142e-05" "0.00003142"
 [2,] "3.142e-04" "0.0003142" 
 [3,] "3.142e-03" "0.003142"  
 [4,] "3.142e-02" "0.03142"   
 [5,] "3.142e-01" "0.3142"    
 [6,] "3.142e+00" "3.142"     
 [7,] "3.142e+01" "31.42"     
 [8,] "3.142e+02" "314.2"     
 [9,] "3.142e+03" " 3142"     
[10,] "3.142e+04" "31416"     
## individual formatting to common width:
fc <- formatC(1.234 + 10^(0:8), format = "fg", 
              width = 11, big.mark = ",")
cbind(fc)
      fc           
 [1,] "      2.234"
 [2,] "      11.23"
 [3,] "      101.2"
 [4,] "      1,001"
 [5,] "     10,001"
 [6,] "    100,001"
 [7,] "  1,000,001"
 [8,] " 10,000,001"
 [9,] "100,000,001"
sprintf("(w-1):%s", c("xyz", NA, "abc"))
[1] "(w-1):xyz" "(w-1):NA"  "(w-1):abc"
# crfsuite::txt_sprintf("(w-1):%s", c("xyz", NA, "abc"))
sprintf("(w-1):%s_%s", c("xyz", NA, "abc"), c(NA, "xyz", "abc"))
[1] "(w-1):xyz_NA"  "(w-1):NA_xyz"  "(w-1):abc_abc"
# crfsuite::txt_sprintf("(w-1):%s_%s", c("xyz", NA, "abc"), c(NA, "xyz", "abc"))

Soma em R

1+2
[1] 3
1+2; 3+4
[1] 3
[1] 7
a <- 1
is.atomic(a) # TRUE
[1] TRUE
str(a)
 num 1
b <- c(2)
is.atomic(b) # TRUE
[1] TRUE
str(b)
 num 2
a+b
[1] 3
x <- c(10,0,2,3)
is.atomic(x) # TRUE
[1] TRUE
is.vector(x) # TRUE
[1] TRUE
str(x)
 num [1:4] 10 0 2 3
y <- c(5,6,7,8)
z <- x + y
sum(x) + sum(y)
[1] 41
sum(x + y)
[1] 41
sum(z)
[1] 41
x <- c(10,0,2,4)
y <- c(5,6,7)
z <- x + y # 15  6  9  9: soma errada!
sum(x) + sum(y) # 34: ok
[1] 34
sum(x + y) # 39: soma errada!
[1] 39
sum(z) # 39: soma errada!
[1] 39
x <- c(10,0,2,4)
x==0
[1] FALSE  TRUE FALSE FALSE
sum(x==0)
[1] 1
which(x==0)
[1] 2
x>0
[1]  TRUE FALSE  TRUE  TRUE
sum(x>0)
[1] 3
which(x>0)
[1] 1 3 4
x <- c(2, 4, NA)
length(x) # 3
[1] 3
str(x)
 num [1:3] 2 4 NA
sum(!is.na(x)) # 2 valid values
[1] 2
sum(is.na(x)) # 1 missing value
[1] 1
sum(is.nan(x)) # 0
[1] 0
sum(is.infinite(x)) # 0
[1] 0
sum(x) # NA
[1] NA
sum(x, na.rm=TRUE) # 6
[1] 6
x <- sort(x) # 2 4
sum(x) # 6
[1] 6
x <- x[!is.na(x)] # 2 4
sum(x) # 6
[1] 6
x <- c(2, 4, NA, NULL)
length(x) # 3
[1] 3
str(x)
 num [1:3] 2 4 NA
sum(is.na(x)) # 1
[1] 1
sum(is.nan(x)) # 0
[1] 0
sum(is.infinite(x)) # 0
[1] 0
sum(x) # NA
[1] NA
sum(x, na.rm=TRUE) # 3
[1] 6
x <- c(2, 4, NA, NULL, TRUE)
length(x) # 4
[1] 4
str(x)
 num [1:4] 2 4 NA 1
sum(is.na(x)) # 1
[1] 1
sum(is.nan(x)) # 0
[1] 0
sum(is.infinite(x)) # 0
[1] 0
sum(x) # NA
[1] NA
sum(x, na.rm=TRUE) # 7
[1] 7
x <- c(2, 4, NA, NULL, TRUE, Inf)
length(x) # 5
[1] 5
str(x)
 num [1:5] 2 4 NA 1 Inf
sum(is.na(x)) # 1
[1] 1
sum(is.nan(x)) # 1
[1] 0
sum(is.infinite(x)) # 1
[1] 1
sum(x) # NA
[1] NA
sum(x, na.rm=TRUE) # Inf
[1] Inf
x <- c(2, 4, NA, NULL, TRUE, Inf, "a")
length(x) # 6
[1] 6
str(x)
 chr [1:6] "2" "4" NA "TRUE" "Inf" "a"
sum(is.na(x)) # 1
[1] 1
sum(is.nan(x)) # 0
[1] 0
sum(is.infinite(x)) # 0
[1] 0
sum(is.character(x)) # 1
[1] 1
# sum(x) # Error
# sum(x, na.rm=TRUE) # Error
sum(as.numeric(x), na.rm=TRUE) # Inf
[1] Inf
x <- list(2, 4, NA, NULL, TRUE, Inf)
str(x)
List of 6
 $ : num 2
 $ : num 4
 $ : logi NA
 $ : NULL
 $ : logi TRUE
 $ : num Inf
length(x) # 7
[1] 6
sum(is.na(x)) # 1
[1] 1
# sum(is.nan(x)) # Error
# sum(is.infinite(x)) # Error
# sum(x) # Error
# sum(x, na.rm=TRUE) # Error
turner::sumlist(x, na.rm=TRUE)
[1] Inf
# Fibonacci sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
# Program to display the Fibonacci sequence up to n-th term using recursive functions
recursive_fibonacci <- function(n) {
  if(n <= 1) {
    return(n)
  } else {
    return(recursive_fibonacci(n-1) + recursive_fibonacci(n-2))
  }
}
k <- 8
fs <- NULL
for(i in 0:k){
  fs <- c(fs,recursive_fibonacci(i))
}
print(fs)
[1]  0  1  1  2  3  5  8 13 21

Média em R

x <- c(10,0,2,4)
is.vector(x) # TRUE
[1] TRUE
x>0 # TRUE FALSE  TRUE  TRUE
[1]  TRUE FALSE  TRUE  TRUE
sum(x>0) # 3
[1] 3
which(x>0) # 1 3 4
[1] 1 3 4
mean(x) # 4
[1] 4
mean(x>0) # 0.75
[1] 0.75
mean(x[x>0]) # 5.33 = (2+4+10)/3
[1] 5.33
x <- c(10,0,2,4,NA)
mean(x, na.rm=TRUE) # 4
[1] 4
w <- c(1, 2)
x <- c(7, 9)
xw <- weighted.mean(x, w) # (1*7 + 2*9)/3
xa <- mean(x) # (7 + 9)/2

x <- c(1:9, 20)
x # 1  2  3  4  5  6  7  8  9 20
 [1]  1  2  3  4  5  6  7  8  9 20
mean(x) # 6.5
[1] 6.5
sum(x)/length(x) # 6.5
[1] 6.5
mean(x, trim=0.1) # 5.5
[1] 5.5
sum(x[2:9])/8 # 5.5
[1] 5.5
count <- function(x,n){length((which(x==n)))}
perc <- function(x,n){
  format(round(100*length((which(x==n)))/length(x),2),2)
  }
x <- c(7, 2, 4, 3, -1, -2, 3, 3, 6, 8, 12, 7, 3)
sort(x)
 [1] -2 -1  2  3  3  3  3  4  6  7  7  8 12
# [1] -2 -1  2  3  3  3  3  4  6  7  7  8 12
length(x) # 13
[1] 13
count(x, 3) # 4
[1] 4
as.double(perc(x, 3)) # 30.77 = 100*(13/4)
[1] 30.8
x <- c(3, 4)
DescTools::Mean(x) # 3.5
[1] 3.5
DescTools::Gmean(x) # 3.464102
[1] 3.46
prod(x)^(1/length(x)) # 3.464102
[1] 3.46
DescTools::Hmean(x) # 3.428571
[1] 3.43
length(x)/(1/x[1] + 1/x[2]) # 3.428571
[1] 3.43

Multiplicação em R

x <- 2
y <- 3
p <- x*y # 6

x <- 2
y <- c(3, 4)
p <- x*y # 6 8

x <- c(2, 5)
y <- c(3, 4)
p <- x*y # 6 20

x <- c(2, 5)
p <- x**2 # 4 25
p <- x^2 # 4 25
p <- x^0.5 # 1.41 2.24

x <- 2
y <- 10
'+'(x,y)
[1] 12
'*'(x,y)
[1] 20
'^'(x,y)
[1] 1024
x <- 1:3
prod(x) # 6 = 1*2*3 = 3! 
[1] 6
x <- c(1:3, NA)
prod(x) # NA 
[1] NA
prod(x, na.rm=TRUE) # 6 = 1*2*3 = 3! 
[1] 6
# Recursive function to find factorial
recursive.factorial <- function(x) {
  if (x == 0)    return (1)
  else           return (x*recursive.factorial(x-1))
}
recursive.factorial(0) # 1
[1] 1
recursive.factorial(3) # 6
[1] 6
recursive.factorial(10) # 3628800
[1] 3628800
x <- 1:3
y <- 2:4
x %*% y
     [,1]
[1,]   20
#      [,1]
# [1,]   20
drop(x %*% y)  # scalar product
[1] 20
# 1*2 + 2*3 + 3*4 = 20
# [1] 20

# h = sqrt(a^2 + b^2)
c <- c(3, 4)
cd <- sum(c^2, na.rm=TRUE)
cs <- crossprod(c) # 3^2 + 4^2 = 25
identical(cd, cs) # FALSE
[1] FALSE
cs <- drop(crossprod(c)) # 3^2 + 4^2 = 25
identical(cd, cs) # TRUE
[1] TRUE
h <- sqrt(cs) # 5

x <- 1:9 
names(x) <- x
# Multiplication & Power Tables
x %o% x
  1  2  3  4  5  6  7  8  9
1 1  2  3  4  5  6  7  8  9
2 2  4  6  8 10 12 14 16 18
3 3  6  9 12 15 18 21 24 27
4 4  8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
outer(x, x, "*")
  1  2  3  4  5  6  7  8  9
1 1  2  3  4  5  6  7  8  9
2 2  4  6  8 10 12 14 16 18
3 3  6  9 12 15 18 21 24 27
4 4  8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
y <- 2:8 
names(y) <- paste0(y,":")
outer(y, x, "^")
   1  2   3    4     5      6       7        8        9
2: 2  4   8   16    32     64     128      256 5.12e+02
3: 3  9  27   81   243    729    2187     6561 1.97e+04
4: 4 16  64  256  1024   4096   16384    65536 2.62e+05
5: 5 25 125  625  3125  15625   78125   390625 1.95e+06
6: 6 36 216 1296  7776  46656  279936  1679616 1.01e+07
7: 7 49 343 2401 16807 117649  823543  5764801 4.04e+07
8: 8 64 512 4096 32768 262144 2097152 16777216 1.34e+08
# 3 times table
drop(outer(1:10,3,"*"))
 [1]  3  6  9 12 15 18 21 24 27 30

Divisão em R

x <- 2
y <- 3
d <- x/y # 0.667

x <- 2
y <- c(3, 4)
d <- y/x # 1.5 2

x <- c(2, 5)
y <- c(3, 4)
d <- x/y # 0.667 1.25

x <- c(6, 9)
d <- x%%2 # 0 1 (2*3+0=6; 2*4+1=9)
d <- x%/%2 # 3 4 (2*3+0=6; 2*4+1=9)

x <- 0/Inf # 0
x <- 1/Inf # 0

x <- 1/0 # Inf

x <- 0/0 # NaN
x <- Inf/Inf # NaN

Referências

  • Barreira, S (2013) Matemática aplicada às ciências farmacêuticas com Excel. Vol. 1. Lisboa: Escolar Editora.
  • Bates, JHT & Sobel, BE (2003) The conceptual basis of mathematics in cardiology - (I) algebra, functions and graphs. Coronary Artery Disease 14:41–59.
  • Batschelet, E (1979) Introduction to mathematics for life scientists. 3rd ed. NY: Springer.
  • Batschelet, E (1978) Introdução à matemática para biocientistas. Tradução da 2ª ed. São Paulo: EDUSP e Rio de Janeiro: Interciência.
  • Chrisman, N. R. (1998). Rethinking Levels of Measurement for Cartography. Cartography and Geographic Information Systems, 25(4): 231–242. doi:10.1559/152304098782383043
  • Giordano, FR et al. (2015) A first course in mathematical modeling. 5th ed. OH: Thomson. Capítulo 14: Dimensional Analysis and Similitude.
  • Pauli, RU et al. (1980) Física 4: eletricidade, magnetismo, física moderna e análise dimensional. São Paulo: EPU O livro apresenta a análise dimensional de forma didática e aplicada à Física.
  • Sarle, WS (1997) Measurement theory: Frequently asked questions. NC: SAS Intitute. http://www.labrate.ru/metodika/measurement.htm. Version 1 originally published in the Disseminations of the International Statistical Applications Institute, volume 1, edition 4, 1995, Wichita: ACG Press, pp. 61-66. Copyright 1995, 1996, 1997 by Warren S. Sarle, Cary, NC, USA.
  • Simão, C (1980) Manual do professor de física 4 de Pauli et al. São Paulo: EPU.
  • Siqueira, JO (2011) Fundamentos para cálculo: usando WolframAlpha. São Paulo: Saraiva. Soluções dos exercícios em https://www.researchgate.net/publication/326533655_Fundamentos_para_Calculo_-_Solucoes.
  • Siqueira, JO (2012) Fundamentos de métodos quantitativos: aplicados em Administração, Economia, Contabilidade e Atuária usando WolframAlpha e SCILAB. São Paulo: Saraiva. Soluções dos exercícios em https://www.researchgate.net/publication/326533772_Fundamentos_de_metodos_quantitativos_-_Solucoes.