Escolar Documentos
Profissional Documentos
Cultura Documentos
TECNOLÓGICA
Av. Jerônimo Figueira da Costa, 3014 - Bairro Pozzobon.
CEP 15503-110 - Votuporanga - SP
www.ifsp.edu.br
ENGENHARIA ELÉTRICA:
NOTAS DE AULA
Janeiro de 2023
Agradecimentos:
2-CNUE5-Erro e estabilidade
https://youtu.be/Y21U4W7awVk
3-1-CNUE5-Sistemas Triangulares
https://youtu.be/om9xI6uI1eI
3-2-CNUE5-Sistemas Gauss
https://youtu.be/_mMHHRZetYg
3-3-CNUE5-LU
https://youtu.be/ZW1i6IbAiM8
4-CNUE5-matrizes
https://youtu.be/E_PiKPhwBZg
5-CNUE5-zeros funções
https://youtu.be/t5YOU1jvzFA
6 e 7-CNUE5-interpolacao e aproximação
https://youtu.be/1_oZMgwZ8MQ
8-CNUE5-integracao
https://youtu.be/6fNX0EDxrYE
9-CNUE5-derivacao
https://youtu.be/Wwe00EfL04Y
10-2-CNUE5-PVI Runge
https://youtu.be/gfQjx7-ziaU
10-3-CNUE5-PVC
https://youtu.be/kCUZ5TxRVbo
O QUE IMPORTA É O CONHECIMENTO E A COMUNICAÇÃO
Bons estudos!
CRITÉRIOS DE APROVAÇÃO
Estas notas de aula foram escritas, a partir de 2015, com base em outras
bibliografias e na experiência acumulada do professor, para a disciplina de Cálculo
Numérico do curso de Engenharia Civil do IFSP campus Votuporanga. Em 2023
foram adaptadas para o curso de Engenharia Elétrica. Elas são constantemente
revisadas devido a possíveis erros e necessidades dos alunos não identificadas
previamente. Por isso é importante o aluno estar com a revisão mais recente e não
reutilizar materiais de turmas anteriores. Lembra-se ao aluno que essas notas de
aula não substituem os livros e não podem ser usadas para outro fim que não para
os estudos desta disciplina.
BIBLIOGRAFIA COMPLEMENTAR
BARROSO, L.C. et al. Cálculo numérico: com aplicações. 2.ed. São Paulo:
Harbra, 1987.
Porém, existem integrais de funções que não têm solução analítica. Por
exemplo, seja a integral de uma função f(x) no domínio a,b, que se quer resolver
numericamente:
************************************************************************************************
9
EXERCÍCIO
************************************************************************************************
10
A solução numérica dos problemas pode ser “contaminada” por alguns tipos
de erro.
ERRO DE TRUNCAMENTO
x2 x4 x6
= 1− + − (...)
2! 4! 6!
Obs: x tem que ser o ângulo em radianos.
No caso acima, como conhecemos a solução exata, o erro “E” absoluto (neste
caso, um erro de truncamento) é dado por:
E = cos(x) – P(x)
Em que:
P(x) é uma função que aproxima a função exata.
A tarefa é sempre, nas soluções, impor um erro máximo, uma tolerância “e”, e
verificar se isso se satisfaz (E ≤ e), antes de continuar os cálculos. Obviamente, se
estamos programando uma resolução numérica, é porque não existe solução
analítica ou ela é inviável. Porém, sempre há uma maneira de estimar se a solução
numérica converge para a solução exata. Isso é estudado de acordo com cada
método numérico de solução, especificamente.
Pode-se ainda calcular o erro relativo:
cos(x) − P( x)
Er = *100 (em %)
cos(x)
É muito mais conclusivo se trabalhar com o erro relativo. Note que um erro de
1 km na medida da distância entre a Terra e a Lua é menos significativo que um erro
de 1 cm na realização de uma cirurgia cerebral via robô.
************************************************************************************************
EXERCÍCIO
2.1) Na página do teu grupo (criada no exercício 1.1), crie um aplicativo que resolva
o cosseno de um número segundo o explicado acima (polinômio de Mclaurin),
digitando o código a seguir. Estude o código.
11
ARQUIVO cosseno.html
ARQUIVO funcoes-cos.js
- Faça testes aumentando cada vez mais o número de termos e perceba que, após
muitos termos, o erro de truncamento não se altera. Ou seja, não seria necessário
tanto esforço computacional para resolver o polinômio com ótima precisão. Assim,
você, programador, poderia limitar o número de termos em função de um erro
aceitável, para reduzir esforço computacional.
*************************************************************************************************
ERRO DE ARREDONDAMENTO
*************************************************************************************************
13
EXERCÍCIO
2.2) Altere o aplicativo do exercício 2.1 e defina a precisão dos resultados para:
*************************************************************************************************
2.3 ESTABILIDADE
ALGORITMO A)
ALGORITMO B)
Os dois resultados são diferentes, quando não deveriam ser, pois a adição é
uma operação distributiva e, obviamente, o resultado é x2 (ALGORITMO B). A causa
dessa diferença foi um arredondamento feito na adição (x2 + x1), cujo resultado tem
8 dígitos. Como a máquina, numa hipótese deste exemplo, só armazena 4 dígitos,
os menos significativos foram desprezados. Por isso é importante somente
arredondar os números no momento em que for apresentado o resultado final,
deixando o programa trabalhar nos cálculos internos com todas as casas decimais
possíveis.
Concluindo, ao se utilizar softwares de programação ou máquinas
calculadoras, deve-se ficar atento aos erros que podem acontecer, sejam por
truncamento ou por arredondamento, que podem levar a um algoritmo instável.
15
Na forma matricial:
16
Ele pode ser resolvido por retro substituição, ou seja, resolve-se a última
linha, substituindo o resultado na penúltima, e assim por diante. Como regra geral,
podem-se assim obter as soluções:
1: x(n) = b(n)/a(n,n)
2: Para i=n-1 até i=1 faça //a partir da penúltima linha, até a primeira
3: soma=0
4: Para j=i+1 até j=n faça
5: soma=soma + a(i,j)*x(j)
6: Fim do laço
7: x(i) = (b(i)-soma) / a(i,i)
8: Fim do laço
18
1: x(1) = b(1)/a(1,1)
2: Para i=2 até i=n faça //a partir da segunda linha, até a última
3: soma=0
4: Para j=1 até j=i-1 faça
5: soma=soma + a(i,j)*x(j)
6: Fim do laço
7: x(i) = (b(i)-soma)/a(i,i)
8: Fim do laço
Daqui para frente o aluno irá se deparar com algoritmos, que são as
sequências de cálculo de uma determinada tarefa. Quando se quer entender o que
um algoritmo faz, pode-se calculá-lo passo-a-passo. Segue um exemplo usando o
algoritmo para resolução de SISTEMAS TRIANGULARES SUPERIORES
apresentado:
1
- 1
x=
2
→ 1
n=4
x4=b4/a44=2/2=1
i=n-1=3
soma=0
j=i+1=4 (=n, portanto último e único passo)
soma=soma+a34*x4=0+(-5)*1=-5
x3=(b3-soma)/a33=(3-(-5))/4=8/4=2
i=2
soma=0
j=i+1=3
soma=soma+a23*x3=0+1*2=2
j=4 (=n, portanto último passo)
soma=soma+a24*x4=2+(-2)*1=0
x2=(b2-soma)/a22=((-1)-0)/1=-1
i=1 (=n, portanto último passo)
soma=0
j=i+1=2
soma=soma+a12*x2=0+4*(-1)=-4
j=3
soma=soma+a13*x3=(-4)+(-5)*2=-14
j=4 (=n, portanto último passo)
soma=soma+a14*x4=(-14)+1*1=-13
x1=(b1-soma)/a11=((-10)-(-13))/3=3/3=1
“PSEUDOCÓDIGO”
ou
Leitura de dados saída de dados (impressão ou em tela)
*************************************************************************************************
EXERCÍCIOS
3x1+2x2-4x3+3x4=-5
6x2-x3+x4=14
2x3+x4=11
5x4=10
2x1=8
5x1+2x2=16
x1-x2+x3=5
3x1+5x2-2x3+2x4=19
ARQUIVO sistemasuperior.html
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Sistema Linear Triangular Superior</title>
<script src='funcoes-sistemasuperior.js'></script>
SISTEMA LINEAR TRIANGULAR SUPERIOR
<br><br>
Ordem do sistema (n):
<input type="number" id="ordem" value="4">
<br><br>
<button onclick="gerar()">GERAR</button>
<br><br>
Obs: Matriz COMPLETA (a última coluna - cinza - contém as constantes, os valores após a igualdade).
<br><br>
<ins id="tabela"></ins> <!-- TABELA IMPRESSA, DE ACORDO COM A FUNÇÃO gerar() no arquivo .js -->
<br>
<button onclick="calcular()">CALCULAR</button>
<br><br>
<ins id="resultado"></ins> <!-- IMPRESSÃO DOS RESULTADOS, DE ACORDO COM A FUNÇÃO calcular() no
arquivo .js -->
<br><br>
</html>
22
ARQUIVO funções-sistemasuperior.js
function gerar(){
n=document.getElementById("ordem").value; //lê n
n=Number(n); //para definir que n é número, não texto
col=n+1; //número de colunas, porque a última coluna são os valores após a igualdade
//abaixo, html dentro do javascript, para criar a tabela dinamicamente (nxn)
html="";
html+='<table border>';
for (i=1;i<=n;i++){
html+='<tr>';
for(j=1;j<=n;j++){
ntermo=i+','+j;
conteudo='<input type="number" id='+ntermo+' value="0"/>';
html+='<td>'+conteudo+'</td>';
}
ntermo=i+','+col;
conteudo='<input type="number" style="background-color: #C0C0C0" id='+ntermo+' value="0"/>';
html+='<td>'+conteudo+'</td>';
html+='</tr>';
}
html+='</table>';
document.getElementById('tabela').innerHTML=html;
}
function calcular(){
n=document.getElementById("ordem").value;
n=Number(n);
//ler os termos bi
col=n+1;
b=[ ]; //criar o vetor
for (i=1;i<=n;i++){
ntermo=i+','+col;
b[i]=document.getElementById(""+ntermo+"").value;
b[i]=Number(b[i]);
}
//imprimir os resultados xi
res='';
for (i=1;i<=n;i++){
res=res+'\r\nx'+i+'\r\n='+x[i]+'<br>'
}
document.getElementById('resultado').innerHTML = res;
//entra n, b e a. Sai x.
IMPLEMENTE O ALGORITMO AQUI.
(...)
}
23
*************************************************************************************************
24
a’31 = 0
a’32 = a32 – m31*a12 = 2-4*2 = -6
a’33 = a33 – m31*a13 = 2-4*1 = -2
a’34 = a34 – m31*a14 = 1-4*4 = -15
b’3 = b3 – m31*b1 = 20-4*13 = -32
a’41 = 0
a’42 = a42 – m41*a12 = 1-(-3)*2 = 7
a’43 = a43 – m41*a13 = 3-(-3)*1 = 6
a’44 = a44 – m41*a14 = 2-(-3)*4 = 14
b’4 = b4 – m41*b1 = 6-(-3)*13 = 45
a’31 = 0
a’32 = 0
a’33 = a33 – m32*a23 = (-2)-1,5*2 = -5
a’34 = a34 – m32*a24 = (-15)-1,5*(-5) = -7,5
b’3 = b3 – m32*b2 = (-32)-1,5*2 = -35
a’41 = 0
a’42 = 0
a’43 = a43 – m42*a23 = 6-(-1,75)*2 = 9,5
a’44 = a44 – m42*a24 = 14-(-1,75)*(-5) = 5,25
b’4 = b4 – m42*b2 = 45-(-1,75)*2 = 48,5
a’41 = 0
a’42 = 0
a’43 = 0
a’44 = a44 – m43*a34 = 5,25-(-1,9)*(-7,5) = -9
b’4 = b4 – m43*b3 = 48,5-(-1,9)*(-35) = -18
b4 − 18
→ x4 = = =2
a44 − 9
Para n = 4; i = 3:
4
b3 − a3 j * x j
j =4 − 35 − (−7,5 * 2)
→ x3 = = =4
a33 −5
Para n = 4; i = 2:
4
b2 − a2 j * x j
j =3 2 − (2 * 4 + ((−5) * 2))
→ x2 = = = −1
a22 −4
Para n = 4; i = 1:
4
b1 − a1 j * x j
j =2 13 − ((2 * (−1)) + (1* 4) + (4 * 2))
→ x1 = = =3
a11 1
Quadros e Bortoli (2009) lembram que o sistema final não pode ter elementos
nulos na diagonal, ou seja, os elementos a11, a22, a33 etc. não podem ser nulos, o
que resultaria num sistema sem solução, a princípio, por este método.
E assim sucessivamente.
9 0 − 3 3
2 − 4 7 3
4 − 8 5 − 4
a’31 = 0
a’32 = a32 – m31*a12 = (-8)-0,444*0 = -8
a’33 = a33 – m31*a13 = 5-0,444*(-3) = 6,332
b’3 = b3 – m31*b1 = (-4)-0,444*3 = -5,332
9 0 −3 3
0 − 4 7,666 2,334
0 − 8 6,332 − 5,332
9 0 −3 3
0 − 8 6,332 − 5,332
0 − 4 7,666 2,334
9 0 −3 3
0 − 8 6,332 − 5,332
0 0 4,5 5
1: Para k=1 até k=n-1 faça //para cada coluna (a última de “a” e a coluna “b” não entram)
//Encontrar o pivô (o maior em módulo)
2: w=|a(k,k)| //w é o pivô
3: r=k //r é o nº da linha que está o pivô
4: Para j=k+1 até j=n faça //para cada linha menos as anteriores a “k”, já escalonadas
5: Se |a(j,k)|>w então
6: w=|a(j,k)|
7: r=j
8: Fim do condicional referente à linha 5
9: Fim do laço referente à linha 4
10: Se w=0 então
11: ‘Todos os pivôs são nulos.’ PARE.
12: Senão
//Fim encontrar o pivô (o maior em módulo)
//Trocar a linha k com a linha r
13: Para c=1 até c=n faça //coluna 1 a n
14: atemp=a(k,c) //atemp é uma variável temporária
15: a(k,c) = a(r,c)
16: a(r,c) = atemp
17: Fim do laço referente à linha 13
18: btemp = b(k) //btemp é uma variável temporária
19: b(k) = b(r)
20: b(r) = btemp
21: Fim do condicional referente à linha 10
//Fim Trocar a linha k com a linha r
//Fazer o escalonamento
22: Para i=k+1 até i=n faça //para cada linha depois da que tem o pivô
23: m(i,k)=a(i,k)/a(k,k)
30
*************************************************************************************************
31
EXERCÍCIOS
3.5) Resolver, em papel, o seguinte sistema linear pelo Método de Gauss, com
pivoteamento parcial:
Módulo de um número n:
Math.abs(n)
Condicional:
if (a<0) {
//qualquer código
}
Obs: use os operadores lógicos a seguir:
== igual a //ATENÇÃO, NA COMPARAÇÃO COLOQUE 2 IGUAIS
!= diferente
>, <, >=, <= maior, menor, maior ou igual e menor ou igual
if (a==0) {
//código
} else {
//código
}
*************************************************************************************************
32
MÉTODO DA FATORAÇÃO LU
→
33
= A(2)
34
Em resumo:
A(1) = M (0)A(0)
A(2) = M (1)A(1) = M(1)M(0)A(0)
Então:
(0)
A = (M (1)) (-1)(M(0)) (-1)A(2)
A*x = b
1ª Etapa:
a’21 = 0
a’22 = a22 – m21*a12 = 1-1/3*2 = 1/3
a’23 = a23 – m21*a13 = 2-1/3*4 = 2/3
a’31 = 0
a’32 = a32 – m31*a12 = 3-4/3*2 = 1/3
a’33 = a33 – m31*a13 = 2-4/3*4 = -10/3
35
2ª Etapa:
a’31 = 0
a’32 = 0
a’33 = a33 – m32*a23 = (-10/3)-1*(2/3) = -4
A escalonada = U =
Resolvendo Ly=b:
E, portanto:
P=(3,1,2)
*************************************************************************************************
*************************************************************************************************
40
EXERCÍCIOS:
3.8) Resolver, em papel, o seguinte sistema linear (o mesmo do exercício 3.5) pela
fatoração LU com pivoteamento normal (não parcial):
3.11) Usando como base os programas anteriormente criados, crie um software para
resolver sistemas pelo algoritmo de fatoração LU com pivoteamento parcial, que
acabou de ser apresentado. O software deve mostrar as matrizes completas L|c
(sendo que L é a parte inferior de A, exceto a diagonal com elementos iguais a 1) e
U|y (sendo que U é a parte superior de A, inclusive com a diagonal; a parte inferior é
zerada) conforme o exemplo a seguir:
41
*************************************************************************************************
A=
*************************************************************************************************
EXERCÍCIOS
1: det=1;
2: para j=1 até n { //para cada linha
3: det=det*a(j,j);
4: }
*************************************************************************************************
A = [a]mxn
B = [b]nxp
A*B = [c]mxp
1: Para i=1 até m faça //para cada linha da matriz final (m é o nº de linhas da matriz A)
2: Para J=1 até p faça //para cada coluna da matriz final (p é o nº de colunas da matriz B)
3: c(i,J) = 0
4: Para k=1 até n faça // (n é o nº de linhas da matriz B)
5: c(i,J) = c(i,J)+a(i,k)*b(k,J)
6: Fim do laço
7: Fim do laço
8: Fim do laço
[A]*[X]=[B] → [X]=[A]-1*[B]
- matriz a inverter:
- matriz aumentada:
- sistemas a resolver:
- matriz inversa:
2) montar os sistemas sem escalonar, sendo “b” exatamente cada coluna da matriz
identidade e escalonar cada sistema antes de resolver (como mostrado no esquema
acima)
após escalonamento →
4
X (1) = 3
→
3
1
X ( 2) = 2
→ 1
− 6
X ( 3)
= − 6
→ − 5
→ →
*************************************************************************************************
49
EXERCÍCIOS
*************************************************************************************************
50
5 ZEROS DE FUNÇÕES
Figura: Intervalo [a0,b0] de uma função f crescente, contendo a solução x*. Fonte:
Asano e Colli (2009).
51
→ c0=2,5
5) Repete-se o procedimento até que o erro seja satisfatório. O erro real (ou seja,
ITERAÇÃO 0)
Um algoritmo possível é, sendo dados a função f(x), o intervalo [a,b] tal que
f(a)*f(b)<0, o erro alvo “ea” e o número máximo de iterações “itm”.
54
1: xa[0]=a;
2: xb[0]=b;
3: se ((f(xa[0])*f(xb[0]))>0) { //escolher outro intervalo
4: “Erro. Escolher outro intervalo com f(a)*f(b)<0”
5: }
6: k=0; //número da iteração
7: xm[k]=(xb[k]*f(xa[k])-xa[k]*f(xb[k]))/(f(xa[k])-f(xb[k])); //solução da iteração 0
8: se ((f(xa[k])*f(xm[k]))<=0) { //raiz da próxima iteração está à esquerda de xm
9: xa[k+1]=xa[k];
10: xb[k+1]=xm[k];
11: } senão { //raiz da próxima iteração está à direita de xm
12: xa[k+1]=xm[k];
13: xb[k+1]=xb[k];
14: } fim do condicional
15: En[k]=módulo(f(xm[k])); //erro relativo da iteração 0
16: enquanto (En[k]>ea) { //a partir da iteração 1
17: k=k+1;
18: se (k=itm) {
19: break; //sai do laço enquanto
20: } fim do condicional
21: xm[k]=(xb[k]*f(xa[k])-xa[k]*f(xb[k]))/(f(xa[k])-f(xb[k])); //solução da iteração k
22: se ((f(xa[k])* f(xm[k]))<=0) { //raiz da próxima iteração está à esquerda de xm
23: xa[k+1]=xa[k];
24: xb[k+1]=xm[k];
25: } senão { //raiz da próxima iteração está à direita de xm
26: xa[k+1]=xm[k];
27: xb[k+1]=xb[k];
28: } fim do condicional
29: En[k]=módulo(f(xm[k])); //erro relativo da iteração k
30: } fim do loop equanto
O professor irá enviar aos grupos, via e-mail, um programa para calcular a
raiz de uma função qualquer pelo Método da POSIÇÃO FALSA, contendo a
plotagem do gráfico da função. A plotagem de gráficos necessita de arquivos
específicos que estão na pasta “funcoes_grafico”. Tais arquivos não são necessários
de serem estudados. Eles são funções disponibilizadas on-line, mas que não são de
código aberto (não se pode editar), apesar de serem gratuitas.
O aluno deve estudar somente os arquivos html e js, além de testar e
entender o funcionamento do programa.
Segue um exemplo de resultado:
55
*************************************************************************************************
EXERCÍCIO
5.3) Exemplo Ávila (2019): Pretende-se calcular a corrente que circulará no circuito
eletrônico ilustrado. Saindo da idealidade, sabe-se que a operação do diodo varia
com a sua temperatura. Um possível modelo que relaciona a tensão (Vd), a
corrente (Id) e a temperatura de operação (T) no diodo pode ser a dada pela
equação apresentada ao lado do circuito.
56
*************************************************************************************************
57
Segundo Quadros e Bortoli (2009), este método pode ser mais eficiente por
causa da velocidade de convergência e da precisão. Porém, enquanto os métodos
anteriormente apresentados só necessitam da resolução da função em si, este
método necessita da resolução de sua derivada.
Agora não é mais necessário definir um intervalo inicial, mas somente um
valor de x inicial. Portanto, obviamente, não há verificação inicial.
Asano e Colli (2009) apresentam o mesmo exemplo mostrado em capítulo
anterior resolvido pelo Método da Posição Falsa, para encontrar uma raiz da função
f(x) = x3-20:
Chuta-se x 0 = 3:
58
*************************************************************************************************
*************************************************************************************************
EXERCÍCIOS
5.5) Crie um algoritmo que resolva a raiz de uma função pelo Método de Newton-
Rapson.
5.6) Duplique o programa do Método da Posição Falsa e adapte-o para que resolva
a raiz de uma função pelo Método de Newton-Rapson. Segue uma sugestão de
aparência:
59
60
Considere que se deseja interpolar n+1 pontos (x,f(x)) por um polinômio p(x)
de grau igual a n (para passar por todos os pontos). Sendo assim:
61
Adotando , tem-se:
Matricialmente:
1 − 2 4 a0 3
1 1 1 * a = 0
1
1 3 9 a2 − 3
( j −1)
3: a(i,j)= x( i −1) ;
4: } fim do para j
5: } fim do para i
*************************************************************************************************
EXERCÍCIOS
6.3) O professor irá enviar aos grupos, via e-mail, um programa para calcular
funções interpoladoras polinomiais para quaisquer conjuntos de dados de entrada,
com a resolução do sistema via Gauss com pivoteamento parcial.
O aluno deve estudar somente os arquivos polinter.html e funcoes-polinter.js,
além de testar e entender o funcionamento do programa.
O resultado deve ficar como o do exemplo a seguir.
p(x)
*************************************************************************************************
*************************************************************************************************
O MMQ por ajuste linear é uma das maneiras de se fazer o que se chama de
REGRESSÃO LINEAR. Vamos considerar uma função de ajuste do tipo:
g ( x) = a0 + a1 x
M
= 2 * ( f ( x0 ) − (a0 + a1 x0 ))* (−1) + 2 * ( f ( x1 ) − (a0 + a1 x1 ))* (−1) + ... + 2 * ( f ( xn ) − (a0 + a1 xn ))* (−1)
a0
− 2 f ( x0 ) + 2a0 + 2a1 x0 − 2 f ( x1 ) + 2a0 + 2a1 x1 − ... − 2 f ( xn ) + 2a0 + 2a1 xn = 0
n n
2a0 (n + 1) + 2a1 xi = 2 f ( xi )
0 0
n n
a0 (n + 1) + a1 xi = f ( xi )
0 0
M
= 2 * ( f ( x0 ) − (a0 + a1 x0 ))* (− x0 ) + 2 * ( f ( x1 ) − (a0 + a1 x1 ))* (− x1 ) + ... + 2 * ( f ( xn ) − (a0 + a1 xn ))* (− xn )
a1
− 2 f ( x0 ) x0 + 2a0 x0 + 2a1 x0 − 2 f ( x1 ) x1 + 2a0 x1 + 2a1 x1 − ... − 2 f ( xn ) xn + 2a0 xn + 2a1 xn = 0
2 2 2
n n n
2a0 xi + 2a1 xi = 2 f ( xi )xi
2
0 0 0
n n n
a0 xi + a1 xi = f ( xi )xi
2
0 0 0
0 0 0
xi = xi = 0 + 1 + 2 + 3 + 4 = 10
0 0
n 4
xi = xi = 02 + 12 + 22 + 32 + 42 = 30
2 2
0 0
n 4
f ( xi ) = f ( xi ) = 0 + 1 + 2 + 4 + 5 = 12
0 0
n 4
f ( xi )xi = f ( xi ) xi = 0 * 0 + 1*1 + 2 * 2 + 3 * 4 + 4 * 5 = 37
0 0
O sistema fica:
67
A função M, dos erros mínimos quadrados é dada por (lembrando que n+1 é o
número de pontos conhecidos, a partir dos quais se encontrará a função de ajuste):
n n n
p n
(n + 1) xi xi 2
... 0 i
x f ( xi )
n n
0 0
n n a0 n 0
x
0 i a1 0 i i
p +1
x x
2 3
... x f ( x )x
i i i
0 0 0
n n n n a2 = n
xi 2 x i
3
x i
4
... 0 i ... 0 f ( xi )xi 2
x
p+2
0 0 0
... ... ... ... ... a p ...
n p n n n
2p
n p
xi x x 0 xi f ( xi )xi
p +1 p+2
i i ...
0 0 0 0
Note que a matriz parte do sistema anterior é simétrica (a matriz é igual à sua
transposta).
Obs: aqui, o grau do polinômio (“p”) não depende do nº de pontos (“n+1”), sendo
uma escolha do usuário.
Quadros e Bortoli (2009) apresentam um exemplo para se encontrar uma
parábola (polinômio de grau 2) para os seguintes dados:
68
1: f=-1;
2: para c=1 até p+1 { //colunas – p é o grau do polinômio
3: para l=1 até p+1 { //linhas
4: e=l+f;
5: soma=0;
6: para i=0 até n { //n+1 pontos
7: soma=soma+x(i)^e;
8: } fim do para i
9: a(l,c)=soma
10: } fim do para l
11: f=f+1;
12: } fim do para c
*************************************************************************************************
EXERCÍCIOS
7.1) Calcular, em papel, um polinômio de ajuste de grau 2 para os dados a seguir (os
mesmos do exercício 6.1).
69
*************************************************************************************************
70
Imagine que você queira aproximar um conjunto de dados (x,y) usando uma
função exponencial:
y = a*ebx
z = ln(y)
a0 = ln(a)
a1 = b
z = a0 + a1x
(n + 1) n
n z
0 i a0 0 i
x
n n = n
2 a
xi 0 i 1 0 zi *xi
x
0
z
71
(n + 1) n
n z
0 i a0 0 i
x 8 0,3 a0 8,04
n n
2 a
= n
→ 0,3 3,59 a = − 8,65
xi 0 xi 1 0 zi *xi 1
0
→ a0 = 1,09859; a1 = -2,50020
Neste método, os valores de f(x) dos pontos de entrada não podem ser
menores ou iguais a zero porque não existe o logaritmo natural neste caso.
Para estudar mais aprofundadamente a aproximação exponencial de dados,
acesse:
http://vtp.ifsp.edu.br/nev/Aprox-exp/exaprox.php?
*************************************************************************************************
72
EXERCÍCIOS
7.4) Calcular, em papel, uma função exponencial de ajuste para os dados a seguir:
0,5
(...)
//acertar o resultado
x[1]=Math.pow(Math.E,x[1]);
//montagem da função
f=x[1]+'*Math.pow(Math.E,('+x[2]+'*x))';
*************************************************************************************************
Imagine que você queira aproximar um conjunto de dados (x,y) usando uma
função potência:
y = a*xb
Da mesma forma anteriormente explicada, aplica-se o logaritmo em ambos os
lados:
73
z = ln(y)
k = ln(x)
a0 = ln(a)
a1 = b
z = a0 + a1k
→ a0 = 2,19063; a1 = 0,81298
ln(a) = a0 → a = e → a = ea0 2,19063
= 8,941
b = a1 = 0,81298
y = a*xb → y = 8,941*x0,81298
74
dados y
Neste método, os valores de x e f(x) dos pontos de entrada não podem ser
menores ou iguais a zero porque não existe o logaritmo natural neste caso.
Conforme Quadros e Bortoli (2009), existem outras formas de ajuste, como
por exemplo, funções hiperbólicas ou ainda mais complexas. Na prática, os casos
apresentados são os mais frequentes.
Para estudar mais aprofundadamente a aproximação potencial de dados,
acesse:
http://vtp.ifsp.edu.br/nev/Aprox-pot/potaprox.php?
*************************************************************************************************
EXERCÍCIOS
7.6) Calcular, em papel, uma função POTENCIAL de ajuste para os dados a seguir (
os mesmos do exercício 7.4):
0,5
*************************************************************************************************
75
A integral de uma função f no intervalo [a,b] pode ser aproximada pela área
de um trapézio, conforme a figura a seguir:
Figura: Área sob f(x) aproximada por um trapézio. Fonte: Quadros e Bortoli (2009).
76
Em que:
n é o número de intervalos que se quer usar (quanto mais, melhor)
h = (b-a)/n
f(x0) = f(a)
f(xn) = f(b)
xi = xi-1 + h (i=1 a n-1)
= 3,26 km
Um algoritmo possível para o cálculo de integral de uma função, pela Regra
dos Trapézios é, tendo f(x), n (número de intervalos, constantes) e os extremos a e b
da integral:
1: inte=0;
2: h=(b-a)/n;
3: x(0)=a;
4: para i=1 até n {
5: x(i)=x(i-1)+h
6: inte=inte+((h/2)*(f(x(i-1))+f(x(i)))
7: } fim do para i
1: inte=0;
2: para i=1 até n {
3: h(i)=x(i)-x(i-1);
4: inte=inte+((h(i)/2)*(f(x(i-1))+f(x(i)))
5: } fim do para i
*************************************************************************************************
EXERCÍCIOS
8.1) Calcule a integral a seguir, pela Regra dos Trapézios, com 10 intervalos
constantes.
78
8.2) Dada a tabela de pontos a seguir, calcule a integral de f(x) pela Regra dos
Trapézios, de 0 a 3,8.
*************************************************************************************************
A regra de Simpson tem a mesma base da regra dos trapézios, sendo que
naquela usa-se uma aproximação linear dentro do intervalo e nesta usa-se um
polinômio de grau 2, o que confere melhor aproximação em relação à solução exata.
Veja:
O polinômio de grau 2 que aproxima a função original f(x) pode ser obtido,
segundo Ruggiero (2006), por interpolação polinomial de grau 2 com funções de
Lagrange. A partir daí, Quadros e Bortoli (2009) apresentam o cálculo aproximado
da integral de f(x), com “2n” intervalos constantes de amplitude “h” como:
79
h f ( x0 ) + 4 f ( x1 ) + f ( x3 ) + f ( x5 ) + ... + f ( x2 n−1 )
S ( f , h) =
3 + 2 f ( x2 ) + f ( x4 ) + f ( x6 ) + ... + f ( x2 n−2 ) + f ( x2 n )
Obviamente e segundo Ruggiero (1996), “2n” tem que ser par, ou seja, o
número de intervalos tem que ser par. No caso de uma tabela de “np” pontos, “np”
tem que se ímpar, uma vez que np=2n+1.
Por comparação, Asano e Colli (2009) mostram a solução pela Regra dos
Trapézios como:
= 0,785
= 0,785398
*************************************************************************************************
EXERCÍCIOS
8.5) Calcule a integral a seguir (a mesma do exercício 8.1), pela Regra de Simpson,
com 10 intervalos constantes.
81
8.6) Dada a tabela de pontos a seguir (a mesma do exercício 8.2), calcule a integral
de f(x) pela Fórmula de Simpson de 0 a 3,8.
if (m%2!=0) { //a função "m%2" retorna o valor do resto da divisão por dois
alert('Erro: Neste método, o número de intervalos tem que ser par');
return; //pára o programa
}
*************************************************************************************************
82
df 2
( x ) = 2 x → DERIVADA TOTAL
dx
f
(2 xy 2 ) = 2 y 2 → DERIVADA PARCIAL (somente em x)
x
f
(2 xy 2 ) = 4 xy → DERIVADA PARCIAL (somente em y)
y
y f ( x) − f ( x0 )
f ' ( x) = lim , ou seja, f ' ( x0 ) = lim
x →0 x ( x− x0 )→0 ( x − x0 )
2*0,1
*************************************************************************************************
EXERCÍCIOS
9.1) Calcule, numericamente, por diferenças finitas, as derivadas da função f(x) = e2x
nos pontos ( x ) e com os intervalos (h) a seguir. Comparar com a solução analítica.
a) x =1,1 e h = 0,1; usar diferenças ascendentes
b) x =1,1 e h = 0,01; usar diferenças ascendentes
c) x =1,2 e h = 0,1; usar diferenças descendentes
d) x =1,2 e h = 0,01; usar diferenças descendentes
e) x =1,3 e h = 0,1; usar diferenças centrais
f) x =1,3 e h = 0,01; usar diferenças centrais
g) x =1,4 e h = 0,1; usar diferenças centrais
h) x =1,4 e h = 0,01; usar diferenças centrais
85
9.2) Novamente com relação à função f(x) = e2x, calcule sua derivada à segunda no
ponto x =1,5, com h = 0,02, usando a expressão proposta anteriormente. Comparar
com a solução analítica.
9.3) Dada a tabela de x,f(x) a seguir, calcule, numericamente, por diferenças finitas,
as derivadas da função nos pontos dados, conforme os itens a seguir.
9.4) Dada a tabela de x,f(x) a seguir, calcule, numericamente, por diferenças finitas,
a derivada à segunda da função no ponto x =1,3.
9.6) Crie um algoritmo para resolver, a partir de uma dada função f(x) e um intervalo
h, a derivada, por diferença central, de f(x) em um ponto específico xb.
*************************************************************************************************
87
No caso a), a EDO tem ordem 1, então deve ser conhecido somente o valor
da função em um ponto, no exemplo, 0. No caso b), como a EDO tem ordem 3, têm
88
que ser conhecidos o valor da função em um ponto (y(0)) e os valores das derivadas
neste mesmo ponto (no exemplo, 0), até a ordem 2.
Se, dado um problema com EDOs de ordem m (obrigatoriamente m2), “m”
condições de contorno são especificadas nos pontos inicial e final do domínio (por
isso a palavra “contorno”), então temos um PVC.
Um exemplo de EDO aplicada na Engenharia Elétrica é o abaixo, dado por
Ávila (2019), em que V é a fonte, R é a resistência, L é a indutância e I é a corrente.
Veja exemplos:
(PVI) (PVC)
Nestes casos:
Em outra notação:
yi+1 = yi+h.g(xi,yi), i=0,1,…,n-1
xi yi
x0 (dado) y0 (dado)
x1 = x0 + h y1 = y0+h.g(x0,y0)
x2 = x1 + h y2 = y1+h.g(x1,y1)
... ...
... ...
xn = xn-1 + h yn = yn-1+h.g(xn-1,yn-1)
*Se necessário obter uma função explícita, pode-se fazer uma interpolação usando
os pontos, conforme estudado em capítulo anterior.
Obs: quando se diz resolver o PVI quer dizer que se quer a função y(x) tendo sua
derivada, y’(x), e o valor em um ponto (y(x0)). Como explicado, numericamente, não
se encontra a função analítica, mas vários pares de pontos (x,y(x)), caracterizando-
a. Se necessário obter uma função explícita, pode-se fazer uma interpolação usando
os pontos, conforme estudado em capítulo anterior.
SOLUÇÃO:
y0 = 2 (dado no enunciado)
xn = 1 (dado no enunciado)
h = 0,1 (dado no enunciado; quanto menor, mais preciso o resultado)
n = (1 – 0) / 0,1 = 10
fórmula de recorrência: yi+1 = yi+h.g(xi,yi) = yi+0,1.(yi-xi)
*************************************************************************************************
92
EXERCÍCIOS
10.2) Crie um algoritmo para resolver, por Euler, a partir de um PVI genérico em que
o usuário entre com g(x,y), (x0,y0), xn e o intervalo h.
O usuário deve entrar com g(x,y), x0, y0, xn (definindo o domínio) e o intervalo
h desejado. O resultado deve ser a tabela resolvida (x,y(x)), como o exemplo abaixo.
93
x = 10;
y = 20;
g='x*y';
vg(g,x,y); //sai v (ao invés de y, para não confundir com uma das variáveis)
function vg(g,x,y) {
v=eval(g)
}
Para colocar uma imagem (.jpg) na página HTML, como, por exemplo, a
imagem da equação mostrada,
*************************************************************************************************
94
h
yi+1 = yi + (k1 + k2 ), k1 = g ( xi , yi ) e k2 = g ( xi + h, yi + hk1 ), i = 0,1,...n − 1
2
Para efeito de comparação, vamos analisar um exemplo aplicado no mesmo
PVI resolvido pelo Método de Euler.
SOLUÇÃO:
g(xi,yi) = yi-xi (a partir da EDO dada no enunciado)
x0 = 0
y0 = 2
xn = 1 (dado no enunciado)
h = 0,1 (definido aqui; quanto menor, mais preciso o resultado)
n = (1 – 0) / 0,1 = 10
fórmula de recorrência:
yi+1 = yi+(0,1/2).(k1+k2); k1 = yi-xi; k2 = (yi+0,1.k1)-(xi+0,1)
*************************************************************************************************
EXERCÍCIOS
10.9) EXTRA - Duplique e adapte o programa do exercício 10.3 para resolver, por
Runge-Kutta de 2ª ordem, PVIs de ordem 1 da forma:
y' = g(x, y)
PVI
y(x0 ) = y0
*************************************************************************************************
97
y' '1 = ( y2 − 2 y1 + y0 ) / h2 = y0 / h2 − 2 y1 / h2 + y2 / h2
y' '2 = ( y3 − 2 y2 + y1 ) / h 2 = y1 / h2 − 2 y2 / h2 + y3 / h 2
(...)
y' 'n−1 = ( yn − 2 yn−1 + yn−2 ) / h2 = yn−2 / h2 − 2 yn−1 / h2 + yn / h2
y'1 = ( y2 − y0 ) / 2h = − y0 / 2h + y2 / 2h
y'2 = ( y3 − y1 ) / 2h = − y1 / 2h + y3 / 2h
(...)
y'n−1 = ( yn − yn−2 ) / 2h = − yn−2 / 2h + yn / 2h
98
y0 / h 2 − 2 y1 / h 2 + y 2 / h 2 + P( x1 ) * (− y0 / 2h + y 2 / 2h) + Q( x1 ) * y1 = w( x1 )
Ou:
y0 / h − P( x1 ) * ( y0 / 2h) − 2 y1 / h 2 + Q( x1 ) * y1 + y2 / h 2 + P( x1 ) * ( y 2 / 2h) = w( x1 )
2
Ou:
y0 [1/ h2 − P( x1 ) / 2h] + y1[−2 / h2 + Q( x1 )] + y2 [1/ h2 + P( x1 ) / 2h] = w( x1 )
Como y0 é conhecido:
y1[−2 / h2 + Q( x1 )] + y2 [1/ h2 + P( x1 ) / 2h] = w( x1 ) − y0 [1/ h2 − P( x1 ) / 2h]
Para a linha 2:
y1 / h 2 − 2 y2 / h 2 + y3 / h 2 + P( x2 ) * (− y1 / 2h + y3 / 2h) + Q( x2 ) * y2 = w( x2 )
Ou:
y1 / h − P( x2 ) * ( y1 / 2h) − 2 y 2 / h 2 + Q( x2 ) * y2 + y3 / h 2 + P( x2 ) * ( y3 / 2h) = w( x2 )
2
Ou:
y1[1 / h 2 − P( x2 ) / 2h] + y 2 [−2 / h 2 + Q( x2 )] + y3 [1 / h 2 + P( x2 ) / 2h] = w( x2 )
yn−3[1/ h2 − P( xn−2 ) / 2h] + yn−2 [−2 / h2 + Q( xn−2 )] + yn−1[1/ h2 + P( xn−2 ) / 2h] = w( xn−2 )
yn−2 [1/ h2 − P( xn−1 ) / 2h] + yn−1[−2 / h2 + Q( xn−1 )] + yn [1/ h2 + P( xn−1 ) / 2h] = w( xn−1 )
Como yn é conhecido:
yn−2 [1/ h2 − P( xn−1 ) / 2h] + yn−1[−2 / h2 + Q( xn−1 )] = w( xn−1 ) − yn [1/ h2 + P( xn−1 ) / 2h]
d1 c1 0 0 0 0 y1 w( x1 ) − y0 [1 / h 2 − P ( x1 ) / 2h]
a d2 c2 0 0 0 y w ( x )
2 2
2
0 a3 d3 c3 0 0 y3 w( x3 )
x
=
0 0 ... ... ... 0 ... ...
0 0 0 an − 2 d n−2 cn − 2 yn−2 w( xn−2 )
0 0 0 0 an−1 d n−1 yn−1 w( xn−1 ) − yn [1 / h 2 + P( xn−1 ) / 2h]
Em que:
di = −2 / h 2 + Q( xi ) 1 i (n-1)
ci = 1/ h2 + P( xi ) / 2h 1 i (n-2)
ai = 1/ h2 − P( xi ) / 2h 2 i (n-1)
99
*************************************************************************************************
EXERCÍCIOS
100
10.10) Resolva, em papel, pelo Método das Diferenças Finitas, os PVCs a seguir.
10.11) Crie um algoritmo para resolver, pelo Método das Diferenças Finitas, a partir
de um PVC genérico em que o usuário entre com P(x), Q(x), w(x), x0, y0, xn, yn e o
intervalo h desejado.
O usuário deve entrar com P(x), Q(x), w(x), x0, y0, xn, yn e o intervalo h
desejado. O resultado deve ser a tabela resolvida (x,y(x)), como o exemplo a seguir.
101
10.13) EXTRA - Crie um programa para calcular e plotar, pelo Método das
Diferenças Finitas, a curva de deslocamentos (v(x)) de uma viga biapoiada sujeita a
peso próprio, de material homogêneo e seção retangular. Considere módulo de
elasticidade E, seção transversal b x h, vão L e densidade como dados de entrada.
Utilizar, para a plotagem, 50 intervalos. Lembre-se que o problema é regido pela
seguinte EDO:
d 2v
EI 2 = M ( x)
dx
*************************************************************************************************
→ EDP para resolver o fluxo elétrico que passa através de uma superfície fechada:
E é o potencial elétrico;
é a densidade da distribuição bidimensional da carga;
é a constante dielétrica
103
11 CONSIDERAÇÕES FINAIS
******************************************************************************************
104
EXERCÍCIOS
12 REFERÊNCIAS BIBLIOGRÁFICAS
BONIATI, Bruno. Caderno didático Lazarus IDE. Paraná: UFSM, 2011. Disponível
em:<http://www.cafw.ufsm.br/~bruno/disciplinas/programacao_comercial1/material/c
aderno_didatico_lazarus.pdf>. Acesso em 09/09/2013.
HAUSER, Eliete Biasotto. Cálculo Numérico. PUC-RS, ????. Disponível em: <
http://www.pucrs.br/famat/elieteb/calc_num/Apostila_Calc_Numerico_2008.pdf>.
Acesso em: março de 2015.
Ffile%3Dstudent%2Fescalonamento.pdf&ei=EC9lVIkv4sixBOj3gNgF&usg=AFQjCNH
9aHhQhcm-W9-B2I6tdkKYt7FG6g&sig2=yXXQRP6B-
idK7yfqj7roqg&bvm=bv.79189006,bs.1,d.eXY&cad=rja>. Acesso em 13/11/2014.
MELO, Evandro de Castro. Free Pascal Lazarus. Minas Gerais: UFV, 2012.
Disponível em:< www.evandro.eng.br/Apostila-Lazarus.pdf>. Acesso em 09/09/2013.
SWOKOWSKI. Cálculo com Geometria Analítica. São Paulo. Makron Books, 1995.
1 INTRODUÇÃO
Novamente, vale destacar que este apêndice foi criado para programadores
leigos e amadores, apenas para fins de aplicação na criação de programas úteis na
área da Engenharia Civil (campo de atuação do autor) e Engenharia Elétrica. Por
isso, pode conter muitas explicações e termos não exatamente corretos, mas que
são suficientes para o desenvolvimento inicial na área citada.
A linguagem HTML é a que já é executada em todos os navegadores de
internet (Internet Explorer, Chrome, Firefox, etc.). Portanto, todo computador já é
capaz de receber programação com esta linguagem.
Inicialmente, não é necessário nenhum programa especial, somente o
BLOCO DE NOTAS do Windows. Outro editor de notas que pode ser usado é o
NOTEPAD++, obtido gratuitamente na internet. Recomenda-se aqui usar o
NOTEPAD++ pela facilidade de entender os códigos, automaticamente coloridos e
organizados. Sendo assim, a partir deste ponto, quando houver referência ao
NOTEPAD++, sabe-se que pode ser usado o BLOCO DE NOTAS.
Para se fazer uma página de internet somente com textos, fotos, etc. somente
para o internauta ler, usa-se HTML. Porém, se for necessário colocar botões e
outros componentes, usa-se uma linguagem (chamada script) que forneça essas
possibilidades. Uma delas é o Javascript.
O site ou programa em HTML/Javascript é então criado no NOTEPAD++ e por
isso somente recebe código em texto, não tendo uma área gráfica para criar
graficamente os componentes (como acontece, por exemplo no LAZARUS). Assim
os componentes são criados também por meio de código de programação.
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- PARA CORRETA ACENTUAÇÃO -->
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> <!-- PARA CORRETA ACENTUAÇÃO -->
<title>título que aparece na aba da página</title>
Códigos, inclusive javascript (nesse caso, ele vem entre <script></script>)
</html>
Note que os comentários nos arquivos .html devem aparecer entre “ <!--
COMENTÁRIO -->”.Use “Ctrl+K” para colocar um texto selecionado comentário. Use
“Ctrl+Shift+K” para voltar, ou seja, retirar tirar o código de comentado. Os
comentários são textos livres onde você, programador, pode comentar partes do
código para você mesmo entender posteriormente ou para outro programador que
queira entender o teu código
109
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- PARA CORRETA ACENTUAÇÃO -->
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" /> <!-- PARA CORRETA ACENTUAÇÃO -->
<title>PROGRAMAS GRUPO 1</title>
IFSP - ENGENHARIA ELÉTRICA
<br><br>
CÁLCULO NUMÉRICO - PROF. GUSTAVO
<br><br>
INTEGRANTES
<br>
Fulano
<br>
Ciclano
<br>
Beltrano
<br><br>
PROGRAMAS CRIADOS PELO GRUPO 1
<script>
alert("Página em construção");
</script>
</html>
Você vai perceber que é muito mais organizado separar o código escrito em
javascript em arquivos menores, chamando as funções (function) dentro deles. Você
pode fazer isso salvando os arquivos com a extensão .js, na mesma pasta do
arquivo principal, o index.html.
Para mostrar ao arquivo principal que ele usa outros arquivos, você deve
declarar cada um deles da seguinte maneira (exemplo):
<script src='funcoes.js'></script>
No caso dos códigos em javascript num arquivo .js, você não deve colocar
dentro das tags <script>. Por exemplo, dentro de um arquivo .js, teríamos somente:
alert("Teste!");
<script>
alert("Teste!");
</script>
function nome_da_funcao() {
código em javasript
}
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
(...)
ARQUIVO atriang.html
<html>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <!-- PARA CORRETA
ACENTUAÇÃO -->
<title>ÁREA DE TRIÂNGULO</title>
<script src='funcoes.js'></script> <!-- DECLARAÇÃO QUE ESTÁ USANDO O ARQUIVO funcoes.js, QUE TEM QUE ESTAR NA MESMA
PASTA DESTE ARQUIVO HTML -->
function farea() { //esta função poderia estar no arquivo html, entre <script></script>
b=document.getElementById("base").value; //lê o número na caixa "base", no arquivo html, e grava em b
b=Number(b); //para garantir que é número
a document.getElementById("altura").value; //lê o número na caixa "altura", no arquivo html, e grava em a
a=Number(a); //para garantir que é número
area=b*a/2
document.getElementById("darea").innerHTML = area; //mostrando a área em "darea", no html
}
*******************************************************************************************
112