CÁLCULO NUMÉRICO USANDO O MATLAB
1
Profa. Waléria A. G. Cecílio,
Profa. Mônica D. S. Damaris e
Prof. Wadilson K. F. Pereira
CÁLCULO NUMÉRICO USANDO O MATLAB
Cálculo Numérico usando MatLab
2
SUMÁRIO
1. O MATLAB ............................................................................................................ 4
1.1 O AMBIENTE DE TRABALHO ................................................................................................................4
1.2 NÚMEROS E EXPRESSÕES ARITMÉTICAS ...............................................................................5
1.3 RESOLUÇÕES DE EXPRESSÕES ...............................................................................................7
1.4 OBTENDO INFORMAÇÕES DA ÁREA DE TRABALHO ..............................................................................8
1.5 FORMATO DE SAÍDA .......................................................................................................................8
1.6 ALGUNS COMANDOS E OBSERVAÇÕES: ..............................................................................................9
1.7 FUNÇÕES MATEMÁTICAS ELEMENTARES .......................................................................................... 11
2. MATRIZES E VETORES....................................................................................... 13
2.1 ALGUMAS MATRIZES ESPECIAIS ...................................................................................................... 14
2.2 CONCATENAÇÃO DE MATRIZES ....................................................................................................... 16
2.3 OPERAÇÕES COM MATRIZES ................................................................................................. 19
3. SOLUÇÃO E REPRESENTAÇÃO DE SISTEMAS DE EQUAÇÕES LINEARES 23
4. MATEMÁTICA SIMBÓLICA ................................................................................. 29
4.1 SUBSTITUIÇÃO DE VARIÁVEIS ......................................................................................................... 30
4.2 DERIVAÇÃO E INTEGRAÇÃO ............................................................................................................ 31
4.3 EXERCÍCIOS PROPOSTOS .............................................................................................. 33
5. AMBIENTE GRÁFICO .......................................................................................... 38
5.1 ALGUNS COMANDOS E FUNÇÕES ..................................................................................................... 41
6. LÓGICA E ALGORITMO ...................................................................................... 48
6.1 PROGRAMAS ................................................................................................................................. 50
6.2 CONSTRUÇÃO DE ALGORITMOS ...................................................................................................... 50
6.3 REGRAS PARA CONSTRUÇÃO DO ALGORITMO .................................................................................. 51
6.3.1 Fases ................................................................................................................................... 51
6.3.2 Teste de Mesa ..................................................................................................................... 52
6.3.3 Diagrama de Bloco .............................................................................................................. 53
6.4 CONSTANTES E VARIÁVEIS ............................................................................................................. 55
6.4.1 Variáveis .............................................................................................................................. 55
6.4.2 Constantes ........................................................................................................................... 56
6.5 OPERADORES ............................................................................................................................... 56
6.5.1 Operadores Aritméticos ....................................................................................................... 56
6.5.2 Operadores Relacionais ...................................................................................................... 56
7. ROTINAS (M-FILES OU SCRIPTS) ...................................................................... 59
7.1 CONSTRUINDO UM PROGRAMA ............................................................................................. 59
7.2 ENTRADA DE DADOS EM UMA ROTINA .................................................................................. 62
7.3 O COMANDO DE SAÍDA DISP() .................................................................................................. 65
Cálculo Numérico usando MatLab
3
8. OPERADORES LÓGICOS ................................................................................... 67
8.1 SENTENÇAS CONDICIONAIS ................................................................................................... 68
8.1.1 ESTRUTURAS DE DECISÃO ............................................................................................. 68
8.2 ESTRUTURAS DE REPETIÇÃO ................................................................................................ 73
8.2.1 A estrutura for - end ............................................................................................................. 74
8.2.2 A estrutura while - end ......................................................................................................... 76
8.3 OBSERVAÇÕES IMPORTANTES .............................................................................................. 79
9. FUNÇÕES ............................................................................................................. 85
9.1 ESTRUTURAS DE UMA FUNÇÃO ................................................................................................... 85
9.1.1 Declaração da função .......................................................................................................... 85
9.1.2 Corpo da função .................................................................................................................. 86
9.2 SALVANDO E EXECUTANDO UMA FUNÇÃO ....................................................................................... 86
10. ZEROS DE FUNÇÕES ALGEBRICAS OU TRANSCENDENTES ..................... 92
“UM NÚMERO REAL X* É UM ZERO DA FUNÇÃO F(X) OU UMA RAIZ DA
EQUAÇÃO ................................................................................................................ 92
F(X) = 0 SE F(X*)=0.” ............................................................................................... 92
10.1 INTERPRETAÇÃO GEOMETRICA E TEOREMA DE BOLZANO. ............................................ 93
10.1.1 MÉTODO GRÁFICO.......................................................................................................... 93
10.1.2 MÉTODO ANALÍTICO ....................................................................................................... 95
10.1.3 Exercícios: ......................................................................................................................... 96
10.2 PROCESSO ITERATIVO DE REFINAMENTO ......................................................................... 97
10.2.1 CRITÉRIOS DE PARADA ................................................................................................. 98
10.3 MÉTODO DA BISSECÇÃO ....................................................................................................... 98
10.4 MÉTODO DE NEWTON-RAPHSON ................................................................................................ 103
11. RESOLUÇÃO DE SISTEMAS LINEARES ....................................................... 111
11.1 MÉTODO DE ELIMINAÇÃO DE GAUSS ................................................................................ 112
11.2 MÉTODO DE ELIMINAÇÃO DE GAUSS COM PIVOTEAMENTO PARCIAL ......................... 117
11.3. FATORAÇÃO LU COM ESTRATÉGIA DE PIVOTEAMENTO PARCIAL ............................... 119
11.4 MÉTODO DE GAUSS-JACOBI ............................................................................................... 124
12. INTERPOLAÇÃO POLINOMIAL ...................................................................... 131
12.1 FORMA DE NEWTON................................................................................................................... 134
13. AJUSTE DE FUNÇÕES .................................................................................... 143
13.1 MÉTODO DOS MÍNIMOS QUADRADOS .......................................................................................... 143
13.2 AJUSTE POLINOMIAL .................................................................................................................. 144
14. INTEGRAÇÃO NUMÉRICA .............................................................................. 149
14. EQUAÇÕES DIFERENCIAIS ORDINÁRIAS .................................................... 153
Cálculo Numérico usando MatLab
4
1. O MATLAB
O MATLAB é um sistema interativo cujo elemento básico de informação é
uma matriz que não requer dimensionamento. Esse sistema permite a resolução de
muitos problemas numéricos em apenas uma fração de tempo que se gastaria para
escrever um programa semelhante em linguagem Fortran, Basic ou C. Além disso,
as soluções dos problemas são expressas no MATLAB quase exatamente como
elas são escritas matematicamente.
1.1 O AMBIENTE DE TRABALHO
Quando iniciamos o MATLAB, o Comando Window é criado e se torna ativo.
É através deste que nos comunicamos com o interpretador MATLAB, isto é, é a área
na qual são digitados dados e instruções para o MATLAB. Desta forma, após digitar
o comando, basta acionar a tecla enter e os resultados são exibidos na tela.
Sinal de prompt ‘>>’ Indica estado de espera de entrada de dados.
Cálculo Numérico usando MatLab
5
Outras janelas:
[Command Directory]: Área na qual é exibida a lista dos arquivos contidos no
diretório corrente.
[Workspace]: Área de memória de trabalho do MATLAB, na qual ficam armazenadas
todas as variáveis criadas na janela de comando.
[Launch Pad]: Área na qual são exibidas informações, textos explicativos (online
help) e exemplos de utilização dos produtos instalados.
[Help]
1.2 NÚMEROS E EXPRESSÕES ARITMÉTICAS
Declarações e Variáveis
As declarações no MATLAB são frequentemente da forma
>> variável = expressão
Ou simplesmente
>> expressão
Cálculo Numérico usando MatLab
6
As expressões são compostas de operadores e outros caracteres especiais,
de funções e dos nomes das variáveis. A avaliação das expressões produzem
matrizes, que são então mostradas na tela e atribuídas às variáveis para uso futuro.
Se o nome da variável e o sinal de igualdade “=” são omitidos, a variável com o
nome ans, que representa a palavra “answer” (resposta), é automaticamente criada.
Por exemplo:
>> 1245/123
ans =
10.1220
>> 53-4
ans =
49
>> 53-4;
Se o último caractere da declaração é um ponto e vírgula, a impressão na tela
é suprimida, mas a tarefa é realizada. Esse procedimento, em geral, é usado em
arquivos do tipo script (<nome>.m) e em situações onde o resultado é uma matriz de
grandes dimensões e temos interesse em apenas alguns dos seus elementos.
Se a expressão é tão grande que não cabe em apenas uma linha, pode-se continuar
a expressão na próxima linha usando um espaço em branco e três pontos ”...”, ao
final das linhas incompletas.
Por exemplo:
>> k=1/2 +3 -4/5 -3 +1 + 4 - 9 ...
+ 4 + 5/6 +7/4
k =
2.2833
Observe que o espaço em branco entre “-9” e “...” é obrigatório.
A notação decimal convencional, com ponto decimal opcional e o sinal de
menos, são usados para números. A potência de dez pode ser incluída como um
sufixo. A seguir são mostrados alguns exemplos de números aceitos:
Cálculo Numérico usando MatLab
7
3 -99 0.00003
3.147458638 1.512E-20 6.097885e21
As expressões podem ser construídas usando os operadores aritméticos
usuais e as regras de precedência:
^ exponenciação
/ divisão a direita
\ divisão a esquerda
* multiplicação
+ adição
- subtração
Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e
4\1 possuem o mesmo valor numérico, isto é, 0.25.
1.3 RESOLUÇÕES DE EXPRESSÕES
Toda expressão é calculada da esquerda para a direita utilizando as
definições da Matemática, isto é:
Potenciação � Multiplicação ou divisão �Adição e subtração
Sempre obedecendo a ordem de procedência. Para definir ou alterar a ordem
de procedência utiliza-se do sinal de parênteses.
Cálculo Numérico usando MatLab
8
Exemplo:
>> a=(7+3^3)/(5^5-2)
a =
0.0109
>> b=(3^5)/34.5
b =
7.0435
>> sol=a-b
sol =
-7.0326
1.4 OBTENDO INFORMAÇÕES DA ÁREA DE TRABALHO
Os exemplos de declarações mostrados nos itens acima criaram variáveis que
são armazenadas na Área de Trabalho do MATLAB. Executando
>> who
obtêm-se uma lista das variáveis armazenadas na Área de Trabalho:
Your variables are:
a ans b k sol
Que mostra as cinco variáveis geradas em nossos exemplos, incluindo ans. Uma
informação mais detalhada mostrando a dimensão de cada uma das variáveis
correntes é obtida com o comando whos.
Cada elemento de uma matriz real requer 8 bytes de memória, assim nossa
matriz sol de dimensão 1x1 usa 8 bytes. Seguindo o mesmo raciocínio, uma matriz
A de dimensão 3x3 usa 72 bytes.
1.5 FORMATO DE SAÍDA
O formato numérico exibido na tela pode ser modificado utilizando-se o
comando format, que afeta somente o modo como as matrizes são mostradas, e
não como elas são computadas ou salvas. O MATLAB efetua todas as operações
Cálculo Numérico usando MatLab
9
em dupla precisão. A precisão dupla fornece uma relativa precisão de cerca de 16
dígitos decimais e intervalo de magnitude de 10-308 a 10+308.
Se pelo menos um dos valores de entrada não é inteiro, existem várias
possibilidades de formatar a saída. O formato “default”, chamado de formato short,
mostra aproximadamente 5 dígitos significativos ou usam notação científica.
Podemos verificar os tipos de formatos existentes no MATLAB, seguindo o caminho:
File � Preferences � Numeric format.
1.6 ALGUNS COMANDOS E OBSERVAÇÕES:
As teclas seta para cima e seta para baixo repetem os comandos digitados
anteriormente. Além das teclas com setas, podem-se usadas outras teclas para
reeditar a linha de comando.
Retorna a linha anterior
Retorna a linha posterior
Move um espaço para a esquerda
Move um espaço para a direita
Ctrl Move uma palavra para a esquerda
Ctrl Move uma palavra para a direita
Home Move para o começo da linha
End Move para o final da linha
Del Apaga um caractere a direita
Backspace Apaga um caractere a esquerda
Cálculo Numérico usando MatLab
10
O símbolo % indica textos de comentário
Cores (classes sintáticas)
Palavras reservadas (for, end, if, ...). (azul)
Textos de comentários. (verde)
Mensagem de erro. (vermelho)
Funções e variáveis. (preto)
Cores e fonte de textos da janela de comandos e cor de fundo, podem ser
alterados pelo comando preferences.
Sinal ‘ - ’ para indicar número negativo.
‘ . ’ para indicar casa decimal.
ans é uma variável reservada, que armazena o último valor calculado pelo
MATLAB.
pi: 3.141592...;
‘i’ e ‘j’: raiz imaginária (raiz quadrada de -1);
eps: Precisão numérica relativa;
realmin: menor número real;
realmax: maior número real;
Inf: infinito. Ex: 1/0;
Nan: not a number. Exemplo: 0/0.
Nome de Variáveis
Deve ser alfanumérico, iniciando com letra.
Diferencia letras maiúsculas e minúsculas (case-sensitive)
Aceita caractere ‘_’ no meio do nome
Pode ter no máximo 32 caracteres
Todas as funções do MATLAB devem ser escritas em letras minúsculas:
inv(A) calcula a inversa de A, mas INV(A) é uma função indefinida.
clear all – apaga todos os dados da memória
clc – limpa a janela de comandos
close - fecha todas as Janelas Gráficas
Cálculo Numérico usando MatLab
11
A execução do MATLAB poderá ser interrompida a qualquer momento
pressionando as teclas Ctrl e C simultaneamente.
1.7 FUNÇÕES MATEMÁTICAS ELEMENTARES
|x| abs(x)
sen(x) sin(x)
cos(x) cos(x)
tg(x) tan(x)
cossec(x) csc(x)
sec(x) sec(x)
cotg(x) cot(x)
arcsen(x) asin(x)
arccos(x) acos(x)
arctg(x) atan(x)
arccossec(x) acsc(x)
arcsec(x) asec(x)
arccotg(x) acot(x)
ex exp(x)
ln(x)=loge(x) log(x)
log10(x) log10(x)
Log2(x) log2(x)
sqrt(x)
x^(b/a)
pi
n! factorial(n) para n<21
Cálculo Numérico usando MatLab
12
IMPORTANTE: O MATLAB operara com arcos trigonométricos somente em
radianos.
Cálculo Numérico usando MatLab
13
2. MATRIZES E VETORES
O método mais fácil de entrar com pequenas matrizes no MATLAB é usando
uma lista explícita. Os elementos de cada linha da matriz são separados por
espaços em branco ou vírgulas e as colunas separadas por ponto e vírgula,
colocando-se colchetes em volta do grupo de elementos que formam a matriz. Por
exemplo, entre com a expressão:
>> A=[ 12 3; 45 6; 78 9 ]
Pressionando <enter> o MATLAB mostra o resultado
A=
12 3
45 6
78 9
A matriz A é salva na memória RAM do computador, ficando armazenada
para uso posterior.
A expressão A ( : ) equivale a uma matriz coluna que contém a primeira
coluna de A, seguida pelas coluna subsequentes.
>> A(:)
12
45
78
3
6
9
Em algumas situações é importante definir as dimensões e o número de
elementos de uma matriz. Desta forma, temos:
size(matriz) – todas as dimensões da matriz
length(matriz) – maior dimensão da matriz
Cálculo Numérico usando MatLab
14
numel(matriz) – numero de elementos na matriz
>> size(A)
ans =
3 2
>> length(A)
ans =
3
>> numel(A)
ans =
6
2.1 ALGUMAS MATRIZES ESPECIAIS
• Matriz Nula
>> zeros(3)
ans =
0 0 0
0 0 0
0 0 0
• Matriz com 1 em todas as posições
>> ones(2,3)
ans =
1 1 1
1 1 1
Cálculo Numérico usando MatLab
15
• Matriz com elementos randômicos uniformente distribuidos
>> rand(2)
ans =
0.8687 0.3998
0.0844 0.2599
• Matriz identidade
>> eye(3)
ans =
1 0 0
0 1 0
0 0 1
Há várias maneiras de gerar uma matriz coluna ou linha. Como exemplo, temos:
>> a1=[1 2 3 4 5 6 7 8 9 10]
a1 =
1 2 3 4 5 6 7 8 9 10
>> a1=1:10
a1 =
1 2 3 4 5 6 7 8 9 10
A declaração 1:10 gera um vetor linha contendo os números de 1 a 10 com
incremento unitário. Outros incrementos, diferentes de um, podem ser usados.
>> a2=1:2:10
a2 =
1 3 5 7 9
Cálculo Numérico usando MatLab
16
Incrementos negativos também são possíveis:
>> a3=10:-1:1
a3 =
10 9 8 7 6 5 4 3 2 1
Pode-se, também, gerar vetores usando a função linspace. Por exemplo,
>> x=linspace(2,10,5)
x =
2 4 6 8 10
gera um vetor linearmente espaçado de 2 até 10, contendo 5 elementos.
2.2 CONCATENAÇÃO DE MATRIZES
O MATLAB permite a manipulação de linhas, colunas, elementos individuais e
partes de matrizes. Um elemento individual da matriz pode ser chamado com índice
entre parênteses. Observe o exemplo:
>> A=[2 -2 3;4 5 -5;7 -4 9]
A =
2 -2 3
4 5 -5
7 -4 9
>> A(2,1) produz:
ans =
4
Cálculo Numérico usando MatLab
17
Uma entrada da matriz (elemento individual) pode ser modificada.
>> A(2,1) = A(2,2) + A(3,2)
Resulta em
A =
2 -2 3
1 5 -5
7 -4 9
Também podemos tomar uma parte de uma matriz. Por exemplo, suponha
que D é uma matriz de ordem 6x6 criada randomicamente.
>> D=rand(6)
D =
0.4087 0.1174 0.2625 0.5785 0.2316 0.9880
0.5949 0.2967 0.8010 0.2373 0.4889 0.0377
0.2622 0.3188 0.0292 0.4588 0.6241 0.8852
0.6028 0.4242 0.9289 0.9631 0.6791 0.9133
0.7112 0.5079 0.7303 0.5468 0.3955 0.7962
0.2217 0.0855 0.4886 0.5211 0.3674 0.0987
então
>> D(1:5,3)
ans =
0.2625
0.8010
0.0292
0.9289
0.7303
Especifica uma submatriz 5x1, ou vetor coluna, que consiste dos cinco primeiros
elementos da terceira coluna da matriz D. Analogamente,
Cálculo Numérico usando MatLab
18
>> D(1:5,2:4)
ans =
0.1174 0.2625 0.5785
0.2967 0.8010 0.2373
0.3188 0.0292 0.4588
0.4242 0.9289 0.9631
0.5079 0.7303 0.5468
É uma submatriz 5x3, consiste das primeiras cinco linhas e as colunas dois, três e
quatro. Também podemos tomar uma parte da matriz D, tal que a nova matriz é
definida através dos elementos da linha dois e três e colunas quatro e cinco, desta
forma, definimos:
>> D([2, 3],[4,5])
ans =
0.2373 0.4889 0.6241
É possível definir uma matriz de dimensão zero por zero a D, isto é: D=[ ].
Subsequente uso desta matriz não conduz a uma condição de erro; ele propaga
matriz vazia. Isto é diferente de declaração
Clear D
que remove D da lista das variáveis corrente.
O comando a seguir, atribui vazio a linha três da matriz D.
>> D(3,:)=[ ]
D =
0.4087 0.1174 0.2625 0.5785 0.9880
0.5949 0.2967 0.8010 0.2373 0.0377
0.6028 0.4242 0.9289 0.9631 0.9133
0.7112 0.5079 0.7303 0.5468 0.7962
0.2217 0.0855 0.4886 0.5211 0.0987
Cálculo Numérico usando MatLab
19
2.3 OPERAÇÕES COM MATRIZES
O caractere apóstrofo, “ “ , indica a transposta de uma matriz. Seja a matriz A
definida abaixo:
>> A =[1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
A declaração A’ define a transposta da matriz A:
>> A'
ans =
1 4 7
2 5 8
3 6 9
A adição e subtração de matrizes são indicadas, respectivamente, por “+” e
“-“. As operações são definidas somente se as matrizes são de mesmas dimensões.
>> A-A'
ans =
0 -2 -4
2 0 -2
4 2 0
>> A+A'
ans =
2 6 10
6 10 14
10 14 18
Cálculo Numérico usando MatLab
20
A adição e subtração também são definidas se um dos operadores é um
escalar, ou seja, uma matriz 1 x 1. Neste caso, o escalar é adicionado ou subtraído
de todos os elementos do outro operador.
Por exemplo:
>> A+2
ans =
3 4 5
6 7 8
9 10 11
A multiplicação de matrizes é indicada por “*”. A multiplicação A*S é definida
somente se o número de colunas da matriz A é igual ao número de linhas da matriz
S.
Exemplo:
>> S=[1 2 ; 3 4; 7 2]
S =
1 2
3 4
7 2
>> A*S
ans =
28 16
61 40
94 64
Cálculo Numérico usando MatLab
21
Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.
>> A*2
ans =
2 4 6
8 10 12
14 16 18
A expressão A^p eleva A à p-ésima potência e é definida se A é matriz
quadrada e p um escalar. Se p é um inteiro maior do que um, a exponenciação é
computada como múltiplas multiplicações. Por exemplo,
>> A^3
ans =
468 576 684
1062 1305 1548
1656 2034 2412
Suponha que M e N sejam vetores linha com quatro elementos. Para gerar
um novo vetor F com valores que sejam produtos dos valores correspondentes em
M e N, temos:
>> M=[1 3 5 7]
M =
1 3 5 7
>> N=[-2 3 4 1]
N =
-2 3 4 1
Cálculo Numérico usando MatLab
22
>> F=M.*N
F =
-2 9 20 7
Se o ponto for omitido, a operação executada será uma operação matricial.
Neste caso, a operação não seria possível. Da mesma forma, temos:
>> A =[1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> A^2
ans =
30 36 42
66 81 96
102 126 150
>> A.^2
ans =
1 4 9
16 25 36
49 64 81
Cálculo Numérico usando MatLab
23
3. SOLUÇÃO E REPRESENTAÇÃO DE SISTEMAS DE EQUAÇÕES
LINEARES
Um Sistema de equações lineares consiste em um conjunto de m equações
polinomiais com n variáveis xj de grau 1, que podem ser representadas na forma:
=
⇔=
mnmnmmm
n
n
n
b
b
b
b
x
x
x
x
aaaa
aaaa
aaaa
aaaa
bAx
MM
L
MOMMM
L
L
L
3
2
1
3
2
1
321
3333231
2232221
1131211
Em muitos problemas de engenharia estamos interessados em determinar se
existe uma solução para o sistema de equações lineares que descreve uma parte do
problema real.
Matriz dos coeficientes Vetor Solução
Vetor dos termos independentes
=++++
=++++
=++++
=++++
mnmnmmm
nn
nn
nn
bxaxaxaxa
bxaxaxaxa
bxaxaxaxa
bxaxaxaxa
K
M
K
K
K
332211
33333232131
22323222121
11313212111
Cálculo Numérico usando MatLab
24
Na construção civil: TRELIÇAS
Problema: Determinar as componentes horizontal e vertical das forças que
atuam nas junções da treliça:
Para isso é necessário determinar as 17 forças desconhecidas que atuam
nesta treliça.
Cálculo Numérico usando MatLab
25
Um sistema de equações lineares poderá ser resolvido no MATLAB de
diversas formas:
Assumindo o sistema de equações apresentado abaixo, temos:
=−−+
−=−++
=+++
=+−−
3223
1242
6
0
wzyx
wzyx
wzyx
wzy
onde
−−
−
−−
=
2213
2142
1111
1110
A ,
−=
3
1
6
0
b e
=
w
z
y
x
X
Definindo a matriz dos coeficientes e o vetor dos termos independentes no
MATLAB, temos:
>> A=[0 -1 -1 1; 1 1 1 1 ;2 4 1 -2;3 1 -2 -2]
A =
0 -1 -1 1
1 1 1 1
2 4 1 -2
3 1 -2 -2
Cálculo Numérico usando MatLab
26
>> b=[0; 6;-1;3]
b =
0
6
-1
3
A inversa da matriz A poderá ser calculada usando o comando inv:
>> inv(A)
ans =
-3/5 3/5 -2/5 2/5
1 -1/3 2/3 -1/3
-6/5 8/15 -7/15 2/15
4/5 1/5 1/5 -1/5
Se existe a inversa da matriz A, o vetor solução é definido por:
>> X=inv(A)*b
X =
26/5
-11/3
61/15
2/5
Ou ainda, independente de existir ou não a inversa da matriz A, podemos
obter a solução do problema escalonando a matriz aumentada do sistema [A,b]. No
MATLAB podemos usar o comando rref:
Cálculo Numérico usando MatLab
27
>> [A,b]
ans =
0 -1 -1 1 0
1 1 1 1 6
2 4 1 -2 -1
3 1 -2 -2 3
>> rref([A,b])
ans =
1 0 0 0 26/5
0 1 0 0 -11/3
0 0 1 0 61/15
0 0 0 1 2/5
>> X=ans(:,5)
X =
26/5
-11/3
61/15
2/5
Cálculo Numérico usando MatLab
28
A solução também poderá ser obtida aplicando o comando solve nas
equações do sistema:
>> [x,y,z,w]=solve( '-y-z+w=0','x+y+z+w=6','2*x+4*y+z-2*w=-1','3*x+y-2*z-2*w=3' )
x =
2/5
y =
26/5
z =
-11/3
w =
61/15
Cálculo Numérico usando MatLab
29
4. MATEMÁTICA SIMBÓLICA
É possível instruir o MATLAB a manipular expressões matemáticas, que lhe
permitam calcular com símbolos matemáticos, além de números. Esse processo é
frequentemente chamado de matemática simbólica. Na sequencia são apresentados
alguns exemplos de expressões simbólicas.
Para exemplificar, declaramos:
>> syms x a b c d n
Observe que, o comando syms foi usado para, explicitamente, dizer ao
MATLAB que x a b c d e n definem uma expressão simbólica.
Entrando com a expressão: x
x
−1
>> z=x/sqrt(1-x)
z =
x/(1 - x)^(1/2)
Para visualizar a expressão simbólica na forma x
x
−1 devemos usar o comando:
>> pretty(z)
Entrando com matrizes:
Seja
=
dc
baM
>> M=[a b; c d]
M =
[ a, b]
[ c, d]
Cálculo Numérico usando MatLab
30
O determinante da matriz simbólica M é definido por:
>> det(M)
ans =
a*d - b*c
Entrando com polinômios: e calculando suas raízes:
>> syms x
>> 2*x^3-3*x^2+x
ans =
2*x^3 - 3*x^2 + x
>> raizes_x=solve('2*x^3-3*x^2+x')
raizes_x =
0
1/2
1
4.1 SUBSTITUIÇÃO DE VARIÁVEIS
Quando se tem uma expressão simbólica em x, e que queira mudar a variável
para s, usa-se a função subs.
>> syms a b c d x
>> f= a*x^2+b*x+c
f =
a*x^2 + b*x + c
>> subs(f,x,'s')
ans =
a*s^2 + b*s + c
Cálculo Numérico usando MatLab
31
Quando queremos avaliar a função em um determinado ponto x=k, onde k é
uma constante, usamos o comando eval(f).
>> x=2;
>> eval(f)
ans =
4*a + 2*b + c
4.2 DERIVAÇÃO E INTEGRAÇÃO
A derivação de uma expressão simbólica usa a função diff em uma dentre as
quatro formas:
Expressão Resultado
syms a b c x ;
f=a*x^3+x^2-b*x+c;
Define uma expressão simbólica.
diff(f) Deriva em relação a x (padrão).
diff(f,a) Deriva f em relação a ‘a’.
diff(f,2) Deriva f 2 vezes em relação a x.
diff(f,a,2) Deriva f 2 vezes em relação a ‘a’.
A função diff também opera sobre conjuntos. Se f for um vetor simbólico ou
matriz, diff(f) deriva cada elemento do conjunto.
Exemplo:
>> syms a b c d x s
>> T=[a*x, b*x^2; c*x^3, d*s]
T =
[a*x, b*x^2]
[c*x^3, d*s]
Cálculo Numérico usando MatLab
32
>> diff(T)
ans =
[a, 2*b*x]
[3*c*x^2, 0]
A função de integração int(f), onde f é uma expressão simbólica, tenta
encontrar outra expressão simbólica F tal que diff(F)=f.
Expressão Resultado
syms s m n x;
f=sin(s+2*x);
Define uma expressão simbólica.
int(f) Integra em relação a x (padrão).
int(f,pi/2,pi) Integra f em relação a x de pi/2 a pi.
int(f,s,pi/2,pi) Integra f em relação a s de pi/2 a pi.
int(f,m,n) Integra f em relação a x de m a n.
A função int também opera sobre conjuntos. Se f for um vetor simbólico ou
matriz, int(f) integra cada elemento do conjunto. Exemplo:
>> T=[a*x, b*x^2; c*x^3, d*s]
T =
[a*x, b*x^2]
[c*x^3, d*s]
>> int(T,0,2)
ans =
[ 2*a, (8*b)/3]
[ 4*c, 2*d*s]
Cálculo Numérico usando MatLab
33
4.3 EXERCÍCIOS PROPOSTOS
1) Sendo x=345,6, y= 3,5 e z=23,7, calcule o valor de A.
zyxA
53
5
−+=
yx
xyA
+
−=
2
1222 +++−= yxyxA
xxeAy ln+=
( ) 2
2 53+−
+=
xeyx
yxA
)43(
)2(.
64
2
+−
+
−
−=
yx
yxy
yx
xyxA
( )164
21
2
2
e
y
yxx
x
−
−
−+
A=
−
53
24
01.
y
x .
RESPOSTAS:
0.0210 =A
0.9900i + 0 =A
005+1.1978e=A
004+1.1451e =A
148-1.1465e=A
2) Seja a matriz A=
263
174
952 ,calcular A+A T =S e verificar se S é simétrica.
Resp: A é simétrica
Cálculo Numérico usando MatLab
34
3)Dadas as matrizes A,B e C determine:
A=
− 46
51 B=
210
63 C=
01
87
A.C e (A.C).B
B.( A.C)
Resp:
−−=
4838
812AC
, ( )
−−=
324594
886.11BAC
e ( )
−
−−=
1644
264192ACB
4) Dadas as matrizes A e B calcule a A.B:
A=
−
−
−
−
287
612/1
412
035 B=
−
−
21
35
40
Resp:
−
−
−−
=
4838
1311
131
1115
AB
5) Resolva as equações:
a)
x
x
x
−−
−−−
−−
311
151
113 =0 b)
123
312
132 −+− xxx =0
Resp: a) {x=2, x=3, x=6} e b) {x=-10}
6) Dadas as matrizes A=
− 53/22
05/32/1 e B=
−
3/1
3/4
3, calcule se for possível:
A T B T AB � não é possível
A T B � não é possível
7) Dadas as matrizes A e B calcule as seguintes colunas de AB:
A=
−
−
512
324
423
211 B=
−
−
1524
4333
2101
A segunda coluna.
A quarta coluna.
Cálculo Numérico usando MatLab
35
Resp: a)
13
0
14
1 e b)
13
3
18
0
8) Seja A=
30
21 determine g(A), onde g(x)=x 2 . Resp:
=
90
812A
9) Determine x, y e z, se
3
wz
yx =
− w
x
21
6 +
+
+
3
4
wz
yx .
Resp: {x=2, y=4, z=1, w=3}
10) Escreva os sistemas de equações lineares na forma matricial, em seguida
encontre o vetor solução.
a)
−=−−
−=−−
=−+
432
4242
8523
zyx
zyx
zyx � SCD x=3, y=2 e z=1
b)
=−
=−
=+
02212
0816
042
1
21
21
xx
xx
xx� Somente a Sol. Trivial
c)
=−−
−=−
−=+
26523
442
83
zyx
yx
zx� SCD: x=4, y=3 e z=-4
d)
=−−−
=++
0639
0426
zyx
zyx � SCI:
−−
=
z
y
zy
X3
2
3
1
e)
=++
−=−+
=+−
5366
2363
132
cba
cba
cb
� SI
f)
=+−
=+−
=+−
14223
1742
72
zyx
zyx
zyx � SCD: x=2,y=-1 e z=3
h)
=++
=++
=−+
17483
53
32
zyx
zyx
zyx � SCD
−
−
=
3
43
23
17
X
Cálculo Numérico usando MatLab
36
i)
−=−
=+
=−
=+
754
93
425
1642
21
21
21
21
xx
xx
xx
xx � SCD
=
3
2X
11) Determine o conteúdo das matrizes definidas abaixo. Use a matriz A como
referência.
−
−=
2211
3510
1521
2751
A
12) Verifique suas respostas usando o MATLAB.
A ( : , 2 )
A ( 4 , : )
A ( 4:5 , 1:3 )
A ( 1:2:5 , 2 )
3 * A ( : )
13) Calcule a integral indefinida de y=f(x) para:
Cálculo Numérico usando MatLab
37
14) Sabendo que e , isto é
. (Verifique se as respostas encontradas no exercício 12) estão
corretas.
Cálculo Numérico usando MatLab
38
5. AMBIENTE GRÁFICO
A construção de gráficos no MATLAB é mais uma das facilidades do sistema.
Através de comandos simples podem-se obter gráficos bidimensionais ou
tridimensionais com qualquer tipo de escala e coordenadas. Existe no MATLAB uma
vasta biblioteca de comandos gráficos.
Se y é um vetor, plot(y) produz um gráfico linear dos elementos de y versos o
índice dos elementos de y. Por exemplo, para plotar os números [0,1 0,3 1 0,3 0,1],
entre com o vetor e execute o comando plot:
>> y=[.1 .3 1 .3 .1]
>> plot(y)
e o resultado é apresentado na Janela Gráfica:
Se A é uma matriz, plot(A) produz um gráfico linear dos elementos de A
versos o índice da linha ao qual elemento pertence. Por exemplo:
>> A=[1 2 -3; 4 5 10];
>> plot(A),grid
1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2-4
-2
0
2
4
6
8
10
Cálculo Numérico usando MatLab
39
ou ainda, se A é uma matriz 3x3, temos como exemplo:
>> A=[1 2 -3; 4 5 10;1 2 5];
>> plot(A),grid
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3-4
-2
0
2
4
6
8
10
Dados dois vectores de mesma dimensão, o comando plot(x,y) permite
desenhar o gráfico definido pelos pares ordenado (x,y).
>> x=linspace(1,5,20);
>> y=linspace(2,26,20);
>> plot(x,y)
1 1.5 2 2.5 3 3.5 4 4.5 50
5
10
15
20
25
30
Cálculo Numérico usando MatLab
40
Para obter o gráfico de uma função y = f(x), Introduza na linha de comandos
do MATLAB o vetor x (parte do domínio de f) e o vetor y (imagem referente as
componentes do vetor x):
>> x=1:6;
>> y=1./x;
>> plot(x,y),grid
O comando grid insere uma grade na janela gráfica:
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 60.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Observe que o gráfico acima não apresenta com precisão o comportamento
da função no intervalo . Desta forma, é importante notar que o
número de pontos definidos no vetor x, define a qualidade com relação ao aspecto
de continuidade e diferenciabilidade da função.
>>x=1:0.01:6;
>>y=1./x;
>>plot(x,y)
1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 60.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
Cálculo Numérico usando MatLab
41
5.1 ALGUNS COMANDOS E FUNÇÕES
O MATLAB possui comandos de fácil utilização para adicionar informações
em um gráfico:
title Título do gráfico.
xlabel Título do eixo-X.
ylabel Título do eixo-Y.
zlabel Título do eixo-Z.
text Inserir anotação no gráfico.
gtext Inserir anotação com o “mouse”.
grid Linhas de grade.
Além da formatação default para gráficos, outros tipos de linhas, pontos e
cores também podem ser usados:
TIPO DE LINHA
- ----
- - -----------------
-. -⋅-⋅-⋅-⋅-⋅-⋅-⋅-⋅-⋅
: ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅
TIPO DE PONTO
⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅ ⋅⋅⋅⋅
∗ ∗∗∗∗∗∗∗∗∗∗∗
° °°°°°°°°°°°°°
+ +++++++++
X x x x x x x x
Cálculo Numérico usando MatLab
42
CORES
y Amarelo
m Lilás
c azul claro
r Vermelho
g Verde
b azul escuro
w Branco
k Preto
Observe a sequencia de comandos e o respectivo gráfico:
>>x=1:.01:10;
>>y=1./x;
>>plot(x,y,'y*')
>>title('FUNÇÃO Y=1/X')
>>xlabel( 'EIXO DAS ABSCISSAS')
>>ylabel('EIXO DAS ORDENADAS')
1 2 3 4 5 6 7 8 9 100.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1FUNÇÃO Y=1/X
EIXO DAS ABSCISSAS
EIX
O D
AS
OR
DE
NA
DA
S
Cálculo Numérico usando MatLab
43
>>x=-6:.01:6;
>>y=1./x;
>>plot(x,y,'y*')
>>title('FUNÇÃO Y=1/X')
>>xlabel( 'EIXO DAS ABSCISSAS')
>>ylabel('EIXO DAS ORDENADAS')
>>legend('f(x)=1/x')
-6 -4 -2 0 2 4 6-150
-100
-50
0
50
100
150FUNÇÃO Y=1/X
EIXO DAS ABSCISSAS
EIX
O D
AS
OR
DE
NA
DA
S
f(x)=1/x
O MATLAB plota múltiplas ‘linhas’ em apenas um gráfico, usando o comando
plot com múltiplos argumentos. Por exemplo: Os comandos definidos abaixo cria o
gráfico da função seno e da função cosseno, com x variando de 0 até 2*pi, com 30
pontos:
>> x=linspace(0,2*pi,30);
>> y1=sin(x);
>> y2=cos(x);
>> plot(x,y1,x,y2),grid
Para inserir mensagens sobre o texto, usando o mouse, temos:
>> gtext('sin(x)')
>> gtext('cos(x)')
Para inserir uma legenda, fazemos uso do comando legend:
>> legend('sin(x)','cos(x)')
Cálculo Numérico usando MatLab
44
Para inserir título e nomes nos eixos, usamos os comandos: title, xlabel e
ylabel.
>> title('Gráfico das funçoes: f(x)=sen(x) e f(x)=cos(x), 0<x<2*pi')
>> xlabel('x')
>> ylabel('f(x)')
Caso seja necessário redefinir os valores dos eixos coordenados, usamos o
comando axis([xmin xmax ymin ymax])
>> axis([ 0 3*pi/2 -pi pi])
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5
-3
-2
-1
0
1
2
3
sin(x)
cos(x)
x
f(x)
Gráfico das funçoes: f(x)=sen(x) e f(x)=cos(x), 0<x<2*pi
sin(x)
cos(x)
Para que os valores dos eixos voltem ao normal usamos
>> axis xy normal
Cálculo Numérico usando MatLab
45
Outro exemplo: Gráfico da função seno e da função cos(x)+1 de 0 até 2pi,
com 30 pontos:
>>x=linspace(0,2*pi,30);
>>f=sin(x);
>>g=cos(x)+1;
>>plot(x,f,x,g),grid
>> gtext('f(x)=cos(x)+1')
>>gtext('g(x)=sin(x)')
0 1 2 3 4 5 6 7-1
-0.5
0
0.5
1
1.5
2
f(x)=cos(x)+1
g(x)=sin(x)
Os tipos de linhas, símbolos e cores usados para plotar gráficos podem ser
controlados se os padrões não são satisfatórios. Veja os exemplos, que seguem na
mesma janela usando o comando subplot.
Sintaxe do subplot:
>>subplot(m,n,p)
Parâmetros de entrada:
m: número de eixo na horizontal
n: número de eixos na vertical
p: índice da figura corrente.
Cálculo Numérico usando MatLab
46
No exemplo definido abaixo, uma janela gráfica (2x3) foi criada evidenciando
o gráfico de seis funções.
>>x = -15:0.1:15;
>>y1=x.^2-6*x+8;
>>y2=x.^2-2*x+2;
>>y3=x.^2-6*x+9;
>>y4=abs(x);
>>y5=2*x+1;
>>y6=-2*x+1;
>>subplot(2,3,1), plot(x,y1,'k*')
>>subplot(2,3,2), plot(x,y2,'r.')
>>subplot(2,3,3), plot(x,y3,'yo')
>>subplot(2,3,4), plot(x,y4,'b>')
>>subplot(2,3,5), plot(x,y5,'m.-')
>>subplot(2,3,6), plot(x,y6,'g')
-20 0 20-100
0
100
200
300
400
-20 0 200
100
200
300
-20 0 200
100
200
300
400
-20 0 200
5
10
15
-20 0 20-40
-20
0
20
40
-20 0 20-40
-20
0
20
40
Cálculo Numérico usando MatLab
47
Na sequencia, uma única linha apresenta três gráficos (matriz 1x3).
>>x = -5:0.01:5;
>>g1=x.^2+6*x-2;
>>g2=abs(x)+1;
>>g3=-2*x+1;
>>subplot(1,3,1), plot(x,g1,'k*')
>>title('g1(x)=x^2+6*x-2')
>>subplot(1,3,2), plot(x,g2,'r.')
>>title('g2(x)=abs(x)+1')
>>subplot(1,3,3), plot(x,g3,'yo')
>>title('g3(x)=-2*x+1')
-5 0 5-20
-10
0
10
20
30
40
50
60g1(x)=x2+6*x-2
-5 0 51
1.5
2
2.5
3
3.5
4
4.5
5
5.5
6g2(x)=abs(x)+1
-5 0 5-10
-5
0
5
10
15g3(x)=-2*x+1
INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO
Cálculo Numérico usando MatLab
48
6. LÓGICA E ALGORITMO
A lógica na programação é muito útil quando se deseja desenvolver sistemas
e programas, ela permite definir a sequência lógica de procedimentos para cumprir o
desejado. São passos que devem ser executados em uma sequência tal que o
objetivo ou solução de um problema são alcançados.
Em computação, uma instrução é a informação que indica ao computador
uma ação elementar que deve ser executada.
Uma instrução isolada, em geral, não resolve um processo completo. Nesses
casos é necessário um conjunto de instruções, colocadas em uma ordem sequencial
lógica.
Um algoritmo é formalmente uma sequência finita de passos, não
redundantes nem subjetivos na sua definição, logicamente encadeados que levam a
execução de uma tarefa.
Um exemplo, no dia-a-dia, seria um manual de instalação e uso de um
aparelho eletrônico, que explica passo-a-passo como proceder a sua instalação e
como realizar cada uma das suas funções.
Outro exemplo seria o de efetuar a soma de dois números reais.
Nada seria feito se a instrução fosse: efetue a soma desses números. Mesmo
que essa operação fosse efetuada, qual seria o resultado? Ter-se-ia conhecimento
dele se nenhuma instrução foi dada para que isso ocorresse?
Em termos computacionais, seria necessário estabelecer uma sequência finita
de passos, de forma clara e precisa, que possibilitasse que o computador realizasse
a tarefa.
Seria algo como:
Leia o primeiro número.
Leia o segundo número.
Efetue a soma desses números.
Informe o resultado.
Lógica é o encadeamento de pensamentos para atingir determinado objetivo.
Cálculo Numérico usando MatLab
49
Suponha agora que seja desejável, além de efetuar a soma, calcular a
multiplicação da soma pelo segundo número.
Então, além da elaboração da sequência acima, seria necessário proceder à
multiplicação pelo segundo número lido.
Isto seria descrito por:
Leia o primeiro número.
Leia o segundo número.
Efetue a soma desses números e o produto dessa soma pelo segundo número
lido.
Informe o resultado.
Algumas vezes, não é possível realizar todas as operações de uma só vez,
conforme a linguagem utilizada e/ou a conveniência do desenvolvimento do
raciocínio.
Neste caso, os procedimentos que não puderem ser realizados de uma só vez
podem e devem ser realizados por partes:
Leia o primeiro número.
Leia o segundo número.
Efetue a soma desses números.
Efetue o produto dessa soma pelo segundo número.
Informe o resultado.
Conforme o problema torna-se necessário estabelecer outro tipo de
raciocínio. É o caso, por exemplo, se a multiplicação, no problema acima, fosse
efetuada com o maior dos dois números fornecidos, em lugar de pelo segundo. Isso
levaria a necessidade de se estabelecer:
Cálculo Numérico usando MatLab
50
Leia o primeiro número.
Leia o segundo número.
Se o primeiro número é maior do que o segundo;
Efetue a soma dos dois números e multiplica a soma pelo primeiro número.
Senão (se o primeiro não é maior do que o segundo)
Efetue a soma dos dois números e multiplica a soma pelo segundo número.
Informe o resultado.
Poder-se-ia elaborar vários outros problemas com especificações mais
trabalhosas. Mas é bom estabelecer aqui que em todos os casos é possível
encontrar uma sequência de passos finita, clara e não redundantes que, ao final,
apresentaria um resultado.
6.1 PROGRAMAS
Os programas de computadores são, simplesmente, algoritmos escritos numa
linguagem de computador (Pascal, C, Cobol, Fortran, MatLab entre outras) e que
são interpretados e executados por uma máquina, no caso um computador.
É bom que se saiba que um programa é muito específico e rígido em relação
aos algoritmos da vida real. Qualquer falha no raciocínio, erro de sintaxe na
linguagem ou erro na sequência estabelecida para o computador, o resultado pode
ser muito diferente daquele que seria o correto.
6.2 CONSTRUÇÃO DE ALGORITMOS
Pseudocódigo
Ao se criar um algoritmo ele é em uma linguagem chamada pseudocódigo.
Assim chamada por ser conveniente elaborá-lo aproximando-se da posterior
implementação em uma linguagem de programação. Isto significa que quando da
programação, o código será gerado de acordo com o estabelecido no algoritmo.
Por esta razão, os algoritmos são independentes das linguagens de
programação e, por isto, não existe um formalismo rígido de como deve ser escrito o
Cálculo Numérico usando MatLab
51
algoritmo. Um algoritmo deve ser fácil de interpretar e ao mesmo tempo fácil de
codificar.
O algoritmo deve ser intermediário entre a linguagem falada e a linguagem de
programação.
6.3 REGRAS PARA CONSTRUÇÃO DO ALGORITMO
Um algoritmo deve descrever a sequência de instruções, de maneira simples e
objetiva e, por isso é aconselhável a obediência à algumas regras:
• Levar em consideração que o algoritmo será visto por pessoas que não estão
familiarizadas com computação.
• Usar frases curtas e simples.
• Preferencialmente, usar apenas um verbo por frase.
• Objetividade.
• Não usar palavras que possam oferecer duplo sentido.
6.3.1 Fases
Na elaboração de um algoritmo é necessário:
• Conhecimento completo do problema que se pretende resolver (Análise do
Problema). Isto inclui em estabelecer quais são os dados que devem ser
conhecidos, quais cálculos devem ser realizados e em quais condições, entre
outros.
• Elaborar uma sequência de passos, finita, clara e objetiva.
• Observar se o algoritmo cumpre todas as etapas na ordem desejada.
Exemplo: Deseja-se calcular a média anual de um aluno do curso, ao final do ano.
Solução:
• Os alunos se submeterão a uma prova por bimestre, totalizando, ao final do
ano, 4 provas que correspondem a 4 notas (digamos, N1 , N2, N3 e N4 ).
• A média anual é dada pela soma das quatro notas divididas pelo número de
notas (4). O que se deseja é o resultado da média assim calculada.
Cálculo Numérico usando MatLab
52
Para se elaborar o algoritmo deve-se levar em conta:
• Quais são os dados de entrada?
• Quais são os procedimentos que serão executados para os cálculos?
• Qual é o resultado que será apresentado?
As respostas podem ser extraídas do conhecimento do problema:
• Dados de entrada: as notas bimestrais (N1 , N2 , N3 e N4)
• Procedimentos: Efetuar a soma das notas e dividir por 4.
• Saída: fornecer a média anual (resultado obtido nos procedimentos).
Algoritmo:
Ler nota da prova 1. (N1)
Ler nota da prova 2. (N2)
Ler nota da prova 3. (N3)
Ler nota da prova 4. (N4)
Somar as notas e dividir por 4.
Informar o resultado.
6.3.2 Teste de Mesa
Elaborado o algoritmo ele deverá passar por um teste, chamado teste de
mesa, para verificar a sua exatidão. Este teste consiste em realizar com exatidão a
sequência estabelecida no algoritmo para certificar se o algoritmo realiza o desejado
de forma correta.
EXERCÍCIO: Elabore um algoritmo para calcular a média anual de um aluno do
curso, sabendo que ele recebe quatro notas no ano e que a média é ponderada,
tendo, cada nota seu peso específico.
Cálculo Numérico usando MatLab
53
6.3.3 Diagrama de Bloco
O diagrama de blocos é uma forma eficaz para representar os passos lógicos
de um determinado processamento. Ele é construído através de símbolos (em geral
figuras geométricas) específicos para cada atividade e tem por objetivo facilitar a
visualização e o entendimento dos passos de um processamento.
Dentro de cada um deles é escrito o que será realizado.
Na sequência são descritos alguns símbolos mais utilizados. No decorrer do
curso poderão ser apresentados outros, se for necessário.
SÍMBOLO DESCRIÇÃO
TERMINAL
Início ou fim do processamento.
ENTRADA DE DADOS
Exemplo: ler N
PROCESSAMENTO
Indica qualquer processamento
Exemplo: soma de dois números
DECISÃO
Será exemplificado no futuro
EXIBIR
Apresenta o resultado do
desenvolvimento
Cálculo Numérico usando MatLab
54
SENTIDO DO FLUXO
CONECTOR
Exemplo: Para o exemplo anterior, onde foi calculada a média das notas de um
aluno, tem-se:
Algoritmo e diagrama de bloco:
início
Ler nota da prova 1. (N1)
Ler nota da prova 2. (N2)
Ler nota da prova 3. (N3)
Ler nota da prova 4. (N4)
Somar as notas e dividir por 4.
Informar o resultado
fim
Fim
Ler N2
Ler N1
Ler N3
Ler N4
Media = (N1+N2+N3+N4)/4
Início
Imprimir Média
Cálculo Numérico usando MatLab
55
OBSERVAÇÃO:
Alguns preferem usar, e de fato usam quando possível, um só símbolo de
entrada de dados, constando, explicitamente, que será dada entrada de quais
dados.
Ler
N1 , N2 , N3 , N4
Nada impede este procedimento, desde que não seja prejudicada a clareza e
a não ambiguidade do diagrama.
Exercício: Elabore um diagrama de blocos para o caso de cálculo da média
ponderada, conforme enunciado anteriormente.
6.4 CONSTANTES E VARIÁVEIS
Variáveis e constantes são os elementos básicos que todo programa
manipula.
6.4.1 Variáveis
Uma variável é um espaço reservado na memória do computador para
armazenar um determinado tipo de dado.
Variáveis devem receber nomes através dos quais podem ser referenciadas e
modificadas quando necessário, na execução do programa.
Uma variável a ser utilizada muitas vezes recebe um valor inicial que pode ser
alterado no decorrer do programa. Esses valores podem ser reais, inteiros,
caracteres, etc.
Em programação, o sinal de igual (=), significa atribuição, como já se viu.
Neste caso, quando se escreve a = 10 o que se pretende é reservar um espaço de
memória, designado por a e será armazenado o valor atribuído (10).
Cálculo Numérico usando MatLab
56
6.4.2 Constantes
Constante é um valor fixo que não se modifica ao longo do tempo, durante a
execução de um programa. Conforme o seu tipo, a constante é classificada como
sendo numérica lógica ou literal.
Exemplo de constantes:
PI = 3.141516, K = 4, nome = “Maria”.
6.5 OPERADORES
Os operadores são os meios pelos quais o computador incrementa, decrementa,
compara e avalia os dados. São classificados em três tipos:
• Operadores Aritméticos
• Operadores Relacionais
• Operadores Lógicos
6.5.1 Operadores Aritméticos
Os operadores aritméticos são aqueles utilizados para obter resultados
numéricos. Além da adição, subtração, multiplicação e divisão, utiliza-se também o
operador para exponenciação.
OPERAÇÃO SÍMBOLO
Adição +
Subtração -
Multiplicação *
Divisão /
Exponenciação ^
6.5.2 Operadores Relacionais
Os operadores relacionais são aqueles utilizados para efetuar comparações.
Os valores a serem comparados podem ser caracteres ou variáveis.
Cálculo Numérico usando MatLab
57
Estes operadores retornam valores lógicos (verdadeiro ou falso/ True ou
False)
Para estabelecer prioridades no que diz respeito a qual operação executar
primeiro é utilizados parênteses.
Descrição Símbolo
Igual a ==
Diferente de ~=
Maior que >
Menor que <
Maior ou igual a >=
Menor ou igual a <=
Exemplo: Considere duas variáveis e seus respectivos valores: L = 5 e P = 10
Utilizando os operadores obtêm-se os resultados:
L == P retorna Falso
L ~= P retorna Verdadeiro
L > P retorna Falso
L < P retorna Verdadeiro
L >= P retorna Falso
L <= P retorna Verdadeiro
Os operadores relacionais são muito úteis quando se deseja realizar cálculos
quando uma determinada condição for satisfeita. Na elaboração de um algoritmo, no
diagrama de bloco o símbolo que representa esses operadores tem a forma:
Por um dos vértices deve seguir o fluxo que realiza as operações no caso de
a comparação descrita no interior da figura resultar em Verdadeiro ( V ) e por outro
vértice o fluxo que realiza as operações no caso de a comparação resultar em falso
( F )
Cálculo Numérico usando MatLab
58
Exemplo: Elaborar um algoritmo que, dados dois números A e B, imprime a soma
deles se A for maior do que B e a diferença A – B, se A não for maior do que B.
Inicio
Ler A
Ler B
Se A > B
Efetuar a soma dos números
Senão
Efetuar a subtração A – B
Imprimir o resultado
Fim
O fluxograma ficaria da forma:
F V
Início
Ler A e B
R = A + B
A > B
R = A - B
Imprimir R
Fim
Cálculo Numérico usando MatLab
59
7. ROTINAS (M-FILES OU SCRIPTS)
A janela do command Windows não é interativa. Toda vez que é acionada a
tecla enter somente o último comando digitado é executado e os anteriores ficam
inalterados. Se alguma alteração ou correção for necessária, todos os comandos
deverão ser digitados e executados novamente.
Uma forma de tornar isto menos trabalhoso e mais eficiente é criar um arquivo
com a lista de comandos desejados, salvar esse arquivo e depois executá-lo. Se
alguma correção ou alteração for necessária, abre-se o arquivo, procedem-se as
correções necessárias e salva o arquivo. Ele fica disponível, com todos os
comandos para nova execução.
Esses arquivos são chamados rotinas (programas), M-files ou scripts.
No uso de programas (rotinas) convém observar:
• Um programa é uma sequência de comandos do MATLAB.
• Toda comunicação com o usuário e feita através da janela command
Windows, quer seja solicitando dados, quer seja fornecendo resultados.
• Podem ser executados e editados quantas vezes forem necessárias.
7.1 CONSTRUINDO UM PROGRAMA
As rotinas devem ser criadas e editadas em um editor. A janela do editor se
abrirá através do caminho: File → New → Script. Será apresentada a janela:
Os comandos deverão ser digitados aqui, linha por linha. As linhas serão numeradas automaticamente e para passar de uma linha para outra tecle enter. O editor possui propriedades semelhantes ao word.
Número da linha.
Cálculo Numérico usando MatLab
60
Os comandos serão digitados linha a linha e as linhas serão numeradas
automaticamente. Após a digitação a rotina deve ser salva. Para salvar, escolha, no
menu, o caminho File → save as... Escolha a unidade e atribua um nome para a
rotina.
Se não for explicitado um caminho para o salvamento, ele será realizado na
pasta default do MATLAB: c:\matlab7\work. É neste diretório que a rotina é
procurada quando solicitada a sua execução, a menos que tenha sido realizada uma
configuração personalizada.
Na escolha do nome da rotina não pode ser usado o nome de comandos ou
funções nativas do MATLAB e nem o nome de variáveis declaradas pelo usuário.
Observe, finalmente, que as linhas iniciadas pelo símbolo % não são consideradas
na execução. Por esta razão geralmente o símbolo é usado para incluir descrição e
comentários na rotina.
Exemplo: Calcular a média das notas obtidas por um aluno, na disciplina, no final do
ano.
Solução:
A análise e o respectivo algoritmo já foram apresentados anteriormente.
A digitação, na janela do editor, obedeceu à sequência apresentada no
algoritmo.
Foi escolhido o caminho default para salvar e atribuímos o nome “media” para
o arquivo.
Veja a janela após a digitação:
Cálculo Numérico usando MatLab
61
Para executar o programa digitamos o nome do arquivo no command Windows.
Cálculo Numérico usando MatLab
62
7.2 ENTRADA DE DADOS EM UMA ROTINA
Para executar uma rotina as variáveis usadas dentro do arquivo devem ser
inicializadas. Essa inicialização (atribuição de um valor) pode ser feita de três
modos:
a) Dentro da própria rotina - A variável é declarada e inicializada dentro da própria
rotina. Foi o caso no exemplo acima. O inconveniente é que se for desejado rodar a
rotina com valores diferentes, o arquivo deve ser editado e os novos valores
fornecidos para as variáveis ali constantes.
b) Na janela do Command Windows - Neste caso, as variáveis são inicializadas
antes de chamar a rotina para execução.
No exemplo anterior o problema seria elaborado: no editor
Variáveis não inicializadas no arquivo.
Cálculo Numérico usando MatLab
63
No Command Windows, inicializa-se cada variável e só após é solicitada a execução
da rotina.
c) O usuário é solicitado a fornecer os dados quando inicia-se a execução. Neste
caso, usa-se a função input() para solicitar ao usuário a entrada do dado. Essa
função ocasiona uma interrupção temporária da execução da rotina para que possa
ser fornecido o dado e a execução é continuada após teclar enter.
O novo arquivo para o problema anterior ficaria assim
Inicializando as variáveis que serão usadas na rotina.
Solicitando a execução da rotina
Cálculo Numérico usando MatLab
64
No command Windows, quando solicitada a rotina, imediatamente haveria
uma parada e a janela se apresentaria da seguinte forma:
A função input usada para receber dados.
Cálculo Numérico usando MatLab
65
Após a entrada de todos os valores solicitados, a janela estaria da forma seguinte:
No exemplo, os valores dos dados foram atribuídos um a um. Existem formas
de se proceder a entrada dos dados na forma de matriz, como se verá mais adiante.
Também é possível dar entrada de strings usando input.
7.3 O COMANDO DE SAÍDA DISP()
O comando disp() é utilizado para apresentar texto (mensagens) na tela ou
para apresentar o conteúdo de uma variável.
Forma geral:
No caso do exemplo que tem sido o modelo até aqui, poder-se-ia emitir uma
mensagem informando do que se tratava o resultado apresentado.
disp(‘texto’) ou disp(nome da variável)
Cálculo Numérico usando MatLab
66
Outras funcionalidades do disp podem ser vistas na bibliografia.
A mensagem que apareceria na janela de execução
Cálculo Numérico usando MatLab
67
8. OPERADORES LÓGICOS
Um operador lógico é utilizado para combinar resultados de expressões
lógicas cujo resultado sempre será V (verdadeiro) ou F (falso).
Os operadores lógicos são:
OPERADOR SINAL NO
MATLAB DESCRIÇÃO
AND (E) & Retorna V se todos os operandos forem
verdadeiros. Caso contrário retorna F
OR (OU) | Retorna V se pelo menos um dos operandos for
verdadeiro. Caso contrário retorna F
NOT (NÃO) ~
É um operador unário. Ele inverte o resultado do
operando. Se o operando é verdadeiro, o
operador retorna F. Se o operando é falso, o
operador retorna V.
Analise o resultado em cada linha:
Operando 1 Operador Operando 2 Resultado
V AND V V
V AND F F
F AND F F
F AND V F
V OR V V
V OR F V
F OR F F
NOT V F
NOT F V
Cálculo Numérico usando MatLab
68
EXEMPLO: Considere três variáveis inicializadas com os valores: A = 1 ; B = 10 e
C = 6. Preencha a coluna corresponde a resultados, na tabela abaixo:
EXPRESSÃO RESULTADO
(A == B) & (B > C) 0
(A <= B) & (B == C) 0
(A<= B) & (B < C) 0
(A < C) | (B < C) 1
(A > C) | (B <= C) 0
~ (A < B) 0
~ (B < C) 1
8.1 SENTENÇAS CONDICIONAIS
As sentenças condicionais são estruturas que permitem ao MATLAB efetuar
desvios na sequência do programa, optando por um ou outro conjunto de comandos
ou até mesmo repetir um grupo de comandos um número finito de vezes. A decisão
é determinada pelo resultado (verdadeiro ou falso) de uma operação lógica.
Estas estruturas podem ser divididas em dois grupos: estruturas de decisão e
estruturas de repetição.
8.1.1 ESTRUTURAS DE DECISÃO
Uma estrutura de decisão envolve uma sentença lógica e, de acordo com o
resultado o programa decide por realizar um conjunto de comando ou outro.
8.1.1.1 Estrutura if - end
A principal estrutura de decisão corresponde ao se já comentada em
operadores lógicos. A estrutura fornece opção para o fluxo da execução de uma
rotina.
A rotina em execução, ao encontrar uma sentença if verifica se ela é
verdadeira ou falsa. No caso de ser verdadeira, a rotina executa os comandos entre
Cálculo Numérico usando MatLab
69
o if e o end. Caso contrário, ela não considera esses comandos e executa aqueles
abaixo de end.
FLUXOGRAMA ESTRUTURA NA LINGUAGEM
Exemplo: Considere o exemplo de determinar a média anual de um aluno do curso.
Imprimir o resultado “aprovado” se a média for maior ou igual a 7.0.
Solução:
Após a análise e a construção do algoritmo, a digitação seria:
V
F
Fim do if
comandos
If(sentença) > B
......................
......................
programa do MATLAB
......................
If expressão condicional
Comandos
end
......................
......................
programa do MATLAB
......................
Cálculo Numérico usando MatLab
70
Digite a rotina, salve-a e proceda a sua execução. Analise o resultado em
diversas situações.
8.1.1.2 A estrutura if – else - end
Esta estrutura é uma variação da estrutura acima. Ela acrescenta a opção de
realizar a execução de um novo conjunto de comando. Quer seja na primeira opção,
quer seja na segunda, após a realização a rotina passa para os comandos após o
end.
V F
comandos
If
comandos
Fim
comandos
...........
............ comandos
............
If sentença
Comandos
Else
Comandos
Fim
..............
.............. comandos
...............
Cálculo Numérico usando MatLab
71
Exemplo: Suponha a situação do exemplo anterior. Se a média for igual ou maior
do que 7 emitir a mensagem “aprovado”. Caso contrário emitir a mensagem “não
aprovado”.
Solução:
A análise e o algoritmo correspondentes podem ser construídos. A rotina teria a
forma:
É possível aninhar vários if-else-end. Como isto ocorrerá depende da
situação envolvida na análise e algoritmo. Entretanto, um em particular deve ser
citado.
Cálculo Numérico usando MatLab
72
8.1.1.3 Estrutura if - elseif – else - end
Exemplo: Considere o caso da média de aluno. Deseja-se que sejam emitidas
mensagens de que ele foi aprovado, está em exame ou ainda reprovado.
Solução:
Sabe-se que se a média for igual ou superior a sete, o aluno está aprovado. Se,
entretanto, for inferior a sete, mas igual ou superior a quatro, o aluno está em exame
final e, finalmente, se for inferior a quatro então o aluno está reprovado (no que diz
respeito a notas).
Realizada a análise e construído o algoritmo, o resultado seria uma rotina da forma:
Fim
V F If senteça
comandos
comandos If senteça
comandos
F
VF
Observe que no caso de
falso no primeiro if, e só
então, um novo if é
Cálculo Numérico usando MatLab
73
É bom lembrar que são várias as possibilidades de aninhar sentenças if – elseif –
end. Desta forma é possível efetuar vários testes dentro de um único programa.
8.2 ESTRUTURAS DE REPETIÇÃO
Além das estruturas de decisão, existem na linguagem MATLAB ( e demais
linguagens ) as estruturas de repetição. Estas servem para proporcionar
oportunidade para que uma rotina execute várias vezes um mesmo conjunto de
comandos sem a necessidade de reescrevê-los em igual número de vezes. São
conhecidos também por LOOPS ou LAÇOS. A cada repetição do laço é chamada
passo e em cada passo pelo menos uma variável é modificada. Essa variável deve
ser quem controla o encerramento do laço. O laço deixa de ser executado quando
essa variável deixar de satisfazer uma condição definida para esse fim.
Cálculo Numérico usando MatLab
74
Dois tipos de laços estão presentes no MATLAB: for – end e while - end .
Ambos obedecem ao mesmo conceito inicial de ser interrompido quando a condição
de controle seja falsa. Entretanto, existe o comando break que interrompe a
execução, em ambos os casos, a qualquer momento em que for desejável.
8.2.1 A estrutura for - end
A principal característica deste laço é que deve ser previamente conhecido o
número de vezes que se deseja repetir o conjunto de comandos. O laço tem a
seguinte forma:
for i = a : k : b
Comandos
end
Algumas considerações e regras acerca da estrutura:
• O nome da variável-índice é atribuído pelo programador e pode ser qualquer.
Em geral atribui-se as letras i , j, k , m ou n, tomando-se o cuidado de, se a
programação envolver número complexo, evitar a atribuição de i e j.
• Sobre o funcionamento, a variável assume o valor inicial ( a , no caso) e
executa o primeiro passo, retornando ao início do loop quando recebe o
incremento de valor k e, se i ainda for menor ou igual ao valor b o loop volta
a ser executado. O processo se repete até que i fica maior do que o valor b,
quando o fluxo deixa de executar os comandos no interior do loop e passa ao
primeiro comando após o end.
• O incremento k pode ser negativo.
• Todo laço for deve terminar com um end.
• O valor de i não pode ser redefinido pelos comandos no interior do laço.
• O valor de k ao final da execução é o último valor que ela recebeu, e pode
ser usado após o término do laço.
i é o índice controlador do loop.
Valor inicial de i
k é o incremento que i sofrerá a cada passo, após o primeiro.
b é o valor que i terá ao executar o último passo.
Cálculo Numérico usando MatLab
75
Exemplos:
1.- Efetuar uma rotina que efetue a soma dos n primeiros número naturais, onde n
é fornecido pelo usuário no início da execução da rotina.
Solução:
O que se deseja é determinar com n conhecido. Um algoritmo para o
problema:
Início
Ler n
S = 0;
Para k = 1 até n
S = S+k
Imprimir S
Fim
Para escrever a rotina, vamos usar o for-end uma vez que é conhecido o
número de vezes que o laço de repetição é executado. A rotina seria:
Execute o programa com diversos valores de n (natural) e confira os resultados.
Inicialização da variável S. Igual a zero para não interferir no resultado da soma.
Cálculo Numérico usando MatLab
76
8.2.1.1 Exercícios:
1.- Escreva uma rotina que calcula o produto dos n primeiros números naturais.
Obs.: veja que, neste caso, a inicialização da variável deve ser para o valor 1.
O problema é equivalente a determinar o valor de n!
2.- Escreva uma rotina que determina o valor de P = para um valor n a
ser fornecido pelo usuário.
3.- A função pode ser representada (em série de Taylor) por
. Escreva uma rotina que calcula o valor da aproximado para a função,
para x = 2, considerando os 6 primeiros termos da série,.
Sugestão: Uma análise do problema deve levar em consideração:
Deseja-se o valor da função para x = 2.
O problema solicita a soma dos seis primeiros termos, o que nos leva a iniciar o for-
end com n = 0 e terminar com n = 5.
8.2.2 A estrutura while - end
O comando while-end realiza um trabalho semelhante ao for-end. A diferença
está no fato de ele realizar o laço quando o número de repetições não é conhecido
antecipadamente.
A exemplo das demais estruturas de repetição, após o while existe uma
condição lógica que, para a execução do laço deve ser verdadeira quando o fluxo de
execução encontrar o while pela primeira vez. Neste caso são executados os
comandos existentes no laço até que o end seja encontrado. O fluxo volta ao while e
verifica novamente se a condição é verdadeira ou falsa. Observe que, se não
houver alteração da condição lógica a execução do loop nunca será interrompido. É
obrigatória a existência de alteração de pelo menos uma variável presente na
condição lógica para que, em algum momento, expressão lógica venha a ter valor
falso.
Cálculo Numérico usando MatLab
77
A estrutura tem a seguinte construção:
while <expressão>
..................
.................. comandos
..................
end
Exemplos:
1. Escrever uma rotina para determinar todos os números pares positivos menores
ou iguais a 31. Apresentar o resultado na forma de matriz.
Solução:
Uma análise do problema:
Sabe-se que os números pares positivos são aqueles múltiplos de 2. Portando o
problema consiste em determinar os números positivos múltiplos de 2 e menores do
que 31. Isto significa que o primeiro elemento é igual a 2 e o último igual a 30.
É conveniente usar um loop para realizar o trabalho. Não se sabe quantas vezes o
loop deve ser executado e, portanto, deve-se usar o while-end.
Deseja-se apresentar o resultado na forma de matriz, por isto é bom lembrar que os
elementos de uma matriz podem ser referenciados através de índices. Se a matriz é
designada por x, então seus elementos podem ser referenciados por x(i), com i
variando de 1 até o número de elementos que formam a matriz.
Cálculo Numérico usando MatLab
78
Diagrama de blocos
Veja a rotina no editor do MATLAB
A <= 30
Imprimir A
FIM
A = 2*i
i = i + 1
x(i) = A + 1
INICIO
i = 1
A = 2
i = 1; A = 2; while A <= 30
x(i) = A; i = i + 1; A = 2*i;
end disp(x)
A identação não é obrigatória, mas é aconselhável. Facilita o entendimento e possíveis correções.
Cálculo Numérico usando MatLab
79
A execução no Command Windows:
8.3 OBSERVAÇÕES IMPORTANTES
1.- As sentenças condicionais podem fazer uso dos operadores condicionais. Isto
significa que a expressão no for, por exemplo, pode ser do tipo: A & B ou A | B ou
(~A & B) | C , para citar apenas alguns exemplos.
2.- Os loops podem ser aninhados. Isto quer dizer que é possível estabelecer um
for-end dentro do laço de outro for-end (e tantos quantos forem necessários), ou
ainda for-end dentro do laço de um while-end , ou, ao contrário, while-end dentro de
for-end. Além de outras combinações usando o if-end ou if-else-end, se for o caso.
3.- Além disso, é útil lembrar que as rotinas podem “chamar” ou carregar qualquer
função nativa do MATLAB, como exp() , abs(), sin(), para citar algumas.
4.- Finalmente, é bom saber que existe um comando break que, quando inserido no
laço de um comando de repetição, ocasiona a saída incondicional do loop. Ao
encontrar o break, o fluxo do programa é dirigido para o primeiro comando após o
end do loop, saindo do laço. O uso do break é útil quando se deseja interromper o
loop mesmo com a condição de controle tendo sido satisfeita.
Por exemplo, no exercício que foi enunciado acima, mesmo que a condição de
parada não seja atendida, mas um número máximo de execução do laço,
previamente estipulado, for alcançado.
Cálculo Numérico usando MatLab
80
Exemplos:
1.- Dada uma matriz de ordem nxm criar uma rotina que determina a soma de
todos os elementos da matriz que sejam menores do que 10.
Solução:
Uma análise do problema fornece as seguintes informações:
Sabe-se que uma matriz de ordem nxm indica que a matriz terá n linhas e m
colunas. Se a matriz for designada por A os seus elementos podem ser
referenciados por A( i , j ) com i variando de 1 a n e j variando de 1 a m.
É necessário ter a matriz definida antes ou ser definida na execução da rotina. O
programador pode decidir. Para esse programa, a matriz será fornecida antes da
rotina ser chamada.
A rotina deve verificar se cada elemento é menor do que 10 e, o sendo, soma-lo aos
demais elementos que satisfizerem a mesma condição.
Para percorrer todos os elementos da matriz tornar-se-á necessário fazer uso de
dois contadores. Um deles percorrendo o índice que representa a linha e o outro o
índice que representa a coluna do elemento. Como conhecemos os valores de n e
de m (ordem da matriz), é possível usar, em ambos os casos o comando for-end.
Lembre-se de que se o acréscimo no contador para o for é igual a 1 ele não precisa
ser escrito na declaração. Basta colocar o valor inicial e o final, separados por dois
pontos.
Após elaboração do diagrama e do algoritmo, o programa ficaria assim.
Cálculo Numérico usando MatLab
81
2.- Escrever uma rotina que resolva tantas equações do segundo grau quantas
forem desejadas pelo usuário.
Solução:
A análise do problema resulta nas observações:
Para resolver várias equações é necessário que o usuário entre com os coeficientes
da equação e precisa fazê-lo de forma que possa repetir o processo. Isso leva à
existência de um controle do fluxo sob a responsabilidade do usuário. A existência
de um loop que, após cada realização, solicita ao usuário se deseja ou não resolver
outra equação.
Na solução de uma equação do segundo grau é necessário observar que o
coeficiente principal não pode ser nulo ( a ≠ 0). O discriminante deve ser não
negativo ( delta ≥ 0 ). Esta condição obriga a emitir uma mensagem se a condição
não for satisfeita para informar ao usuário que não existem raízes reais e resolvê-la
em caso contrário.
Veja um diagrama de Blocos (Fluxograma) do problema. Poderia ser montado de
outras formas além da apresentada.
Veja a diferença na apresentação dos dois for. Em um consta o acréscimo do contador e no outro não.
Cálculo Numérico usando MatLab
82
V
F
S
Fim
Flag = 1
Flag = 0
V
F
Continuar? s / n
Não existem raízes reais
Mensagem a ≠ 0
Cálculo de D
F
Ler a , b , c
a == 0
Apagar tela
F
início
Flag = 1
Flag == 0 V
V
D < 0
Imprimir x1 e x2
Calcular x1 e x2
Cálculo Numérico usando MatLab
83
A rotina em MATLAB ficaria assim:
Neste exemplo o problema foi resolvido com o uso de while-end e if-else-end
, inclusive aninhando alguns.
Observe que houve alguma modificação após a construção do fluxograma.
Antes da leitura dos coeficientes b e c, foi realizado o teste com o coeficiente a e
somente se a for não nulo a rotina continua a ser executada.
Foi declarada e inicializada uma variável com o nome de flag apenas para
definir se o programa deve ser executado novamente ou se encerrado. A rotina não
Função (sqrt )nativa do MATLAB. Calcula a raiz quadrada do argumento.
Cálculo Numérico usando MatLab
84
é executada apenas se flag for igual a zero. Note que ao final é solicitada a
informação de continuar ou parar. No caso de parar deve ser digitado o número
zero. Qualquer outra resposta o problema continua, visto que o valor digitado é
armazenado exatamente em flag.
Cálculo Numérico usando MatLab
85
9. FUNÇÕES
No MATLAB existem várias funções nativas que podem ser usadas para
cálculos diversos, como sin(x) , cos(x) , sqrt(x) , exp(x) e várias outras, como já foi
citado.
Além disto, é possível a criação de funções próprias do usuário para efetuar algum
tipo de cálculo para o qual não existe função nativa, e cujo uso ocorre da mesma
forma como as que existem no MATLAB.
9.1 ESTRUTURAS DE UMA FUNÇÃO
Uma função é construída no mesmo ambiente em que criamos as rotinas, que
é o editor do MATLAB.
9.1.1 Declaração da função
Toda função deve ser declarada, no editor, na primeira linha. Essa declaração é
elaborada da seguinte forma:
function [argumentos de saída] = nome da função( parâmetros)
A palavra function é obrigatória e a caracteriza como função.
Argumentos de saída é o elemento que referencia algum resultado que for
necessário utilizar no futuro (outra função ou outros cálculos) e que a função
disponibilizará ao final da execução, e devem ser referenciados entre colchetes
quando for mais de um valor.
Segue-se o sinal de igual e nome da função. Esse nome da função é a
forma como ela será referenciada quando da solicitação da execução, e deve ser
sempre sucedido de um par de parênteses (obrigatório).
Parâmetros são os valores que se deseja informar e que serão utilizados
como variáveis na execução. Os parâmetros não são obrigatórios, mas é uma forma
Cálculo Numérico usando MatLab
86
de se enviar dados para a função, além da possibilidade de se proceder à leitura dos
dados no interior da função, como foi realizado nas rotinas.
Pelo que se conclui então é que ao declarar uma função:
Define o arquivo a ser construído como sendo uma função, o que a torna
diferente da rotina.
Estabelece o nome da função.
Define o número de variáveis de entrada e a sua ordem.
Especifica se a função retornará algum valor, quantos são eles e o tipo das
variáveis de saída.
9.1.2 Corpo da função
Uma função, logo após ter sido declarada, podem ser incluídas linhas de
comentários iniciadas pelo símbolo % e tem as mesmas características de quando
foram estudadas as rotinas.
O código do programa a ser executado pode conter cálculos, inicialização de
variáveis, as funções nativas do MATLAB, os operadores lógicos e as expressões
lógicas, além das estruturas de fluxo do programa (if, for, while, além de outros não
mencionados aqui). Devem ser obedecidos os mesmos critérios estabelecidos para
o caso de rotinas.
9.2 SALVANDO E EXECUTANDO UMA FUNÇÃO
O arquivo construído para uma função será salvo com a mesma extensão
usada para as rotinas: .m e é atribuída pelo próprio MATLAB. Também o diretório
onde é salvo, o MATLAB já oferece uma primeira opção, que é a pasta work,
conforme já foi comentado. Nada impede, entretanto, que seja direcionado para
outro local, escolhido pelo programador, desde que sejam tomadas as providências
para que ele tenha a sua localização informada para o MATLAB.
Para executar a função basta fazer referência ao seu nome na janela do
Command Windows, ou dentro de uma rotina ou ainda dentro de uma outra função,
indicando, sempre, os parâmetros de entrada que constam da sua definição.
Cálculo Numérico usando MatLab
87
Pelo que se observa, uma rotina e uma função são muito parecidas. Isto é
verdade. Entretanto algumas diferenças são significativas:
A primeira linha de uma função, a linha de declaração da função, é
obrigatória. Nas rotinas essa primeira linha não é exigida.
Uma função pode fazer receber dados de entrada, através dos parâmetros de
entrada (argumentos) e podem retornar dados para o argumento de saída, enquanto
uma rotina não goza dessas características.
Exemplo:
Elaborar uma rotina que determina o ponto extremo de uma função do segundo
grau, da forma .
Solução:
Uma análise do problema esclarece que:
É solicitado o PONTO extremo da função, o que ocasiona a determinação da
abscissa e da ordenada do ponto. Isto significa que o parâmetro de saída é um par
ordenado.
O valor do coeficiente a não pode ser nulo.
Além disso, é o valor de a que determina se a concavidade da curva está voltada
para cima ou para baixo, indicando se o valor da função é, respectivamente, mínimo
ou máximo.
Finalmente, é sabido que a abscissa do vértice é dado por e a ordenada
por onde representa o discriminante.
Poder-se-ia estabelecer um fluxograma (diagrama de blocos) para o
problema.
A função teria o seguinte aspecto:
Cálculo Numérico usando MatLab
88
Para executar a função poder-se-ia proceder como aparece no Command Windows
abaixo.
Cálculo Numérico usando MatLab
89
Como já foi afirmado, é possível “chamar” uma função através da rotina de
uma primeira função. Para exemplificar este fato, considere o mesmo problema
acima.
Proceda a criação de uma função, que se dará o nome de graf, e que terá
como argumentos de entrada os coeficientes da função do segundo grau e o valor
da abscissa do ponto extremo, que já teria sido calculada na função maxmin.
Esta função teria como trabalho traçar o gráfico da função, considerando
pontos antes e depois do vértice (ponto extremo da função) da parábola.
Construída, esta função teria a forma:
Como se verá, os coeficientes da função do segundo grau foram designados
por a, b e c, e assim foram tratados na função maxmin. São esses valores que
serão passados como parâmetro para a função graf. Nesta função eles serão
tratados por m, n e r, respectivamente, em todos os cálculos que envolverem os
coeficientes.
Não que isto seja obrigatório. Poder-se-ia continuar designando eles por seus
nomes de origem, mas não é obrigatório. Em cada função, as variáveis recebem os
Parâmetros da função. Os primeiros são os coeficientes e o último é o valor da abscissa do vértice.
Cálculo Numérico usando MatLab
90
VALORES e dão a eles a designação própria da função. Este procedimento não
causa nenhum inconveniente ao resultado.
Neste momento, proceda a uma alteração na função maxmin, acrescentando
a “chamada” para a função graf.
Esta alteração daria o seguinte aspecto à função maxmin.
Ao executar, a partir do Command Windows a função maxmin, fornecendo os
coeficientes da função do segundo grau, a função calcula o ponto extremo, informa-
o na janela e solicita a execução da função graf, informando como parâmetros os
mesmos coeficientes que recebeu e um valor calculado no corpo da função maxmin
(p) e que representa o valor da abscissa no ponto extremo.
Executado o programa, ele apresentaria o seguinte resultado:
A única alteração: incluir uma “chamada” para a função graf, informando os parâmetros solicitados: a , b e c, além do valor de p, que é a abscissa do vértice.
Cálculo Numérico usando MatLab
91
REFERÊNCIAS BIBLIOGRÁFICAS
1. Cecílio, Waléria Adriana Gonçalez, Introdução ao Matlab, Apostila – Curso de
Extensão – PUCPR, 2010.
2. HANSELMAN, Duane e LITTLEFIELD, Bruce. Matlab 5 Versão do Estudante,
Ed. Makron Books: São Paulo, 1999.
3. Universidade do Estado do Rio de Janeiro - Programa Prodenge / Sub-Programa
Reenge. Introdução à Solução de Problemas de Engenharia, Apostila de.
Cálculo Numérico usando MatLab
92
10. ZEROS DE FUNÇÕES ALGEBRICAS OU TRANSCENDENTES
Este capítulo apresenta métodos numéricos para resolução de equações
complexas de uma variável. De forma simplificada, queremos encontrar as raízes
reais da equação f(x) = 0, isto é, os valores reais de x que tornam a equação
verdadeira.
Definição:
APLICAÇÃO:
“UM NÚMERO REAL X* É UM ZERO DA FUNÇÃO F(X) OU UMA RAIZ DA EQUAÇÃO
F(X) = 0 SE F(X*)=0.”
Cálculo Numérico usando MatLab
93
Para resolver esse tipo de problema, existem vários tipos de métodos
numéricos que fornecem soluções aproximadas, conforme uma precisão pré-
estabelecida.
Todo o processo de resolução consiste em duas etapas:
1. Determinar o intervalo da reta que contém, de preferência, uma raiz;
2. Processo iterativo de refinamento, para obter aproximações cada vez melhores, a
partir de estimativas anteriores, até que seja atingida a precisão desejada.
10.1 INTERPRETAÇÃO GEOMETRICA E TEOREMA DE BOLZANO.
A ideia é determinar um intervalo [a,b] que contenha pelo menos um zero da
função. Existem duas formas de resolver este problema: o método gráfico e o
método analítico.
10.1.1 MÉTODO GRÁFICO “Consiste em tomar valores para x e calcular os valores de y = f(x), plotando – se os
pares ordenados obtidos em um plano cartesiano.”
Cálculo Numérico usando MatLab
94
Exemplo:
Esboce o gráfico de f(x)=ex+x2-2 e identifique o intervalo que contém a raiz de f(x).
].1,0[ ]1,2[ 2*21
*1 =∈−−=∈∴ IxeIx
Existe outra forma de determinar o intervalo que contém a raiz, dada pela seguinte
sequência:
a) Tomar f(x) = g(x) - h(x). Obter a equação equivalente g(x) = h(x) a partir de
f(x)=0;
b) Esboçar os gráficos de g(x) e h(x) no mesmo plano cartesiano;
c) Localizar os pontos de x, onde as duas curvas se interceptam, pois neste
caso *).(*)(0*)( xhxgxf =⇔=
>>x=linspace(-2,2,30); >>y=e
x+ x2-2; >>plot(x,y), grid
Cálculo Numérico usando MatLab
95
Exemplo:
Encontre o intervalo que contém a raiz de 2)( 2 −+= xexfx
.
].1,0[ ]1,2[ 2*21
*1 =∈−−=∈∴ IxeIx
10.1.2 MÉTODO ANALÍTICO
Às vezes fazer o gráfico de f é extremamente complicado, então quando isso
ocorrer, podemos definir o intervalo de maneira analítica, isto é, aplicar o Teorema
de Bolzano. Este teorema é muito utilizado em algoritmos numéricos, quando
queremos encontrar um intervalo que contenha pelo menos uma raiz de f(x) = 0.
Teorema de Bolzano: Se f(x) é contínua em I = [a , b] e troca de sinais nos
extremos de I então existe pelo menos uma raiz real em I tal que f(a).f(b) < 0.
>>x = linspace(-2,2,30); >>y1 = exp(x); >>y2 = 2 – x 2; >>plot(x,y1,x,y2), grid
Cálculo Numérico usando MatLab
96
Exemplo:
Encontre o intervalo que contém a raiz de 2)( 2 −+= xexfx
, usando o Teorema de
Bolzano.
x f(x) SINAL
-3 7.0498 +
-2 2.1353 +
-1 -0.6321 -
0 -1.0000 -
1 1.7183 +
2 9.3891 +
3 27.0855 +
10.1.3 Exercícios:
1) Com base no teorema de Bolzano e no corolário, verifique se f(x), definida
abaixo, tem raízes no intervalo I=[-10,10]. Obs.: Na letra “a” o intervalo é de [0,10]
a) x
exxf−−= 5)(
b) 39)( 3 +−= xxxf
2) Isole graficamente os zeros das funções usando o processo da g(x)=h(x).
a) xxxf += ln)(
b) xexf x 1
)( −=
c) 2log)( −−= xxxf
>> x=-3:3;
>> y=exp(x)+x.^2-2;
>> [x;y]'
Cálculo Numérico usando MatLab
97
3) Isole analiticamente os zeros das seguintes funções:
a) xxf x 32)( −=
b) tgxxxf −= 2)(
c) x
exxf2cos4)( −=
10.2 PROCESSO ITERATIVO DE REFINAMENTO
Após encontrar o intervalo que contém pelo menos uma raiz, temos como
objetivo, refinar este intervalo até encontrar uma solução tão precisa quanto se
queira. Apresentamos na sequência um algoritmo, que podemos chamar de
Algoritmo Genérico. Este calcula o valor aproximado do zero da função.
Início
Cálculos iniciais
A raiz calculada, tem a precisão desejada?
Dados iniciais
Fazer nova estimativa para a raiz
sim não
Realizar cálculos finais
Apresentar
Fim
Cálculo Numérico usando MatLab
98
Desta forma, podemos constatar que um método iterativo consiste em uma
sequência de passos que se repetem em ciclos. Cada repetição é chamada de
iteração a qual utiliza dados da iteração anterior para atualizar as informações. É
importante ressaltar que o processo iterativo só se encerrará quando o erro na
aproximação seja menor que a precisão pré-estabelecida, isto é, um dos critérios de
parada for satisfeito. Caso contrário o algoritmo entrará em um looping infinito.
10.2.1 CRITÉRIOS DE PARADA
Selecionando uma tolerância 0>ε (valor arbitrário pequeno) podemos gerar uma
sequência de aproximações xk até que uma das condições definida abaixo seja
alcançada.
a) ε<− −1kk xx
b) 0,1 ≠<
− −
k
k
kkx
x
xxε
c) ( ) ε<kxf
10.3 MÉTODO DA BISSECÇÃO
Seja f(x) contínua no intervalo [a , b] e tal que f(a)f(b)<0. O método da
Bissecção, aplica o Teorema de Bolzano, sucessivas vezes, com o objetivo de
reduzir a amplitude do intervalo que contém a raiz até que a precisão pré-
estabelecida seja atingida, isto é, deseja-se reduzir o intervalo [a,b] até que
ε<− −1kk xx.
Cálculo Numérico usando MatLab
99
Interpretação Geométrica
As iterações são como segue:
M
=
=
∈
⇒
>
<
>+
=
=
=
∈
⇒
<
<
>+
=
=
=
∈
⇒
>
<
>+
=
11
20
10*
2
1
0
102
1
00
10*
1
0
01
0
0*
0
0
),(
0)(
0)(
0)(
2
),(
0)(
0)(
0)(
2
),(
0)(
0)(
0)(
2
xx
xx
xxx
xf
xf
xfxx
x
xb
xx
xxx
xf
bf
xfbx
x
bb
xa
bxx
xf
bf
afba
x
CONVERGÊNCIA
É possível provar que o método da Bissecção converge sempre que a função f(x) for
contínua em [a, b], com f(a)·f(b) < 0.
Cálculo Numérico usando MatLab
100
NÚMERO DE ITERAÇÕES
Pode-se saber previamente o número de iterações necessárias para atingir o
resultado desejável, através da fórmula:
log2
log- a) - (b log K
ε>
sendo [a, b] o intervalo inicial e ε a tolerância requerida.
Onde kkk
abab
2
−=−
.
Exemplos:
a) Encontre uma aproximação para o zero da função f(x)= x³ - 9x + 3 em I= [0,1]
e ε = 0,001.
Ite a b 2
abx
+=
f(x) |b-a|< ε
0 0 1 0,5 -1,375 1
1 0 0,5 0,25 0,766 0,5
2 0,25 0,5 0,375 -0,322 0,25
3 0,25 0,375 0,313 0,214 0,125
4 0,313 0,375 0,344 -0,055 0,062
5 0,313 0,344 0,329 0,075 0,031
6 0,329 0,344 0,337 0,005 0,016
7 0,337 0,344 0,341 -0,029 0,008
8 0,337 0,341 0,339 -0,012 0,004
9 0,337 0,339 0,338 -0,003 0,002
10 0,337 0,338 0,338 -0,003 0,001
O zero foi encontrado com a precisão requerida:
Cálculo Numérico usando MatLab
101
• Observe que a amplitude do intervalo gerado é a metade do intervalo
anterior.
b) Encontre uma aproximação para o zero da função f(x)= x – cos(x) em I=
[0,1] e ε = 0,001.
O zero foi encontrado com a precisão requerida:
Ite a b 2
abx
+=
f(x) |b-a|< ε
Desvantagem: A desvantagem do Método da Bissecção é que se você quiser uma
raiz bem aproximada o número de interações será muitas vezes impraticável em
cálculos manuais.
Vantagem: A vantagem do Método da Bissecção é que se você escolher um
intervalo onde há raiz, sempre irá convergir.
O Método da Bissecção é um dos métodos iterativos, usados para se obter zeros
reais de funções. Este, não é o melhor meio de se chegar às raízes de uma
Cálculo Numérico usando MatLab
102
equação, porém seu algoritmo é o mais simples, pois não envolve cálculos
complexos.
Satisfeitas as hipóteses de continuidade de f(x) em [a,b] e de troca de sinal em a e b,
o Método da Bissecção gera uma sequência convergente, ou seja, é sempre
possível obter um intervalo que contém a raiz da equação em estudo, sendo que o
comprimento deste primeiro intervalo final satisfaz a precisão requerida.
EXERCÍCIOS:
1) Calcular a raiz cúbica de 7 é equivalente a determinar o zero da função f(x) =
x3 - 7. Sabe-se que o intervalo [1, 2.5] contém um zero. Determine uma aproximação
para 3 7 usando ε < 0.01.
2) Use o Método da Bissecção para calcular o zero da função
f(x) = x4+2x3-x-1,. Para os cálculos escolha I = [0,1] e a precisão igual a 0.05. Antes
dos cálculos, estime o número de iteração.
Cálculo Numérico usando MatLab
103
10.4 MÉTODO DE NEWTON-RAPHSON
A ideia central no método de Newton-Raphson, também conhecido como
método das tangentes, é a de escolher uma função g, tal que a derivada de g, na
raiz que se está procurando, seja zero. Assim teremos, não só garantia da
convergência quanto convergência muito rápida.
( )k
kkk
xf
xfxx
´
)(1 −=+
No método de Newton-Raphson, a convergência não é linear. A convergência
é muito rápida, é quadrática. Assim, cada novo erro é proporcional ao quadrado do
erro anterior.
Teorema: Se f(a) * f(b) < 0 e f`(x) e f”(x) forem não nulas, e preservarem o sinal em
[a,b], então partindo-se da aproximação inicial, x0 pertence ao intervalo [a,b], tal que
f(x0)*f”(x0) > 0 é possível construir, pelo método de Newton-Raphson uma
seqüência {xk} que converge.
Cálculo Numérico usando MatLab
104
Exemplo: Encontre o zero de y = x - cos(x) com: Tolerância: 10-5 e I=[0,2]
k xk f(xk)
0 0.5 -0.3776
1 0.7552 0.0271
2 0.7391 0.0000
Comentários:
� O Método de Newton-Raphson apresenta uma rápida convergência , o que
representa uma boa maneira para se resolver zeros de função.
� Seu maior ponto negativo é seu alto custo computacional, devido aos
inúmeros cálculos efetuados. Porém, somente assim se obtém uma rápida
convergência.
EXERCÍCIOS:
1) Encontre a raiz, aplicando a cada uma das funções um dos métodos estudados.
(Analise qual o método mais conveniente para cada função.)
a) ( ) xxxf sin2,08,0 −−= 410−=ε
b) ( ) 9221918230 234 −−++= xxxxxf 410−=ε
c) ( ) 1log −= xxxf 410−=ε
d) ( ) xexfx cos
2
−= −
210−=ε [ ]2,1
(Bisseção) Função: a ( ) b ( ) c ( ) d ( )
Cálculo Numérico usando MatLab
105
Ite a b 2
abx
+=
f(x) |b-a|< ε
(Newton) Função: a ( ) b ( ) c ( ) d ( )
Ite xn ( )n
n
nnxf
xfxx
´
)(1 −=+
|xn+1-xn|< ε
Cálculo Numérico usando MatLab
106
2) Encontre a raiz da função utilizando os métodos:
a) Bisseção - Intervalo: [2,3] 610ε −=
Ite a b 2
abx
+=
f(x) |b-a|< ε
Cálculo Numérico usando MatLab
107
b) Newton - xo=2,5 610ε −=
Ite xn ( )n
n
nnxf
xfxx
´
)(1 −=+
|xn+1-xn|< ε
Cálculo Numérico usando MatLab
108
3) Encontre pelo método da bissecção a raiz de )cos(3)( xxxf −= pertencente ao
intervalo (0,2; 0,4) com precisão 1,0=ε (cálculos com 5 casas decimais) .
n 2
nnn
bax
+=
ε<− nn ab
0
1
2
3
4
5
6
7
8
Cálculo Numérico usando MatLab
109
4) Obtenha pelo método de Newton a raíz de xexfx −= −)( próxima de 5,00 =x com
precisão de 310−=ε (cálculos com 5 casas decimais).
n )´(
)()(
n
nnn
xf
xfxx −=ϕ
ε<)( nxf
0
1
2
3
4
5
6
7
8
Cálculo Numérico usando MatLab
110
5) Obtenha a raíz aproximada de xxxf += )ln()( com 1.00 =x e 11 =x , precisão de 210−=ε (cálculos com 5 casas decimais).
6) Obtenha pelo método de Newton a raíz aproximada de xxxxf 65)( 23 +−= com
2,10 =x e precisão de 01,0=ε (cálculos com 5 casas decimais)
itr xn 1+nx |f(xn+1)|< ε
1
2
3
4
itr xk |f(xk)|< ε
1
2
3
4
5
6
7
Cálculo Numérico usando MatLab
111
11. RESOLUÇÃO DE SISTEMAS LINEARES
Definições
Um sistema linear com m equações e n variáveis é escrito usualmente da forma:
Onde
: coeficientes ,
: variáveis
: constantes
A resolução de um sistema linear consiste em obter os valores de ( ),
caso eles existam, que satisfaçam as m equações simultaneamente.
Usando notação matricial, o sistema pode ser assim representado:
Onde
é a matriz dos coeficientes,
é a matriz das variáveis
e
é o vetor constante.
Através de exemplos analisaremos situações em relação ao número de soluções de
um sistema linear.
i) Para a solução é única e .
Cálculo Numérico usando MatLab
112
ii) , neste caso há infinitas soluções representadas por
, com .
iii) Para não existe nenhuma solução.
Os métodos numéricos para resolução de um sistema linear podem ser divididos
em dois grupos distintos: métodos diretos e métodos indiretos.
Métodos diretos são aqueles que, a menos de erros de arredondamento, fornecem a
solução exata do sistema linear, entre eles estão o método de Eliminação de Gauss
e a fatoração LU com pivoteamento parcial.
Os métodos iterativos geram uma sequência de valores a partir de uma
solução inicial . Sob certas condições esta solução converge para a solução do
sistema linear, caso ela exista. O Método de Gauss-Jacobi é iterativo.
11.1 MÉTODO DE ELIMINAÇÃO DE GAUSS
O método de Eliminação de Gauss consiste em transformar o sistema linear
original num sistema linear equivalente com matriz dos coeficientes triangular
superior, pois esses são de resolução imediata. Dizemos que dois sistemas são
equivalentes quando possuem a mesma solução.
Inicialmente iremos considerar a resolução de sistemas triangulares, seja o
sistema linear , onde é triangular superior com elementos da diagonal
diferente de zero:
Da última equação, temos
Cálculo Numérico usando MatLab
113
pode ser obtido da penúltima equação:
e assim sucessivamente obtém-se e finalmente :
Para obter um sistema triangular superior equivalente de um sistema linear original
faz-se uso de operações elementares escolhidas entre:
i) Trocar duas equações;
ii) Multiplicar uma equação por uma constante não nula;
iii) Adicionar um múltiplo de uma equação a uma outra equação;
O método de Eliminação de Gauss usa estas operações elementares para
triangularizar a matriz A.
A eliminação é efetuada por colunas e chamaremos de etapa k do processo a
fase em que se elimina a variável das equações k+1, k+2,..., n.
Usaremos a notação para indicar o coeficiente no final da etapa k, bem
como será o elemento do vetor constante no final da k-ésima etapa.
É importante notar que se na etapa k o coeficiente localizado na
diagonal principal for igual a zero é possível fazer troca de linhas de forma que não
se altere as colunas obtidas nas etapas anteriores à k, deste que este
procedimento será sempre possível.
Seja a matriz aumentada
Cálculo Numérico usando MatLab
114
Etapa 1:
Para eliminar a variável das equações i=2,3,..., n considere , para
i=2,...,n, da equação i subtraímos a primeira equação multiplicada por .
Esses quocientes determinados por são chamados de multiplicadores e é
o pivô da primeira etapa.
Ao final desta etapa teremos a matriz:
Etapa 2:
Os multiplicadores desta etapa serão para i=3,...,n.
A variável é eliminada das equações i=3,...,n da seguinte forma: da equação i
subtraímos a segunda equação multiplicada por .
Ao final teremos a matriz:
Na etapa (n-1) obtém-se :
E o sistema linear é triangular superior e equivalente ao sistema
linear original, ou seja, possuem a mesma solução.
Cálculo Numérico usando MatLab
115
Exemplo 1: Encontrar a solução de .
Etapa 1
Para facilitar utilizaremos para indicar o vetor correspondente a linha i. Nesta
etapa tem-se:
Pivô Multiplicadores Operações
e
e
Portanto,
Etapa 2
Pivô Multiplicadores Operações
Portanto,
Assim, resolver é equivalente a resolver :
Cálculo Numérico usando MatLab
116
A solução deste sistema é o vetor .
Exemplo 2: Encontrar a solução de .
Etapa 1
Pivô Multiplicadores Operações
,
e
,
e
Portanto,
Etapa 2
Neste caso o pivô é zero trocaremos de posição as linhas 2 e 3:
A variável é nula nas terceira e quarta equações, logo a etapa está concluída.
Cálculo Numérico usando MatLab
117
Etapa 3
Pivô Multiplicadores Operações
Para obter a solução do sistema original resolve-se:
Cuja solução é o vetor .
11.2 MÉTODO DE ELIMINAÇÃO DE GAUSS COM PIVOTEAMENTO
PARCIAL
No inicio da etapa k da fase de eliminação de Gauss, escolher para pivô o
elemento de maior módulo entre os coeficientes e trocar as
linhas k e i se for necessário.
Exemplo 1: Encontrar a solução de .
Etapa 1
O pivô é logo permuta-se as linhas 1 e 3.
Cálculo Numérico usando MatLab
118
Pivô Multiplicadores Operações
,
e
,
e
Portanto,
Etapa 2
Pivô Multiplicadores Operações
e
e
Etapa 3
Pivô Multiplicadores Operações
Cálculo Numérico usando MatLab
119
A solução do sistema triangular superior é .
11.3. FATORAÇÃO LU COM ESTRATÉGIA DE PIVOTEAMENTO PARCIAL
Seja o sistema linear . O processo de fatoração deste sistema consiste
em decompor a matriz A dos coeficientes em um produto de dois ou mais fatores e,
em seguida, resolver uma sequência de sistemas lineares que nos conduzirá a
solução do sistema linear original.
Por exemplo, se pudermos realizar a fatoração , o sistema linear
pode ser escrito como . Seja . A solução do sistema linear pode ser
obtida da resolução de dois sistemas:
i)
ii)
No método de fatoração LU a matriz L é triangular inferior cujo elementos da
diagonal principal são iguais a 1 e o restante dos elementos são os multiplicadores
obtidos do método de Eliminação de Gauss e a matriz U é triangular superior que
coincide com a mesma matriz obtida no final da última etapa do Método de
Eliminação de Gauss. No entanto é utilizado o pivoteamento parcial, ou seja, no
inicio da etapa k da fase de eliminação de Gauss, escolher para pivô o elemento de
maior módulo entre os coeficientes e trocar as linhas k e i
se for necessário. Essas permutações efetuadas nas linhas de A devem ser
efetuadas sobre o vetor b também para manter a equivalência entre os sistemas,
para isso será utilizada uma matriz auxiliar , no qual é uma matriz identidade
de ordem n cuja as linhas k e i são trocadas.
Cálculo Numérico usando MatLab
120
Exemplo 1: Obter a solução de .
Usando o processo de Gauss para triangularizar A, tem-se:
Etapa 1:
Pivô Multiplicadores Operações
e
e
Então,
Uma vez que os elementos e são nulos, podemos guardar os
multiplicadores nestas posições, então:
Etapa 2
O Pivô é , então devemos permutar as linhas 2 e 3:
e
Cálculo Numérico usando MatLab
121
A matriz é a identidade de ordem 3 no qual as linhas 2 e 3 foram permutadas
também.
Pivô Multiplicadores Operações
Efetuando a eliminação temos:
Os fatores L e U são:
e
Como houve uma permutação resolvem-se os seguintes sistemas triangulares:
i) , onde .
ii) Ux=y
Cálculo Numérico usando MatLab
122
Exemplo 2: Obter a solução de .
Etapa 1
O Pivô é , então devemos permutar as linhas 1 e 3:
e
Pivô Multiplicadores Operações
,
e
,
e
Etapa 2
O Pivô é , então permutando as linhas 2 e 4:
Cálculo Numérico usando MatLab
123
e
Pivô Multiplicadores Operações
e
e
Etapa 3
Pivô:
Multiplicadores:
Operações:
i)
, onde .
Cálculo Numérico usando MatLab
124
ii) Ux=y
11.4 MÉTODO DE GAUSS-JACOBI
Considere o sistema linear de n equações e n variáveis:
e , i=1,...,n, na primeira equação isola-se , na segunda equação isola-se
e assim sucessivamente:
O método de Gauss-Jacobi consiste em dado , uma aproximação inicial, obter
, através da relação recursiva:
Cálculo Numérico usando MatLab
125
Este processo é interrompido quando esteja suficiente próximo de e
esta distância é dada por .
Aplicando o erro relativo tem-se , dada uma precisão então
é obtido como uma solução aproximada.·.
Exemplo 1: Obter a solução de , sendo
Construindo o processo iterativo:
Tomando k=0 tem-se:
Verificando a precisão:
Cálculo Numérico usando MatLab
126
Portanto: e
Para as próximas iterações tem-se:
K=1
e
K=2
e
K=3
e
Nestas condições a solução aproximada para o sistema é dada por
sabe-se que a solução exata é .
Teorema - Critério das Linhas
O sistema linear gera uma sequência convergente para a solução através do
método de Gauss-Jacobi quando calculados obtém-se
.
Exemplo 1: Dado o sistema linear , verifique se o método
de Gauss-Jacobi converge.
Para a matriz , tem-se:
Cálculo Numérico usando MatLab
127
então ,pelo critério das linhas o método de Gauss-Jacobi
é convergente para este sistema linear.
Exercícios
1. Utilizando o método de eliminação de Gauss resolva os sistemas lineares:
a) Resp.:
b) Resp.:
c)
Resp.:
d)
Resp.:
Cálculo Numérico usando MatLab
128
2. Utilizando o método de eliminação de Gauss resolva os sistemas lineares:
a) Resp.:
b) Resp.:
c)
Resp.:
d)
Resp.:
Cálculo Numérico usando MatLab
129
3. Utilizando fatoração LU com estratégia de pivoteamento parcial obtenha as
soluções dos sistemas lineares:
4.
a)
Resp.: , , e
b)
Resp.: , , e
c)
Resp.: , , e
d)
Cálculo Numérico usando MatLab
130
Resp.: , , e .
5. Obter a solução dos sistemas lineares utilizando o método iterativo de Gauss-
Jacobi:
a) , sendo
Resp.: e 0,015325
b) , sendo
Resp.: e
c) , sendo
Resp.: e
Cálculo Numérico usando MatLab
131
12. INTERPOLAÇÃO POLINOMIAL
Considere um conjunto de pontos (designados por nós da interpolação) da
forma que estão associados aos valores de uma função ,
respectivamente. O objetivo é encontrar um polinômio interpolador de grau n tal que
para . Esse polinômio tem a forma geral
. Como os pontos pertencem à curva de
têm-se as seguintes igualdades:
As incógnitas são os coeficientes . Assim obtemos o sistema linear de
forma matricial:
,
onde a matriz dos coeficientes do sistema é conhecida como Matriz de
Vandermonde.
Por exemplo para quatros nós tem-se um polinômio interpolador de grau 3
( ), como mostra a figura a seguir:
Cálculo Numérico usando MatLab
132
Exemplo: Obter o polinômio interpolador para os pares de pontos indicados na
tabela:
x -
1 0 1 2
y -
1 1 5 17
Solução:
O objetivo é determinar os coeficientes do polinômio
, então seja o sistema:
A solução é dada por , , e , assim
. A curva determinada por contém os pontos dados
como mostra o gráfico:
Cálculo Numérico usando MatLab
133
Exercícios:
1) Obter o polinômio interpolador para os pares de pontos indicados na tabela:
x -
1 0 1 2
y 1 3 3 7
Resp.:
2) Obter o polinômio interpolador para os pares de pontos indicados na tabela:
x -1 0 1 2 3
y -
10
-
10
-
6 20 110
Resp.:
Cálculo Numérico usando MatLab
134
12.1 FORMA DE NEWTON
A forma de Newton que interpola em a é a seguinte:
Para obter o valor dos coeficientes utiliza-se o operador de
diferenças divididas.
Definição de operador de diferenças divididas para um conjunto de nós , onde
:
Ordem
0
Ordem
1
Ordem
2
Ordem
n
Cálculo Numérico usando MatLab
135
Tabela:
x Ordem 0 Ordem 1 Ordem 2
Exemplo: Construir a tabela de diferenças divididas dos nós:
Cálculo Numérico usando MatLab
136
x -
1 0 1 2
y -
1 1 5 17
Solução:
Valores de x:
, , e
Diferenças divididas de ordem 0:
, , e
Diferenças divididas de primeira ordem:
, e
Diferenças divididas de segunda ordem:
e
Diferenças divididas de terceira ordem:
Tabela:
x Ordem
0
Ordem
1
Ordem
2
Cálculo Numérico usando MatLab
137
Exemplo: Construir a tabela de diferenças divididas dos nós:
x -
1
0 1 2 3
y 1 1 0 -
1
Solução:
Valores de x:
, , , e
Diferenças divididas de ordem 0:
, , , e
Diferenças divididas de primeira ordem:
, , e
Diferenças divididas de segunda ordem:
, , e
Diferenças divididas de terceira ordem:
Diferenças divididas de quarta ordem:
Cálculo Numérico usando MatLab
138
Construindo a tabela:
x Ordem
0
Ordem
1
Ordem
2
3
Na forma de Newton utiliza-se as diferenças divididas para obter os valores dos
coeficientes , onde :
Exemplo: Utilize a forma de Newton para obter o polinômio de grau três que interpola
os pontos:
x -
1
0 1 2
y -
1
1 5 17
Cálculo Numérico usando MatLab
139
Solução:
Utilizando a tabela de diferenças divididas:
x Ordem
0
Ordem
1
Ordem
2
Forma de Newton:
Utilizando o Matlab para obter a forma reduzida da expressão anterior:
Portanto o polinômio que interpola os pontos dados é dado por
.
Cálculo Numérico usando MatLab
140
Exemplo: Utilize a forma de Newton para obter o polinômio de grau quadro que
interpola os pontos:
x -
1
0 1 2 3
y 1 1 0 -
1
Utilizando a tabela de diferenças divididas:
x Ordem
0
Ordem
1
Ordem
2
3
Cálculo Numérico usando MatLab
141
Forma de Newton:
Forma reduzida utilizando o Matlab:
Portanto o polinômio que interpola os pontos dados é dado por .
Exercícios:
1) Obter o polinômio interpolador utilizando a forma de Newton para os pares de
pontos indicados na tabela:
x -
1
0 1 2
y 1 3 3 7
Resp.:
2) Obter o polinômio interpolador pela forma de Newton para os pares de pontos
indicados na tabela:
x -1 0 1 2 3
y -
10
-
10
-
6
20 110
Resp.:
Cálculo Numérico usando MatLab
142
3) Obter o polinômio interpolador pela forma de Newton para os pares de pontos
indicados na tabela:
x -
1 0 1 2 3
y 3 5 11 75 395
Resp.:
Cálculo Numérico usando MatLab
143
13. AJUSTE DE FUNÇÕES
O ajuste é uma técnica de aproximação de funções que tem características
diferente da interpolação. (em geral é aplicada em um conjunto de dados
experimentais)
Motivos que levam a usar Ajuste:
1. Devido a erros experimentais nos dados, não faz sentido encontrarmos uma
função que passe exatamente pelos n+1 pontos. Devemos encontrar uma função
que melhor se ajusta aos dados;
2. Para um conjunto de dados muito grande, a solução por interpolação pode
ocupar muita memória ou tempo de processamento.
13.1 MÉTODO DOS MÍNIMOS QUADRADOS
No caso de ajuste de dados, o método dos Mínimos quadrados é utilizado no
cálculo de um conjunto de constantes (coeficientes ou parâmetros) cj, de uma função
f* que aproxima uma função y, desconhecida, da forma:
)()()()()(* 332211 xcxcxcxcxf nnφφφφ ++++= L
As funções nφφφ ,,, 21 L são escolhidas de acordo com a natureza dos
dados experimentais.
Definição: A função f* que melhor se ajusta, no sentido dos mínimos quadrados, é a
função cujo os parâmetros cj são determinados de modo que a soma dos quadrados
dos resíduos seja mínima, isto é,
Cálculo Numérico usando MatLab
144
∑=
−=m
i
ii xfyR1
2))(*(ou
2
1332211 ))]()()()(([∑
=
++++−=m
i
nni xcxcxcxcyR φφφφ L
Nesta forma é mais fácil verificar que R é função dos cj e, portanto, passará por um
mínimo quando as m derivadas parciais se anularem simultaneamente. Estes geram
um sistema de m equações algébricas lineares onde as variáveis são c1, c2, ..., cn.
Estas equações são chamadas de equações normais.
13.2 AJUSTE POLINOMIAL
a) Ajuste a uma reta – Regressão Linear
Ao observar os pontos da figura, sabemos que há uma relação linear entre eles,
neste caso poderemos encontrar a reta que melhor se ajusta aos pontos dados.
‘Este método consiste em encontrar a melhor estimativa da reta r = c1 x +c0 de
modo a produzir o menor desvio possível.
Aplicando o critério de mínimos quadrados encontramos um sistema de duas
equações e duas incógnitas, dado por
Cálculo Numérico usando MatLab
145
=
∑∑
∑∑∑
ii
i
ii
i
xy
y
c
c
xx
xm
2
12
, onde a solução do sistema é
( ) ∑∑∑ ∑ ∑
−
−=
221
ii
iiii
xmx
xymyxc
e m
xcyc
ii∑ ∑−=
10
ou
Caso Geral Linear
Da mesma forma que procedemos com o ajuste a uma reta, podemos
proceder com uma curva do tipo parábola, polinômio de grau n ou uma outro tipo de
curva no qual o ajuste é linear. Devemos frisar que linear se refere ao modo como os
coeficientes c1, c2, ... aparecem e não as funções )(,),(),(),( 321 xxxx nφφφφ L que
podem ser de qualquer forma, como, por exemplo )sen()( ,)( 21 xxex == φφ , etc.
PS: Tal função não é válida para funções do tipo )sen()( ,)( 21 axxaex bx == φφ e
outras, onde os coeficientes desconhecidos não aparecem linearmente.
Equações Normais
=
=+++
=+++
=+++
∑
∑∑
∑
∑∑
iin
ii
ii
nnnn
n
n
iinnnnnn
iinn
iinn
yx
yx
yx
AAA
AAA
AAA
matricialformaNa
yxcAcAcA
yxcAcAcA
yxcAcAcA
)(
)(
)(
c
c
c
.
)(
)(
)(
2
1
n
1
0
21
22221
11211
2211
22222121
11212111
φ
φ
φ
φ
φ
φ
MM
L
MOMM
L
L
L
M
L
L
.
Cálculo Numérico usando MatLab
146
Onde:
)()(1
k
m
k
jkiij xxA ∑=
= φφ;
)(1
ki
m
k
ki xyb φ∑=
=;
m é igual ao número de pontos e
n é igual a quantidade de funções .φ
Caso Geral Polinomial
Para encontrar os coeficientes de um polinômio de grau n que melhor se ajusta a m
pontos resolvemos:
=
∑
∑
∑
∑∑∑∑∑
∑∑∑∑∑
∑∑∑∑
=
=
=
==
+
=
+
=
+
=
=
+
====
====
m
i
i
n
i
i
m
i
i
m
i
i
nm
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
n
i
m
i
i
m
i
i
m
i
i
m
i
i
m
i
n
i
m
i
i
m
i
i
m
i
i
yx
yx
y
c
c
c
xxxxx
xxxxx
xxxxm
1
1
1
1
0
1
2
1
3
1
2
1
1
1
1
1
1
4
1
3
1
2
1
11
3
1
2
1
MM
L
MOMMMM
L
L
Cálculo Numérico usando MatLab
147
Exercícios:
Questão 1. Considere os dados da tabela a seguir
xi 1 2 4 6
fi 10 5 2 1
ajuste os pontos usando a função f* = x
cc 2
1 +.
Questão 2. Observando-se um sinal np osciloscópio, verifica-se que ele
corresponde a superposição de dois efeitos, um osciloscópio e outro crescente.
Nestas condições é possível aproximá-lo por uma função f da família
f(x)=c1x+c2cos(x). Medindo-se alguns valores deste sinal, obteve-se a seguinte
tabela:
x 0 1,5 3 4,5 6
y 1 1,57 2 4,3 7
Resp: f(x)=1,0034 x + 1,0133 cos(x)
Questão 3. A tabela abaixo dá o desempenho de um torno de parafusos em função
de sua idade. Fazer a projeção da produção anual até oito anos.
x (anos) 0.5 1 2 3 4
y (paraf./dia) 2500 2400 2000 1800 1500
Resp.: (5,1202), (6,913), (7,624) e (8,335).
Cálculo Numérico usando MatLab
148
Questão 4. .Encontre um polinômio de grau dois que ajusta os dados tabelados:
x 1 2 4 6
y 10 5 2 1
Resp: f(x)=14,31-5,27x+0,51x2
Cálculo Numérico usando MatLab
149
14. INTEGRAÇÃO NUMÉRICA
MÉTODO DE NEWTON - COTES
VII - INTRODUÇÃO À SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS
A Integração é uma operação matemática indispensável nas ciências exatas e
nas engenharias modernas. Calcular área e volume, velocidade a partir da
aceleração, trabalho da força e do deslocamento além de vários outros fenômenos
físicos, químicos, biológicos, fazem uso da integração.
Em geral, a integração de funções simples pode ser feita analiticamente, mas
muitas funções relevantes são, com freqüência, difíceis ou impossíveis de serem
integradas analiticamente, além do fato de que em certos casos, a função integrando
pode não ser conhecida, o que ocorre em aplicações das ciências e das
engenharias, quando o integrando é um conjunto de pontos.
Na integração numérica, o resultado é obtido através da divisão do intervalo
em n subintervalos do intervalo dado, determinando o resultado parcial para cada
secção e efetuando a soma deles.
Cálculo Numérico usando MatLab
150
Se ( x0 , y0 ) e ( x1 , y1 ) são dois pontos de y = f(x), a integral da expressão
que realiza a interpolação linear, chega-se à expressão:
)y(y
2
hI 101 +=
Onde n
ab
n
xxh 0n −
=−
=
onde I1 é a integral de P1 (x) no intervalo [ x0 , x1 ] e que corresponde,
aproximadamente ao valor da integral de f(x), no intervalo. (Regra do Trapézio)
Procedendo da mesma forma para os demais intervalos, [ x1 , x2 ] , [ x2 , x3 ] ....[xn-1 ,
xn] e somando-se os resultados, obtém-se:
)y2y....2y2y(y2
hI n1n210 +++++= −
Isto pode ser escrito: ∑=
⋅⋅=n
0iii )y(c
2
hI
Tomando-se: 2c....ccce1cc 1n321n0 ======= − ( coeficientes de Cotes )
Exemplos:
1.- Calcular ∫3
1
3 dxln(x)x , pela regra do trapézio (repetida) para um número de 4
subintervalos. ( n = 4 ).
Solução:
Tem-se que a = 1 , b = 3 e 0,5h
4
13
n
abh =⇒
−=
−=
.
Cálculo Numérico usando MatLab
151
Para os cálculos de ∑=
⋅⋅=n
0iii )y(c
2
hI
Com 2c....ccce1cc 1n321n0 ======= − . Por comodidade, para efetuar os
cálculos é possível construir uma tabela, conforme abaixo:
i xi yi ci ci yi
0 1,0 0,0000 1
1 1,5 1,3684 2
2 2,0 5,5452 2
3 2,5 14,3170 2
4 3,0 29,6625 1
∑ ⋅ ii yc =
Desta forma: )6625,29)3170,145452,53684,1(20000,0(
2
5,0)y(c
2
hI
n
0iii ++++=⋅⋅= ∑
=
I = 18,030925
Cálculo Numérico usando MatLab
152
2.- Calcular ∫
+
−2
0
xcos
42x
e
, pela regra do trapézio (repetido) com 5 subintervalos.
Solução:
0,4h5
02
n
abh =⇒
−=
−=
i xi yi ci ci . yi
0 0,0 0,1839 1
1 0,4 0,1817 2
2 0,8 0,2105 2
3 1,2 0,2751 2
4 1,6 0,3837 2
5 2,0 0,5360 1
Portanto:
I = 0,5360)0,3837)0,27510,21052(0,1817(0,1839
2
0,4I +++++=
I = 0,5644
Cálculo Numérico usando MatLab
153
14. EQUAÇÕES DIFERENCIAIS ORDINÁRIAS
MÉTODO DE RUNGE-KUTTA
VII - INTRODUÇÃO À SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ORDINÁRIAS
INTRODUÇÃO
As Equações Diferenciais Ordinárias (EDO) são ferramentas muito
importantes para a modelagem matemática, notadamente aquelas em que o
problema é descrito em termos de taxa de variação. Isto inclui vários fenômenos
físicos, químicos, biológicos entre outros.
Uma EDO de primeira ordem é uma equação da forma: y),f(xy =′ onde y′ é
a derivada da função y(x)y = , e representa a função incógnita da EDO.
A solução analítica de uma EDO é uma família de curvas onde cada elemento
da família representa a função y(x)y = diferencia de outro elemento por um valor
constante. A determinação de um desses elementos é realizada determinando uma
condição que a solução desejada deve satisfazer. Um problema dessa natureza é
chamado de Problema de Valor Inicial (PVI) e é indicado por
00 y)y(x,y),f(xy ==′ .
Para a solução de tal problema, são utilizados métodos que permitem
determinar aproximações ky dos valores da função y(x) nos pontos xk , k = 1 , 2 , 3
, 4 , ......n.
Os pontos xk são igualmente espaçados no intervalo [ x0 , xn ] , onde a função é
contínua. Isto é: xk = xk-1 + h , onde n
xxh 0n −
=.
Um procedimento para determinação da solução é baseado em expandir a
função em série de Taylor. Os métodos baseados puramente nessa expansão
exigem a determinação de derivadas de ordem superior e isso pode ser um
problema quando a ordem considerada é muita elevada. Para fugir deste
Cálculo Numérico usando MatLab
154
inconveniente existe uma classe de métodos que substitui o cálculo das derivadas
pelo cálculo da função em pontos adequados (métodos de Runge-Kutta).
Métodos de Runge-Kutta
Os métodos de Runge-Kutta fornecem valores aproximados da solução da
equação diferencial a partir da expansão da série de Taylor. A vantagem desses
métodos é que o cálculo dos valores das derivadas da função f ( x , y(x) ) nos pontos
(xk , yk) é substituído pelo cálculo da função em pontos convenientemente
escolhidos, produzindo resultados equivalentes.
Runge-Kutta de 2a Ordem - RK2
Este método é baseado na expansão em série de Taylor até o termo de
segunda ordem, ou seja: )y,(xf
!2
h )y,(xfh y y kk
2
kkk1k ′⋅++=+
Esta expressão pode ser substituída por:
( ))y,f(xhy,hf(x)y,f(x2
hyy kkkkkkk1k ⋅+++⋅+=+
Ou, de modo equivalente:
( )
⋅++=
=
+⋅+=+
)Khy,hx(fK
)y,x(fK
)KK2
hyy
1kk2
kk1
21k1k
Cálculo Numérico usando MatLab
155
Exemplo:
Calcular a solução aproximada, pelo RK2, da equação 1y(0);xy
dx
dy=−=
No
ponto x = 0.5, tomando h = 0.1.
Solução
Tem-se que:
( )
⋅++=
=
+⋅+=+
)Khy,h(xfK
)y,(xfK
)KK2
hyy
1kk2
kk1
21k1k
⇒
( )
⋅+⋅+=
⋅−==
+⋅+=+
)K0.1y(0.1)(xK
yx)y,(xfK
)KK0.05yy
1kk2
kkkk1
21k1k
Com as relações acima se pode montar a tabela abaixo:
k xk yk K1 K2 yexato
0 0.0 1,00000 0,00000 -0,10000 1,00000
1 0.1 0,99500 -0,09950 -0,19701 0,99501
2 0.2 0,98017 -0,19603 -0,28817 0,98020
3 0.3 0,95596 -0,28679 -0,37091 0,95600
4 0.4 0,92308 -0,36923 -0,44308 0,92312
5 0.5 0,88246 -0,44123 -0,50300 0,88250
Resposta: y(0.5) 0.8825
Cálculo Numérico usando MatLab
156
Runge-Kutta de 4a Ordem - RK4
De forma análoga ao RK2, considera-se a expansão em série de Taylor até o termo
de 4a ordem e o cálculo das derivadas é substituído como antes, o que fornece
como resultado a expressão:
( )
( )( )( )( )3kk4
2kk3
1kk2
kk1
4321k1k
Khy,hxfK
Kh0.5y,h0.5xfK
Kh0.5y,h0.5xfK
y,xfK
K2K2KK6
hyy
⋅++=
⋅⋅+⋅+=
⋅⋅+⋅+=
=
++++=+
Exemplo
Calcular a solução aproximada, pelo RK4, da equação 1y(0);xy
dx
dy=−=
no
ponto x = 0.4, tomando h = 0.1.
Solução
Levando em consideração as expressões acima e os valores fornecidos no
enunciado do problema, obtém-se:
( )
)K1.0y()1.0x(K
)K0.05y(0.05)x(K
)K0.05y(0.05)x(K
yxK
K2K2KK6
0.1yy
3kk4
2kk3
1kk2
kk1
4321k1k
⋅+⋅+−=
⋅+⋅+−=
⋅+⋅+−=
⋅−=
++++=+
Com estas relações é possível montar a tabela abaixo:
Cálculo Numérico usando MatLab
157
k xk yk K1 K2 K3 K4 yexato
0 0.0 1,00000 0,00000 -0,05000 -
0,04988
-
0,09950 1,00000
1 0.1 0,99501 -0,09950 -0,14851 -
0,14814
-
0,19604 0,99501
2 0.2 0,98020 -0,19604 -0,24260 -
0,24202
-
0,28680 0,98020
3 0.3 0,95600 -0,28680 -0,32958 -
0,32883
-
0,36925 0,95600
4 0.4 0,92312 -0,36925 -0,40709 -
0,40624
-
0,44125 0,92312
Resposta: y(0.4) 0,92312
EXERCÍCIO:
Considere a equação diferencial 0.5y(1);
y
1x
dx
dy=+=
. Estime y(2)
considerando h = 0.2. Resolva o problema pelo método RK2 e RK4.