Logo Passei Direto
Buscar

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

C�lculo Num�rico/apostilamatlab.pdf
 
 
 
 
 
 
 
 
 
 
 
 
 
APOSTILA 
 
MATLAB 
 
 
 
 
 
 
 
 
 
1 INTRODUÇÃO 1 
2 EXEMPLOS SIMPLES 1 
3 CARACTERÍSTICAS BÁSICAS 4 
3.1 Área de Trabalho do MATLAB 4 
3.2 Formato dos Números 5 
3.3 Variáveis 5 
3.4 Comentários e Pontuações 6 
3.5 Operadores Relacionais 8 
4 NÚMEROS COMPLEXOS 8 
5 FUNÇÕES MATEMÁTICAS 9 
6 GERENCIAMENTO DE ARQUIVOS 13 
6.1 Arquivos Script (M-files) 13 
7 CONSTRUÇÃO DE VETORES 17 
7.1 ENDEREÇAMENTO DE VETORES 19 
8 CONTROLES DE FLUXO NO MATLAB 21 
8.1 Loops for 21 
8.2 Loops while 22 
8.3 Estruturas if-else-end 23 
9 MATRIZES 25 
9.1 Operações Escalares com Matrizes no MatLab 25 
9.2 Operações entre Matrizes no MatLab 26 
10 MANIPULAÇÃO DE GRÁFICOS 28 
10.1 Estilo de Linhas e Cores: 33 
11 EXEMPLOS DE APLICAÇÃO DE VETORES NA VISUALIZAÇÃO DE 
SINAIS REPRESENTADOS NO DOMÍNIO DO TEMPO 34 
 i
 
1 INTRODUÇÃO 
 
O MATLAB é uma ferramenta software que pode funcionar como uma simples 
calculadora ou até como uma linguagem de programação científica (fortran, C, etc.) 
para soluções de complicadas expressões algébricas. Entretanto, o MATLAB 
apresenta diversas vantagens em relação as calculadoras e linguagens de 
programação: simplicidade e uma interface gráfica bastante completa para 
visualização e análise dos resultados. 
 
 
2 EXEMPLOS SIMPLES 
 
Os exemplos aqui apresentados tem o objetivo de demonstrar alguns tipos de 
problemas que podem ser resolvidos utilizando o Matlab. 
 
 Como primeiro exemplo tem-se a utilização do Matlab como uma calculadora. 
Os comandos apresentados abaixo devem ser digitados diretamente no prompt (>>) do 
Matlab. O símbolo Í significa apertar a tecla Enter. 
 
 
>> 3+5+2 Í 
ans = 
 10 
 
 Neste exemplo foram digitados três números intercalados pelo símbolo +. Esta 
expressão para o Matlab significa a soma destes três números. Ao apertar a tecla Enter 
(Í) é apresentado o resultado desta operação que é 10. As letras ans significa 
answer, ou seja, resposta. 
 O próximo exemplo mostra a capacidade de atribuir um valor a uma variável 
e realizar operações com estas variáveis. 
>> a = 5 Í 
a = 
 5 
>> b = 33.50 Í 
b = 
 33.5000 
>> a + b Í 
 1
ans 
 38.5000 
 
 Observe que neste exemplo foram atribuídos valores para as variáveis a e b e 
em seguida é feita uma operação somando os dois valores. 
 Um comando interessante de apresentar neste momento é o who. Ao digitar 
este comando no prompt do Matlab e pressionar o Enter são apresentadas as variáveis 
utilizadas até o momento. 
 
 O próximo exemplo fará a visualização da função 
 ( )y A sin x= +. φ 
 
 A seguir estão os comandos para apresentar o gráfico desta função com 
A=1 e φ =phi=0 . Estes comandos devem ser digitados diretamente no prompt do 
Matlab. 
 
 
>>A=1; Í 
>>phi = 0; Í 
>> x = 0:360; Í 
>> y = A*sin(2*pi*x/360+phi); Í 
>> plot(y,'k');grid on Í 
>>xlabel(‘Valores de x em graus’) Í 
>>ylabel(‘y’) Í 
>>title(‘Figura 1 : sin(2*pi*x/360)’) Í 
 
 
 O resultado destes comandos é a plotagem de um ciclo do seno como mostrado 
na figura 1. Observe a necessidade da divisão por 360 para que seja possivel o 
aparecimento de um ciclo completo. 
 
 
 
Exercício : Plote um ciclo do seno como mostrado na figura 1.1 quando : 
 
i) A = 2 e φ = phi = 0. 
 
 Use os comandos : 
 
>>A=2; Í 
>>phi = 0; Í 
>> x = 0:360; Í 
>> z = A*sin(2*pi*x/360+phi); Í 
>> plot(z,'k-');grid on Í 
 2
 
ii) A=2 e φ=phi=2*pi* 45/360. 
 
 Use os comandos : 
 
>>A=2; Í 
>>phi = 2*pi*45/360; 
>> x = 0:360; Í 
>> v = A*sin(2*pi*x/360+phi); Í 
>> plot(v,'k');grid on Í 
 
iii) Finalmente use o comando : 
 
>> plot(x,y,‘k-.’,x, z,‘b-o’,x, v,‘r+’); grid on Í 
 
 
 
 O MATLAB oferece as seguintes operações aritméticas básicas : 
 
 
Tabela 1 : Operações Aritméticas Básicas 
Operação Símbolo Exemplos 
adição, a + b + 8+3 
subtração, a − b − 28−15 
multiplicação, a.b ∗ 4.15∗8.10 
divisão, a÷b / ou \ 64/5 ; 67\9 
power, ab ^ 5^2 
 
 As expressões são executadas da esquerda para a direita com a seguinte ordem 
de precedência: operação de potência, seguida das operações de multiplicação e 
divisão, que por sua vez são seguidas pelas operações de adição e subtração. 
Parênteses podem ser usados para alterar esta ordem de precedências, onde as 
operações são executadas dos parênteses mais internos para os mais externos. 
 
 
 3
 
 Figura 1 - Plotagem de um seno
 
3 CARACTERÍSTICAS BÁSICAS 
 
O MATLAB é uma ferramenta software que tem por característica básica a 
simplicidade de utilização e uma poderosa interface gráfica. Como qualquer software 
ou linguagem de programação é necessário haver uma adaptação à ferramenta. 
 
3.1 Área de Trabalho do MATLAB 
 
A área de trabalho do MATLAB é onde ficam residentes os diversos comandos e 
valores de quaisquer variáveis que foram digitados na janela de comandos. Como 
aqueles comandos e variáveis estão residentes na área de trabalho do MATLAB, 
podem ser invocados sempre que for preciso ou desejado. Por exemplo, se quiser 
verificar o valor da variável a basta que se entre com o nome desta variável no 
prompt. 
 
 
 
>> a Í 
a = 
 5 
 
 
 
 Como já foi visto, se você não consegue lembrar das variáveis, pode-se obter 
uma lista de todas as variáveis usando-se o comando who 
 4
 
 
 
>>who Í 
 
Your variables are : 
 
a b x A phi 
ans y z v 
 
 
 
3.2 Formato dos Números 
 
Como default, se um resultado é inteiro, o MATLAB mostra o número como inteiro. 
Igualmente, quando o resultado é real, o MATLAB mostra o número com 4 dígitos a 
direita do ponto decimal. Se os dígitos do resultado estiverem fora desta faixa, o 
MATLAB mostra o resultado usando a notação científica como numa calculadora 
científica. Este default pode, entretanto, ser modificado usando-se o Numeric Format 
da pasta general na linha Preferences do ítem Files na barra de menus. 
 
 
Exercício : Usando-se a variável b usado anteriormente, verifique a tabela de 
formatos numéricos abaixo : 
 
 
Tabela 2 : Formatos Numéricos 
Comando 
MATLAB 
b Comentários 
format long 33.50000000000000 16 dígitos 
format short e 33.500e+01 5 dígitos mais expoente 
format long e 33.50000000000000 e +01 16 dígitos mais expoente 
format hex 4040c00000000000 hexadecimal 
format bank 33.50 2 dígitos decimais 
format + + positivo, negativo ou zero 
format rat 67/2 racional 
format short 33.5000 4 dígitos decimais (formato 
default) 
 
 
 
3.3 Variáveis 
 
Os nomes das variáveis devem consistir de uma única palavra, conforme as três regras 
abaixo : 
 
 5
Tabela 3 : Regras de Construção de Variáveis 
Regras de Construção das Variáveis Comentários/Exemplos 
Variáveis em letras minúsculas e maísculas 
são diferentes mesmo que consistam das 
mesmas letras 
 
Items, items, itEms e ITEMS são 
variáveis diferentes entre si no MATLAB 
As variáveis podem consistir de até 19 
letras 
 
holnmbjkitkklwenohu 
As variáveis devem começar com alguma 
letra, podendo ser seguido por quaisquer 
letras, dígitos ou subescrito. Caracteres de 
pontuação não podem ser utilizados. 
how_about 
x512 
a_b_c_d 
 
 
 Em adição às regras acima para formação das variáveis, as seguintes variáveis 
são especiais no MATLAB : ans, pi, eps, flops, inf, NaN, i, j, nargin, nargout, 
realmin e realmax 
 
Tabela 4 : Variáveis Especiais 
Variáveis Especiais Significado 
ans Nome “default” da variável usado para resultados 
 
pi Constante igual à razão da circunferência de um círculo
para o seu 
diâmetro 
 
eps O menor número tal que quando adicionado com um outro resulta 
em um número diferente 
 
flops Conta o número de operações em ponto- flutuante 
 
inf Indica um número infinito, p.e., 1/0 
 
NaN Indica que não é um número, p. e., 0/0 
 
i (e) j i=j= -1 
 
nargin Número de argumentos de entrada usados em uma função 
 
nargout Número de argumentos de saída usados em uma função 
 
realmin O menor número real positivo utilizável 
 
realmax O maior número real positivo utilizável 
 
 
3.4 Comentários e Pontuações 
 
 6
 Todo e qualquer texto depois do símbolo de porcentagem (%), é tomado como 
sendo um comentário : 
 
 
>>n_macacos=10 % Número de macacos que vivem no bosque Í 
 
n_macacos= 
 
 10 
 
 
 
 
 Vários comandos podem ser colocados em uma linha se os mesmos forem 
separados por virgula ou ponto e vírgula : 
 
 
 
 
 
>>n_macacos=10, n_laranjas=20, n_uvas=1000; n_bananas=100 Í 
 
n_macacos= 
 
 10 
 
n_laranjas= 
 
 20 
 
n_bananas= 
 
 100 
 
 
 Observe que quando é utilizado ponto e vírgula o MATLAB não mostra o 
resultado. No exemplo acima, o valor atribuído à variável n_uvas não foi mostrado 
por causa do ponto e vírgula que foi utilizado. 
 
 
Observe agora o efeito dos três pontos (...) : 
 
 
 
>>clientes=10; Í 
 
>>n_uvas_por_cliente=n_uvas/... Í 
 
clientes Í 
 7
 
>>n_uvas_por_cliente= 
 
 100 
 
 
 
 
 Assim, os três pontos (...) indica ao MATLAB continuação da expressão 
matemática na próxima linha. 
 
3.5 Operadores Relacionais 
Os operadores relacionais do Matlab incluem todas as comparações 
comuns e são apresentados na tabela 5. 
 
 
Tabela 5: Operadores relacionais 
Operador Descrição
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
 == Igual a
~= Diferente de 
4 Números Complexos 
 
Os números complexos podem ser representados no MATLAB de diversas maneiras. 
Alguns exemplos são mostrados a seguir : 
 
 
>>x=1-4i % a letra “i” significa ou indica a parte imaginária Í 
 
x= 
 1.000 - 4.000i 
 
>>x=1-4j % a letra “j” também pode ser usada para indicar a parte imaginária 
Í 
 
x= 
 1.000 - 4.000i 
 
 
 
Identidade de Euler : relaciona a forma polar de um número complexo com a sua 
forma retangular 
 
 8
 
M M e a +
M = a b
= theta = tan b / a)
a = M cos
b = M sin
j
2 2
-1
∠ ≡ ⋅ =
+
⋅
⋅
θ
θ
θ
θ
θ
(
bi
 
 
 No MATLAB, a conversão entre as formas polar e retangular de um número 
complexo utiliza as seguintes funções : real, imag, abs e angle. 
 
 
>>x Í 
 
x= 
 1.000 - 4.000i 
 
>>M=abs(x) Í 
 
M= 
 4.1231 
 
>>theta=angle(x)*180/pi Í 
 
theta=-14.0362 
 
>>a=real(x) Í 
 
a= 
 1 
 
>>b=imag(x) Í 
 
b= 
 -4 
 
 
5 Funções Matemáticas 
 
Na tabela abaixo tem-se uma lista parcial das funções comuns que o MATLAB 
suporta. 
 
 
Tabela 6 : Funções Comuns 
abs(x) 
acos(x) 
acosh(x) 
angle(x) 
Valor absoluto ou magnitude de um número complexo 
Inverso do coseno 
Inverso do coseno hiperbólico 
Ângulo de um número complexo 
 9
asin(x) 
asinh(x) 
atan(x) 
atanh(x) 
conj(x) 
cos(x) 
cosh(x) 
exp(x) 
fix(x) 
floor(x) 
gcd(x,y) 
imag(x) 
lcm(x) 
log(x) 
log10(x) 
real(x) 
rem(x,y) 
round(x) 
sign(x) 
sin(x) 
sinh(x) 
sqrt(x) 
tan(x) 
tanh(x) 
Inverso do seno 
Inverso do seno hiperbólico 
Inverso da tangente 
Inverso da tangente hiperbólico 
Conjugado complexo 
Coseno 
Coseno hiperbólico 
Exponencial : ex 
Arredondamento em direção ao zero 
Arredondamento em direção ao menos infinito 
Máximo divisor comum dos inteiros x e y 
Parte imaginária de um número complexo 
Mínimo múltiplo comum dos inteiros x e y 
Logarítmo natural 
Logarítmo comum 
Parte real de um número complexo 
Resto da divisão de x/y 
Arredondamento para o inteiro mais próximo 
Função signum 
Seno 
Seno hiperbólico 
Raíz quadrada 
Tangente 
Tangente hiperbólico 
 Uma função muito útil no estudo de princípios de comunicações, é a função 
retangular definida abaixo : 
 
 ⎩⎨
⎧
≤−
≤=
 ) 2 t < ( 1
) t < (0 1
f(t) ππ
π
 
 No MATLAB, pode-se visualizar esta função a partir da função sign(x). Para 
um melhor entendimento, inicialmente é visualizado a função -sign(t) no intervalo 
-π ≤ t ≤ π . 
 
 
 
>>t=-pi:2*pi/100:pi; % Cria-se o vetor t com 100 elementos em Í 
>> % incrementos de 2*pi/100 Í 
>>y=-sign(t); 
>>plot(t,y,‘g+’); grid on Í 
>>title(‘Figura 2 : Função -sign(t)’) Í 
>>xlabel(‘t’) Í 
>>ylabel(‘-sign(t)’) Í 
 
 
 
 
A figura 2 mostra a plotagem da função –sign(t), no intervalo -π ≤ t ≤ π. 
 10
 
 
 Figura 2 – Função –sign(t), no intervalo -π ≤ t ≤ π. 
 
 Comparando-se a curva obtida da função -sign(t) com a definição da função 
retangular f(t), conclui-se que f(t) é a função -sign(t) deslocada de π, i.e. : 
 
 f(t) = -sign(t - ), para 0 < t < 2π π 
 
 Portanto, os seguintes comandos são suficientes para reproduzir a função 
retangular, f(t): 
 
 
 
>>t=0:2*pi/100:2pi; % Cria-se o vetor t com 100 elementos em Í 
>> % incrementos de 2*pi/100 Í 
>>y=-sign(t-pi); Í 
>>plot(t,y,‘g+’); grid on Í 
>>title(‘Figura 3 : Função retangular f(t)’) Í 
>>xlabel(‘t’) Í 
>>ylabel(‘f(t)’) Í 
 
 
Obtém-se o resultado mostrado abaixo (figura 3). 
 
 11
 
 Figura 3 - Função retangular deslocada 
 12
6 Gerenciamento de Arquivos 
 
O MATLAB possui uma série de comandos para gerenciamento de arquivos, tais 
como listar os nomes de arquivos, vizualizar, deletar, etc. Na tabela abaixo tem-se um 
resumo dos principais comandos : 
 
Tabela 7 : Comandos para Gerenciamento de Arquivos 
cd 
p=cd 
cd temp 
cd .. 
chdir 
chdir path 
delete test 
dir 
ls 
matlabroot 
 
path 
pwd 
type test 
what 
which test 
Mostra o diretório de trabalho atual ou corrente 
Retorna para a variável p o diretório de trabalho corrente 
Muda para o diretório temp 
Muda para o diretório um nível acima 
O mesmo que cd 
O mesmo que cd temp 
deleta o arquivo test.m 
Lista todos os arquivos do diretório de trabalho presente 
Faz o mesmo que o comando dir 
Retorna o caminho do diretório onde se encontra o programa 
MATLAB executável 
Visualiza todos os caminhos de diretório do MATLAB 
O mesmo que o comando cd 
Visualiza o arquivo M-file test.m na janela de comandos 
Retorna uma lista de todos os M-files do diretório corrente 
 Visualiza o caminho do diretório do arquivo test.m 
 
 
 
6.1 Arquivos Script (M-files) 
 
 Para resolver problemas simples, é cômodo e eficiente utilizar o MATLAB 
como se fosse uma calculadora, entrando-se com os comandos diretamente no prompt. 
Entretanto, a medida que o número de comandos aumenta, ou quando se deseja mudar 
o valor de uma ou mais variáveis e executar novamente os comandos, o uso do 
MATLAB simplesmente como calculadora torna-se ineficiente e tedioso. Nestes 
casos, o melhor é utilizar o MATLAB como uma linguagem de programação de alto 
nível, isto é, escrever um arquivo “script” ou M-files. Os M-files são os programas 
fontes do MATLAB e levam a extensão .m , por exemplo, exemplo1.m. 
 
 Para escrever um programa no MATLAB, escolha File na barra de menu. 
Dentro do menu File escolha New e selecione M-file, como mostrado na figura 4. 
Abre-se, então, um editor de textos, onde pode-se escrever os comandos do 
MATLAB. Escreva, por exemplo, o programa abaixo : 
 
 
 
 
 
%===================================================== 
 13
% Exemplo de programação no MATLAB 
% Este exemplo plota uma
função seno nas sequintes 
% condições: 
% sen(x) 
% 2*sen(x) 
% 2*sen(x+45) 
% 2*sen(x-90) 
% 2*sen(2*x) 
%============================================== 
 
% 
x=0:360; 
% 
% Seno com amplitude A=1 e defasagem phi=0 graus 
A=1; 
phi=0; 
y=A*sin(2*pi*x/360+2*pi*phi/360); 
 
% Seno com amplitude A=2 e defasagem phi=0 graus 
A=2; 
phi=0; 
z=A*sin(2*pi*x/360+2*pi*phi/360); 
 
% Seno com amplitude A=2 e defasagem phi=45 graus 
A=2; 
phi=45; 
v=A*sin(2*pi*x/360+2*pi*phi/360); 
 
% Seno com amplitude A= 2 e defasagem phi=-90 graus 
A=2; 
phi=-90; 
w=A*sin(2*pi*x/360+2*pi*phi/360); 
 
% Seno com amplitude A= 2 e defasagem phi=0 graus 
A=2; 
phi=0; 
u=A*sin(2*pi*2*x/360+2*pi*phi/360); 
 
% Plotagem do resultado 
plot(x,y,'k-',x,z,'k--',x,v,'k-.',x,w,'k.',x,u, 'ko') 
grid 
xlabel('Valores de x em graus') 
ylabel('y,z,v,w e u') 
title('Estudo de defasagem e amplitude de um seno') 
legend('sen(x)','2*sen(x)','2*sen(x+45)','2*sen(x-90)', '2*sen(2*x)') 
 
 
 
 Uma vez escrito o programa, entre no menu File da janela do editor de textos 
e escollha a opção Save as... Nesta opção do menu, salve o programa como prog1.m 
 14
no seu diretório de trabalho. Em seguida, feche a janela do editor de textos, o que faz 
com que volte à janela de comandos do MATLAB. Na janela de comandos, use o 
comando cd para ir ao diretório onde o programa prog1.m foi salvo. Em seguida, 
digite : 
 
 
>>prog1 Í 
 
O gráfico mostrado na figura 5 é obtido. 
 
Figura 4. Procedimento para começar um novo M-file 
 
 
 
 
 15
Figura 5 - Senos deslocados 
 
 
 
Funções M-files :
 
Por causa da grande utilidade dos M-files, o MATLAB possui diversas funções que 
tornam os M-files ainda mais interessantes. Estas funções estão listadas na tabela 8 : 
 
 
Tabela 8 : Funções M-files 
echo 
input 
pause 
 
pause(n) 
disp(ans) 
waitforbottonpress 
 
keyboard 
Ecoa cada um dos comandos do M-file na janela de comandos. 
Permite entrada de dados durante a execução do programa via teclado.
Faz uma pausa na execução do programa até que uma tecla qualquer 
seja pressionada. 
Faz uma pausa de n segundos na execução do programa 
Visualiza os resultados sem mostrar os nomes das variáveis 
Faz uma pausa até que uma tecla do “mouse” ou do teclado seja 
pressionada. 
Passa o controle temporariamente para o teclado (“Type return to 
quit”) 
 
 
Como exemplo, escreva o seguinte programa (M-file) : 
 
 
 
% Exemplo de utilização da função M-file “input” 
%========================================= 
% Programa para traçar a curva : 
% 
% y=A.sin(x+phi), 
% 
% sendo que os valores de x [rad] ; A e phi [graus] devem ser 
% entrados via teclado durante a execução do programa 
% 
x=input(‘Entre com o vetor x [rad]> ’); 
A=input(‘Entre com o valor de A> ’); 
phi=input(‘Entre com o valor de phi [graus]> ’); 
% 
y=A*sin(x+2*pi*phi/360); 
plot(x,y,‘r’); grid on 
title(‘Exemplo de utilização da função “input”’) 
xlabel(‘x em rad/s’) 
ylabel(‘y=A.sin(x+phi)’) 
 
 
 
 16
7 CONSTRUÇÃO DE VETORES 
 
 
Nas construções das funções implementadas até agora, utilizou-se da construção de 
vetores. Agora, mostrar-se-á algumas outras formas de manipular vetores no 
MATLAB. Na tabela 8, tem-se um resumo das diversas formas de se construir um 
vetor no MatLab. 
 
Tabela 9. Construção de Vetores 
x=[2 2*pi sqrt(2) 2-3j] Cria um vetor x contendo os elementos especificados 
x=primero : último Cria um vetor x começando com o valor primeiro, 
incrementando-se de 1(um) em 1(um) até atingir o 
valor último ou o valor mais próximo possível de 
último 
x=primeiro:incremento:último Cria um vetor x começando com o valor primeiro, 
incrementando-se do valor incremento até atingir o 
valor último ou o valor mais próximo possível de 
último 
x=linspace(primeiro, último, n) Cria um vetor x começando com o valor primeiro e 
terminado-se no valor último, contendo n elementos 
x=logspace(primeiro, último, n) Cria um vetor com os elementos espaçado 
logaritmicamente, começando-se com o valor 10primeiro 
e terminando-se no valor 10último, contendo n elementos
 
 
 
 
Exemplos : 
 
i) Uso da construção de vetor : x=[2 2*pi sqrt(2) 2-3j] 
 
 
 
>> x=[8 6 8.10 5-6j] Í 
 
x= 
 
 8.0000 6.0000 8.1000 5.0000-6.0000i 
 
 
 
 
ii) Uso da construção de vetor : x=primero : último 
 
 
 
>> x=1:10.5 Í 
 
 17
x= 
 
 1 2 3 4 5 6 7 8 9 10 
 
 
 
iii) Uso da construção de vetor : x=primeiro:incremento:último 
 
 
 
>> x=1:0.5:10.5 Í 
 
x = 
 
 Columns 1 through 7 
 
 1.000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000 
 
 Columns 8 through 14 
 
 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 
 
 Columns 15 through 20 
 
 8.0000 8.5000 9.0000 9.5000 10.0000 10.5000 
 
 
 
iv) Uso da construção de vetor : x=linspace(primeiro, último, n) 
 
 
 
>> x=linspace(1,10.5,5) Í 
 
x= 
 
 1.0000 3.3750 5.7500 8.1250 10.5000 
 
 
 
 
v) Uso da construção de vetor : x=logspace(primeiro, último, n) 
 
 
 
>> x=logspace(0,2,5) Í 
 
x= 
 
 18
 1.0000 3.1623 10.0000 31.6228 100.00 
 
 
 
7.1 ENDEREÇAMENTO DE VETORES 
 
 
Seja : 
 
 
>> x=linspace(0,360,10) Í 
 
x= 
 
 0 40 80 120 160 200 240 280 320 360 
 
>> y=sin(2*pi*x/360) Í 
 
y= 
 
 Columns 1 through 7 
 
 0 0.6428 0.9848 0.8660 0.3420 -0.3420 -0.8660 
 
 Columns 1 through 10 
 
 -0.9848 -0.6428 0.0000 
 
 
 
 No exemplo acima, os vetores de entrada x e de saída y possuem 11 elementos 
cada um. No MatLab, cada um dos elementos de um vetor podem ser acessados 
através de seu índice que identifica cada uma das colunas. Por exemplo : 
 
 
 
>> x(3) % Acessa o terceiro elemento de x Í 
 
ans = 
 
 80 
 
>> x(5) % Acessa o quinto elemento de x Í 
 
ans = 
 
 160 
 
 19
 
 
 O MatLab também permite o acesso em blocos dos elementos de um vetor, 
como ilustrado nos exemplos a seguir : 
 
 
 
>> x(1:5) Í 
 
ans = 
 
 0 40 80 120 160 
 
 
 
 Neste exemplo, a expressão entre parêntesis “ 1:5 ” , diz para acessar os 
elementos de 1 a 5 do vetor x. 
 
 
 
>> x(2:2:8) Í 
 
 ans = 
 
 40 120 200 280 
 
 
 
 A expressão entre parêntesis no comando acima, “ 2:2:8” , diz para que acesse 
os elementos do vetor x, começando-se do 2o. elemento e, a partir deste, contando-se 
de 2 em 2 até atingir o 8o. elemento. 
 
 
 
>> x(2:2:7) Í 
 
 ans = 
 
 40 120 200 
 
 
 
 Este exemplo é igual ao anterior, mas como depois do 6o. elemento vem o 8o. 
elemento (pois a contagem é feita de 2 em 2), o 7o. elemento não é acessado. 
 
 
 
 
>> y(10:-2:1) Í 
 20
 
 ans = 
 
 0.0000 -0.9848 -0.3420 0.8660 0.6428 
 
 
 
 A expressão entre parêntesis no comando, “ 10:-2:1” , diz para que acesse os 
elementos do vetor y, começando-se do 10o. elemento e, a partir deste, contando-se de 
2 em 2 no sentido decrescente até atingir o 1o. elemento. 
 
 
 
>> y([8 5 10 1]) Í 
 
 ans = 
 
 -0.9848 0.3420 0.0000 0 
 
 
 Os elementos do vetor y são acessados na ordem indicada pelo vetor de 
índices [8 5 10 1], isto é : y(8), y(5), y(10) e y(1). 
 
 
 
 
8 Controles de Fluxo no MatLab 
8.1 Loops for 
 
Os loops for permitem que um conjunto de comandos seja repetido por um número
de 
vezes fixo e pré-definido. A forma geral do loop for é : 
 
 
 
for x=n1:n2 
 comandos 
end 
 
 
Exemplo 1 : O vetor x=[0 36 72 108 144 180 216 252 288 324] pode ser 
construído com as seguintes instruções : 
 
 
 
>> x(1)=0; Í 
>> for n=2:10 Í 
 x(n)=x(n-1)+36; Í 
 21
end Í 
>> x Í 
 
x = 
 
 0 36 72 108 144 180 216 252 288 324 
 
 
 
Isto é, a primeira instrução diz : para n igual a 2 até 10, execute todas os comandos até 
a instrução de end. No primeiro ciclo do for, n=2, no segundo n=3 a assim por diante, 
até n=10. Depois do ciclo para n=10, o loop for termina e os comandos após a 
instrução end são executados, como é o caso da apresentação dos resultados em x. 
 
 
Exemplo 2 : Plote 360 pontos de um período da função y=sen(2*π*x/360) mostrado 
na figura 1 usando o loop for. 
 
 
>>for x=1:360 Í 
 y(x)=sin(2*pi*x/360); Í 
end Í 
>>plot(y) Í 
 
 
 
8.2 Loops while 
 
Ao contrário do loop for, que executa um conjunto de comandos um número fixo de 
vezes, o loop while executa um conjunto de comandos um número indefinido de 
vezes. A forma geral do loop while é : 
 
 
 while expressão 
 Comandos 
end 
 
 
 
 
 
 
 Os comandos entre as instruções while e end são executadas enquanto todos os 
elementos na expressão forem verdadeiras. 
 
Exemplo : Construa o vetor y = [64 32 16 4 2 1] , usando o loop while 
 
 
 22
 
>>eps=128; Í 
>>n=0; Í 
>>while eps>1 Í 
 eps=eps/2; Í 
 n=n+1; Í 
 y(n)=eps; Í 
end Í 
>>y Í 
 
 
 
8.3 Estruturas if-else-end 
 
Em diversas situações, as seqüências de comandos tem de ser executadas 
condicionalmente, com base em um teste relacional. Isto pode ser resolvido por meio 
de alguma variação da estrutura if-else-end. A estrutura if-else-end mais simples é : 
 
 
if expressão 
 Comandos 
end 
 
 
 
 
 
 
Os comandos entre as instruções if e end são executados se todos os elementos na 
expressão forem Verdadeiros (diferentes de zero). 
 
 
Exemplo 1 : 
 
 
 
» custo=5; 
» bananas=10; 
» if bananas>5 
 custo=0.1*custo; 
end 
» custo 
 
custo = 
 
 0.5000 
 
 
No exemplo acima, a expressão bananas > 5 é verdadeira, assim o comando : 
 
 23
custo=0.1* custo 
 
foi executado, de modo que o novo valor de custo é igual a 0.5. 
 
 
Exemplo 2 : 
 
 
custo=5; 
» bananas=5; 
» if bananas>5 
 custo=0.1*custo; 
end 
» custo 
 
custo = 
 
 5 
 
 
Neste exemplo, a expressão bananas > 5 é falsa, assim o comando : 
 
custo=0.1* custo 
 
não foi executado. Assim o custo continua igual a 5. 
 
 
 
 
Exemplo 3 : Plote a função retangular da figura 3 utilizando-se a estrutura if-else-end. 
 
 
% 
x=linspace(0,2*pi,100); % Criou-se 100 amostras 
entre 0 e 2*pi 
% 
for n=1:100 
 if x(n)<=pi 
 f(n)=1; %Faz f(t)=1 para 0<t<=pi,i.e., 
 %as primeiras 50 amostras de 
%f(t) são iguais a 1 
 else 
 f(n)= -1; % Faz f(t)=-1 para pi<t<=2*pi, 
 % i.e., as últimas 50 amostras de 
% f(t) são iguais a 1 
 end 
end 
plot(x,f, 'ko'); grid on 
 24
title('Figura II.3: Função retangular') 
xlabel('t em radianos') 
ylabel('f(t)') 
 
 
 
9 MATRIZES 
 
Os vetores vistos até agora tratam-se de vetores linha, pois, possuem apenas 1(uma) 
linha com várias colunas. Também pode-se obter vetores coluna, isto é, vetores com 
apenas 1(uma) coluna e várias linhas : 
 
 
>> c=[1; 5; 6; 8; 10] Í 
 
 c = 
 
 1 
 5 
 6 
 8 
 10 
 
 
 
 Se um vetor passa a consistir de várias linhas e colunas, denominamo-lo de 
Matrizes : 
 
 
 
>> m=[1 4 5 6; 5 10 3 20] % Este comando cria uma matriz 2×4 Í 
 
m= 
 1 4 5 6 
 5 10 3 20 
 
 
 Portanto, um vetor linha é um caso particular de uma matriz 1× N , e um vetor 
coluna é um caso particular de matriz N × 1. 
 
 
9.1 Operações Escalares com Matrizes no MatLab 
 
Uma operação de adição, subtração, multiplicação e divisão de uma matriz com um 
valor escalar, é obtida simplesmente aplicado-se a respectiva operação em cada um 
dos elementos da matriz : 
 25
 
 
>> m=[1 4 5 6; 5 10 3 20] % Matriz 2×4 Í 
 
m= 
 1 4 5 6 
 5 10 3 20 
 
>> m-2 Í 
 
ans= 
 
 -1 2 3 4 
 3 8 1 18 
 
 
 
 No exemplo acima, de cada elemento da matriz m subtraiu-se o valor 2. 
 
Outro exemplo : 
 
 
 
>> 2*m-2 Í 
 
ans= 
 
 0 6 8 10 
 8 18 4 38 
 
 
 
 Cada elemento da matriz foi multiplicado por 2 e, posteriormente, subtraiu-se 
2. 
 
 
y=(1:5)*0 % Cria um vetor linha com todos os elementos iguais a 0(zero) Í 
 
y= 
 
 0 0 0 0 0 
 
 
9.2 Operações entre Matrizes no MatLab 
 
As operações entre matrizes requer que as mesmas tenham as mesmas dimensões, e as 
operações de adição, subtração, multiplicação e divisão são aplicados elemento-por- 
elemento : 
 26
 
 
 
>> g=[1 2 3 4; 5 6 7 8; 9 10 11 12] % g é uma matriz 3×4 Í 
 
g= 
 
 1 2 3 4 
 5 6 7 8 
 9 10 11 12 
 
 
>> h=[1 1 1 1; 2 2 2 2; 3 3 3 3] % h é uma outra matriz 3×4 Í 
 
h= 
 
 1 1 1 1 
 2 2 2 2 
 3 3 3 3 
 
>> g+h % adiciona a matriz g com a matriz h Í 
 
ans = 
 
 2 3 4 5 
 7 8 9 10 
 12 13 14 15 
 
>> 2*g-h % Multiplica a matriz g por 2 e subtrai a matriz h do resultado
 Í 
 
ans= 
 
 1 3 5 7 
 8 10 12 14 
 15 17 19 21 
 
 
 
 
>> g.*h % Multiplica a matriz g pela matriz matriz h elemento por 
elemento Í 
 
ans= 
 
 1 2 3 4 
 10 12 14 16 
 27 30 33 36 
 
 27
 
>> g./h % Divide a matriz g pela matriz matriz h elemento por elemento
 Í 
 
ans= 
 
 1.0000 2.0000 3.0000 4.0000 
 2.5000 3.0000 3.5000 4.0000 
 3.0000 3.3333 3.6667 4.0000 
 
>> g % Chama a matriz g novamente Í 
 
g = 
 1 2 3 4 
 5 6 7 8 
 9 10 11 12 
 
>> w=[1 2; 3 4; 5 6; 7 8] % Cria uma matriz 4×2 Í 
 
w= 
 1 2 
 3 4 
 5 6 
 7 8 
 
>> g*w % Multiplicação da matriz g pela matriz w Í 
 
ans = 
 
 50 60 
 114 140 
 178 220 
 
 
 Observe que a operação g.*h é diferente da operação g*h. Enquanto que a 
primeira executa uma mutiplicação elemento-por-elemento de duas matrizes, a 
segunda executa uma multiplicação entre duas matrizes. 
 
10 Manipulação de Gráficos 
 
Nesta secção mostrar-se-ão alguns comandos úteis para manipulação de gráficos. 
Pode-se adicionar curvas a um gráfico já plotado usando o comando hold. 
 
 
 
 
% Exemplo de utilização do comando hold 
%========================================= 
 28
% Geração da curva sin(x) : 
% 
% 
x=linspace(0,2*pi,30); 
y= sin(x); 
plot(x,y,‘r’); grid on 
title(‘Exemplo de utilização do comando hold’) 
xlabel(‘x em rad/s’) 
ylabel(‘y=sin(x)’) 
 
%Agora mantém-se acurva e acrescenta-se a curva do cosseno 
z= cos(x); 
hold on 
plot(x,z,’g’); 
ylabel(‘y1=sin(x); y2=cos(x)’) 
hold off 
 
 
 
O resultado é apresentado na figura 6. 
 
 
Figura 6: Exemplo do comando hold. 
 
Pode-se utilizar o comando subplot(m,n,p) para subdividir a janela de figura em uma 
matriz m-por-n de áreas de plotagem e escolher a p-ésima área para ser ativa. O 
exemplo seguinte ilustra a utilização deste comando. 
 
 
 
 29
 
% Exemplo de utilização do comando subplot(m,n,p) 
%========================================= 
 
% Geração das curvas 
% 
x=linspace(0,2*pi,30); 
y= sin(x); 
z=cos(x); 
a=2*sin(x).*cos(x); 
b=sin(x)./(cos(x)+eps); %o eps é uma variável especial do MatLab utilizada 
para 
 %se evitar divisão por zero 
subplot(2,2,1); %ativa o subplot à esquerda superior dentre os 4 subplots 
plot(x,y); 
grid on 
title(‘sin(x)’) 
ylabel(‘y=sin(x)’) 
% 
subplot(2,2,2); %ativa o subplot à direita superior dentre os 4 subplots 
plot(x,z);
grid on 
title(‘cos(x)’) 
ylabel(‘y=cos(x)’) 
% 
subplot(2,2,3); %ativa o subplot à esquerda inferior dentre os 4 subplots 
plot(x,a); 
grid on 
title(‘2sin(x)cos(x)’) 
xlabel(‘x em rad/s’) 
ylabel(‘y=2*cos(x)*sin(x)’) 
% 
subplot(2,2,4); %ativa o subplot à direita inferior dentre os 4 subplots 
plot(x,b); 
grid on 
title(‘sin(x)/cos(x)’) 
xlabel(‘x em rad/s’) 
ylabel(‘y=sin(x)/cos(x)’) 
 
 
 
 
 
O resultado é apresentado na figura 7. 
 
 30
 
Figura 7: Utilização do comando subplot. 
 
O uso do comando subplot(1,1,1) retorna ao modo default de utilização da janela de 
figura. 
 
Duas outras formas úteis de se construir gráficos são utilizando-se os comandos hist e 
stem. O Comando hist(y) desenha um histograma com 10 bins para os dados de um 
vetor y. hist(y,n) cria um histograma com n bins. hist(y,x), onde x é um vetor cria um 
histograma usando os bins especificados no vetor x. O exemplo seguinte ilustra o uso 
do hist. 
 
 
 
% Exemplo de gráficos usando hist 
%========================================= 
x=-2.9:0.2:2.9; %gera um vetor com os bins a serem usados em um dos 
gráficos 
y= randn(5000,1); %gera 5000 números aleatórios 
subplot(3,1,1); 
hist(y); %gera um histograma com 10 bins 
title(‘Histograma com 10 bins’) 
subplot(3,1,2); 
hist(y,20); %gera um histograma com 20 bins 
title(‘Histograma com 20 bins’) 
subplot(3,1,3); 
hist(y,x) %gera um histograma com os bins dados por x 
title(‘Histograma com bins dados por x’) 
 
 
 31
 
 
O resultado é dado pela figura 8. 
 
 
Figura 8: Exemplo de Histogramas. 
 
Para a representação de seqüências discretas, é útil a plotagem de gráficos com stem. 
stem(y) plota os dados do vetor y. stem(x,y) plota os valores do vetor y dados por x. O 
exemplo seguinte ilustra o uso do stem. 
 
 
 
% Exemplo de gráficos usando stem 
%========================================= 
x=1:50; %gera um vetor com os pontos do vetor y 
y= randn(50,1); %gera 50 números aleatórios 
subplot(1,2,1); 
stem(y); %gera um gráfico com os 50 pontos do vetor y 
title(‘stem(y)’) 
subplot(1,2,2); 
stem(x,y,’:‘); %gera um gráficos com os pontos do vetor y dados por x 
title(‘stem(x,y)’) 
 
 
 
 
O resultado é dado pela figura 9. 
 
 32
 
Figura 9: Exemplo de construção de gráficos com stem. 
 
10.1 Estilo de Linhas e Cores: 
Nos exemplos anteriores, utilizamos diferentes estilos de linhas e cores. 
Os estilos de linhas e as cores podem ser especificados nos comandos de 
plotagem como um argumento do tipo caracter string (entre apóstrofes – 
por exemplo, ´c´), consistindo de 1,2 ou 3 caracteres. A tabela 11 
apresenta estes caracteres. 
 
Tabela 11: Estilos de linhas e cores 
Símbolo Cor Símbolo Estilo de Linha
y amarelo . pontos
m magenta o círculos
c cian x marcas x
r vermelho + marcas mais
g verde * marcas asterístico
b azul - linha sólida
w branco : linha pontilhada
k preto -. linha com traço e ponto
-- linha com segmentos de traço 
 
 33
 
11 EXEMPLOS DE APLICAÇÃO DE VETORES NA 
VISUALIZAÇÃO DE SINAIS REPRESENTADOS NO DOMÍNIO 
DO TEMPO 
 
Exemplo 1 : Escreva um M-file que visualize o sinal f(t) representada no domínio do 
tempo por : 
 
 f(t)
1 (0 < t 
 ( < t 2 
= ≤− ≤
⎧⎨⎩
π
π π
)
1
 
Resolução : Na seção I.3.6, esta mesma função foi visualizada através da utilização da 
função sign(x). Neste exemplo, será utilizado somente o conceito de vetores : 
 
 
% 
x=linspace(0,2*pi,100) % Criou-se 100 amostras entre 0 e 2*pi 
% 
f=(1:50)*0+1 % Faz f(t) = 1 para 0 < t <= pi , i.e., as 
% primeiras 50 amostras de f(t) são 
% iguais a 0 
f(51:100)=(1:50)*0 - 1 % Faz f(t) = -1 para pi < t <=2*pi, i.e., as 
% últimas 50 amostras de f(t) são 
% iguais a 1 
plot(x,f, ‘ko’); grid on 
title(‘Figura II.3: Função retangular’) 
xlabel(‘t em radianos’) 
ylabel(‘f(t)’) 
 
 
Obter-se-á o resultado mostrado na figura II.3 
 
 
Exemplo 2 : Escreva um M-file que visualize o sinal f(t) representada no domínio do 
tempo por : 
 
 f(t)
 t 0
t 0 < t 1
-t / 2 + 3 / 2 1 < t 3
0 t > 3 
=
≤
≤
≤
⎧
⎨
⎪⎪
⎩
⎪⎪
0
 
Resolução : 
 
% 
t=linspace(0,5,51); % Cria 51 amostras entre 0 e 5 
% espaçados de 0.1 
 34
f(1:11)=t(1:11); % f(t) = t para 0<t<=1 
f(12:31)=-t(12:31)/2 + 3/2; % f(t)=-t/2 + 3/2 para 1<t<=3 
f(32:51)=(32:51)*0; f(t)=0 para t>3 
% 
plot(t,f, ‘ko’); grid on 
title(‘Figura II.4 : Função Triangular’) 
xlabel (‘Tempo’) 
ylabel(‘f(t)’) 
 
 
 
Figura 2.3 - Função retangular 
 
Exercício : Faça as modificações necessárias no M-file do exemplo 2 de modo a 
visualizar 101 amostras da função f(t) no intervalo de 0 a 5. 
 
 35
 
 Figura 2.4 - Função triangular 
 
 
 
 
 36
		3 
		1 INTRODUÇÃO
		2 EXEMPLOS SIMPLES
		3 CARACTERÍSTICAS BÁSICAS
		3.1 Área de Trabalho do MATLAB
		3.2 Formato dos Números
		3.3 Variáveis
		3.4 Comentários e Pontuações
		3.5 Operadores Relacionais
		4 Números Complexos
		5 Funções Matemáticas
		6 Gerenciamento de Arquivos
		6.1 Arquivos Script (M-files)
		7 CONSTRUÇÃO DE VETORES
		7.1 ENDEREÇAMENTO DE VETORES
		8 Controles de Fluxo no MatLab
		8.1 Loops for
		8.2 Loops while 
		8.3 Estruturas if-else-end
		9 MATRIZES
		9.1 Operações Escalares com Matrizes no MatLab
		9.2 Operações entre Matrizes no MatLab
		10 Manipulação de Gráficos
		10.1 Estilo de Linhas e Cores:
		11 EXEMPLOS DE APLICAÇÃO DE VETORES NA VISUALIZAÇÃO DE SINAIS REPRESENTADOS NO DOMÍNIO DO TEMPO
C�lculo Num�rico/CalcNumerico-Aula2.zip
aula2.rtf
CÁLCULO NUMÉRICO – AULA 2
1º SEMESTRE
1-	Introdução
C�lculo Num�rico/CalcNumerico-Aula3.zip
aula 3.doc
CÁLCULO NUMÉRICO – AULA 3
1º SEMESTRE
3 – Inversão de Matrizes
	Seja A uma matriz quadrada. A inversa de A, pode ser obtida por:
	Onde COF(A) é a matriz cofatora de A cujos elementos Cij são obtidos por:
		Cij = (-1) i+j . det (Âij)
	
sendo a matriz Âij aquela resultante da eliminação da i-ésima linha e j-ésima coluna da matriz A .
Exemplo:
	Seja a seguinte matriz
	
os elementos Cij da cofatora de A são:
	C11 = (-1)1+1 det (l22)
	C11 = l22
	C12 = (-1)1+2 det (l21)
	C12 = -l21
	
C21 = (-1)2+1 det (l12)
	C21 = -l12
	C22 = (-1)2+2 det (l11)
	C22 = l11
	Assim:	
	
a transposta é:
e a inversa de A é:
	Podemos mostrar que a matriz obtida é de fato a inversa de A, lembrando que, por definição, a inversa de uma matriz multiplicada pela sua inversa resulta na matriz identidade, ou seja:
	A-1 . A = 1
	Vamos então realizar este cálculo:
0
0
=
	Usando o resultado do exemplo anterior, temos que a inversa de:
	
	
é :
		Assim, podemos encontrar a matriz D definida na aula anterior:
		D = A-1 . B
		
ou seja: 
 
e:
	Exemplo:
	
	Ajuste uma reta aos seguintes valores:
		x	 f(x)		 
	
		0	 3,1		0,2
1	 4,9		0,2
2	 6,8		0,2
3	 9,2		0,2
4	 11,1		0,2
Partindo de:
e calculando as somatórias:
temos:
	
então:
e:
 
	Os erros nos parâmetros a e b são obtidos a partir da raiz quadrada dos elementos da diagonal principal da matriz de covariância. Assim:
O resultado do ajuste é:
 P = (2,96 0,15)+ (2,03 0,06)x
	Exercícios:
Ajuste uma reta aos seguintes conjuntos de valores:
1)	x	 1	 3	 5	 7	 9
C�lculo Num�rico/C�lculo Num�rico - Conceitos B�sicos.ppt
Clique para editar o estilo do título mestre
Clique para editar o estilo do subtítulo mestre
*
*
*
Cálculo Numérico
Profs.: 	Bruno C. N. Queiroz
	J. Antão B. Moura
	Ulrich Schiel	
	Maria Izabel C. Cabral
Conceitos Básicos
DSC/CCT/UFCG
*
*
*
Princípios usados em CN
Comuns à análise matemática, C&T
1. Iteração ou aproximação sucessiva
Partindo-se de solução aproximada, inicial, repetem-se mesmas ações/processos para refinar solução inicial
OBS: para evitar trabalho sem fim (e de graça), deve-se determinar se a iteração converge (nem sempre é o caso...) e condições de parada
*
*
*
Princípios usados em CN
2. Discretização
Na resolução de problemas contínuos (aqueles definidos matematicamente com uma passagem ao limite), inverte-se a passagem ao limite, discretizando o problema
Ex: ~ Σ...
*
*
*
Princípios usados em CN
3. Aproximação
Substituir uma função ou modelo por outro que ofereça comportamento (de interesse) semelhante, mais simples de manipular
f(x) g(x)
Ex: assíntotas ilustram comportamento “no limite” de uma função (complexa) de interesse
*
*
*
Princípios usados em CN
4. Transformação
Dado um problema P, desmembra-se P em dois problemas mais simples de resolver, P1 e P2
Área de um trapézio por retângulo (P1) e triângulos (P2)
*
*
*
Princípios usados em CN
5. Divisão e Conquista
Resolver um problema P, por partes ou etapas
Exemplo anterior (área do trapézio)
Aulas nesta disciplina de CN
*
*
*
 Sistemas de numeração
Representação não posicional
romanos
MDCCCXLIX e MMCXXIV
Como seria MDCCCXLIX + MMCXXIV ?
Representação semi-posicional
hebraicos 
1= א (aleph), 2= ב (beth), 10= י (yod), 100= ק(kuph), 11=  י, 101= ק 15=טו (9+6)
*
*
*
 Sistemas de numeração
 alemão
Vinte e um = ein-und-zwanzig
francês 
Noventa = quatre-vingt-dix deux
*
*
*
 Sistemas de numeração
Representação posicional
Base decimal (10)
10 dígitos disponíveis [0,1,2, ... ,9]
“Posição” indica potência positiva de 10
5432 = 5x103 + 4x102 + 3x101 + 2x100
*
*
*
 Sistemas de numeração
Representação de inteiros
Base binária (2)
2 “bits” disponíveis [0,1]
“Posição” indica potência positiva de 2
1011 na base 2 = 1x23 + 0x22 + 1x21 + 1x20 = 8+0+2+1 = 11 na base decimal
Ou, melhor 1x23 + 0x22 + 1x21 + 1x20 = 1 + 2(1+2(0+2(1))) = 11 
*
*
*
 Sistemas de numeração
Representação de números fracionários
Base decimal (10)
“Posição” da parte inteira indica potência positiva de 10
Potência negativa de 10 para parte fracionária
54,32 = 5x101 + 4x100 + 3x10-1 + 2x10-2
*
*
*
 Sistemas de numeração
Representação de números fracionários
Base binária (2)
“Posição” da parte inteira indica potência positiva de 2
Potência negativa de 2 para parte fracionária
10,11 na base 2 = 1x21 + 0x20 + 1x2-1 + 1x2-2 = 2+0+1/2+1/4 = 2,75 na base decimal
*
*
*
Outros sistemas de numeração
Maior interesse em decimal (10)
Nossa anatomia e cultura
 e binário (2)
Uso nos computadores
Outros sistemas
Octal (8), {0,1,2, ... , 7}
Hexadecimal (16), {0,1,2, ... , 9, A,B,C,D,E,F}
Dodecimal (relógio, calendário)
*
*
*
Alguns sistemas numéricos
			Decimal
			Binário
			Octal
			Hexadecimal
			0
			0
			0
			0
			1
			1
			1
			1
			2
			10
			2
			2
			3
			11
			3
			3
			4
			100
			4
			4
			5
			101
			5
			5
			6
			110
			6
			6
			7
			111
			7
			7
			8
			1000
			10
			8
			9
			1001
			11
			9
			10
			1010
			12
			A
			11
			1011
			13
			B
			12
			1100
			14
			C
			13
			1101
			15
			D
			14
			1110
			16
			E
			15
			1111
			17
			F
			.
.
.
			.
.
.
			.
.
.
			.
.
.
*
*
*
Conversão de sistema ou base
Uma caixa alienígena com o número 25 gravado na tampa foi entregue a um grupo de cientistas. Ao abrirem a caixa, encontraram 17 objetos. Considerando que o alienígena tem um formato humanóide, quantos dedos ele tem nas duas mãos?
*
*
*
Conversão de base
1710 = 25b
17 = 2xb1 + 5xb0 
17 = 2b + 5
b = (17-5)/2 = 6
*
*
*
Conversão de base
Um sistema ternário tem 3 "trits", cada trit assumindo o valor 0,1 ou 2. Quantos "trits" são necessários para representar um número de seis bits? 
*
*
*
bits para trits
26 = 3y 
64 = 3y 
y = maior inteiro {6xlog22/log23}
y = 4
(33=27 < 64 < 34=81)
*
*
*
Conversão de Inteiro
Binário para decimal
Já visto
Inteiro decimal para binário
Divisão inteira (do quociente) sucessiva por 2, até que resto seja = 0 ou 1
Binário = composição do último quociente (Bit Mais Significativo – BMS) com restos (primeiro resto é bit menos significativo – bms)
Em inglês, Most Significant Bit – MSB e least significat bit – lsb, respectivamente.
*
*
*
Conversão de inteiro
Exemplo: Converter 25 decimal para binário
25 / 2 = 12 (quociente) e resto 1=bms
12 / 2 = 6 (quociente) e resto 0
6 / 2 = 3 (quociente) e resto 0
3 / 2 = 1 (último quociente=BMS) e resto 1
Binário = BMS ... bms = 1 1 0 0 1
= 1x24 + 1x24 + 0x22 + 0x21 + 1x20
= 16 + 8 + 0 + 0 + 1 = 25 decimal
*
*
*
Conversão de Inteiros entre 
Sistemas
Procedimentos básicos: - divisão
						- polinômio
					- agrupamento de bits 
*
*
*
Conversão (Inteiros) entre sistemas
*
*
*
Conversão (Inteiros) entre sistemas
 
*
*
*
Conversão (Inteiros) entre 
sistemas
Conversão octal hexadecimal
Não é realizada diretamente não há relação de potências entre as bases oito e dezesseis.
Semelhante à conversão entre duas bases quaisquer base intermediária (base binária) 
Conversão em duas etapas:
 1 - número: base octal (hexadecimal) binária.
 2 - resultado intermediário: binária hexadecimal (octal).
Joseana M. Fechine
*
*
*
Conversão de fração
Operação inversa: multiplicar parte fracionária por 2 até que parte fracionária do resultado seja 0 (zero)
Bits da parte fracionária derivados das partes inteiras das multiplicações
Bit imediatamente à direita da vírgula = Parte inteira da primeira multiplicação
*
*
*
Conversão de fração
Exemplo: converter 0,625 decimal para binário
0,625 x 2 = 1,25 logo a primeira casa fracionária é 1 ; nova fração (resto) é 0,25 (1,25-1=0,25)
0,25 x 2 = 0,5 segunda casa é 0 ; resto é 0,5
0,5 x 2 = 1,0 terceira casa é 1 ; resto é zero.
Resultado: 0,62510 = 0,1012 
*
*
*
Conversão partes inteira,fracionária juntas
Para converter um número com parte inteira e parte fracionária, fazer a conversão de cada parte, separadamente.
*
*
*
Conversão partes inteira,fracionária juntas
(8,375)10 = ( ? )2 
*
*
*
Exercícios
Mostre que:
5,8 = 101,11001100... , uma dízima.
11,6 = 1011,10011001100... 
a vírgula foi deslocada uma casa para a direita, pois 11,6
= 2 x 5,8 .
*
*
*
Representação em ponto (vírgula) flutuante - float
Representação pode variar (“flutuar”) a posição da vírgula, ajustando potência da base.
54,32 = 54,32 x 100 = 5,432 x 101 = 0,5432 x 102 = 5432,0 x 10-2 
Forma normalizada usa um único dígito antes da vírgula, diferente de zero
Exemplo: 5,432 x 101
*
*
*
Representação em ponto (vírgula) flutuante - float
No sistema binário:
110101 = 110,101x23 = 1,10101x25 = 0,0110101x27 
No caso dos números serem armazenados em um computador, os expoentes serão também gravados na base dois
Como 310 = 112 e 7=1112
110,101 x (10)11 = 1,10101x(10)101 = 0,0110101x(10)111
Na representação normalizada, há apenas um “1” antes da vírgula
Exemplo: 1,10101x(10)101
*
*
*
Representação em ponto (vírgula) flutuante - float
Algumas definições
No número 1,10101x(10)101 , tomado como referência:
1,10101 = significando (ou “mantissa”)
101 = expoente
OBS:
a base binária não precisa ser explicitada (o computador usa sempre esta)
O “1” antes da vírgula, na representação normalizada – se esta for adotada, também pode ficar implícito, economizando um bit (“bit escondido”).
*
*
*
Representação em ponto (vírgula) flutuante - float
Representação genérica
 ±d0,d1d2...dtx(b)exp , 
t é o número de dígitos da mantissa
d1d2...dt = mantissa, com 0 di  (b-1)
exp = expoente (inteiro com sinal)
OBS:
a base não precisa ser explicitada 
*
*
*
Armazenamento de floats
Na organização/arquitetura do computador, definir:
Número de bits da mantissa (precisão, p)
Número de bits do expoente
Um bit de sinal (“0” para + e “1” para -) para o número (geralmente o primeiro, da esquerda)
*
*
*
Armazenamento de floats
Ilustração
Sinal do número: 0 = + e 1 = -
Expoentes: 8 combinações possíveis
000 e 111 – especiais (ver adiante)
011 (310) = expoente zero
001 e 010 = expoente –2 e –1 (abaixo de zero)
100, 101 e 110 = expoentes 1, 2 e 3 (acima zero)
OBS: Não podem seguir aritmética normal!
Expoente (+/-)
Significando
Sinal
*
*
*
Armazenamento de floats
000 (especial)
001 (2-2)
010 (2-1)
011 (2 0)
100 (2 1)
101 (2 2)
110 (2 3)
111 (especial)
Expoente (+/-)
Sinal
0 = + 
1 = -
1,0000
1,0001
 ....
 ....
1,1111
1 = bit escondido
Significando
*
*
*
Armazenamento de floats
Ainda os expoentes na ilustração...
Maior número positivo é (lembre do bit escondido)
0 110 1111 = + 23 x 1,1111 = 23 x (2- 2-4 ) = 1111,1 = 15,5 decimal
Menor número positivo é (lembre do bit escondido)
0 001 0000 = + 2-2 x 1,0000 = 2-2 x 20 = 0,01 ou 0,25 decimal
*
*
*
Armazenamento de floats
Combinações especiais dos expoentes na ilustração...
000 – representação NÃO normalizada
Significando passa a ser 0,_ _ _ ...
Expoente (000) = -2
Menor número positivo passa a ser
0 000 0001 = 2-2 x 0,0001 = 2-2 x 2-4 = 2-6 = 0,015625
*
*
*
Armazenamento de floats
Ainda as combinações especiais...
Normalização não permite representar zero!
000 – representação NÃO normalizada
00000000 = + 0 decimal
10000000 = - 0 decimal
São iguais em comparações
*
*
*
Armazenamento de floats
Ainda as combinações especiais...
111 – representações de infinito
01110000 = + infinito
11110000 = - infinito
11111000 = indeterminação
Outras combinações 11111_ _ _ = Not A Number (NANs)
*
*
*
Padrão IEEE para floats
O padrão IEEE 754 para ponto (vírgula) flutuante é a representação mais comum para números reais em computadores de hoje, incluindo PC's compatíveis com Intel, Macintosh, e a maioria das plataformas Unix/Linux.
OBS: Padrão 854 (base = 10 ou 2, nem especifica layout dos bits)
*
*
*
Padrão IEEE para floats
O padrão (ou norma) IEEE 754 define dois formatos básicos para os números em ponto flutuante:
o formato ou precisão simples, com 32 bits; e,
o duplo com 64 bits. 
*
*
*
Padrão IEEE 754 para floats
 Sinal: 0 = + e 1 = -
 Combinações Sinal + Expoente + Significando
*
*
*
IEEE 754 com precisão simples
Expoentes na precisão simples c/256 combinações
1111 1111
sinal=1 e significando = 0...0 : -infinito
sinal=0 e significando = 0...0 : +infinito
sinal=1 e significando =10...0: indeterminado
c/outras combinações: NAN
*
*
*
IEEE 754 com precisão simples
Expoentes na precisão simples c/256 combinações
0111 1111 (12710) = expoente zero (bias = polarização)
0000 0001 = menor expoente = –126 (abaixo de um)
1111 1110 = maior expoente = +127 (acima de um)
OBS: Expoente vale ( Número em binário MENOS 127)
0000 0000
sinal=1 e significando = 0...0 : -zero
sinal=0 e significando = 0...0 : +zero
*
*
*
IEEE 754 com precisão simples
Expoentes na precisão simples c/256 combinações
 (0) 0000 0000 (especial)
 (1) 0000 0001 (2-126) menor expoente
..............
 0111 1100
(125) 0111 1101 (2-2)
(126) 0111 1110 (2-1)
(127) 0111 1111 (20)
(128) 1000 0000 (21)
(129) 1000 0001 (22)
 1000 0010
.............
(254) 1111 1110 (2127) maior expoente
(255) 1111 1111 (especial)
*
*
*
IEEE 754 com precisão simples
Menor número positivo (lembre do bit escondido e não normalizada)
0 00000000 00….01 = 2-126 x 2-23 = 2-149
Maior número positivo (lembre do bit escondido)
0 1111110 11...11 = 2127 x (2-2-23)
A faixa de números negativos é:
de –(2-2-23) x 2127 a –2-149
*
*
*
IEEE 754 com precisão dupla
No formato (precisão) duplo, o menor expoente é representado por 00000000001, valendo -1022, e o maior expoente é representado por 11111111110, valendo +1023. Em ambos os casos, o expoente vale o número representado em binário menos 1023 (este é o valor da bias = zero).
*
*
*
IEEE 754 com precisão dupla
Verifique:
Menor número positivo (lembre do bit escondido e não normalizada)
0 00000000000 00….01 = 2-1022 x 2-52 = 2-1074
Maior número positivo (lembre do bit escondido)
0 1111110 11...11 = 21023 x (2-2-52)
A faixa de números negativos é:
de –(2-2-52) x 21023 a –2-1074
*
*
*
IEEE 754 com precisão simples
Expoentes na precisão dupla c/2048 combinações
 (0) 00000000000 (especial)
 (1) 00000000001 (2-1022) menor expoente
 ..............
 01111111100
 01111111101 (2-2)
(1022) 01111111110 (2-1)
(1023) 01111111111 (20)
(1024 10000000000 (21)
 10000000001 (22)
 10000000010
 .............
(2046) 11111111110 (21023) maior expoente
(2047) 11111111111 (especial)
*
*
*
Quadro resumo IEEE 754
*
*
*
Erro na representação de floats
Número finito de bits na representação (número é apenas “maior” na precisão dupla), implica em “truncamento” (ou arredondamento) do número real a ser representado. Truncamento introduz erro na representação. Casos especiais:
Overflow: número a representar é maior que maior número possível de ser representado
Underflow: número a representar é menor que menor número possível de ser representado
*
*
*
Limite no erro na representação de um float
A forma normalizada do número N é 1,n x 2e
Supõe-se que e esteja dentro dos limites dessa representação (ou ocorreria overflow).
Se n não couber no número de bits da representação (precisão) do significando, p, haverá truncamento, introduzindo erro.
*
*
*
Limite no erro na representação de um float
A forma normalizada do número N é 1,n x 2e
Ex: N = 1,101011110100101… x 2e e que p número de bits (precisão)
do significando seja 4.
A representação de N seria 1,1010 x 2e gerando um ErroN = 0,11110100101… x 2c-4 
O erro relativo é definido como EN = ErroN / N , ou:
0,11110100101… x 2c-4 / 1,101011110100101… x 2e
 = 0,11110100101… x 2-4 / 1,101011110100101…
*
*
*
Limite no erro na representação de um float
Note que EN será máximo quando o numerador for máximo e o denominador for mínimo, ou seja:
EN (max) = 0,1111111….. x 2-4 / 1,0000000…
Lembrando que 0,11111…. < 1 , tem-se:
EN (max) < 2-4 , onde 4 está representando p, número de bits (precisão) do significando.
Portanto, EN (max) < 2 –p, para representações normalizadas.
*
*
*
Aritmética com floats
Conhecidos os erros em dois números, é possível determinar o erro de uma operação entre eles, como adição, subtração, multiplicação e divisão.
Erro depende de método / procedimentos empregados
*
*
*
Aritmética com floats
Padrão IEEE 754 define algoritmo para adição, subtração, multiplicação, divisão e raiz quadrada e exige que implementações produzam o(s) mesmo(s) resultado(s).
Igualdade dos bits (resultados) em várias processadores
Transportabilidade de software
Vide próximo módulo
*
*
*
Exercício Nr. 1
Seja a seguinte representação de números positivos em ponto flutuante:
Bit 7. Bit 6. Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 
Sinal do 
expoente  EXPOENTE 	 MANTISSA
Sendo que o expoente é representado diretamente pelo respectivo número binário e
os números são normalizados pela primeira casa decimal, ou seja 
4.5 é representado como 0.45 101 ou, em binário, 
100.1 é representado por 0.1001 211 o que daria 00111001 na representação acima. 
1) Qual o maior e o menor número positivo que podem ser representados neste formato? 
Mostre o resultado em decimal, binário e na representação interna.
2) Com fica a situação do número 0? Sugira uma solução.
3) Represente, neste formato os números (decimais) 13, 0.12 e 3.501. 
Em quais números ocorreram erros de representação?
4) Seja a representação 00101000. Ela representa qual número? Se eu subtrair 0.12 deste número, 
como seria representado o número resultante? 
*
*
*
Exercício Nr. 2
Repita os itens 3 e 4 do exercício anterior, agora usando a representação em ponto flutuante de 8 bits vista anteriormente neste documento. 
 Determine, para ambas as representações, a densidade dos números maiores que 1, ou seja, a distância entre dois números subseqüentes. SUGESTÃO: tome a representação de um número qualquer some 0.0001 à mantissa e calcule a diferença entre estes dois números.
C�lculo Num�rico/C�lculo Num�rico - Erros.ppt
Clique para editar o estilo do título mestre
Clique para editar o estilo do subtítulo mestre
*
*
*
Cálculo Numérico
Módulo II
Profs.: 	Bruno Correia da N. Queiroz
	Maria Izabel C. Cabral
	Ulrich Schiel
Erros
DSC/CCT/UFCG
*
*
*
Erros
 Existência
 Tipos
 Propagação
*
*
*
Erros
Existência
*
*
*
Erros - Existência
Erros estão sempre presentes nas soluções numéricas
Dados representados por intervalo: imprecisão na medição ou incerteza sobre o valor verdadeiro. (Exemplo: 50,3 ± 0,2 cm)
			 Erro Inerente
*
*
*
Erros - Existência
Erros estão sempre presente nas soluções numéricas
os métodos numéricos geralmente são aproximados, iterativos, buscando minimizar o erro 
			
			erro de truncamento
*
*
*
Erros - Existência
Erros estão sempre presente nas soluções numéricas
a representação dos números reais, com um número finito de dígitos, dependem da máquina utilizada podendo exigir aproximações (lembremos que um número, pode ter representação finita em uma base e não finita em outra) 
 			erro de representação.
*
*
*
Erros - Existência
Erros estão sempre presente nas soluções numéricas
A conversão de bases pode acarretar erros
 		erro de conversão
Operações com dados imprecisos/incertos acarretam propagação do erro.
*
*
*
Erros - Existência
Ex. 01: Calcular a área de uma circunferência de 		 raio 100 m
					
 		
	Resultados:
		(1) A = 31400 m2
		(2) A = 31416 m2
		(3) A = 31414,92654 m2
	
	
*
*
*
Erros - Existência
		(1) A = 31400 m2
		(2) A = 31416 m2
		(3) A = 31414,92654 m2
					
 		
Como justificar as diferentes áreas calculadas?
	
	Os resultados dos cálculos realizados dependem da representação dos números nas máquinas utilizadas.
	 
	 não tem representação finita, sempre será representado de forma aproximada: 3,14, 3,1416 e 3,141592654, para os cálculos 1,2 e 3, respectivamente. 
*
*
*
Erros - Existência
Ex. 02: Calcular usando uma calculadora e um 	 computador:
			, para xi = 0,5 e xi = 0,1		
 		
Resultados:
	para xi=0,5 calculadora: S= 1500
 	 computador: S= 1500
para xi =0,1 calculadora: S= 300
 computador: S=300.00909424 (precisão simples)
			S=299.999999999999720 (dupla)
*
*
*
Erros - Existência
Resultados:
	para xi=0,5 calculadora: S= 15000
 computador: S=15000
	para xi =0,11 calculadora: S= 3300
 computador: S= 3299.99691
	
Os resultados dos cálculos realizados dependem da representação dos números nas máquinas utilizadas.
	(0,11)10 = (0,000111 )2 = (0,109375 )10 
	(0,11)10 não tem representação finita na base 2.
*
*
*
Erros - Existência
Ex.03: Fazer a conversão de O,1 de base 10 	 para a base 2
	(O,1)10 = (0,00011001100110011...)2
(O,1)10 não tem representação exata na base 2.
A representação de um número depende da base em uso e do número máximo de dígitos usados na sua representação.
Por outro lado 0,000112 = 0,093810
*
*
*
Erros
 
Tipos
*
*
*
Erros - Tipos
 Absoluto	 
 Relativo
	
Quanto menor for o erro, mais preciso
 será o resultado da operação
 Truncamento			 
 Arredondamento
*
*
*
Erros - Tipos
Erro Absoluto = Valor Exato – Valor Aproximado
 	EAx = x – 
Erro Relativo = Erro Absoluto / Valor Aproximado
			ERx = (x – ) /
 
Obs.: Erro Porcentualx = ERx x 100
*
*
*
Erros – Absolutos
	Em geral, não é possível obter EAx, pois não se conhece x.
	A solução é obter um limitante superior ou uma estimativa do erro absoluto.
			|EAx| = |x - | < limitante superior
	
 
EX. 01: Para  (3.14 ,3.15)
			 |EA  | = | | < 0.01
*
*
*
Erros – Absolutos
	Ex. 04: Para = 2112,9 com |EAx| < 0.1 
 	temos x (2112,8, 2113),
			
		 Para = 5.3 com |EAx| < 0.1 
 	temos y  (5.2,5.4)
		 
	Temos mesmos limitantes superiores. Pode-se afirmar que x e y são representados com a mesma precisão?
É preciso comparar a ordem de grandeza de x e y.
*
*
*
Erros – Relativos
	 
	Dependendo da ordem de grandeza o erro absoluto não é suficiente para descrever a precisão de um cálculo.
			 Erro Relativo
*
*
*
Erros – Relativos
Ainda, no Ex. 04:
	 
Para = 2112,9 com |EAx| < 0.1 
 |EAx| = |x - | / | | = 0.1/2112.9  4.7 x 10-5		
Para = 5.3 com |EAx| < 0.1
 |EAy| = |y - | / | | = 0.1/5.3  0.02
	Mostramos que X é representado com maior precisão que y
*
*
*
Erros –
Arredondamento
	Ex. 05: Seja: calcular em uma máquina digital
 
	Não existe uma forma de representar um número irrracional com um número finito de algarismos.
	 Portanto, o número apresentado pela calculadora é uma aproximação do valor real de 	= 1,4142136 (ao invés de 1,41421356....). O erro introduzido é chamado erro de arredondamento 
*
*
*
Erros –Truncamento
Ex. 06: Seja: calcular o valor de . 
Sabemos que a exponencial é uma função que pode ser representada por uma série infinita, 
 
 
*
*
*
Erros –Truncamento
 
na prática, é impossível calcular seu valor exato. Tem que se fazer uma aproximação, que levará a um erro no resultado final de ex. O erro introduzido é chamado erro de truncamento.
 
*
*
*
Erros – Arred. e Truncamento
	Em um sistema que opera em ponto flutuante de t dígitos, na base 10. 
	Erro de truncamento (e=dígitos inteiros):
				 e
	Erro de arredondamento:
				 e
*
*
*
Erros – Arred. e Truncamento
	Demonstração: Erros de Arredondamento e de truncamento
	Em um sistema que opera em ponto flutuante de t dígitos, na base 10, 
	Seja: x = fx x10e + gx x10e-t onde 0.1fx  1 e 0.1gx1
Ex.:Para t = 4 e x = 234.57, então
	x = 0.2345 x 103 + 0.7 x 10-1,
 	temos fx = 0.2345 e gx = 0.7
*
*
*
Erros –Truncamento
No truncamento gx x10e-t é desprezado e 
Temos: 
visto que  gx<1
 ,
pois 0.1 é o menor valor possível para fx
*
*
*
Erros – Arredondamento
	No arredondamento tipo simétrico (forma mais utilizada):
					
					se, 	 (gx é desprezado)
							
					se,		 (soma “1” ao último 
 dígito de fx)
 
*
*
*
Erros –Arredondamento
	Se , teremos
											
 
*
*
*
Erros – Arredondamento
Se
 
 e
*
*
*
Erros – Arred/Truncamento
Cenário: sistema de aritmética de ponto flutuante 		 de 4 dígitos, precisão dupla.
Ex. 07: Seja x = 0.937 x 104 e y = 0.1272 x 102 . 	 Calcular x + y. 
	 
Geralmente, o resultado exato de uma operação (OP) é normalizado e arredondado ou truncado para t dígitos - (OP)ª
*
*
*
Erros – Arred/Truncamento
Alinhar os pontos decimais antes da soma (A adição aritmética de PF requer o alinhamento dos pontos decimais dos dois números)
		 x = 0.937 x 104 e y = 0.001272 x 104, 
 x+y = 0.938272 x 104 
Resultado com 4 dígitos
		Arredondamento : (X+Y)a = 0.9383 x 104 
 		Truncamento: (X+Y)a = 0.9382 x 104 
*
*
*
Erros – Arrred./Truncamento
	Arredondamento : (X.Y)a = 0.1192 x106 
 	Truncamento: (X.Y)a = 0.1191 x106 
		
Mesmo que as parcelas ou fatores de uma operação possam ser representados exatamente no sistema, não se pode esperar que o resultado armazenado seja exato. No exemplo, x e y tinham representação exata, mas o resultado x+y teve representação aproximada
*
*
*
Erros
	
Propagação
*
*
*
Erros – Propagação
Ex. 08: Seja: calcular o valor de  - e3 
 	  (erro de arredondamento)
	 e3 (erro de truncamento)
	Os erros nos valores de  e e3
 se propagam para o resultado de  - e3
	
*
*
*
Erros – Propagação
	
	Ao se resolver um problema numericamente, a cada etapa e a cada operação realizada, devem surgir diferentes tipos de erros gerados das mais variadas maneiras, e estes erros se propagam e determinam o erro no resultado final obtido. 
	Conhecer os efeitos da propagação de erros é muito importante pois, além de determinar o erro final de uma operação numérica, pode-se conhecer a sensibilidade de um determinado problema ou método numérico.
	 
*
*
*
Erros – Propagação
Ex.09: Dados a = 50 ± 3 e b = 21 ± 1 , 	
		 Calcular: a + b, a – b e a x b 
		
		 a pode variar de 47 a 53 
		 b pode variar de 20 a 22. 
O menor valor da soma seria 47 + 20 = 67 e o maior valor seria 53 + 22 = 75. 
	Logo, a + b = (50 + 21) ± 4 = 71 ± 4, variando de 67 a 75. 
*
*
*
Erros – Propagação
Ex.09: Dados a = 50 ± 3 e b = 21 ± 1 , 	
		a pode variar de 47 a 53 
		b pode variar de 20 a 22. 
O menor valor da subtração seria 47 – 22 = 25 e o maior valor da subtração seria 53 – 20 = 33.
 Logo, a – b = (50 – 21) ± 4 = 29 ± 4 , 
 variando de 25 a 33.
 
Observe que na subtração, os erros absolutos se somam, pois sempre se admite o pior caso; nunca se subtraem erros, contando com a sorte; prevê-se, sempre, o caso mais desfavorável
*
*
*
Erros – Propagação
	Ex.09: Dados a = 50 ± 3 e b = 21 ± 1 , 	
			a pode variar de 47 a 53 
			b pode variar de 20 a 22. 
O menor valor do produto seria 47 x 20 = 940 e o maior valor do produto seria 53 x 22 = 1166.
	 Logo, a x b = (50 ± 3) x (21 ± 1) 
			  1050 ± (3 x 21 + 50 x 1)  1050 ± 113. 
	Despreza-se o produto 3 x 1, por ser muito pequeno diante de
 (3 x 21 + 50 x 1 ) = 113. Assim, o produto ficaria entre 937 e 1163, ligeiramente diferente do verdadeiro intervalo, exatamente pelo abandono do produto 1 x 3, considerado desprezível 
*
*
*
Erros – Propagação
 Análise de Erros nas Operações Aritméticas de Ponto Flutuante
	 
	O erro total em uma operação aritmética é composto pelo erro das parcelas ou fatores e pelo erro no resultado da operação.	 
*
*
*
Erros – Propagação
Operações Aritméticas em PF – Erros Absolutos
 
*
*
*
Erros – Propagação
Operações Aritméticas em PF – Erros Absolutos
 
muito pequeno
*
*
*
Erros – Propagação
Operações Aritméticas em PF – Erros Absolutos
 
					 
						
(despreza-s os termos
 de potência >1)
Simplificação:
*
*
*
Erros – Propagação
Operações Aritméticas em PF – Erros Relativos
 
 Soma:
 Subtração:
					 
*
*
*
Erros – Propagação
Operações Aritméticas em PF – Erros Relativos
 
 Multiplicação:
 Divisão:
					 
*
*
*
Erros – Análise
Cenário: sistema de aritmética de ponto flutuante 		 de 4 dígitos, precisão dupla.
Ex.10: Seja x = 0.937 x 104 e y = 0.1272 x 102 	 
	Calcular x + y e ER(x+y)sabendo que x, y estão exatamente representados.
 	
*
*
*
Erros – Análise
Solução:
Alinhar os pontos decimais antes da soma 
		 x = 0.937 x 104 e y = 0.001272 x 104, 
 x+y = 0.938272 x 104 
Resultado com 4 dígitos
		Arredondamento : = 0.9383 x 104 
 	
*
*
*
Erros – Análise
 Cálculo de ER(x+y)
 
Temos: 
 	
Como x e y são representados exatamente, ERx+y se resume ao Erro Relativo de Arredondamento (RA) no resultado da soma.
EAx=EAy= 0, 
 Eay+y=0
*
*
*
Erros – Análise
 
Exercício – Fazer em sala de aula
Seja x = 0.937
x 104 e y = 0.1272 x 102
		 	 
Calcular x - y e ER(x-y)sabendo que x, y e estão exatamente representados. 	
*
*
*
Erros – Análise
Ex.11: Seja x = 0.937 x 104 e y = 0.1272 x 102
		 	 
	Calcular x . y e ER(x+y)sabendo que x, y e estão exatamente representados.
*
*
*
Erros – Análise
Solução:
	x.y = (0,937 x 104 )x(0,1272 x 102 ) = 0,1191864 x 106
 
Temos:
(arredondamento)
*
*
*
Erros – Análise
Exercício – Fazer em sala de aula
Seja x = 0.937 x 104 e y = 0.1272 x 102
		 	 
Calcular x / y e ER(x/y)sabendo que x, y e estão exatamente representados.
*
*
*
Erros – Análise
Ex.12:
Seja x = 0,937x104 y = 0,1272x102 e z = 0,231x101
	 	 
Calcular x + y+z e ER(x+y+z)sabendo que x, y e z estão exatamente representados.
Solução:
Alinhando as vírgulas decimais
x = 0.937x104 y = 0.001272x104 e z=0,000231
		A soma é feita por partes: (X+Y)+Z
*
*
*
Erros – Análise
No Ex 10 encontramos: 
	 x+y = 0.9383 x 104 e
	
Calcular w = x + y+ z? e ER(x+y+z)?
Seja s= x+y
	 s+z= 0,9383 x 104 + 0,000231 x 104 = 0,938531x 104 
 s+z= 0,9385x 104 (arredondamento)
			
x+y+z= 0,9385x 104
*
*
*
Erros – Análise
 Temos: EAz=0, 
  ERz=0
*
*
*
Erros – Análise
*
*
*
Erros – Análise
Ex.12: 
Supondo que x é representado num computador por , que é obtido por arredondamento. Obtenha os limites superiores para os erros relativos de
e
*
*
*
Erros – Análise
Solução:
Temos:
a) 
*
*
*
Erros – Análise
b) 
Então:
*
*
*
Erros – Análise
Série de Exercícios
II.1- Seja um sistema de aritmética de ponto flutuante de quatro dígitos, base decimal e com acumulador de precisão dupla. Dados os números:
	X=0,7237x104 y=0,2145x10-3 e z=0,2585x101
Efetue as seguintes operações e obtenha o erro relativo no resultado, supondo que x, u, e z estão exatamente representados.
	 a)x+y+z b)x-y-z	 c)x/y 
	 d)(x.y)/z e)x.(y/z) f) (x+y).z
*
*
*
Erros – Análise
II.02- Supondo que x é representado num computador por , onde é obtido por arredondamento, obtenha os limites superiores para os erros relativos de
II.03- Idem para 
e
e
*
*
*
Erros – Análise
II-04: Sejam e as representações de x e y obtidas por arredondamento em um computador. Deduza expressões de limitante de erro para mostrar que o limitante de erro relativo de 
é menor do que o de 
*
*
*
Erros – Análise
Fim do Modulo III
C�lculo Num�rico/C�lculo Num�rico - Ferramentas de Suporte.ppt
Clique para editar o estilo do título mestre
Clique para editar o estilo do subtítulo mestre
*
*
*
Cálculo Numérico
Profs.:	Bruno C N Queiroz
	J. Antão B. Moura
	José Eustáquio R. de Queiroz
	Joseana Macêdo Fechine
	Maria Izabel C. Cabral
Ferramentas de Suporte
DSC/CCT/UFCG
*
*
*
Como estudar 
métodos numéricos?
Ferramentas de Suporte
*
*
*
Verificar validade dos resultados obtidos 
Ferramentas de Suporte
Desenvolver
Utilizar
Programa 
Computador
Uso do método numérico
*
*
*
	Programas de computação numérica 
	(software numérico)
Programa Individual
Pacote
Biblioteca
Sistema de Software
	
Ferramentas de Suporte
*
*
*
Programa Individual
Composto de alguns módulos.
Função: executar uma computação específica.
Exemplo de aplicação: 
Obter uma integral definida de uma função dada.
Ferramentas de Suporte
*
*
*
Pacote
Coleção de programas para solucionar problemas de uma área.
Exemplo de aplicação:
Solução de sistemas de equações lineares
Ferramentas de Suporte
*
*
*
Biblioteca
Coleção sistematizada de programas para resolução de diversas classes de problemas de matemática.
Tipicamente contém algumas centenas de programas.
Ferramentas de Suporte
*
*
*
Sistema de Software
Constituído de um pacote ou uma biblioteca com uma interface de comunicação com o usuário.
Utiliza uma linguagem especial.
Exemplos:
MATLAB, MATHCAD, MAPLE, MATHEMATICA, SPSS, etc.
Ferramentas de Suporte
*
*
*
MATHCAD
padrão industrial para cálculos técnicos e matemática aplicada
ambiente de trabalho baseado em álgebra computacional
avaliação numérica e simbólica de expressões matemáticas;
geração de gráficos e construção de algoritmos;
avaliação de integrais e derivadas de funções;
resolução de sistemas lineares, etc.
Ferramentas de Suporte
*
*
*
MAPLE
sistema de computação algébrica de propósitos gerais
operações simbólicas;
cálculos complexos;
recursos para programação.
resolução de problemas matemáticos
geração de gráficos técnicos de alta qualidade
pacotes de funções de teoria de grupos, álgebra linear e estatística, dentre outros 
Ferramentas de Suporte
pytheas.ucs.indiana.edu/~statmath/math/maple/overview.html
*
*
*
MATHEMATICA
sistema genérico para computação matemática
manipulação integrada de dados numéricos, simbólicos e gráficos
ferramenta interativa de cálculo
linguagem de programação. 
Ferramentas de Suporte
www.indiana.edu/~statmath/math/mma/overview.html
*
*
*
SPSS (Statistical Package for the Social Sciences)
originalmente desenvolvido como LP
usualmente empregado na pesquisa quantitativa em ciências sociais
realização de análises estatísticas, em especial análises de dados de levantamentos
processo numérico e gráfico de dados 
Ferramentas de Suporte
www.csubak.edu/ssric/Modules/SPSS/SPSS9BOOK/
*
*
*
O que é o MATLAB ? 
Software interativo de alto desempenho;
Destinado ao cálculo numérico;
Integração de análise numérica, cálculo com matrizes, processamento de sinais e construção de gráficos;
Ambiente de fácil interação.
*
*
*
O que é o MATLAB ? 
Resolução de problemas numéricos em apenas uma fração do tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. 
*
*
*
O que é o MATLAB ? 
As soluções dos problemas são expressas quase exatamente como escritas matematicamente, ao contrário da programação tradicional.
*
*
*
MATLAB – Ambiente de trabalho
*
*
*
MATLAB – Ambiente de trabalho
*
*
*
Linhas de comando
MATLAB – Demo
*
*
*
Ferramentas de Suporte
Importante!!! Determinadas situações exigem a utilização de uma LP mais adequada para a implementação de um algoritmo para a resolução de um problema de CN.
Exemplo de Linguagem:
 FORTRAN (FORmula TRANslation)
C�lculo Num�rico/C�lculo Num�rico - Lista 1.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 01
Módulo 1 – Motivação e Ferramentas de Suporte
Qual o objetivo do Cálculo Numérico?
Apresente aplicações nas quais se torna necessário (ou útil) a produção de resultados numéricos.
Sabendo
que os métodos numéricos buscam soluções aproximadas para as formulações matemáticas, qual o problema inerente das soluções obtidas através da utilização destes métodos?
Quais os passos necessários para a obtenção de uma solução numérica utilizando o computador?
Ilustre aplicações do Cálculo Numérico no âmbito do seu curso.
O que você entende por Ferramentas de Suporte?
Como são classificados os programas de computação numérica? Caracterize cada um destes programas.
Descreva em linhas gerais as características do MATLAB que o tornam uma ferramenta útil ao Cálculo Numérico.
C�lculo Num�rico/C�lculo Num�rico - Lista 2.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 02
Módulo 2 – Conceitos Básicos: Sistemas de
Numeração e Ponto Flutuante
Enumere os principais princípios usados em Cálculo Numérico que são comuns à Matemática e outras áreas científicas (e.g. Física). Para cada princípio, forneça um exemplo/ ilustração diferente daquele usado em sala de aula.
Quais são as bases dos sistemas de numeração decimal, binário, octal e hexadecimal?
Em geral, as representações decimal, octal e hexadecimal de um número binário contém mais ou menos dígitos do que o número binário?
O maior e menor dígito em qualquer base vale quanto, respectivamente?
Quanto é o valor posicional do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
Quanto é o valor posicional do dígito imediatamente à esquerda do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
Preencha a tabela abaixo com os valores posicionais das quatro posições indicadas, em cada um dos sistemas de numeração indicados:
		Decimal
		1000
		100
		10
		1
		Hexadecimal
		
		256
		
		
		Binário
		
		
		
		
		Octal
		512
		
		8
		
Converta o binário 1101 0101 1000 para octal e hexadecimal.
Converta FACE para binário.
Converta 7316 (octal) para binário.
Converta 4FEC para octal (passe primeiro por binário).
Converta o binário 1101110 para decimal.
Converta 317 (octal) para decimal.
Converta 317, 713 (octal) para decimal.
Converta 10,08 (decimal) para binário.
Converta 417 decimal para binário. Depois forneça os complementos de um e dois.
Qual o resultado quando o complemento de um de um número é adicionado ao próprio número?
Por que um número real é também chamado de “ponto (ou vírgula) flutuante”?
Qual seria a forma normalizada das representações dos números de ponto flutuante (todos decimais):
15,50
22
3,1416...
0,0327
Repita a questão acima no caso dos números hexadecimais:
ABC,123
123, ABC
0,F9.
Quais os três componentes básicos de uma representação para números reais?
O que é bit escondido na representação de floats?
Usando a representação/ilustração (8 bits) do slide 32 do conteúdo da Unidade 02, monte uma tabela com as faixas de valores para os números possíveis de serem representados com esta representação (a exemplo da Tabela no slide 45 – Quadro resumo IEEE 754).
Por que usamos a representação não normalizada juntamente com a normalizada? Isto não gera confusão?
Porquê a necessidade de padronizar a representação de floats?
O que é de fato padronizado no IEEE 754?
O que é um NAN?
Represente com precisão simples e dupla, no padrão IEEE 754, os números decimais:
		i. 0 (zero);
		ii. -0
		iii. 4
		iv. 4725 X 10321
		v. 10-345
Defina overflow e underflow.
C�lculo Num�rico/C�lculo Num�rico - Lista 3.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 03 + Gabarito
Módulo 3 – Erros
Erros estão sempre presentes nas soluções numéricas. Apresente exemplos dos seguintes tipos de erros:
Inerente
de Truncamento
de Representação
de Conversão
De que depende a representação de um número em um computador?
Os resultados dos cálculos realizados dependem da representação dos números nas máquinas utilizadas. Por que na expressão 
 para xi = 0,11, calculado no computador, obtem-se S=3299.99691 e não S= 3300 ?
Defina: Erro Absoluto e Erro Relativo. O que significa “Limitante Superior” no estudo de Erros Absolutos? Dê exemplos.
Que tipo de erro nos dá informações sobre “precisão”? Mostre um exemplo em que a “precisão” é importante.
Apresente exemplos nos quais ocorrem erros de arredondamento e erros de truncamento. 
Complete: Ao se resolver um problema numericamente, a cada etapa e a cada operação realizada, devem surgir diferentes tipos de erros gerados das mais variadas maneiras, e estes erros se propagam e determinam o erro no resultado final obtido. O erro total em uma operação aritmética é composto pelo erro ________________________ e pelo erro no ________________ da operação.
 
8)
 Seja x = 0.857 x 104 e y = 0.6772 x 102. 
Calcular x - y e ER(x-y)sabendo que x, y e estão exatamente representados. 
 
Seja um sistema de aritmética de ponto flutuante de quatro dígitos, base decimal e com acumulador de precisão dupla. Dados os números:
X=0,7237x104 y=0,2145x10-3 e z=0,2585x101
Efetue as seguintes operações e obtenha o erro relativo no resultado, supondo que x, u, e z estão exatamente representados.
a)x+y+z b)x-y-z	 c)x/y 
d)(x.y)/z e)x.(y/z) f) (x+y).z
 
 
 10) 
 
11) Mesma questão para
: 
 12) 
Gabarito da Série de Exercícios (Questões 9 a 12)
9)
 a) x+y+z = 0,7240 x 104 e lERx+y+zl < 0,9998 x 10-3 
 b) x-y-z = 0,7234 x 104 e lERx-y-zl < 1,0002 x 10-3 
 c) x/y = 0,3374 x 108 e lERx/yl < 1/2 x 10-3 
 d) (x.y)/z= 0,6004 e lER(x.y)/zl < 10-3 
 e x.(y/z) = 0,6005 e lERx(y/z)l < 10-3
 f) (x+y).z = 0,1871 x 105 e lER(x+y).zl < 10-3 
10) lERul < 10-t+1 e lERwl < 4/3 x 10-t+1
11) lERul < 10-t+1 e lERwl < 13/8 x10-t+1
12) lERul < 2 x10-t+1 e lERwl < 7/3 x10-t+1
� EMBED Equation.3 ���
� EMBED Equation.3 ���
é menor do que o de 
Sejam � EMBED Equation.3 ��� e � EMBED Equation.3 ��� as representações de x e y obtidas por arredondamento em um computador. Deduza expressões de limitante de erro para mostrar que o limitante de erro relativo de 
e
e
� EMBED Equation.3 ���
� EMBED Equation.3
���
� EMBED Equation.3 ���
� EMBED Equation.3 ���
Supondo que x é representado num computador por � EMBED Equation.3 ���, onde � EMBED Equation.3 ��� é obtido por arredondamento, obtenha os limites superiores para os erros relativos de
� EMBED Equation.3 ���
_1099771095.unknown
_1116913791.unknown
_1116913802.unknown
_1116913711.unknown
_1116913718.unknown
_1099770729.unknown
_1099770977.unknown
_1099769191.unknown
_1099770728.unknown
_1099769190.unknown
_1099767986.unknown
C�lculo Num�rico/C�lculo Num�rico - Motiva��o.ppt
Clique para editar o estilo do título mestre
Clique para editar o estilo do subtítulo mestre
*
*
*
Cálculo Numérico
Profs.: 	Bruno C N Queiroz
	J. Antão B. Moura
	José Eustáquio R. de Queiroz
	Joseana Macêdo Fechine
	Maria Izabel C. Cabral
Introdução
DSC/CCT/UFCG
*
*
*
O que é o Cálculo Numérico ?
Cálculo Numérico – Introdução
*
*
*
O Cálculo Numérico corresponde a um conjunto de ferramentas ou métodos usados para se obter a solução de problemas matemáticos de forma aproximada. 
Esses métodos se aplicam principalmente a problemas que não apresentam uma solução exata, portanto precisam ser resolvidos numericamente.
Cálculo Numérico – Introdução
*
*
*
Exemplo: 
Circuito elétrico composto de uma fonte de tensão e um resistor. 
Solução exata
Introdução de um diodo no circuito:
Solução utilizando métodos numéricos
V
R
i
V
R
D
i
Cálculo Numérico – Introdução
*
*
*
Por que produzir resultados numéricos? 
Cálculo Numérico – Introdução
*
*
*
Um problema de Matemática pode ser resolvido analiticamente, mas esse método pode se tornar impraticável com o aumento do tamanho do problema.
 
	Exemplo:	solução de sistemas de equações 	lineares. 
Cálculo Numérico – Introdução
*
*
*
A existência de problemas para os quais não existem métodos matemáticos para solução (não podem ser resolvidos analiticamente). 
	Exemplos:
	a)				não tem primitiva em forma simples;
	
	b) 	não pode ser resolvido analiticamente;
	c)	equações diferenciais parciais não lineares podem 	ser resolvidas analiticamente só em casos 	particulares.
Cálculo Numérico – Introdução
*
*
*
Cálculo Numérico – Introdução
Os métodos numéricos buscam soluções aproximadas para as formulações matemáticas.
Nos problemas reais, os dados são medidas e, como tais, não são exatos. Uma medida física não é um número, é um intervalo, pela própria imprecisão das medidas. Daí, trabalha-se sempre com a figura do erro, inerente à própria medição.
Os métodos aproximados buscam uma aproximação do que seria o valor exato. Dessa forma é inerente aos métodos se trabalhar com a figura da aproximação, do erro, do desvio.
*
*
*
Cálculo Numérico – Introdução
Função do Cálculo Numérico na Engenharia
“Buscar solucionar problemas técnicos através de métodos numéricos 
 modelo matemático”
*
*
*
Cálculo Numérico – Introdução
Passos para a resolução de problemas
PROBLEMA
MODELAGEM
REFINAMENTO
RESULTADO DE
CIÊNCIAS AFINS
MENSURAÇÃO
ESCOLHA
DE MÉTODOS
ESCOLHA
DE PARÂMETROS
TRUNCAMENTO
DAS ITERAÇÕES
RESULTADO
NUMÉRICO
*
*
*
Cálculo Numérico – Introdução
Fluxograma – Solução Numérica
*
*
*
Cálculo Numérico – Introdução
Influência dos Erros nas Soluções
Exemplo 1: Falha no lançamento de mísseis
(25/02/1991 – Guerra do Golfo – míssil Patriot)
Erro de 0,34 s no cálculo do tempo de lançamento
Limitação na representação numérica (24 bits)
*
*
*
Cálculo Numérico – Introdução
Influência dos Erros nas Soluções
Exemplo 2: Explosão de foguetes
(04/06/1996 – Guiana Francesa – foguete Ariane 5)
Erro de trajetória 36,7 s
após o lançamento 
Limitação na representação numérica (64 bits/ 16 bits)
Prejuízo: U$ 7,5 bilhões
*
*
*
Cálculo Numérico – Introdução
 Aplicações de cálculo numérico na engenharia.
Determinação de raízes de equações
Interpolação de valores tabelados
Integração numérica, entre outros. 
*
*
*
Cálculo Numérico – Plano de Ensino
Objetivos
Ementa
Metodologia, Técnicas de Ensino
Recursos Didáticos
Avaliação
Bibliografia
*
*
*
Cálculo Numérico – Objetivos do Curso
Fornecer condições para que os alunos possam conhecer, calcular, utilizar e aplicar métodos numéricos na solução de problemas de engenharia.
Estudar a construção de métodos numéricos, analisar em que condições se pode ter a garantia de que os resultados computados estão próximos dos exatos, baseados nos conhecimentos sobre os métodos. 
*
*
*
Visão de Engenharia x de Matemática/Computação
Conceitos e entendimentos básicos de CN
Exemplos de custos de “erros numéricos” nas engenharias
Incrementação do perfil profissional
Noções de precisão e eficiência nas soluções
Introdução dos métodos tradicionais
Aplicação de ferramentas disponíveis
O que a disciplina vai oferecer?
*
*
*
Cálculo Numérico – Ementa
Motivação
Conceitos básicos: princípios usados em cálculo numérico, representação binária de números inteiros e reais, Padrão IEEE.
Problemas: geração e propagação de erros.
Resoluções Numéricas: métodos tradicionais para cálculo numérico.
Aplicação: exame de bibliotecas e ferramentas atuais
*
*
*
Módulo I: Motivação e Ferramentas de Suporte
Módulo II: Conceitos Básicos 
Módulo III: Erros Numéricos – Geração e Propagação
Módulo IV: Resolução Numérica de Equações
Módulo V: Resolução Numérica de Sistemas de Equações Lineares 
Módulo VI: Interpolação Polinomial e Ajuste de Curvas 
Módulo VII: Integração e Diferenciação Numéricas
Cálculo Numérico – Programa
*
*
*
Metodologia & Técnicas de Ensino
Aulas Expositivas;
Aulas Práticas em Laboratório;
Atividades individuais e em grupo.
*
*
*
Cálculo Numérico – Recursos Didáticos
Quadro branco;
Retroprojetor, Datashow;
Laboratório de Informática;
Programas de Simulação (Matlab, Mapple, Mathematica).
*
*
*
Cálculo Numérico – Avaliação
Contínua, mediante avaliações individuais e trabalhos em laboratório;
Trabalhos interativos de pesquisa extra-classe individual e em grupo;
Avaliações em sala, individual e em grupo.
*
*
*
Cálculo Numérico – Bibliografia
RUGGIERO, M. A. G. & LOPES, V. L. R.   Cálculo numérico: aspectos teóricos e computacionais. 2.ed.   São Paulo, Makron, 1997.
HATTORI, M. T. H. & QUEIROZ, B. C. N. Métodos e Software Numéricos. Departamento de Sistemas e Computação, Universidade Federal de campina Grande, Campina Grande, 1995.
BARROSO, L. C., BARROSO, M. A., CAMPOS, F. F., CARVALHO, M. L. B. & MAIA, M. L. Cálculo Numérico (Com Aplicações), 2.ed. São Paulo, Editora Arbra, 1987.
CHAPA, S. C. & CANALE, R. P. Numerical Methods for Engineers, McGraw-Hill, 1990.
C�lculo Num�rico/Calculo Num�rico (UFPB).zip
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/DADOOUT.TXT
W=[ 0.800 -0.001207 0.300000
 0.800 0.000393 0.300000
 0.800 -0.000493 0.300000
 0.800 0.001416 0.300000
 0.800 0.000830 0.300000
 0.800 0.000385 0.300000
 0.800 0.000080 0.300000
 0.800 -0.000092 0.300000
 0.800 -0.000137 0.300000
 0.800 -0.000059 0.300000
 0.800 0.000139 0.300000
 0.800 0.000456 0.300000
 0.800 0.000882 0.300000
 0.800 0.001419 0.300000
 0.800 -0.000585 0.300000
 0.800 0.000156 0.300000
 0.800 0.000994 0.300000
 0.800 0.001926
0.300000
 0.800 0.000304 0.300000
 0.800 0.001414 0.300000
 0.800 -0.000035 0.300000
 0.800 0.001239 0.300000
 0.800 -0.000049 0.300000
 0.800 0.001381 0.300000
 0.800 0.000242 0.300000
 0.800 0.001818 0.300000
 0.800 0.000818 0.300000
 0.800 -0.000112 0.300000
 0.800 0.001661 0.300000
 0.800 0.000853 0.300000
 0.800 0.000109 0.300000
 0.800 0.002064 0.300000
 0.800 0.001428 0.300000
 0.800 0.000848 0.300000
 0.800 0.000323 0.300000
 0.800 -0.000150 0.300000
 0.800 0.002063 0.300000
 0.800 0.001679 0.300000
 0.800 0.001341 0.300000
 0.800 0.001048 0.300000
 0.800 0.000799 0.300000
 0.800 0.000591 0.300000
 0.800 0.000424 0.300000
 0.800 0.000296 0.300000
 0.800 0.000205 0.300000
 0.800 0.000150 0.300000
 0.800 0.000131 0.300000
 0.800 0.000144 0.300000
 0.800 0.000191 0.300000
 0.800 0.000268 0.300000
 0.800 0.000375 0.300000
 0.800 0.000511 0.300000
 0.800 0.000674 0.300000
 0.800 0.000864 0.300000
 0.800 0.001079 0.300000
 0.800 0.001318 0.300000
 0.800 0.001580 0.300000
 0.800 0.001865 0.300000
 0.800 0.002171 0.300000
 0.800 0.002497 0.300000
 0.800 0.002843 0.300000
 0.800 0.003207 0.300000
 0.800 0.003588 0.300000
 0.800 0.003986 0.300000
 0.800 0.004400 0.300000
 0.800 0.004829 0.300000
 0.800 0.005272 0.300000
 0.800 0.005729 0.300000
 0.800 0.006198 0.300000
 0.800 0.006679 0.300000
 0.800 0.007172 0.300000
 0.800 0.007675 0.300000
 0.800 0.008188 0.300000
 0.800 0.008711 0.300000
 0.800 0.009242 0.300000
 0.800 0.009781 0.300000
 0.800 0.010327 0.300000
 0.800 0.010881 0.300000
 0.800 0.011441 0.300000
 0.800 0.012006 0.300000
 0.800 0.012577 0.300000
 0.800 0.013153 0.300000
 0.800 0.013733 0.300000
 0.800 0.014317 0.300000
 0.800 0.014904 0.300000
 0.800 0.015494 0.300000
 0.800 0.016087 0.300000
 0.800 0.016682 0.300000
 0.800 0.017279 0.300000
 0.800 0.017877 0.300000
 0.800 0.018476 0.300000
 0.800 0.019075 0.300000
 0.800 0.019675 0.300000
 0.800 0.020275 0.300000
 0.800 0.020874 0.300000
 0.800 0.021473 0.300000
 0.800 0.022071 0.300000
 0.800 0.022667 0.300000
 0.800 0.023262 0.300000
 0.800 0.023856 0.300000
 0.800 0.024447 0.300000
 0.800 0.025036 0.300000
 0.800 0.025623 0.300000
 0.800 0.026206 0.300000
 0.800 0.026787 0.300000
 0.800 0.027365 0.300000
 0.800 0.027940 0.300000
 0.800 0.028511 0.300000
 0.800 0.029079 0.300000
 0.800 0.029642 0.300000
 0.800 0.030202 0.300000
 0.800 0.030758 0.300000
 0.800 0.031309 0.300000
 0.800 0.031856 0.300000
 0.800 0.032399 0.300000
 0.800 0.032936 0.300000
 0.800 0.033470 0.300000
 0.800 0.033998 0.300000
 0.800 0.034521 0.300000
 0.800 0.035040 0.300000
 0.800 0.035553 0.300000
 0.800 0.036061 0.300000
 0.800 0.036564 0.300000
 0.800 0.037061 0.300000
 0.800 0.037553 0.300000
 0.800 0.038040 0.300000
 0.800 0.038521 0.300000
 0.800 0.038997 0.300000
 0.800 0.039467 0.300000
 0.800 0.039931 0.300000
 0.800 0.040390 0.300000
 0.800 0.040843 0.300000
 0.800 0.041290 0.300000
 0.800 0.041732 0.300000
 0.800 0.042167 0.300000
 0.800 0.042597 0.300000
 0.800 0.043022 0.300000
 0.800 0.043440 0.300000
 0.800 0.043853 0.300000
 0.800 0.044259 0.300000
 0.800 0.044660 0.300000
 0.800 0.045056 0.300000
 0.800 0.045445 0.300000
 0.800 0.045829 0.300000
 0.800 0.046207 0.300000
 0.800 0.046579 0.300000
 0.800 0.046945 0.300000
 0.800 0.047306 0.300000
 0.800 0.047661 0.300000
 0.800 0.048011 0.300000
 0.800 0.048355 0.300000
 0.800 0.048693 0.300000
 0.800 0.049026 0.300000
 0.800 0.049353 0.300000
 0.800 0.049674 0.300000
 0.800 0.049991 0.300000
 0.800 0.050301 0.300000
 0.800 0.050607 0.300000
 0.800 0.050907 0.300000
 0.800 0.051202 0.300000
 0.800 0.051491 0.300000
 0.800 0.051775 0.300000
 0.800 0.052055 0.300000
 0.800 0.052329 0.300000
 0.800 0.052598 0.300000
 0.800 0.052861 0.300000
 0.800 0.053120 0.300000
 0.800 0.053374 0.300000
 0.800 0.053624 0.300000
 0.800 0.053868 0.300000
 0.800 0.054108 0.300000
 0.800 0.054342 0.300000
 0.800 0.054573 0.300000
 0.800 0.054798 0.300000
 0.800 0.055019 0.300000
 0.800 0.055236 0.300000
 0.800 0.055448 0.300000
 0.800 0.055655 0.300000
 0.800 0.055859 0.300000
 0.800 0.056058 0.300000
 0.800 0.056253 0.300000
 0.800 0.056443 0.300000
 0.800 0.056630 0.300000
 0.800 0.056812 0.300000
 0.800 0.056991 0.300000
 0.800 0.057165 0.300000
 0.800 0.057336 0.300000
 0.800 0.057503 0.300000
 0.800 0.057666 0.300000
 0.800 0.057825 0.300000
 0.800 0.057981 0.300000
 0.800 0.058133 0.300000
 0.800 0.058281 0.300000
 0.800 0.058426 0.300000
 0.800 0.058568 0.300000
 0.800 0.058706 0.300000
 0.800 0.058841 0.300000
 0.800 0.058972 0.300000
 0.800 0.059101 0.300000
 0.800 0.059226 0.300000
 0.800 0.059460 0.600000
 0.800 0.059854 0.600000
 0.800 0.060403 0.600000
 0.800 0.061100 0.600000
 0.800 0.061939 0.600000
 0.800 0.062914 0.600000
 0.800 0.064020 0.600000
 0.800 0.065251 0.600000
 0.800 0.066602 0.600000
 0.800 0.068067 0.600000
 0.800 0.069642 0.600000
 0.800 0.071322 0.600000
 0.800 0.073101 0.600000
 0.800 0.074976 0.600000
 0.800 0.076941 0.600000
 0.800 0.078992 0.600000
 0.800 0.081125 0.600000
 0.800 0.083335 0.600000
 0.800 0.085619 0.600000
 0.800 0.087972 0.600000
 0.800 0.090391 0.600000
 0.800 0.092872 0.600000
 0.800 0.095412 0.600000
 0.800 0.098005 0.600000
 0.800 0.100651 0.600000
 0.800 0.103344 0.600000
 0.800 0.106082 0.600000
 0.800 0.108861 0.600000
 0.800 0.111680 0.600000
 0.800 0.114534 0.600000
 0.800 0.117420 0.600000
 0.800 0.120337 0.600000
 0.800 0.123281 0.600000
 0.800 0.126250 0.600000
 0.800 0.129241 0.600000
 0.800 0.132252 0.600000
 0.800 0.135280 0.600000
 0.800 0.138324 0.600000
 0.800 0.141381 0.600000
 0.800 0.144449 0.600000
 0.800 0.147526 0.600000
 0.800 0.150610 0.600000
 0.800 0.153698 0.600000
 0.800 0.156791 0.600000
 0.800 0.159884 0.600000
 0.800 0.162978 0.600000
 0.800 0.166069 0.600000
 0.800 0.169157 0.600000
 0.800 0.172241 0.600000
 0.800 0.175318 0.600000
 0.800 0.178387 0.600000
 0.800 0.181447 0.600000
 0.800 0.184497 0.600000
 0.800 0.187535 0.600000
 0.800 0.190561 0.600000
 0.800 0.193573 0.600000
 0.800 0.196570 0.600000
 0.800 0.199550 0.600000
 0.800 0.202514 0.600000
 0.800 0.205460 0.600000
 0.800 0.208388 0.600000
 0.800 0.211295 0.600000
 0.800 0.214183 0.600000
 0.800 0.217049 0.600000
 0.800 0.219893 0.600000
 0.800 0.222715 0.600000
 0.800 0.225514 0.600000
 0.800 0.228288 0.600000
 0.800 0.231039 0.600000
 0.800 0.233764 0.600000
 0.800 0.236464 0.600000
 0.800 0.239138 0.600000
 0.800 0.241786 0.600000
 0.800 0.244407 0.600000
 0.800 0.247001 0.600000
 0.800 0.249567 0.600000
 0.800 0.252106 0.600000
 0.800 0.254617 0.600000
 0.800 0.257099 0.600000
 0.800 0.259552 0.600000
 0.800 0.261977 0.600000
 0.800 0.264373 0.600000
 0.800 0.266739 0.600000
 0.800 0.269076 0.600000
 0.800 0.271383 0.600000
 0.800 0.273661 0.600000
 0.800 0.275910 0.600000
 0.800 0.278128 0.600000
 0.800 0.280317 0.600000
 0.800 0.282475 0.600000
 0.800 0.284604 0.600000
 0.800 0.286703 0.600000
 0.800 0.288772 0.600000
 0.800 0.290811 0.600000
 0.800 0.292821 0.600000
 0.800 0.294800 0.600000
 0.800 0.296750 0.600000
 0.800 0.298671 0.600000
 0.800 0.300561 0.600000
 0.800 0.302423 0.600000
 0.800 0.304255 0.600000
 0.800 0.306058 0.600000
 0.800 0.307832 0.600000
 0.800 0.309577 0.600000
 0.800 0.311294 0.600000
 0.800 0.312982 0.600000
 0.800 0.314642 0.600000
 0.800 0.316273 0.600000
 0.800 0.317877 0.600000
 0.800 0.319452 0.600000
 0.800 0.321001 0.600000
 0.800 0.322522 0.600000
 0.800 0.324015 0.600000
 0.800 0.325482 0.600000
 0.800 0.326923 0.600000
 0.800 0.328337 0.600000
 0.800 0.329724 0.600000
 0.800 0.331086 0.600000
 0.800 0.332422 0.600000
 0.800 0.333733 0.600000
 0.800 0.335019 0.600000
 0.800 0.336280 0.600000
 0.800 0.337516 0.600000
 0.800 0.338728 0.600000
 0.800 0.339915 0.600000
 0.800 0.341079 0.600000
 0.800 0.342220 0.600000
0.800 0.343337 0.600000
 0.800 0.344431 0.600000
 0.800 0.345503 0.600000
 0.800 0.346552 0.600000
 0.800 0.347579 0.600000
 0.800 0.348585 0.600000
 0.800 0.349569 0.600000
 0.800 0.350531 0.600000
 0.800 0.351473 0.600000
 0.800 0.352394 0.600000
 0.800 0.353294 0.600000
 0.800 0.354175 0.600000
 0.800 0.355036 0.600000
 0.800 0.355877 0.600000
 0.800 0.356699 0.600000
 0.800 0.357502 0.600000
 0.800 0.358287 0.600000
 0.800 0.359053 0.600000
 0.800 0.359801 0.600000
 0.800 0.360532 0.600000
 0.800 0.361244 0.600000
 0.800 0.361940 0.600000
 0.800 0.362619 0.600000
 0.800 0.363281 0.600000
 0.800 0.363926 0.600000
 0.800 0.364556 0.600000
 0.800 0.365169 0.600000
 0.800 0.365768 0.600000
 0.800 0.366350 0.600000
 0.800 0.366918 0.600000
 0.800 0.367471 0.600000
 0.800 0.368010 0.600000
 0.800 0.368534 0.600000
 0.800 0.369044 0.600000
 0.800 0.369540 0.600000
 0.800 0.370024 0.600000
 0.800 0.370493 0.600000
 0.800 0.370950 0.600000
 0.800 0.371394 0.600000
 0.800 0.371826 0.600000
 0.800 0.372245 0.600000
 0.800 0.372652 0.600000
 0.800 0.373048 0.600000
 0.800 0.373432 0.600000
 0.800 0.373805 0.600000
 0.800 0.374166 0.600000
 0.800 0.374517 0.600000
 0.800 0.374857 0.600000
 0.800 0.375187 0.600000
 0.800 0.375506 0.600000
 0.800 0.375816 0.600000
 0.800 0.376116 0.600000
 0.800 0.376406 0.600000
 0.800 0.376687 0.600000
 0.800 0.376958 0.600000
 0.800 0.377221 0.600000
 0.800 0.377475 0.600000
 0.800 0.377720 0.600000
 0.800 0.377957 0.600000
 0.800 0.378186 0.600000
 0.800 0.378407 0.600000
 0.800 0.378620 0.600000
 0.800 0.378826 0.600000
 0.800 0.379023 0.600000
 0.800 0.379214 0.600000
 0.800 0.379398 0.600000
 0.800 0.379574 0.600000
 0.800 0.379744 0.600000
 0.800 0.379907 0.600000
 0.800 0.380064 0.600000
 0.800 0.380215 0.600000
 0.800 0.380359 0.600000
 0.800 0.380498 0.600000
 0.800 0.380742 0.900000
 0.800 0.381145 0.900000
 0.800 0.381699 0.900000
 0.800 0.382399 0.900000
 0.800 0.383239 0.900000
 0.800 0.384212 0.900000
 0.800 0.385315 0.900000
 0.800 0.386540 0.900000
 0.800 0.387883 0.900000
 0.800 0.389339 0.900000
 0.800 0.390903 0.900000
 0.800 0.392569 0.900000
 0.800 0.394334 0.900000
 0.800 0.396192 0.900000
 0.800 0.398139 0.900000
 0.800 0.400170 0.900000
 0.800 0.402282 0.900000
 0.800 0.404470 0.900000
 0.800 0.406730 0.900000
 0.800 0.409059 0.900000
 0.800 0.411452 0.900000
 0.800 0.413906 0.900000
 0.800 0.416417 0.900000
 0.800 0.418982 0.900000
 0.800 0.421597 0.900000
 0.800 0.424259 0.900000
 0.800 0.426965 0.900000
 0.800 0.429712 0.900000
 0.800 0.432497 0.900000
 0.800 0.435317 0.900000
 0.800 0.438169 0.900000
 0.800 0.441050 0.900000
 0.800 0.443958 0.900000
 0.800 0.446891 0.900000
 0.800 0.449845 0.900000
 0.800 0.452818 0.900000
 0.800 0.455809 0.900000
 0.800 0.458815 0.900000
 0.800 0.461833 0.900000
 0.800 0.464862 0.900000
 0.800 0.467900 0.900000
 0.800 0.470944 0.900000
 0.800 0.473993 0.900000
 0.800 0.477046 0.900000
 0.800 0.480099 0.900000
 0.800 0.483153 0.900000
 0.800 0.486204 0.900000
 0.800 0.489252 0.900000
 0.800 0.492295 0.900000
 0.800 0.495331 0.900000
 0.800 0.498360 0.900000
 0.800 0.501380 0.900000
 0.800 0.504390 0.900000
 0.800 0.507388 0.900000
 0.800 0.510373 0.900000
 0.800 0.513344 0.900000
 0.800 0.516301 0.900000
 0.800 0.519242 0.900000
 0.800 0.522166 0.900000
 0.800 0.525073 0.900000
 0.800 0.527960 0.900000
 0.800 0.530829 0.900000
 0.800 0.533677 0.900000
 0.800 0.536504 0.900000
 0.800 0.539310 0.900000
 0.800 0.542093 0.900000
 0.800 0.544854 0.900000
 0.800 0.547590 0.900000
 0.800 0.550303 0.900000
 0.800 0.552991 0.900000
 0.800 0.555654 0.900000
 0.800 0.558291 0.900000
 0.800 0.560903 0.900000
 0.800 0.563488 0.900000
 0.800 0.566046 0.900000
 0.800 0.568576 0.900000
 0.800 0.571080 0.900000
 0.800 0.573556 0.900000
 0.800 0.576003 0.900000
 0.800 0.578423 0.900000
 0.800 0.580813 0.900000
 0.800 0.583176 0.900000
 0.800 0.585509 0.900000
 0.800 0.587813 0.900000
 0.800 0.590089 0.900000
 0.800 0.592334 0.900000
 0.800 0.594551 0.900000
 0.800 0.596738 0.900000
 0.800 0.598896 0.900000
 0.800 0.601024 0.900000
 0.800 0.603123 0.900000
 0.800 0.605192 0.900000
 0.800 0.607232 0.900000
 0.800 0.609242 0.900000
 0.800 0.611223 0.900000
 0.800 0.613175 0.900000
 0.800 0.615097 0.900000
 0.800 0.616990 0.900000
 0.800 0.618854 0.900000
 0.800 0.620689 0.900000
 0.800 0.622495 0.900000
 0.800 0.624272 0.900000
 0.800 0.626021 0.900000
 0.800 0.627741 0.900000
 0.800 0.629433 0.900000
 0.800 0.631097 0.900000
 0.800 0.632733 0.900000
 0.800 0.634341 0.900000
 0.800 0.635921 0.900000
 0.800 0.637474 0.900000
 0.800 0.639000 0.900000
 0.800 0.640499 0.900000
 0.800 0.641972 0.900000
 0.800 0.643417 0.900000
 0.800 0.644837 0.900000
 0.800 0.646230 0.900000
 0.800 0.647598 0.900000
 0.800 0.648940 0.900000
 0.800 0.650257 0.900000
 0.800 0.651548 0.900000
 0.800 0.652815 0.900000
 0.800 0.654058 0.900000
 0.800 0.655276 0.900000
 0.800 0.656470 0.900000
 0.800 0.657640 0.900000
 0.800 0.658787 0.900000
 0.800 0.659911 0.900000
 0.800 0.661012 0.900000
 0.800 0.662090 0.900000
 0.800 0.663146 0.900000
 0.800 0.664180 0.900000
 0.800 0.665192 0.900000
 0.800 0.666182 0.900000
 0.800 0.667152 0.900000
 0.800 0.668100 0.900000
 0.800 0.669028 0.900000
 0.800 0.669935 0.900000
 0.800 0.670823 0.900000
 0.800 0.671690 0.900000
 0.800 0.672538 0.900000
 0.800 0.673367 0.900000
 0.800 0.674177 0.900000
 0.800 0.674968 0.900000
 0.800 0.675741 0.900000
 0.800 0.676496 0.900000
 0.800 0.677233 0.900000
 0.800 0.677952 0.900000
 0.800 0.678654 0.900000
 0.800 0.679339 0.900000
 0.800 0.680008 0.900000
 0.800 0.680660 0.900000
 0.800 0.681296 0.900000
 0.800 0.681916 0.900000
 0.800 0.682520 0.900000
 0.800 0.683109 0.900000
 0.800 0.683683 0.900000
 0.800 0.684243 0.900000
 0.800 0.684787 0.900000
 0.800 0.685317 0.900000
 0.800 0.685834 0.900000
 0.800 0.686336 0.900000
 0.800 0.686825 0.900000
 0.800 0.687301 0.900000
 0.800 0.687763 0.900000
 0.800 0.688213 0.900000
 0.800 0.688650 0.900000
 0.800 0.689075 0.900000
 0.800 0.689488 0.900000
 0.800 0.689889 0.900000
 0.800 0.690279 0.900000
 0.800 0.690657 0.900000
 0.800 0.691024 0.900000
 0.800 0.691380 0.900000
 0.800 0.691725 0.900000
 0.800 0.692060 0.900000
 0.800 0.692384 0.900000
 0.800 0.692699 0.900000
 0.800 0.693003 0.900000
 0.800 0.693298 0.900000
 0.800 0.693584 0.900000
 0.800 0.693861 0.900000
 0.800 0.694128 0.900000
 0.800 0.694386 0.900000
 0.800 0.694636 0.900000
 0.800 0.694878 0.900000
 0.800 0.695111 0.900000
 0.800 0.695336 0.900000
 0.800 0.695554 0.900000
 0.800 0.695763 0.900000
 0.800 0.695965 0.900000
 0.800 0.696160 0.900000
 0.800 0.696348 0.900000
 0.800 0.696528 0.900000
 0.800 0.696702 0.900000
 0.800 0.696869 0.900000
 0.800 0.697030 0.900000
 0.800 0.697184 0.900000
 0.800 0.697332 0.900000
 0.800 0.697474 0.900000
 0.800 0.697610 0.900000]; 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MATRIZ.TXT
3 3 5
10. 1. 1.
1. 10. 1.
1. 1. 10.
12.
12.
12.
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MEUNUM.TXT
4.
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN1.DOC
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA:Março/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício I
A fórmula geral das bases numéricas (FGBN) é:
1)Supondo M10=12345, um número inteiro na base 10 (B10), usando a FGBN explique que é ai, Bi, m e n. Qual a fórmula do polinômio de M10?
2)Passar os seguintes números para a base decimal: M16=1DFE; M8=7643; M4=33210; M2=111100010101001.
3)Sabendo-se que M2=111100010101001. Ache
M4; M8 e M16.
4)Sabendo-se que M9=84675, ache M3.
5)Conhecendo-se M10=45965, calcule M2.
6) "Dois exploradores espaciais encontram os restos de uma cidade marciana. Após muitas pesquisas, eles não encontram nenhuma representação ou desenho dos marcianos. Durante a exploração das ruínas da cidade marciana, eles encontram uma pequena caixa de pedra fechada e lacrada e com os sinais  gravados na tampa da caixa.. Dentro da caixa de pedra eles contam 21 pequenas bolas de pedra.". Pergunta-se: Quantos dedos tinham os marcianos?
7)Usando um byte como se pode representar números para a)contagem; b)complemento de um; c)complemento de dois. Quais os valores maiores e menores de cada representação?
8)Representar os seguintes números na forma inteiro/fração. Utilize 8 algarismos para a rpresentação inteira e 6 algarismos para a representação fracionária. a)M10=154325.000345; b)M16=ACDE$F769=D0005AF; c)M2=1000010.0001011111.
9)Converta os seguintes números decimais para binário:0.08463; 0.789304; 0.95001. Use representação com oito bits.
10)O que significam mantissa e característica (expoente)?
11)Represente os seguintes números decimais em números binários em ponto flutuante:
1256.34501; 845.00234; 0.00004563; -345.23. Use mantissa de 24 bits e expoente de oito bits.
Exercício II
1)"Dois exploradores andinos encontram os restos de uma cidade Inca no Peru. Eles observam, numa pedra, a gravação do Deus Inca sendo adorado por um grupo de sacerdotes. Os exploradores observam espantados que o Deus Inca e os sacerdotes estavam representados sem uma das mãos isto é, eram manetas. Continuando a exploração das ruínas da cidade, os arqueólogos encontram uma pequena caixa de pedra fechada e lacrada contendo 6 pequenas bolas de pedra. Na face externa da caixa, eles observam dois caracteres gravados em baixo relevo."
- Pergunta-se: Quais os caracteres que estavam desenhados na tampa da caixa?
2)Faça o arredondamento dos seguintes números para 3 dígitos significativos. Determine os seus valores absolutos  e os seus erros relativos  obtidos dos seus números aproximados:
a)2.1514; b)0.16152; c)0.01204; d)1.225; e)-0.0015281; f)-392.85; 
g)0.1564; h)0.003922; i)625.55; j)-0.0015281
3)Determine os erros absolutos dos seguintes números aproximadose forneça os seus erros relativos:
a)a=13267 =0.1% ; b)a=2.32 =0.7% ; c)a=35.72 =1.% ; d)a=0.896 =10% ; e)a=232.44 =1% 
4)Foram obtidos a partir de medições os seguintes ângulos. Determine os erros relativos dos números supondo o erro de medição igual a 1%.
a)21o37'3'' b)45o; c)1o10''; d)75o20'44''
5)Determine o número de dígitos corretos sendo dados os seus erros absolutos.
a)x=0.3941 x=0.25.10-2;
a)x=0.1132 x=0.1.10-3;
a)x=-0.2113 x=0.5.10-2;
5)Determine o número de dígitos corretos sendo dados os seus erros relativos.
a)a=1.8921 x=0.1.10-2;
b)a=0.2218 x=0.2.10-1;
c)a=0.02425 x=0.5.10-2
6)Encontre a soma dos números aproximados e indique os seus erros.
a)0.145+321+78.2 (todos dígitos corretos)
b)0.301+193.1+11.58
c)398.5-72.28+0.34567
d)x1+x2-x3, onde x1=-197.6 x1=0.2; x2=23.44 x2=0.22; x3=201.55 x1=0.17
7)Encontre os produtos dos números aproximados e indique os erros.
a)3.49 * 8.6; b)25.1 * 1.743; c)0.02 * 16.5; d)0.253 * 654 * 83.6
8)Encontre os quocientes dos seguintes números aproximados.
a)5.684/5.032; b)0.144/1.2; c)216/4; d)726.676/829; e)754.9367/36.5
9)Os lados de um retângulo são iguais a (4.02±0.01)m, (4.96±0.01)m. Calcule a sua área.
10)Os lados de um triângulo agudo são (12.1±0.01)cm, (25.21±0.01)m. Calcule a tangente ao ângulo oposto ao primeiro lado.
11)O raio R de um círculo foi medido com uma acurácia de 0.5cm e com valor 12cm. Encontre o erro absoluto e erro relativo da medida da área do círculo.
12)A altura h e o raio R do círculo base do cilindro foram medidos com acurácia de 0.5%. Qual é o erro relativo limite obtido na computação do volume do cilindro?
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício III
Fig.1 Duas classes delimitadas pela reta x2=x1+1.
1)Usando x2=ax1+b. Qual é a equação da reta que passa pelos pontos (1.,0.) e (0.,-1.)? Qual a diferença entre esta reta e a mostrada na Fig.1? Desenhe esta reta na Fig.1.
2)Usando x2=ax1+b. Qual é a equação da reta que passa pelos pontos (-1.,0.) e (0.,0.5)? Qual o ponto de intesecção entre esta reta e a reta mostrada na Fig.1? Qual a declividade desta reta e a declividade da reta da Fig.1? Desenhe esta reta na Fig.1.
3)Escreva as equações das retas dos exercícios 1 e 2 usando R = W2x2 + W1x1 + W0. 
4)O que deve mudar na reta do exercício 1 para ela se tornar a reta da Fig.1?
5)O que deve mudar na reta do exercício 2 para ela se tornar a reta da Fig.1?
6)Qual o peso da reta R=W2x2+W1x1+W0 mais sensível a mudanças no seu valor (W2, W1 ou W0)?
7)Quais são as retas perpendiculares as retas dos exercícios 1 e 2. Mostre na forma x2=ax1+b e R = W2x2 + W1x1 + W0. Mostre a fórmula utilizada.
8)Qual a derivada das retas dos exercícios 1, 2 e 7?
9)Onde as retas dos exercícios 1, 2 e 7 interceptam o eixo x1?
10)Onde as retas paralelas as abscissas e as retas paralelas as ordenadas interceptam a)o eixo dos y; b)o eixo dos x?.
�
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício IV
1)Desenhe as seguintes funções: a)f(x)=1-cos(x); b)f(x)=seno(x)-0.8; c)f(x)=1-tg(x); d)f(x)=x2+1; e)f(x)=x2-1; f)f(x)=seno(x)-2*cos(x).
2)Mostre graficamente os (ou o) pontos de interseção com o eixo dos x (abscissa) das curvas do exercício 1.
3)Calcule e desenhe as derivadas das funções do exercício 1.
4)De acordo com o teorema de Bolzano quais são os intervalos em que as funções do exercício 1 possuem pelo menos uma raiz?
5)Calcule as raízes dos seguintes polinômios: a)p(x)=ax2+bx+c=0; b)p(x)=x2-(a+b)bx+ab=0. Encontre as raízes dos polinômios a) e b) e os desenhe 1)a=1, b=-2 e c=-1; 2)a=1, b=2 e c=1;
�
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
EXERCÍCIO V
1)Calcular as raízes das seguintes funções usando os métodos a)Zoom; b)Bissecção; c)Iteração linear.
1.1)f(x)=x2-5 
1.2)f(x)=x2-x-2; No caso de iteraçao linear use cn1 para f(x) e cn2 para x=x2-2; x=sqrt(2+x); x=1+2/x e x=x-(x2-x-2)/m com m(0.
1.3)f(x)=M-E+e*seno(E); para M=0.5 e e=0.2
1.4)f(x)=x3+1.9x2-1.3x-2.2=0.
1.5)f(x)=x*ln(x)-3.2
1.6)f(x)=5log(x)-2+0.4x
1.7)f(x)=x2+0.96x-2.08
1.8)Represente as funções 1.1; 1.3; 1.6 e 1.7 na forma x=g(x) da iteração linear.
�
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA:1998/2
PROFESSOR:José Homero Feitosa Cavalcanti
LABORATÓRIO I
PRÁTICA
Utilize o programa cn1.exe para encontrar a raiz quadrada do seu número na lista de presença. O seu número de presença deve ser armazenado no arquivo meunum.txt. Faça usando os métodos a)Zoom; b)Bissecção. Apresente os resultados para 5 iterações (mostre os gráficos obtidos). Qual dos dois métodos convergiu mais rapidamente? Compare os dois métodos.
LABORATÓRIO II
PRÁTICA
Utilize o programa cn2.exe para encontrar a raiz de um polinômio de segundo
grau com três diferentes funções g(x). O inverso do seu número da lista de presença deverá ser adicionado à raiz inicial que você escolheu. Faça 5 iterações para cada tipo de função g(x) e apresente os resultados da última das 5 iterações (mostre os gráficos obtidos). Explique o valor de g'(x) no intervalo em que se encontra a raiz (justifique a convergência ou não convergência). Observe-se que são três tipos de funções g(x), duas raízes, devem ser fornecidos os resultados em 6 gráficos acompanhados das explicações (o valor de g'(x) no intervalo em que existe a raiz).
�
LABORATÓRIO III
PRÁTICA
Utilize o programa cn3.exe para solucionar um sistema de equações lineares pelo método de Gauss-Seidel.
O inverso do seu número da lista de presença deverá ser adicionado à raiz inicial que você escolheu um dos sistemas de equações lineares mostrados abaixo. Qual deles converge mais rápido (explique)? Qual o método utilizado no programa CN3.c, deslocamentos simultâneos ou deslocamentos sucessivos? Explique. Modifique o programa CN3.c para o Gauss-Seidel com deslocamentos simultâneos (sugestão, faça um novo vetor float x[11]).
10x1 + x2 + x3 = 12(1+1/sn)
 x1 + 10x2 + x3 = 12(1+1/sn)
 x1 + x2 + 10x3 = 12(1+1/sn)
 x1 + 10x2 + x3 = 12(1+1/sn)
 10x1 + x2 + x3 = 12(1+1/sn)
 x1 + x2 + 10x3 = 12(1+1/sn)
 x1 + x2 + 10x3 = 12(1+1/sn)
 x1 + 10x2 + x3 = 12(1+1/sn)
 10x1 + x2 + x3 = 12(1+1/sn)
�
LABORATÓRIO IV
PRÁTICA
Utilize o programa motorcc.exe para simular um motor elétrico de corrente contínua utilizando o método de Runge Kutta de Quarta ordem. Apresente os parâmetros do motor. Faça o mesmo utilizando o método de Euler utilizando Ra=1.+1/(10*seu_numero).
_950446773.doc

_951565832.doc
A
B
x1
-1
1
x2
_950445568.unknown
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN3.DOC
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA: Julho/1999
PROFESSOR: José Homero Feitosa Cavalcanti
LABORATÓRIO III
PRÁTICA
Utilize o programa matrizes para solucionar um sistema de equações lineares pelos métodos “Esquemas Compactos” e Gauss-Seidel. O inverso do seu número da lista de presença deverá ser adicionado à primeira raiz. O sistema na forma Ax=b deverá ter o vetor b modificado como mostrado abaixo. 
Sistema 1
10x1 + x2 + x3 = 12+10/sn
x1 + 10x2 + x3 = 12+1/sn
x1 + x2 + 10x3 = 12+1/sn
 Sistema 2
x1 + 10x2 + x3 = 12+1/sn
10x1 + x2 + x3 = 12+10/sn
x1 + x2 + 10x3 = 12+1/sn
Sistema 3
x1 + x2 + 10x3 = 12+1/sn
x1 + 10x2 + x3 = 12+1/sn
10x1 + x2 + x3 = 12+10/sn
1)Qual dos sistemas de equações mostrados acima converge ou não converge quando solucionados utilizando os métodos Gauss-Seidel e “Esquemas Compactos” (explique)? Por que o método Gauss-Seidel não converge para alguns dos sistemas mostrados acima?
2)Qual o método utilizado no programa matrizes.for, deslocamentos simultâneos ou deslocamentos sucessivos? Explique. 
3)Modifique o programa matrizes.for para o método Gauss-Seidel com deslocamentos simultâneos (sugestão, faça um novo vetor x(i,1) a cada iteração). Apresente os resultados obtidos rodando o programa matrizes.for para o Sistema 1 mostrado acima. 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN4.DOC
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA: 1999/1
PROFESSOR: José Homero Feitosa Cavalcanti
LABORATÓRIO IV
Parâmetros do motor CC
As variáveis de estado do sistema motor CC podem ser definidas como (t), (t) e Ia(t). O modelo de estado na forma contínua do motor CC é mostrado na equação 1. A resistência dos enrolamentos de armadura representada por Ra, a indutância de armadura por La, a inércia do rotor do motor por Jm, o coeficiente de atrito viscoso por Bm, a constante de torque por Ki, e a constante de fcem por K Sendo a indutância da armadura muito pequena [D'azzo, 1988][Ogata, 1982], a constante de tempo elétrica pode ser dada por =(RaJm)/(RaBm+KbKi), e a constante de acionamento do motor CC pode ser dada por =Ki/(RaBm+KbKi) [Dessaint et alii, 1990]. 
 
��EMBED Equation.3 +
��EMBED Equation.3	(1)
dIa(t)/dt = -(Ra/La)Ia(t)-(Kb/La)(t)+Ea(t)/La	(2)
d(t)/dt = Ki/JmIa(t)-(Bm/Jm)(t)-Tl(t)/Jm	(3)
d(t)/dt = (t)		(4)
O modelo contínuo de segunda e de primeira ordem da função de transferência do motor CC são representados pelas equações 5 e 6
G1(s) = 
		(5)
G2(s) = 
		(6)
Utilize o programa motorcc.exe (motorcc1.exe) para simular um motor elétrico de corrente contínua (eq.2 e eq.3, corrente de armadura e velocidade) utilizando o método de Runge-Kutta de Quarta ordem e o método de Euler. Apresente os parâmetros do motor e utilize a resistência da armadura com o seguinte valor Ra=1.+1/(10*seu_numero).
Implemente o método de Runge-Kutta para calcular o deslocamento do eixo do motor cc (eq.4).
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/QC.INI
QC����_�
��p�����������������
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/cn1.zip
CN1.EXE
CN1.DOC
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA:Março/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício I
A fórmula geral das bases numéricas (FGBN) é:
1)Supondo M10=12345, um número inteiro na base 10 (B10), usando a FGBN explique que é ai, Bi, m e n. Qual a fórmula do polinômio de M10?
2)Passar os seguintes números para a base decimal: M16=1DFE; M8=7643; M4=33210; M2=111100010101001.
3)Sabendo-se que M2=111100010101001. Ache M4; M8 e M16.
4)Sabendo-se que M9=84675, ache M3.
5)Conhecendo-se M10=45965, calcule M2.
6) "Dois exploradores espaciais encontram os restos de uma cidade marciana. Após muitas pesquisas, eles não encontram nenhuma representação ou desenho dos marcianos. Durante a exploração das ruínas da cidade marciana, eles encontram uma pequena caixa de pedra fechada e lacrada e com os sinais  gravados na tampa da caixa.. Dentro da caixa de pedra eles contam 21 pequenas bolas de pedra.". Pergunta-se: Quantos dedos tinham os marcianos?
7)Usando um byte como se pode representar números para a)contagem; b)complemento de um; c)complemento de dois. Quais os valores maiores e menores de cada representação?
8)Representar os seguintes números na forma inteiro/fração. Utilize 8 algarismos para a rpresentação inteira e 6 algarismos para a representação fracionária. a)M10=154325.000345; b)M16=ACDE$F769=D0005AF; c)M2=1000010.0001011111.
9)Converta os seguintes números decimais para binário:0.08463; 0.789304; 0.95001. Use representação com oito bits.
10)O que significam mantissa e característica (expoente)?
11)Represente os seguintes números decimais em números binários em ponto flutuante:
1256.34501; 845.00234; 0.00004563; -345.23. Use mantissa de 24 bits e expoente de oito bits.
Exercício II
1)"Dois exploradores andinos encontram os restos de uma cidade Inca no Peru. Eles observam, numa pedra, a gravação do Deus Inca sendo adorado por um grupo de sacerdotes. Os exploradores observam espantados que o Deus Inca e os sacerdotes estavam representados sem uma das mãos isto é, eram manetas. Continuando a exploração das ruínas da cidade, os arqueólogos encontram uma pequena caixa de pedra fechada e lacrada contendo 6 pequenas bolas de pedra. Na face externa da caixa, eles observam dois caracteres gravados em baixo relevo."
- Pergunta-se: Quais os caracteres que estavam desenhados na tampa da caixa?
2)Faça o arredondamento dos seguintes números para 3 dígitos significativos. Determine os seus valores absolutos  e os seus erros relativos  obtidos dos seus números aproximados:
a)2.1514; b)0.16152; c)0.01204; d)1.225; e)-0.0015281; f)-392.85; 
g)0.1564; h)0.003922; i)625.55; j)-0.0015281
3)Determine os erros absolutos dos seguintes números aproximadose forneça os seus erros relativos:
a)a=13267 =0.1% ; b)a=2.32 =0.7% ; c)a=35.72 =1.% ; d)a=0.896 =10% ; e)a=232.44 =1% 
4)Foram obtidos a partir de medições os seguintes ângulos. Determine os erros relativos dos números supondo o erro de medição igual a 1%.
a)21o37'3'' b)45o; c)1o10''; d)75o20'44''
5)Determine o número de dígitos corretos sendo dados os seus erros absolutos.
a)x=0.3941 x=0.25.10-2;
a)x=0.1132 x=0.1.10-3;
a)x=-0.2113 x=0.5.10-2;
5)Determine o número de dígitos corretos sendo dados os seus erros relativos.
a)a=1.8921 x=0.1.10-2;
b)a=0.2218 x=0.2.10-1;
c)a=0.02425 x=0.5.10-2
6)Encontre a soma dos números aproximados e indique os seus erros.
a)0.145+321+78.2 (todos dígitos corretos)
b)0.301+193.1+11.58
c)398.5-72.28+0.34567
d)x1+x2-x3, onde x1=-197.6 x1=0.2; x2=23.44 x2=0.22; x3=201.55 x1=0.17
7)Encontre os produtos dos números aproximados e indique os erros.
a)3.49 * 8.6; b)25.1 * 1.743; c)0.02 * 16.5; d)0.253 * 654 * 83.6
8)Encontre os quocientes dos seguintes números aproximados.
a)5.684/5.032; b)0.144/1.2; c)216/4; d)726.676/829; e)754.9367/36.5
9)Os lados de um retângulo são iguais a (4.02±0.01)m, (4.96±0.01)m. Calcule a sua área.
10)Os lados de um triângulo agudo são (12.1±0.01)cm, (25.21±0.01)m. Calcule a tangente ao ângulo oposto ao primeiro lado.
11)O raio R de um círculo foi medido com uma acurácia de 0.5cm e com valor 12cm. Encontre o erro absoluto e erro relativo da medida da área do círculo.
12)A altura h e o raio R do círculo base do cilindro foram medidos com acurácia de 0.5%. Qual é o erro relativo limite obtido na computação do volume do cilindro?
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício III
Fig.1 Duas classes delimitadas pela reta x2=x1+1.
1)Usando x2=ax1+b. Qual é a equação da reta que passa pelos pontos (1.,0.) e (0.,-1.)? Qual a diferença entre esta reta e a mostrada na Fig.1? Desenhe esta reta na Fig.1.
2)Usando x2=ax1+b. Qual é a equação da reta que passa pelos pontos (-1.,0.) e (0.,0.5)? Qual o ponto de intesecção entre esta reta e a reta mostrada na Fig.1? Qual a declividade desta reta e a declividade da reta da Fig.1? Desenhe esta reta na Fig.1.
3)Escreva as equações das retas dos exercícios 1 e 2 usando R = W2x2 + W1x1 + W0. 
4)O que deve mudar na reta do exercício 1 para ela se tornar a reta da Fig.1?
5)O que deve mudar na reta do exercício 2 para ela se tornar a reta da Fig.1?
6)Qual o peso da reta R=W2x2+W1x1+W0 mais sensível a mudanças no seu valor (W2, W1 ou W0)?
7)Quais são as retas perpendiculares as retas dos exercícios 1 e 2. Mostre na forma x2=ax1+b e R = W2x2 + W1x1 + W0. Mostre a fórmula utilizada.
8)Qual a derivada das retas dos exercícios 1, 2 e 7?
9)Onde as retas dos exercícios 1, 2 e 7 interceptam o eixo x1?
10)Onde as retas paralelas as abscissas e as retas paralelas as ordenadas interceptam a)o eixo dos y; b)o eixo dos x?.
�
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
Exercício IV
1)Desenhe as seguintes funções: a)f(x)=1-cos(x); b)f(x)=seno(x)-0.8; c)f(x)=1-tg(x); d)f(x)=x2+1; e)f(x)=x2-1; f)f(x)=seno(x)-2*cos(x).
2)Mostre graficamente os (ou o) pontos de interseção com o eixo dos x (abscissa) das curvas do exercício 1.
3)Calcule e desenhe as derivadas das funções do exercício 1.
4)De acordo com o teorema de Bolzano quais são os intervalos em que as funções do exercício 1 possuem pelo menos uma raiz?
5)Calcule as raízes dos seguintes polinômios: a)p(x)=ax2+bx+c=0; b)p(x)=x2-(a+b)bx+ab=0. Encontre as raízes dos polinômios a) e b) e os desenhe 1)a=1, b=-2 e c=-1; 2)a=1, b=2 e c=1;
�
�
UNIVERSIDADE FEDERAL DA PARAÍBA
CENTRO DE CIÊNCIAS E TECNOLOGIA
COORDENAÇÃO DOS CURSOS DE
GRADUAÇÃO EM ENGENHARIA ELÉTRICA
CÁLCULO NUMÉRICO
DATA:Novembro/1998
PROFESSOR:José Homero Feitosa Cavalcanti
EXERCÍCIO V
1)Calcular as raízes das seguintes funções usando os métodos a)Zoom; b)Bissecção; c)Iteração linear.
1.1)f(x)=x2-5 
1.2)f(x)=x2-x-2; No caso de iteraçao linear use cn1 para f(x) e cn2 para x=x2-2; x=sqrt(2+x); x=1+2/x e x=x-(x2-x-2)/m com m(0.
1.3)f(x)=M-E+e*seno(E); para M=0.5 e e=0.2
1.4)f(x)=x3+1.9x2-1.3x-2.2=0.
1.5)f(x)=x*ln(x)-3.2
1.6)f(x)=5log(x)-2+0.4x
1.7)f(x)=x2+0.96x-2.08
1.8)Represente as funções 1.1; 1.3; 1.6 e 1.7 na forma x=g(x) da iteração linear.
PRÁTICA
Utilize o programa cn1.exe para encontrar a raiz quadrada do seu número na lista de presença. O seu número de presença deve ser armazenado no arquivo meunum.txt. Faça usando os métodos a)Zoom; b)Bissecção. Apresente os resultados para 5 iterações (mostre os gráficos obtidos). Qual dos dois métodos convergiu mais rapidamente? Compare os dois métodos.
�
_950446773.doc

_951565832.doc
A
B
x1
-1
1
x2
_950445568.unknown
CN1.C
#include <graph.h>
#include <time.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
struct videoconfig vc;
struct rccoord rcoord;
int TMSx,TMSy;
float erro,raiz,a0,b0,x[102],y[102],h,max,valor,num;
int i,iter,j;
char buffer[81];
main()
{
FILE *fp_in;
fp_in = fopen("meunum.txt","r");
fscanf(fp_in,"%f",&num);
fclose(fp_in);
erro=0.;
a0=0.;
b0=0.;
janela();
_settextposition(1,1);
_outtext("METODO DO ZOOM PARA ACHAR AS RAIZES DA FUNCAO y=x*x-C");
_settextposition(2,1);
_outtext("C = N, N (real) eh o seu numero na lista de presenca");
_settextposition(3,1);
_outtext("C deve ser gravado no arquivo meunum.txt");
_settextposition(4,1);
_outtext("Forneca Numero de testes (iteracoes) = ");
scanf("%d",&iter);
janela0();
for(j=1;j<=iter;j++)
 {
 _setcolor(14);
 _settextposition(1,1);
 sprintf(buffer,"y=x*x-%5.1f a0=%7.4f b0=%7.4f",num,a0,b0);
 _outtext(buffer);
 _settextposition(2,1);
sprintf(buffer,"Forneca inicio do intervalo A%d = ",j);
 _outtext(buffer);
 scanf("%f",&a0);
 _settextposition(3,1);
 sprintf(buffer,"Forneca o final do intervalo B%d = ",j);
 _outtext(buffer);
 scanf("%f",&b0);
 /* CALCULO DOS PONTOS X E Y - 100 PONTOS*/
 _settextcolor(12);
 h=(b0-a0)/99.;
 x[1]=a0;
 funcao(1);
 for(i=2;i<=100;i++)
 {
 x[i]=x[i-1]+h;
 funcao(i);
 }
 janela0();
 /*DESENHO DA CURVA*/
 raiz=(a0+b0)/2.;
 erro=fabs((b0-a0)/2.);
 sprintf(buffer,"a0=%7.4f b0=%7.4f raiz_aprox=%7.4f erro=%8.5f",a0,b0,raiz,erro);
 _outtext(buffer);
 max=y[1];
 for(i=2;i<=100;i++)
 {
 if(y[i]>max)max=y[i]; /*funcao*/
 }
 _settextposition(1,20);
 _setcolor(13);
 _moveto(-TMSx,0);
 _lineto(TMSx,0);
 _moveto(0,-TMSy/2);
 _lineto(0,TMSy/2);
 _moveto(200,-TMSy/2);
 _lineto(200,TMSy/2);
 _setcolor(9);
 _moveto(100,-TMSy/2-20);
 _lineto(100,TMSy/2+20);
 _setcolor(14);
 for(i=1;i<=99;i++)
 {
 valor=(int)(100.*y[i]/max);
 _moveto(2*i,-valor);
 valor=(int)(100.*y[i+1]/max);
 _lineto(2*i+1,-valor);
 }
 getch();
}
_setvideomode(_DEFAULTMODE);
}
janela()
{
 _setvideomode(_VRES16COLOR);
 _getvideoconfig(&vc);
 TMSy = (int)(vc.numypixels/2);
 TMSx = (int)(vc.numxpixels/2);
 _setlogorg (vc.numxpixels/2 - 1, vc.numypixels/2 - 1);
 _settextwindow(1,1,33,80);
 _settextcolor(14);
 _setcolor(11);
}
janela0()
{
 _clearscreen(_GWINDOW);
}
funcao(int id)
{
y[id]=x[id]*x[id]-num;
}
CN1.OBJ
MEUNUM.TXT
11.
QC.INI
QC��_�w����
��p�����������������
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN1.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN2.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN3.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/ITERLIN.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/LINFOR.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MATRIZ~1.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MATRIZES.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTOR.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTORCC.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTORCC1.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/Motorcc2.exe
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/NEWFOR.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/NEWTON.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/SINE.EXE
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN1.C
#include <graph.h>
#include <time.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
struct videoconfig vc;
struct rccoord rcoord;
int TMSx,TMSy;
float erro,raiz,a0,b0,x[102],y[102],h,max,valor,num;
int i,iter,j;
char buffer[81];
main()
{
FILE *fp_in;
fp_in = fopen("meunum.txt","r");
fscanf(fp_in,"%f",&num);
fclose(fp_in);
erro=0.;
a0=0.;
b0=0.;
janela();
_settextposition(1,1);
_outtext("METODO DO ZOOM PARA ACHAR AS RAIZES DA FUNCAO y=x*x-C");
_settextposition(2,1);
_outtext("C = N, N (real) eh o seu numero na lista de presenca");
_settextposition(3,1);
_outtext("C deve ser gravado no arquivo meunum.txt");
_settextposition(4,1);
_outtext("Forneca Numero de testes (iteracoes) = ");
scanf("%d",&iter);
janela0();
for(j=1;j<=iter;j++)
 {
 _setcolor(14);
 _settextposition(1,1);
 sprintf(buffer,"y=x*x-%5.1f a0=%7.4f b0=%7.4f",num,a0,b0);
 _outtext(buffer);
 _settextposition(2,1);
 sprintf(buffer,"Forneca inicio do intervalo A%d = ",j);
 _outtext(buffer);
 scanf("%f",&a0);
 _settextposition(3,1);
 sprintf(buffer,"Forneca o final do intervalo B%d = ",j);
 _outtext(buffer);
 scanf("%f",&b0);
 /* CALCULO DOS PONTOS X E Y - 100 PONTOS*/
 _settextcolor(12);
 h=(b0-a0)/99.;
 x[1]=a0;
 funcao(1);
 for(i=2;i<=100;i++)
 {
 x[i]=x[i-1]+h;
 funcao(i);
 }
 janela0();
 /*DESENHO DA CURVA*/
 raiz=(a0+b0)/2.;
 erro=fabs((b0-a0)/2.);
 sprintf(buffer,"a0=%7.4f b0=%7.4f raiz_aprox=%7.4f erro=%8.5f",a0,b0,raiz,erro);
 _outtext(buffer);
 max=y[1];
 for(i=2;i<=100;i++)
 {
 if(y[i]>max)max=y[i]; /*funcao*/
 }
 _settextposition(1,20);
 _setcolor(13);
 _moveto(-TMSx,0);
 _lineto(TMSx,0);
 _moveto(0,-TMSy/2);
 _lineto(0,TMSy/2);
 _moveto(200,-TMSy/2);
 _lineto(200,TMSy/2);
 _setcolor(9);
 _moveto(100,-TMSy/2-20);
 _lineto(100,TMSy/2+20);
 _setcolor(14);
 for(i=1;i<=99;i++)
 {
 valor=(int)(100.*y[i]/max);
 _moveto(2*i,-valor);
 valor=(int)(100.*y[i+1]/max);
 _lineto(2*i+1,-valor);
 }
 getch();
}
_setvideomode(_DEFAULTMODE);
}
janela()
{
 _setvideomode(_VRES16COLOR);
 _getvideoconfig(&vc);
 TMSy = (int)(vc.numypixels/2);
 TMSx = (int)(vc.numxpixels/2);
 _setlogorg (vc.numxpixels/2 - 1, vc.numypixels/2 - 1);
 _settextwindow(1,1,33,80);
 _settextcolor(14);
 _setcolor(11);
}
janela0()
{
 _clearscreen(_GWINDOW);
}
funcao(int id)
{
y[id]=x[id]*x[id]-num;
}
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/ITERLIN.C
#include <graph.h>
#include <time.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
struct videoconfig vc;
struct rccoord rcoord;
int TMSx,TMSy,tipo,iter,onde;
float erro,raiz,a0,b0,x[102],y[102],h,max,valor;
main()
{
int i,aga,numero;
float xnum;
char buffer[81];
erro=0;
janela();
_setcolor(12);
_settextposition(1,1);
_outtext("METODO DA ITERACAO LINEAR PARA ACHAR AS RAIZES DE UMA FUNCAO ");
_settextposition(2,1);
_outtext("Raizes 2 e -1 para f(x)=x*x-x-2=0 Tipos de x=g(x)");
_settextposition(3,1);
_outtext("if(tipo==1)y[id]=sqrt(2.+x[id]);");
_settextposition(4,1);
_outtext("if(tipo==2)y[id]=x[id]*x[id]-2.;");
_settextposition(5,1);
_outtext("if(tipo==3)y[id]=1.+2/x;");
_setcolor(14);
_settextposition(6,1);
_outtext("Forneca o Tipo (1, 2 ou 3) das funcoes g(x) = ");
scanf("%d",&tipo);
_settextposition(7,1);
_outtext("Forneca inicio do intervalo [a,b] a = ");
scanf("%f",&a0);
_settextposition(8,1);
_outtext("Forneca o fim do intervalo [a,b] b = ");
scanf("%f",&b0);
_settextposition(9,1);
_outtext("Forneca Numero de Iteracoes = ");
scanf("%d",&iter);
_settextposition(10,1);
_outtext("Forneca o seu numero (real), tal que ");
_settextposition(11,1);
_outtext("o valor inicial x0 de x1 = g(x0) seja calculado como");
_settextposition(12,1);
_outtext("x0 = 1.+1/(seu numero), seu numero (real) = ");
scanf("%f",&raiz);
if(raiz==0.)raiz=0.01;
 else
 if(raiz>0.)raiz=1.+1./raiz;
 else raiz= -0.5-1./raiz;
_settextposition(13,1);
sprintf(buffer,"VALORES: a0=%7.4f b0=%7.4f raiz=%7.4f iter=%d",
	a0,b0,raiz,iter);
_outtext(buffer);
/* CALCULO DOS PONTOS X E Y - 100 PONTOS*/
_settextcolor(12);
h=(b0-a0)/100.;
x[1]=a0;
funcao(1);
for(i=2;i<=100;i++)
 {
 x[i]=x[i-1]+h;
 funcao(i);
 }
getch();
janela0();
_settextposition(1,10);
sprintf(buffer,"a0=%7.4f b0=%7.4f raiz=%7.4f iter=%d",a0,b0,raiz,iter);
_outtext(buffer);
/*DESENHO DA CURVA*/
x[0]=raiz;
funcao(0);
max=y[1];
for(i=2;i<=100;i++) /*Calcula o maximo da funcao em [a,b]*/
 {
 if(y[i]>max)max=y[i];
 }
/*Desenha as coordenadas*/
_setcolor(14);
_moveto(-TMSx,0);
_lineto(TMSx,0);
_moveto(0,-TMSy/2);
_lineto(0,TMSy/2);
_moveto(200,-TMSy/2);
_lineto(200,TMSy/2);
/*Desenha as curvas de f(x)=x e g(x);*/
for(i=1;i<=99;i++)
 {
 _setcolor(9);
 onde=(int)(100.*y[i]/max);
 _moveto(2*i,-onde);
 onde=(int)(100.*y[i+1]/max);
 _lineto(2*i+1,-onde);
 _setcolor(13);
 onde=(int)(100.*x[i]/max);
 _moveto(2*i,-onde);
 onde=(int)(100.*x[i+1]/max);
 _lineto(2*i+1,-onde);
 }
_setcolor(9);
	 /*Faz as iteracoes apresentando a raiz na cor azul*/
for(i=1;i<=iter;i++)
 {
 erro=fabs(raiz-y[0]);
 _settextposition(1+i,1);
 sprintf(buffer,"raiz=%7.4f
g(raiz)=%8.5f erro=(g(.)-raiz)=%8.5f Iter=%d",
 raiz,y[0],erro,i);
 _outtext(buffer);
 aga=(int)(200.*(raiz-a0)/(fabs(b0-a0)));/*200*/
 _moveto(aga,-TMSy/2-20+15*i);
 _lineto(aga,TMSy/2+20-15*i);
 raiz=y[0];
 x[0]=raiz;
 funcao(0);
 getch();
 }
_setcolor(14);
_settextposition(30,1);
erro=fabs(y[0]-x[0]);
sprintf(buffer,"raiz=%7.4f g(raiz)=%8.5f erro=(g(.)-raiz)=%8.5f",raiz,y[0],erro);
_outtext(buffer);
getch();
_setvideomode(_DEFAULTMODE);
}
janela()
{
 _setvideomode(_VRES16COLOR);
 _getvideoconfig(&vc);
 TMSy = (int)(vc.numypixels/2);
 TMSx = (int)(vc.numxpixels/2);
 _setlogorg (vc.numxpixels/2 - 1, vc.numypixels/2 - 1);
 _settextwindow(1,1,23,80);
 _settextcolor(14);
 _setcolor(11);
}
janela0()
{
 _clearscreen(_GWINDOW);
}
funcao(int id)
{
/* raizes 2 e -1, f(x)=x*x-x-2=0 */
if(tipo==1)y[id]=sqrt(2.+x[id]);
if(tipo==2)y[id]=x[id]*x[id]-2.;
if(tipo==3)
 {
 if(x[id]!=0.)y[id]=1.+2./x[id];
 else y[id]=1.;
 }
}
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/NEWTON.C
#include <graph.h>
#include <time.h>
#include <dos.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
struct videoconfig vc;
struct rccoord rcoord;
int TMSx,TMSy,tipo,iter,onde;
float erro,raiz,a0,b0,x[102],y[102],yl[102],h,max,valor;
main()
{
int i,aga,numero,agaa;
float xnum;
char buffer[81];
erro=0;
janela();
_setcolor(12);
_settextposition(1,1);
_outtext("METODO DE NEWTON RAPHSON PARA ACHAR AS RAIZES DE UMA FUNCAO ");
_settextposition(3,1);
_outtext("fUNCAO f(x)=x*x-x-2=(x-2)(x+1)=0 ");
_settextposition(4,1);
_outtext("Forneca inicio do intervalo [a,b] a = ");
scanf("%f",&a0);
_settextposition(5,1);
_outtext("Forneca o fim do intervalo [a,b] b = ");
scanf("%f",&b0);
_settextposition(6,1);
_outtext("Forneca Numero de Iteracoes = ");
scanf("%d",&iter);
_settextposition(7,1);
_outtext("Forneca o seu numero (real), tal que ");
_settextposition(8,1);
_outtext("o valor inicial x0 de f(x)=0 seja calculado como");
_settextposition(9,1);
_outtext("x0 = 1.+1/(seu numero), seu numero (real) = ");
scanf("%f",&raiz);
if(raiz==0.)raiz=0.01;
 else
 if(raiz>0.)raiz=1.+1./raiz;
 else raiz= -0.5-1./raiz;
_settextposition(13,1);
sprintf(buffer,"VALORES: a0=%7.4f b0=%7.4f raiz=%7.4f iter=%d",
	a0,b0,raiz,iter);
_outtext(buffer);
/* CALCULO DOS PONTOS X E Y - 100 PONTOS*/
_settextcolor(12);
h=(b0-a0)/100.;
x[1]=a0;
funcao(1);
for(i=2;i<=100;i++)
 {
 x[i]=x[i-1]+h;
 funcao(i);
 }
getch();
janela0();
_settextposition(1,10);
sprintf(buffer,"a0=%7.4f b0=%7.4f raiz=%7.4f iter=%d",a0,b0,raiz,iter);
_outtext(buffer);
/*DESENHO DA CURVA*/
x[0]=raiz;
funcao(0);
max=y[1];
for(i=2;i<=100;i++) /*Calcula o maximo da funcao em [a,b]*/
 {
 if(y[i]>max)max=y[i];
 }
/*Desenha as coordenadas*/
_setcolor(14);
_moveto(-TMSx,0);
_lineto(TMSx,0);
_moveto(0,-TMSy/2);
_lineto(0,TMSy/2);
_moveto(200,-TMSy/2);
_lineto(200,TMSy/2);
/*Desenha a curva de f(x)=0*/
for(i=1;i<=99;i++)
 {
 _setcolor(9);
 onde=(int)(100.*y[i]/max);
 _moveto(2*i,-onde);
 onde=(int)(100.*y[i+1]/max);
 _lineto(2*i+1,-onde);
 _setcolor(13);
 onde=(int)(100.*yl[i]/max);
 _moveto(2*i,-onde);
 onde=(int)(100.*yl[i+1]/max);
 _lineto(2*i+1,-onde);
 }
	 /*Faz as iteracoes apresentando a raiz na cor azul*/
x[1]=raiz;
 aga=(int)(200.*(raiz-a0)/(fabs(b0-a0)));/*200*/
 _moveto(aga,-TMSy/2-20+15*i);
 _lineto(aga,TMSy/2+20-15*i);
for(i=1;i<=iter;i++)
 {
 funcao(i);
 _settextposition(1+i,1);
 _setcolor(8+i);
 sprintf(buffer,"raiz=%7.4f novaraiz=%7.4f y(raiz)=%8.5f yl(raiz)=%8.5f Iter=%d",
 x[i],x[i+1],y[i],yl[i],i);
 _outtext(buffer);
 aga=(int)(200.*(x[i+1]-a0)/(fabs(b0-a0)));/*200*/
 _moveto(aga,-TMSy/2-20+10*i);
 _lineto(aga,TMSy/2+20-10*i);
 _setcolor(12);
 agaa=(int)(200.*(x[i]-a0)/(fabs(b0-a0)));/*abscissa de xi*/
 onde=(int)(100.*y[i]/max);
 aga=(int)(200.*(x[i+1]-a0)/(fabs(b0-a0)));/*abscissa de xi+1*/
 _moveto(agaa,-onde);
 _lineto(aga,0);
 getch();
 }
getch();
_setvideomode(_DEFAULTMODE);
}
janela()
{
 _setvideomode(_VRES16COLOR);
 _getvideoconfig(&vc);
 TMSy = (int)(vc.numypixels/2);
 TMSx = (int)(vc.numxpixels/2);
 _setlogorg (vc.numxpixels/2 - 1, vc.numypixels/2 - 1);
 _settextwindow(1,1,23,80);
 _settextcolor(14);
 _setcolor(11);
}
janela0()
{
 _clearscreen(_GWINDOW);
}
funcao(int id)
{
/* raizes 2 e -1, f(x)=x*x-x-2=0 */
y[id]=x[id]*x[id]-x[id]-2.;
yl[id]=2.*x[id]-1.;
if(fabs(yl[id])>0.01)x[id+1]=x[id]-y[id]/yl[id];
}
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/C5.BAT
PATH=C:\C5\BIN;C:\TMP;%PATH%
set LIB=C:\C5\LIB;%LIB%
set INCLUDE=C:\C5\INCLUDE;%INCLUDE%
set TMP=%TMP%
set INIT=C:\C5\SOURCE\ME\INI;%INIT%
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/ITERLIN.FOR
C************************************************************ 
C UNIVERSIDADE FEDERAL DA PARAIBA
C CENTRO DE CIENCIAS E TECNOLOGIA
C DEPARTAMENTO DE ENGENHARIA ELETRICA
C DISCIPLINA: CALCULO NUMERICO
C PROFESSOR: HOMERO
C ALUNO: 
C ESTE PROGRAMA CALCULA A RAIZ DE UMA FUNCAO 
C ATRAVES DO METODO DA ITERACAO LINEAR
C************************************************************ 
C PROGRAMA ITERACAO LINEAR
C DEFINICAO DAS VARIAVEIS USADAS NO PROGRAMA.
 REAL X0,X1
C ***********************************************
C DEFINICAO DA FUNCAO G(X) COM Raizes 2 e -1, f(x)=x*x-x-2=0
 FUNCAO(X)=SQRT(2.+X) 
 
C ***********************************************
C *** LE OS VALORES PARA O INTERVALO [A,B].
 WRITE(6,23)
23 FORMAT(' RAIZ INICIAL = ')
 READ(5,1)X0
1 FORMAT(F5.2)
 I=1
 WRITE(6,6)
6 FORMAT(' RAIZ G(RAIZ) ITER')
2 X1 = FUNCAO(X0)
 WRITE(6,3)X0,X1,I
3 FORMAT(F9.6 F9.6 I4) 
 X0=X1
C ***********************************************
C RETORNA 
 I=I+1
 IF(I.LT.10)GO TO 2
 STOP
 END
C FIM DO PROGRAMA ****************************************
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/LINFOR.FOR
C ITERACAO LINEAR
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FGRAPH.FD'
 LOGICAL fourcolors
 EXTERNAL fourcolors
 IF( fourcolors() ) THEN
 CALL threegraphs()
 ELSE
 WRITE (*,*) ' This program requires an EGA, VGA or',
 + ' SVGA graphics card.'
 END IF
 END 
C Additional functions defined below
C FOURCOLORS - Function to enter graphics mode for REALG.
 LOGICAL FUNCTION fourcolors()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 dummy
 RECORD /videoconfig/ screen
 COMMON screen
C
C Set to maximum number of available colors.
C
C dummy = SETVIDEOMODE( $MAXCOLORMODE ) $ERESCOLOR 
 dummy = SETVIDEOMODE( $VRES16COLOR ) 
 CALL GETVIDEOCONFIG( screen )
 fourcolors = .TRUE.
 IF( dummy .EQ. 0 ) fourcolors = .FALSE.
 END
C .
 SUBROUTINE threegraphs()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 dummy, halfx, halfy
 INTEGER*2 xwidth, yheight, cols, rows
 LOGICAL*2 finvert /'.FALSE.' /
 RECORD /videoconfig/ screen
 COMMON screen
 CALL CLEARSCREEN( $GCLEARSCREEN )
 xwidth = screen.numxpixels
 yheight = screen.numypixels
 cols = screen.numtextcols
 rows = screen.numtextrows
 halfx = xwidth / 2
 halfy = (yheight / rows) * (rows / 2)
 CALL SETVIEWPORT( 0, 1, xwidth - 1, yheight - 1 )
 CALL SETTEXTWINDOW( 1, 1, rows, cols )
 dummy = SETWINDOW( finvert, -3.D0, -1.5D0, 1.5D0, 1.5D0 )
 CALL CALCULA( INT2( (rows / 2) + MOD( rows, 2 ) ) )
 dummy = RECTANGLE_W( $GBORDER, -3.0, -1.5, 1.5, 1.5 )
 READ (*,*) ! Wait for ENTER
key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
C
C********************************************
C
C Inicio da subrotina ITERACAO LINEAR
C
C********************************************
C
 SUBROUTINE CALCULA(numc)
 INCLUDE 'FGRAPH.FD'
C DEFINICAO DAS VARIAVEIS USADAS NO PROGRAMA.
 REAL X0,X1,A0,B0,XX(21),H,MAXX,MAXY
 INTEGER*2 dummy, numc, i, k
 CHARACTER*4 str
 DOUBLE PRECISION bananas(31), x, YY(31), R
 RECORD /videoconfig/ screen
 RECORD /wxycoord/ wxy
 RECORD /rccoord/ curpos
 COMMON screen
C
C DEFINICAO DA FUNCAO G(X) COM Raizes 2 e -1, f(x)=x*x-x-2=0
C FUNCAO(X)=(-1.)*(SQRT(X+2.))
C FUNCAO(X)=X*X-2. 
 FUNCAO(X)=1.+2./X 
 
C LE OS VALORES PARA O INTERVALO [A,B].
 
 WRITE(6,20)
20 FORMAT(' INTERVALO INICIAL = ')
 READ(5,1)A0
 WRITE(6,21)
21 FORMAT(' INTERVALO FINAL = ')
 READ(5,1)B0
 WRITE(6,22)
22 FORMAT(' RAIZ INICIAL = ')
 READ(5,1)X0
1 FORMAT(F5.2)
 if(X0.EQ.0.)X0=0.01
C CALCULA OS VALORES DE G(X) NO INTERVALO [A0,B0]
C ACHA MAXIMOS DOS EIXOS X E Y 
 H=(B0-A0)/20.
 XX(1)=A0
 YY(1)=FUNCAO(XX(1))
 MAXY=ABS(YY(1)) 
 DO i=2,21 
 k=i-1
 XX(i)=XX(k)+H
 YY(i)=FUNCAO(XX(i))
 if(ABS(YY(i)).GT.MAXY)MAXY=ABS(YY(i))
 END DO
C O METODO DA ITERACAO LINEAR CALCULA X=G(X)
 bananas(1)=X0
 MAXX=X0 
 WRITE(6,6)
6 FORMAT(' RAIZ G(RAIZ) ITER')
C
 DO I=2,21 
 X1 = FUNCAO(X0)
 bananas(I)=X1 
 
 if(X1.GT.MAXX)MAXX=X1
 WRITE(6,3)X0,X1,I
3 FORMAT(F9.6 F9.6 I4) 
 X0=X1
 END DO
C
 READ (*,*) ! Wait for ENTER key to be pressed
 CALL clearscreen ($GCLEARSCREEN)
C 
C APRESENTA RAIZES Xi
C 
 dummy = SETTEXTCOLOR( 13 )
 IF( screen.numcolors .LT. numc ) numc = screen.numcolors - 1
 DO i = 1, 21
 CALL SETTEXTPOSITION( i, 2, curpos )
 WRITE (str, '(F4.1)') bananas(i)
 CALL OUTTEXT( 'Valor da raiz = ' // str )
 END DO
C APRESENTA OS Intervalos inicial e final
 dummy = SETTEXTCOLOR( 14 )
 CALL SETTEXTPOSITION( 1, 30, curpos )
 WRITE (str, '(F4.1)')A0
 CALL OUTTEXT( 'Intervalo Inicial = ' // str )
 CALL SETTEXTPOSITION( 2, 30, curpos )
 WRITE (str, '(F4.1)')B0
 CALL OUTTEXT( 'Intervalo Final = ' // str )
C
C Draw a bordered rectangle around the graph.
C
 dummy = SETCOLOR( 1 )
 dummy = RECTANGLE_W( $GBORDER, -1.00, -1.00, 1.00, 1.00 )
 dummy = RECTANGLE_W( $GBORDER, -1.02, -1.02, 1.02, 1.02 )
C
C PLOTA OS PONTOS DAS RAIZES CALCULADAS.
C 
 x = -0.90
 DO i = 1, 19
 dummy = SETCOLOR( 2 )
 CALL MOVETO_W( x, -1.D0, wxy )
 dummy = LINETO_W( x, 1.0 )
 CALL MOVETO_W( -1.D0, x, wxy )
 dummy = LINETO_W( 1.0, x )
 dummy = SETCOLOR( 14 )
 CALL MOVETO_W( x - 0.1D0, bananas( i )/MAXX, wxy )
 dummy = LINETO_W( x, bananas( i + 1 )/MAXX )
 x = x + 0.1
 END DO
 CALL MOVETO_W( 0.9D0, bananas( i )/MAXX, wxy )
 dummy = LINETO_W( 1.0, bananas( i + 1 )/MAXX )
C
C Plota a reta
C
 R = 0.
 x = -0.90
 DO i = 1, 19
 dummy = SETCOLOR( 13 )
 CALL MOVETO_W( x - 0.1D0, A0 + R, wxy )
 dummy = LINETO_W( x, A0+R+H )
 R= R + H
 x = x + 0.1
 END DO
C
C Plot os pontos de g(x)
C
 dummy = SETCOLOR( 12 )
 x = -0.90
 DO i = 1, 19
 CALL MOVETO_W( x - 0.1D0, YY( i )/MAXY, wxy )
 dummy = LINETO_W( x, YY( i + 1 )/MAXY )
 x = x + 0.1
 END DO
 CALL MOVETO_W( 0.9D0, YY( i )/MAXY, wxy )
 dummy = LINETO_W( 1.0, YY( i + 1 )/MAXY )
 dummy = SETCOLOR( 3 )
 END
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/matrizes1.for
C Matrizes
c
c This procedure writes out the matrices in matrix form
c
 SUBROUTINE writematrix(m1, m2, m3, n, np)
 real*4 m1(np,np),m2(np,np),m3(np,np)
c Start by writing out the original matrix:
 write(*,1)
 1 format(' +--' \)
 do 11 j=1, (13*n-3)
 write(*,12)
 12 format(' '\)
 11 continue
 write(*,2)
 2 format('--+')
 do 21 i=1, n
 write(*,24)
 24 format(' | '\)
 do 23 j=1, n
 write(*, 22) m1(i,j)
 22 format(f11.6,' '\)
 23 continue
 if (i .EQ. (n/2 +1)) then
 write(*,25)
 else
 write(*,26)
 endif
 25 format('| x')
 26 format('|')
 21 continue
 write(*,3)
 3 format(' +--' \)
 do 31 j=1, (13*n-3)
 write(*,32)
 32 format(' '\)
 31 continue
 write(*,4)
 4 format('--+')
c Now display the inverse of the matrix
 write(*,41)
 41 format(' +--' \)
 do 51 j=1, (13*n-3)
 write(*,52)
 52 format(' '\)
 51 continue
 write(*,42)
 42 format('--+')
 do 61 i=1, n
 write(*,64)
 64 format(' | '\)
 do 63 j=1, n
 write(*, 62) m2(i,j)
 62 format(f11.6,' '\)
 63 continue
 if (i .EQ. (n/2+1)) then
 write(*,65)
 else
 write(*,66)
 endif
 65 format('| =')
 66 format('|')
 61 continue
 write(*,43)
 43 format(' +--' \)
 do 71 j=1, (13*n-3)
 write(*,72)
 72 format(' '\)
 71 continue
 write(*,44)
 44 format('--+')
c Now display the result of their product (should be the identity)
 write(*,45)
 45 format(' +--' \)
 do 53 j=1, (12*n-3)
 write(*,54)
 54 format(' '\)
 53 continue
 write(*,46)
 46 format('--+')
 do 81 i=1, n
 write(*,84)
 84 format(' | '\)
 do 83 j=1, n
 write(*, 82) m3(i,j)
 82 format(f10.7,' '\)
 83 continue
 write(*,85)
 85 format('|')
 81 continue
 write(*,47)
 47 format(' +--' \)
 do 73 j=1, (12*n-3)
 write(*,74)
 74 format(' '\)
 73 continue
 write(*,48)
 48 format('--+')
 END
 
 
c
c Subroutine to compute the inverse of a matrix
c
 SUBROUTINE invert(a, y, indx, np, n)
 INTEGER np, n
 DIMENSION a(np,np), y(np,np), indx(np)
 INTEGER i, j, d
 DO 12 i=1,n
 DO 11 j=1,n
 y(i,j)=0.
 11 CONTINUE
 y(i,i) = 1.
 12 CONTINUE
 CALL LUDCMP(a,n,np,indx,d)
 DO 13 j=1,n
 CALL LUBKSB(a,n,np,indx,y(1,j))
 13 CONTINUE
 END
 
c -----------------------------------------------------------------
 
 SUBROUTINE LUDCMP(A,N,NP,INDX,D)
 PARAMETER (NMAX=100,TINY=1.0E-20)
 DIMENSION A(NP,NP),INDX(N),VV(NMAX) 
 INTEGER D
 D=1
 DO 12 I=1,N
 AAMAX=0.
 DO 11 J=1,N
 IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J))
11 CONTINUE 
 IF (AAMAX.EQ.0.) PAUSE 'Singular matrix.'
 VV(I)=1./AAMAX
 
12 CONTINUE 
 DO 19 J=1,N
 IF (J.GT.1) THEN
 DO 14 I=1,J-1
 SUM=A(I,J)
IF (I.GT.1)THEN
 DO 13 K=1,I-1
 SUM=SUM-A(I,K)*A(K,J)
13 CONTINUE 
 A(I,J)=SUM
 ENDIF
14 CONTINUE 
 
 ENDIF
 AAMAX=0.
 DO 16 I=J,N
 SUM=A(I,J)
 IF (J.GT.1)THEN
 DO 15 K=1,J-1
 SUM=SUM-A(I,K)*A(K,J)
15 CONTINUE 
 A(I,J)=SUM
 ENDIF 
 
 DUM=VV(I)*ABS(SUM)
 IF (DUM.GE.AAMAX) THEN
 IMAX=I
 AAMAX=DUM
 ENDIF 
 
16 CONTINUE 
 IF (J.NE.IMAX)THEN
 DO 17 K=1,N
 DUM=A(IMAX,K)
 A(IMAX,K)=A(J,K)
 A(J,K)=DUM
17 CONTINUE 
 D=-D
 VV(IMAX)=VV(J)
 ENDIF 
 
 INDX(J)=IMAX
 IF(J.NE.N)THEN
 IF(A(J,J).EQ.0.) A(J,J)=TINY
 
 
 DUM=1./A(J,J)
 DO 18 I=J+1,N
 A(I,J)=A(I,J)*DUM
18 CONTINUE 
 ENDIF 
 
19 CONTINUE
 
 IF(A(N,N).EQ.0.) A(N,N)=TINY
 
 
 RETURN
 END
c ----------------------------------------------------------------- 
 
 SUBROUTINE LUBKSB(A,N,NP,INDX,B)
 DIMENSION A(NP,NP),INDX(N),B(N)
 II=0 
 
 
 DO 12 I=1,N
 LL=INDX(I)
 SUM=B(LL)
 B(LL)=B(I)
 IF (II.NE.0)THEN
 DO 11 J=II,I-1
 SUM=SUM-A(I,J)*B(J)
11 CONTINUE
 ELSE IF (SUM.NE.0.) THEN
 II=I
 ENDIF 
 
 B(I)=SUM
12 CONTINUE 
 DO 14 I=N,1,-1
 SUM=B(I)
 IF(I.LT.N)THEN
 DO 13 J=I+1,N
 SUM=SUM-A(I,J)*B(J)
13 CONTINUE
 ENDIF 
 
 B(I)=SUM/A(I,I)
14 CONTINUE
 
 RETURN
 END 
 
 
 
c
c This is the driver for the matrix inversion program.
c The program goes through the following steps: 
c 1. Fills a a(3 X 3) matrix with real numbers 
c 2 Fills a b(3 X 1) matrix with real numbers 
c 3. WRITEs out the matrix a and v to the screen
c 4. Calls a subroutine to INVERT the matrix
c 5. WRITEs out the inverse to the screen
c 6. WRITEs out the proof of the inversion 
c 7. Calcula x=A-1b e imprime x(3,1) 
c
 PROGRAM inversion
 REAL*4 a(20,20), origA(20,20), indx(20),b(20,20),x(20,20)
 REAL*4 invA(20,20),sum, idmatrix(20,20),d(20)
 INTEGER*4 np, n, iter
 PARAMETER (np=20)
 n = 3 
c 
c Step1: Initialize as matrizes
c
 a(1,1)=10.
 a(1,2)=1.
 a(1,3)=1.
 
 a(2,1)=1.
 a(2,2)=10.
 a(2,3)=1.
 
 a(3,1)=1.
 a(3,2)=1.
 a(3,3)=10.
 b(1,1)=12.83 
 b(2,1)=12.08
 b(3,1)=12.08 
c iteracoes finais do metodo Gauss-Seidel
 iter=5
c
c Step 2: WRITE as matrizes a e b
c
 
 WRITE(*,'(1x,a)') 'A matriz A(3,3) de Ax=b eh:'
 DO 21 i=1,n
 do 23 j=1,n
 origA(i,j) = a(i,j)
 WRITE (*,22) a(i,j)
 23 continue
 22 format(f12.6,\)
 WRITE(*,*)
 21 CONTINUE
 WRITE(*,*)
 
 WRITE(*,'(1x,a)') 'A matriz b(3,1) de Ax=b eh:'
 DO 25 i=1,n
 WRITE (*,22) b(i,1)
 25 CONTINUE
 WRITE(*,*)
 
c
c Step 3: Call the INVERT routine
c
 
 CALL invert(a, invA, indx, np, n)
 
 WRITE(*,'(1x,a)') 'Tecle ENTER para continuar...'
 read(*,*) 
 
c
c Step 4: WRITE a matriz inversa no video
c
 
 WRITE(*,'(1x,a)') 'A matriz inversa A-1 eh:'
 DO 41 i=1,n
 do 43 j=1,n
 WRITE (*,42) invA(i,j)
 43 continue
 42 format(f8.3,\)
 WRITE(*,*)
 41 continue 
 
 WRITE (*,*)
 
 
 
c
c Step 5: WRITE a prova da inversion
c 
 
 WRITE(*,'(1x,a)') 'Verificacao da inversao:' 
 
 do 51 i=1,n
 do 55 k=1,n
 sum = 0.
 do 53 j=1,n-1
 sum = ( origA(i,j) * invA(j,k) ) + sum
 53 continue
 sum = (origA(i,n) * invA(n,k)) + sum
 idmatrix(i,k) = sum
 55 continue
 51 continue 
 CALL WRITEMATRIX(origA, invA, idmatrix, n, np)
 
 WRITE(*,'(1x,a)') 'Tecle ENTER para continuar...'
 read(*,*)
c
c Step 6: WRITE a matriz x
c 
 
 WRITE(*,'(1x,a)') 'Calculo da matriz x=A-1b:' 
 
 do 61 i=1,n
 sum = 0.
 do 63 j=1,n
 sum = invA(i,j) * b(j,1) + sum
 63 continue
 x(i,1)=sum
 61 continue 
 WRITE(*,*)
 
 WRITE(*,'(1x,a)') 'A matriz solucao de Ax=b eh x(3,1):'
 DO 65 i=1,n
 WRITE (*,22) x(i,1)
 65 CONTINUE
 WRITE(*,*)
 WRITE(*,'(1x,a)') 'Comeco do metodo Gauss-Seidel'
 WRITE(*,*)
c
c Redifinicao da matriz a
c
 a(1,1)=10.
 a(1,2)=1.
 a(1,3)=1.
 
 a(2,1)=1.
 a(2,2)=10.
 a(2,3)=1.
 
 a(3,1)=1.
 a(3,2)=1.
 a(3,3)=10.
c Matriz diagonal 
 DO 71 i=1,n
 d(i)=a(i,i) 
 x(i,1)=0.
71 continue 
 WRITE(*,'(1x,a)') 'A matriz diagonal de A eh d(3):'
 DO 75 i=1,n
 WRITE (*,22) d(i)
75 CONTINUE
 WRITE(*,*)
 do 81 i=1,n
 b(i,1)=b(i,1)/d(i)
 do 81 j=1,n
 a(i,j)=-a(i,j)/d(i)
81 continue
 WRITE(*,'(1x,a)') 'A matriz B de x=Bx+b eh:'
 DO 91 i=1,n
 do 93 j=1,n
 WRITE (*,42) a(i,j)
93 continue
 WRITE(*,*)
91 continue 
 WRITE(*,*)
 do 150 k=1,iter 
 do 92 p=1,n
 x(p,2)=x(p,1)
92 continue
 do 120 i=1,n
 x(i,1)=b(i,1)
 do 110 j=1,n
 if(i.NE.j)x(i,1)=x(i,1)+x(j,2)*a(i,j)
110 continue
120 continue
 WRITE(*,*)
 WRITE(*,'(1x,a)') 'A matriz solucao de Ax=b eh x(3,1):'
 DO 165 i=1,n
 WRITE (*,22) x(i,1)
 read(*,*)
165 CONTINUE
 WRITE(*,*)
150 continue 
 read(*,*)
999 END
 
 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/matrizes.for
C Matrizes
c
c This procedure writes out the matrices in matrix form
c
 SUBROUTINE writematrix(m1, m2, m3, n, np)
 real*4 m1(np,np),m2(np,np),m3(np,np)
c Start by writing out the original matrix:
 write(*,1)
 1 format(' +--' \)
 do 11 j=1, (13*n-3)
 write(*,12)
 12 format(' '\)
 11 continue
 write(*,2)
 2 format('--+')
 do 21 i=1, n
 write(*,24)
 24 format(' | '\)
 do 23 j=1, n
 write(*, 22) m1(i,j)
 22 format(f11.6,' '\)
 23 continue
 if (i .EQ. (n/2 +1)) then
 write(*,25)
 else
 write(*,26)
 endif
 25 format('| x')
 26 format('|')
 21 continue
 write(*,3)
 3 format(' +--' \)
 do 31 j=1, (13*n-3)
 write(*,32)
 32 format(' '\)
 31 continue
 write(*,4)
 4 format('--+')
c Now display the inverse of the matrix
 write(*,41)
 41 format(' +--' \)
 do 51 j=1, (13*n-3)
 write(*,52)
 52 format(' '\)
 51 continue
write(*,42)
 42 format('--+')
 do 61 i=1, n
 write(*,64)
 64 format(' | '\)
 do 63 j=1, n
 write(*, 62) m2(i,j)
 62 format(f11.6,' '\)
 63 continue
 if (i .EQ. (n/2+1)) then
 write(*,65)
 else
 write(*,66)
 endif
 65 format('| =')
 66 format('|')
 61 continue
 write(*,43)
 43 format(' +--' \)
 do 71 j=1, (13*n-3)
 write(*,72)
 72 format(' '\)
 71 continue
 write(*,44)
 44 format('--+')
c Now display the result of their product (should be the identity)
 write(*,45)
 45 format(' +--' \)
 do 53 j=1, (12*n-3)
 write(*,54)
 54 format(' '\)
 53 continue
 write(*,46)
 46 format('--+')
 do 81 i=1, n
 write(*,84)
 84 format(' | '\)
 do 83 j=1, n
 write(*, 82) m3(i,j)
 82 format(f10.7,' '\)
 83 continue
 write(*,85)
 85 format('|')
 81 continue
 write(*,47)
 47 format(' +--' \)
 do 73 j=1, (12*n-3)
 write(*,74)
 74 format(' '\)
 73 continue
 write(*,48)
 48 format('--+')
 END
 
 
c
c Subroutine to compute the inverse of a matrix
c
 SUBROUTINE invert(a, y, indx, np, n)
 INTEGER np, n
 DIMENSION a(np,np), y(np,np), indx(np)
 INTEGER i, j, d
 DO 12 i=1,n
 DO 11 j=1,n
 y(i,j)=0.
 11 CONTINUE
 y(i,i) = 1.
 12 CONTINUE
 CALL LUDCMP(a,n,np,indx,d)
 DO 13 j=1,n
 CALL LUBKSB(a,n,np,indx,y(1,j))
 13 CONTINUE
 END
 
c -----------------------------------------------------------------
 
 SUBROUTINE LUDCMP(A,N,NP,INDX,D)
 PARAMETER (NMAX=100,TINY=1.0E-20)
 DIMENSION A(NP,NP),INDX(N),VV(NMAX) 
 INTEGER D
 D=1
 DO 12 I=1,N
 AAMAX=0.
 DO 11 J=1,N
 IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J))
11 CONTINUE 
 IF (AAMAX.EQ.0.) PAUSE 'Singular matrix.'
 VV(I)=1./AAMAX
 
12 CONTINUE 
 DO 19 J=1,N
 IF (J.GT.1) THEN
 DO 14 I=1,J-1
 SUM=A(I,J)
 IF (I.GT.1)THEN
 DO 13 K=1,I-1
 SUM=SUM-A(I,K)*A(K,J)
13 CONTINUE 
 A(I,J)=SUM
 ENDIF
14 CONTINUE 
 
 ENDIF
 AAMAX=0.
 DO 16 I=J,N
 SUM=A(I,J)
 IF (J.GT.1)THEN
 DO 15 K=1,J-1
 SUM=SUM-A(I,K)*A(K,J)
15 CONTINUE 
 A(I,J)=SUM
 ENDIF 
 
 DUM=VV(I)*ABS(SUM)
 IF (DUM.GE.AAMAX) THEN
 IMAX=I
 AAMAX=DUM
 ENDIF 
 
16 CONTINUE 
 IF (J.NE.IMAX)THEN
 DO 17 K=1,N
 DUM=A(IMAX,K)
 A(IMAX,K)=A(J,K)
 A(J,K)=DUM
17 CONTINUE 
 D=-D
 VV(IMAX)=VV(J)
 ENDIF 
 
 INDX(J)=IMAX
 IF(J.NE.N)THEN
 IF(A(J,J).EQ.0.) A(J,J)=TINY
 
 
 DUM=1./A(J,J)
 DO 18 I=J+1,N
 A(I,J)=A(I,J)*DUM
18 CONTINUE 
 ENDIF 
 
19 CONTINUE
 
 IF(A(N,N).EQ.0.) A(N,N)=TINY
 
 
 RETURN
 END
c ----------------------------------------------------------------- 
 
 SUBROUTINE LUBKSB(A,N,NP,INDX,B)
 DIMENSION A(NP,NP),INDX(N),B(N)
 II=0 
 
 
 DO 12 I=1,N
 LL=INDX(I)
 SUM=B(LL)
 B(LL)=B(I)
 IF (II.NE.0)THEN
 DO 11 J=II,I-1
 SUM=SUM-A(I,J)*B(J)
11 CONTINUE
 ELSE IF (SUM.NE.0.) THEN
 II=I
 ENDIF 
 
 B(I)=SUM
12 CONTINUE 
 DO 14 I=N,1,-1
 SUM=B(I)
 IF(I.LT.N)THEN
 DO 13 J=I+1,N
 SUM=SUM-A(I,J)*B(J)
13 CONTINUE
 ENDIF 
 
 B(I)=SUM/A(I,I)
14 CONTINUE
 
 RETURN
 END 
 
 
 
c
c This is the driver for the matrix inversion program.
c The program goes through the following steps: 
c 1. Fills a a(3 X 3) matrix with real numbers 
c 2 Fills a b(3 X 1) matrix with real numbers 
c 3. WRITEs out the matrix a and v to the screen
c 4. Calls a subroutine to INVERT the matrix
c 5. WRITEs out the inverse to the screen
c 6. WRITEs out the proof of the inversion 
c 7. Calcula x=A-1b e imprime x(3,1) 
c
 PROGRAM inversion
 REAL*4 a(20,20), origA(20,20), indx(20),b(20,20),x(20,20)
 REAL*4 invA(20,20),sum, idmatrix(20,20),d(20)
 INTEGER*4 np, n, iter
 PARAMETER (np=20)
 n = 3 
c 
c Step1: Initialize as matrizes
c
 a(1,1)=10
 a(1,2)=1
 a(1,3)=1
 
 a(2,1)=1
 a(2,2)=10
 a(2,3)=1
 
 a(3,1)=1.
 a(3,2)=1.
 a(3,3)=10.
 b(1,1)=12.83
 b(2,1)=12.08
 b(3,1)=12.08 
c iteracoes finais do metodo Gauss-Seidel
 iter=5
c
c Step 2: WRITE as matrizes a e b
c
 
 WRITE(*,'(1x,a)') 'A matriz A(3,3) de Ax=b eh:'
 DO 21 i=1,n
 do 23 j=1,n
 origA(i,j) = a(i,j)
 WRITE (*,22) a(i,j)
 23 continue
 22 format(f12.6,\)
 WRITE(*,*)
 21 CONTINUE
 WRITE(*,*)
 
 WRITE(*,'(1x,a)') 'A matriz b(3,1) de Ax=b eh:'
 DO 25 i=1,n
 WRITE (*,22) b(i,1)
 25 CONTINUE
 WRITE(*,*)
 
c
c Step 3: Call the INVERT routine
c
 
 CALL invert(a, invA, indx, np, n)
 
 WRITE(*,'(1x,a)') 'Tecle ENTER para continuar...'
 read(*,*) 
 
c
c Step 4: WRITE a matriz inversa no video
c
 
 WRITE(*,'(1x,a)') 'A matriz inversa A-1 eh:'
 DO 41 i=1,n
 do 43 j=1,n
 WRITE (*,42) invA(i,j)
 43 continue
 42 format(f8.3,\)
 WRITE(*,*)
 41 continue 
 
 WRITE (*,*)
 
 
 
c
c Step 5: WRITE a prova da inversion
c 
 
 WRITE(*,'(1x,a)') 'Verificacao da inversao:' 
 
 do 51 i=1,n
 do 55 k=1,n
 sum = 0.
 do 53 j=1,n-1
 sum = ( origA(i,j) * invA(j,k) ) + sum
 53 continue
 sum = (origA(i,n) * invA(n,k)) + sum
 idmatrix(i,k) = sum
 55 continue
 51 continue 
 CALL WRITEMATRIX(origA, invA, idmatrix, n, np)
 
 WRITE(*,'(1x,a)') 'Tecle ENTER para continuar...'
 read(*,*)
c
c Step 6: WRITE a matriz x
c 
 
 WRITE(*,'(1x,a)') 'Calculo da matriz x=A-1b:' 
 
 do 61 i=1,n
 sum = 0.
 do 63 j=1,n
 sum = invA(i,j) * b(j,1) + sum
 63 continue
 x(i,1)=sum
 61 continue 
 WRITE(*,*)
 
 WRITE(*,'(1x,a)') 'A matriz solucao de Ax=b eh x(3,1):'
 DO 65 i=1,n
 WRITE (*,22) x(i,1)
 65 CONTINUE
 WRITE(*,*)
 WRITE(*,'(1x,a)') 'Comeco do metodo Gauss-Seidel'
 WRITE(*,*)
c
c Redifinicao da matriz a
c
 a(1,1)=10.
a(1,2)=1.
 a(1,3)=1.
 
 a(2,1)=1.
 a(2,2)=10.
 a(2,3)=1.
 
 a(3,1)=1.
 a(3,2)=1.
 a(3,3)=10.
c Matriz diagonal 
 DO 71 i=1,n
 d(i)=a(i,i) 
 x(i,1)=0.
71 continue 
 WRITE(*,'(1x,a)') 'A matriz diagonal de A eh d(3):'
 DO 75 i=1,n
 WRITE (*,22) d(i)
75 CONTINUE
 WRITE(*,*)
 do 81 i=1,n
 b(i,1)=b(i,1)/d(i)
 do 81 j=1,n
 a(i,j)=-a(i,j)/d(i)
81 continue
 WRITE(*,'(1x,a)') 'A matriz B de x=Bx+b eh:'
 DO 91 i=1,n
 do 93 j=1,n
 WRITE (*,42) a(i,j)
93 continue
 WRITE(*,*)
91 continue 
 WRITE(*,*)
 do 150 k=1,iter
 do 120 i=1,n
 x(i,1)=b(i,1)
 do 110 j=1,n
 if(i.NE.j)x(i,1)=x(i,1)+x(j,1)*a(i,j)
110 continue
120 continue
 WRITE(*,*)
 WRITE(*,'(1x,a)') 'A matriz solucao de Ax=b eh x(3,1):'
 DO 165 i=1,n
 WRITE (*,22) x(i,1)
 read(*,*)
165 CONTINUE
 WRITE(*,*)
150 continue 
 read(*,*)
999 END
 
 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/motorcc1.for
c funcaoia(float yy)
c return(ui/la - yy * ra/la - wm * kb/la)
c END
c funcaowm(float yy)
c return(ki*ia/jm - yy*bm/jm - tl/jm );
c END
c funcaotetam(float yy)
c return(wm);
c END
c rungekuta4() /*Ordem 4*/
c float eqinc,k1,k2,k3,k4;
cc eqinc=0.001;
c k1 = eqinc*funcaoia(ia);
c k2 = eqinc*funcaoia(ia+k1/2.);
c k3 = eqinc*funcaoia(ia+k2/2.);
c k4 = eqinc*funcaoia(ia+k3);
c ia = ia + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
c k1 = eqinc*funcaowm(wm);
c k2 = eqinc*funcaowm(wm+k1/2.);
c k3 = eqinc*funcaowm(wm+k2/2.);
c k4 = eqinc*funcaowm(wm+k3);
c wm = wm + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
c k1 = eqinc*funcaotetam(tetam);
c k2 = eqinc*funcaotetam(tetam+k1/2.);
c k3 = eqinc*funcaotetam(tetam+k2/2.);
c k4 = eqinc*funcaotetam(tetam+k3);
c tetam = tetam + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
c END 
CC SINE.FOR - Illustrates basic graphics commands.
CC
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FLIB.FI'
 CALL graphicsmode()
 CALL drawlines()
 CALL sinewave()
c CALL drawshapes()
 CALL endprogram()
 END
C Definitions of subroutines go here
 SUBROUTINE graphicsmode()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 modestatus, maxx, maxy
 RECORD /videoconfig/ myscreen
 COMMON maxx, maxy
C
C Set highest resolution graphics mode.
C
 modestatus = SETVIDEOMODE( $VRES16COLOR )
 IF( modestatus.EQ.0) STOP 'Error: cannot set graphics mode'
C
C Determine the minimum and maximum dimensions.
C
 CALL GETVIDEOCONFIG( myscreen )
 maxx = myscreen.numxpixels - 1
 maxy = myscreen.numypixels - 1
 END
CC NEWX - This function finds new x-coordinates.
CC
 INTEGER*2 FUNCTION newx( xcoord )
 INTEGER*2 xcoord, maxx, maxy
 REAL*4 tempx
 COMMON maxx, maxy
 tempx = maxx / 1000.0
 tempx = xcoord * tempx + 0.5
 newx = tempx
 END
CC NEWY - This function finds new y-coordinates.
 INTEGER*2 FUNCTION newy( ycoord )
 INTEGER*2 ycoord, maxx, maxy
 REAL*4 tempy
 COMMON maxx, maxy
 tempy = maxy / 1000.0
 tempy = ycoord * tempy + 0.5
 newy = tempy
 END
CC DRAWLINES - This subroutine draws a box and
CC several lines.
 SUBROUTINE drawlines()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx,newy
 INTEGER*2 status, newx, newy, maxx, maxy
 RECORD /xycoord/ xy
 
 COMMON maxx, maxy
C
C Draw the box.
C
 dummy = SETCOLOR( 15 )
 status = RECTANGLE( $GBORDER, 1, 0, maxx, maxy )
 CALL SETVIEWORG( 0, newy( INT2( 500 ) ), xy )
C
C Draw the lines.
C
 CALL MOVETO( 0, 0, xy )
 status = LINETO( newx( INT2( 1000 ) ), 0 )
 CALL SETLINESTYLE( #AA3C )
 CALL MOVETO( 0, newy( INT2( -250 ) ), xy )
 status = LINETO(newx(INT2( 1000 ) ),
 + newy( INT2( -250 ) ) )
 CALL SETLINESTYLE( #8888 )
 CALL MOVETO( 0, newy( INT2( 250 ) ), xy )
 status = LINETO( newx( INT2( 1000 ) ),
 + newy( INT2( 250 ) ) )
 END
CC SINEWAVE - This subroutine calculates and plots a sine
CC wave.
CC
 SUBROUTINE sinewave()
 INCLUDE 'FGRAPH.FD'
 REAL ra,la,kb,ki,jm,bm,tl,wm,ia,ui,k1,k2,k3,k4,eqinc
 
 INTEGER*2 dummy, newx, newy, locx, locy, i
 DOUBLE PRECISION PI
 EXTERNAL newx, newy
 RECORD /rccoord/ curpos
 PARAMETER ( PI = 3.14159 )
 
 
 eqinc=0.001
 
C Variaveis do motor de corrente continua
 ra=1.01429
 la=0.0292
 kb=0.0869
 ki=0.0869
 jm=0.00063078
 bm=0.0023
 Tl=0.1
 dummy = SETTEXTCOLOR( 15 )
 dummy = SETCOLOR( 15 )
 CALL SETTEXTPOSITION( 2, 10, curpos )
 CALL OUTTEXT( 'Resolucao de Equacoes diferenciais' // str )
 CALL SETTEXTPOSITION( 3, 10, curpos )
 CALL OUTTEXT( 'Simulacao de um motor de corrente continua' // str)
 CALL SETTEXTPOSITION( 24, 15, curpos )
 CALL OUTTEXT( 'Vel(armar) Tens_armd(Verm) Corr_armd(Cyan)' // str)
 
 ui=2.
 wm=0.
 ia=0.
C
C Calculate each position and display it on the screen.
C
 DO i = 0, 999, 3
 
C k1 = eqinc*funcaoia(ia)
C k2 = eqinc*funcaoia(ia+k1/2.)
C k3 = eqinc*funcaoia(ia+k2/2.)
C k4 = eqinc*funcaoia(ia+k3)
 k1 = eqinc*(ui/la - ia * ra/la - wm * kb/la)
 k2 = eqinc*(ui/la - (ia+k1/2.) * ra/la - wm * kb/la)
 k3 = eqinc*(ui/la - (ia+k2/2.) * ra/la - wm * kb/la)
 k4 = eqinc*(ui/la - (ia+k3) * ra/la - wm * kb/la)
 ia = ia + (k1 + 2. * k2 + 2. * k3 + k4)/6.
C ia=ia+0.001*(ui/la - ia * ra/la - wm * kb/la)
 k1 = eqinc*(ki*ia/jm - wm*bm/jm - tl/jm )
 k2 = eqinc*(ki*ia/jm - (wm+k1/2.)*bm/jm - tl/jm )
 k3 = eqinc*(ki*ia/jm - (wm+k2/2.)*bm/jm - tl/jm )
 k4 = eqinc*(ki*ia/jm - (wm+k3)*bm/jm - tl/jm )
 wm = wm + (k1 + 2. * k2 + 2. * k3 + k4)/6.
 
C wm=wm+0.01*(ki*ia/jm - wm*bm/jm - tl/jm )
 if(wm.LT.0.)wm=0.
 ui=1+i/100
 locx = newx( i )
 dummy = SETCOLOR( 15 )
 locy = newy( INT2( -ui * 50.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 15 )
 locy = newy( INT2( -ia * 60.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 15 )
 locy = newy( INT2( -wm * 7.0 ) )
 dummy = SETPIXEL( locx, locy )
 END DO
 CALL SETTEXTPOSITION( 25, 10, curpos )
 WRITE(*,*)wm,ui,ia
 END
CC DRAWSHAPES - Draws two boxes and two ellipses.
CC
 SUBROUTINE drawshapes()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx, newy
 INTEGER*2 dummy, newx, newy
C
C Create a masking (fill) pattern.
C
 INTEGER*1 diagmask(8), linemask(8)
 DATA diagmask / #93, #C9, #64, #B2, #59, #2C,
 + #96, #4B /
 DATA linemask / #FF, #00, #7F, #FE, #00, #00,
 + #00, #CC /
C
C Draw the rectangles.
C
 CALL SETLINESTYLE( #FFFF )
 CALL SETFILLMASK( diagmask )
 dummy = SETCOLOR( 9 )
 dummy = RECTANGLE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 200 ) ), newy( INT2( -425 ) ) )
 dummy = RECTANGLE( $GFILLINTERIOR,
+ newx( INT2( 550 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( -425 ) ) )
C
C Draw the ellipses.
C
 CALL SETFILLMASK( linemask )
 dummy = ELLIPSE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2(325 ) ),
 + newx( INT2( 200 ) ), newy( INT2(425 ) ) )
 dummy = ELLIPSE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( 325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( 425 ) ) )
 END
CC ENDPROGRAM - This subroutine waits for a key to
CC be pressed, then resets the screen before
CC returning.
 SUBROUTINE endprogram()
 INCLUDE 'FGRAPH.FD'
 INCLUDE 'FLIB.FD'
 
 INTEGER*2 dummy
 CHARACTER*1 dumch
 dumch = GETCHARQQ() ! Wait for a key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/motorcc2.for
C funcaoia(float yy)
C return(ui/la - yy * ra/la - wm * kb/la)
C END
C funcaowm(float yy)
C return(ki*ia/jm - yy*bm/jm - tl/jm );
C END
C funcaotetam(float yy)
C return(wm);
C END
C rungekuta4() /*Ordem 4*/
C float eqinc,k1,k2,k3,k4;
C eqinc=0.001;
C k1 = eqinc*funcaoia(ia);
C k2 = eqinc*funcaoia(ia+k1/2.);
C k3 = eqinc*funcaoia(ia+k2/2.);
C k4 = eqinc*funcaoia(ia+k3);
C ia = ia + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
C k1 = eqinc*funcaowm(wm);
C k2 = eqinc*funcaowm(wm+k1/2.);
C k3 = eqinc*funcaowm(wm+k2/2.);
C k4 = eqinc*funcaowm(wm+k3);
C wm = wm + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
C k1 = eqinc*funcaotetam(tetam);
C k2 = eqinc*funcaotetam(tetam+k1/2.);
C k3 = eqinc*funcaotetam(tetam+k2/2.);
C k4 = eqinc*funcaotetam(tetam+k3);
C tetam = tetam + (k1 + 2. * k2 + 2. * k3 + k4)/6.;
C END 
CC SINE.FOR - Illustrates basic graphics commands.
CC
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FLIB.FI'
 CALL graphicsmode()
 CALL drawlines()
 CALL sinewave()
c CALL drawshapes()
 CALL endprogram()
 END
C Definitions of subroutines go here
 SUBROUTINE graphicsmode()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 modestatus, maxx, maxy
 RECORD /videoconfig/ myscreen
 COMMON maxx, maxy
C
C Set highest resolution graphics mode.
C
 modestatus = SETVIDEOMODE( $VRES16COLOR )
 IF( modestatus.EQ.0) STOP 'Error: cannot set graphics mode'
C
C Determine the minimum and maximum dimensions.
C
 CALL GETVIDEOCONFIG( myscreen )
 maxx = myscreen.numxpixels - 1
 maxy = myscreen.numypixels - 1
 END
CC NEWX - This function finds new x-coordinates.
CC
 INTEGER*2 FUNCTION newx( xcoord )
 INTEGER*2 xcoord, maxx, maxy
 REAL*4 tempx
 COMMON maxx, maxy
 tempx = maxx / 1000.0
 tempx = xcoord * tempx + 0.5
 newx = tempx
 END
CC NEWY - This function finds new y-coordinates.
 INTEGER*2 FUNCTION newy( ycoord )
 INTEGER*2 ycoord, maxx, maxy
 REAL*4 tempy
 COMMON maxx, maxy
 tempy = maxy / 1000.0
 tempy = ycoord * tempy + 0.5
 newy = tempy
 END
CC DRAWLINES - This subroutine draws a box and
CC several lines.
 SUBROUTINE drawlines()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx,newy
 INTEGER*2 status, newx, newy, maxx, maxy
 RECORD /xycoord/ xy
 
 COMMON maxx, maxy
C
C Draw the box.
C
 dummy = SETCOLOR( 15 )
 status = RECTANGLE( $GBORDER, 1, 0, maxx, maxy )
 CALL SETVIEWORG( 0, newy( INT2( 500 ) ), xy )
C
C Draw the lines.
C
 CALL MOVETO( 0, 0, xy )
 status = LINETO( newx( INT2( 1000 ) ), 0 )
 CALL SETLINESTYLE( #AA3C )
 CALL MOVETO( 0, newy( INT2( -250 ) ), xy )
 status = LINETO(newx(INT2( 1000 ) ),
 + newy( INT2( -250 ) ) )
 CALL SETLINESTYLE( #8888 )
 CALL MOVETO( 0, newy( INT2( 250 ) ), xy )
 status = LINETO( newx( INT2( 1000 ) ),
 + newy( INT2( 250 ) ) )
 END
CC SINEWAVE - This subroutine calculates and plots a sine
CC wave.
CC
 SUBROUTINE sinewave()
 INCLUDE 'FGRAPH.FD'
 REAL ra,la,kb,ki,jm,bm,tl,wm,ia,ui,k1,k2,k3,k4,eqinc,teta
 
 INTEGER*2 dummy, newx, newy, locx, locy, i
 DOUBLE PRECISION PI
 EXTERNAL newx, newy
 RECORD /rccoord/ curpos
 PARAMETER ( PI = 3.14159 )
 
 
 eqinc=0.001
 
C Variaveis do motor de corrente continua
 ra=1.0045
 la=0.0292
 kb=0.0869
 ki=0.0869
 jm=0.00063078
 bm=0.0023
 Tl=0.1
 dummy = SETTEXTCOLOR( 15 )
 dummy = SETCOLOR( 15 )
 CALL SETTEXTPOSITION( 2, 10, curpos )
 CALL OUTTEXT( 'Resolucao de Equacoes diferenciais' // str ) 
 CALL SETTEXTPOSITION( 3, 10, curpos )
 CALL OUTTEXT( 'Simulacao de um motor de corrente continua' // str)
 CALL SETTEXTPOSITION( 24, 15, curpos )
 CALL OUTTEXT( 'Vel(armar) Tens_armd(Verm) Corr_armd(Cyan)' // str)
 CALL SETTEXTPOSITION( 24, 59, curpos )
 CALL OUTTEXT( 'Deslocamento(amarelo)' // str)
 
 ui=2.
 wm=0.
 ia=0.
 teta=0.
C
C Calculate each position and display it on the screen.
C
 DO i = 0, 999, 3
 
C k1 = eqinc*funcaoia(ia)
C k2 = eqinc*funcaoia(ia+k1/2.)
C k3 = eqinc*funcaoia(ia+k2/2.)
C k4 = eqinc*funcaoia(ia+k3)
 k1 = eqinc*(ui/la - ia * ra/la - wm * kb/la)
 k2 = eqinc*(ui/la - (ia+k1/2.) * ra/la - wm * kb/la)
 k3 = eqinc*(ui/la - (ia+k2/2.) * ra/la - wm * kb/la)
 k4 = eqinc*(ui/la - (ia+k3) * ra/la - wm * kb/la)
 ia = ia + (k1 + 2. * k2 + 2. * k3 + k4)/6.
C ia=ia+0.001*(ui/la - ia * ra/la - wm * kb/la)
 k1 = eqinc*(ki*ia/jm - wm*bm/jm - tl/jm )
 k2 = eqinc*(ki*ia/jm - (wm+k1/2.)*bm/jm - tl/jm )
 k3 = eqinc*(ki*ia/jm - (wm+k2/2.)*bm/jm - tl/jm )
 k4 = eqinc*(ki*ia/jm - (wm+k3)*bm/jm - tl/jm )
 wm = wm + (k1 + 2. * k2 + 2. * k3 + k4)/6.
 
C wm=wm+0.01*(ki*ia/jm - wm*bm/jm - tl/jm )
 if(wm.LT.0.)wm=0.
 ui=1+i/100
 locx = newx( i ) 
 
 teta=teta+0.01*wm 
 
 dummy = SETCOLOR( 11 )
 locy = newy( INT2( -ui * 50.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 12 )
 locy = newy( INT2( -ia * 60.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 13 )
 locy = newy( INT2( -wm * 7.0 ) )
 dummy = SETPIXEL( locx, locy ) 
 
 dummy = SETCOLOR( 14 )
 locy = newy( INT2( -teta * 7.0 ) )
 dummy = SETPIXEL( locx, locy )
 END DO
 CALL SETTEXTPOSITION( 25, 10, curpos )
 WRITE(*,*)wm,ui,ia,teta
 END
CC DRAWSHAPES - Draws two boxes and two ellipses.
CC
 SUBROUTINE drawshapes()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx, newy
 INTEGER*2 dummy, newx, newy
C
C Create a masking (fill) pattern.
C
 INTEGER*1 diagmask(8), linemask(8)
 DATA diagmask / #93, #C9, #64, #B2, #59, #2C,
 + #96, #4B /
 DATA linemask / #FF, #00, #7F, #FE, #00, #00,
 + #00, #CC /
C
C Draw the rectangles.
C
 CALL SETLINESTYLE( #FFFF )
 CALL SETFILLMASK( diagmask )
 dummy = SETCOLOR( 9 )
 dummy = RECTANGLE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 200 ) ), newy( INT2( -425
) ) )
 dummy = RECTANGLE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( -425 ) ) )
C
C Draw the ellipses.
C
 CALL SETFILLMASK( linemask )
 dummy = ELLIPSE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2(325 ) ),
 + newx( INT2( 200 ) ), newy( INT2(425 ) ) )
 dummy = ELLIPSE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( 325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( 425 ) ) )
 END
CC ENDPROGRAM - This subroutine waits for a key to
CC be pressed, then resets the screen before
CC returning.
 SUBROUTINE endprogram()
 INCLUDE 'FGRAPH.FD'
 INCLUDE 'FLIB.FD'
 
 INTEGER*2 dummy
 CHARACTER*1 dumch
 dumch = GETCHARQQ() ! Wait for a key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
 
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/Motorcc.for
CC SINE.FOR - Illustrates basic graphics commands.
CC
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FLIB.FI'
 CALL graphicsmode()
 CALL drawlines()
 CALL sinewave()
c CALL drawshapes()
 CALL endprogram()
 END
C Definitions of subroutines go here
 SUBROUTINE graphicsmode()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 modestatus, maxx, maxy
 RECORD /videoconfig/ myscreen
 COMMON maxx, maxy
C
C Set highest resolution graphics mode.
C
 modestatus = SETVIDEOMODE( $VRES16COLOR )
 IF( modestatus.EQ.0) STOP 'Error: cannot set graphics mode'
C
C Determine the minimum and maximum dimensions.
C
 CALL GETVIDEOCONFIG( myscreen )
 maxx = myscreen.numxpixels - 1
 maxy = myscreen.numypixels - 1
 END
CC NEWX - This function finds new x-coordinates.
CC
 INTEGER*2 FUNCTION newx( xcoord )
 INTEGER*2 xcoord, maxx, maxy
 REAL*4 tempx
 COMMON maxx, maxy
 tempx = maxx / 1000.0
 tempx = xcoord * tempx + 0.5
 newx = tempx
 END
CC NEWY - This function finds new y-coordinates.
 INTEGER*2 FUNCTION newy( ycoord )
 INTEGER*2 ycoord, maxx, maxy
 REAL*4 tempy
 COMMON maxx, maxy
 tempy = maxy / 1000.0
 tempy = ycoord * tempy + 0.5
 newy = tempy
 END
CC DRAWLINES - This subroutine draws a box and
CC several lines.
 SUBROUTINE drawlines()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx,newy
 INTEGER*2 status, newx, newy, maxx, maxy
 RECORD /xycoord/ xy
 
 COMMON maxx, maxy
C
C Draw the box.
C
 dummy = SETCOLOR( 9 )
 status = RECTANGLE( $GBORDER, 1, 0, maxx, maxy )
 CALL SETVIEWORG( 0, newy( INT2( 500 ) ), xy )
C
C Draw the lines.
C
 CALL MOVETO( 0, 0, xy )
 status = LINETO( newx( INT2( 1000 ) ), 0 )
 CALL SETLINESTYLE( #AA3C )
 CALL MOVETO( 0, newy( INT2( -250 ) ), xy )
 status = LINETO(newx(INT2( 1000 ) ),
 + newy( INT2( -250 ) ) )
 CALL SETLINESTYLE( #8888 )
 CALL MOVETO( 0, newy( INT2( 250 ) ), xy )
 status = LINETO( newx( INT2( 1000 ) ),
 + newy( INT2( 250 ) ) )
 END
CC SINEWAVE - This subroutine calculates and plots a sine
CC wave.
CC
 SUBROUTINE sinewave()
 INCLUDE 'FGRAPH.FD'
 REAL ra,la,kb,ki,jm,bm,tl,wm,ia,ui
 
 INTEGER*2 dummy, newx, newy, locx, locy, i
 DOUBLE PRECISION PI
 EXTERNAL newx, newy
 RECORD /rccoord/ curpos
 PARAMETER ( PI = 3.14159 )
C Variaveis do motor de corrente continua
 ra=1.01429
 la=0.0292
 kb=0.0869
 ki=0.0869
 jm=0.00063078
 bm=0.0023
 Tl=0.1
 dummy = SETTEXTCOLOR( 14 )
 dummy = SETCOLOR( 13 )
 CALL SETTEXTPOSITION( 2, 10, curpos )
 CALL OUTTEXT( 'Resolucao de Equacoes diferenciais' // str )
 CALL SETTEXTPOSITION( 3, 10, curpos )
 CALL OUTTEXT( 'Simulacao de um motor de corrente continua' // str)
 CALL SETTEXTPOSITION( 24, 15, curpos )
 CALL OUTTEXT( 'Vel(armar) Tens_armd(Verm) Corr_armd(Cyan)' // str)
 
 ui=2.
 wm=0.
 ia=0.
 
C
C Calculate each position and display it on the screen.
C
 DO i = 0, 999, 3
 
 ia=ia+0.001*(ui/la - ia * ra/la - wm * kb/la)
 wm=wm+0.001*(ki*ia/jm - wm*bm/jm - tl/jm )
 if(wm.LT.0.)wm=0.
 ui=1+i/100
 locx = newx( i )
 dummy = SETCOLOR( 12 )
 locy = newy( INT2( -ui * 50.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 13 )
 locy = newy( INT2( -ia * 60.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 dummy = SETCOLOR( 14 )
 locy = newy( INT2( -wm * 7.0 ) )
 dummy = SETPIXEL( locx, locy )
 
 
 END DO
 CALL SETTEXTPOSITION( 25, 10, curpos )
 WRITE(*,*)wm,ui,ia
 END
CC DRAWSHAPES - Draws two boxes and two ellipses.
CC
 SUBROUTINE drawshapes()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx, newy
 INTEGER*2 dummy, newx, newy
C
C Create a masking (fill) pattern.
C
 INTEGER*1 diagmask(8), linemask(8)
 DATA diagmask / #93, #C9, #64, #B2, #59, #2C,
 + #96, #4B /
 DATA linemask / #FF, #00, #7F, #FE, #00, #00,
 + #00, #CC /
C
C Draw the rectangles.
C
 CALL SETLINESTYLE( #FFFF )
 CALL SETFILLMASK( diagmask )
 dummy = SETCOLOR( 9 )
 dummy = RECTANGLE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 200 ) ), newy( INT2( -425 ) ) )
 dummy = RECTANGLE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( -425 ) ) )
C
C Draw the ellipses.
C
 CALL SETFILLMASK( linemask )
 dummy = ELLIPSE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2(325 ) ),
 + newx( INT2( 200 ) ), newy( INT2(425 ) ) )
 dummy = ELLIPSE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( 325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( 425 ) ) )
 END
CC ENDPROGRAM - This subroutine waits for a key to
CC be pressed, then resets the screen before
CC returning.
 SUBROUTINE endprogram()
 INCLUDE 'FGRAPH.FD'
 INCLUDE 'FLIB.FD'
 
 INTEGER*2 dummy
 CHARACTER*1 dumch
 dumch = GETCHARQQ() ! Wait for a key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/NEWFOR.FOR
C ITERACAO LINEAR
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FGRAPH.FD'
 LOGICAL fourcolors
 EXTERNAL fourcolors
 IF( fourcolors() ) THEN
 CALL graficos()
 ELSE
 WRITE (*,*) ' This program requires an EGA, VGA or',
 + ' SVGA graphics card.'
 END IF
 END 
C Additional functions defined below
C FOURCOLORS - Function to enter graphics mode for REALG.
 LOGICAL FUNCTION fourcolors()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 dummy
 RECORD /videoconfig/ screen
 COMMON screen
C
C Set to maximum number of available colors.
C
C dummy = SETVIDEOMODE( $MAXCOLORMODE ) $ERESCOLOR 
 dummy = SETVIDEOMODE( $VRES16COLOR ) 
 CALL GETVIDEOCONFIG( screen )
 fourcolors = .TRUE.
 IF( dummy .EQ. 0 ) fourcolors = .FALSE.
 END
C .
 SUBROUTINE graficos()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 dummy, halfx, halfy
 INTEGER*2 xwidth, yheight, cols, rows
 LOGICAL*2 finvert /'.FALSE.'
/
 RECORD /videoconfig/ screen
 COMMON screen
 CALL CLEARSCREEN( $GCLEARSCREEN )
 xwidth = screen.numxpixels
 yheight = screen.numypixels
 cols = screen.numtextcols
 rows = screen.numtextrows
 halfx = xwidth / 2
 halfy = (yheight / rows) * (rows / 2)
 CALL SETVIEWPORT( 0, 1, xwidth - 1, yheight - 1 )
 CALL SETTEXTWINDOW( 1, 1, rows, cols )
 dummy = SETWINDOW( finvert, -3.D0, -1.5D0, 1.5D0, 1.5D0 )
 CALL CALCULA( INT2( (rows / 2) + MOD( rows, 2 ) ) )
 dummy = RECTANGLE_W( $GBORDER, -3.0, -1.5, 1.5, 1.5 )
 READ (*,*) ! Wait for ENTER key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
C
C********************************************
C
C Inicio da subrotina ITERACAO LINEAR
C
C********************************************
C
 SUBROUTINE CALCULA(numc)
 INCLUDE 'FGRAPH.FD'
C DEFINICAO DAS VARIAVEIS USADAS NO PROGRAMA.
 REAL X0,X1,A0,B0,XX(21),H,MAXX,MAXY
 INTEGER*2 dummy, numc, i, k
 CHARACTER*4 str
 DOUBLE PRECISION ban(31),bananas(31), x, YY(31)
 RECORD /videoconfig/ screen
 RECORD /wxycoord/ wxy
 RECORD /rccoord/ curpos
 COMMON screen
C
C DEFINICAO DA FUNCAO F(X) COM Raizes 2 e -1, f(x)=x*x-x-2=0
C
 FUNC(X)=X*X-X-2.
 FUNCL(X)=2*X-1.
C LE OS VALORES PARA O INTERVALO [A,B].
 
 WRITE(6,20)
20 FORMAT(' INTERVALO INICIAL = ')
 READ(5,1)A0
 WRITE(6,21)
21 FORMAT(' INTERVALO FINAL = ')
 READ(5,1)B0
 WRITE(6,22)
22 FORMAT(' RAIZ INICIAL = ')
 READ(5,1)X0
1 FORMAT(F5.2)
 if(X0.EQ.0.)X0=0.01 
 ban(1)=FUNC(X0)
C CALCULA OS VALORES DE G(X) NO INTERVALO [A0,B0]
C ACHA MAXIMOS DOS EIXOS X E Y 
 H=(B0-A0)/20.
 XX(1)=A0
 YY(1)=FUNC(XX(1))
 MAXY=ABS(YY(1)) 
 DO i=2,21 
 k=i-1
 XX(i)=XX(k)+H
 YY(i)=FUNC(XX(i))
 if(ABS(YY(i)).GT.MAXY)MAXY=ABS(YY(i))
 END DO
C O METODO DE NEWTON CALCULA F(X)=0
 bananas(1)=X0
 MAXX=X0 
 WRITE(6,6)
6 FORMAT(' RAIZ G(RAIZ) ITER')
C
 DO I=2,21 
 if(FUNCL(X0).NE.0.)X1 = X0-FUNC(X0)/FUNCL(X0)
 bananas(I)=X1
 ban(I)=FUNC(X1) 
 if(X1.GT.MAXX)MAXX=X1
 WRITE(6,3)X0,X1,I
3 FORMAT(F9.6 F9.6 I4) 
 X0=X1
 END DO
C
 READ (*,*) ! Wait for ENTER key to be pressed
 CALL clearscreen ($GCLEARSCREEN)
C 
C APRESENTA RAIZES Xi
C 
 dummy = SETTEXTCOLOR( 13 )
 IF( screen.numcolors .LT. numc ) numc = screen.numcolors - 1
 DO i = 1, 21
 CALL SETTEXTPOSITION( i, 2, curpos )
 WRITE (str, '(F4.1)') bananas(i)
 CALL OUTTEXT( 'Valor da raiz = ' // str )
 END DO
C APRESENTA OS Intervalos inicial e final
 dummy = SETTEXTCOLOR( 14 )
 CALL SETTEXTPOSITION( 1, 30, curpos )
 WRITE (str, '(F4.1)')A0
 CALL OUTTEXT( 'Intervalo Inicial = ' // str )
 CALL SETTEXTPOSITION( 2, 30, curpos )
 WRITE (str, '(F4.1)')B0
 CALL OUTTEXT( 'Intervalo Final = ' // str )
C
C Draw a bordered rectangle around the graph.
C
 dummy = SETCOLOR( 1 )
 dummy = RECTANGLE_W( $GBORDER, -1.00, -1.00, 1.00, 1.00 )
 dummy = RECTANGLE_W( $GBORDER, -1.02, -1.02, 1.02, 1.02 )
C
C PLOTA OS PONTOS DAS RAIZES CALCULADAS.
C 
 x = -0.90
 DO i = 1, 19
 dummy = SETCOLOR( 2 )
 CALL MOVETO_W( x, -1.D0, wxy )
 dummy = LINETO_W( x, 1.0 )
 CALL MOVETO_W( -1.D0, x, wxy )
 dummy = LINETO_W( 1.0, x )
 dummy = SETCOLOR( 14 )
 CALL MOVETO_W( x - 0.1D0, bananas( i )/MAXX, wxy )
 dummy = LINETO_W( x, bananas( i + 1 )/MAXX )
 x = x + 0.1
 END DO
 CALL MOVETO_W( 0.9D0, bananas( i )/MAXX, wxy )
 dummy = LINETO_W( 1.0, bananas( i + 1 )/MAXX )
C Plot os pontos de g(x)
C
 dummy = SETCOLOR( 12 )
 x = -0.90
 DO i = 1, 19
 CALL MOVETO_W( x - 0.1D0, YY( i )/MAXY, wxy )
 dummy = LINETO_W( x, YY( i + 1 )/MAXY )
 x = x + 0.1
 END DO
 CALL MOVETO_W( 0.9D0, YY( i )/MAXY, wxy )
 dummy = LINETO_W( 1.0, YY( i + 1 )/MAXY )
 END
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/SINE.FOR
CC SINE.FOR - Illustrates basic graphics commands.
CC
 INCLUDE 'FGRAPH.FI'
 INCLUDE 'FLIB.FI'
 CALL graphicsmode()
 CALL drawlines()
 CALL sinewave()
 CALL drawshapes()
 CALL endprogram()
 END
C Definitions of subroutines go here
 SUBROUTINE graphicsmode()
 INCLUDE 'FGRAPH.FD'
 INTEGER*2 modestatus, maxx, maxy
 RECORD /videoconfig/ myscreen
 COMMON maxx, maxy
C
C Set highest resolution graphics mode.
C
 modestatus = SETVIDEOMODE( $ERESCOLOR )
 IF( modestatus.EQ.0) STOP 'Error: cannot set graphics mode'
C
C Determine the minimum and maximum dimensions.
C
 CALL GETVIDEOCONFIG( myscreen )
 maxx = myscreen.numxpixels - 1
 maxy = myscreen.numypixels - 1
 END
CC NEWX - This function finds new x-coordinates.
CC
 INTEGER*2 FUNCTION newx( xcoord )
 INTEGER*2 xcoord, maxx, maxy
 REAL*4 tempx
 COMMON maxx, maxy
 tempx = maxx / 1000.0
 tempx = xcoord * tempx + 0.5
 newx = tempx
 END
CC NEWY - This function finds new y-coordinates.
 INTEGER*2 FUNCTION newy( ycoord )
 INTEGER*2 ycoord, maxx, maxy
 REAL*4 tempy
 COMMON maxx, maxy
 tempy = maxy / 1000.0
 tempy = ycoord * tempy + 0.5
 newy = tempy
 END
CC DRAWLINES - This subroutine draws a box and
CC several lines.
 SUBROUTINE drawlines()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx,newy
 INTEGER*2 dummy,status, newx, newy, maxx, maxy
 RECORD /xycoord/ xy
 COMMON maxx, maxy
C
C Draw the box.
C
 status = RECTANGLE( $GBORDER, 0, 0, maxx, maxy )
 CALL SETVIEWORG( 0, newy( INT2( 500 ) ), xy )
C
C Draw the lines.
C
 dummy = SETTEXTCOLOR( 14 )
 dummy = SETCOLOR( 14 )
 CALL MOVETO( 0, 0, xy )
 status = LINETO( newx( INT2( 1000 ) ), 0 )
 CALL SETLINESTYLE( #AA3C )
 CALL MOVETO( 0, newy( INT2( -250 ) ), xy )
 status = LINETO(newx(INT2( 1000 ) ),
 + newy( INT2( -250 ) ) )
 CALL SETLINESTYLE( #8888 )
 CALL MOVETO( 0, newy( INT2( 250 ) ), xy )
 status = LINETO( newx( INT2( 1000 ) ),
 + newy( INT2( 250 ) ) )
 END
CC SINEWAVE - This subroutine calculates and plots a sine
CC wave.
CC
 SUBROUTINE sinewave()
 INCLUDE 'FGRAPH.FD'
 REAL X0,A0,B0
 INTEGER*2 dummy, newx, newy, locx, locy, i
 DOUBLE PRECISION rad, PI
 EXTERNAL newx, newy
 PARAMETER ( PI = 3.14159 )
C
C Calculate each position and display it on the screen.
C 
C LE OS VALORES PARA O INTERVALO [A,B].
 
 WRITE(6,20)
20 FORMAT(' INTERVALO INICIAL = ')
 READ(5,1)A0
 WRITE(6,21)
21 FORMAT(' INTERVALO FINAL = ')
 READ(5,1)B0
 WRITE(6,22)
22 FORMAT(' RAIZ INICIAL = ')
 READ(5,1)X0
1 FORMAT(F5.2)
 dummy = SETCOLOR( 12 )
 DO i = 0, 999, 3
 rad = -SIN( PI * i / 250.0 )
 locx = newx( i )
 locy = newy( INT2( rad * 250.0 ) )
 dummy = SETPIXEL( locx, locy )
 END DO
 END
CC DRAWSHAPES - Draws two boxes and two ellipses.
CC
SUBROUTINE drawshapes()
 INCLUDE 'FGRAPH.FD'
 EXTERNAL newx, newy
 INTEGER*2 dummy, newx, newy
C
C Create a masking (fill) pattern.
C
 INTEGER*1 diagmask(8), linemask(8)
 DATA diagmask / #93, #C9, #64, #B2, #59, #2C,
 + #96, #4B /
 DATA linemask / #FF, #00, #7F, #FE, #00, #00,
 + #00, #CC /
C
C Draw the rectangles.
C
 CALL SETLINESTYLE( #FFFF )
 CALL SETFILLMASK( diagmask )
 dummy = SETCOLOR( 13 )
 dummy = RECTANGLE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 200 ) ), newy( INT2( -425 ) ) )
 dummy = RECTANGLE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( -325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( -425 ) ) )
C
C Draw the ellipses.
C
 CALL SETFILLMASK( linemask )
 dummy = SETCOLOR( 9 )
 dummy = ELLIPSE( $GBORDER,
 + newx( INT2( 50 ) ), newy( INT2(325 ) ),
 + newx( INT2( 200 ) ), newy( INT2(425 ) ) )
 dummy = ELLIPSE( $GFILLINTERIOR,
 + newx( INT2( 550 ) ), newy( INT2( 325 ) ),
 + newx( INT2( 700 ) ), newy( INT2( 425 ) ) )
 END
CC ENDPROGRAM - This subroutine waits for a key to
CC be pressed, then resets the screen before
CC returning.
 SUBROUTINE endprogram()
 INCLUDE 'FGRAPH.FD'
 INCLUDE 'FLIB.FD'
 
 INTEGER*2 dummy
 CHARACTER*1 dumch
 dumch = GETCHARQQ() ! Wait for a key to be pressed
 dummy = SETVIDEOMODE( $DEFAULTMODE )
 END
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN1.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/ITERLIN.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/LINFOR.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MATRIZ~1.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MATRIZES.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTORCC.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTORCC1.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/MOTORCC2.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/NEWFOR.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/SINE.OBJ
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN1.PIF
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/CN3.PIF
Usuarios/Junior/Novo/UFCG/C�lculo Num�rico/teste/dadoin.txt
Ra 1.005882353
La 0.0292
kb 0.0869
ki 0.0869
jm 0.00063078
Bm 0.0023
Tl 0.25
Iaref 10.
Wmref 80.
tref 5.
CTEwm 100.
CTEia 5.
CTEteta 5.
Ea 12.00000
INC 0.0020
kkp 0.086
kki -0.081
kkkp 36.22
kkki -29.95
ITER 3
#CONTAia 10
#CONTAwm 30
GRAFNUM 1
CONTROL 3
ZOOM 1
C�lculo Num�rico/exercicio 2 parte I.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 02
Módulo 2 – Conceitos Básicos: Sistemas de
Numeração e Ponto Flutuante
Aluno: Charles Cavalcante Marques Mat: 20521787
Enumere os principais princípios usados em Cálculo Numérico que são comuns à Matemática e outras áreas científicas (e.g. Física). Para cada princípio, forneça um exemplo/ ilustração diferente daquele usado em sala de aula.
Interação ou aproximação sucessiva. Ex:
Discretização. Ex:
Transformação. Ex: área de um trapézio por retângulo(P1) e triângulos (P2)
Aproximação. Ex: assíntotas ilustram comportamento !no limite”de uma função (complexa) de interesse.
Divisão e Conquista. Ex: fazer uma integral complexa(por partes).
Quais são as bases dos sistemas de numeração decimal, binário, octal e hexadecimal?
Decimal: base 10; Binário: base 2; octal: base 8; Hexadecimal: base 6
Em geral, as representações decimal, octal e hexadecimal de um número binário contém mais ou menos dígitos do que o número binário?
Menos, porque só tem 0 e 1.
O maior e menor dígito em qualquer base vale quanto, respectivamente?
Base – 1 é o maior digito em qualquer base, e o menor é zero.
Quanto é o valor posicional do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
É o b0, decimal = 100, no binário =20, no octal = 80, no hexadecimal = 160.
Quanto é o valor posicional do dígito imediatamente à esquerda do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
O mais a esquerda é b1, no decimal é 101, no binário é 21, no octal é 81, no hexadecimal é 161.
Preencha a tabela abaixo com os valores posicionais das quatro posições indicadas, em cada um dos sistemas de numeração indicados:
		Decimal
		1000
		100
		10
		1
		Hexadecimal
		4096
		256
		16
		1
		Binário
		 8
		4
		2
		1
		Octal
		512
		64
		8
		1
Converta o binário 1101 0101 1000 para octal e hexadecimal.
(11010101100)2 = (D58)16 = (6530)8
Converta FACE para binário.
(FACE)16 = (1111 1010 1100 1110)2
Converta 7316 (octal) para binário.
(7316)8 = (111 011 001 110)2
Converta 4FEC para octal (passe primeiro por binário).
(4FEC)16 = (0 100 111 111 101 100)2 = (47754)8
Converta o binário 1101110 para decimal.
(1101110)2 = 1 x 26 + 1 x 25 +0 x 24 + 1 x 23 + 1x 22 +1 x 21 + 0 x 20 = (110)10
Converta 317 (octal) para decimal.
(317)8 = (317)10
Converta 317, 713 (octal) para decimal.
(317,713)8 = 3 x 82 + 1 x 81 +7 x 80 , 7 x 8-1 +1 x 8-2 + 3 x 8-3
Converta 10,08 (decimal) para binário.
(10,08)10 = 1010,0001
Converta 417 decimal para binário. Depois forneça os complementos de um e dois.
(417)10 = (0100 0001 0111)2
C�lculo Num�rico/exercicio 2 parte II.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 02
Módulo 2 – Conceitos Básicos: Sistemas de
Numeração e Ponto Flutuante
Aluno: Charles Cavalcante Marques Mat: 20521787
Converta 417 decimal para binário. Depois forneça os complementos de um e dois.
Qual o resultado quando o complemento de um de um número é adicionado ao próprio número?
Por que um número real é também chamado de “ponto (ou vírgula) flutuante”?
Por ser não contínuos e discretos.
Qual seria a forma normalizada das representações dos números de ponto flutuante (todos decimais):
15,50 = normalizando = 0,1550 x 102
22 = normalizando = 0,22 x 102
3,1416... = normalizando = 0,31416... x 101
0,0327 = normalizando = 0,327 x 10-1
Repita a questão acima no caso dos números hexadecimais:
ABC,123 = normalizando = 0,ABC123 x 163
123, ABC = normalizando= 0,123ABC x 16 3
0,F9. = normalizando = 0,F9 x160
Quais os três componentes básicos de uma representação para números reais?
 O sinal, a parte fracionaria chamada de significando ou mantissa e o expoente.
O que é bit escondido na representação de floats?
É um bit q não precisa ser representado, pois já esta implícito.
Usando a representação/ilustração (8 bits) do slide 32 do conteúdo da Unidade 02, monte uma tabela com as faixas de valores para os números possíveis de serem representados com esta representação (a exemplo da Tabela no slide 45 – Quadro resumo IEEE 754).
Por que usamos a representação
não normalizada juntamente com a normalizada? Isto não gera confusão?
Porquê a necessidade de padronizar a representação de floats?
O que é de fato padronizado no IEEE 754?
O que é um NAN?
Represente com precisão simples e dupla, no padrão IEEE 754, os números decimais:
		i. 0 (zero);
		ii. -0
		iii. 4
		iv. 4725 X 10321
		v. 10-345
14) Defina overflow e underflow.
	Ocorre overrflow quando o valor absoluto do dado a ser representado excede a capacidade de representação, porque o número de bits de expoente (nesse caso é positivo) é insuficiente para representar o dado.
	Ocorre underflow quando o valor absoluto do dado a ser representado é tão pequeno que fica menor que o menor valor representável.
C�lculo Num�rico/exercicios 1.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 01
Módulo 1 – Motivação e Ferramentas de Suporte
Aluno: Charles Marques Mat:20521787
Qual o objetivo do Cálculo Numérico?
Estudar os procedimentos associados a diferentes métodos numéricos, analisando, com base nos conhecimentos adquiridos, em que condições se pode garantir que os resultados computados estão próximos dos resultados.
Apresente aplicações nas quais se torna necessário (ou útil) a produção de resultados numéricos.
		Na construção de edifícios, na introdução de um diodo num circuito, etc.
Sabendo que os métodos numéricos buscam soluções aproximadas para as formulações matemáticas, qual o problema inerente das soluções obtidas através da utilização destes métodos?
		Por ser aproximado do resultado real, sempre vai ter uma margem de erro, que pode ou não ser admissível. 
Quais os passos necessários para a obtenção de uma solução numérica utilizando o computador?
	Problema – levantamentos de dados – construção do modelo matemático – escolha do método numérico – implementação computacional – análise dos resultados – verificação.
Ilustre aplicações do Cálculo Numérico no âmbito do seu curso.
Plotar gráficos de engenharia, estudar métodos de produção,calcular margens de erros, entre outros. 
O que você entende por Ferramentas de Suporte?
	As ferramentas de suportes são subroutina disponíveis pela plataforma, no caso o compilador, que nos auxilia na construção dos programas.
Como são classificados os programas de computação numérica? Caracterize cada um destes programas.
	São classificados em:
Programa Individual
	Composto de alguns módulos
	Função: executar uma computação especifica.
Pacote
	Coleção de programas pra solucionar problemas de uma área.
Biblioteca
	Coleção sistematizada de programas para resolução de diversas classes de problemas de matemáticas.
	Tipicamente contem algumas centenas de programas.
Sistema de Software
	Constituindo de um pacote ou biblioteca com uma interface de comunicação com o usuário.
	Utiliza uma linguagem especial.
Descreva em linhas gerais as características do MATLAB que o tornam uma ferramenta útil ao Cálculo Numérico.
	Software interativo de alto desempenho; integração de analise numérica, calculo com matrizes, processamento de sinais e construção de gráficos resolução de problemas numéricos em apenas um fração do tempo que se gastaria para escrever um programa semelhante de linguagem Fortran, Basic ou C; as soluções dos problemas são expressas quase exatamente como escritas matematicamente, ao contrario da programação tradicional.
C�lculo Num�rico/exercicios 2.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 02
Módulo 2 – Conceitos Básicos: Sistemas de
Numeração e Ponto Flutuante
Enumere os principais princípios usados em Cálculo Numérico que são comuns à Matemática e outras áreas científicas (e.g. Física). Para cada princípio, forneça um exemplo/ ilustração diferente daquele usado em sala de aula.
Interação ou aproximação sucessiva. Ex:
Discretização. Ex:
Transformação. Ex:
Aproximação. Ex:
Divisão e Conquista. Ex:
Quais são as bases dos sistemas de numeração decimal, binário, octal e hexadecimal?
Decimal: base 10; Binário: base 2; octal: base 8; Hexadecimal: base 6
Em geral, as representações decimal, octal e hexadecimal de um número binário contém mais ou menos dígitos do que o número binário?
Menos, porque só tem 0 e 1.
O maior e menor dígito em qualquer base vale quanto, respectivamente?
Base – 1 é o maior digito em qualquer base, e o menor é zero.
Quanto é o valor posicional do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
É o b0, decimal = 100, no binário =20, no octal = 80, no hexadecimal = 160.
Quanto é o valor posicional do dígito imediatamente à esquerda do dígito mais à direita nos sistemas binário, octal, decimal e hexadecimal?
O mais a esquerda é b1, no decimal é 101, no binário é 21, no octal é 81, no hexadecimal é 161.
Preencha a tabela abaixo com os valores posicionais das quatro posições indicadas, em cada um dos sistemas de numeração indicados:
		Decimal
		1000
		100
		10
		1
		Hexadecimal
		4096
		256
		16
		1
		Binário
		 8
		4
		2
		1
		Octal
		512
		64
		8
		1
Converta o binário 1101 0101 1000 para octal e hexadecimal.
Converta FACE para binário.
Converta 7316 (octal) para binário.
Converta 4FEC para octal (passe primeiro por binário).
Converta o binário 1101110 para decimal.
Converta 317 (octal) para decimal.
Converta 317, 713 (octal) para decimal.
Converta 10,08 (decimal) para binário.
Converta 417 decimal para binário. Depois forneça os complementos de um e dois.
Qual o resultado quando o complemento de um de um número é adicionado ao próprio número?
Por que um número real é também chamado de “ponto (ou vírgula) flutuante”?
Qual seria a forma normalizada das representações dos números de ponto flutuante (todos decimais):
15,50
22
3,1416...
0,0327
Repita a questão acima no caso dos números hexadecimais:
ABC,123
123, ABC
0,F9.
Quais os três componentes básicos de uma representação para números reais?
O que é bit escondido na representação de floats?
Usando a representação/ilustração (8 bits) do slide 32 do conteúdo da Unidade 02, monte uma tabela com as faixas de valores para os números possíveis de serem representados com esta representação (a exemplo da Tabela no slide 45 – Quadro resumo IEEE 754).
Por que usamos a representação não normalizada juntamente com a normalizada? Isto não gera confusão?
Porquê a necessidade de padronizar a representação de floats?
O que é de fato padronizado no IEEE 754?
O que é um NAN?
Represente com precisão simples e dupla, no padrão IEEE 754, os números decimais:
		i. 0 (zero);
		ii. -0
		iii. 4
		iv. 4725 X 10321
		v. 10-345
Defina overflow e underflow.
C�lculo Num�rico/exercicios integra�ao.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 08
Módulo 7 – Integração
DATA: 18/03/2003 
1) Qual a idéia básica da integração numérica?
2) Ilustre situações nas quais se torna útil a realização da integração numérica.
3) Descreva as principais características da Regra dos Trapézios Simples e da Regra dos Trapézios Composta.
4) Seja
Calcule uma aproximação para I usando a Regra de Trapézios Simples. Estime o erro cometido.
Calcule uma aproximação para I usando a Regra de Trapézios Composta, com 5 intervalos. Estime o erro cometido.
Para a integral acima, determine o número mínimo de intervalos para uso na Regra de Trapézios Composta de modo que o erro seja inferior a 0,001.
Seja, 
Calcule uma aproximação para I usando a Regra de Trapézios Simples. Estime o erro cometido.
Calcule uma aproximação para I usando a Regra de Trapézios Composta, com 4 intervalos. Estime o erro cometido.
� EMBED Unknown ���
� EMBED Unknown ���
_1109688995.unknown
_1109499587.unknown
C�lculo Num�rico/exercicios interpola�ao.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 07
Módulo 6 – Interpolação e Ajuste de Curvas
DATA: 18/03/2003 
Em que consiste a interpolação? Ilustre situações nas quais se torna útil o uso da interpolação.
Descreva, em linhas gerais, a interpolação polinomial.
Apresente situações nas quais não é aconselhável o uso da interpolação polinomial.
Descreva as principais características do Método dos Mínimos Quadrados utilizado para o Ajuste de Curvas.
Qual a relação entre o número de pontos usados na interpolação e o grau do polinômio interpolador que pode ser calculado?
Se você tiver um conjunto de 5 dados {(x0,f(x0), (x1,f(x1), (x2,f(x2), (x3,f(x3), (x4,f(x4),}, e deseja fazer uma interpolação linear, isto é, encontrar uma reta que lhe permita obter o valor de f(x(), onde x1<x(<x2:
Qual seria o grau do polinômio que você calcularia, isto é, quantos pontos você utilizaria?
E quais pontos da tabela você usaria?
7) A seguinte tabela informa o número de carros que passam por um determinado pedágio em um determinado dia:
		Horário
		10:00
		10:30
		11:00
		11:30
		12:00
		12:30
		Número (em mil)
		2.69
		1.64
		1.09
		1.04
		1.49
		2.44
Faça um gráfico de horário vs. número de carros para verificar qual a tendência da curva.
Estime o número de carros que passariam pelo pedágio às 11:10, usando a forma de Lagrange para encontrar um polinômio interpolador p(x) que estima o número de carros em função do tempo. Use uma reta como função interpoladora.
Agora, faça a mesma estimativa, mas utilizando uma parábola como polinômio
 interpolador.
 8) Determine a melhor reta que passa pelos seguintes pontos (use MMQ):
		x
		1
		2
		3
		4
		5
		f(x)
		0
		2
		4
		5
		5
 9) Repita o exercício 7) acima, só que agora, fazendo ajuste de curvas (MMQ).
Regressão linear
Regressão polinomial
C�lculo Num�rico/exercicios n 3.doc
		
		Universidade Federal de Campina Grande
Departamento de Sistemas e Computação
Disciplina: Cálculo Numérico 
Profs.: Bruno C N Queiroz
J. Antão B. Moura
José Eustáquio R. de Queiroz
Joseana Macêdo Fechine
Maria Izabel C. Cabral
Lista de Exercícios N° 03 + Gabarito
Módulo 3 – Erros
Erros estão sempre presentes nas soluções numéricas. Apresente exemplos dos seguintes tipos de erros:
Inerente ex: 50,3 +- 02 cm
de Truncamento ex: aproximação de uma função pela serie de Taylor.
de Representação
de Conversão
De que depende a representação de um número em um computador?
Depende do computador q será usado.
Os resultados dos cálculos realizados dependem da representação dos números nas máquinas utilizadas. Por que na expressão 
 para xi = 0,11, calculado no computador, obtem-se S=3299.99691 e não S= 3300 ?
	 
o resultado dos cálculos realizados dependem da representação dos números nas maquinas utilizadas. (011)10 não tem representação finita ma base 2.
Defina: Erro Absoluto e Erro Relativo. O que significa “Limitante Superior” no estudo de Erros Absolutos? Dê exemplos.
Erro absoluto = a diferença entre um valor exato e sua aproximação ´[e dito erro absoluto no qual é denotado por EA 
Erro relativo = é o erro absoluto dividido pelo valor aproximado. ER
Que tipo de erro nos dá informações sobre “precisão”? Mostre um exemplo em que a “precisão” é importante.
Apresente exemplos nos quais ocorrem erros de arredondamento e erros de truncamento. 
Complete: Ao se resolver um problema numericamente, a cada etapa e a cada operação realizada, devem surgir diferentes tipos de erros gerados das mais variadas maneiras, e estes erros se propagam e determinam o erro no resultado final obtido. O erro total em uma operação aritmética é composto pelo erro ________________________ e pelo erro no ________________ da operação.
 
8)
 Seja x = 0.857 x 104 e y = 0.6772 x 102. 
Calcular x - y e ER(x-y)sabendo que x, y e estão exatamente representados. 
 
Seja um sistema de aritmética de ponto flutuante de quatro dígitos, base decimal e com acumulador de precisão dupla. Dados os números:
X=0,7237x104 y=0,2145x10-3 e z=0,2585x101
Efetue as seguintes operações e obtenha o erro relativo no resultado, supondo que x, u, e z estão exatamente representados.
a)x+y+z b)x-y-z	 c)x/y 
d)(x.y)/z e)x.(y/z) f) (x+y).z
 
 
 10) 
 
11) Mesma questão para
: 
 12) 
Gabarito da Série de Exercícios (Questões 9 a 12)
9)
 a) x+y+z = 0,7240 x 104 e lERx+y+zl < 0,9998 x 10-3 
 b) x-y-z = 0,7234 x 104 e lERx-y-zl < 1,0002 x 10-3 
 c) x/y = 0,3374 x 108 e lERx/yl < 1/2 x 10-3 
 d) (x.y)/z= 0,6004 e lER(x.y)/zl < 10-3 
 e x.(y/z) = 0,6005 e lERx(y/z)l < 10-3
 f) (x+y).z = 0,1871 x 105 e lER(x+y).zl < 10-3 
10) lERul < 10-t+1 e lERwl < 4/3 x 10-t+1
11) lERul < 10-t+1 e lERwl < 13/8 x10-t+1
12) lERul < 2 x10-t+1
e lERwl < 7/3 x10-t+1
� EMBED Equation.3 ���
� EMBED Equation.3 ���
é menor do que o de 
Sejam � EMBED Equation.3 ��� e � EMBED Equation.3 ��� as representações de x e y obtidas por arredondamento em um computador. Deduza expressões de limitante de erro para mostrar que o limitante de erro relativo de 
e
e
� EMBED Equation.3 ���
� EMBED Equation.3 ���
� EMBED Equation.3 ���
� EMBED Equation.3 ���
Supondo que x é representado num computador por � EMBED Equation.3 ���, onde � EMBED Equation.3 ��� é obtido por arredondamento, obtenha os limites superiores para os erros relativos de
� EMBED Equation.3 ���
_1099771095.unknown
_1116913791.unknown
_1116913802.unknown
_1116913711.unknown
_1116913718.unknown
_1099770729.unknown
_1099770977.unknown
_1099769191.unknown
_1099770728.unknown
_1099769190.unknown
_1099767986.unknown
C�lculo Num�rico/Lista 1.doc
 Universidade Federal de Campina Grande
 Centro de Ciências e Tecnologia
 Disciplina: Cálculo Numérico
 Professor: Marcelo Barros
 Universitário: Hélio Cavalcanti A. Neto
Respostas da Lista de Exercícios Nº01
01. Buscar solucionar problemas técnicos através de métodos numéricos na solução de problemas na engenharia, verificando sempre a veracidade dos resultados.
02. As aplicações em cálculo numérico são largamente utilizadas em diversos processos da engenharia. Pode-se citar, por exemplo, a introdução de um diodo no circuito, determinação de raízes de equações, construções de edifícios e pontes.
03. Como os métodos numéricos buscam soluções aproximadas do que seria um valor exato, a possibilidade de se cometer erros é grande. Para um engenheiro é extremamente necessário conhecer a margem de tais erros e saber se estes são cabíveis ou não, para o desempenho preciso de seu trabalho.
04. São os seguintes passos: 
1) Conhecer o problema;
2) Fazer um levantamento de dados;
3) Realizar a construção de um modelo matemático;
4) Escolha do método numérico;
5) Implementação computacional;
6) Análise dos dados;
7) Verificação do resultado.
05. No âmbito da engenharia de produção, têm-se inúmeras utilidades, pois o curso de engenharia de produção oferece diversas especialidades. Pode-se plotar gráficos, determinar valores aproximados para a correta execução de projetos urbanístico-arquitetônicos, determinar soluções para problemas matemáticos que não podem ser resolvidos de forma analítica, etc.
06. Ferramentas de suporte são softwares que auxiliam a resolução de problemas que envolvem calculo numérico.
07. São classificados em:
Programa individual. 
 Composto de alguns módulos, tendo função de executar uma compilação especifica. Exemplo: Obter uma integral definida de uma função dada.
Pacote. 
Coleção de programas para solucionar problemas de uma área. Exemplo: Solução de sistemas de equações lineares.
Biblioteca.
Coleção sistematizada de programas para resolução de diversas classes de problemas de matemática. Tipicamente contém algumas centenas de programas.
Sistema de Software.
Constituído de um pacote ou uma biblioteca com uma interface de comunicação com o usuário. Utiliza uma linguagem especial. Exemplos: MATLAB, MAPLE, MATHEMATICA, etc.
08. Software interativo destinado ao cálculo numérico, onde seu ambiente é de fácil interação. Podem-se solucionar diversos tipos de problema, tais como: integração de integração de análise numérica, cálculo com matrizes, construções de gráficos e processamentos de sinais. Além disso, é um software ágil e eficiente, pois os problemas numéricos são resolvidos em fração de tempo que se gastaria para escrever um programa semelhante em linguagem Fortran, Basic ou C. 
C�lculo Num�rico/Lista 2.doc
 Universidade Federal de Campina Grande
 Centro de Ciências e Tecnologia
 Disciplina: Cálculo Numérico
 Professor: Marcelo Barros
 Universitário: Hélio Cavalcanti A. Neto
Respostas da Lista de Exercícios Nº02
01. 
1) Interação ou aproximação sucessiva. Exemplo: Conversores A/D por aproximação sucessiva, utilizando um algoritmo para converter a entrada analógica em digital
2) Discretização. Exemplo: Numa dilatação de uma placa de concreto, se pega uma amostra que esteja dentre o intervalo de 1 hora e a estuda-a.
3) Aproximação. Exemplo: Utiliza-se nas series o teste da comparação para solucionar determinadas funções que são semelhantes a funções cujos resultados são conhecidos.
4) Transformação Exemplo: A área de um hexágono regular pode ser achada dividindo este hexágono em seis triângulos eqüiláteros e somando suas áreas.
5) Divisão e conquista. Exemplo: Área de um hexágono regular
02.
Decimal: base 10; 
Binário: base 2; 
Octal: base 8; 
Hexadecimal: base 16.
03. Contém menos.
04. O menor dígito vale zero, já o maior dígito depende da base. Pode-se identificar fazendo: (BASE-1). Por exemplo:
Maior dígito da Base 8 
 8-1 = 7
05. 
Decimal: 10
Binária: 2
Hexadecimal: 16
Octal: 8
Por exemplo:
 26 
 2.10
+6.10
Valor posicional
do dígito mais a direita
06.
Decimal: 10
Binária: 2
Hexadecimal: 16
Octal: 8
Por exemplo:
 26 
 2.10
+6.10
Valor posicional
do dígito a esquerda
07.
		Decimal
		1000
		100
		10
		1
		Hexadecimal
		4096
		256
		16
		1
		Binário
		8
		4
		2
		1
		Octal
		512
		64
		8
		1
08. (11010101100)2 = (D58)16 = (6530)8
09. (FACE)16 = (1111 1010 1100 1110)2
10. (7316)8 = (111 011 001 110)2
11. (4FEC)16 = (0 100 111 111 101 100)2 = (47754)8
12. (1101110)2 = 1 x 26 + 1 x 25 +0 x 24 + 1 x 23 + 1x 22 +1 x 21 + 0 x 20 = (110)10
13. (317)8 = (317)10
14. (317,713)8 = 3 x 82 + 1 x 81 +7 x 80 , 7 x 8-1 +1 x 8-2 + 3 x 8-3
15. (10,08)10 = 1010,0001
16. (417)10 = (0100 0001 0111)2
17.
18. Por ser não contínuos e discretos.
19. 
15,50 
 normalizando = 0,1550 x 102
22 
 normalizando = 0,22 x 102
3,1416... 
 normalizando = 0,31416... x 101
0,0327 
 normalizando = 0,327 x 10-1
20.
ABC,123 
 normalizando = 0,ABC123 x 163
123, ABC 
 normalizando= 0,123ABC x 16 3
0,F9 
 normalizando = 0,F9 x160
21. O sinal, a mantissa e o expoente.
_1227648555.unknown
_1227648724.unknown
_1227649438.unknown
_1227649445.unknown
_1227648785.unknown
_1227648714.unknown
_1227648507.unknown
_1227648522.unknown
_1227634620.unknown
C�lculo Num�rico/Lista 3.doc
 Universidade Federal de Campina Grande
 Centro de Ciências e Tecnologia
 Disciplina: Cálculo Numérico
 Professor: Marcelo Barros
 Universitário: Hélio Cavalcanti A. Neto
Respostas da Lista de Exercícios Nº03
01.
a) Erro inerente de uma balança, pois todo e qualquer instrumento possui limitações na precisão com que pode fazer medidas de grandezas físicas.
b) Número 
c) Representação de 128.5 é 1000 0000.1
 Mas os 9 bits não cabem nos 8 bits da mantissa, portanto o número representado
é 128.0 originando um erro de representação
d) Conversão de 0,1
 para base 2.
02. Depende da máquina utilizada. Por exemplo, 
 não tem representação finita e podem existir várias representações distintas em diferentes máquinas.
03. O resultado dos cálculos depende da representação dos números nas maquinas utilizadas, no caso acima a diferença de ocorre devido a uma aproximação, resultando em S = 3300.
04. Erro absoluto (
) é a diferença entre o valor exato e o valor aproximado.
 = 
Erro relativo (
) é a divisão entre o valor absoluto e o valor exato.
 = 
Limite superior é a variação tanto positiva quanto negativa que se pode conter o erro.
Para 
 ((3.14 ,3.15) |EA 
 | = | 
 - 
 | < 0.01,
Para 
= 2112,9 com |EAx| < 0.1 tem-se x ((2112,8, 2113),
Para 
= 5.3 com |EAx| < 0.1 tem-se y ( (5.2,5.4).
05. Arredondamento. Na construção de pontes.
06. Truncamento: aproximação de uma função pela serie de Taylor e valor de 
 Arredondamento: valor de 
 e 
07. Ao se resolver um problema numericamente, a cada etapa e a cada operação realizada, deve surgir diferentes tipos de erros gerados das mais variadas maneiras, e estes erros se propagam e determinam o erro no resultado final obtido. O erro total em uma operação aritmética é composto pelo erro DAS PARCELAS e pelo erro no RESULTADO da operação.
08.
09.
_1227650789.unknown
_1227651278.unknown
_1227950115.unknown
_1227950919.unknown
_1227950983.unknown
_1227950714.unknown
_1227651419.unknown
_1227650979.unknown
_1227651043.unknown
_1227651193.unknown
_1227650811.unknown
_1227650340.unknown
C�lculo Num�rico/matlab.zip
apostilamatlab.doc
			
�
11	INTRODUÇÃO	
2	EXEMPLOS SIMPLES	1
3	CARACTERÍSTICAS BÁSICAS	4
3.1	Área de Trabalho do MATLAB	4
3.2	Formato dos Números	5
3.3	Variáveis	5
3.4	Comentários e Pontuações	6
3.5	Operadores Relacionais	8
4	Números Complexos	8
5	Funções Matemáticas	9
6	Gerenciamento de Arquivos	13
6.1	Arquivos Script (M-files)	13
7	CONSTRUÇÃO DE VETORES	17
7.1	ENDEREÇAMENTO DE VETORES	19
8	Controles de Fluxo no MatLab	22
8.1	Loops for	22
8.2	Loops while	23
8.3	Estruturas if-else-end	23
9	MATRIZES	25
9.1	Operações Escalares com Matrizes no MatLab	26
9.2	Operações entre Matrizes no MatLab	27
10	Manipulação de Gráficos	29
10.1	Estilo de Linhas e Cores:	33
11	EXEMPLOS DE APLICAÇÃO DE VETORES NA VISUALIZAÇÃO DE SINAIS REPRESENTADOS NO DOMÍNIO DO TEMPO	35
��
INTRODUÇÃO
O MATLAB é uma ferramenta software que pode funcionar como uma simples calculadora ou até como uma linguagem de programação científica (fortran, C, etc.) para soluções de complicadas expressões algébricas. Entretanto, o MATLAB apresenta diversas vantagens em relação as calculadoras e linguagens de programação: simplicidade e uma interface gráfica bastante completa para visualização e análise dos resultados.
EXEMPLOS SIMPLES
Os exemplos aqui apresentados tem o objetivo de demonstrar alguns tipos de problemas que podem ser resolvidos utilizando o Matlab. 
	Como primeiro exemplo tem-se a utilização do Matlab como uma calculadora. Os comandos apresentados abaixo devem ser digitados diretamente no prompt ((() do Matlab. O símbolo ( significa apertar a tecla Enter.
 
(( 3+5+2 		 (
ans =
	10
	Neste exemplo foram digitados três números intercalados pelo símbolo +. Esta expressão para o Matlab significa a soma destes três números. Ao apertar a tecla Enter (() é apresentado o resultado desta operação que é 10. As letras ans significa answer, ou seja, resposta.
	O próximo exemplo mostra a capacidade de atribuir um valor a uma variável e realizar operações com estas variáveis.
(( a = 5	(
a =
	5
(( b = 33.50	(
b =
	33.5000
(( a + b	(
ans
	38.5000
	
	Observe que neste exemplo foram atribuídos valores para as variáveis a e b e em seguida é feita uma operação somando os dois valores.
	Um comando interessante de apresentar neste momento é o who. Ao digitar este comando no prompt do Matlab e pressionar o Enter são apresentadas as variáveis utilizadas até o momento.
	O próximo exemplo fará a visualização da função
�
	A seguir estão os comandos para apresentar o gráfico desta função com A=1 e ( =phi=0 . Estes comandos devem ser digitados diretamente no prompt do Matlab.
((A=1;	(
((phi = 0;	(
(( x = 0:360;	(
(( y = A*sin(2*pi*x/360+phi);	(
(( plot(y,'k');grid on	(
((xlabel(‘Valores de x em graus’)	(
((ylabel(‘y’)	(
((title(‘Figura 1 : sin(2*pi*x/360)’)	(
	O resultado destes comandos é a plotagem de um ciclo do seno como mostrado na figura 1. Observe a necessidade da divisão por 360 para que seja possivel o aparecimento de um ciclo completo.
Exercício : Plote um ciclo do seno como mostrado na figura 1.1 quando :
i) A = 2 e ( = phi = 0.
 Use os comandos : 
((A=2;	(
((phi = 0;	(
(( x = 0:360;	(
(( z = A*sin(2*pi*x/360+phi);	(
(( plot(z,'k-');grid on	(
ii) A=2 e (=phi=2*pi* 45/360.
 Use os comandos :
((A=2;	(
((phi = 2*pi*45/360;
(( x = 0:360;	(
(( v = A*sin(2*pi*x/360+phi);	(
(( plot(v,'k');grid on	(
iii) Finalmente use o comando :
(( plot(x,y,‘k-.’,x, z,‘b-o’,x, v,‘r+’); grid on	(
	O MATLAB oferece as seguintes operações aritméticas básicas :
Tabela 1 : Operações Aritméticas Básicas
Operação
Símbolo
Exemplos
adição, a ( b
(
8(3
subtração, a ( b
(
28(15
multiplicação, a(b
(
4.15(8.10
divisão, a(b
/ ou \
64/5 ; 67\9
power, ab
^
5^2
	As expressões são executadas da esquerda para a direita com a seguinte ordem de precedência: operação de potência, seguida das operações de multiplicação e divisão, que por sua vez são seguidas pelas operações de adição e subtração. Parênteses podem ser usados para alterar esta ordem de precedências, onde as operações são executadas dos parênteses mais internos para os mais externos.
CARACTERÍSTICAS BÁSICAS
O MATLAB é uma ferramenta software que tem por característica básica a simplicidade de utilização e uma poderosa interface gráfica. Como qualquer software ou linguagem de programação é necessário haver uma adaptação à ferramenta.
Área de Trabalho do MATLAB
A área de trabalho do MATLAB é onde ficam residentes os diversos comandos e valores de quaisquer variáveis que foram digitados na janela de comandos. Como aqueles comandos e variáveis estão residentes na área de trabalho do MATLAB, podem ser invocados sempre que for preciso ou desejado. Por exemplo, se quiser verificar o valor da variável a basta que se entre com o nome desta variável no prompt.
(( a	(
a = 
	5	
	Como já foi visto, se você não consegue lembrar das variáveis, pode-se obter uma lista de todas as variáveis usando-se o comando who
((who	(
Your variables are :
a	b	x	A	phi
ans y	z	v
	
Formato dos Números
Como default, se um resultado é inteiro, o MATLAB mostra o número como inteiro. Igualmente, quando o resultado é real, o MATLAB mostra o número com 4 dígitos a direita do ponto
decimal. Se os dígitos do resultado estiverem fora desta faixa, o MATLAB mostra o resultado usando a notação científica como numa calculadora científica. Este default pode, entretanto, ser modificado usando-se o Numeric Format da pasta general na linha Preferences do ítem Files na barra de menus. 
Exercício : Usando-se a variável b usado anteriormente, verifique a tabela de formatos numéricos abaixo :
Tabela 2 : Formatos Numéricos
Comando MATLAB
b
Comentários
format long
33.50000000000000
16 dígitos
format short e
33.500e+01
5 dígitos mais expoente
format long e
33.50000000000000 e +01
16 dígitos mais expoente
format hex
4040c00000000000
hexadecimal
format bank
33.50
2 dígitos decimais
format +
+
positivo, negativo ou zero
format rat
67/2
racional
format short
33.5000
4 dígitos decimais (formato default)
Variáveis
Os nomes das variáveis devem consistir de uma única palavra, conforme as três regras abaixo :
Tabela 3 : Regras de Construção de Variáveis
Regras de Construção das Variáveis
Comentários/Exemplos
Variáveis em letras minúsculas e maísculas são diferentes mesmo que consistam das mesmas letras
Items, items, itEms e ITEMS são variáveis diferentes entre si no MATLAB
As variáveis podem consistir de até 19 letras
holnmbjkitkklwenohu
As variáveis devem começar com alguma letra, podendo ser seguido por quaisquer letras, dígitos ou subescrito. Caracteres de pontuação não podem ser utilizados.
how_about
x512
a_b_c_d
	Em adição às regras acima para formação das variáveis, as seguintes variáveis são especiais no MATLAB : ans, pi, eps, flops, inf, NaN, i, j, nargin, nargout, realmin e realmax
Tabela 4 : Variáveis Especiais
Variáveis Especiais
Significado
ans
Nome “default” da variável usado para resultados 
pi
Constante igual à razão da circunferência de um círculo para o seu diâmetro
eps
O menor número tal que quando adicionado com um outro resulta em um número diferente
flops
Conta o número de operações em ponto- flutuante
inf
Indica um número infinito, p.e., 1/0
NaN
Indica que não é um número, p. e., 0/0 
i (e) j
i=j=
�
nargin
Número de argumentos de entrada usados em uma função
nargout
Número de argumentos de saída usados em uma função
realmin
O menor número real positivo utilizável
realmax
O maior número real positivo utilizável
Comentários e Pontuações
	Todo e qualquer texto depois do símbolo de porcentagem (%), é tomado como sendo um comentário :
((n_macacos=10	% Número de macacos que vivem no bosque	(
n_macacos=
	10
	Vários comandos podem ser colocados em uma linha se os mesmos forem separados por virgula ou ponto e vírgula :
((n_macacos=10, n_laranjas=20, n_uvas=1000; n_bananas=100	(
n_macacos=
	10
n_laranjas=
	20
n_bananas=
	100
	Observe que quando é utilizado ponto e vírgula o MATLAB não mostra o resultado. No exemplo acima, o valor atribuído à variável n_uvas não foi mostrado por causa do ponto e vírgula que foi utilizado. 
Observe agora o efeito dos três pontos (...) :
((clientes=10;	(
 
((n_uvas_por_cliente=n_uvas/...	(
clientes	(
((n_uvas_por_cliente=
	100
	Assim, os três pontos (...) indica ao MATLAB continuação da expressão matemática na próxima linha.
 Operadores Relacionais
Os operadores relacionais do Matlab incluem todas as comparações comuns e são apresentados na tabela 5.
Tabela 5: Operadores relacionais
Números Complexos
Os números complexos podem ser representados no MATLAB de diversas maneiras. Alguns exemplos são mostrados a seguir :
((x=1-4i	% a letra “i” significa ou indica a parte imaginária	(
x=
	1.000 - 4.000i
((x=1-4j	% a letra “j” também pode ser usada para indicar a parte imaginária (
x=
	1.000 - 4.000i
Identidade de Euler : relaciona a forma polar de um número complexo com a sua forma retangular
 
�
	No MATLAB, a conversão entre as formas polar e retangular de um número complexo utiliza as seguintes funções : real, imag, abs e angle.
((x	(
x=
	1.000 - 4.000i
((M=abs(x)	(
M=
	4.1231
((theta=angle(x)*180/pi	(
theta=-14.0362
((a=real(x)	(
a=
	1
((b=imag(x)	(
b=
	-4
Funções Matemáticas
Na tabela abaixo tem-se uma lista parcial das funções comuns que o MATLAB suporta.
Tabela 6 : Funções Comuns
abs(x) 
acos(x)
acosh(x)
angle(x)
asin(x)
asinh(x)
atan(x)
atanh(x)
conj(x)
cos(x)
cosh(x)
exp(x)
fix(x)
floor(x)
gcd(x,y)
imag(x)
lcm(x)
log(x)
log10(x)
real(x)
rem(x,y)
round(x)
sign(x)
sin(x)
sinh(x)
sqrt(x)
tan(x)
tanh(x)
Valor absoluto ou magnitude de um número complexo
Inverso do coseno
Inverso do coseno hiperbólico
Ângulo de um número complexo
Inverso do seno
Inverso do seno hiperbólico
Inverso da tangente
Inverso da tangente hiperbólico
Conjugado complexo
Coseno
Coseno hiperbólico
Exponencial : ex
Arredondamento em direção ao zero
Arredondamento em direção ao menos infinito
Máximo divisor comum dos inteiros x e y
Parte imaginária de um número complexo
Mínimo múltiplo comum dos inteiros x e y
Logarítmo natural
Logarítmo comum
Parte real de um número complexo
Resto da divisão de x/y
Arredondamento para o inteiro mais próximo
Função signum
Seno
Seno hiperbólico
Raíz quadrada
Tangente
Tangente hiperbólico
	Uma função muito útil no estudo de princípios de comunicações, é a função retangular definida abaixo :
 
	No MATLAB, pode-se visualizar esta função a partir da função sign(x). Para um melhor entendimento, inicialmente é visualizado a função -sign(t) no intervalo 
-( ( t ( ( .
((t=-pi:2*pi/100:pi; 	% Cria-se o vetor t com 100 elementos em		(
((			% incrementos de 2*pi/100		(
((y=-sign(t);
((plot(t,y,‘g+’); grid on		(
((title(‘Figura 2 : Função -sign(t)’)		(
((xlabel(‘t’)		(
((ylabel(‘-sign(t)’)		(
A figura 2 mostra a plotagem da função –sign(t), no intervalo -( ( t ( (.
	Comparando-se a curva obtida da função -sign(t) com a definição da função retangular f(t), conclui-se que f(t) é a função -sign(t) deslocada de (, i.e. :
		
			
�
	Portanto, os seguintes comandos são suficientes para reproduzir a função retangular, f(t):
((t=0:2*pi/100:2pi;
% Cria-se o vetor t com 100 elementos em		(
((			% incrementos de 2*pi/100		(
((y=-sign(t-pi);	(
((plot(t,y,‘g+’); grid on		(
((title(‘Figura 3 : Função retangular f(t)’)		(
((xlabel(‘t’)		(
((ylabel(‘f(t)’)		(
Obtém-se o resultado mostrado abaixo (figura 3).
�
Gerenciamento de Arquivos
O MATLAB possui uma série de comandos para gerenciamento de arquivos, tais como listar os nomes de arquivos, vizualizar, deletar, etc. Na tabela abaixo tem-se um resumo dos principais comandos :
Tabela 7 : Comandos para Gerenciamento de Arquivos
cd
p=cd
cd temp
cd ..
chdir
chdir path
delete test
dir
ls
matlabroot
path
pwd
type test
what
which test
Mostra o diretório de trabalho atual ou corrente
Retorna para a variável p o diretório de trabalho corrente
Muda para o diretório temp
Muda para o diretório um nível acima
O mesmo que cd
O mesmo que cd temp
deleta o arquivo test.m
Lista todos os arquivos do diretório de trabalho presente
Faz o mesmo que o comando dir
Retorna o caminho do diretório onde se encontra o programa MATLAB executável
Visualiza todos os caminhos de diretório do MATLAB
O mesmo que o comando cd
Visualiza o arquivo M-file test.m na janela de comandos
Retorna uma lista de todos os M-files do diretório corrente
 Visualiza o caminho do diretório do arquivo test.m
Arquivos Script (M-files)
	Para resolver problemas simples, é cômodo e eficiente utilizar o MATLAB como se fosse uma calculadora, entrando-se com os comandos diretamente no prompt. Entretanto, a medida que o número de comandos aumenta, ou quando se deseja mudar o valor de uma ou mais variáveis e executar novamente os comandos, o uso do MATLAB simplesmente como calculadora torna-se ineficiente e tedioso. Nestes casos, o melhor é utilizar o MATLAB como uma linguagem de programação de alto nível, isto é, escrever um arquivo “script” ou M-files. Os M-files são os programas fontes do MATLAB e levam a extensão .m , por exemplo, exemplo1.m.
	Para escrever um programa no MATLAB, escolha File na barra de menu. Dentro do menu File escolha New e selecione M-file, como mostrado na figura 4. Abre-se, então, um editor de textos, onde pode-se escrever os comandos do MATLAB. Escreva, por exemplo, o programa abaixo :
%=====================================================
% Exemplo de programação no MATLAB
% Este exemplo plota uma função seno nas sequintes 
% condições:
% sen(x)
% 2*sen(x)
% 2*sen(x+45)
% 2*sen(x-90)
%		2*sen(2*x)
%==============================================
%
x=0:360;
%
% Seno com amplitude A=1 e defasagem phi=0 graus
A=1;
phi=0;
y=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A=2 e defasagem phi=0 graus
A=2;
phi=0;
z=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A=2 e defasagem phi=45 graus
A=2;
phi=45;
v=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A= 2 e defasagem phi=-90 graus
A=2;
phi=-90;
w=A*sin(2*pi*x/360+2*pi*phi/360);
% Seno com amplitude A= 2 e defasagem phi=0 graus
A=2;
phi=0;
u=A*sin(2*pi*2*x/360+2*pi*phi/360);
% Plotagem do resultado
plot(x,y,'k-',x,z,'k--',x,v,'k-.',x,w,'k.',x,u, 'ko')
grid
xlabel('Valores de x em graus')
ylabel('y,z,v,w e u')
title('Estudo de defasagem e amplitude de um seno')
legend('sen(x)','2*sen(x)','2*sen(x+45)','2*sen(x-90)', '2*sen(2*x)')
	Uma vez escrito o programa, entre no menu File da janela do editor de textos e escollha a opção Save as... Nesta opção do menu, salve o programa como prog1.m no seu diretório de trabalho. Em seguida, feche a janela do editor de textos, o que faz com que volte à janela de comandos do MATLAB. Na janela de comandos, use o comando cd para ir ao diretório onde o programa prog1.m foi salvo. Em seguida, digite :
((prog1	(
O gráfico mostrado na figura 5 é obtido.
Figura 4. Procedimento para começar um novo M-file
Funções M-files :
Por causa da grande utilidade dos M-files, o MATLAB possui diversas funções que tornam os M-files ainda mais interessantes. Estas funções estão listadas na tabela 8 :
Tabela 8 : Funções M-files
echo
input
pause
pause(n)
disp(ans)
waitforbottonpress
keyboard
Ecoa cada um dos comandos do M-file na janela de comandos.
Permite entrada de dados durante a execução do programa via teclado.
Faz uma pausa na execução do programa até que uma tecla qualquer seja pressionada.
Faz uma pausa de n segundos na execução do programa
Visualiza os resultados sem mostrar os nomes das variáveis
Faz uma pausa até que uma tecla do “mouse” ou do teclado seja pressionada.
Passa o controle temporariamente para o teclado (“Type return to quit”)
Como exemplo, escreva o seguinte programa (M-file) :
% Exemplo de utilização da função M-file “input”
%=========================================
% Programa para traçar a curva :
%
% y=A.sin(x+phi),
%
% sendo que os valores de x [rad] ; A e phi [graus] devem ser
% entrados via teclado durante a execução do programa
%
x=input(‘Entre com o vetor x [rad]> ’);
A=input(‘Entre com o valor de A> ’);
phi=input(‘Entre com o valor de phi [graus]> ’);
%
y=A*sin(x+2*pi*phi/360);
plot(x,y,‘r’); grid on
title(‘Exemplo de utilização da função “input”’)
xlabel(‘x em rad/s’)
ylabel(‘y=A.sin(x+phi)’)
CONSTRUÇÃO DE VETORES
Nas construções das funções implementadas até agora, utilizou-se da construção de vetores. Agora, mostrar-se-á algumas outras formas de manipular vetores no MATLAB. Na tabela 8, tem-se um resumo das diversas formas de se construir um vetor no MatLab.
Tabela 9. Construção de Vetores
x=[2 2*pi sqrt(2) 2-3j]
Cria um vetor x contendo os elementos especificados
x=primero : último
Cria um vetor x começando com o valor primeiro, incrementando-se de 1(um) em 1(um) até atingir o valor último ou o valor mais próximo possível de último 
x=primeiro:incremento:último
Cria um vetor x começando com o valor primeiro, incrementando-se do valor incremento até atingir o valor último ou o valor mais próximo possível de último
x=linspace(primeiro, último, n)
Cria um vetor x começando com o valor primeiro e terminado-se no valor último, contendo n elementos
x=logspace(primeiro, último, n)
Cria um vetor com os elementos espaçado logaritmicamente, começando-se com o valor 10primeiro e terminando-se no valor 10último, contendo n elementos
Exemplos :
i) Uso da construção de vetor : x=[2 2*pi sqrt(2) 2-3j]
(( x=[8 6 8.10 5-6j]	(	
x=
	8.0000		6.0000		8.1000		5.0000-6.0000i					
 
ii) Uso da construção de vetor : x=primero : último
(( x=1:10.5	(	
x=
	1	2	3	4	5	6	7	8	9	10					
 
iii) Uso da construção
de vetor : x=primeiro:incremento:último
(( x=1:0.5:10.5	(	
x =
 Columns 1 through 7
 1.000 1.5000 	2.0000 2.5000 	3.0000 3.5000 	4.0000
 Columns 8 through 14
 4.5000 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 
 Columns 15 through 20
 8.0000 8.5000 9.0000 9.5000 10.0000 10.5000 
					
 
iv) Uso da construção de vetor : x=linspace(primeiro, último, n)
(( x=linspace(1,10.5,5)	 (	
x=
	1.0000 3.3750 5.7500 8.1250 10.5000				
 
v) Uso da construção de vetor : x=logspace(primeiro, último, n)
(( x=logspace(0,2,5)	 (	
x=
	1.0000 3.1623 10.0000 31.6228 100.00
	
ENDEREÇAMENTO DE VETORES
Seja :
(( x=linspace(0,360,10)	 (	
x=
	0	40	80	120	160	200	240	280	320	360
(( y=sin(2*pi*x/360)	 (	
y=
 Columns 1 through 7
	0	0.6428	 0.9848	0.8660	 0.3420	-0.3420	-0.8660
 Columns 1 through 10
	-0.9848	-0.6428	0.0000
 
	No exemplo acima, os vetores de entrada x e de saída y possuem 11 elementos cada um. No MatLab, cada um dos elementos de um vetor podem ser acessados através de seu índice que identifica cada uma das colunas. Por exemplo :
(( x(3)	% Acessa o terceiro elemento de x	 (	
ans =
	80
(( x(5)	% Acessa o quinto elemento de x	 (
ans =
	160
	
	O MatLab também permite o acesso em blocos dos elementos de um vetor, como ilustrado nos exemplos a seguir :
(( x(1:5)	(
ans = 
	0	40	80	120	160
	Neste exemplo, a expressão entre parêntesis “ 1:5 ” , diz para acessar os elementos de 1 a 5 do vetor x.
(( x(2:2:8) 	(
 ans = 
	40	120	200	280
	A expressão entre parêntesis no comando acima, “ 2:2:8” , diz para que acesse os elementos do vetor x, começando-se do 2o. elemento e, a partir deste, contando-se de 2 em 2 até atingir o 8o. elemento.
(( x(2:2:7) 	(
 ans = 
	40	120	200
	Este exemplo é igual ao anterior, mas como depois do 6o. elemento vem o 8o. elemento (pois a contagem é feita de 2 em 2), o 7o. elemento não é acessado. 
(( y(10:-2:1) 	(
 ans = 
	0.0000		-0.9848	-0.3420	0.8660		0.6428
	A expressão entre parêntesis no comando, “ 10:-2:1” , diz para que acesse os elementos do vetor y, começando-se do 10o. elemento e, a partir deste, contando-se de 2 em 2 no sentido decrescente até atingir o 1o. elemento.
(( y([8 5 10 1]) 	(
 ans = 
	-0.9848	0.3420		0.0000		0
	Os elementos do vetor y são acessados na ordem indicada pelo vetor de índices [8 5 10 1], isto é : y(8), y(5), y(10) e y(1). 
Controles de Fluxo no MatLab
Loops for
Os loops for permitem que um conjunto de comandos seja repetido por um número de vezes fixo e pré-definido. A forma geral do loop for é :
			
Exemplo 1 : O vetor x=[0 36 72 108 144 180 216 252 288 324] pode ser construído com as seguintes instruções :
	 
(( x(1)=0; (
(( for n=2:10 (
	 x(n)=x(n-1)+36; (
end (
(( x 	 (
x =
 0 36 72 108 144 180 216 252 288 324
Isto é, a primeira instrução diz : para n igual a 2 até 10, execute todas os comandos até a instrução de end. No primeiro ciclo do for, n=2, no segundo n=3 a assim por diante, até n=10. Depois do ciclo para n=10, o loop for termina e os comandos após a instrução end são executados, como é o caso da apresentação dos resultados em x.
Exemplo 2 : Plote 360 pontos de um período da função y=sen(2*(*x/360) mostrado na figura 1 usando o loop for.
((for x=1:360 (
 y(x)=sin(2*pi*x/360); (
end (
((plot(y) (
Loops while 
Ao contrário do loop for, que executa um conjunto de comandos um número fixo de vezes, o loop while executa um conjunto de comandos um número indefinido de vezes. A forma geral do loop while é :
	Os comandos entre as instruções while e end são executadas enquanto todos os elementos na expressão forem verdadeiras. 
Exemplo : Construa o vetor y = [64 32 16 4 2 1] , usando o loop while
((eps=128; (
((n=0; (
((while eps>1 (
 eps=eps/2; (
 n=n+1; (
 y(n)=eps; (
end (
((y (
Estruturas if-else-end
Em diversas situações, as seqüências de comandos tem de ser executadas condicionalmente, com base em um teste relacional. Isto pode ser resolvido por meio de alguma variação da estrutura if-else-end. A estrutura if-else-end mais simples é :
Os comandos entre as instruções if e end são executados se todos os elementos na expressão forem Verdadeiros (diferentes de zero). 
Exemplo 1 :
» custo=5;
» bananas=10;
» if bananas>5
	custo=0.1*custo;
end
» custo
custo =
 0.5000
No exemplo acima, a expressão bananas > 5 é verdadeira, assim o comando :
custo=0.1* custo
foi executado, de modo que o novo valor de custo é igual a 0.5.
Exemplo 2 :
custo=5;
» bananas=5;
» if bananas>5
	custo=0.1*custo;
end
» custo
custo =
 5
Neste exemplo, a expressão bananas > 5 é falsa, assim o comando :
custo=0.1* custo
não foi executado. Assim o custo continua igual a 5.
Exemplo 3 : Plote a função retangular da figura 3 utilizando-se a estrutura if-else-end.
%
x=linspace(0,2*pi,100);	% Criou-se 100 amostras entre 0 e 2*pi
%
for n=1:100
 if x(n)<=pi
 f(n)=1;		%Faz f(t)=1 para 0<t<=pi,i.e., 
								%as primeiras 50 amostras de %f(t) são iguais a 1 
		else
	f(n)= -1;		% Faz f(t)=-1 para pi<t<=2*pi, 
							%	i.e., as últimas 50 amostras de % f(t) são iguais a 1
 end
end
plot(x,f, 'ko'); grid on 
title('Figura II.3: Função retangular')
xlabel('t em radianos')
ylabel('f(t)')
MATRIZES
Os vetores vistos até agora tratam-se de vetores linha, pois, possuem apenas 1(uma) linha com várias colunas. Também pode-se obter vetores coluna, isto é, vetores com apenas 1(uma) coluna e várias linhas :
(( c=[1; 5; 6; 8; 10] 	(
 c = 
	1
	5
	6
	8
	10
	Se um vetor passa a consistir de várias linhas e colunas, denominamo-lo de Matrizes :
(( m=[1 4 5 6; 5 10 3 20]	% Este comando cria uma matriz 2(4 	(
m=
	1	4	5	6
	5	10	3	20
	Portanto, um vetor linha é um caso particular de uma matriz 1(
N , e um vetor coluna é um caso particular de matriz N ( 1.
Operações Escalares com Matrizes no MatLab
Uma operação de adição, subtração, multiplicação e divisão de uma matriz com um valor escalar, é obtida simplesmente aplicado-se a respectiva operação em cada um dos elementos da matriz :
(( m=[1 4 5 6; 5 10 3 20]	% Matriz 2(4	(
m=
	1	4	5	6
	5	10	3	20
(( m-2 	(
ans=
	-1	2	3	4
	3	8	1	18
	No exemplo acima, de cada elemento da matriz m subtraiu-se o valor 2.
Outro exemplo :
(( 2*m-2 	(
ans=
	0	6	8	10
	8	18	4	38
	Cada elemento da matriz foi multiplicado por 2 e, posteriormente, subtraiu-se 2.
y=(1:5)*0	% Cria um vetor linha com todos os elementos iguais a 0(zero) 	(
y=
	0	0	0	0	0
Operações entre Matrizes no MatLab
As operações entre matrizes requer que as mesmas tenham as mesmas dimensões, e as operações de adição, subtração, multiplicação e divisão são aplicados elemento-por- elemento :
(( g=[1 2 3 4; 5 6 7 8; 9 10 11 12] 	% g é uma matriz 3(4 (
g=
	1	2	3	4
	5	6	7	8
	9	10	11	12
(( h=[1 1 1 1; 2 2 2 2; 3 3 3 3] 	% h é uma outra matriz 3(4	(
h=
	1	1	1	1
	2	2	2	2
	3	3	3	3
(( g+h		% adiciona a matriz g com a matriz h	(
ans =
	2	3	4	5
	7	8	9	10
	12	13	14	15
(( 2*g-h		% Multiplica a matriz g por 2 e subtrai a matriz h do resultado	(
ans=
	1	3	5	7
	8	10	12	14
	15	17	19	21
(( g.*h		% Multiplica a matriz g pela matriz matriz h elemento por elemento	(
ans=
	1	2	3	4
	10	12	14	16
	27	30	33	36
(( g./h		% Divide a matriz g pela matriz matriz h elemento por elemento	(
ans=
	1.0000		2.0000		3.0000		4.0000
	2.5000		3.0000		3.5000		4.0000
	3.0000		3.3333		3.6667		4.0000
(( g	% Chama a matriz g novamente	(
g =
	1 	2	3	4
	5	6	7	8
	9	10	11	12
	
(( w=[1 2; 3 4; 5 6; 7 8]	% Cria uma matriz 4(2	(
w=
	1	2
	3	4
	5	6
	7	8
(( g*w	% Multiplicação da matriz g pela matriz w		(
ans =
	50	60
	114	140
	178	220
	Observe que a operação g.*h é diferente da operação g*h. Enquanto que a primeira executa uma mutiplicação elemento-por-elemento de duas matrizes, a segunda executa uma multiplicação entre duas matrizes.
Manipulação de Gráficos
Nesta secção mostrar-se-ão alguns comandos úteis para manipulação de gráficos. Pode-se adicionar curvas a um gráfico já plotado usando o comando hold.
% Exemplo de utilização do comando hold
%=========================================
% Geração da curva sin(x) :
%
%
x=linspace(0,2*pi,30);
y= sin(x);
plot(x,y,‘r’); grid on
title(‘Exemplo de utilização do comando hold’)
xlabel(‘x em rad/s’)
ylabel(‘y=sin(x)’)
%Agora mantém-se acurva e acrescenta-se a curva do cosseno
z= cos(x);
hold on
plot(x,z,’g’);
ylabel(‘y1=sin(x); y2=cos(x)’)
hold off
O resultado é apresentado na figura 6.
Figura 6: Exemplo do comando hold.
Pode-se utilizar o comando subplot(m,n,p) para subdividir a janela de figura em uma matriz m-por-n de áreas de plotagem e escolher a p-ésima área para ser ativa. O exemplo seguinte ilustra a utilização deste comando.
% Exemplo de utilização do comando subplot(m,n,p)
%=========================================
% Geração das curvas 
%
x=linspace(0,2*pi,30);
y= sin(x);
z=cos(x);
a=2*sin(x).*cos(x);
b=sin(x)./(cos(x)+eps);	%o eps é uma variável especial do MatLab utilizada para 
				%se evitar divisão por zero
subplot(2,2,1); %ativa o subplot à esquerda superior dentre os 4 subplots
plot(x,y);
grid on
title(‘sin(x)’)
ylabel(‘y=sin(x)’)
%
subplot(2,2,2); %ativa o subplot à direita superior dentre os 4 subplots
plot(x,z);
grid on
title(‘cos(x)’)
ylabel(‘y=cos(x)’)
%
subplot(2,2,3); %ativa o subplot à esquerda inferior dentre os 4 subplots
plot(x,a);
grid on
title(‘2sin(x)cos(x)’)
xlabel(‘x em rad/s’)
ylabel(‘y=2*cos(x)*sin(x)’)
%
subplot(2,2,4); %ativa o subplot à direita inferior dentre os 4 subplots
plot(x,b);
grid on
title(‘sin(x)/cos(x)’)
xlabel(‘x em rad/s’)
ylabel(‘y=sin(x)/cos(x)’)
O resultado é apresentado na figura 7.
Figura 7: Utilização do comando subplot.
O uso do comando subplot(1,1,1) retorna ao modo default de utilização da janela de figura.
Duas outras formas úteis de se construir gráficos são utilizando-se os comandos hist e stem. O Comando hist(y) desenha um histograma com 10 bins para os dados de um vetor y. hist(y,n) cria um histograma com n bins. hist(y,x), onde x é um vetor cria um histograma usando os bins especificados no vetor x. O exemplo seguinte ilustra o uso do hist. 
 
% Exemplo de gráficos usando hist
%=========================================
x=-2.9:0.2:2.9;	%gera um vetor com os bins a serem usados em um dos gráficos
y= randn(5000,1);	%gera 5000 números aleatórios
subplot(3,1,1);
hist(y);			%gera um histograma com 10 bins
title(‘Histograma com 10 bins’)
subplot(3,1,2);
hist(y,20);		%gera um histograma com 20 bins
title(‘Histograma com 20 bins’)
subplot(3,1,3);
hist(y,x)		%gera um histograma com os bins dados por x
title(‘Histograma com bins dados por x’)
O resultado é dado pela figura 8.
Figura 8: Exemplo de Histogramas.
Para a representação de seqüências discretas, é útil a plotagem de gráficos com stem. stem(y) plota os dados do vetor y. stem(x,y) plota os valores do vetor y dados por x. O exemplo seguinte ilustra o uso do stem.
% Exemplo de gráficos usando stem
%=========================================
x=1:50;		%gera um vetor com os pontos do vetor y
y= randn(50,1);	%gera 50 números aleatórios
subplot(1,2,1);
stem(y);		%gera um gráfico com os 50 pontos do vetor y
title(‘stem(y)’)
subplot(1,2,2);
stem(x,y,’:‘);		%gera um gráficos com os pontos do vetor y dados por x
title(‘stem(x,y)’)
O resultado é dado pela figura 9.
Figura 9: Exemplo de construção de gráficos com stem.
Estilo de Linhas e Cores:
Nos exemplos anteriores, utilizamos diferentes estilos de linhas e cores. Os estilos de linhas e as cores podem ser especificados nos comandos de plotagem como um argumento do tipo caracter string (entre apóstrofes – por exemplo, ´c´), consistindo de 1,2 ou 3 caracteres. A tabela 11 apresenta estes caracteres.
Tabela 11: Estilos de linhas e cores
�
EXEMPLOS DE APLICAÇÃO DE VETORES NA VISUALIZAÇÃO DE SINAIS REPRESENTADOS NO DOMÍNIO DO TEMPO
Exemplo 1 : Escreva um M-file que visualize o sinal f(t) representada no domínio do tempo por :
 
�
Resolução : Na seção I.3.6, esta mesma função foi visualizada
através da utilização da função sign(x). Neste exemplo, será utilizado somente o conceito de vetores :
%
x=linspace(0,2*pi,100)	% Criou-se 100 amostras entre 0 e 2*pi
%
f=(1:50)*0+1			% Faz f(t) = 1 para 0 < t <= pi , i.e., as
%				primeiras 50 amostras de f(t) são
%				iguais a 0 
f(51:100)=(1:50)*0 - 1	% Faz f(t) = -1 para pi < t <=2*pi, i.e., as
%				 últimas 50 amostras de f(t) são
%				 iguais a 1
plot(x,f, ‘ko’); grid on 
title(‘Figura II.3: Função retangular’)
xlabel(‘t em radianos’)
ylabel(‘f(t)’)
Obter-se-á o resultado mostrado na figura II.3
Exemplo 2 : Escreva um M-file que visualize o sinal f(t) representada no domínio do tempo por :
 
�
Resolução :
%
t=linspace(0,5,51);				% Cria 51 amostras entre 0 e 5
%						 espaçados de 0.1
f(1:11)=t(1:11);				% f(t) = t para 0<t<=1
f(12:31)=-t(12:31)/2 + 3/2;			% f(t)=-t/2 + 3/2 para 1<t<=3
f(32:51)=(32:51)*0;					f(t)=0 para t>3
%
plot(t,f, ‘ko’); grid on
title(‘Figura II.4 : Função Triangular’)
xlabel (‘Tempo’)
ylabel(‘f(t)’) 
Exercício : Faça as modificações necessárias no M-file do exemplo 2 de modo a visualizar 101 amostras da função f(t) no intervalo de 0 a 5.
APOSTILA
MATLAB
Figura 1 - Plotagem de um seno
Figura 2 – Função –sign(t), no intervalo -( ( t ( (. 
Figura 3 - Função retangular deslocada
Figura 5 - Senos deslocados
Figura 2.3 - Função retangular
Figura 2.4 - Função triangular
for x=n1:n2
	comandos
end 
while expressão
	Comandos
end
if expressão
	Comandos
end
�PAGE �
�PAGE �1�
_919524579.unknown
_989842294.unknown
_1014028127.xls
Plan1
				Operador				Descrição
				<				Menor que
				<=				Menor ou igual a
				>				Maior que
				>=				Maior ou igual a
				==				Igual a
				~=				Diferente de
_1014029287.xls
Plan1
				Símbolo				Cor				Símbolo				Estilo de Linha
				y				amarelo				.				pontos
				m				magenta				o				círculos
				c				cian				x				marcas x
				r				vermelho				+				marcas mais
				g				verde				*				marcas asterístico
				b				azul				-				linha sólida
				w				branco				:				linha pontilhada
				k				preto				-.				linha com traço e ponto
												--				linha com segmentos de traço
_919540104.unknown
_919583060.unknown
_848611944.unknown
_891634139.unknown
_848611943.unknown
C�lculo Num�rico/Programas do Primeiro Est�gio-2000.zip
Text4.FOR
C	 ESTE PROGRAMA CALCULA A SOMA DA SERIE 
C S= SOMATORIO(DE 1 ATE 30)DE 1/(2**I)
C	 COM ERRO E SEM ERRO
C
 REAL SOMA,EPS
 REAL*8 SOMAP,EPSP
	 OPEN(UNIT=6,FILE='DADO4.TXT',STATUS='NEW')
 	 SOMA=0
	 I=0
10	 EPS=1.00/(2.00**(I+1))
 IF (I.NE.29)THEN
	 I=I+1
	 SOMA=EPS+SOMA
	 GOTO	10
	 ELSE
 WRITE(6,20)SOMA,I
20	 FORMAT(/,2X,'O SOMA DA SERIE COM PRECISAO SIMPLES E ',E22.17,
 *' NA ',I3,' ITERACAO')
	 END IF 
	 SOMAP=0
	 I=0
30	 EPSP=1.00/(2.00**(I+1))
 IF (I.NE.29)THEN
	 I=I+1
	 SOMAP=EPSP+SOMAP
	 GOTO	30
	 ELSE
 	 WRITE(6,40)SOMAP,I
40	 FORMAT(/,2X,'O SOMA DA SERIE COM PRECISAO DUPLA E ',D22.17,
 *' NA ',I3,' ITERACAO')
	 END IF
	 END
C	 QUESTAO4-A)=PARA A PRECISAO SIMPLES, NAO E NECESSARIO O CALCULO
C DA SOMA ATE TRIGESIMO TERMO POIS O PROGRAMA JA TRUNCA O VALOR
C DA SOMA PARA 1.0000000 NA OITAVA CASA DECIMAL E NA VIGESIMA 
C QUINTA ITERACAO.PARA A PRECISAO DUPLA, O SOMATORIO ATE O TRIGE-
C TERMO E SIGUINIFICATIVO,MAS ISSO FICA A CARGO DO PROGRAMADOR 
C DETERMINAR COM QUAL PRECISAO O PROGRAMA DEVE OBTER OS DADOS.
C E NECESSARIO DETERMINAR QUAL O TIPO DE PRECISAO E 
C PARA QUAL VALOR DE I O TERMO DO SOMATORIO E IGUAL AO EPS, NO 
C CASO DA MAQUINA USADA, O I= 52 
 
C QUESTAO4-B)=BASTA USARMOS A PRECISAO DUPLA 
Serie.for
C	 ESTE PROGRAMA REALIZA UMA SOMA DA SERIE 
C 4-4/3+4/5-4/7+4/9......,	ATE ENCONTRAR
C UM VALOR MENOR QUE 0.00001.
C
 DIMENSION TERMO(200000)
	 OPEN(UNIT=6,FILE='DADO3.TXT',STATUS='REPLACE')
	 J=1
	 N=0
 	 SOMA=0
C
C	 ARMAZENAMENTO DA VARIAVEL INDEXADA
 10	 TERMO(J)=((-1)**N)*4/(2*N+1.0)
 IF (ABS(TERMO(J)).GE.0.00001) THEN
	 SOMA=SOMA+TERMO(J)
 N=N+1
	 J=J+1
	 GOTO 10
	 ELSE
C
C SOMA OS TERMOS PELA DIREITA
	 WRITE(6,15)
	 WRITE(6,20)N,SOMA 
 15	 FORMAT(/,2X,'O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA')
 20 FORMAT(2X,I6,' ITERACAO E A SOMA DA ESQUERDA DA SERIE E ',F10.7)
 END IF
	 I=0
	 SOMA=0
C SOMA OS TERMOS PELA ESQUERDA
 30 IF (ABS(TERMO(J)).GE.4.0) THEN
	 WRITE(6,35)
	 WRITE(6,40)I,SOMA 
 35	FORMAT(/,2X,'O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA')
 40 FORMAT(2X,I6,' ITERACAO E A SOMA DA DIREITA DA SERIE E ',F10.7)
	 GOTO=45 
	 ELSE
	 J=J-1
	 I=I+1
	 SOMA=SOMA+TERMO(J)
 GOTO 30
 45	 END IF 
C 	 
C 	 CALCULO DA SOMA DOS TERMOS POSITIVOS E NEGATIVOS ISOLADAMENTE
	 I=0
	 SOMAP=0.0
	 SOMAN=0.0
	 SOMA=0.0
	 DO 46 J=1,200000,2
	 SOMAP=SOMAP+TERMO(J)
 46	 CONTINUE
	 DO 50 N=2,200000,2
	 SOMAN=SOMAN+TERMO(N)
 	 I=I+1
 50 CONTINUE
C
C CALCULO DA SOMA DA SERIE 
	 SOMA=SOMAP+SOMAN	
	 WRITE(6,55)
	 WRITE(6,60)I,SOMA 
 55	 FORMAT(/,2X,'O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA')
 60 FORMAT(2X,I6,' ITERACAO E A SOMA DA DIREITA DA SERIE E ',F10.7)
	 END	 
principal.for
C ESTE PROGRAMA CALCULA AS RAIZES DE UMA FUNCAO PELOS METODOS 
C NUMERICOS ESTUDADOS. 
C
C LEITURA DE DADOS 
 OPEN(UNIT=7,FILE='DADOS.TXT',STATUS='REPLACE')
 1	 WRITE(6,2)
	 WRITE(6,3)
 2 FORMAT(2x,'M E O LIMITE DE ITERACOES COM')
 3 FORMAT(2X,'TRES ESPACOS DE MEMORIA, ALOCADOS ')
	 READ(*,10)M
 10	 FORMAT(I3)!O FORMATO(2I3) ALOCA TRES ESPASOS PARA DOIS NUMEROS
	 WRITE(6,11)
 11	 FORMAT(2X,'E NECESSARIO SABER AS CODICOES DE EXISTENCIA DA ',/,
	*2X,'FUNCAO DESEJADA PARA DETERMINAR A E B, ONDE A>B')
	 READ(*,20)A,B
	 C=A
	 D=B
 20 FORMAT(2f6.2)
 WRITE(6,22)M,A,B
 22	 FORMAT(/,2x,'M=',2x,I3,2x,'A=',f6.2,2x,'B=',f6.2)
	 WRITE(6,23)
 23	 FORMAT(2X,'ESCOLHA A EQUACAO E A PRECISAO DE PARADA:',/,
	*2X,'F(X)=4.0*COS(X)-EXP(2X) COM 10E-04 DE P. DIGITE 1',/,
	*2X,'F(X)=4.0*COS(X)-EXP(2X) COM 10E-06 DE P. DIGITE 2',/,
	*2X,'F(X)=1-X*LN(X) PARA X>0 COM 10E-04 DE P. DIGITE 3',/,
 *2X,'F(X)=1-X*LN(X) PARA X>0 COM 10E-04 DE P. DIGITE 4',/,
 *2X,'F(X)=SQRT(X)-5.0*EXP(-X) PARA X>=0 COM 10E-04 DE P. DIGITE 5',
 */,2X,
 *'F(X)=SQRT(X)-5.0*EXP(-X) PARA X>=0 COM 10E-04 DE P. DIGITE 6')
 READ(*,24)I
 24	 FORMAT(I1)
	 IF(I.EQ.1)THEN 
	 EPSOL1=0.1000000E-03
	 EPSOL2=EPSOL1
 WRITE(7,26)EPSOL1,EPSOL2
 26	 FORMAT(\,2x,'PRECISAO DE PARADA',2e18.8)
 CALL BISSEC(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON(M,X0,EPSOL1,EPSOL2)
CALL CORDAS(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 END IF
	 IF((I.EQ.2).OR.(I.EQ.4))THEN 
	 EPSOL1=0.1000000E-05
	 EPSOL2=EPSOL1
 WRITE(7,27)EPSOL1,EPSOL2
 27	 FORMAT(\,2x,'PRECISAO DE PARADA',2e18.8)
 IF(I.EQ.2)THEN
	 CALL BISSEC(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON(M,X0,EPSOL1,EPSOL2)
	 CALL CORDAS(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 ELSE
	 CALL BISSEC1(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON1(M,X0,EPSOL1,EPSOL2)
	 CALL CORDAS1(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 END IF
 END IF
 IF(I.EQ.3)THEN 
 	 EPSOL1=0.1000000E-02
	 EPSOL2=EPSOL1
 WRITE(7,28)EPSOL1,EPSOL2
 28	 FORMAT(\,2x,'PRECISAO DE PARADA',2e18.8)
 CALL BISSEC1(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON1(M,X0,EPSOL1,EPSOL2)
	 CALL CORDAS1(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 END IF
	 IF(I.EQ.5)THEN 
 	 EPSOL1=0.1000000E-04
	 EPSOL2=EPSOL1
 WRITE(7,29)EPSOL1,EPSOL2
 29	 FORMAT(\,2x,'PRECISAO DE PARADA',2e18.8)
 CALL BISSEC2(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON2(M,X0,EPSOL1,EPSOL2)
	 CALL CORDAS2(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 END IF
	 IF(I.EQ.6)THEN 
 	 EPSOL1=0.1000000E-07
 	 EPSOL2=EPSOL1
 WRITE(7,30)EPSOL1,EPSOL2
 30	 FORMAT(\,2x,'PRECISAO DE PARADA',2e18.8)
 CALL BISSEC2(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D 
	 X0=0.6
	 CALL NEWTON2(M,X0,EPSOL1,EPSOL2)
	 CALL CORDAS2(M,A,B,EPSOL1,EPSOL2)
	 A=C
	 B=D
	 END IF
	 STOP
	 END
C
C	 SUBROTINA BISSECAO
C
	 SUBROUTINE BISSEC(M,A,B,EPSOL1,EPSOL2)
	 REAL FA,FB
C
C	 K É UM CONTADOR DE ITERACOES
C	 
	 WRITE(7,7)
 7	 FORMAT(/,26X,'F(X)=4.0*COS(X)-EXP(2.0*X)',//,26X,
 *'METODO DA BISSECAO')
 K=0
	 FA=4*COS(A)-EXP(2.0*A)
	 FB=4*COS(B)-EXP(2.0*B)
C
C CALCULA O POMTO MEDIO DO INTERVALO
C
 10	 X=(A+B)/2.0
	 FX=4.0*COS(X)-EXP(2.0*X)
C
C 	 ELIMINACAO DE PARTE DO INTERVALO
C
	 PROD=FX*FA
	 IF (PROD.GT.0) THEN
	 A=X
	 FA=FX
	 ELSE
	 B=X
	 FB=FX
	 END IF
C 
C TESTE DE PARADA 
C 
 IF (ABS(A-B).LE.EPSOL1) THEN
	 IF (ABS(FA-FB).LE.EPSOL2) THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
	 IF (K.GT.M) THEN
	 GOTO 35
	 ELSE
	 GOTO 10
 END IF
 20 WRITE(7,25)A,FA,K
 25	 FORMAT(/2X,'A RAIZ DA FUNCAO E=',2X,E14.9,/,
 *2X,'O VALOR DA FUNCAO E=',2X,E14.9,/,
 *2X,'O NUMERO DE INTERACOE E=',2X,I4) 
	 GOTO 60
 35	 WRITE(7,40)K
 40 FORMAT(/,2X,'NAO COVERGIU EMK=',2X,I4,2X,'ITERACOES')
 WRITE(7,50) A,B,FA
 50	 FORMAT(/,2X,'A,B=',2X,2E20.9,2X,'FX=',2X,E20.9)
 60 RETURN
 END
C
C	 SUBROUTINA NEWTON 
C 
 	 SUBROUTINE NEWTON(M,X0,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5 FORMAT(/,26X,'METODO DE NEWTON')
 K=0
 10 XK=X0
C
C X0 SATISFAZ A CONDICAO DE CONVERGENCIA
C
 FXK=4.0*COS(XK)-EXP(2.0*XK)
	 DFXK=-4.0*SIN(XK)-2*EXP(2.0*XK)
C	 
C CALCULA UM NOVO NUMERO PARA X0
C
 X0=XK-(FXK/DFXK)
	 FX0=4.0*COS(X0)-EXP(2.0*X0)
C
C TESTE DE PARADA 
C 
 IF(ABS(X0-XK).LE.EPSOL1)THEN
	 IF(ABS(FX0).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
 ELSE
	 K=K+1
	 END IF
	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10
	 END IF
 20 	 WRITE(7,25)X0,FX0,K
 25 FORMAT(/,2X,'A RAIZ APROXIMADA DA FUNCAO E=',2X,E18.8,
	*/,2X,'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
 *'O NUMERO DE ITERACOES E=',2X,I4) 
 GOTO 50
 30 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU EM K=',2X,I4,2X,'ITERACOES')
 WRITE(7,40)X0,FX0
 40	 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9) 
 50 RETURN	
 END 	
C
C SUBROUTINA CORDAS
C
 SUBROUTINE CORDAS(M,A,B,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5	 FORMAT(/,26X,'METODO DAS CORDAS')
	 K=0
	 FA=4.0*COS(A)-EXP(2.0*A)
	 FB=4.0*COS(B)-EXP(2.0*B)
C
C GERAR OS PONTOS QUE DEVEM COVERGIR PARA A RAIZ
C
 10 XK1=A-((A-B)/(FA-FB))*FA
C 
C CALCULA O VALOR DA FUNCAO EM XK
C
 FXK1=4.0*COS(XK1)-EXP(2.0*XK1)
C
C ELIMINACAO DA PARTE DO INTERVALO
C
 PROD=FA*FXK1
	 IF(PROD.GT.0)THEN
	 XK=A
	 A=XK1
	 FA=FXK1
	 ELSE
	 XK=B
	 B=XK1
	 FB=FXK1
	 END IF
C 
C TESTE DE PARADA 
C
 IF(ABS(XK1-XK).LE.EPSOL1)THEN
	 IF(ABS(FXK1).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
 	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10 	 
	 END IF
 20	 WRITE(7,25)XK1,FXK1,K
 25 FORMAT(/,2X,'A RAIZ DA FUNCAO E=',2X,E18.8,/,2X,
 *'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
	*'O NUMERO DE ITERACOE E=',2X,I4)
	 GOTO 50
 30	 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU EM K=',2X,I4,2X,'ITERACOES')
	 WRITE(7,40)XK1,FXK1
 40 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9)
 50 RETURN
 END
C
C	 SUBROTINA BISSECAO1
C
	 SUBROUTINE BISSEC1(M,A,B,EPSOL1,EPSOL2)
	 REAL FA,FB
C
C	 K É UM CONTADOR DE ITERACOES
C	 
	 WRITE(7,7)
 7	 FORMAT(/,26X,'F(X)=1-X*LN(X)',//,26X,
 *'METODO DA BISSECAO')
 K=0
	 FA=1-A*LOG(A)
	 FB=1-A*LOG(B)
C
C CALCULA O POMTO MEDIO DO INTERVALO
C
 10	 X=(A+B)/2.0
	 FX=1-X*LOG(X)
C
C 	 ELIMINACAO DE PARTE DO INTERVALO
C
	 PROD=FX*FA
	 IF (PROD.GT.0) THEN
	 A=X
	 FA=FX
	 ELSE
	 B=X
	 FB=FX
	 END IF
C 
C TESTE DE PARADA 
C 
 IF (ABS(A-B).LE.EPSOL1) THEN
	 IF (ABS(FA-FB).LE.EPSOL2) THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
	 IF (K.GT.M) THEN
	 GOTO 35
	 ELSE
	 GOTO 10
 END IF
 20 WRITE(7,25)A,FA,K
 25	 FORMAT(/2X,'A RAIZ DA FUNCAO E=',2X,E14.9,/,
 *2X,'O VALOR DA FUNCAO E=',2X,E14.9,/,
 *2X,'O NUMERO DE INTERACOE E=',2X,I4) 
	 GOTO 60
 35	 WRITE(7,40)K
 40 FORMAT(/,2X,'NAO COVERGIU EMK=',2X,I4,2X,'ITERACOES')
 WRITE(7,50) A,B,FA
 50	 FORMAT(/,2X,'A,B=',2X,2E20.9,2X,'FX=',2X,E20.9)
 60 RETURN
 END
C
C	 SUBROUTINA NEWTON1 
C 
	 SUBROUTINE NEWTON1(M,X0,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5 FORMAT(/,26X,'METODO DE NEWTON')
 K=0
 10 XK=X0
C
C X0 SATISFAZ A CONDICAO DE CONVERGENCIA
C
 FXK=1-XK*LOG(XK)
	 DFXK=-1-LOG(XK)
C	 
C CALCULA UM NOVO NUMERO PARA X0
C
 X0=XK-(FXK/DFXK)
 FX0=1-X0*LOG(X0)
C
C TESTE DE PARADA 
C 
 IF(ABS(X0-XK).LE.EPSOL1)THEN
	 IF(ABS(FX0).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
 ELSE
	 K=K+1
	 END IF
	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10
	 END IF
 20	 WRITE(7,25)X0,FX0,K
 25 FORMAT(/,2X,'A RAIZ APROXIMADA DA FUNCAO E=',2X,E18.8,
	*/,2X,'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
 *'O NUMERO DE ITERACOES E=',2X,I4) 
 GOTO 50
 30	 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU EM K=',2X,I4,2X,'ITERACOES')
 WRITE(7,40)X0,FX0
 40	 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9) 
 50 RETURN	
 END 	
C
C SUBROUTINA CORDAS1
C
 SUBROUTINE CORDAS1(M,A,B,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5	 FORMAT(/,26X,'METODO DAS CORDAS')
 	 K=0
	 FA=1-A*LOG(A)
	 FB=1-B*LOG(B)
C
C GERAR OS PONTOS QUE DEVEM COVERGIR PARA A RAIZ
C
 10 XK1=A-((A-B)/(FA-FB))*FA
C 
C CALCULA O VALOR DA FUNCAO EM XK
C
 FXK1=1-XK1*LOG(XK1)
C
C ELIMINACAO DA PARTE DO INTERVALO
C
 PROD=FA*FXK1
	 IF(PROD.GT.0)THEN
	 XK=A
	 A=XK1
	 FA=FXK1
	 ELSE
	 XK=B
	 B=XK1
	 FB=FXK1
	 END IF
C 
C TESTE DE PARADA 
C
 IF(ABS(XK1-XK).LE.EPSOL1)THEN
	 IF(ABS(FXK1).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10 	 
	 END IF
 20	 WRITE(7,25)XK1,FXK1,K
 25 FORMAT(/,2X,'A RAIZ DA FUNCAO E=',2X,E18.8,/,2X,
 *'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
	*'O NUMERO DE ITERACOE E=',2X,I4)
	 GOTO 50
 30	 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU
EM K=',2X,I4,2X,'ITERACOES')
	 WRITE(7,40)XK1,FXK1
 40 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9)
 50 RETURN
 END
C
C	 SUBROTINA BISSECAO2
C
	 SUBROUTINE BISSEC2(M,A,B,EPSOL1,EPSOL2)
	 REAL FA,FB
C
C	 K É UM CONTADOR DE ITERACOES
C	 
	 WRITE(7,7)
 7	 FORMAT(/,26X,'F(X)=SQRT(X)-5.0*EXP(-X)',//,26X,
 *'METODO DA BISSECAO')
 K=0
	 FA=SQRT(A)-5.0*EXP(-A)
	 FB=SQRT(B)-5.0*EXP(-B)
C
C CALCULA O POMTO MEDIO DO INTERVALO
C
 10	 X=(A+B)/2.0
	 FX=SQRT(X)-5.0*EXP(-X)
C
C 	 ELIMINACAO DE PARTE DO INTERVALO
C
	 PROD=FX*FA
	 IF (PROD.GT.0) THEN
	 A=X
	 FA=FX
	 ELSE
	 B=X
	 FB=FX
	 END IF
C 
C TESTE DE PARADA 
C 
 IF (ABS(A-B).LE.EPSOL1) THEN
	 IF (ABS(FA-FB).LE.EPSOL2) THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
	 IF (K.GT.M) THEN
	 GOTO 35
	 ELSE
	 GOTO 10
 END IF
 20 WRITE(7,25)A,FA,K
 25	 FORMAT(/2X,'A RAIZ DA FUNCAO E=',2X,E14.9,/,
 *2X,'O VALOR DA FUNCAO E=',2X,E14.9,/,
 *2X,'O NUMERO DE INTERACOE E=',2X,I4) 
	 GOTO 60
 35	 WRITE(7,40)K
 40 FORMAT(/,2X,'NAO COVERGIU EMK=',2X,I4,2X,'ITERACOES')
 WRITE(7,50) A,B,FA
 50	 FORMAT(/,2X,'A,B=',2X,2E20.9,2X,'FX=',2X,E20.9)
 60 RETURN
 END
C
C	 SUBROUTINA NEWTON2 
C 
 	 SUBROUTINE NEWTON2(M,X0,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5 FORMAT(/ ,26X,'METODO DE NEWTON')
 K=0
 10 XK=X0
C
C X0 SATISFAZ A CONDICAO DE CONVERGENCIA
C
 FXK=SQRT(XK)-5.0*EXP(-XK)
 	 DFXK=1/(2.0*SQRT(XK))+10*EXP(-XK)
C	 
C CALCULA UM NOVO NUMERO PARA X0
C
 X0=XK-(FXK/DFXK)
	 FX0=SQRT(X0)-5.0*EXP(-X0)
C
C TESTE DE PARADA 
C 
 IF(ABS(X0-XK).LE.EPSOL1)THEN
	 IF(ABS(FX0).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
 ELSE
	 K=K+1
	 END IF
	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10
	 END IF
 20	 WRITE(7,25)X0,FX0,K
 25 FORMAT(/,2X,'A RAIZ APROXIMADA DA FUNCAO E=',2X,E18.8,
	*/,2X,'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
 *'O NUMERO DE ITERACOES E=',2X,I4) 
 GOTO 50
 30	 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU EM K=',2X,I4,2X,'ITERACOES')
 WRITE(7,40)X0,FX0
 40	 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9) 
 50 RETURN	
 END 	
C
C SUBROUTINA CORDAS2
C
 SUBROUTINE CORDAS2(M,A,B,EPSOL1,EPSOL2)
	 WRITE(7,5)
 5	 FORMAT(/,26X,'METODO DAS CORDAS')
	 K=0
	 FA=SQRT(A)-5.0*EXP(-A)
	 FB=SQRT(B)-5.0*EXP(-B)
C	 
C GERAR OS PONTOS QUE DEVEM COVERGIR PARA A RAIZ
C
 10 XK1=A-((A-B)/(FA-FB))*FA
C 
C CALCULA O VALOR DA FUNCAO EM XK
C
 FXK1=SQRT(XK1)-5.0*EXP(-XK1)
C
C ELIMINACAO DA PARTE DO INTERVALO
C
 PROD=FA*FXK1
	 IF(PROD.GT.0)THEN
	 XK=A
	 A=XK1
	 FA=FXK1
	 ELSE
	 XK=B
	 B=XK1
 	 FB=FXK1
	 END IF
C 
C TESTE DE PARADA 
C
 IF(ABS(XK1-XK).LE.EPSOL1)THEN
	 IF(ABS(FXK1).LE.EPSOL2)THEN
	 GOTO 20
	 ELSE
	 K=K+1
	 END IF
	 ELSE
	 K=K+1
	 END IF
	 IF(K.GT.M)THEN
	 GOTO 30
	 ELSE
	 GOTO 10 	 
	 END IF
 20	 WRITE(7,25)XK1,FXK1,K
 25 FORMAT(/,2X,'A RAIZ DA FUNCAO E=',2X,E18.8,/,2X,
 *'O VALOR DA FUNCAO E=',2X,E18.8,/,2X,
	*'O NUMERO DE ITERACOE E=',2X,I4)
	 GOTO 50
 30	 WRITE(7,35)K
 35 FORMAT(/,2X,'NAO CONVERGIU EM K=',2X,I4,2X,'ITERACOES')
	 WRITE(7,40)XK1,FXK1
 40 FORMAT(/,2X,'XK1=',2X,E20.9,2X,'FXK1=',2X,E20.9)
 50 RETURN
 END
PRINC6.TXT
 PRECISAO DE PARADA .10000000E-07 .10000000E-07
 F(X)=SQRT(X)-5.0*EXP(-X)
 METODO DA BISSECAO
 NAO COVERGIU EMK= 1000 ITERACOES
 A,B= .143044500E+01 .143044500E+01 FX= -.225259500E-07
 METODO DE NEWTON
 NAO CONVERGIU EM K= 1000 ITERACOES
 XK1= .143044500E+01 FXK1= -.129385700E-07
 METODO DAS CORDAS
 NAO CONVERGIU EM K= 1000 ITERACOES
 XK1= .143044500E+01 FXK1= -.225259500E-07
PRINC5.TXT
 PRECISAO DE PARADA .10000000E-04 .10000000E-04
 F(X)=SQRT(X)-5.0*EXP(-X)
 METODO DA BISSECAO
 A RAIZ DA FUNCAO E= .143044800E+01
 O VALOR DA FUNCAO E= .478776600E-05
 O NUMERO DE INTERACOE E= 20
 METODO DE NEWTON
 A RAIZ APROXIMADA DA FUNCAO E= .14304390E+01
 O VALOR DA FUNCAO E= -.93229490E-05
 O NUMERO DE ITERACOES E= 14
 METODO DAS CORDAS
 A RAIZ DA FUNCAO E= .14304490E+01
 O VALOR DA FUNCAO E= .60931020E-05
 O NUMERO DE ITERACOE E= 23
PRINC4.TXT
 PRECISAO DE PARADA .10000000E-05 .10000000E-05
 F(X)=1-X*LN(X)
 METODO DA BISSECAO
 A RAIZ DA FUNCAO E= .176322300E+01
 O VALOR DA FUNCAO E= .278934100E-06
 O NUMERO DE INTERACOE E= 17
 METODO DE NEWTON
 A RAIZ APROXIMADA DA FUNCAO E= .17632230E+01
 O VALOR DA FUNCAO E= .11765750E-07
 O NUMERO DE ITERACOES E= 5
 METODO DAS CORDAS
 A RAIZ DA FUNCAO E= .17632230E+01
 O VALOR DA FUNCAO E= .29709990E-07
 O NUMERO DE ITERACOE E= 3
PRINC3.TXT
 PRECISAO DE PARADA .10000000E-02 .10000000E-02
 F(X)=1-X*LN(X)
 METODO DA BISSECAO
 A RAIZ DA FUNCAO E= .176289100E+01
 O VALOR DA FUNCAO E= .520476300E-03
 O NUMERO DE INTERACOE E= 7
 METODO DE NEWTON
 A RAIZ APROXIMADA DA FUNCAO E= .17632230E+01
 O VALOR DA FUNCAO E= .11759100E-07
 O NUMERO DE ITERACOES E= 4
 METODO DAS CORDAS
 A RAIZ DA FUNCAO E= .17632200E+01
 O VALOR DA FUNCAO E= .43695290E-05
 O NUMERO DE ITERACOE E= 1
Lista2.for
C ESTE PROGRAMA CALCULA A DERIVADA DA FUNCAO F(X)=EXP(X),
C EM X=0, PARA DELTA DE X IGUAL A:0.1, 0.01,....., 10**(-10)
C
 	 IMPLICIT REAL*8(F,D) 
	 K=1 !ONDE K E O CONTADOR DE ITERACOES
 	 X=0.0
 	 OPEN(UNIT=6,FILE='DAD3.TXT',STATUS='NEW')
	 WRITE(6,5)X
 5	 FORMAT(/,2X,'A DERIVADA E CALCULADA EM 'F5.3)
 10	 DELTA=10.0**(-K)
	 FX=EXP(X)
	 FXD=EXP(X+DELTA)
	 DFX=(FXD-FX)/DELTA
	 WRITE(6,20)K,DFX
 20	 FORMAT(2X,'A DERIVADA DE F(X) NA ',I3,' ITERACAO E ',F24.17)
	 IF (K.NE.21)THEN
	 K=K+1
	 GOTO 10
	 ELSE
	 END IF 
	 END
PRINC1.TXT
 PRECISAO DE PARADA .10000000E-03 .10000000E-03
 F(X)=4.0*COS(X)-EXP(2.0*X)
 METODO DA BISSECAO
 A RAIZ DA FUNCAO E= .597882000E+00
 O VALOR DA FUNCAO E= .356950500E-04
 O NUMERO DE INTERACOE E= 13
 METODO DE NEWTON
 A RAIZ APROXIMADA DA FUNCAO E= .59788610E+00
 O VALOR DA FUNCAO E= -.12218020E-06
 O NUMERO DE ITERACOES E= 1
 METODO DAS CORDAS
 A RAIZ DA FUNCAO E= .59788610E+00
 O VALOR DA FUNCAO E= -.13247760E-06
 O NUMERO DE ITERACOE E= 3
LISTA4.TXT
 O SOMA DA SERIE COM PRECISAO SIMPLES E .10000000000000000E+01 NA 29 ITERACAO
 O SOMA DA SERIE COM PRECISAO DUPLA E .99999999813735490D+00 NA 29 ITERACAO
LISTA3.TXT
 O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA
 200000 ITERACAO E A SOMA DA ESQUERDA DA SERIE E 3.1415910
 O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA
 200000 ITERACAO E A SOMA DA DIREITA DA SERIE E 3.1415870
 O PROGRAMA ENCONTROU UM VALOR MENOR QUE 0.00001 NA
 100000 ITERACAO E A SOMA DA DIREITA DA SERIE E 3.1415870
LISTA2.TXT
 A DERIVADA E CALCULADA EM .000
 A DERIVADA DE F(X) NA 1 ITERACAO E 1.05170918155311800
 A DERIVADA DE F(X) NA 2 ITERACAO E 1.00501670877307300
A DERIVADA DE F(X) NA 3 ITERACAO E 1.00050016673203400
 A DERIVADA DE F(X) NA 4 ITERACAO E 1.00005000167234000
 A DERIVADA DE F(X) NA 5 ITERACAO E 1.00000500002183500
 A DERIVADA DE F(X) NA 6 ITERACAO E 1.00000050004433800
 A DERIVADA DE F(X) NA 7 ITERACAO E 1.00000005107025100
 A DERIVADA DE F(X) NA 8 ITERACAO E 1.00000000000000000
 A DERIVADA DE F(X) NA 9 ITERACAO E 1.00000000000000000
 A DERIVADA DE F(X) NA 10 ITERACAO E .99999972244434390
 A DERIVADA DE F(X) NA 11 ITERACAO E .99999973979156790
 A DERIVADA DE F(X) NA 12 ITERACAO E 1.00008847085926000
 A DERIVADA DE F(X) NA 13 ITERACAO E .99920033344624850
 A DERIVADA DE F(X) NA 14 ITERACAO E .99920023188362580
 A DERIVADA DE F(X) NA 15 ITERACAO E 1.11022255040029200
 A DERIVADA DE F(X) NA 16 ITERACAO E .00000000000000000
 A DERIVADA DE F(X) NA 17 ITERACAO E .00000000000000000
 A DERIVADA DE F(X) NA 18 ITERACAO E .00000000000000000
 A DERIVADA DE F(X) NA 19 ITERACAO E .00000000000000000
 A DERIVADA DE F(X) NA 20 ITERACAO E .00000000000000000
 A DERIVADA DE F(X) NA 21 ITERACAO E .00000000000000000
PRINC2.TXT
 PRECISAO DE PARADA .10000000E-05 .10000000E-05
 F(X)=4.0*COS(X)-EXP(2.0*X)
 METODO DA BISSECAO
 A RAIZ DA FUNCAO E= .597886000E+00
 O VALOR DA FUNCAO E= .364587200E-06
 O NUMERO DE INTERACOE E= 20
 METODO DE NEWTON
 A RAIZ APROXIMADA DA FUNCAO E= .59788610E+00
 O VALOR DA FUNCAO E= -.12214430E-06
 O NUMERO DE ITERACOES E= 2
 METODO DAS CORDAS
 A RAIZ DA FUNCAO E= .59788610E+00
 O VALOR DA FUNCAO E= -.13247760E-06
 O NUMERO DE ITERACOE E= 3
C�lculo Num�rico/Ra�zes da Fun��o.zip
zerofun.doc
Raízes de funções
Dada uma função f, dizemos que ( é uma raiz de f se f(()=0.
Exemplos:
1- f(x)= x - 2
	
	x-2 = 0
	x = 2	é raíz de f(x) pois f(2)= 0
2- f(x) = x2 + 5x +6
	
	(x+3) . (x+2)=0
	x= -3	 é raíz de f(x) pois f(-3)= (9) -15 +6 =0
	x= -2	 é raíz de f(x) pois f(-2)= (4) -10 +6 =0
3- f(x) = x3 +2x2 -3x
	
	x(x2 +2x -3x)=0
		x = 0 é raíz de f(x) pois f(0)= 0 + 2*0 - 3*0 = 0
	x2 +2x -3=0
	(= 4 +12
	(= 16
	x= 2 ( 4
	 2	
	x= 1	é raíz de f(x) pois f(1)= 1 + 2*1 - 3*1 = 0
	x= -3	é raíz de f(x) pois f(-3)= -27 + 2*9 - 3*3 = 0
	Nos exemplos dados, foi possível encontrar de forma algébrica as raízes das funções. Porém nem sempre isto ocorre, como pode ser observado nos seguintes exemplos:
4- f(x)= x3 + 2x2 + x + 1
5- f(x)= sin(x) + cos(x)
6- f(x)= ex + x
	Temos ainda que nos certificar se, dada uma função f ela possuí raiz e quantas são. Por exemplo a função:
					f(x)= ex
não possui raiz real.
	Graficamente uma função ter uma raiz em x0, significa que a curva que representa f intercepta o eixo x em x0.
	Do exemplo 1 temos:
	Seja uma função f qualquer, tal que a sua apresentação gráfica é dada por:
Os pontos x1, x2, x3, x4, e x5 são as raízes de f no intervalo [-10, 7]
	Através do gráfico de f conseguimos determinar se f possui raízes e qual a região em x em que cada uma se localiza . Em seguida, podemos diminuir o tamanho deste intervalo, de tal forma a encontrar uma aproximação para o valor de xi. Devemos, no entanto, fazer isto de forma organizada e seguindo alguns critérios e métodos. 
�
				EXERCÍCIOS
	Faça os gráficos das seguintes funções nos intervalos determinados:
1- f(x)= x3 +2x2 + x +1 , [-2,1] 
														Resposta									
2- f(x)= sin(x) + cos(x) , [0,2(]								
														Resposta									
3- f(x)= ex + x , [-3,3]
														Resposta									
4- f(x)= ex, [-1,2]
														Resposta									
Como em muitas equações não é possível encontrar as raízes de forma analítica, temos que usar métodos iterativos que consistem em: encontrar intervalos onde se localizam as raízes e, a partir deste intervalo inicial, refinar sucessivamente a aproximação para obtermos um valor estimado para esta raiz.
1- ISOLAMENTO DAS RAÍZES 
TEOREMA 1 - (TEOREMA DE BOLZANO)
	Seja f(x) uma função continua em um intervalo [a,b]. Se f(a) * f(b) <0 então existe pelo menos um valor x=xo entre a e b tal que f(xo)=0.
	Podemos visualizar graficamente este teorema:
	Como visto, o teorema 1 não identifica quantas raízes existem em um dado intervalo, porém se f’(x) existir e preservar o sinal em [a,b], então este intervalo contém uma raiz em [a,b].
	Exemplo:
f(x)= x3 + x - 1
	x		-3	-2	-1	0	1	2	3	
sinal de f(x)		-	-	-	-	+	+	+
	O intervalo [0,1] possui raízes de f(x)
f’(x) = 3x2 + 1
f’(x) > 0 em todo intervalo [0,1], logo f(x) possui apenas uma raiz em [0,1].
	No caso de f(a) * f(b) > 0, podemos ter vários casos:
 
	
Se uma função f(x) é formada pela diferença de duas funções g(x) e h(x), podemos encontrar os intervalos onde se encontram as raízes, a partir dos gráficos de g(x) e h(x).
 
	Os valores de x tais que g(x) = h(x) são as raízes de f(x), pois:
		f(x) = g(x) - h(x)		(1)
	Para x1:
		g(x1) = h(x1)		(2)
	De 2 em 1:
		f(x1) = h(x1) - h(x1)
		f(x1) = 0
	Este método é muito útil quando as funções g(x) e h(x) tiverem formas conhecidas.
	2 - MÉTODOS DE REFINAMENTO
2.1- Método da dicotomia
	Seja f(x) uma função contínua em [a,b] e xr uma raiz de f neste intervalo. Dividimos o intervalo ao meio, obtendo dois subintervalos dados por:
			[a , (a+b)/2 ]	e	[(a+b)/2 , b]
	Em seguida verificamos em qual destes subintervalos está a raiz usando o teorema 1. Repetimos novamente o processo até que se obtermos a precisão desejada.
	Para cada intervalo [ ai , bi ] que contém xr, o respectivo ponto médio xi = (ai + bi)/2 é um valor aproximado de xr com erro delimitado por (i =| bi - ai | /2 , ou seja, metade do comprimento do intervalo. Podemos então escrever:
					xr = xi ( (i
Exemplo:
	Estimar o valor da raiz de f(x) = x3 + 2x2 + x +1 no intervalo [-2,-1] com erro menor ou igual a 0,020.
	f(-2,000)= -1,000* 				Existe uma raiz neste intervalo
	f(-1,000)= 1,000* 					( = ( 1,000
	f(-2,000)= -1,000*
Existe uma raiz neste intervalo pois f(-2,000)*f(-1,500) <0
	f(-1,500)= 0,625*					( = ( 0,500
	f(-1,000)= 1,000	
	f(-2,000)= -1,000*			Existe uma raiz neste intervalo pois f(-2,000)*f(-1,750) <0
	f(-1,750)= 0,016*					( = ( 0,250
	f(-1,500)= 0,625	
	f(-2,000)= -1,000	
	f(-1,875)= -0,435*			Existe uma raiz neste intervalo pois f(-1,875)*f(-1,750) <0
	f(-1,750)= 0,016*					( = ( 0,125
	f(-1,875)= -0,435				
	f(-1,812)= -0,195*			Existe uma raiz neste intervalo pois f(-1,812)*f(-1,750) <0	
	f(-1,750)= 0,016*					( = ( 0,063
	f(-1,812)= -0,195				
	f(-1,781)= -0,086*		 Existe uma raiz neste subintervalo pois f(-1,781)*f(-1,750) <0	
	f(-1,750)= 0,016*					( = ( 0,031
	f(-1,781)= -0,086				
	f(-1,765)= -0,032*		Existe uma raiz neste subintervalo pois f(-1,765)*f(-1,750) <0	
	f(-1,750)= 0,016*					( = ( 0,015
	A estimativa da raíz é xr = -1,757 ( 0,015.
EXERCÍCIOS
	A)- Estime os valores das raízes das seguintes funções, nos intervalos e erros determinados, usando o método da dicotomia.
		1 - f(x) = sin(x) + cos(x)	[1;3]		( < 0,020
		2 - f(x) = ex +x		[-1,5;0]	( < 0,020
		3 - f(x) = ln x + x2 -2	[1;2]			( < 0,02
		4 - f(x) = sin(x +1) + x	[-3;3]		( < 0,03
		5 - f(x) = 
 - x3 /10	[1,3]		( < 0,03
	B)- Estime os valores das raízes de:
		1 - f(x) = x4 +2x3 - 5
		2 - f(x) = ln(x2 +1) - x + 2
com erro ( < 0,020
	C)- Quantas raízes tem a função f(x) = tg(x) - x2 ?
	D)- Qual o valor de 
 com erro menor ou igual a 0,01 ? 
�
		RESPOSTAS
	A) - 1	f(1,000)= 1,382			
		f(2,000)= 0,4931*					
		f(3,000)= -0,8489*		f(2,000)*f(3,000) <0 	( = ( 0,500
	f(2,000)= 0,4931*				
	f(2,500)= -0,2027*			f(2,000)*f(2,500) <0		( = ( 0,250
	f(3,000)= -0,8489	
	f(2,000)= 0,4931				
	f(2,250)= 0,1499*			f(2,250)*f(2,500) <0		( = ( 0,125
	f(2,500)= -0,2027*	
	f(2,250)= 0,1499*			f(2,250)*f(2,375) <0		( = ( 0,063
	f(2,375)= -0,0266*					
	f(2,500)= -0,2027	
	f(2,250)= 0,1499			
	f(2,313)= 0,0611*			f(2,313)*f(2,375) <0		( = ( 0,031
	f(2,375)= -0,0266*	
	f(2,313)= 0,0611				
	f(2,343)= 0,0172							( = ( 0,016
	f(2,375)= -0,0266	
	A estimativa da raíz é xr = 2,359 ( 0,016.
	2) f(-1,500)= -1,277			
	 f(-0,750)= -0,2776*		f(-0,750)*f(0,000) <0		( = ( 0,375
	 f(0,000) = 1,000*
	f(-0,750)= -0,2776*			f(-0,750)*f(-0,375) <0	( = ( 0,187
	f(-0,375)= 0,3123*					
	f(0,000) = 1,000	
	f(-0,750)= -0,2776*			f(2,250)*f(2,500) <0		( = ( 0,094
	f(-0,562)= 0,0081*					
	f(-0,375)= 0,3123	
	f(-0,750)= -0,2776				
	f(-0,656)= -0,1371*			f(-0,656)*f(-0,562) <0	( = ( 0,047
	f(-0,562)= 0,0081*	
	f(-0,656)= -0,1371				
	f(-0,609)= -0,0651*			f(-0,609)*f(-0,562) <0	( = ( 0,023
	f(-0,562)= 0,0081*	
	f(-0,609)= -0,0651				
	f(-0,585)= -0,028					( = ( 0,011
	f(-0,562)= 0,0081
A estimativa da raíz é	xr = -0,573 ( 0,011.
	3) - A estimativa da raíz é xr = 1,33 ( 0,02.
	4) - A estimativa da raíz é xr = -0,49 ( 0,03.
	5) - A estimativa da raíz é xr = 2,53 ( 0,03.
	B)- Primeiro devemos encontrar os intervalos onde estão as raízes de f(x), para isto vamos construir uma tabela de valores:
 x	 -8	 -7	 -6	 -5	 -4	-3	-2	-1	 0	 1	 2	 3	 
f(x)	3067	1710	859	370	123	22	-5	-6	-5	-2	27	130
	Uma outra forma é construindo os gráficos abaixo:
	Vamos primeiro estimar a raíz no intervalo [-3 ; -2]:
	f(-3,00)= 22,000				
	f(-2,50) = 2,812*			f(-2,50)*f(-2,00) <0		( = ( 0,25
	f(-2,00) = -5,000*	
	f(-2,50)= 2,812*			f(-2,50)*f(,2,25) <0		( = ( 0,13
	f(-2,25)= -2,152*					
	f(-2,00) =-5,000	
	f(-2,50)= 2,812				
	f(-2,38)= 0,123*			f(-2,38)*f(-2,25) <0		( = ( 0,07
	f(-2,25) =-2,152*	
	f(-2,38)= 0,123*			f(-2,38)*f(-2,32) <0		( = ( 0,03	
	f(-2,32)= -1,004*			
	f(-2,25) = -2,152	
	f(-2,38)= 0,123				
	f(-2,36)= -0,268					( = ( 0,01
	f(-2,32)= -1,004	
	A estimativa da raíz é 	xr = -2,37 ( 0,01.
	Vamos agora estimar a raíz no intervalo [1 ; 2]:
	f(1,00) = -2,000*			f(1,00)*f(1,50) <0		( = ( 0,25	
	f(1,50) = 6,812*			
	f(2,00) =27,000	
	f(1,00)= -2,000*			f(1,00)*f(1,25) <0		( = ( 0,13	
	f(1,25)= 1,348*			
	f(1,50) = 6,812	
	f(1,00)= -2,000				
	f(1,13)= -0,484*			f(1,13)*f(1,25) <0		( = ( 0,06
	f(1,25) = 1,348*	
	f(1,13)= -0,484*			f(1,13)*f(1,19) <0		( = ( 0,03	
	f(1,19)= 0,376*			
	f(1,25) = 1,348	
	f(1,13)= -0,484				
	f(1,16)= -0,067			( = ( 0,02	(se não tivesse arredondado seria 0,015)
	f(1,19)= 0,376						
A estimativa da raíz é 	xr = 1,18 ( 0,02.
	2) -
 x	 -5	 -4	 -3	 -2	 -1	0	1	2	3 4 5	 6 7 
f(x) 10,26	8,83	7,30	5,61	3,69	2 1,69 1,61 1,30 0,83 0,25 -0,39 -1,09
	A estimativa da raíz é xr = 5,39 ( 0,02.
	C) –A função f(x) = tg(x) -x2 tem infinitas raízes.
 
	D)- x = 
		f(x) = x2 - 5 = 0 
	Devemos encontrar a solução para a raiz positiva uma vez que x deve ser positivo, pois x =
. Esta solução se encontra no intervalo [2 ; 3].
	f(3,00)= 4,00					
	f(2,50) = 1,25*			f(2,00)*f(2,50) <0		( = ( 0,25
	f(2,00) = -1,00*	
	f(2,50)= 1,25					
	f(2,25)= 0,06*			f(2,00)*f(2,25) <0		( = ( 0,13
	f(2,00) = -1,00*	
	f(2,25)= 0,06	*			f(2,13)*f(2,25) <0		( = ( 0,06	
	f(2,13)= -0,46*			
	f(2,00) = -1,00	
	f(2,25)= 0,06*			f(2,19)*f(2,25) <0		( = ( 0,03	
	f(2,19)= -0,21*			
	f(2,13) =-0,46		
	f(2,25)= 0,06*			f(2,22)*f(2,25) <0		( = ( 0,02	
	f(2,22)= -0,07*			
	f(2,19)= -0,46		
	f(2,25)= 0,06					
	f(2,24)= 0,02*			f(2,22)*f(2,24) <0		( = ( 0,01
	f(2,22)= -0,07	*	
A estimativa da raíz é xr = 2,23 ( 0,01
	Em uma calculadora: 
= 2,236067977
CRITÉRIOS DE PARADA
	Estamos usando até agora, o seguinte critério de parada:
			( ( (b-a)/2
					 			(1)
	No entanto, se tivermos uma função do seguinte tipo
 
	Podemos estar satisfazendo (1), e no entanto f(x0) pode ser muito maior que zero. Assim, em certos casos pode-se usar a seguinte condição 
						
 ((	(2)
	Tanto o critério (1), quanto o critério (2), podem levar a um número muito grande de iterações. Uma maneira de se contornar este problema é tomar como um critério de parada adicional, um certo número de iterações máximo.
Estimativa do número de iterações no método da bisseção.
	Como em cada passo, dividimos o intervalo por 2, temos:
			
 = 
		(3)
					2k
Onde k é o número de passos.
Queremos que:
			(k ( 
		
				 2
			2(( 
			(4)
	
de (3) em (4)
			2( ( 
				
				 2k
	log 2(k+1) ( log 
				
			 (
	k +1 ( 
		
	k ( 
-1		(5)
MÉTODO DAS SUBSTITUIÇÕES OU APROXIMAÇÕES SUCESSIVAS
	Seja f(x) uma função contínua em [a ; b] com uma raiz neste intervalo.
	O método consiste em transformar a equação:
				f(x) = 0 
em: 
				x = ((x) 	
onde ((x) é chamada de função de iteração, e a partir de uma aproximação inicial xn = 0, usar 
xn + 1 = ((xn) 
para encontrar uma seqüência de {xn}.
	Graficamente temos:
	
	Quando encontrarmos x = ((x), teremos:
				f(x) = x - ((x) = 0
	Exemplo 1 :
	Quais funções ((x) podem ser usadas para encontrar as raízes de f(x)=x2+ 2x –3?
		x2 + 2x -3 = 0
		(i)	x = 3- x2 / 2		===>		((x) = 3- x2 / 2
		(ii)	x = (
		===>		((x) = (
		(iii)	x(x + 2) - 3 = 0
			x = 3 / x + 2 	===>		((x) = 3 / x + 2
		(iv)	x2 = 3 - 2x
			x = (3/x) -2		===>		((x) = (3/x) - 2
	Exemplo 2:
	Dada a função f(x) = x2 + 0,96x - 2,08 encontrar a raiz de f(x) no intervalo [1 ; 2], a partir de x0 = 1,2 usando as seguintes funções de iteração:
		(a) ((x) = 2,08 / x + 0,96
		(b) ((x) = x2 + 2,08 / 2x + 0,96
		(c) ((x) = x2 +1,96x - 2,08
Faça 5 iterações.
	(a) -
 
n
xn
((xn) = 2,08 / xn + 0,96
f(xn)
0
1,2
0,9630
0,5120
1
0,9630
1,082
-0,2281
2
1,082
1,019
0,1294
3
1,019
1,051
-0,0634
4
1,051
1,034
0,0336
5
1,034
1,043
-0,0182
	(b) - 
	
n
xn
((xn) = x2 + 2,08 / 2x + 0,96
f(xn)
0
1,2
1,048
0,5120
1
1,048
1,040
0,0244
2
1,040
1,040
0,0 (raiz exata)
	(c)
n
xn
((xn) = x2 +1,96x -2,08
f(xn)
0
1,2
1,712
0,5120
1
1,712
4,206
2,495
2
4,206
23,854
19,65
3
23,854
613,6
589,6
4
613,6
37770
-
	Deste exemplo, podemos notar que nem todas as funções de iteração farão com que o método convirja para a raiz procurada.
	O seguinte teorema estabelece condições suficientes para que o método seja convergente.
	TEOREMA
	Seja ( uma raiz da equação f(x) = 0, isolada num intervalo I centrado em (.
	Seja ((x) uma função de iteração para a equação f(x) = 0. Se,
		(i) 	((x) e (‘(x) são continuas em I
		(ii)	|((x)| ( M ( 1 , ( x ( I
		(iii)	xn=0 ( I
	Então a seqüência {xn} gerada pelo processo iterativo xn+1 = ((xn) converge para (.
	DEMONSTRAÇÃO
	Vamos primeiro provar que se xn=0 ( I, então xn ( I para qualquer n.
		Sabemos que:
				f(() = 0			(6)
e
				( = ((()			(7)
	Pelo processo iterativo, temos 
				xn+1 = ((xn)			(8)
	Logo subtraindo (7) de (8) :
				xn+1 - ( = ((xn) - ((()	(9)
	Como ((x) é contínua e diferenciável em I, pelo teorema do valor médio, se xn ( I, existe cn entre xn e ( tal que:
			(‘(cn) (xn - () = ((xn) - ((()		(10)
	De (9) e (10):
			xn+1 - ( (‘ (cn) (xn - ()	(11)
e
			|xn+1 - (| = | (‘(cn) | .| xn - ( | 
	Pela condição (ii) do teorema:
		 	|xn+1 - (| = |(‘(cn)|.|xn - (| < |xn - (| 
			|xn+1 - ( | < | xn- ( | 
Assim, a cada passo, a distância entre xn e ( diminui e como I está centrado em (, xn ( I , (n.
	Agora devemos provar que 
.
	De (9):
		|x1 - (| = | ((xn=0) - ((()| = |(‘ (cno)| | xn=0 - ( | ( M | xn=0 - (|		(11)
		|x1 - (| = | ((x1) - ((()| = |(‘ (cn1)| |x1 - (| ( M | x1 - (|
	Usando (11):
		|x2 - (| ( M2 | xn=0 - (|
	Sucessivamente segue que: 
		|xn - (| ( Mn | xn=0 - (|
e
		
 |xn - ( | ( 
 Mn |xn=0 - (|
	Como M (1 , 
 Mn = 0:
		
 xn - ( = 0 
		
xn = (
	EXEMPLO 3:
	Verificar as condições do teorema de convergência para as funções (a) e (c) do exemplo 2:
	(a) ((x) = 2,08 / (x+0,96)
	 (‘(x) = - 2,08 / (x+0,96)2 
- ((x) e (‘(x) são contínuas em [1 ; 2] 
		|(‘(x)| < 1
		|-2,08 / (x+0,96)2 | < 1 ====> 2,08 / (x+0,96)2 < 1
		(x + 0,96)2 > 2,08
		x2 + 1,92x - 1,16 > 0
		( = 8,33 ==========>	x1 = -2,40 ; x2 = 0,48
			
			|(‘(x)| <1		 |(‘(x)| > 1		 |(‘(x)| < 1
	- |(‘(x)| < 1 em [ 1 ; 2]	
	
	- 1,2 ( [1 ; 2]
	Todas as condições são satisfeitas 	
	(c)	((x) = x2 - 1,96x - 2,08
		(‘(x) = 2x + 1,96
		- ((x) e (‘(x) são contínuas em [1 ; 2]
		|(‘(x)| < 1
		
		|2x + 1,96| < 1
		-1 < 2x + 1,96 < 1
		-2,96 < 2x < 0,96
		-1,48 < x < 0,48
	EXERCICIOS
	1 - Achar as raízes positivas das seguintes funções, usando como valor inicial xn=0 intervalo e erro dado.
	a) - f(x) = x3 - 9x + 3	xn=0 = 0,5	[0 ; 1]		f(x) ( 0,0001
	b) - f(x) = 2x - cos(x)	xn=0 = (/8	[0 ; (/4]	f(x) ( 0,00005
	c) - f(x) = ex - 4x2		xn=0 = 0,5	[0 ; 1]		f(x) ( 0,0020
	d) - f(x) = x3 - x - 1	xn=0 = 1,5	[1 ; 2]		f(x) ( 0,000010
	Sugestões de funções de iteração para cada item:
	a)-((x) = x3/9 +1/3		b)-((x) = cos(x)/2		c)-((x) = ex/2/2			
	d)-((x) = (x+1)1/3
Resposta:
1 - (a) f(x) = x3 - 9x + 3		((x) = x3/9 + 1/3
	Vamos verificar as condições do teorema de convergência.
	(i) ((x) é continua para ( x
	 (‘(x) = x2 /3 é continua para ( x
	(ii) x2/3 < 1
		x2/3 < 1
		x2 < 3
		x < 1,73
	logo no intervalo [0 ;1], (‘(x) < 1
	(iii) xn=0 = 0,5 ( [0 ; 1]
	Vamos então usar a função ((x) = x3/9 + 1/3 para encontrar a raíz de f(x).
	
n
Xn
((xn) = x3n /9 + 1/3
f(xn)
0
0,5000
0,3472
-1,3750
1
0,3472
0,3380
-0,0820
2
0,3380
0,3376
-0,0030
3
0,3376
613,6
0,0001
logo, a estimativa para a raíz é: x = 0,3376
(b) - f(x) = 2x - cos(x)		((x) = cos(x) / 2
	Vamos verificar as condições do teorema da convergência 
	(i) ((x) é contínua em [0 ; (/4]
	 (‘(x) = - sin(x) / 2 é contínua em [0 ; (/4]
	(ii) |(‘(x)| = |-sin(x) / 2| < 1 em [0 ; (/4]
	(iii) xn=0 = (/8 ( [0 ; (4]
		
n
Xn
((xn) = cos(xn) / 2
f(xn)
0
0,3927
0,4619
-0,13848
1
0,4619
0,4476
0,02859
2
0,4476
0,4507
-0,00629
3
0,4507
0,4501
0,00126
4
0,4501
0,4502
-0,00020
5
0,4502
-
0,00004
a estimativa para a raíz é: x = 0,45020 
(c) f(x) = ex - 4x2 		((x) = ex/2 / 2
	(i) ((x) é continua em [0 ; 1] 
	 (‘(x) = 1/4
ex/2 é continua em [ 0 ; 1] 
	(ii) | (‘(x)| < 1 em [0 ; 1] pois (‘(x) é monótona e (‘(0) =1/4 e (‘(1) = 0,412
		
n
Xn
((xn) = 1/2 ex/2
f(xn)
0
0,50000
0,64201
0,6487
1
0,64201
0,68926
0,2516
2
0,68926
0,70573
0,0919
3
0,70573
0,71157
0,0331
4
0,71157
0,71365
0,0118
5
0,71365
0,71439
0,0042
6
0,71439
-
0,0015
a estimativa para a raíz é: x = 0,71439.
�EMBED Word.Picture.8���
x1	 x2		 x3	 x4	 x5		
� EMBED Word.Picture.8 ���
�EMBED Word.Picture.8���
�
�
						
	f(x)					 f(x)
			
							 f(a)
 						 b x
						a					 	
						 f(b)					
			 f(x)	f(a)
					
			a						b		 x
 f(b)
					
 f(a)
 
 
 f(b) a b x
	f(b)
	 f(a)	
	a			 b				f(b)
											 b
						 a	 f(a)	
			 f(b)						
				 f(a)	
		 a					 b
�EMBED Word.Picture.8���
x2
x1
 ((x3)
RAÍZ
�
RAÍZ
�
 ((x2)
�
f(x)
 f(x)
x0=estimativa da raíz
(=raiz de f(x)
a xo	( b
x
((x)
y = x
 ((x1)
 x1 x3 x4 x2 x0
	
	(‘(x) não é menor que 1 em [1 ; 2] e sim em ] -1,48 ; 0,48[. 
 Logo não é possível garantir a convergência desta função iterativa		
_1000819443.unknown
_1001666938.unknown
_1001667377.unknown
_1001669164.unknown
_1001669178.unknown
_1001668897.unknown
_1001667272.unknown
_1000819446.unknown
_1000819460.unknown
_1001666916.unknown
_1000820510.doc
-1
0
1
2
3
4
5
-2
-1.5
-1
-0.5
0
0.5
1
x**3+2*x**2+x+1
_1000819459.unknown
_1000819445.unknown
_1000819439.unknown
_1000819441.unknown
_1000819418.doc
sin(x) + cos(x)
6
5
4
3
2
1
0
1.5
1
0.5
0
-0.5
-1
-1.5
_1000819437.unknown
_1000819431.doc
-
2
1
0
-1
-2
-3
8
6
4
2
0
-2
-4
-6
_1000819407.doc
6
4
2
0
-2
-4
-6
-8
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
C�lculo Num�rico/Rotina para Gauss.zip
gauss.cpp
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define MAX 10
#define ERRO 0
int GaussSimples(float [MAX][MAX],float [MAX],int );
int GaussPivotamentoParcial(float [MAX][MAX],float [MAX],int );
int LeMatriz(float matriz[MAX][MAX]);
int GaussSeidel(float [MAX][MAX],float [MAX],int,float);
void ZeraMatriz(float matriz[MAX][MAX]);
void ZeraVetor(float vetor[MAX]);
float MaiorElemento(float vetor[MAX]);
void CopiaMatriz(float [MAX][MAX],float [MAX][MAX]);
void main()
 {
 float matriz[MAX][MAX],tempmatriz[MAX][MAX],resultado[MAX],precisao;
 int num_incognitas=4,i,retorno;
 char op; //Opcao de menu
 ZeraMatriz(matriz);
 ZeraMatriz(tempmatriz);
 do{
 clrscr();
 printf("\n\t\tMedodos de Gauss");
 printf("\n\n\t(1)Entrar com um novo sistema");
 printf("\n\n\t(2)Metodo Simples de Gauss");
 printf("\n\n\t(3)Metodo de Gauss com Pivotamento Parcial");
 printf("\n\n\t(4)Metodo de Gauss-Seidel");
 printf("\n\n\t(5)Sair");
 printf("\n\n\tEscolha uma opcao:");
 op=getche();
 retorno=0;
 switch(op){
 case '1' : num_incognitas=LeMatriz(matriz);
		 CopiaMatriz(tempmatriz,matriz); // faz um backup da matriz para que sejam restauradas
		 break; //as modificacoes feitas nos processos numericos
 case '2' : retorno=GaussSimples(matriz,resultado,num_incognitas);
		 break;
 case '3' : retorno=GaussPivotamentoParcial(matriz,resultado,num_incognitas);
		 break;
 case '4' : printf("\n\n\tDigite a precisao:");
		 scanf("%f",&precisao);
		 retorno=GaussSeidel(matriz,resultado,num_incognitas,precisao);
 }
 if(retorno){ //Se nao hover erro sera impresso o resultado
 printf("\n\n");
 for(i=0;i<num_incognitas;i++){
 printf("\n\tx[%d]:%8.4f",i+1,resultado[i]);
 }
 getch();
 }
 CopiaMatriz(matriz,tempmatriz); //restaura matriz inicial
 }while(op!='5');
 }
//Funcao para leitura de Matrizes
//Parametros: uma matriz
//Retorno: numero de incognitas(coeficientes de um sistema
int LeMatriz(float matriz[MAX][MAX])
 {
 int num_incognitas,i,j,k;
 float a;
 clrscr();
 printf("\n\n\tDados:");
 printf("\n\tNumero de incognitas:");
 scanf("%d",&num_incognitas);
 for(i=0;i<num_incognitas;i++)
 {
 printf("\n");
 for(j=0;j<num_incognitas;j++){
 printf("\tDigite o coeficiente [%d][%d]:",i+1,j+1);
 scanf("%f",&matriz[i][j]);
 }
 printf("\tDigite o termo independente:");
 scanf("%f",&matriz[i][j]);
 }
 return num_incognitas;
 }
 //Resolve o sistema pelo metodo de Gauss sem pivotamento
 //Parametros:sistema, vetor para resultados e numero de incognitas
 //Retorno: 1 em caso de sucesso e 0 em caso de Erro
 int GaussSimples(float matriz[MAX][MAX],float resultado[MAX],int num_incognitas)
 {
 int i,j,k;
 float a,aux;
 clrscr();
 for(i=0;i<num_incognitas;i++){ //Faz a troca se houver um elemento 0 no inicio da linha principal
	k=i+1;
	while(matriz[i][i]==0){
	 if(matriz[k][i]==0){
	 printf("\nSistema indeterminado!!!!!"); //em caso ca coluna estar zerada retorna erro
	 getch();
	 return ERRO;
}
	 for(j=0;j<=num_incognitas;j++){ //Efetua a troca da linha que comeca por 0 com outra
	 aux=matriz[i][j];
	 matriz[i][j]=matriz[k][j];
	 matriz[k][j]=aux;
	 }
	 k++;
	 }
	 //efetua o metodo de Gauss propriamente dito
	 for(j=i+1;j<num_incognitas;j++){
	 a=-matriz[j][i]/matriz[i][i];
	 for(k=i;k<=num_incognitas;k++){
	 matriz[j][k]=a*matriz[i][k]+matriz[j][k];
	 }
	 aux=0;
	 for(k=0;k<=num_incognitas;k++){ //Testa se a linha nao foi zerada
	 if(matriz[j][k]!=0)
		aux=1;
	 }
	 if(!aux){ //se a linha for zerada retorna erro
	 printf("\nSistema indeterminado!!!!!");
	 getch();
	 return ERRO;
	 }
	 }
 }
 printf("\n\tMatriz triangularizada:\n\n");
 for(i=0;i<num_incognitas;i++){
 for(j=0;j<=num_incognitas;j++){
	 printf(" %8.3f",matriz[i][j]);
	}
	printf("\n");
 }
 for(i=num_incognitas-1;i>=0;i--) //Efetua o calculo final das solucoes na matriz triangularizada
 {
	 resultado[i]=matriz[i][num_incognitas];
	 for(j=i+1;j<num_incognitas;j++){
	 resultado[i]=resultado[i]-matriz[i][j]*resultado[j];
	 }
	 resultado[i]=resultado[i]/matriz[i][i];
 }
 return 1;
 }
//Resolve o sistema pelo metodo de Gauss com Pivotamento parcial
//Parametros:sistema, vetor para resultados e numero de incognitas
//Retorno: 1 em caso de sucesso e 0 em caso de Erro
int GaussPivotamentoParcial(float matriz[MAX][MAX],float resultado[MAX],int num_incognitas)
 {
 int i,j,k,l,m;
 float a,aux;
 clrscr();
 for(i=0;i<num_incognitas;i++){
	// Metodo bolha para fazer o pivotamento
	for(l=i;l<num_incognitas;l++){
	 for(m=i;m<num_incognitas-1;m++){
	 if(matriz[m][i]<matriz[m+1][i]){
	 for(k=0;k<=num_incognitas;k++){
		aux=matriz[m][k];
		matriz[m][k]=matriz[m+1][k];
		matriz[m+1][k]=aux;
	 }
	 }
	 }
	}
	if(matriz[i][i]==0){ // Em caso da primeira coluna ser zero retorna erro
	 printf("Sistema Indeterminado!!!");
	 getch();
	 return ERRO;
	 }
	 for(j=i+1;j<num_incognitas;j++){
	 a=-matriz[j][i]/matriz[i][i];
	 for(k=i;k<=num_incognitas;k++){
	 matriz[j][k]=a*matriz[i][k]+matriz[j][k];
	 }
	 aux=0;
	 for(k=0;k<=num_incognitas;k++){
	 if(matriz[j][k]!=0)
		aux=1;
	 }
	 if(!aux){
	 printf("\nSistema indeterminado!!!!!");
	 getch();
	 return ERRO;
	 }
	 }
 }
 printf("\n\tMatriz triangularizada:\n\n");
 for(i=0;i<num_incognitas;i++){
 for(j=0;j<=num_incognitas;j++){
	 printf(" %8.3f",matriz[i][j]);
	}
	printf("\n");
 }
 for(i=num_incognitas-1;i>=0;i--)
 {
	 resultado[i]=matriz[i][num_incognitas];
	 for(j=i+1;j<num_incognitas;j++){
	 resultado[i]=resultado[i]-matriz[i][j]*resultado[j];
	 }
	 resultado[i]=resultado[i]/matriz[i][i];
 }
 return 1;
 }
void ZeraMatriz(float matriz[MAX][MAX])
 {
 int i,j;
 for(i=0;i<MAX;i++)
 for(j=0;j<MAX;j++)
 matriz[i][j]=0;
 }
void CopiaMatriz(float matriz1[MAX][MAX],float matriz2[MAX][MAX])
 {
 int i,j;
 for(i=0;i<MAX;i++)
 for(j=0;j<MAX;j++)
 matriz1[i][j]=matriz2[i][j];
 }
 //Resolve o sistema pelo metodo iterativo de Gauss-Siedel
 //Parametros:sistema, vetor para resultados e numero de incognitas
 //Retorno: 1 em caso de sucesso e 0 em caso de Erro
 int GaussSeidel(float matriz[MAX][MAX],float resultado[MAX],int num_incognitas,float precisao)
 {
 int i,j,k;
 float a,aux[MAX],VetorPrecisao[MAX],coefdivisor,oldprec;
 clrscr();
 for(i=0;i<num_incognitas;i++){
 coefdivisor=matriz[i][i]; //retira o coef. divisor do elemento a ser isolado
 for(j=0;j<=num_incognitas;j++){
	if(i==j){
	 matriz[i][j]=0; //Coloca 0 no local do da variavel isolada
	 }
	 else{
	 matriz[i][j]=-matriz[i][j]/coefdivisor;//Faz o recalculo dos membros isolados
	 if(j==num_incognitas)
	 matriz[i][j]=matriz[i][j]*(-1); //Retorna o sinal original para os membros isolados do sistema
	 }
 }
 }
 for(i=0;i<num_incognitas;i++){
 resultado[i]=matriz[i][num_incognitas]; //inicializa o vetor de solucoes com os membros isolados
 }
 k=0;
 oldprec=100000000; //inicializa uma variavel auxiliar de precisao; para manter a memoria da precisao anterior
 ZeraVetor(VetorPrecisao);
 do{
 for(i=0;i<num_incognitas;i++)
 aux[i]=resultado[i]; //inicializa uma matriz auxiliar com as solucoes
 for(i=0;i<num_incognitas;i++){
 resultado[i]=0; //zera o correspondente valor das solucoes
 for(j=0;j<num_incognitas;j++){
	resultado[i]=resultado[i]+matriz[i][j]*aux[j];
	}
	resultado[i]=resultado[i]+matriz[i][j];
	VetorPrecisao[i]=fabs(aux[i]-resultado[i]);
	aux[i]=resultado[i];
	printf(" %10.5f",resultado[i]); //imprime os resultados das iteracoes
 }
 printf("\n");
 if(VetorPrecisao[0]>oldprec){
	 printf("\n\n\tSistema Divergente para o metodo");//Testa convergencia
	 getch();
	 return 0;
	}
 oldprec=VetorPrecisao[0];
 k++;
 }while(MaiorElemento(VetorPrecisao)> precisao);
 return 1;
 }
 void ZeraVetor(float vetor[MAX]){
 int i;
 for(i=0;i<MAX;i++)
 vetor[i]=0;
 }
 float MaiorElemento(float vetor[MAX]){
 int i;
 float maior=vetor[0];
 for(i=1;i<MAX;i++)
 {
 if(vetor[i]>maior)
	 maior=vetor[i];
 }
 return maior;
 }
C�lculo Num�rico/Rotina para Jacobi.zip
Jacobi.c
#include <stdio.h>
#include <conio.h>
#include <math.h>
main(void)
{
 float maior_erro,precisao,aux,D[10][10];
 float I[10][10],C[10][10],coef[10][10],res[10],x[10],erro[10];
 int i,j,k,n,l,m;
 clrscr();
 printf("\n\tDigite a precisao:");
 scanf("%f",&precisao);
 printf("\n\tDigite o numero de variaveis:");
 scanf("%d",&n);
 n=n-1;
 for(i=0;i<=n;i++){
 printf("\n\tCoeficientes da linha %d:\n",i+1);
 for(j=0;j<=n;j++){
	 printf("\n\tDigite o coeficiente de x%d:",j+1);
	 scanf("%f",&coef[i][j]);
 }
 printf("\n\tTermo independente:");
 scanf("%f",&res[i]);
 }
 k=0;
 for(i=0;i<=n;i++){
 for(j=0;j<=n;j++){
	 if(i==j){
	 I[i][j]=1;
	 D[i][j]=1/coef[i][j];
	 }
	 else{
	 I[i][j]=0;
	 D[i][j]=0;
	 }
	 }
 }
	for(l=0;l<=n;l++){
		 printf("\n");
		 for(m=0;m<=n;m++)
		 printf(" %f",D[l][m]);
		 }getche();
	 for(l=0;l<=n;l++){
	 for(m=0;m<=n;m++){
		 C[l][m]=0;
		 for(k=0;k<=n;k++){
		 C[l][m] =D[l][k]*coef[k][m]+C[l][m];
		 }
		 C[l][m]=I[l][m]-C[l][m];
	 }
	 } for(l=0;l<=n;l++){
		 printf("\n");
		 for(m=0;m<=n;m++)
		 printf(" %f",C[l][m]);
		 }getche();
 do{
 for(i=0;i<=n;i++){
	 x[i]=0;
	 for(l=0;l<=n;l++)
	 x[i]=C[i][l]*x[l]+x[i];
 }
 for(i=0;i<=n;i++)
	 x[i]=res[i]/coef[i][i]+x[i];
 k++;
 for(j=0;j<=n;j++){
	 printf("\n\tx%d=%f",j+1,x[j]);
	 erro[j]=fabs(x[j]-x[j]);
 }
 for(l=0;l<=n;l++){
	 for(m=0;m<=n;m++){
	 if(erro[m]<erro[m+1]){
		 aux=erro[m];
		 erro[m]=erro[m+1];
		 erro[m+1]=aux;
		}
	 }
	 }
 maior_erro=erro[0];
 }while(maior_erro>=precisao);
 for(j=0;j<=n;j++)
	 printf("\n\tx=%f",x[j]); getche();
 return 0;
}
C�lculo Num�rico/Rotina para Lagrange.zip
Lagran.cpp
#include <iostream.h>
#include <conio.h>
#define NUM 4
void main(void)
 {
 // float f[NUM+1]={117.3,86.132,50.271,15.388,-13.236,-31.459,-36.914,-29.482};
 // float x[NUM+1]={.3,.5,.7,.9,1.1,1.3,1.5,1.7};
 // float f[NUM+1]={86.132,50.271,15.388,-13.236,-31.459};
 // float x[NUM+1]={.5,.7,.9,1.1,1.3};
 float f[NUM+1],x[NUM+1];
 float L[NUM+1],aux,fx,soma;
 int i,j;
 for(i=0;i<=NUM;i++){
 cout << "digite f:" ;
 cin >> f[i] ;
 cout << endl;
 }
for(i=0;i<=NUM;i++){
 cout << "digite x:" ;
 cin >> x[i] ;
 cout << endl;
 }
 cout << " Digite o fx:";
 cin >> fx;
 for(i=0;i<=NUM;i++){
 aux=1;
 for(j=0;j<=NUM;j++){
	if(j!=i)
	 aux=aux*(fx-f[j]);
	}
 for(j=0;j<=NUM;j++){
	if(j!=i)
	 aux=aux/(f[i]-f[j]);
	}
 L[i]=aux;
 }
 clrscr();
 soma=0;
 for(i=0;i<=NUM;i++){
 soma=soma+x[i]*L[i];
 }
 for(i=0;i<=NUM;i++){
 cout << "L[" << i << "]: " << L[i] << endl;
 }
 cout << "Soma:" << soma;
 getche();
 }
C�lculo Num�rico/Unidade 1- Eq. Lineares.pdf
 1 
11 
RREESSOOLLUUÇÇÃÃOO DDEE 
EEQQUUAAÇÇÕÕEESS NNÃÃOO LLIINNEEAARREESS 
Como o próprio nome diz, este é um curso de cálculo numérico. Mas o que vem a ser 
isso? Sem muito rigor, se pode dizer que este é um curso para aprender a resolver 
problemas manipulando números. Com um pouco mais de rigor se acrescentaria que 
essa manipulação de números deve ser de maneira sistemática e eficiente. O objetivo 
é aprender a resolver problemas matemáticos através da aplicação de métodos 
numéricos, ou seja, de técnicas que envolvem apenas operações aritméticas. Embora 
haja muitas classes de métodos numéricos, todos têm uma característica em comum: 
Envolvem invariavelmente uma grande quantidade de cálculos aritméticos tediosos. 
 Com o desenvolvimento de computadores digitais eficientes e cada vez mais 
rápidos, o papel dos métodos numéricos na resolução de problemas de engenharia 
aumentou tanto nas últimas décadas que se tornaram praticamente absolutos. 
 Embora a variedade de linguagens de programação seja grande e cresça a cada 
dia, Fortran continua sendo a mais apropriada para cálculo numérico. Neste curso, 
será utilizada a linguagem Fortran 90, que embora tenha sido lançada como uma 
nova versão do Fortran1 é de fato uma linguagem absolutamente nova, concebida de 
acordo com os atuais conceitos de engenharia de software. O Fortran 90 manteve a 
eficiência computacional, que sempre foi o compromisso do Fortran: Rotinas de 
cálculo são mais eficientes e mais fáceis de implementar em Fortran 90 do que 
noutras linguagens. 
 Com a melhoria constante dos recursos computacionais, o tamanho e a 
complexidade dos problemas cuja solução torna-se viável cresce vertiginosamente. 
 
1 Do inglês FORmula TRANslation. Fortran foi a primeira linguagem de computador. Lançada em 1958 para 
codificar rotinas de cálculo eficientes, evolui ao longo dos anos. Até cheagar ao Fortran 90/95 de hoje, 
apareceram várias versões, sendo as mais notáveis: Fortran 66, Fortran IV, Fortran 77, WatFor e WatFiv. 
©
 2
00
0 
by
 B
en
em
ar
 A
le
nc
ar
 d
e 
So
uz
a 
 2 
Por exemplo, para projetar os circuitos integrados em extra-alta escala de hoje, os 
engenheiros precisam resolver simultaneamente equações com dezenas de milhões 
de variáveis. Em engenharia de alta tensão e de sistemas de potência também há 
problemas assim. Por exemplo, resolver os problemas de cálculo de campos 
eletromagnéticos em alta tensão empregando o método dos elementos finitos, 
também exige máquinas de alto desempenho e sobretudo bom conhecimento de 
cálculo numérico e de técnicas de programação. Para conseguir esta habilidade toda 
há motivo de sobra, mas precisa tempo e dedicação e antes de tudo precisa começar. 
Este curso de cálculo numérico tem justamente como objetivo, começar. 
1. Começando com um problema simples 
A capacidade de produção de uma pequena fábrica de queijo é função do tempo e 
pode ser aproximada por: 
 CBtAtp += )sen()( , (1) 
sendo t o tempo em meses medidos a partir de hoje (t = 0). Supõe-se que eq. (1) seja 
válida para os próximos 24 meses, isto é, para t tal que 240 ≤≤t . A, B e C são 
parâmetros conhecidos. 
 Estima-se que a demanda pelos queijos produzidos cresça linearmente com o 
tempo: 
 EDttd +=)( , (2) 
também para 240 ≤≤t e D e F sendo parâmetros conhecidos. 
 Para planejar a ampliação de suas instalações, o produtor quer saber a partir de 
quando ele não poderá atender a demanda. 
 Este problema, ao qual se farão referências repetidas vezes como o problema do 
produtor, consiste em se determinar o tempo em que a demanda é igual à produção: 
 )()( tdtp = , 
 EDtCBtA +=+)sen( , 
ou ainda, 
 0)sen( =−+− ECDtBtA . (3) 
 A equação (3) é a equação do problema na chamada forma padrão (lado direito 
zero). O valor de t para o qual a equação se verifica é chamado de raiz da equação. A 
eq. (3) é um caso particular de 
 0)( =tf , (4) 
em que f é uma função não-linear. Daí a equação ser chamada de equação não linear. 
 Ao contrário das equações lineares, as não lineares nem sempre tem solução 
“exata”2. Algumas equações não lineares podem ser resolvidas mais fáceis que 
outras: são as equações polinomiais e racionais. As equações que não são dessas classes, 
como é o caso da eq. (3), são chamadas de equações transcendentais. 
 
2 Este conceito será formalizado mais tarde. 
 3 
 Da forma como foi equacionado, o problema do produtor pode ser resolvido de 
diferentes maneiras. Para facilitar o entendimento de como essas soluções são 
levadas a efeito sejam fixados os valores dos parâmetros: 
 A = 180 kg, 
 B = π/36 mês-1, 
 C = 10 kg, 
 D = 10 kg/mês, 
 E = 10 kg. 
 Se as equações polinomiais são de solução mais fácil que as transcendentais, 
como foi dito antes, por que não procurar algum polinômio que seja uma 
aproximação da função seno? Sim, porque é o seno que está determinando a 
natureza transcendental da eq. (3). Pois bem, a série de Maclaurin para o seno é: 
 !+−+−=
!7!5!3
sen
753
xxx
xx ∞≤≤∞− x 
Assim, o polinômio correspondente aos dois primeiros termos dessa série infinita é 
uma aproximação da função seno: 
 
!3
sen
3
x
xx −≅ , 
de modo que com alguma aproximação, se pode trocar a a eq. (3) pela seguinte 
equação polinomial: 
 0
6
)( 3
=−+−



− ECDtBtBtA . (5) 
 Pelo fato dos parâmetros C e E serem iguais, a equação (5) se simplifica: 
 0
6
23
=



−− ttABDAB . (6) 
 A solução não trivial da eq. (6) é 
 3
)(6
AB
DABt −= . (7) 
 Substituindo-se os valores dos parâmetros na eq. (7) se determina o valor de t = 
16,92. Isto é, a demanda será maior que a produção de queijo daqui a 
aproximadamente 17 meses. 
 A equação (7) é uma solução analítica exata da eq. (6). Pelo fato desta última ser 
apenas uma aproximação da eq. (3), é que a solução acima é apenas uma solução 
aproximada do problema. Há vários métodos numéricos que permitem resultados 
até melhores, sem necessidade de tanto artifício. Esses métodos são denominados 
iterativos, porque eles começam com uma estimativa inicial da solução e 
sistematicamente vão se aproximando da solução exata. O processo de cálculo 
termina quando se consegue uma aproximação satisfatória (em caso de sucesso) ou 
 4 
quando um número máximo especificado de iterações for alcançado. Mas o que 
significa uma “aproximação satisfatória”? Depende da natureza do problema, no 
caso do problema do produtor, uma tolerância de 0,1 é suficiente. Em problemas 
típicos de engenharia, a tolerância é da ordem de 10-3 a 10-5 e em problemas 
científicos mais sofisticados a tolerância geralmente é da ordem de 10-10 ou menor. 
2. O método da bisseção 
Um dos métodos de solução de equação não linear mais antigos, embora usado até 
hoje, é o método da bisseção. Baseia-se no fato de que o zero de uma função contínua 
está num intervalo cujos extremos são tais que os valores da função nesses pontos 
sejam
de sinais trocados, como se pode vê na fig. 1. Assim, dados: 
 Uma função contínua f ; 
 Dois pontos, t1 e t2, do domínio dessa função, tais que t1 < t2; 
 Um número máximo de iteração, n; 
 Uma tolerância τ; 
 O algoritmo3 do método da bisseção é o seguinte: 
1. Calcule f(t1) e f(t2); 
2. Teste f(t1) f(t2) < 0, se for verdadeiro vá para o passo 3, senão pare. 
3. Defina o novo ponto )( 122
1
3 ttt +← 
4. Calcule f(t3) 
5. Teste f(t1) f(t3) < 0, se for verdadeiro vá para o passo 6 senão vá para 
o passo7. 
6. Faça 32 tt ← e )()( 32 tftf ← e vá para o passo 8. 
7. Faça 31 tt ← e )()( 31 tftf ← . 
8. volte para o passo 3 enquanto τ>)( 3tf e não fez isso mais de n vezes. 
Do contrário pare. 
 Na fig. 2 se tem o código de uma rotina Fortran 90 para resolver o problema do 
produtor de queijo. 
 
3 Uma seqüência de passos e opeações estabelecida de modo formal para a resolução de um problema. 
x1 
x2 
x3 
x 
f(x) 
raiz 
 
Fig. 1 Trecho da curva f(t) versus t num intervalo 
a que um zero de f pertence. 2331 xxxx = . 
 5 
program fabricaDeQueijoBissecao 
 implicit none 
 
 !especificação das variáveis e da função f. 
 real:: t,t1,t2,t3,f 
 real,parameter:: pi=3.141593 
 real,parameter:: a=180,b=pi/36,c=10,d=10,e=10 
 integer:: k 
 f(t)=a*sin(b*t)-d*t+c-e 
 
 !inicialização das abssisas dos pontos extremos iniciais. 
 t1=6 
 t2=24 
 
 !o processo iterativo de cálculo da raiz. 
 do k=1,50 
 t3=(t1+t2)/2 
 if(abs(f(t3))<0.1) then 
 write(*,*) 'A raiz',t3, 'foi encontrada em', & 
 k,' iterações.' 
 stop 
 end if 
 if(f(t1)*f(t3)<0) then 
 t2=t3 
 else 
 t1=t3 
 end if 
 end do 
 write(*,*) ' Nao foi possível encontrar a raiz em 50 iterações.' 
end program fabricaDeQueijoBissecao 
(a) 
A raiz 18.00586 foi encontrada em 10 iteracoes. 
Press any key to continue 
(b) 
Fig. 2 (a) Rotina Fortran 90 para solução do problema 
do produtor pelo método da bisseção e (b) a resposta. 
3. O método da falsa posição 
Outro método muito simples de resolução de equações não lineares é o método da 
falsa posição, também denominado de método regula falsi. Como o método da bisseção 
é um método fechado, ou seja, que necessita de partida da definição de um intervalo ao 
qual a raiz pertença. A diferença é que em vez de definir o novo ponto como a média 
aritmética das abscissas dos pontos extremos, se define como: 
 
)()(
)(
12
12
223
xfxf
xx
xfxx
−
−
−= . (8) 
 Isso corresponde à interseção da reta que passa pelos pontos extremos com o 
eixo das abscissas, como se vê na fig. 3. Daí esse método também ser denominado de 
método da interpolação linear. A diferença deste método para o anterior é apenas no 
 6 
passo 3. Como exercício, modifique o código da fig. 2, para que passe a ser baseado 
no algoritmo da falsa posição. 
4. Método de Gauss-Seidel 
Há outros métodos de solução de equações não lineares, denominados métodos 
abertos ou métodos de ponto fixo, que em vez de requererem dois valores iniciais 
exigem um só. Um deles é o método de Gauss-Seidel, que tem a seguinte fórmula de 
iteração: 
 )( )1()( −= kk xFx , max,,2,1 kk "= , (9) 
sendo k um contador de iteração, kmax um número máximo de iteração e x(0) uma 
estimativa inicial da solução. O processo iterativo termina quando se alcança o limite 
de iterações especificado ou 
 ( ) τ≤− )()( kk xxf , 
ou então 
 τ≤− − )1()( kk xx , 
sendo τ uma tolerância especificada. 
 Se a equação não linear a ser resolvida pelo método de Gauss-Seidel estiver na 
forma padrão (eq. (4)) deve ser posta na forma do ponto fixo (eq. (9)). Por exemplo, a 
equação do problema do produtor (eq. (3)) deve ser rescrita como: 
 
D
EC
Bt
D
A
t
−
+= )sen( . (10) 
 O método de Gauss-Seidel foi implementado em Fortran 90 para resolver o 
problema do produtor conforme se vê na fig. 4. 
 
x1 
x2 
x3 
x 
f(x) 
raiz 
 
Fig. 3 Trecho da curva f(t) versus t num intervalo a 
que um zero de f pertence. 
)()()( 12
12
2
32
xfxf
xx
xf
xx
−
−
=
− . 
 7 
program fabricaDeQueijoGaussSeidel 
 implicit none 
 
 !especificação das variáveis e da função f. 
 real:: t,f 
 real,parameter:: pi=3.141593 
 real,parameter:: a=180,b=pi/36,c=10,d=10,e=10 
 integer:: k 
 f(t)=a/d*sin(b*t)+(c-e)/d 
 
 !inicialização das abssisas dos pontos extremos iniciais. 
 t=9 
 
 !o processo iterativo de cálculo da raiz. 
 do k=1,50 
 t=f(t) 
 if(abs(f(t)-t)<0.1)then 
 write(*,*) 'A raiz',t, 'foi encontrada em ', & 
 k,' iteracoes.' 
 stop 
 end if 
 end do 
 write(*,*) ' Nao foi possível encontrar a raiz em 50 iterações.' 
end program fabricaDeQueijoGaussSeidel 
(a) 
A raiz 17.99607 foi encontrada em 4 iteracoes. 
Press any key to continue 
(b) 
Fig. 4 Resolução do problema do produtor pelo método 
de Gauss-Seidel. (a) A rotina Fortran 90 e (b) a saída. 
5. O método de Newton-Raphson 
Este é o concorrente direto do método de Gauss-Seidel, de convergência bem mais 
rápida, porém muito mais dependente da estimativa inicial. Enquanto o método de 
Gauss-Seidel pode demorar muito para convergir (pode precisar de várias dezenas 
de iterações) o método de Newton-Raphson não. Dada uma estimativa incial, 
converge em poucas iterações (3 ou 4) ou então não converge. 
 O método de Newton-Raphson é um método iterativo de convergência 
quadrática. Isto é, o método necessita de uma única iteração se a função é quadrática. 
Isto explica porque o método de Newton-Raphson é tão eficiente computacional-
mente quando se tem uma boa estimativa inicial. É que as funções não lineares a 
serem resolvidas normalmente são de terminação quadrática, isto é, num intervalo 
suficientemente pequeno as funções geralmente podem ser bem aproximadas por 
parábolas. 
 Uma das formas de chegar à fórmula de iteração do método de Newton-
Raphson é recorrendo-se à série de Taylor, que para função de uma única variável é: 
 8 
 !+−+−+−+=
!3
)(
!2
)()()()(
3
0
3
32
0
2
2
00
000
xx
dx
fdxx
dx
fdxx
dx
dfxfxf
xxx
, (11) 
entendendo que 
 )1(
)1(
dx
fd
dx
df
= 
e que 
 
0x
k
k
dx
fd 
é o valora da derivada de ordem k da fuanção f(x), para 0xx = . 
 Truncando-se a série infinita da eq. (11) de modo que só os dois primeiros 
termos sejam mantidos se tem: 
 )()()( 00
0
xx
dx
dfxfxf
x
−+= . (12) 
Da eq. (12) se tem a fórmula de recorrência do método de Newton-Rapson: 
 
)1(
)( )1()1()(
−
−
−
−=
kx
k
kk
dx
df
xfxx . (13) 
Note-se que para o método funcionar é preciso além da função, a sua deriva 
primeira. Algumas vezes, esta derivada primeira não há uma expressão matemática 
fechada ou esta expressão existe mais é muito complicada. De um modo ou de outro 
pode ser preciso se recorrer a derivação numérica. Isto será matéria da unidade 5 
deste curso. 
 Uma representação gráfica do método de Newton-Raphson e sua 
implementação para solução do problema do produtor são mostradas nas figs. 5 e 6 
 
x(0) x 
f(x) 
x(1) x(2) 
x(3) 
 
Fig. 5 Representação gráfica do 
método de Newton-Raphson. 
 9 
respectivamente. 
 No caso do problema do produtor se tem 
 ECDtBtAtf −+−= )sen()( . 
e
 DBtAB
dx
df
t
−= )cos( . 
6. Entradas e saídas mais flexíveis 
As rotinas Fortran apresentadas até aqui funcionem bem, mais são simples demais. 
Isto foi a propósito, mas está na hora de melhora-las
um pouco. Uma primeira coisa 
a se fazer no sentido de dotar as rotinas de mais flexibilidade é fazer com que os 
dados do problema a ser resolvidos sejam externos ao programa. Desse modo eles 
são passados para o processador no tempo de execução da rotina. Mudanças 
eventuais nos dados não implicarão modificações na rotina. Para que os dados 
possam ser fornecidos no tempo de execução a partir do teclado se usa a instrução 
read, ou read(*,*). 
program fabricaDeQueijoNewtonRaphson 
 implicit none 
 
 !especificação das variáveis e das funçõwa f e df. 
 real:: t,f,df 
 real,parameter:: pi=3.141593 
 real,parameter:: a=180,b=pi/36,c=10,d=10,e=10 
 integer:: k 
 f(t)=a*sin(b*t)-d*t+c-e 
 df(t)=a*b*cos(b*t)-d 
 
 !estimativa inicial da solucão. 
 t=12 
 
 !o processo iterativo de cálculo da raiz. 
 do k=1,10 
 t=t-f(t)/df(t) 
 if(abs(f(t))>0.1) cycle 
 write(*,*) 'A raiz',t, 'foi encontrada em ', & 
 k,' iteracoes.' 
 stop 
 end do 
 write(*,*) 'Raiz nao encontrada em 10 iterações.' 
end program fabricaDeQueijoNewtonRaphson 
(a) 
A raiz 18.00907 foi encontrada em 4 iteracoes. 
Press any key to continue 
(b) 
Fig. 6 Solução do problema do produtor pelo método 
de Newton-Raphson. (a) A rotina e (b) o resultado. 
 
 10 
 Quando a quantidade de dados é maior, torna-se inconveniente usar o teclado e 
o vídeo como dispositivos de entrada e saída. Se em vez disso os dados são mantidos 
em arquivos, eles podem ser lidos e modificados tantas vezes quanto se queira. Eles 
podem também ser impressos ou exportados para outro aplicativo, como o Word®, 
por exemplo. Freqüentemente, o resultado de um programa Fortran precisa ser 
anexado a um relatório técnico ou de iniciação científica, a um artigo a ser publicado 
em congresso ou a uma tese. 
 Para que os valores das variáveis a, b e c sejam lidos no arquivo dados.ent, por 
exemplo, e os resultados de x e y, calculados internamente, sejam gravados no 
arquivo resultados.sai se pode fazer o seguinte: 
 open(1, file=’dados.ent’,status=’old’) 
 read(1,*) a, b, c 
 x=a+b+c 
 y=a*b/c 
 open(2, file=’resultados.sai’) 
 write(2,*) x, y, z 
 Os números 1 e 2 como primeiro argumento da função open, podem ser 
quaisquer entre 1 e 99. Porém é recomendável evitar 5 e 6. Para manter a 
compatibilidade com versões antigas, read(1,5) ficou sendo o mesmo que 
read(1,*), e write(2,6) o mesmo que write(2,*). Na verdade, esses números são 
apenas chaves de endereçamento de arquivos dos quais os dados serão recebidos, ou 
para os quais serão remetidos. 
 Os arquivos de dados podem ser criados e editados com qualquer editor de 
texto, desde que não seja empregada formatação rica (padrão de processadores de 
texto como o Word®). O uso do editor do Developer Studio® não é obrigatório. Por 
exemplo, o Notepad® do Windows® é uma boa alternativa para se criar arquivos de 
dados, porque é um editor que gera apenas código ASCII. 
7. Rotinas baseadas em métodos alternativos 
Talvez já deu para perceber que em matéria de cálculo numérico e programação 
Fortran o céu é o limite. Mal começou e já se tem quatro rotinas (três foram 
apresentadas acima e uma foi proposta como exercício). Se continuar neste ritmo não 
se terá o que fazer com tanta rotina logo mais. É verdade, por isso é bom evitar ter 
tantas rotinas pequenas para fazer a mesma coisa. 
 Em vez de se ter as quatro rotinas para encontrar a raiz de uma equação, 
porque não ter uma só em que o algoritmo a ser empregado possa ser escolhido no 
tempo de execução? Claro que isso é possível e tem vantagens. Há apenas um 
pequeno problema: Dois dos métodos requerem pares de valores iniciais em torno 
da raiz procurada. Os outros só precisam de um. Uma saída para esse impasse é 
fornecer sempre um único valor aproximado da raiz. 
 Se a opção for por um dos métodos que precise de dois valores iniciais, o 
próprio computador que encontre o segundo. Na fig. 7a se vê como essa idéia 
funciona. Essa rotina é a mesma da fig. 2 acrescida de um conjunto de instruções 
encabeçado pelo linha de comentário: !procura pelo segundo ponto extremo 
inicial.. Uma vez dado um valor próximo da raiz, t1, se procura outro, t2, tal que o 
sinal de f (t2) seja contrário a do sinal de f (t1). A procura é alternada, uma vez a 
 11 
direita de t1, outra vez a esquerda. Se não se tem sucesso em 100 pares de tentativa o 
processo pára com uma mensagem na tela. 
8. Para não ter que reinventar a roda 
Que o Fortran permite criar rotinas com muita facilidade já foi dito. De fato a 
facilidade vai além: Uma vez criadas, as rotinas podem ser organizadas de modo que 
o uso e a atualização sejam simples. Consegue-se isso com as chamadas bibliotecas 
Fortran. Cada usuário pode formar suas próprias bibliotecas, mas também pode usar 
as de outros. Há inúmeras bibliotecas desenvolvidas por empresas especializadas, 
universidades e centros de pesquisas que podem ser compradas ou obtidas sem 
ônus. Uma das mais conhecidas é a IMSL®, com mais 1000 rotinas matemáticas, 
estatísticas e de serviço, todas otimizadas e testadas. 
 Se for assim, por que programar se as rotinas já estão prontas nas bibliotecas? É 
aquela velha questão: Fazer ou comprar feito? Esse dilema pode ocorrer com 
respeito a uma refeição ou a uma mesa, por exemplo. Há duas situações em que se 
pode optar por (mandar) fazer uma mesa: Quando não se encontra nenhuma que 
satisfaça plenamente no comércio ou quando se quer ganhar dinheiro com essa 
atividade. Com software é a mesma coisa. Muitas vezes, uma rotina menor, mais 
simples, elaborada com propósito específico, é muito mais apropriada. Fortran serve 
aos dois senhores: O consumidor exigente ou a fornecedor especializado. 
 Não é difícil criar e atualizar bibliotecas em Fortran, mas isso ficará para depois. 
Uma coisa de cada vez. Primeiro convém olhar na fig. 8 como se resolve um 
problema particular empregando rotina de uma biblioteca comercial, no caso a 
IMSL®. Só precisa dizer de antemão qual biblioteca específica será usada. Veja a 
segunda linha no código Fortran da fig. 8: use dfimsl. Adiante, quando a sub-rotina 
zbren for chamada, call zbren(f,errAbs,errrel,t1,t2,maxf), ela será encontrada 
naquela biblioteca que foi declarada antes com use. 
 Ao usar uma função ou sub-rotina de uma biblioteca, é preciso se submeter às 
regras estabelecidas pelo fabricante, as quais constam nos manuais (escritos ou 
eletrônicos) da biblioteca. Como exercício, se sugere que seja feita uma pesquisa 
sobre a sub-rotina zbren no manual da biblioteca IMSL®, procurando descobrir qual 
o algoritmo em que ela se baseia e o que significa cada um de seus argumentos. 
9. Alguns esclarecimentos 
Para finalizar essa primeira unidade é preciso dizer que esse texto não é suficiente, 
nem tem a intenção de ser. Muita coisa foi dita sem ser devidamente explicada. As 
informações que faltam aqui foram ou poderão ser complementas em sala de aula. 
Também há a possibilidade de obter esclarecimento em consultas ao professor, 
individuais ou em pequenos grupos. 
 Pede-se a compreensão do aluno, no sentido de ser tolerante quanto aos erros 
que devem existir nessa versão preliminar, porque não houve tempo algum para 
revisão. Como o curso começou com uma semana de atraso, essas notas de aulas 
tiveram que ser feitas em apenas dois ou três dias. Correções, críticas e sugestões 
são bem-vindas. 
 12 
program fabricaDeQueijoBissecaoUmSo 
 implicit none 
 
 !especificação das variáveis e da função f. 
 real:: t,t1,y1,te,td,t2,t3,f 
 real,parameter:: pi=3.141593 
 real,parameter:: a=180,b=pi/36,c=10,d=10,e=10 
 integer:: k 
 f(t)=a*sin(b*t)-d*t+c-e 
 
 !inicialização um dos pontos extremos iniciais. 
 t1=6 
 y1=f(t1) 
 
 !procura pelo segundo ponto extremo inicial. 
 te=t1 
 td=t1 
 do k=1,100 
 td=1.1*td+1e-3
if(f(td)*y1<0) then 
 t2=td 
 write(*,*) 'Segundo ponto extremo (',t2,') encontrado em', & 
 k,' iteracoes.' 
 exit 
 end if 
 te=0.9*te-1e-3 
 if(f(te)*y1<0) then 
 t2=te 
 write(*,*) 'Segundo ponto extremo (',te,') encontrado em', & 
 k,' iteracoes.' 
 exit 
 end if 
 end do 
 if(k>100) stop ‘Segundo extremo nao encontrado em 200 tentativas.' 
 
 !o processo iterativo de cálculo da raiz. 
 do k=1,50 
 t3=(t1+t2)/2 
 if(abs(f(t3))<0.1) then 
 write(*,*) 'A raiz',t3, 'foi encontrada em ', & 
 k,' iteracoes.' 
 stop 
 end if 
 if(f(t1)*f(t3)<0) then 
 t2=t3 
 else 
 t1=t3 
 end if 
 end do 
 write(*,*) ' Nao foi possível encontrar a raiz em 50 iterações.' 
end program fabricaDeQueijoBissecaoUmSo 
(a) 
Segundo ponto extremo ( 18.85196 ) encontrado em 12 iteracoes. 
A raiz 17.99851 foi encontrada em 8 iteracoes. 
Press any key to continue 
 (b) 
Fig. 7 Fechamento automático de um intervalo 
que contenha a raiz. (a) A rotina e (b) o resultado. 
 13 
program fabricaDeQueijoBissecaoImsl 
 use dfimsl 
 implicit none 
 external f 
 
 !especificação das variáveis e da função f. 
 real:: t,t1,t2,t3,f 
 real:: errRel,errAbs 
 integer:: maxf 
 
 errRel=0 
 errAbs=0.1 
 maxf=100 
 
 !inicialização das abssisas dos pontos extremos iniciais. 
 t1=6 
 t2=24 
 
 !cálculo da raiz. 
 call zbren(f,errAbs,errrel,t1,t2,maxf) !esta sub-rotina é da 
 !biblioteca IMSL. 
 write(*,*) 'A raiz encontrada foi',t2 
end program fabricaDeQueijoBissecaoImsl 
 
function f(t) 
 implicit none 
 real:: t,f 
 real,parameter:: pi=3.141593 
 real,parameter:: a=180,b=pi/36,c=10,d=10,e=10 
 f=a*sin(b*t)-d*t+c-e 
 return 
end function f 
(a) 
A raiz encontrada foi 17.99957 
Press any key to continue 
(b) 
Fig. 8 (a) Uma rotina que utiliza a biblioteca IMSL e (b) o resultado.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?