Você está na página 1de 53

LABORAT

ORIO DE MATEM ATICA COMPUTACIONAL SCILAB


Luiza Amalia Pinto Cant ao
luiza@sorocaba.unesp.br
Sum ario
1 Introduc ao ao Ambiente Scilab 2
1.1 O Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Vari aveis Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Arquivos *.sce de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2

Algebra Linear Num erica 7
2.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Matrizes Padr ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Acesso aos elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Matem atica Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Uso de Scilab na Soluc ao de Sistemas Lineares: M etodos Diretos . . . . . . . . . . . . . . . . . 14
2.6 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Projeto de Programac ao 17
3.1 Operadores Relacionais e L ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.2 Operadores L ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 O Loop for e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Estrutura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Denic ao de Func oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Gr acos no Scilab 27
4.1 A Janela Gr aca do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 Gr acos Bi-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1 Outros Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 Ajuste de Curvas em Ambiente Scilab 35
5.1 Denindo a Func ao de Ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Spline C ubicas em Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6 Gr acos Tri-Dimensionais 43
6.1 Gr acos Tri-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.1.1 Gr acos 3-D Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2 Detalhes da Func ao plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.1 Func ao eval3d e eval3dp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.2 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.3 Outro Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7 Exerccios Adicionais 49
Refer encias Bibliogr acas 52
1
CAP

ITULO 1
Introduc ao ao Ambiente Scilab
1.1 O Ambiente Scilab
OScilab e umambiente utilizado no desenvolvimento de programas para a resoluc ao de problemas num ericos.
Vamos conhecer um pouco mais sobre o seu ambiente de trabalho.
Tendo iniciado o programa (isto depende do sistema operacional), voc e ver a mensagens do fabricante e um
pequeno prompt de comando aguardando alguma ac ao sua:
-----------------------------------------------
scilab-5.3.0
Consortium Scilab (DIGITEO)
Copyright (c) 1989-2010 (INRIA)
Copyright (c) 1989-2007 (ENPC)
------------------------------------------------
Startup execution:
loading initial environment
-->
A echa --> indica que o Scilab est a pronto para receber comandos e o cursor e o prompt inicial. Na janela
do Scilab h a um menu horizontal com seis opc oes: File, Edit, Preferences, Control, Applications e ?. Utilizando
o mouse escolha uma das opc oes.
File possui oito sub-opc oes (apresentaremos as quatro mais importantes):
Execute: executa o conte udo de arquivos (roda o programa implementado).
Open a le: Abre o arquivo do seu programa no editor de texto do Scilab.
Change current directory: Muda o diret orio em que o Scilab foi aberto para o diret orio do arquivo
(programa).
Quit: permite sair do ambiente Scilab de forma natural.
Vari aveis Especiais CAP

ITULO 1. INTRODUC

AO AO AMBIENTE SCILAB
Edit comandos semelhantes ao editor de texto do Microsoft Ofce ou Open Ofce (cut, copy, paste,
select all);
Preferences o comando mais importante desta opc ao e o Clear Console que limpa a janela de execuc ao
do ambiente Scilab.
Control possui tr es sub-opc oes cuja utilidade dos dois primeiros itens pode ser observada na seq u encia
de comandos abaixo:
--> // pressione Ctrl-c e <enter>
-1-> // leva ao prompt de 1o. nivel
-1-> // pressione Ctrl-c e <enter>
-2-> // leva ao prompt de 2o. nivel
-2->resume // retorna ao prompt de 1o. nivel
-1->resume // retorna ao prompt inicial
--> // Ctrl-c e <enter>
-1-> // Ctrl-c e <enter>
-2->abort // retorna ao prompt inicial
-->
Interrupt interrompe a execuc ao de um programa.
Applications aplicativos do ambiente Scilab:
SciNotes abre um editor de texto pr oprio para programac ao em ambiente Scilab.
? informac oes e ajuda sobre o ambiente Scilab. Esta possui quatro sub-opc oes:
Scilab Help: informac oes sobre os comandos do ambiente Scilab.
Scilab Demonstration: Demonstrac ao de alguns comandos deste ambiente de trabalho.
Web Links: sites relacionados ao Scilab.
About Scilab: mostra a licenca de uso do programa.
Ainda na janela do Scilab h a alguns icones abaixo do menu descrito acima. Estes icones s ao atalhos para
as func oes mais usadas no menu acima.
1.2 Variaveis Especiais
Algumas vari aveis assumem valores pr e-denidos no Scilab e podem ser vistas usando o comando who.
--> who
Your variables are:
home modules_managerlib helptoolslib scinoteslib
xcoslib matiolib atomsguilib atomslib
parameterslib simulated_annealinglib genetic_algorithmslib umfpacklib
fft scicos_autolib scicos_utilslib spreadsheetlib
demo_toolslib development_toolslib soundlib texmacslib
tclscilib m2scilib maple2scilablib compatibility_functilib
statisticslib timelib stringlib special_functionslib
3
Vari aveis Especiais CAP

ITULO 1. INTRODUC

AO AO AMBIENTE SCILAB
sparselib signal_processinglib %z %s
polynomialslib overloadinglib optimsimplexlib optimbaselib
neldermeadlib optimizationlib linear_algebralib jvmlib
output_streamlib iolib interpolationlib integerlib
dynamic_linklib uitreelib guilib data_structureslib
cacsdlib graphic_exportlib datatipslib graphicslib
fileiolib functionslib elementary_functionslib differential_equationlib
corelib PWD %tk %pvm
MSDOS %F %T %nan
%inf SCI SCIHOME TMPDIR
%gui %fftw $ %t
%f %eps %io %i
%e %pi
using 7845 elements out of 5000000.
and 78 variables out of 9231.
Your global variables are:
%modalWarning demolist %driverName %exportFileName
%toolboxes %toolboxes_dir
using 623 elements out of 180001.
and 6 variables out of 767.
-->
Vejamos o signicado das vari avies mais recorrentes:
Vari avel O que signica Vari avel O que signica
%i Valor de
p
(1) %pi = 3, 1415926...
%e Constante de Euler e = 2, 7182818... %eps precis ao da m aquina no qual o Scilab est a instalado.
%inf Innito %nan Not a number
Para saber em qual diret orio o Scilab foi instalado, use a vari avel SCI e para saber em qual diret orio o
Scilab foi aberto, use PWD. O resultado depende do sistema operacional em que o Scilab foi instalado.
-->SCI // Diretorio onde o Scilab foi instalado
SCI =
/home/luiza/scilab-5.0.3/share/scilab
-->PWD // Diretorio onde o Scilab foi lancado
PWD =
/home/luiza
-->home // Mesmo valor da variavel PWD
home =
4
Arquivos *.sce de Comandos CAP

ITULO 1. INTRODUC

AO AO AMBIENTE SCILAB
/home/luiza
-->
1.3 Arquivos *.sce de Comandos
Para problemas simples, e mais r apido e eciente introduzir seus comandos no prompt do Scilab. Mas,
se o n umero de comandos e grande, ou se voc e deseja mudar o valor de uma ou mais vari aveis e re-executar
alguns comandos, pode ser trabalhoso e/ou tedioso introduzir os comandos no prompt. O Scilab apresenta
uma soluc ao simples para esse problema: voc e pode colocar os comandos do Scilab em um arquivo de texto
simples (pode-se fazer uso do Editor do Scilab) e depois abrir este arquivo e execut a-lo no Scilab.
Atenc ao: no Scilab, ponto-e-vrgula no nal de um comando inibe a apresentac ao de seu resultado e,
qualquer caracter ap os o uso de // e ignorado pelo Scilab pois este e interpretado como coment ario. Tamb em
e importante salientar que os coment arios (e os nomes das vari aveis e func oes utilizados no Scilab) N

AO
devem ter qualquer tipo de acentuac ao.
Abra o Editor de texto SciPad atrav es do menu do Scilab e digite os comandos abaixo.
// Erro e Estabilidade
// LMC -- 1o. programa
x = input(Entre com o valor de x); // Entrada do valor de x via teclado!
S = 0; // Variavel que recebera o valor somatorio.
format(v, 25); S // no. de elementos na representacao de S
// v: formato padrao de uma variaval numerica
for (i = 1:30000) // somatorio de 1 ate 30000
S = S + x;
end // Final do for
S
Salve este arquivo no diret orio LMC que foi criado. Para isso, clique com o mouse no menu File e selecione
Save as. Atribua o nome soma ex4.sce e volte ao ambiente Scilab executando os passos abaixo:
-->pwd // verifique se esta no diretorio onde gravou o 1oTeste.sce
-->exec(soma.sce) // executa o programa 1oTeste.sce
O comando exec(nome-do-arquivo.sce) executa o programa gerado.
Execute o programa acima para x = 0.5 e x = 0.11 !
Tarefa: Desenvolva um programa em Scilab para calcular (

3) usando o comando format com 100


dgitos.
Um outro programinha para se testar com uma estrutura diferente da apresentada abaixo, e para calcular o
n umero de faltas possveis no semestre (faltas.sce)!
// Primeiro teste de LMC -- Controle de presenca
// Uso de uma Regra de Tres Simples para este calculo
5
Arquivos *.sce de Comandos CAP

ITULO 1. INTRODUC

AO AO AMBIENTE SCILAB
a = 2; // a = aulas por semana
b = 15; // b = semanas de aulas no semestre
c = a*b; // c = horas-aulas do semestre
x = (30*c)/100 // 30 --- porcentagem de faltas permitidas
// 100 -- porcentagem total de aulas
// x ---- no. de aulas que o aluno pode faltar
y = int(x/2) // y ---- no. de dias que o aluno pode faltar
// int(.) no. inteiro de dias (em cada dia de aula sao dadas duas aulas)
Teste o programa acima para diferentes valores de a (outras disciplinas) !!!! Por exemplo, para a disciplina
de C alculo Num erico e Computacional.
6
CAP

ITULO 2

Algebra Linear Num erica


Vamos comecar com as estruturas sobre as quais toda a losoa Scilab (e linguagens num ericas) est a
baseada.
2.1 Vetores
Para criar um vetor no Scilab e muito simples. Apenas deve ser tomado cuidado com a diferenciac ao entre
vetores linha e vetores coluna. Experimente:
--->v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
v
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Voc e acaba de criar um vetor linha! Neste caso, as vrgulas s ao desnecess arias; poderamos simplesmente
usar
--->v = [1 2 3 4 5 6 7 8 9 10]
v
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
que o resultado seria o mesmo.
Para os vetores coluna temos tr es opc oes: cri a-los diretamente, usar o operador de transposic ao, (ap ostrofo)
ou simplesmente pular uma linha para cada elemento. Acompanhe:
--->v = [1; 2; 3]
v
1.
2.
3.
ou ainda
-->v = [1 2 3]
v
1.
2.
3.
Vetores CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
e nalmente
-->v = [1
-->2
-->3]
v
1.
2.
3.
Note que neste ultimo caso, o Scilab cou esperando que se completasse o vetor com ] .
Um jeito pr atico de criar vetores igualmente espacados e usando o operador : . Observe:
-->u =1:10
u
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ou ainda
-->u = 0:0.1:1
u
column 1 to 10
0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
column 11
1.
onde podemos especicar umincremento (no caso, 0.1). Observe que, neste caso temos: u = inicio:incremento:final
ou u = inicio:decremento:final (teste u = 1:-0.1:0).
Uma outra maneira de construir um vetor linha e usando a func ao linspace cujos elementos desta func ao
s ao:
linspace( primeiro_valor, ultimo_valor, numero_de_elementos )
Se o numero de elementos e omitido, a func ao gera automanticamente 100 elementos.
--> x = linspace( 0, %pi)
--> x = linspace( 0, %pi, 11)
Veja que, a notac ao : permite especicar o intervalo entre os pontos, mas n ao o n umero de pontos. Por
outro lado, a func ao linspace permite especicar o n umero de elementos mas n ao o intervalo entre os pontos.
Comandos Descric ao
x = inicio:fim Cria um vetor linha comecando em inicio, incrementa em um
e p ara em fim (ou antes).
x = inicio:incremento:fim Cria um vetor linha comecando em inicio, incrementa em incremento
e p ara em fim (ou antes).
x = linspace(inicio,fim,n) Cria um vetor linha, com espacamento linear, comecando em inicio
e terminando em fim com n elementos.
x = linspace(inicio,fim) Cria um vetor linha, com espacamento linear, comecando em inicio
e terminando em fim com cem (100) elementos.
Tabela 2.1: Comandos b asicos para a construc ao de vetores.
8
Matrizes CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
2.2 Matrizes
O caso matricial e igualmente simples. Siga o exemplo:
-->A = [1 2 3 4
-->5 6 7 8
-->9 10 11 12]
A
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
-->size(A)
ans
3. 4.
-->
onde acabamos de criar uma matriz 3 4. A func ao size(.) mostra o tamanho da sua matriz ou vetor.
Note que podemos utilizar o operador : em combinac ao com o que foi visto at e agora. Tente o comando
--> A = [1:5, 9:-1:5; 0:0.25:1, 1:-0.25:0]
Interprete o que aconteceu!
2.2.1 Matrizes Padrao
Dada a utilidade deste tipo de matrizes, o Scilab cont em func oes para a criac ao de matrizes padr ao. Esse
tipo de matriz inclui aqueles cujos elementos s ao todos iguais a zero ou a um, matriz identidade, matrizes de
n umeros aleat orios, matrizes diagonais e cujos elementos s ao uma constante dada.
-->A = ones(3,2) // ones(.) gera uma matriz com todos os elementos iguais a 1
A
1. 1.
1. 1.
1. 1.
-->B = zeros(2,6) // zeros (.) gera matrizes com todos os elementos iguais a 0
B
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
-->C = eye(3,3) // eye(.) gera uma matriz identidade
C
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->D = eye(2,4)
D
1. 0. 0. 0.
9
Matrizes CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
0. 1. 0. 0.
-->E = eye(4,2)
E
1. 0.
0. 1.
0. 0.
0. 0.
-->A = rand(5,5)
A
0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361
O comando rand(m, n) cria uma matriz m n com entradas aleat orias no
intervalo [0, 1).
-->a = 1:4 // Comece com um vetor simples
a
1. 2. 3. 4.
-->diag(a) // diag(.) coloca os elementos na diagonal principal
ans
1. 0. 0. 0.
0. 2. 0. 0.
0. 0. 3. 0.
0. 0. 0. 4.
-->diag(a,1) // Coloca os elementos uma posicao acima da diagonal
ans
0. 1. 0. 0. 0.
0. 0. 2. 0. 0.
0. 0. 0. 3. 0.
0. 0. 0. 0. 4.
0. 0. 0. 0. 0.
-->diag(a,-2) // Coloca os elementos duas posicoes abaixo da diagonal
ans
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
1. 0. 0. 0. 0. 0.
0. 2. 0. 0. 0. 0.
0. 0. 3. 0. 0. 0.
0. 0. 0. 4. 0. 0.
10
Acesso aos elementos CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
A func ao diag(.) cria matrizes diagonais em que um vetor determinado pode ser colocado em qualquer
posic ao paralela ` a diagonal principal ou na pr opria diagonal principal.
Com essas matrizes padr ao, h a v arias formas de se criar uma matriz em que todos os elementos apresentam
o mesmo valor. Execute os pr oximos comandos e verique o que acontece!
--> d = %e; // Escolha do numero e para este exemplo
--> d*ones(3,4) // Metodo mais lento (multiplicacao de vetor por escalar)
--> d+zeros(3,4) // Metodo mais lento (adicao de escalar a vetor)
--> d(ones(3,4)) // Metodo mais rapido (enderecamento vetorial)
Func ao Prop osito
zeros(n) Gera uma matriz n n com elementos iguais a zero.
zeros(n,m) Gera uma matriz n m com elementos iguais a zero.
one(n) Gera uma matriz n n com elementos iguais a um.
one(n,m) Gera uma matriz n m com elementos iguais a um.
eye(n) Gera uma matriz identidade n n.
eye(n,m) Gera uma matriz identidade n m.
diag(v) Gera uma matriz cujos elementos do vetor v cam na diagonal principal.
rand(n,m) Gera uma matriz n m com valores aleat orios em (0, 1);
size(.) Retorna dois valores, especicando o n umero de linhas e o de colunas de uma matriz ou vetor em (.).
Tabela 2.2: Func oes Scilab para gerar matrizes padr ao.
2.3 Acesso aos elementos
O Scilab d a ao usu ario v arios modos de acesso aos vetores e matrizes. O mais simples deles e sim-
plesmente digitando o nome do vetor/matriz criado. Caso voc e n ao se lembre do que criou, use o comando
whos.
H a duas formas de usar o comando whos:
whos(): Lista todas as func oes do Scilab, apresentando o nome da func ao, o tipo (constante, vari avel,
booleana, e assim por diante), o tamanho e os bytes usado para a func ao apresentada.
whos: Neste caso e preciso especicar o tipo de func ao que voc e deseja vericar (veremos um exemplo
no nal desta sec ao).
--> A
A
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
Para acessar a matriz um elemento por vez, use par enteses:
--> v = [7; 19; 21];
-->v(2)
ans
19.
-->A(2,3)
ans
7.
-->A(3,2)
11
Matem atica Matricial CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
ans
10.
-->A(5,7)
!--error 21
invalid index
--> whos -type constant
Name Type Size Bytes
ans constant 1 by 1 24
v constant 3 by 1 40
A constant 3 by 4 112
%scicos_display_mode constant 1 by 1 24
%scicos_contrib constant 0 by 0 16
%nan constant 1 by 1 24
%inf constant 1 by 1 24
%eps constant 1 by 1 24
%io constant 1 by 2 32
%i constant 1 by 1 32
-->
Note que se voc e tenta acessar elementos que n ao existem, o programa reclama.
Por em, a forma mais poderosa de acesso (e mais r apida) e usando o conceito de sub-matrizes. Para
usarmos partes de matrizes em operac oes, usamos novamente o operador : . Suponha que criamos uma
matriz do tipo:
-->A = rand(6,6)
A
0.0437334 0.7783129 0.8415518 0.5618661 0.3873779 0.2615761
0.4818509 0.2119030 0.4062025 0.5896177 0.9222899 0.4993494
0.2639556 0.1121355 0.4094825 0.6853980 0.9488184 0.2638578
0.4148104 0.6856896 0.8784126 0.8906225 0.3435337 0.5253563
0.2806498 0.1531217 0.1138360 0.5042213 0.3760119 0.5376230
0.1280058 0.6970851 0.1998338 0.3493615 0.7340941 0.1199926
Podemos trabalhar em partes isoladas da matriz. Experimente:
-->A(2:4, 3:5)
Descreva o que ocorreu.
Naturalmente este processo pode ser usado para atribuic ao de matrizes (ou vetores). Por em, antes de
executar, tente prever o resultado.
-->A(3, 3:5) = [1 2 3]
2.4 Matematica Matricial
Para executar operac oes alg ebricas matriciais, seguiremos os seguintes exemplos:
12
Matem atica Matricial CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
Comandos Descric ao
A (r,c) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetor
de ndice r e cujas colunas s ao denidas pelo vetor c.
A (r,:) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetor
de ndice r e inclui todas as colunas.
A (:,c) Fornece a sub-matriz A cujas colunas s ao denidas pelo vetor
de ndice c e inclui todas as linhas.
A (:) Fornece todos os elementos de A em um vetor coluna, coluna a coluna.
Tabela 2.3: Refer encia a sub-matrizes de uma matriz.
--> A = rand(5, 3); //Exemplos de operacoes vetoriais/matriciais
--> B = rand(3, 5);
--> v1 = rand(5, 1);
--> v2 = rand(1, 5);
// soma, subtracao, multiplicacao e transposicao
--> C = A*A+B*B
--> D = A*A*v1(1:3)
--> E = v1 * v2
// operacoes elemento a elemento
--> v3 = v1 + v2
--> v4 = v1 .* v2
--> v5 = v2 .^ 2
--> F = A .* B
// sub-matrizes!
--> G = C(2:4, 2:4) * v2(2:4)
--> C(1:3, 2) = G
Analise os resultados e certique-se que entendeu o enderecamento das matrizes e vetores! Isto e muito
importante!!!
Observe a tabela 2.4.
Operac oes com elementos Dados representativos
de vetores e matrizes A = [a
1
a
2
. . . a
n
]
dados B = [b
1
b
2
. . . b
n
], c R
Adic ao a escalar A + c = [a
1
+ c a
2
+ c . . . a
n
+ c]
Subtrac ao por escalar Ac = [a
1
c a
2
c . . . a
n
c]
Multiplicac ao por escalar A c = [a
1
c a
2
c . . . a
n
c]
Divisc ao por escalar A/c = [a
1
/c a
2
/c . . . a
n
/c]
Soma de vetores A + B = [a
1
+ b
1
a
2
+ b
2
. . . a
n
+ b
n
]
Multiplicac ao de vetores A. B = [a
1
. b
1
a
2
. b
2
. . . a
n
. b
n
]
Divis ao de vetores pela direita A./B = [a
1
./b
1
a
2
./b
2
. . . a
n
./b
n
]
Divis ao de vetores pela esquerda B.\A = [a
1
./b
1
a
2
./b
2
. . . a
n
./b
n
]
Potenciac ao de vetores A.c = [a
1
c a
2
c . . . a
n
c]
c.A = [ca
1
ca
2
. . . ca
n
]
A.B = [a
1
b
1
a
2
b
2
. . . a
n
b
n
]
Tabela 2.4: Operac oes b asicas aplicadas a elementos de vetores e matrizes.
Tomando
A =
_
1 2 3
3 2 1
_
, B =
_
4 5 6
6 5 4
_
, e c = 2
13
Uso de Scilab na Soluc ao de Sistemas Lineares: M etodos Diretos CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
execute as operac oes apresentadas na Tabela 2.4.
2.5 Uso de Scilab na Solucao de Sistemas Lineares: Metodos
Diretos
Considere o sistema Ax = b, associado ` a matriz A e ao vetor b, denidos como segue:
--> A = [ 3 -2 2; 1 1 1; 2 1 -1 ];
--> b = [ -3 -4 -3 ]
Apresentamos a seguir algumas func oes denidas no Scilab relacionados ` a Soluc ao de Sistemas Lineares
M etodos Diretos. Mais informac oes podem ser obtidas pelo recurso help seguido da func ao de interesse (por
exemplo, help lu mostra detalhes sobre o c alculo da decomposic ao LU de uma matriz quadrada).
Para resolver o sistema acima, temos algumas maneiras:
1. Usando o operador \ : Este operador e interno ao Scilab e funciona de forma muito simples:
--> x = A \ b // Calcula a solucao do sistema Ax = b (se existir!).
2. Outra forma e usando a Decomposic ao LU. Para obter a decomposic ao A = LU, e resolver o sistema a
partir dela use:
-->[ L, U ] = lu(A)
--> y = L \ b
--> x = U \ y
Note que o Scilab n ao confundiu U com u, o que indica que o programa e sensvel ao caso (mai usculas
e min usculas). Repare tamb em na forma como o Scilab retornou dois argumentos (L e U) da func ao,
o que e uma caracterstica incomum em linguagens de programac ao, por em corriqueira em linguagem
num erica, como o Scilab. Tamb em poderamos ter feito a operac ao de forma direta:
--> x = U \ ( L \ b )
Ou ainda:
--> [ L, U, P ] = lu(A) // Calcula a decomposicao LU de A
Neste caso P e a matriz de permutac ao do pivoteamento usado no c alculo dos fatores L e U. A matriz P
multiplicada por A tem o efeito das trocas de linhas efetuadas quando o pivoteamento e realizado.
3. C alculo da func ao inversa da matriz A: Um Sistema Linear tem soluc ao unica se a matriz A for inversvel.
Uma maneira de testar esta condic ao e usando a func ao inv(.) do Scilab:
--> IA = inv(A)
--> IA * A
--> x = IA * b
4. Uma outra func ao do Scilab interessante e a que calcula o valor do determinante de uma matriz (det(.)):
-->d = det(A)
Pergunta: Qual a relac ao existente entre det(A) e det(U) ?
14
Exerccios CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
2.6 Exerccios
1. Digite as seguintes matrizes no ambiente
Scilab:
A =
_
_
4 3
2 1
0 6
_
_
, B =
_
_
1 2 4
2 4 1
0 1 5
_
_
, C =
_
_
5
8
7
_
_
(a) Mostre somente a segunda coluna de A;
(b) Mostre o elemento (3, 2) de A;
(c) Mostre somente a terceira coluna de B;
(d) Mostre as duas primeiras colunas de B;
(e) Mostre as duas ultimas linhas de A;
2. Considere as matrizes A, B e o vetor C do
exerccio anterior. Dena uma nova matriz D
com o mesmo conte udo de A. Faca a mudanca
ou execute a operac ao - solicitada:
(a) Atribua ao elemento (1, 1) de D o valor 12;
(b) Atribua ao elemento (3, 2) de D o valor 8;
(c) Execute o comando E = [D C]. Descreva o
conte udo de E em termos de D e C;
(d) Execute o comando F = [D B]. Descreva o
conte udo de F em termos de D e B;
(e) Execute o comando G = [E; B]. Descreva
o conte udo de G em termos de E e B;
3. Para criar um vetor coluna no Scilab digita-se
da seguinte maneira: [1; 2; 3]. Execute os co-
mandos abaixo no Scilab:
(a) Construa um vetor coluna c1 com elemen-
tos: 0, 1, 3, 5;
(b) Construa um vetor coluna c2 com elemen-
tos: 4, 2, 0, 7;
(c) Construa uma matriz H cujas colunas s ao
c1 e c2 sem repetir a entrada dos elemen-
tos;
(d) Construa uma matriz K onde as duas pri-
meiras colunas s ao compostas pelos ele-
mentos de c1 e a terceira coluna com ele-
mentos de c2. Novamente, execute o solici-
tado sem repetir a entrada de dados.
4. Para criar um vetor linha fazemos: [1 2 3]. Exe-
cute no Scilab os comandos abaixo:
(a) Construa um vetor linha r1 com elementos
2, 1, 5.
(b) Construa um vetor linha r2 com elementos
7, 9, 3 .
(c) Construa uma matriz Mcujas linhas s ao r1
e r2 sem repetir a entrada de dados feita
anteiormente.
(d) Descreva o resultado de: 3 r1.
(e) Descreva o resultado de: r1 +r2.
(f) Descreva o resultado de: [r1; r1 r2; r2].
5. Responda ` as quest oes seguintes considerando a
matriz abaixo.
c =
_
_
1.1 3.2 3.4 0.6
0.6 1.1 0.6 3.1
1.3 0.6 5.5 0.0
_
_
(a) Qual o tamanho de c ?
(b) Qual o valor de (2, 3) ?
(c) Apresente todos os ndices cujo valor seja
0.6.
6. Determine o tamanho das seguintes matrizes.
Verique suas respostas criando as matrizes no
Scilab.
(a) u = [10 20*(%i) 10+20];
(b) v = [-1; 20; 3];
(c) w = [1 0 -9; 2 -2 1; 1 2 3];
(d) x = [u v];
(e) y(3,3) = -7;
(f) z = [zeros(4,1) ones(4,1) zeros(1,4)];
(g) v(4) = x(2,1);
7. Qual o valor de w(2,1) ?
8. Qual o valor de x(2,1) ?
9. Qual o valor de y(2,1) ?
10. Qual o valor de v(3) ap os a execuc ao da ex-
press ao (g)?
11. Considere a matriz do exerccio (1). Determine o
conte udo das seguintes submatrizes:
(a) c(2,:)
(b) c(6)
(c) c(1:2, 2:4)
(d) c([1,3],2)
(e) c([2 2], [3 3])
15
Exerccios CAP

ITULO 2.

ALGEBRA LINEAR NUM

ERICA
(f) c([2 2 2], [3 3 3])
(g) c([1 2 2], [3 3])
12. Determine o conte udo da matriz a ap os a exe-
cuc ao das seguintes declarac oes:
(a) a = [1 2 3; 4 5 6; 7 8 9];
a([3 1], :) = a([1 3],:);
(b) a = [1 2 3; 4 5 6; 7 8 9];
a([1 3], :) = a([2 2],:);
(c) a = [1 2 3; 4 5 6; 7 8 9];
a([2 2],:);
13. Determine o conte udo da matriz a ap os a
execuc ao das seguintes declarac oes:
(a) a = eye(3,3);
b = [1 2 3];
a(2,:) = b;
(b) a = eye(3,3);
b = [4 5 6];
a(:,3) = b;
(c) a = eye(3,3);
b = [7 8 9];
a(3,:) = b([3 1 2]);
14. Resolva o seguinte sistema linear Ax = b, onde:
a
ij
=
1
i + j 1
, b
i
=
1
i
, i, j = 1 : n
use n = 5, 10 e 15. Voc e pode explicar os
resultados? Observe que a soluc ao exata e
(1, 0, 0, . . . , 0)
t
15. Duas quantias de dinheiro x
1
e x
2
somam
$600, 00. A quantia x
1
e o dobro de x
2
. Resolva
o sistema usando a func ao LU do Scilab.
16. S ao investidos $8000, 00. Parte a 6% de taxa de
juros e parte a 11% de taxa de juros. Quanto de-
veria ser investido em cada modalidade se um to-
tal de 9% e desejado ? Resolva o sistema usando
a func ao LU do Scilab.
Resposta: x
1
= $3200, 00 para 6% e x
2
=
$4800, 00 para 9%.
17. Encontre a, b e c tais que o gr aco do crculo com
equac ao x
2
+ y
2
+ ax + bx + c = 0 passe pelos
pontos (1, 5), (4, 4) e (3.1). Resolva o sistema
usando a func ao LU do Scilab.
Resposta: a = 4, b = 6 e c = 5.
18. A quantia de $16500, 00 foi investida em tr es con-
tas, resultando um lucro anual de 5%, 8% e 10%,
respectivamente. A quantia investida a 5% era
igual a quantia investida a 8% mais o dobro da
quantia investida a 10%. Quanto foi investido
em cada conta se o total dos juros sobre o in-
vestimento foi de $1085, 00 ? Resolva o sistema
usando a func ao LU do Scilab.
Resposta: $9500, 00 a 5%, $4500, 00 a 8% e
$2500, 00 a 10%.
19. Encontre a, b e c tais que a equac ao da par abola
y = ax
2
+bx+c passe pelos pontos (1, 4), (1, 6)
e (2, 12). Resolva o sistema usando a func ao LU
do Scilab.
Resposta: a = 3, b = 1 e c = 2.
16
CAP

ITULO 3
Projeto de Programac ao
Programar e f acil. Saber o que programar e difcil.
a
a
Citac ao de [3].
Uma das caractersticas da linguagem num erica e a facilidade com que o usu ario cria seus pr oprios progra-
mas.
Apesar de simples, a linguagemnum erica disponibiliza a maioria das estruturas das linguagens de programac ao
convencionais. A diferenca principal e que, na programac ao Scilab, n ao h a necessidade da declarac ao pr evia
dos tipos das vari aveis que ser ao utilizadas ao longo do programa.
As linguagens num ericas, como e o caso do Scilab, e um interpretador de comandos. Os programas
escritos em linguagem num erica s ao executados em um tempo maior que os programas semelhantes escri-
tos em linguagens compil aveis. Por outro lado, a vantagem de linguagens num ericas adv em da facilidade de
prototipac ao de programas e da disponibilidade de uma poderosa biblioteca de func oes gr acas.
Neste prop osito, abordaremos aqui a estrutura de programac ao em ambiente num erico, em especial, no
ambiente Scilab. Na sec ao 3.1 ser ao abordados os operadores relacionais e l ogicos, na sec ao 3.2 a estrutura
de Loop, na sec ao 3.3 a estrutura if (condicional) e na sec ao 3.4 a denic ao de manipulac ao de func oes em
ambiente Scilab.
3.1 Operadores Relacionais e Logicos
Al em das operac oes matem aticas convencionais, o Scilab tamb em inclui operac oes relacionais e l ogicas,
cuja nalidade e o de fornecer respostas do tipo verdadeiro ou falso a perguntas, usadas em estruturas de Loops
e condicionais.
No ambiente Scilab, a resposta para express oes l ogicas produzem T se a resposta e verdadeira (true) e F
se a resposta for falsa (false)
1
.
3.1.1 Operadores Relacionais
Os operadores relacionais do Scilab incluem todas as comparac oes habituais e s ao listados na Tabela 3.1.
Atenc ao: Os smbolo = e == t em signicados diferentes! O smbolo == compara duas vari avies e retorna T
se forem iguais e F se forem diferentes; o smbolo = e usado para atribuir o resultado de uma operac ao a uma
vari avel.
Os operadores relacionais do Scilab podem ser usados para comparar dois vetores de mesmo tamanho ou
para comparar vetores com escalar (ou ainda, escalar com escalar). Interprete os comandos abaixo:
1
Em outros ambientes de programac ao a reposta para uma sentenca verdadeira e 1 e 0 para uma resposta falsa.
Operadores Relacionais e L ogicos CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
Operador Descric ao
< Menor que
<= Menor ou igual a
> Maior que
>= Maior ou igual a
== Igual a
<> ou ~= Diferente de
Tabela 3.1: Operadores relacionais.
--> A = 1:9
--> B = 10 - A
--> vf = (A==B)
--> vf = (A~=B)
--> vf = A >= 4
--> vf = A < 4
Observe tamb em que o teste de igualdade ` as vezes produz resultados confusos para operac oes em ponto
utuante. Execute as operac oes abaixo.
-->vf = (-0.08 + 0.5 - 0.42) == (0.5 - 0.42 -0.08)
-->vf = (-0.08 + 0.5 - 0.42) ~= (0.5 - 0.42 -0.08)
-->vf = (-0.08 + 0.5 - 0.42) - (0.5 - 0.42 -0.08)

E possvel combinar express oes relacionais com express oes matem aticas:
--> B = 9 - A;
--> B = B + (B==0)*(%eps)
e uma maneira de substituir os elementos iguais a zero em um vetor pelo n umero %eps
2
. Essa express ao em
particular e, algumas vezes, util para evitar a divis ao por zero, como segue no exemplo abaixo.
--> x = (-3:3)/3
--> y = ones( x )
--> vf = x ~= 0 // encontra posicoes com valores nao-nulos
--> y(vf) = sin( x(vf) )./x( vf ) // trabalha apenas com valores nao-nulos
3.1.2 Operadores L ogicos
Os operadores l ogicos permitem que se combinem ou se neguem express oes relacionais. Os operadores
l ogicos do Scilab s ao dados na Tabela 3.2.
Operador Descric ao
& E
| OU
~ N

AO
Tabela 3.2: Operadores l ogicos.
--> A = 1:9;
--> vf = A > 4 // Encontra o que e maior que 4
--> vf = ~(A>4) // Nega o resultado anterior
--> vf = (A > 2) & (A < 6) // Retorna T para valores maior que 2 e menor que 6
--> vf = (A < 3) | (A > 5) // Retorna T para valores menor que 3 ou para valores maior que 5
2
O n umero %eps, em Scilab, e a menor diferenca entre dois n umeros que e possvel representar.
18
O Loop for e while CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
3.2 O Loop for e while
O loop for possibilita que uma s erie de comandos seja repetida por um n umero de vezes xo e pr e-
determinados. A forma geral do loop for e:
for x = vetor
comandos ...
end
Os comandos entre as instruc oes for e end s ao executados uma vez para cada coluna de vetor. A cada
iterac ao, atribui-se a x a pr oxima coluna de vetor, isto e, durante o n- esimo ciclo do loop temos que x =
vetor(:,n).
--> for n = 1:10
--> x(n) = cos( n*(%pi)/10 );
--> end
--> x
Traduzindo, a primeira instruc ao diz: para n igual a 1 at e 10, calcule todas as instruc oes at a a pr oxima instruc ao
de end. No primeiro ciclo de for, n = 1, no segundo, n = 2, e assim por diante, at e n = 10. Depois do ciclo
para n = 10, o loop for termina e os comandos ap os a instruc ao end s ao executados e as componentes de x
s ao apresentados, conforme o exemplo acima.
Naturalmente, pode-se inserir um loop for dentro do outro, sucessivamente, tantos quantos desejados:
--> for n = 1:5
--> for m = 5:-1:1
--> A(n,m) = n^2 + m^2;
--> end
--> disp(n)
--> end
--> A
Uma maneira de tornar um programa mais eciente e atrav es da pr e-alocac ao de mem oria. Ou seja, os
vetores devem ser pr e-alocados antes de um loop for (ou while) seja executado. Por exemplo:
--> x = zeros(1,10); // memoria pre-alocacao para x
--> for n = 1:10
--> x(n) = cos( n*(%pi)/10 );
--> end
--> x
No primeiro caso, todas as vezes que os comandos dentro do loop for s ao executados, o tamanho da vari avel
x e incrementada de 1. Isso forca o Scilab a gastar tempo para alocar mais mem oria para x todas as vezes
que o loop e percorrido.
Ao contr ario do loop for, que executa um grupo de comandos um n umero xo de vezes, o loop while
executa um grupo de comandos um n umero indenido de vezes, at e que uma certa condic ao seja satisfeita. A
forma geral do loop while e:
while CONDICAO
comandos ...
end
Os comandos ... entre as instruc oes while e end s ao executados enquanto TODOS os elementos de CONDICAO
forem verdadeiros.
19
Estrutura if CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
--> num = 0; EPS = 1;
--> while (1+EPS) > 1
--> EPS = EPS/2;
--> num = num + 1;
--> end
--> num
--> EPS = EPS*2
Nesse exemplo, EPS comeca em 1. Enquanto (1+EPS) > 1 for verdadeiro, os comandos dentro do loop while
s ao executados. Uma vez que EPS e continuamente divivido em dois, em algum momento ele se tornar a t ao
pequeno que, somando-se EPS a 1, esse resultado ser a menor (ou igual) que 1. Nesse momento, (1+EPS) > 1
torna-se falso e o loop while termina. Finalmente, multiplica-se EPS por 2 porque a ultima divis ao por 2 o tornou
pequeno demais.
3.3 Estrutura if
Em diversas situac oes, as seq u encias de comandos t em de ser executadas condicionalmente, com base em
um teste relacional. Nas linguagens de programac ao, essa l ogica e implementada por meio de uma das diversas
formas de estrutura if-else-end, cuja estrutura mais simples e:
if expressao
comandos ...
end
Os comandos ... entre as func oes if e end s ao executados se todos os elementos na expressao forem
verdadeiros.
Nos casos em que expressao envolve muitas subexpress oes l ogicas, apenas as subexpress oes
necess arias para determinar o valor l ogico da expressao s ao executadas. Por exemplo,
se expressao e (expressao1 | expressao2), ent ao expressao2 e executada somente se
expressao1 for falsa. Da mesma maneira, se expressao e (expressao1 & expressao2), ent ao
expressao2 s o e executada se expressao1 for verdadeira.
Considere o seguinte exemplo:
--> peras = 10; // numero de peras
--> custo = peras*25 // custo de peras
--> if peras > 5 // fonece 20% de desconto em compras maiores
--> custo = (1 - 20/100)*custo;
--> end
--> custo
Nos casos em que h a duas alternativas, a estrutura if-else-end passa a ser:
if expressao
comandos executados se verdadeira
else
comandos executados se falsa
end
Aqui, o primeiro grupo de comandos e executado se expressao for verdadeira; o segundo grupo e executado se
expressao for falsa.
Quando houver tr es ou mais alternativas, a estrutura if-else-end toma a forma:
20
Denic ao de Func oes CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
if expressao1
comandos executados se expressao1 for verdadeira
elseif expressao2
comandos executados se expressao2 for verdadeira
elseif expressao3
comandos executados se expressao3 for verdadeira
...
else
comandos executados se nenhuma outra expressao for verdadeira
end
Nessa ultima forma, somente os comandos associados ` a primeira express ao verdadeira encontradas s ao exe-
cutados; as express oes relacionais seguintes n ao s ao testadas e o resto da extrutura if-else-end e ignorada.
Al em disso, n~ao e necess ario que o comando nal else esteja presente.
Por m, vamos ver uma maneira possvel de interromper ou sair de loops for e while.
--> num = 0; EPS = 1;
--> for num = 1:1000
--> EPS = EPS/2;
--> if (1+EPS) <= 1
--> EPS = EPS*2
--> break
--> end // if
--> end // for
--> num
Note que, o loop for executaria um grande n umero de vezes. A estrutura if-else-end testa; quando EPS ca
suciente pequeno, o comando break forca o loop for a terminar prematuramente.
Desenvolva um programa em Scilab para encontrar as razes de uma equac ao do tipo ax
2
+bx+c =
0.
3.4 Denicao de Func oes
Uma func ao obedece a uma estrutura da forma:
function [y1, y2, ..., yn] = foo(x1, x2, ..., xm)
instrucao_1
instrucao_2
...
instrucao_p
endfunction
onde foo e o nome da func ao, xi, para i = 1, 2, ..., m, s ao os seus argumentos de entrada, yj, para j =
1, 2, ..., n s ao argumentos de sada e instrucao i, para i = 1, 2, ..., p, representa a seq u encia de
instruc oes que devem ser executados pela func ao.
Toda func ao no Scilab e executada chamando seu nome seguido de seus argumentos. No exemplo, a
func ao foo e executada atrav es do comando:
--> foo(x1, x2, ..., xm)
Como pode ser observado, uma func ao possui uma estrutura pr e-determinada. As principais caractersticas de
uma func ao s ao:
21
Denic ao de Func oes CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
As vari aveis denidas na func ao, chamadas de vari aveis locais, n ao permanecem no ambiente Scilab
ap os a execuc ao da func ao;
As entradas e sadas do programa s ao claramente denidas, e
Uma func ao, ap os ser denida, pode ser chamada a qualquer tempo.
Uma func ao pode ser criada usando um dos seguintes procedimentos:
1. Digitando no pr oprio ambiente,
--> Digitando uma funcao no ambiente Scilab
--> function[y1, y2] = exemplo(x1, x2)
--> // Entrada: x1, x2
--> // Saida: y1, y2
--> y1 = x1 + x2
--> y2 = x1 * x2
--> endfunction
--> [a, b] = exemplo(2, 3)
2. Usando o comando deff,
--> Usando deff
--> deff([y1, y2] = exemplo(x1, x2), y1 = x1 + x2, y2 = x1 * x2)
--> [a, b] = exemplo(3, 4)
3. Digitando o texto da func ao em um arquivo e, em seguida, carregando esse arquivo no ambiente Scilab.
Por convenc ao, as func oes denidas pelo usu ario possuem extens ao sci e s ao carregadas no ambiente
Scilab atrav es do comando:
--> exec(nome_do_arquivo_de_comandos.sce)
22
Exerccios CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
3.5 Exerccios
1. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes express oes a seguir.
a = 20; b = -2; c = 0; d = 1;
(a) a > b;
(b) b > d;
(c) a > b & c > d;
(d) a == b;
(e) a & b > c;
(f) ~~b.
2. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes express oes a seguir.
a = 2; b = [1 -2; 0 10]; c = [0 1; 2 0];
d = [-2 1 2; 0 1 0];
(a) ~(a > b); (b) a > c & b > c; (c) c <= d.
3. Assuma que a, b, c e d sejam conforme dado. Explique a ordem de avaliac ao de cada uma das seguintes
express oes, e especique os resultados em cada caso.
a = 2; b = 3; c = 10; d = 0;
(a) a*b^2 > a*c; (b) d | b > a.
4. Ocusto de enviar umpacote por Sedex e de $10,00 para o primeiro quilo e $3,75 para cada quilo acima. Se
o pacote pesar mais de 35 quilos, uma taxa de peso adicional de $10,00 e adicionada ao custo. Nenhum
pacote com mais de 50 quilos e aceito. Escreva um programa que aceite o peso do pacote em quilos e
calcule o custo de enviar o pacote. Inclua o caso dos pacotes acima do peso.
5. Escreva um programa para calcular a func ao f(x, y) para quaisquer dois valores reais, dado pelo usu ario
para x e y, como segue:
f(x, y) =
_

_
x + y x 0 e y 0
x + y
2
x 0 e y < 0
x
2
+ y x < 0 e y 0
x
2
+ y
2
x < 0 e y < 0
6. Examine os lacos for a seguir e determine quantas vezes cada laco ser a executado.
(a) for index = 7:10
(b) for jj = 7:-1:10
(c) for index = -10:3:-7
(d) for kk = [0 5; 3 3]
7. Examine os lacos a seguir e determine o valor em ires no nal de cada um.
(a) ires = 0;
for index = 1:10
ires = ires + 1;
end
(b) ires = 0;
for index = 1:10
ires = ires + index;
end
(c) ires = 0;
for index1 = 1:10
for index2 = index1:10
if index2 == 6
break;
end
23
Exerccios CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
ires = ires + 1;
end
end
(d) Calcule os valores da func ao:
f(t) =
_
sen(t) t tal que sen(t) > 0
0 caso contr ario
para 6 < t < com intervalos de /10.
8. O n- esimo n umero de Fibonacci e denido pelas equac oes recursivas abaixo:
f(1) = 1
f(2) = 2
f(n) = f(n 1) + f(n 2)
Portanto, f(3) = f(2) +f(1) = 2+1 = 3 e assim por diante, para n umeros maiores. Escreva um programa
fib.sci para calcular e imprimir o n- esimo n umero de Fibonacci para n > 2, onde n e fornecido pelo
usu ario.
9. Uma matriz A
nn
e dita diagonalmente dominante se
|a
ii
| >
n

j=i
|a
ij
|, i = 1 : n
Escreva uma func ao que, dada uma matriz qualquer n n, retorne T se a matriz for diagonalmente domi-
nante e F caso contr ario.
P.S.: Ocomando read, como mostra o exemplo que segue, AB = read(nome do arquivo.txt, no de linhas,
no de colunas)), l e um arquivo de dados para execuc ao no ambiente Scilab, onde AB e a vari avel que
cont em a matriz.
10. A localizac ao de um ponto em um plano cartesiano pode ser expressa por coordenadas retangulares
(x, y) ou coordenadas polares (r, ). A relac ao entre esses dois conjuntos de coordenadas e dada por
estas equac oes:
x = r cos
y = r sin
r =
_
x
2
+ y
2
= tg
1
_
y
x
_
Escreva duas func oes, rect2polar e polar2rect,
que convertam coordenadas de retangular para po-
lar e vice-versa, com o angulo expresso em graus.
x
y
r
x
y

11. O m etodo da bissecc ao serve para o c alculo apropriado de razes de equac oes do tipo f(x) = 0, com
f : R R.
O m etodo e bastante simples: dado um intervalo inicial [a, b] contendo uma raiz, divide-se este intervalo
ao meio. Por exemplo, m = (a + b)/2. Temos agora dois intervalos: [a, m] e [m, b]. Da basta continuar o
processo at e a precis ao desejada.
Assim:
(a) Encontre as razes de f(x) = x
3
2x 5 = 0.
24
Exerccios CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
(b) Calcule as razes negativas de P(x) = x
3
3x
2
6x + 8 = 0, com 0.05 (erro absoluto) que est a
no intervalo [3.83, 0.62].
12. Um sistema linear pode ser dado por:
_

_
a
11
x
1
+ a
12
x
2
+ . . . + a
1n
x
n
= b
1
a
21
x
1
+ a
22
x
2
+ . . . + a
2n
x
n
= b
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
x
1
+ a
n2
x
2
+ . . . + a
nn
x
n
= b
n
na forma matricial como Ax = b, ou ainda:
x
1
=
_
_
b
1

n

j=2
a
1j
x
j
_
_
/a
11
.
.
.
x
i
=
_
_
b
i

n

j=i
a
ij
x
j
_
_
/a
ii
.
.
.
x
n
=
_
_
b
n

n1

j=1
a
nj
x
j
_
_
/a
nn
(3.1)
O m etodo de Gauss-Seidel e um processo que usa a forma (3.1), a partir de uma soluc ao inicial e atualiza
os valores de x at e obter uma precis ao requerida. Esta atualizac ao usa as componentes que est a sendo
calculada. Assim, o valor rec em calculado para x
(k+1)
1
ser a usado no c alculo de x
(k+1)
2
. O Algoritmo 1
mostra os passos deste m etodo.
Dado n, A
nn
, b
n1
e x
(0)
n1
, max,
1: Para k = 0 at e k = max fac a
2: Para i = 1 at e i = n fac a
3: x
(k+1)
i
=
1
a
ii

b
i

i1
X
j=1
a
ij
x
(k+1)
j

n
X
j=i+1
a
ij
x
(k)
j
!
4: Se max
1in

x
(k+1)
i
x
(k)
i

< ou

x
(k+1)
i
x
(k)
i

x
(k+1)
i

< ent ao
5: x = x
(k+1)
6: else
7: Se k = max ent ao
8: PARE: n ao houve converg encia.
9: Fim do condicional
10: Fim do condicional
11: Fim do lac o
12: Fim do lac o
Algoritmo 1: M etodo de Gauss-Seidel
Implemente o m etodo de Gauss-Seidel e resolva o sistema:
_

_
5 2 0 1
1 8 3 2
0 1 6 1
1 1 2 9
_

_
_

_
x
1
x
2
x
3
x
4
_

_
=
_

_
6
10
5
0
_

_
25
Exerccios CAP

ITULO 3. PROJETO DE PROGRAMAC



AO
com < 10
3
e max = 50. Antes de iniciar o algoritmo acima, verique se o sistema e diagonalmente
dominante, usando a func ao implementada no exerccio 9 (usando o Scilab, e claro!).
13. Equilibrar a reac ao quimica:
KMnO
2
+ H
2
SO
4
+ NaNO
2
K
2
SO
4
+ MnSO
4
+ NaNO
3
+ H
2
O.
Modelagem Matem atica
O balanceamento de uma equac ao qumica e baseada na lei de conservac ao da massa de Lavoisier: Em
um sistema qumico isolado, a massa permanente conservante, quaisquer que sejam as transformac oes
que nele se processem. A lei de Lavoisier tamb em pode ser expressa na forma: Em uma reac ao qumica,
a soma das massas dos reagentes e igual ` a soma das massas dos produtos resultantes. Conclui-se,
ent ao, que os elementos t em de estar nos dois membros da equac ao em igual quantidade.
O m etodo alg ebrico de balanceamento consiste em atribuir coecientes literais x
i
` as subst acias que apa-
recem na equac ao, os quais constituem as inc ognitas. Aplicando a lei de Lavoisier e comparando os ele-
mentos membro a membro, constr oi-se um sistema de equac oes alg ebricas lineares, onde as inc ognitas
s ao os coecientes estequiom etricos x
i
da reac ao quimica. Se houver mais inc ognitas do que equac oes,
atribui-se um valor arbitr ario a uma delas:
x
1
KMnO
2
+ x
2
H
2
SO
4
+ x
3
NaNO
2
x
4
K
2
SO
4
+ x
5
MnSO
4
+ x
6
NaNO
3
+ x
7
H
2
O
A Tabela 3.3 sistematiza a equac ao acima.
K: x
1
= 2x
4
Mn: x
1
= x5
O: 2x
1
+ 4x
2
+ 2x
3
= 4x
4
+ 4x
5
+ 3x
6
+ x
7
H: 2x
2
= 2x
7
S: x
2
= x
4
+ x
5
Na: x
3
= x
6
N: x
3
= x
6
Tabela 3.3: Transformac ao da equac ao qumica em equac oes.
Como as duas ultimas express oes s ao iguais, elimina-se uma delas. Deste modo, tem-se um sistema
linear com 6 equac oes e 7 inc ognitas. Atribuindo um valor arbitr ario a uma delas, por exemplo, x
7
= 1,
obt em-se o seguinte sistema linear de ordem 6:
_

_
1 0 0 2 0 0
1 0 0 0 1 0
2 4 2 4 4 3
0 2 0 0 0 0
0 1 0 1 1 0
0 0 1 0 0 1
_

_
_

_
x
1
x
2
x
3
x
4
x
5
x
6
_

_
=
_

_
0
0
1
2
0
0
_

_
(a) Resolva o sistema acima usando a func ao LU do Scilab e com o m etodo de Gauss-Seidel imple-
mentado (faca a troca de linhas necess arias para a melhor execuc ao deste m etodo).
(b) Compare as soluc oes obtidas em relac ao a precis ao de cada m etodo.
(c) Faca uma an alise do resultado obtido.
26
CAP

ITULO 4
Gr acos no Scilab
Comecamos aqui a explorar alguns dos recursos gr acos bi-dimensionais do ambiente Scilab. Informac oes
mais detalhadas sobre todos os comandos disponveis na biblioteca gr aca do Scilab (acessem o help).
4.1 A Janela Graca do Scilab
Todas as sadas gr acas de comandos do Scilab s ao apresentadas em uma janela gr aca. Note que, esta
janela tem um menu horizontal com quatro opc oes:
1. File: possui oito sub-opc oes que permitem manipular arquivos relacionados com gr acos gerados: New
Figure, Load, Save, Export to, Copy to clipboard, Page Setup, Print e Close.
2. Tools: apresenta quatro sub-opc oes de mobilidade da gura gerada, que s ao: Show/Hide Toolbar, que
habilita um menu de atalhos para as demais opc oes desta pasta, como descrito abaixo.
Zoom: permite a ampliac ao de uma parte do gr aco. Escolhendo esta opc ao e delimitando uma area,
a parte do gr aco dentro da area escolhida ser a expandida.
UnZoom: desfaz as manipulac oes realizadas atrav es da opc ao Zoom.
3D Rot.: permite efetuar rotac oes em gr acos bi-dimensionais e tri-dimensionais.
3. Edit: possui nove sub-opc oes que permite manipular o gr aco gerado: Select as current gure, Redraw
gure, Clear Figure, Figure Properties, Axes Properties, Start Entity Picker, Stop Entity Picker, Start datatip
manager e Stop datatip manager.
4. ?: mostra duas opc oes de ajuda: Scilab Help e About Scilab.
No Scilab, gr acos sucessivos s ao sobrepostos emuma janela gr aca. Para evitar que isto ocorra, podemos
utilizar o comando clf(). Estes comando limpa a janela gr aca.
As janelas gr acas podem ser manipuladas atrav es da func ao scf(). Por exemplo:
--> // Manipulacao de janelas graficas
--> scf(0) // Acesso a janela grafica 0 (default)
--> scf(1) // Acesso a janela grafica 1
4.2 Gracos Bi-dimensionais
Gr acos bi-dimensionais podemser gerados atrav es da utilizac ao da func ao plot2d(). A forma mais simples
desta func ao e:
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
--> plot2d( [ x ], y )
onde x e y podem ser matrizes ou vetores reais. Os colchetes [ e ], envolvendo x indicam que este par ametro
e opcional. Vejamos algumas considerac oes sobre este par ametros:
1. Se x e y s ao vetores, a func ao plot2d() permite tracar o gr aco de y em func ao de x.

E importante
observar que os dois vetores devem ter a mesma dimens ao, isto e, os dois vetores devem ter o mesmo
n umero de elementos.
2. Se x e um vetor e y e uma matriz, a func ao plot2d() permite tracar o gr aco de cada coluna da matriz y
em func ao de x. Neste caso, o n umero de elementos das colunas da matriz deve ser igual ao n umero
de elementos do vetor x.
3. Se x e y s ao matrizes, a func ao plot2d permite tracar o gr aco de cada coluna da matriz y em func ao de
cada coluna da matriz x. Neste caso, as matizes devem ter as mesmas dimens oes.
4. Se y e um vetor, a func ao plot2d() permite tracar o gr aco do vetor y em func ao do vetor [1:size(y)].
5. Se y e uma matriz, a func ao plot2d() permite tracar o gr aco da matriz y emfunc ao do vetor [1:size(y)].
Vamos apresentar exemplos de gr acos gerados para cada uma das opc oes de entrada x, y apresentados
anteriormente. Os gr acos ser ao gerados no intervalo [0, 2], com incremento 0.1. As atividades abaixo podem
ser feitas no Scipad ou diretamente no ambiente Scilab.
--> // Item 1: x = vetor, y = vetor
--> x = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, x
--> y = sin( x );
--> // x e y devem ter a mesma dimensao!!!!!!!!
--> size( x )
--> size( y )
--> plot2d( x, y )
--> // Item 2: x = vetor, y = matriz
--> clf() // Limpa a tela grafica - evitar sobreposicao
--> Y = [ sin( x ) cos( x ) ]; // Definindo a matriz Y
--> size (Y) // Observar que a matriz Y possui 63 elementos em cada coluna
--> plot2d( x, Y )
--> // Item 3: x = y = matrizes
--> clf()
--> clear
--> t = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliar
--> X = [ t t ] // Criando a matriz X
--> size( X ) // A matriz X possui 63 elementos em cada coluna
--> Y = [ cos( t ) sin( t ) ];
--> size( Y ) // A matriz Y possui 63 elementos em cada coluna
--> plot2d( X, Y )
--> // Item 4: y = vetor (sem x explicito)
--> clf()
--> x = [ 0:0.1:2*%pi ];
--> plot2d( sin( x ) )
28
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
--> // Item 5: Y = matriz (sem x explicito)
--> clf()
--> plot2d( Y )
Verique que, ap os a execuc ao de cada gr aco, limpamos a tela atrav es do comando clf(), para evitar que
o pr oximo gr aco se sobreponha ao anterior.
Vejamos agora alguns comandos para melhorar a sua janela gr aca:
xtitle( titulo ): acrescenta o ttulo em cada um dos gr acos gerados, cujo argumento e uma string.
xsetech( [ x, y, largura, altura] ): Sub-divide a janela gr aca do Scilab.
A janela gr aca e denida com largura e altura iguais a 1 e com o seu sistema de refer encias com origem
(0, 0) no canto superior esquerdo da janela. O eixo x possui valores crescentes para a direita e o eixo y
possui valores crescentes para baixo. Ambos os eixos possuem valores m aximos iguais a 1.
Vamos re-escrever os comandos acima dentro do Scipad (graf 2d.sci) usando os comandos xtitle() e
xsetech().
clear // Limpar a memoria do Scilab
clf() // Limpar a janela grafica
// Item 1: x = vetor, y = vetor
x = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, x
y = sin( x );
// xsetech( [abcissa, ordenada, largura, altura] ) do grafico
xsetech( [0, 0, 0.3, 0.5] );
xtitle(Item 1);
plot2d( x, y )
// Item 2: x = vetor, y = matriz
Y = [ sin( x ) cos( x ) ]; // Definindo a matriz Y
xsetech( [0.35, 0, 0.3, 0.5] );
xtitle(Item 2);
plot2d( x, Y )
// Item 3: x = y = matrizes
clear
t = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliar
X = [ t t ] // Criando a matriz X
Y = [ cos( t ) sin( t ) ];
xsetech( [0.7, 0, 0.3, 0.5] );
xtitle(Item 3);
29
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
plot2d( X, Y )
// Item 4: y = vetor (sem x explicito)
x = [ 0:0.1:2*%pi ];
xsetech( [0, 0.5, 0.5, 0.5] );
xtitle(Item 4);
plot2d( sin( x ) )
// Item 5: Y = matriz (sem x explicito)
xsetech( [0.5, 0.5, 0.5, 0.5] );
xtitle(Item 5);
plot2d( Y )
A forma geral da func ao plot2d() inclui um terceiro argumento: plot2d( [x], y, <opt args> ), onde
<opt args> e uma seq u encia de opc oes que determinam as caractersticas do gr aco bi-dimensional:
< opt args >:= opcao
1
= valor
1
, opcao
2
= valor
2
, . . . , opcao
n
= valor
n
As opc oes podem ser:
style: e utilizada para especicar o padr ao da curva (ou curvas) que est ao sendo tracadas. O valor
associado ` a essa opc ao dever ser um vetor com valores inteiros positivos ou negativos. Se o valor for
positivo, a curva e contnua e dena-se a cor da curva tracada. Se o valor for negativo ou zero, a curva
ser a desenhada usando marcadores.
logflag: dene a escala, logartmica ou linear, a ser utilizada nos eixos x e y do gr aco. Os valores
associados ` a essa opc ao s ao strings, nn, nl, ln ou ll, onde l indica a escala logartmica, n a escala
normal, na seq u encia xy. O valor padr ao desta opc ao e nn, isto e, escala normal com graduac ao normal
dos eixos (omite-se esta opc ao).
rect: e utilizada para estabelecer os limites do gr aco. O valor associado ` a essa opc ao um vetor real com
quatro entradas [xmin, ymin, xmax, ymax], onde xmin, xmax, ymin e ymax indicam os valores mnimos
e m aximos para os eixos x e y, respectivamente.
frameflag: e utilizada para controlar a escala dos eixos coordenados. O valor associado ` a essa opc ao e
um n umero inteiro entre 0 e 8, inclusive.
axesflag: especica como os eixos ser ao tracados. O valor associado ` a essa opc ao e um n umero inteiro
entre 0 e 5, inclusive;
leg: permite dener as legendas das curvas. O valor associado ` a esse par ametro e uma string de carac-
teres para cada gr aco tracado.
Um exemplo com estas opc oes e apresentado a seguir (opt plot.sci).
--> x = [ -%pi:0.1:%pi ]
--> y = [ sin(x) cos(x) ]
--> plot2d( x, y, style = [2, -1], rect = [-%pi, -1.5, %pi, 1.5], ...
--> axesflag = 5, leg = sen( x )@cos( x ) )
Uma maneira de tracar gr acos bidimensionais polares e usando a func ao polarplot(rho, theta, <opt args>),
como segue no exemplo a seguir (cardeoide.sce).
30
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
clear
clf()
xsetech([0, 0, 0.5, 0.5])
t = linspace(0, 2*%pi);
a = 2;
r = a*(1 + cos(t));
polarplot(t,r, 5)
xtitle(Cardeoide)
xsetech([0.5, 0, 0.5, 0.5])
a = 0.25;
t = linspace(-(%pi)/4, (%pi)/4, 80);
r1 = a*sqrt( cos(2*t) );
r2 = -( a* sqrt( cos(2*t) ) );
polarplot([t, t], [r1, r2], 22)
xtitle(Lemniscata de Bernoulli)
xsetech([0, 0.5, 0.325, 0.5])
t = linspace(-2*%pi, 2*%pi);
a = 1;
x = a*(t - sin(t));
y = a*(1 - cos(t));
plot2d(x, y, 2, frameflag = 3, rect = [-6.2, -0.1, 6.2, 2.1])
xtitle(Cicloide)
xgrid(3)
xsetech([0.325, 0.5, 0.325, 0.5])
t = linspace(0, 2*%pi);
a = 2;
x = a*( cos(t) + t.*sin(t) );
y = a*( sin(t) - t.*cos(t) );
plot2d(x, y, 5, frameflag = 3, rect = [-10, -15, 4, 10])
xgrid(2)
xtitle(Evolvente da circunferencia)
xsetech([0.65, 0.5, 0.35, 0.5])
31
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
a = 2;
t = linspace(-4*%pi, 4*%pi);
x = (3*a*t)./(1 + t^3);
y = (3*a*(t^2))./(1 + t^3);
plot2d(x, y, 2)
xgrid(3)
xtitle(Folio de Descartes)
O comando plot2d() apresenta algumas variac oes, como apresentado na Tabela 4.1.
Comando Tipo de Gr aco
plot2d2() gr acos 2-D linearizados.
plot2d3() gr acos 2-D com barras verticais.
plot2d4() gr acos 2-D com setas.
Tabela 4.1: Variac oes do comando plot2d.
Uma outra maneira de gerar gr acos bi-dimensionais e usando o comando fplot2d() (graf fplot.sci).
Consulte o help do Scilab para maiores detalhes.
--> clear
--> clf()
--> deff( y = f(x), y = sin(x) )
--> x = linspace( -%pi, %pi )
--> fplot2d( x, f )
--> xgrid(2)
4.2.1 Outros Comandos
Existemcomandos que podemser utilizados para melhorar a apresentac ao de umgr aco (dem subplot.sci).
Dentre eles, destacamos:
xgrid(): coloca uma grade em um gr aco bi-dimensional;
titlepage: coloca um ttulo no meio de uma janela gr aca.
subplot(m,n,p): divide a janela gr aca do Scilab em uma matriz m n (m linhas e n colunas). Em
cada um dos elementos da matriz, especicado por p, pode ser colocado num gr aco.
// Demonstracao do comando subplot
clf()
subplot(2,2,1)
champ // Chamada do demo da funcao champ
subplot(2,2,2)
histplot // Chamada do demo da funcao histplot
subplot(2,2,3)
errbar // Chamada do demo da funcao barr
32
Gr acos Bi-dimensionais CAP

ITULO 4. GR

AFICOS NO SCILAB
subplot(2,2,4)
grayplot // Chamada do demo da funcao grayplot
Observem que, no menu horizontal da janela gr aca temos a opc ao File e sub-opc ao Export. Esta sub-opc ao
permite exportar a gura gerada no formato: *.gif, entre outros !
Executem o programa (plot2d opt.sce) que segue abaixo e compare com os comandos listados na Tabela
4.1.
clear
clf()
subplot(2,2,1)
x = [-2.9:0.1:2.9];
y = exp(-x.*x);
plot2d(t, x);
errbar(t,x, 0.02*ones(x), 0.1*ones(x))
xtitle("Barra de erros: variacao inferior e Superior")
subplot(2,2,2)
plot2d2(x, y, style = 2)
xtitle("Funcao escada: visualizacao discreta dos dados")
subplot(2,2,3)
plot2d3(x, y, style = 3)
xtitle("Barras verticais: analise de frequencia")
subplot(2,2,4)
x = linspace(1, 1000);
y = log(x);
plot2d(x, y, logflag = "ln") // l == escala logaritmica
// n == escala normal
xgrid(3);
xtitle("logflag: escala logaritmica")
33
Exerccios CAP

ITULO 4. GR

AFICOS NO SCILAB
4.3 Exerccios
1. Acompanhe o que foi feito, para func oes po-
lares (plot2d opt), e faca um (ou mais) pro-
grama(s) para as func oes que segue. Nem to-
das as func oes listadas abaixo precisam usar
polarplot! Atenc ao ao denir os domnios de
cada func ao.
(a) Ciss oide de Diocles:
y
2
=
x
3
a x
ou
_

_
x =
at
2
1 + t
2
y =
at
3
1 + t
2
(b) Estrof oide: y
2
= x
2
a + x
a x
(c) Hipocicl oide (atr oide): x
2
3
+ y
2
3
= a
2
3
ou
_
x = a cos
3
(t)
y = a sen
3
(t)
(d) Espiral de Arquimedes: r = a , r 0.
(e) Espirial hiperb olica: r =
a

, r 0.
(f) Espiral logaritmica: r = e
a
.
(g) Rosa de tr es p etalas: r = a sen(3), r 0.
(h) Rosa de quatro p etalas: r = a | sen(2)|
2. Trace o gr aco das func oes abaixo (cuidado com
o domnio de cada func ao !!!!).
(a) f(x) = x
3
;
(b) f(x) =

x 1;
(c) f(x) = |x|;
(d) f(x) =
1
x
;
(e) f(x) =

4 x
2
;
(f) f(x) = |x 4|;
(g) f(x) = x +|x|;
(h) f(x) =

x
2
4;
(i) f(x) =
1
(x4)
2
;
(j) f(x) = (4 + x
2
);
(k) f(x) =
x
|x|
;
(l) f(x) = 2

x;
(m) f(x) = ln(x) (mude o tipo de escala);
(n) f(x) = e
x
(mude o tipo de escala).
3. Atrav es da estrutura function, escreva cada
uma das func oes abaixo e escreva um programa
(para cada uma ou para todas) e que chame as
func oes (usando a func ao exec()) e faca os seus
respectivos gr acos:
(a)
f(x) =
_
1 se x < 0
1 se x 0
(b)
f(x) =
_
_
_
5 se x < 5
x se 5 x 5
5 se x > 5
(c)
f(x) =
_
_
_
x
2
se x 1
x
3
se |x| < 1
2x se x 1
(d)
f(x) =
_
1 se x e inteiro
0 se x n ao e inteiro
(e)
f(x) =
_
_
_
x se x < 0
2 se 0 x < 1
x
2
se x 1
(f)
f(x) =
_
_
_
x se x 1
x
2
se 1 x < 2
x se x 2
34
CAP

ITULO 5
Ajuste de Curvas em Ambiente Scilab
Manipulacao de Arquivos Comando read
Para a leitura de um arquivo no formato de matriz, o Scilab usa o comando read:
--> A = read(nome_do_arquivo.txt, numero_de_linhas, numero_de_colunas)
O arquivo contendo a matriz a ser lida deve conter apenas os elementos da matriz disposto de maneira
usual.
Manipulacao de Arquivos Comandos save e load
As vari aveis, vetores ou matrizes criadas no ambiente Scilab podem ser armazenadas em um arquivo.
Considere os vetores:
--> x = [0:0.1:2];
--> y = [5.8955 3.5639 ... 0.1704 0.2636];
--> dd = [x; y];
onde
y = [ 5.8955 3.5639 2.5173 1.979 1.899 1.3938 1.1359
1.0096 1.0343 0.8435 0.6856 0.61 0.5392 0.3946
0.3903 0.5474 0.3459 0.137 0.2211 0.1704 0.2636 ]
Para salvar x e y em um arquivo chamado valores.dat, usamos o comando save com a sintaxe:
--> save(valores.dat, dd)
O comando save cria o arquivo valores.dat no diret orio de trabalho. O arquivo valores.dat e um arquivo
bin ario. Para recuperar os valores x e y, usamos o comando load:
--> clear
--> x
--> y
--> load(valores.dat, dd)
--> dd
Denindo a Func ao de Ajuste CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


5.1 Denindo a Funcao de Ajuste
A func ao de ajuste desenvolvida para ambiente Scilab basea-se no m etodo dos Quadrados Mnimos. Lem-
brando que, quando aplicamos este m etodo minimizamos o resduo ao quadrado (ou seja, a diferenca entre o
valor ajustado e o valor real ao quadrado), que pode ser escrito da seguinte forma:
< r, r >=
m

i=1
(y
i
g(x
i
))
2
(5.1)
onde y
i
s ao elementos do vetor y que fornecem os valores reais a serem ajustados e g(x) a func ao a ser
aproximada para estes valores. O nosso objetivo e o de encontrar os coecientes da func ao g(x) de maneira
que r seja o menor valor possvel (minimizac ao do resduo).
Para os dados do exemplo da Sec ao 5, uma func ao que pode fornecer um bom ajuste e do tipo:
g(x) = c
1
e
c
2
x
+c
3
(5.2)
A func ao (5.1), para o ambiente Scilab, retorna dois tipos de informac ao (como veremos abaixo): um vetor
com os coecientes de (5.2) e o resduo. Assim (curvas.sce):
// Exemplo de ajuste de dados usando Scilab.
clear
load(valores.dat, dd)
// Definindo a funcao residuo. Supondo que a funcao a ser ajustada
// tenha parametros c_1, c_2, ... c_n, definimos a funcao residuo como:
//
// erro = x_n+1 - g( x, c_1, c_2, ..., c_n )
deff( erro = g(c,dd), erro = dd(2) - c(1)*exp( c(2)*dd(1) ) - c(3) )
Nesta func ao r, os elementos dd(1) e dd(2) correspondem a primeira e segunda linha da matriz armaze-
nada em valores.dat, ou seja, aos valores de x e y do exemplo da Sec ao 5. O m etodo de Quadrados Mnimos
no Scilab sempre segue este padr ao: a ultima componente do vetor sempre corresponde a y.
A Funcao datafit
Oambiente Scilab possui a func ao datafit que ajusta qualquer tipo de func ao pelo m etodo dos Quadrados
Minmos. Esta precisa de tr es informac oes: a func ao a ser ajustada g(c,dd) (denida nos padr oes da sec ao
anterior), os elementos do arquivo valores.dat, que foram armazenados em dd e um chute inicial para o c alculo
dos coecientes de (5.2). No nosso caso:
c0 = [ 1; -1; 0 ]; // Chute inicial para os parametros.
// Calculando o ajuste. A variavel "c" corresponde aos parametros
// ajustados e a variavel "e" ao erro quadratico de ajuste.
[c,e] = datafit(g, dd, c0);
onde c e um vetor coluna contendo os coecientes da func ao G(x) e e e o resduo nal.
Ap os a execuc ao deste passo, j a e possvel denir a func ao G(x) com os coecientes calculados por datafit
(note que o Scilab n ao confunde g com G):
36
Spline C ubicas em Ambiente Scilab CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


// Definindo a funcao de ajuste.
deff( y1 = G(x), y1 = c(1) * exp( c(2) * x ) + c(3) );
// Fazendo os graficos dos dados e da funcao obtida!
x = dd(1, :);
y = dd(2, :);
xsetech([0, 0, 0.48, 0.48])
xtitle("Pontos para ajuste")
plot2d(x, y, style = [-1])
xsetech([0.5, 0, 0.48, 0.48])
xtitle("Curva ajustada")
fplot2d(x, G, 2)
xsetech([0, 0.5, 1, 0.48])
xtitle("Ajuste x pontos")
plot2d(x, y, style = [-1])
fplot2d(x, G, 2)
5.2 Spline C ubicas em Ambiente Scilab
A interpolac ao utilizando polin omios de ordem elevada muitas vezes produz resultados mal comportados.
Existem v arios m etodos para eleminar esse problema. Dentre eles, as Splines C ubicas s ao muito populares. No
Scilab, a interpolac ao por splines c ubicas e executada pelas func oes splin e interp. No help do Scilab, os
detalhes para o uso destas func oes est ao disponveis.
A Funcao splin
A func ao splin toma os dados x e y e os valores desejados x
i
(normalmente x
i
[x
0
, x
n
]), encontra o
polin omio da interpolac ao por spline c ubica que se adequa a x e y, e ent ao calcula os polin omios para encontrar
os valores de y
i
correspondente a cada valor x
i
.
Notac ao: d = splin( x, y, tipo de spline ), onde:
x : vetor (linha ou coluna) com, no mnimo, 2 elementos;
y : vetor (linha ou coluna) no mesmo formato de x;
tipo de spline : selec ao do tipo de spline a ser calculada;
d : vetor no mesmo formato de x (d
i
e a derivada da spline em x
i
).
Descric ao: a func ao splin calcula a spline c ubica (ou sub-spline) s que interpola os pontos (x
i
, y
i
), isto
e, temos s(x
i
) = y
i
, i = 0 : n. A spline resultante s e completamente denida pelos pontos (x, y, d),
onde d e um vetor com as derivadas de x
i
: s

(x
i
) = d
i
(conhecida como forma de Hermite).
O c alculo das splines em alguns pontos tem de ser feitos pela func ao interp.
Tipos de Splines: podemos calcular diferentes tipos de splines c ubicas, aqui vamos ver as sintaxe das
splines c ubicas natural e restrita:
37
Spline C ubicas em Ambiente Scilab CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


natural : a spline c ubida e calculada supondo s

(x
0
) = s

(x
n
) = 0. Assim, a func ao pode ser dada por:
d = splin( x, y, natural)
clamped : a spline c ubica e c alcula usando s

(x
0
) = f

(x
0
) e s

(x
n
) = f

(x
n
). Neste caso, temos de passar
um vetor com estes valores, como segue:
d = splin( x, y, clamped, [f(x0) f(xn)] )
A Funcao interp
A func ao interp calcula a spline c ubica.
Notac ao: yp = interp( xp, x, y, d ), onde:
xp : vetor dos n umeros reais denida em [x
0
, x
n
];
x, y, d : vetores de n umeros reais, denindo uma spline c ubica;
yp : vetor de n umeros reais de mesmo tamanho de xp, com os valores de s(x
i
) (yp(i) = s( xp(i) )).
Descric ao: Dado 3 vetores (x, y, d) denidos pela func ao splin com f(x
i
) = s(x
i
) e d
i
= s

(x
i
), esta
func ao calcula s em xp(i).
Exemplos
Veremos aqui, dois exemplos para o uso das func oes splin e interp.
// Exemplo (spline_teste.sce)
clear
x = [0 1 2];
y = [1 2 -1];
plot2d(x, y, -2)
d = splin(x, y, natural)
xx = linspace(0, 2);
// yy = interp(xx, x, y, d);
deff(yy = f(xx), yy = interp(xx, x, y, d))
// plot2d(xx, yy, 2, rect = [-1, -2, 3, 3])
fplot2d(xx, f, 2, rect = [-1, -2, 3, 3])
Tomemos agora o problema abaixo.
Exemplo 5.2.1. Construa as splines c ubicas para os dados abaixo, como e solicitados nos itens (1) e (2).
1. Natural (s

(x
0
) = s

(x
n
));
38
Spline C ubicas em Ambiente Scilab CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


x
i
0.1 0.2 0.3 0.4
y
i
-0.62049958 -0.28398668 0.00660095 0.2484244
2. Restrita, com f

(0.1) = 3.58502082 e f

(0.4) = 2.16529366.
// Spline (spline_aula.sce)
clear
clf()
x = [0.1 0.2 0.3 0.4];
y = [-0.62049958 -0.28398668 0.00660095 0.2484244];
xx = linspace(0.1, 0.4);
subplot(1,2,1)
xtitle(Interpolacao Natural)
plot2d(x, y, -5, rect = [0.08, -0.7, 0.45, 0.3])
dnat = splin(x, y, "natural");
ynat = interp(xx, x, y, dnat);
plot2d(xx, ynat, 2)
subplot(1,2,2)
xtitle(Interpolacao Restrita)
plot2d(x, y, -4, rect = [0.08, -0.7, 0.45, 0.3])
t = [3.58502082 2.16529366];
drest = splin(x, y, "clamped", t);
deff(yrest = frest(xx), yrest = interp(xx, x, y, drest));
fplot2d(xx, frest, 2)
39
Exerccios CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


5.3 Exerccios
1. Seja a tabela:
i 1 2 3 4 5 6 7 8 9 10
x
i
5 6 7 8 9 10 11 12 13 14
y
i
0.01 0.05 0.08 0.14 0.18 0.26 0.44 0.51 0.79 1.02
(a) Salve os dados da tabela acima usando o comando save e carregue-o no ambiente Scilab usando
load.
(b) Faca o gr aco da dispers ao dos dados da tabela acima.
(c) Use a func ao datafit para obter os seguintes polin omios:
i. p
1
(x) = a + bx;
ii. p
2
(x) = a + bx + cx
2
;
iii. p
3
(x) = a + bx + cx
2
+ dx
3
;
iv. y = ax
b
;
v. y = ab
x
.
(d) Use a func ao splin - natural para ajustar os dados da tabela acima.
(e) Qual dos casos e o melhor ? Por qu e ?
2. Seja a tabela contendo o tempo de germinac ao de sementes (dias) em func ao da temperatura m edia do
solo (

C) para doze locais de plantio:


Temperatura (

C) 14 6 3 6 7 6 7 4 8 7 6 4
Germinac ao (dias) 10 26 41 29 27 27 19 28 19 31 29 33
(a) Faca o diagrama da dispers ao dos dados;
(b) Use a func ao datafit para determinar uma relac ao entre temperatura e o tempo de germinac ao das
sementes;
(c) Faca o gr aco com a func ao encontrada e o diagrama de dispers ao.
3. Um autom ovel, viajando por uma estrada reta, e cronometrado em diversos pontos. Os dados dessas
observac oes s ao apresentados na tabela a seguir:
Tempo (s) 0 3 5 8 13
Dist ancia (ft) 0 225 383 623 993
Velocidade (ft/s) 75 77 80 74 72
Use um spline c ubico restrito para prever a posic ao do autom ovel e sua velocidade quanto t = 10s.
4. Suspeita-se que o alto conte udo de tanino existente nas folhas maduras do carvalho inibe o crescimento
das larvas da mariposa de inverno, que danicam severamente essas arvores em certos anos. A tabela a
seguir relaciona o peso m edio de duas amostras de larvas em v arios momentos durante o perodo de 28
dias ap os o nascimento. A primeira amostra foi cultivada em folhas de carvalho novas e a segunda, em
folhas maduras da mesma arvore.
(a) Faca o gr aco de dispers ao dos dados;
40
Exerccios CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


Dia 0 6 10 13 17 20 28
Peso m edio da amostra 1 (mg) 6.67 17.33 42.67 37.33 30.1 29.31 28.74
Peso m edio da amostra 2 (mg) 6.67 16.11 18.89 15 10.56 9.44 8.89
(b) Use um spline c ubico natural para aproximar a curva de peso m edio de cada amostra;
(c) Encontre uma aproximac ao do peso m edio m aximo para cada amostra determinando o ponto m aximo
do spline;
(d) Faca um gr aco com as duas curvas, em cores diferentes e com legenda para cada curva, juntamente
com a dispers ao dos dados.
5. O custo do seguro sa ude nos Estados Unidos para os anos de 19942001, em bilh oes de d olares, e dado
pela tabela:
Ano 1994 1995 1996 1997 1998 1999 2000 2001
Seguro Sa ude 55.8 58.0 56.6 59.3 63.6 65.7 70.6 75.0
(a) Faca o gr aco de dispers ao dos dados;
(b) Use a func ao datafit para ajustar uma curva que melhor modelo o custo do seguro sa ude ao longo
dos anos;
(c) Gere um gr aco com a func ao encontrada e a dispers ao dos dados.
6. O Consumer Price Index (CPI) e uma medida da m edia de precos, num determinado perodo, de servicos
e produtos. Para estabelecer uma base para comparac ao, a m edia anual de precos mensais nos anos de
198284 e usada para gerar os dados que segue na tabela abaixo para produtos derivados do tabaco. A
tabela representa a porcentagem de consumo deste produto.
Ano 1970 1975 1980 1985 1990 1995 1999 2000 2001
Tabaco (CPI) 43.1 54.7 72.0 116.7 181.5 225.7 355.8 374.9 425.2
(a) Faca o gr aco da dispers ao destes dados;
(b) Usando a func ao datafit ajuste a melhor curva para estes dados;
(c) A curva pode ser uma reta ? Por qu e ?
(d) Acrescente no gr aco do item (a) a curva obtida;
(e) Usando a curva obtida, qual ser a o CPI do tabaco em 2010 ?
7. Anualmente, o governo dos Estados Unidos gasta boa parte do seu dinheiro com a dvida interna. A
tabela que segue mostra a porcentagem destinada para o pagamento da dvida interna para os anos de
19912002.
Ano 1991 1993 1995 1997 1999 2001 2002
% gasta 21.6 20.8 22.0 22.2 20.7 19.3 16.4
(a) Faca o gr aco da dispers ao destes dados;
(b) Usando a func ao datafit ajuste a melhor curva para estes dados;
41
Exerccios CAP

ITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB


(c) Acrescente no gr aco do item (a) a curva obtida;
(d) Usando a curva obtida, qual ser a o gasto com a dvida interna em 2010 ?
8. O census nos Estados Unidos e realizado a cada 10 anos. A tabela abaixo mostra o census realizado
desde 1940 at e 2000 (em milh ao).
Ano 1940 1950 1960 1970 1980 1990 2000
Populac ao U.S. 132 151 179 203 227 249 281
(a) Faca o gr aco da dispers ao destes dados;
(b) Usando a func ao datafit ajuste para uma curva linear;
(c) Acrescente no gr aco do item (a) a curva obtida;
(d) Usando a curva obtida, estime a populac ao em 2010 e 2020;
(e) Usando a curva obtida, estime o ano que a populac ao atingir a 320 milh oes.
9. A empresa Delta Airlines publicou uma tabela mostrando a temperatura (em F

) fora do avi ao quando este


troca de altitude (em 1000 p es).
x (Altitude em 1000 p es) 1 5 10 15 20 30 36.087
y (Temperatura) 56 41 23 5 -15 -47 -69
(a) Faca o gr aco da dispers ao destes dados;
(b) Usando a func ao datafit ajuste para uma curva linear;
(c) Acrescente no gr aco do item (a) a curva obtida;
(d) Usando a curva obtida, determine a temperatura a 40000 p es.
42
CAP

ITULO 6
Gr acos Tri-Dimensionais
6.1 Gracos Tri-dimensionais
O comando plot3d() permite tracar gr acos de superfcies z = f(x, y).
Na notac ao Scilab, as vari aveis independentes x e y s ao vetores de dimens ao n1 e n2, respectivamente,
e a vari avel z e uma matriz de dimenc ao n1 x n2. Ent ao, por essa denic ao, o elemento z(i,j) e o valor da
superfcie no ponto ( x(i), y(j) ).
Para exemplicar o uso de plot3d(), vamos considerar a func ao f(x, y) = cos(x) sen(y) no intervalo [0, 2],
com incremento 0.1 (graf tri.sci).
x = [0:0.1:2*%pi];
y = x;
z = cos(x)*sin(y);
plot3d(x, y, z)
Al em da func ao plot3d(), e de suas variac oes, o Scilab implementa outras func oes que permitem tracar
gr acos tri-dimensionais. Dentre elas, destacamos:
fplot3d: permite tracar gr acos de superfcies por func oes, como no exemplo abaixo (graf fplot3d.sci):
clear
clf()
deff( z = f(x, y), z = x.^4 - y.^4 )
x = linspace(-3,3, 30);
y = x;
fplot3d( x, y, f, alpha = 5, theta = 31 )
fplot3d1: permite tracar gr acos de superfcies denidas por func oes, como no caso anterior. Neste caso,
as superfcies s ao apresentadas em uma graduac ao de cores diferente do comando acima.
6.1.1 Gracos 3-D Especiais
As seguintes func oes permitem tracar gr acos tri-dimensionais especiais:
param3d: permite tracar curvas param etricas.
hist3d: permite tracar histogramas 3-D.
Gr acos Tri-dimensionais CAP

ITULO 6. GR

AFICOS TRI-DIMENSIONAIS
contour: permite tracar curvas de nvel para uma func ao 3-D.
// Exemplos de graficos 3-D especiais (graf_3dEsp.sci)
subplot(1,2,1)
param3d
subplot(1,2,2)
hist3d
Devo ressaltar que a sintaxe de todos os comandos pode ser vericada usando o help do Scilab.
Acompanhe mais este exemplo (param.sci) com algumas func oes especiais para gr acos 3-D.
clear
clf()
subplot(2,2,1)
x = linspace(0, 10*%pi);
param3d(sin(x), cos(x), x)
subplot(2,2,2)
clear
x = linspace(0,3*%pi);
z1 = sin(x);
z2 = sin(2*x);
z3 = sin(3*x);
y1 = zeros(x);
y3 = ones(x);
y2 = y3/2;
param3d1([x, x, x], [y1, y2, y3], list([z1, z2, z3], [2 3 4]))
// list([z1, z2, ..., zn], [colors]): o segundo elemento serve para
// atribuir cores para cada curva.
subplot(2,2,3)
clear
x = %pi*[-10:10]/10;
y = x;
deff(z = f(x, y), z = sin(x)*cos(y))
fcontour(x, y, f, 8) // ultimo elemento: no. de curvas de nivel
subplot(2,2,4)
clear
t = linspace(-2,2);
44
Detalhes da Func ao plot3d CAP

ITULO 6. GR

AFICOS TRI-DIMENSIONAIS
deff(z = f(x, y), z = 3*x - x^3 - 3*x*(y - 5)^2)
z = feval(t, t, f);
contour(t, t, z, 15)
Qual a diferenca entre param3d e param3d1 ? E entre contour e fcontour ?
6.2 Detalhes da Funcao plot3d
Apresentamos aqui algumas ferramentas adicionais para a execuc ao de gr acos 3D em ambiente Scilab,
uma vez que a func ao plot3d inclui os seguintes formatos:
plot3d( x, y, z, [theta, alpha, leg, flag, ebox] );
plot3d( x, y, z, <opt args> ) (neste caso, possui as mesmas opc oes da func ao plot2d);
plot3d( xf, yf, zf, [theta, alpha, leg, flag, ebox] );
plot3d( xf, yf, zf, <opt args> );
plot3d( xf, yf, list(zf, colors), [theta, alpha, leg, flag, ebox] );
plot3d( xf, yf, list(zf, colors), <opt args> ).
onde:
x, y, z s ao as coordenadas dos eixos x, y e z, respectivamente;
theta e alpha s ao valores dados para a visualizac ao da janela gr aca 3D(o angulo usado para visualizac ao
da gura);
leg e usado para denir uma legenda para cada eixo, separado por @, por exemplo: X@Y@Z;
Atenc ao: Na func ao plot2d, leg e usado para atribuir uma legenda em cada curva disposta na mesma
janela gr aca.
xf, yf e zf s ao matrizes de tamanho (nf, n), onde dene-se as faces usadas para desenhar a superfcie.
No caso, existem n faces, e cada face e denida por uma malha com nf n os.
flag e um vetor com tr es n umeros: flag = [mode, type, box], sendo:
mode usa um valor inteiro para colorir a superfcie desenhada (veja o help para explorar a escala de
cores surface properties);
type ajusta automaticamente a escala da gura, usando valores inteiros de 0 a 6;
box modela o tipo de escala da gura (veja axes properties).
ebox estabelece os limites do gr aco. O valor associado ` a essa opc ao e um vetor real com seis entradas
[xmin, xmax, ymin, ymax, zmin, zmax], onde xmin, xmax, ymin, ymax, zmin e zmax indicam os valores
mnimos e m aximos para os eixos x, y e z, respectivamente.
45
Detalhes da Func ao plot3d CAP

ITULO 6. GR

AFICOS TRI-DIMENSIONAIS
6.2.1 Funcao eval3d e eval3dp
As func oes eval3d e eval3dp criam uma malha para fazer o gr aco de uma func ao em tr es dimens oes.
z = eval3d(funcao, x, y):
funcao: uma func ao que aceita vetores como argumento;
x, y; vetores de tamanhos (1, n1) e (1, n2), mas e aconselh avel que os argumentos x e y tenham
o mesmo tamanho;
z: matriz de tamanho (n1, n2) (malha de n os pela intersecc ao dos vetores x e y).
Exemplo (ex eval3d.sce):
x=-5:5;y=x;
deff(z = f(x,y), z = x.*y);
z=eval3d(f,x,y);
plot3d(x,y,z);
[xf, yf, zf] = eval3dp(funcao, p1, p2), calcula as faces de uma superfcie param etrica 3D, onde:
[xf, yf, zf]: matrizes de tamanho ( 4, (n-1)*(m-1) ). O elementos xf(:, i), yf(:, j) e
zf(:, i) s ao as coordenadas dos eixos x, y e z, respectivamente, de 4 pontos dos 4 lados de cada
face;
funcao: uma func ao implementada em ambiente Scilab;
p1: um vetor de tamanho n;
p2: um vetor de tamanho m;
Exemplo (ex eval3dp.sce):
p1=linspace(0,2*%pi,20);
p2=linspace(0,2*%pi,20);
deff("[x,y,z] = sp(p1,p2)", ["x=p1.*sin(p1).*cos(p2)";..
"y=p1.*cos(p1).*cos(p2)";..
"z=p1.*sin(p2)"])
[xf,yf,zf]=eval3dp(sp,p1,p2);
plot3d(xf,yf,zf)
6.2.2 Exemplo
// spline_solido.sce
clear
clf()
x = [0:0.2:4];
y = sqrt( 4 - (x - 2)^2 );
subplot(2,2,1)
plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])
b = splin(x, y, natural);
xx = linspace(0,4);
yy = interp(xx, x, y, b);
46
Detalhes da Func ao plot3d CAP

ITULO 6. GR

AFICOS TRI-DIMENSIONAIS
plot2d(xx, yy, 2)
xtitle(Grafico da Interpolacao por vetores)
subplot(2,2,2)
deff(ys = fs(xs), ys = interp(xs, x, y, b));
plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])
fplot2d(xx, fs, 3)
xtitle(Grafico da Interpolacao por funcao)
subplot(2,2,3)
deff( [xa,ya,za] = revol(zp, theta), [xa = fs( zp ) .* cos( theta ),...
ya = fs( zp ) .* sin( theta ),...
za = zp] );
// A nova discretizacao
zp = linspace( min( x ), max( x ), 30 );
theta = linspace( 0, 2*%pi, 30 );
// Faces do poligono (coisa de computacao grafica...)
[xf, yf, zf] = eval3dp( revol, zp, theta );
// O grafico, finalmente!
plot3d( xf, yf, zf, alpha = 88, theta = 35 );
xtitle(Solido de revolucao)
subplot(2,2,4)
plot3d( xf, yf, zf, alpha = 85, theta = 30, flag = [30, 2, 3] )
xtitle(Solido de revolucao com outra cor!)
6.2.3 Outro Exemplo
// solido_ex.sce
clear
clf()
subplot(1,2,1)
deff(y = f(x), y = exp(-x.^2))
x = linspace( -2, 2 );
fplot2d( x, f, 2, rect = [-2, 0, 2, 1.2] )
subplot(1,2,2)
deff([xs, ys, zs] = rev(r, t), [xs = f(r) .* cos(t), ...
ys = f(r) .* sin(t), zs = r])
r = linspace( -2, 2, 30 );
t = linspace( 0, 2*%pi, 30 );
47
[xf, yf, zf] = eval3dp( rev, r, t );
plot3d( xf, yf, zf, alpha = 82, theta = 50, flag = [17, 2, 3] )
6.3 Exerccios
1. Faca o gr aco das func oes abaixo:
(a) f(x, y) = x
2
+ y
2
;
(b) f(x, y) = xy + 3x;
(c) f(x, y) = x
2
+ y
2
1;
(d) f(x, y) = 5;
(e) f(x, y) = y
2
+ 3x;
(f) f(x, y) = xy
3
+ 4x
2
2;
(g) f(x, y) =
_
1 x
2
y
2
;
(h) f(x, y) =
_
x
2
+ y
2
;
(i) f(x, y) = y sen(x);
(j) f(x, y) = x
2
y;
(k) f(x, y) = 4x
2
+ y
2
.
2. Esboce gracamente as curvas de nvel associadas a f:
(a) f(x, y) = y
2
x
2
;
(b) f(x, y) = xy;
(c) f(x, y) = 3x 2y;
(d) f(x, y) = x
2
+ y
2
.
3. Faca o s olido de revoluc ao das seguintes func oes (escolha o intervalo e o eixo de rotac ao adequada-
mente):
(a) f(x) = x
3
;
(b) f(x) =

x 1;
(c) f(x) = |x|;
(d) f(x) =
1
x
;
(e) f(x) =

4 x
2
;
(f) f(x) =

x
2
4;
(g) f(x) =
1
(x4)
2
;
(h) f(x) = (4 + x
2
);
(i) f(x) = 2

x;
(j) f(x) = ln(x);
(k) f(x) = e
x
.
48
CAP

ITULO 7
Exerccios Adicionais
1. Podemos denir as func oes seno, cosseno e tangente hiperb olicos como:
sinh (x) =
e
x
e
x
2
, cosh (x) =
e
x
+e
x
2
, tanh (x) =
e
x
e
x
e
x
+e
x
Escreva tr es func oes no Scilab que implementem o seno, o cosseno e a tangente hiperb olicos;
Escreva um programa que utilize suas func oes para desenhar a forma das func oes seno, cosseno e
tangente hiperb olicos numa mesma janela gr aca.
2. O produto vetorial entre dois vetores V
1
e V
2
e denido como:
V
1
V
2
= (V
y1
V
z2
V
y2
V
z1
) i + (V
z1
V
x2
V
z2
V
x1
) j + (V
x1
V
y2
V
x2
V
y1
) k
onde V
1
= V
x1
i + V
y1
j + V
z1
k e V
2
= V
x2
i + V
y2
j + V
z2
k.
Escreva uma func ao para calcular o produto vetorial de dois vetores V
1
e V
2
. Note que essa func ao
retorna um vetor real como resultado;
Utilize a func ao para calcular o produto vetorial dos vetores V
1
= [2, 4, 0.5] e V
2
= [0.5, 3, 2].
3. Escreva uma func ao chamada min max que tente localizar os valores m aximos e mnimos de uma func ao
real f(x) arbitr aria dentro de um intervalo xo [a, b]. Os argumentos de entrada de min max devem ser:
func O nome da func ao;
prim val O primeiro valor de x (a, no intervalo de busca);
ult val O ultimo valor de x (b, no intervalo de busca);
passos O n umero de passos de busca.
Os seguintes argumentos de sada devem ser:
xmin O valor de x no qual o mnimo foi encontrado;
min value O mnimo encontrado de f(x);
xmax O valor de x no qual o m aximo foi encontrado;
max value O m aximo encontrado de f(x).
4. Escreva um programa de teste para a func ao min max criada no exerccio anterior. O programa deve
passar para min max uma func ao denida pelo usu ario f(x) = x
3
5x
2
+ 5x 2, e encontrar o mnimo e
o m aximo com 200 passos no intervalo 1 x 3. Os valores resultantes de mnimo e m aximo devem
ser impressos.
5. A derivada de uma func ao contnua f(x) e denida pela equac ao:
d
dx
f(x) = lim
x0
f(x + x) f(x)
x
Em uma func ao amostrada, a denic ao se torna:
f

(x
i
) =
f(x
i+1
) f(x
i
)
x
(7.1)
onde x = x
i+1
x
i
. Suponha que um vetor vect cont em nsamp amostras de uma func ao espacadas de
dx.
Escreva uma func ao que calcule a derivada desse vetor usando a aproximac ao em (7.1). A func ao
deve vericar se dx e maior que zero para previnir erros de divis ao por zero na func ao.
Para vericar sua func ao, voc e deve gerar um conjunto de dados cuja derivada seja conhecida e
comparar o resultado da func ao com a resposta correta. Uma boa escolha para uma func ao de teste
e f(x) = sen(x). Do c alculo elementar, sabemos que f

(x) = cos(x). Gere um vetor com 100 valores


da func ao f(x) = sen(x), iniciando com x = 0 e utilizando um passo x = 0.05. Calcule a derivada
do vetor com a sua func ao e compare os resultados com a resposta correta.
Faca um gr aco com os valores calculados pela equac ao (7.1) de maneira discretizada e um gr aco
da func ao f(x) = cos(x) contnua.
Qu ao pr oximo cou a sua func ao do c alculo da resposta correta para a derivada ?
6. A forca gravitacional F entre dois corpos com massas m
1
e m
2
e dada pela equac ao:
F =
Gm
1
m
2
r
2
onde G e a constante gravitacional
_
6.672 10
11
Nm
2
/kg
2
_
, m
1
e m
2
s ao as massas dos corpos em
quilogramas e r e a dist ancia entre os dois corpos. Escreva uma func ao para calcular a forca gravitacional
entre dois corpos dadas as suas massas e a dist ancia entre eles. Teste a sua func ao determinando a
forca sobre um sat elite de 800 kg em orbita a 38000 km da superfcie da Terra. (A massa da Terra e de
5.98 10
24
kg.)
7. Suponha que voc e tenha uma quantidade de dinheiro P em um investimento no banco (usamos P para in-
dicar valor presente). Se o banco pagar os juros com taxa de i% ao ano e compuser os juros mensalmente,
a quantidade de dinheiro que voc e ter a no banco depois de n meses ser a dada pela equac ao:
F = P
_
1 +
i
1200
_
n
onde F e o valor futuro da conta e
i
12
e a taxa de juros mensal (o fator extra de 100 no denominador
converte a taxa de interesse de porcentagens para frac oes). Escreva um programa para ler uma quantia
inicial P e uma taxa de juros anual i, calcular e gerar uma matriz do valor futuro do investimento a cada
m es dos pr oximos cinco anos.
50
CAP

ITULO 7. EXERC

ICIOS ADICIONAIS
8. Os antigos babil onios usavam a seguinte aproximac ao (baseada no M etodo de Newton) para calcular

a:
x
k+1
=
1
2
_
x
k
+
a
x
k
_
Escreva uma func ao para calcular

a usando a aproximac ao acima:
A sua func ao deve receber um chute inicial para a raiz;
Execute o c alculo acima at e que |x
k+1
x
k
| < , onde e um valor sucientemente pequeno;
Use a sua func ao para calcular

25,

21 e

5000, e compare com os valores fornecidos pela calcu-
ladora e/ou pelo Scilab.
9. Usando o m etodo de Newton, podemos calcular a raiz
p

a, a 0 atrav es da seguinte f ormula de recorr ecia:


x
x+1
=
1
p
_
(p 1)x
k
+
a
x
p1
k
_
, com x
0
> 0.
Escreva uma func ao para calcular
p

a usando a aproximac ao acima:


A sua func ao deve receber um chute inicial para a raiz e a sua pot encia (p);
Execute o c alculo acima at e que |x
k+1
x
k
| < , onde e um valor sucientemente pequeno;
Use a sua func ao para calcular
3

125,
4

14641 e
3

14, e compare com os valores fornecidos pela


calculadora e/ou pelo Scilab.
10. O M etodo de Newton pode ser aplicado a qualquer equac ao contendo func oes cujas derivadas possam
ser calculadas. Por exemplo, ache uma aproximac ao para o recproco de um n umero positivo C, denindo
a func ao f(x) =
1
x
C e aplicando o M etodo de Newton.
Observac ao: O M etodo de Newton aplicado a essa func ao nos permite calcular o inverso de um n umero
sem efetuar nenhuma divis ao! Este m etodo e util porque, na maioria dos computadores de alta velocidade,
a operac ao de divis ao consume mais tempo do que v arias multiplicac oes e adic oes juntas.
Escreva uma func ao (no inverso.sci)para este problema onde devemos fornecer apenas o n umero
C.
Escreva um programa que leia a func ao no inverso.sci e execute a func ao para um dado C.
Dado x
0
, f(x), f

(x), max e
1: Para k = 0 at e k = max fac a
2: x
x+1
= x
k

f(x
k
)
f

(x
k
)
3: Se |f(x
k+1
)| ou |x
k+1
x
k
| ent ao
4: PARE, x = x
k+1
5: Fim do condicional
6: Se k = max ent ao
7: PARE, o m etodo n ao converge para a soluc ao.
8: Fim do condicional
9: Fim do lac o
Algoritmo 2: M etodo de Newton-Raphson
51
Refer encias Bibliogr acas
[1] R. L. Burden, J. D. Faires. An alise Num erica. Pioneira Thomson Learning, 2003.
[2] F. F. Campos Fo. Algoritmos Num ericos. LTC Editora, 2001.
[3] S. J. Chapman. Programac ao em Matlab para Engenheiros. Pioneira Thomson Learnin, 2003.
[4] D. Hanselman, B. Littleeld. Matlab 6 Curso Completo, Pearson Prentice Hall, 2003.
[5] D. R. Hill, D. E. Zitarelli. Linear Algebra Labs with Matlab. Third Edition, Pearson Prentice Hall, 2004.
[6] E. Y. Matsumoto. Matlab 7: Fundamentos. Editora

Erica, 2004.
[7] P. S. M. Pires. Introduc ao ao Scilab: vers ao 3.0. http://www.dca.ufrn.br/~pmotta
[8] www.rau-tu.unicamp.br/scilab/
[9] http://www.scilab.org
52

Você também pode gostar