Buscar

Apostila LCM

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 53 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

LABORATO´RIO DE MATEMA´TICA COMPUTACIONAL – SCILAB
Luiza Amalia Pinto Canta˜o
luiza@sorocaba.unesp.br
Suma´rio
1 Introduc¸a˜o ao Ambiente Scilab 2
1.1 O Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Varia´veis Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Arquivos *.sce de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 A´lgebra Linear Nume´rica 7
2.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 Matrizes Padra˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 Acesso aos elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Matema´tica Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 Uso de Scilab na Soluc¸a˜o de Sistemas Lineares: Me´todos Diretos . . . . . . . . . . . . . . . . . 14
2.6 Exercı´cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3 Projeto de Programac¸a˜o 17
3.1 Operadores Relacionais e Lo´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.2 Operadores Lo´gicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2 O Loop for e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Estrutura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Definic¸a˜o de Func¸o˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.5 Exercı´cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4 Gra´ficos no Scilab 27
4.1 A Janela Gra´fica do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2 Gra´ficos Bi-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.2.1 Outros Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.3 Exercı´cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 Ajuste de Curvas em Ambiente Scilab 35
5.1 Definindo a Func¸a˜o de Ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Spline Cu´bicas em Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Exercı´cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6 Gra´ficos Tri-Dimensionais 43
6.1 Gra´ficos Tri-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.1.1 Gra´ficos 3-D Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.2 Detalhes da Func¸a˜o plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2.1 Func¸a˜o eval3d e eval3dp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.2 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2.3 Outro Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.3 Exercı´cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
7 Exercı´cios Adicionais 49
Refereˆncias Bibliogra´ficas 52
1
CAPI´TULO 1
Introduc¸a˜o ao Ambiente Scilab
1.1 O Ambiente Scilab
O Scilab e´ um ambiente utilizado no desenvolvimento de programas para a resoluc¸a˜o de problemas nume´ricos.
Vamos conhecer um pouco mais sobre o seu ambiente de trabalho.
Tendo iniciado o programa (isto depende do sistema operacional), voceˆ vera´ mensagens do fabricante e um
pequeno “prompt” de comando aguardando alguma ac¸a˜o sua:
-----------------------------------------------
scilab-5.3.0
Consortium Scilab (DIGITEO)
Copyright (c) 1989-2010 (INRIA)
Copyright (c) 1989-2007 (ENPC)
------------------------------------------------
Startup execution:
loading initial environment
-->
A flecha --> indica que o Scilab esta´ pronto para receber comandos e o cursor e´ o prompt inicial. Na janela
do Scilab ha´ um menu horizontal com seis opc¸o˜es: File, Edit, Preferences, Control, Applications e ?. Utilizando
o mouse escolha uma das opc¸o˜es.
• File – possui oito sub-opc¸o˜es (apresentaremos as quatro mais importantes):
– Execute: executa o conteu´do de arquivos (roda o programa implementado).
– Open a file: Abre o arquivo do seu programa no editor de texto do Scilab.
– Change current directory: Muda o direto´rio em que o Scilab foi aberto para o direto´rio do arquivo
(programa).
– Quit: permite sair do ambiente Scilab de forma natural.
Varia´veis Especiais CAPI´TULO 1. INTRODUC¸A˜O AO AMBIENTE SCILAB
• Edit – comandos semelhantes ao editor de texto do Microsoft Office ou Open Office (cut, copy, paste,
select all);
• Preferences – o comando mais importante desta opc¸a˜o e´ o Clear Console que limpa a janela de execuc¸a˜o
do ambiente Scilab.
• Control – possui treˆs sub-opc¸o˜es cuja utilidade dos dois primeiros itens pode ser observada na sequ¨eˆncia
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¸a˜o de um programa.
• Applications – aplicativos do ambiente Scilab:
– SciNotes – abre um editor de texto pro´prio para programac¸a˜o em ambiente Scilab.
• ? – informac¸o˜es e ajuda sobre o ambiente Scilab. Esta possui quatro sub-opc¸o˜es:
– Scilab Help: informac¸o˜es sobre os comandos do ambiente Scilab.
– Scilab Demonstration: Demonstrac¸a˜o de alguns comandos deste ambiente de trabalho.
– Web Links: sites relacionados ao Scilab.
– About Scilab: mostra a licenc¸a de uso do programa.
Ainda na janela do Scilab ha´ alguns icones abaixo do menu descrito acima. Estes icones sa˜o atalhos para
as func¸o˜es mais usadas no menu acima.
1.2 Varia´veis Especiais
Algumas varia´veis assumem valores pre´-definidos 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
Varia´veis Especiais CAPI´TULO 1. INTRODUC¸A˜O 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 variablesare:
%modalWarning demolist %driverName %exportFileName
%toolboxes %toolboxes_dir
using 623 elements out of 180001.
and 6 variables out of 767.
-->
Vejamos o significado das varia´vies mais recorrentes:
Varia´vel O que significa Varia´vel O que significa
%i Valor de
p
(−1) %pi pi = 3, 1415926...
%e Constante de Euler e = 2, 7182818... %eps precisa˜o da ma´quina no qual o Scilab esta´ instalado.
%inf Infinito %nan Not a number
Para saber em qual direto´rio o Scilab foi instalado, use a varia´vel SCI e para saber em qual direto´rio 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 CAPI´TULO 1. INTRODUC¸A˜O AO AMBIENTE SCILAB
/home/luiza
-->
1.3 Arquivos *.sce de Comandos
Para problemas simples, e´ mais ra´pido e eficiente introduzir seus comandos no prompt do Scilab. Mas,
se o nu´mero de comandos e´ grande, ou se voceˆ deseja mudar o valor de uma ou mais varia´veis e re-executar
alguns comandos, pode ser trabalhoso e/ou tedioso introduzir os comandos no prompt. O Scilab apresenta
uma soluc¸a˜o simples para esse problema: voceˆ 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 executa´-lo no Scilab.
Atenc¸a˜o: no Scilab, ponto-e-vı´rgula no final de um comando inibe a apresentac¸a˜o de seu resultado e,
qualquer caracter apo´s o uso de // e´ ignorado pelo Scilab pois este e´ interpretado como comenta´rio. Tambe´m
e´ importante salientar que os comenta´rios (e os nomes das varia´veis e func¸o˜es utilizados no Scilab) NA˜O
devem ter qualquer tipo de acentuac¸a˜o.
Abra o Editor de texto SciPad atrave´s 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 direto´rio 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 · √3) usando o comando format com 100
dı´gitos.
Um outro programinha para se testar com uma estrutura diferente da apresentada abaixo, e´ para calcular o
nu´mero de faltas possı´veis 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 CAPI´TULO 1. INTRODUC¸A˜O 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 Ca´lculo Nume´rico e Computacional.
6
CAPI´TULO 2
A´lgebra Linear Nume´rica
Vamos comec¸ar com as estruturas sobre as quais toda a filosofia Scilab (e linguagens nume´ricas) esta´
baseada.
2.1 Vetores
Para criar um vetor no Scilab e´ muito simples. Apenas deve ser tomado cuidado com a diferenciac¸a˜o 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.
Voceˆ acaba de criar um vetor linha! Neste caso, as vı´rgulas sa˜o desnecessa´rias; poderı´amos 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 treˆs opc¸o˜es: cria´-los diretamente, usar o operador de transposic¸a˜o, ’ (apo´strofo)
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 CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
e finalmente
-->v = [1
-->2
-->3]
v
1.
2.
3.
Note que neste u´ltimo caso, o Scilab ficou esperando que se completasse o vetor com “ ] ”.
Um jeito pra´tico de criar vetores igualmente espac¸ados 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 especificar um incremento (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¸a˜o linspace cujos elementos desta func¸a˜o
sa˜o:
linspace( primeiro_valor, ultimo_valor, numero_de_elementos )
Se o nu´mero de elementos e´ omitido, a func¸a˜o gera automanticamente 100 elementos.
--> x = linspace( 0, %pi)
--> x = linspace( 0, %pi, 11)
Veja que, a notac¸a˜o “ : ” permite especificar o intervalo entre os pontos, mas na˜o o nu´mero de pontos. Por
outro lado, a func¸a˜o linspace permite especificar o nu´mero de elementos mas na˜o o intervalo entre os pontos.
Comandos Descric¸a˜o
x = inicio:fim Cria um vetor linha comec¸ando em inicio, incrementa em um
e pa´ra em fim (ou antes).
x = inicio:incremento:fim Cria um vetor linha comec¸ando em inicio, incrementa em incremento
e pa´ra em fim (ou antes).
x = linspace(inicio,fim,n) Cria um vetor linha, com espac¸amento linear, comec¸ando em inicio
e terminando em fim com n elementos.
x = linspace(inicio,fim) Cria um vetor linha, com espac¸amento linear, comec¸ando em inicio
e terminando em fim com cem (100) elementos.
Tabela 2.1: Comandos ba´sicos para a construc¸a˜o de vetores.
8
Matrizes CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
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¸a˜o size(.) mostra o tamanho da sua matriz ou vetor.
Note que podemos utilizar o operador “ : ” em combinac¸a˜o com o que foi visto ate´ 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 Padra˜o
Dada a utilidade deste tipo de matrizes, o Scilab conte´m func¸o˜es para a criac¸a˜o de matrizes padra˜o. Esse
tipo de matriz inclui aqueles cujos elementos sa˜o todos iguais a zero ou a um, matriz identidade, matrizes de
nu´meros aleato´rios, matrizes diagonais e cujos elementos sa˜o 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 CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
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 aleato´rias 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 CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
A func¸a˜o diag(.) cria matrizes diagonais em que um vetor determinado pode ser colocado em qualquer
posic¸a˜o paralela a` diagonal principal ou na pro´pria diagonal principal.
Com essas matrizes padra˜o, ha´ va´rias formas de se criar uma matriz em que todos os elementos apresentam
o mesmo valor. Execute os pro´ximos comandos e verifique 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¸a˜o Propo´sito
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 ficam na diagonal principal.
rand(n,m) Gera uma matriz n×m com valores aleato´rios em (0, 1);
size(.) Retorna dois valores, especificando o nu´mero de linhas e o de colunas de uma matriz ou vetor em (.).
Tabela 2.2: Func¸o˜es Scilab para gerar matrizes padra˜o.
2.3 Acesso aos elementos
O Scilab da´ ao usua´rio va´rios modos de acesso aos vetores e matrizes. O mais simples deles e´ sim-
plesmente digitando o nome do vetor/matriz criado. Caso voceˆ na˜o se lembre do que criou, use o comando
whos.
Ha´ duas formas de usar o comando whos:
• whos(): Lista todas as func¸o˜es do Scilab, apresentando o nome da func¸a˜o, o tipo (constante, varia´vel,
booleana, e assim por diante), o tamanho e os bytes usado para a func¸a˜o apresentada.
• whos: Neste caso e´ preciso especificar o tipo de func¸a˜o que voceˆ deseja verificar (veremos um exemplo
no final desta sec¸a˜o).
--> A
A
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
Para acessar a matriz um elemento por vez, use pareˆnteses:
--> v = [7; 19; 21];
-->v(2)
ans
19.
-->A(2,3)
ans
7.
-->A(3,2)
11
Matema´tica Matricial CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
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 voceˆ tenta acessar elementos que na˜o existem, o programa reclama.
Pore´m, a forma mais poderosa de acesso (e mais ra´pida) e´ usando o conceito de sub-matrizes. Para
usarmos partes de matrizes em operac¸o˜es, 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¸a˜o de matrizes (ou vetores). Pore´m, antes de
executar, tente prever o resultado.
-->A(3, 3:5) = [1 2 3]
2.4 Matema´tica Matricial
Para executar operac¸o˜es alge´bricas matriciais, seguiremos os seguintes exemplos:
12
Matema´tica Matricial CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
Comandos Descric¸a˜o
A (r,c) Fornece a sub-matriz A cujas linhas sa˜o definidas pelo vetor
de ı´ndice r e cujas colunas sa˜o definidas pelo vetor c.
A (r,:) Fornece a sub-matriz A cujas linhas sa˜o definidas pelo vetor
de ı´ndice r e inclui todas as colunas.
A (:,c) Fornece a sub-matriz A cujas colunas sa˜o definidas 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: Refereˆncia 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 certifique-se que entendeu o enderec¸amento das matrizes e vetores! Isto e´ muito
importante!!!
Observe a tabela 2.4.
Operac¸o˜es com elementos Dados representativos
de vetores e matrizes A = [a1 a2 . . . an]
dados B = [b1 b2 . . . bn], c ∈ R
Adic¸a˜o a escalar A+ c = [a1 + c a2 + c . . . an + c]
Subtrac¸a˜o por escalar A− c = [a1 − c a2 − c . . . an − c]
Multiplicac¸a˜o por escalar A ∗ c = [a1 ∗ c a2 ∗ c . . . an ∗ c]
Divisc¸a˜o por escalar A/c = [a1/c a2/c . . . an/c]
Soma de vetores A+B = [a1 + b1 a2 + b2 . . . an + bn]
Multiplicac¸a˜o de vetores A. ∗B = [a1. ∗ b1 a2. ∗ b2 . . . an. ∗ bn]
Divisa˜o de vetores pela direita A./B = [a1./b1 a2./b2 . . . an./bn]
Divisa˜o de vetores pela esquerda B.\A = [a1./b1 a2./b2 . . . an./bn]
Potenciac¸a˜o de vetores A.ˆc = [a1ˆc a2ˆc . . . anˆc]
c.ˆA = [cˆa1 cˆa2 . . . cˆan]
A.ˆB = [a1ˆb1 a2ˆb2 . . . anˆbn]
Tabela 2.4: Operac¸o˜es ba´sicas 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¸a˜o de Sistemas Lineares: Me´todos DiretosCAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
execute as operac¸o˜es apresentadas na Tabela 2.4.
2.5 Uso de Scilab na Soluc¸a˜o de Sistemas Lineares: Me´todos
Diretos
Considere o sistema Ax = b, associado a` matriz A e ao vetor b, definidos como segue:
--> A = [ 3 -2 2; 1 1 1; 2 1 -1 ];
--> b = [ -3 -4 -3 ]’
Apresentamos a seguir algumas func¸o˜es definidas no Scilab relacionados a` Soluc¸a˜o de Sistemas Lineares
– Me´todos Diretos. Mais informac¸o˜es podem ser obtidas pelo recurso help seguido da func¸a˜o de interesse (por
exemplo, help lu mostra detalhes sobre o ca´lculo da decomposic¸a˜o 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¸a˜o LU . Para obter a decomposic¸a˜o A = LU , e resolver o sistema a
partir dela use:
-->[ L, U ] = lu(A)
--> y = L \ b
--> x = U \ y
Note que o Scilab na˜o confundiuU com u, o que indica que o programa e´ sensı´vel ao caso (maiu´sculas
e minu´sculas). Repare tambe´m na forma como o Scilab retornou dois argumentos (L e U ) da func¸a˜o,
o que e´ uma caracterı´stica incomum em linguagens de programac¸a˜o, pore´m corriqueira em linguagem
nume´rica, como o Scilab. Tambe´m poderı´amos ter feito a operac¸a˜o 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¸a˜o do pivoteamento usado no ca´lculo 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. Ca´lculo da func¸a˜o inversa da matriz A: Um Sistema Linear tem soluc¸a˜o u´nica se a matriz A for inversı´vel.
Uma maneira de testar esta condic¸a˜o e´ usando a func¸a˜o inv(.) do Scilab:
--> IA = inv(A)
--> IA * A
--> x = IA * b
4. Uma outra func¸a˜o do Scilab interessante e´ a que calcula o valor do determinante de uma matriz (det(.)):
-->d = det(A)
Pergunta: Qual a relac¸a˜o existente entre det(A) e det(U) ?
14
Exercı´cios CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
2.6 Exerc´ıcios
1. Digite as seguintes matrizes no ambiente
Scilab:
A =
 4 −32 1
0 6
 , B =
 1 2 42 4 1
0 1 5
 , C =
 58
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 u´ltimas linhas de A;
2. Considere as matrizes A, B e o vetor C do
exercı´cio anterior. Defina uma nova matriz D
com o mesmo conteu´do de A. Fac¸a a mudanc¸a
ou execute a operac¸a˜o - 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
conteu´do de E em termos de D e C;
(d) Execute o comando F = [D B]. Descreva o
conteu´do de F em termos de D e B;
(e) Execute o comando G = [E; B]. Descreva
o conteu´do 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 sa˜o
c1 e c2 sem repetir a entrada dos elemen-
tos;
(d) Construa uma matriz K onde as duas pri-
meiras colunas sa˜o 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 M cujas linhas sa˜o 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 a`s questo˜es seguintes considerando a
matriz abaixo.
c =
 1.1 −3.2 3.4 0.60.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.
Verifique 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) apo´s a execuc¸a˜o da ex-
pressa˜o (g)?
11. Considere a matriz do exercı´cio (1). Determine o
conteu´do 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
Exercı´cios CAPI´TULO 2. A´LGEBRA LINEAR NUME´RICA
(f) c([2 2 2], [3 3 3])
(g) c([1 2 2], [3 3])
12. Determine o conteu´do da matriz a apo´s a exe-
cuc¸a˜o das seguintes declarac¸o˜es:
(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 conteu´do da matriz a apo´s a
execuc¸a˜o das seguintes declarac¸o˜es:
(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:
aij =
1
i+ j − 1 , bi =
1
i
, i, j = 1 : n
use n = 5, 10 e 15. Voceˆ pode explicar os
resultados? Observe que a soluc¸a˜o exata e´
(1, 0, 0, . . . , 0)t
15. Duas quantias de dinheiro x1 e x2 somam
$600, 00. A quantia x1 e´ o dobro de x2. Resolva
o sistema usando a func¸a˜o LU do Scilab.
16. Sa˜o 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¸a˜o LU do Scilab.
Resposta: x1 = $3200, 00 para 6% e x2 =
$4800, 00 para 9%.
17. Encontre a, b e c tais que o gra´fico do cı´rculo com
equac¸a˜o x2 + y2 + ax + bx + c = 0 passe pelos
pontos (1, 5), (4, 4) e (3.1). Resolva o sistema
usando a func¸a˜o LU do Scilab.
Resposta: a = −4, b = −6 e c = 5.
18. A quantia de $16500, 00 foi investida em treˆs 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¸a˜o 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¸a˜o da para´bola
y = ax2+bx+c passe pelos pontos (1, 4), (−1, 6)
e (2, 12). Resolva o sistema usando a func¸a˜o LU
do Scilab.
Resposta: a = 3, b = −1 e c = 2.
16
CAPI´TULO 3
Projeto de Programac¸a˜o
Programar e´ fa´cil. Saber o que programar e´ difı´cil.a
aCitac¸a˜o de [3].
Uma das caracterı´sticas da linguagem nume´rica e´ a facilidade com que o usua´rio cria seus pro´prios progra-
mas.
Apesar de simples, a linguagem nume´rica disponibiliza a maioria das estruturas das linguagens de programac¸a˜o
convencionais. A diferenc¸a principal e´ que, na programac¸a˜o Scilab, na˜o ha´ necessidade da declarac¸a˜o pre´via
dos tipos das varia´veis que sera˜o utilizadas ao longo do programa.
As linguagens nume´ricas, como e´ o caso do Scilab, e´ um interpretador de comandos. Os programas
escritos em linguagem nume´rica sa˜o executados em um tempo maior que os programas semelhantes escri-
tos em linguagens compila´veis. Por outro lado, a vantagem de linguagens nume´ricas adve´m da facilidade de
prototipac¸a˜o de programas e da disponibilidade de uma poderosa biblioteca de func¸o˜es gra´ficas.
Neste propo´sito, abordaremos aqui a estrutura de programac¸a˜o em ambiente nume´rico, em especial, no
ambiente Scilab. Na sec¸a˜o 3.1 sera˜o abordados os operadores relacionais e lo´gicos, na sec¸a˜o 3.2 a estrutura
de Loop, na sec¸a˜o 3.3 a estrutura if (condicional) e na sec¸a˜o 3.4 a definic¸a˜o de manipulac¸a˜o de func¸o˜es em
ambiente Scilab.
3.1 Operadores Relacionais e Lo´gicos
Ale´m das operac¸o˜es matema´ticas convencionais, o Scilab tambe´m inclui operac¸o˜es relacionais e lo´gicas,
cuja finalidade 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 expresso˜es lo´gicas 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¸o˜es habituais esa˜o listados na Tabela 3.1.
Atenc¸a˜o: Os sı´mbolo = e == teˆm significados diferentes! O sı´mbolo == compara duas varia´vies e retorna T
se forem iguais e F se forem diferentes; o sı´mbolo = e´ usado para atribuir o resultado de uma operac¸a˜o a uma
varia´vel.
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:
1Em outros ambientes de programac¸a˜o a reposta para uma sentenc¸a verdadeira e´ 1 e 0 para uma resposta falsa.
Operadores Relacionais e Lo´gicos CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
Operador Descric¸a˜o
< 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 tambe´m que o teste de igualdade a`s vezes produz resultados confusos para operac¸o˜es em ponto
flutuante. Execute as operac¸o˜es 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´ possı´vel combinar expresso˜es relacionais com expresso˜es matema´ticas:
--> B = 9 - A;
--> B = B + (B==0)*(%eps)
e´ uma maneira de substituir os elementos iguais a zero em um vetor pelo nu´mero %eps2. Essa expressa˜o em
particular e´, algumas vezes, u´til para evitar a divisa˜o 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 Lo´gicos
Os operadores lo´gicos permitem que se combinem ou se neguem expresso˜es relacionais. Os operadores
lo´gicos do Scilab sa˜o dados na Tabela 3.2.
Operador Descric¸a˜o
& E
| OU
~ NA˜O
Tabela 3.2: Operadores lo´gicos.
--> 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
2O nu´mero %eps, em Scilab, e´ a menor diferenc¸a entre dois nu´meros que e´ possı´vel representar.
18
O Loop for e while CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
3.2 O Loop for e while
O loop for possibilita que uma se´rie de comandos seja repetida por um nu´mero de vezes fixo e pre´-
determinados. A forma geral do loop for e´:
for x = vetor
comandos ...
end
Os comandos entre as instruc¸o˜es for e end sa˜o executados uma vez para cada coluna de vetor. A cada
iterac¸a˜o, atribui-se a x a pro´xima coluna de vetor, isto e´, durante o n-e´simo ciclo do loop temos que x =
vetor(:,n).
--> for n = 1:10
--> x(n) = cos( n*(%pi)/10 );
--> end
--> x
Traduzindo, a primeira instruc¸a˜o diz: “para n igual a 1 ate´ 10, calcule todas as instruc¸o˜es ata´ a pro´xima instruc¸a˜o
de end”. No primeiro ciclo de for, n = 1, no segundo, n = 2, e assim por diante, ate´ n = 10. Depois do ciclo
para n = 10, o loop for termina e os comandos apo´s a instruc¸a˜o end sa˜o executados e as componentes de x
sa˜o 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 eficiente e´ atrave´s da pre´-alocac¸a˜o de memo´ria. Ou seja, os
vetores devem ser pre´-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 sa˜o executados, o tamanho da varia´vel
x e´ incrementada de 1. Isso forc¸a o Scilab a gastar tempo para alocar mais memo´ria para x todas as vezes
que o loop e´ percorrido.
Ao contra´rio do loop for, que executa um grupo de comandos um nu´mero fixo de vezes, o loop while
executa um grupo de comandos um nu´mero indefinido de vezes, ate´ que uma certa condic¸a˜o seja satisfeita. A
forma geral do loop while e´:
while CONDICAO
comandos ...
end
Os comandos ... entre as instruc¸o˜es while e end sa˜o executados enquanto TODOS os elementos de CONDICAO
forem verdadeiros.
19
Estrutura if CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
--> num = 0; EPS = 1;
--> while (1+EPS) > 1
--> EPS = EPS/2;
--> num = num + 1;
--> end
--> num
--> EPS = EPS*2
Nesse exemplo, EPS comec¸a em 1. Enquanto (1+EPS) > 1 for verdadeiro, os comandos dentro do loop while
sa˜o executados. Uma vez que EPS e´ continuamente divivido em dois, em algum momento ele se tornara´ ta˜o
pequeno que, somando-se EPS a 1, esse resultado sera´ 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 u´ltima divisa˜o por 2 o tornou
pequeno demais.
3.3 Estrutura if
Em diversas situac¸o˜es, as sequ¨eˆncias de comandos teˆm de ser executadas condicionalmente, com base em
um teste relacional. Nas linguagens de programac¸a˜o, essa lo´gica 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¸o˜es if e end sa˜o executados se todos os elementos na expressao forem
verdadeiros.
Nos casos em que expressao envolve muitas subexpresso˜es lo´gicas, apenas as subexpresso˜es
necessa´rias para determinar o valor lo´gico da expressao sa˜o executadas. Por exemplo,
se expressao e´ (expressao1 | expressao2), enta˜o expressao2 e´ executada somente se
expressao1 for falsa. Da mesma maneira, se expressao e´ (expressao1 & expressao2), enta˜o
expressao2 so´ 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 ha´ 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 treˆs ou mais alternativas, a estrutura if-else-end toma a forma:
20
Definic¸a˜o de Func¸o˜es CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
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 u´ltima forma, somente os comandos associados a` primeira expressa˜o verdadeira encontradas sa˜o exe-
cutados; as expresso˜es relacionais seguintes na˜o sa˜o testadas e o resto da extrutura if-else-end e´ ignorada.
Ale´m disso, n~ao e´ necessa´rio que o comando final else esteja presente.
Por fim, vamos ver uma maneira possı´vel 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 nu´mero de vezes. A estrutura if-else-end testa; quando EPS fica
suficiente pequeno, o comando break forc¸a o loop for a terminar prematuramente.
Desenvolva um programa em Scilab para encontrar as raı´zes de uma equac¸a˜o do tipo ax2 +bx+c =
0.
3.4 Definic¸a˜o de Func¸o˜esUma func¸a˜o 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¸a˜o, xi, para i = 1, 2, ..., m, sa˜o os seus argumentos de entrada, yj, para j =
1, 2, ..., n sa˜o argumentos de saı´da e instrucao i, para i = 1, 2, ..., p, representa a sequ¨eˆncia de
instruc¸o˜es que devem ser executados pela func¸a˜o.
Toda func¸a˜o no Scilab e´ executada chamando seu nome seguido de seus argumentos. No exemplo, a
func¸a˜o foo e´ executada atrave´s do comando:
--> foo(x1, x2, ..., xm)
Como pode ser observado, uma func¸a˜o possui uma estrutura pre´-determinada. As principais caracterı´sticas de
uma func¸a˜o sa˜o:
21
Definic¸a˜o de Func¸o˜es CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
• As varia´veis definidas na func¸a˜o, chamadas de varia´veis locais, na˜o permanecem no ambiente Scilab
apo´s a execuc¸a˜o da func¸a˜o;
• As entradas e saı´das do programa sa˜o claramente definidas, e
• Uma func¸a˜o, apo´s ser definida, pode ser chamada a qualquer tempo.
Uma func¸a˜o pode ser criada usando um dos seguintes procedimentos:
1. Digitando no pro´prio 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¸a˜o em um arquivo e, em seguida, carregando esse arquivo no ambiente Scilab.
Por convenc¸a˜o, as func¸o˜es definidas pelo usua´rio possuem extensa˜o sci e sa˜o carregadas no ambiente
Scilab atrave´s do comando:
--> exec(’nome_do_arquivo_de_comandos.sce’)
22
Exercı´cios CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
3.5 Exerc´ıcios
1. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes expresso˜es 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 expresso˜es 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¸a˜o de cada uma das seguintes
expresso˜es, e especifique os resultados em cada caso.
a = 2; b = 3; c = 10; d = 0;
(a) a*b^2 > a*c; (b) d | b > a.
4. O custo de enviar um pacote 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¸a˜o f(x, y) para quaisquer dois valores reais, dado pelo usua´rio
para x e y, como segue:
f(x, y) =

x+ y x ≥ 0 e y ≥ 0
x+ y2 x ≥ 0 e y < 0
x2 + y x < 0 e y ≥ 0
x2 + y2 x < 0 e y < 0
6. Examine os lac¸os for a seguir e determine quantas vezes cada lac¸o sera´ 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 lac¸os a seguir e determine o valor em ires no final 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
Exercı´cios CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
ires = ires + 1;
end
end
(d) Calcule os valores da func¸a˜o:
f(t) =
{
sen(t) ∀t tal que sen(t) > 0
0 caso contra´rio
para −6pi < t < pi com intervalos de pi/10.
8. O n-e´simo nu´mero de Fibonacci e´ definido pelas equac¸o˜es 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 nu´meros maiores. Escreva um programa
fib.sci para calcular e imprimir o n-e´simo nu´mero de Fibonacci para n > 2, onde n e´ fornecido pelo
usua´rio.
9. Uma matriz An×n e´ dita diagonalmente dominante se
|aii| >
n∑
j 6=i
|aij |, i = 1 : n
Escreva uma func¸a˜o que, dada uma matriz qualquer n× n, retorne T se a matriz for diagonalmente domi-
nante e F caso contra´rio.
P.S.: O comando read, como mostra o exemplo que segue, AB = read(’nome do arquivo.txt’, no de linhas,
no de colunas)), leˆ um arquivo de dados para execuc¸a˜o no ambiente Scilab, onde AB e´ a varia´vel que
conte´m a matriz.
10. A localizac¸a˜o de um ponto em um plano cartesiano pode ser expressa por coordenadas retangulares
(x, y) ou coordenadas polares (r, θ). A relac¸a˜o entre esses dois conjuntos de coordenadas e´ dada por
estas equac¸o˜es:
x = r cos θ
y = r sin θ
r =
√
x2 + y2
θ = tg−1
(
y
x
)
Escreva duas func¸o˜es, rect2polar e polar2rect,
que convertam coordenadas de retangular para po-
lar e vice-versa, com o aˆngulo θ expresso em graus.
x
y
r
x
y
θ
11. O me´todo da bissecc¸a˜o serve para o ca´lculo apropriado de raı´zes de equac¸o˜es do tipo f(x) = 0, com
f : R→ R.
O me´todo 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 ate´ a precisa˜o desejada.
Assim:
(a) Encontre as raı´zes de f(x) = x3 − 2x− 5 = 0.
24
Exercı´cios CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
(b) Calcule as raı´zes negativas de P (x) = x3 − 3x2 − 6x+ 8 = 0, com � ≥ 0.05 (erro absoluto) que esta´
no intervalo [−3.83,−0.62].
12. Um sistema linear pode ser dado por:
a11x1 + a12x2 + . . . + a1nxn = b1
a21x1 + a22x2 + . . . + a2nxn = b2
...
...
. . .
...
...
an1x1 + an2x2 + . . . + annxn = bn
na forma matricial como Ax = b, ou ainda:
x1 =
b1 − n∑
j=2
a1jxj
 /a11
...
xi =
bi − n∑
j 6=i
aijxj
 /aii
...
xn =
bn − n−1∑
j=1
anjxj
 /ann
(3.1)
O me´todo de Gauss-Seidel e´ um processo que usa a forma (3.1), a partir de uma soluc¸a˜o inicial e atualiza
os valores de x ate´ obter uma precisa˜o requerida. Esta atualizac¸a˜o usa as componentes que esta´ sendo
calculada. Assim, o valor rece´m calculado para x(k+1)1 sera´ usado no ca´lculo de x
(k+1)
2 . O Algoritmo 1
mostra os passos deste me´todo.
Dado n, An×n, bn×1 e x
(0)
n×1, max, �
1: Para k = 0 ate´ k = max fac¸a
2: Para i = 1 ate´ i = n fac¸a
3: x(k+1)i =
1
aii
 
bi −
i−1X
j=1
aijx
(k+1)
j −
nX
j=i+1
aijx
(k)
j
!
4: Se max
1≤i≤n
˛˛˛
x
(k+1)
i − x(k)i
˛˛˛
< � ou
˛˛˛
x
(k+1)
i − x(k)i
˛˛˛
˛˛˛
x
(k+1)
i
˛˛˛ < � enta˜o
5: x = x(k+1)
6: else
7: Se k = max enta˜o
8: PARE: na˜o houve convergeˆncia.
9: Fim do condicional
10: Fim do condicional
11: Fim do lac¸o
12: Fim do lac¸o
Algoritmo 1: Me´todo de Gauss-Seidel
Implemente o me´todo de Gauss-Seidel e resolva o sistema:
5 2 0 −1
1 8 −3 2
0 1 6 1
1 −1 2 9


x1
x2
x3
x4
 =

6
10
−5
0

25
Exercı´cios CAPI´TULO 3. PROJETO DE PROGRAMAC¸A˜O
com � < 10−3 e max = 50. Antes de iniciar o algoritmo acima, verifique se o sistema e´ diagonalmente
dominante, usando a func¸a˜o implementada no exercı´cio 9 (usando o Scilab, e´ claro!).
13. Equilibrar a reac¸a˜o quiı´mica:
KMnO2 + H2SO4 + NaNO2 → K2SO4 + MnSO4 + NaNO3 + H2O.
Modelagem Matema´tica
O balanceamento de uma equac¸a˜o quı´mica e´ baseada na lei de conservac¸a˜o da massa de Lavoisier: Em
um sistema quı´mico isolado, a massa permanente conservante, quaisquer que sejam as transformac¸o˜es
que nele seprocessem. A lei de Lavoisier tambe´m pode ser expressa na forma: Em uma reac¸a˜o quı´mica,
a soma das massas dos reagentes e´ igual a` soma das massas dos produtos resultantes. Conclui-se,
enta˜o, que os elementos teˆm de estar nos dois membros da equac¸a˜o em igual quantidade.
O me´todo alge´brico de balanceamento consiste em atribuir coeficientes literais xi a`s substaˆcias que apa-
recem na equac¸a˜o, os quais constituem as inco´gnitas. Aplicando a lei de Lavoisier e comparando os ele-
mentos membro a membro, constro´i-se um sistema de equac¸o˜es alge´bricas lineares, onde as inco´gnitas
sa˜o os coeficientes estequiome´tricos xi da reac¸a˜o quiı´mica. Se houver mais inco´gnitas do que equac¸o˜es,
atribui-se um valor arbitra´rio a uma delas:
x1 KMnO2 + x2 H2SO4 + x3 NaNO2 → x4 K2SO4 + x5 MnSO4 + x6 NaNO3 + x7 H2O
A Tabela 3.3 sistematiza a equac¸a˜o acima.
K: x1 = 2x4
Mn: x1 = x5
O: 2x1 + 4x2 + 2x3 = 4x4 + 4x5 + 3x6 + x7
H: 2x2 = 2x7
S: x2 = x4 + x5
Na: x3 = x6
N: x3 = x6
Tabela 3.3: Transformac¸a˜o da equac¸a˜o quı´mica em equac¸o˜es.
Como as duas u´ltimas expresso˜es sa˜o iguais, elimina-se uma delas. Deste modo, tem-se um sistema
linear com 6 equac¸o˜es e 7 inco´gnitas. Atribuindo um valor arbitra´rio a uma delas, por exemplo, x7 = 1,
obte´m-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


x1
x2
x3
x4
x5
x6

=

0
0
1
2
0
0

(a) Resolva o sistema acima usando a func¸a˜o LU do Scilab e com o me´todo de Gauss-Seidel imple-
mentado (fac¸a a troca de linhas necessa´rias para a melhor execuc¸a˜o deste me´todo).
(b) Compare as soluc¸o˜es obtidas em relac¸a˜o a precisa˜o de cada me´todo.
(c) Fac¸a uma ana´lise do resultado obtido.
26
CAPI´TULO 4
Gra´ficos no Scilab
Comec¸amos aqui a explorar alguns dos recursos gra´ficos bi-dimensionais do ambiente Scilab. Informac¸o˜es
mais detalhadas sobre todos os comandos disponı´veis na biblioteca gra´fica do Scilab (acessem o help).
4.1 A Janela Gra´fica do Scilab
Todas as saı´das gra´ficas de comandos do Scilab sa˜o apresentadas em uma janela gra´fica. Note que, esta
janela tem um menu horizontal com quatro opc¸o˜es:
1. File: possui oito sub-opc¸o˜es que permitem manipular arquivos relacionados com gra´ficos gerados: New
Figure, Load, Save, Export to, Copy to clipboard, Page Setup, Print e Close.
2. Tools: apresenta quatro sub-opc¸o˜es de mobilidade da figura gerada, que sa˜o: Show/Hide Toolbar, que
habilita um menu de atalhos para as demais opc¸o˜es desta pasta, como descrito abaixo.
• Zoom: permite a ampliac¸a˜o de uma parte do gra´fico. Escolhendo esta opc¸a˜o e delimitando uma a´rea,
a parte do gra´fico dentro da a´rea escolhida sera´ expandida.
• UnZoom: desfaz as manipulac¸o˜es realizadas atrave´s da opc¸a˜o Zoom.
• 3D Rot.: permite efetuar rotac¸o˜es em gra´ficos bi-dimensionais e tri-dimensionais.
3. Edit: possui nove sub-opc¸o˜es que permite manipular o gra´fico gerado: Select as current figure, Redraw
figure, Clear Figure, Figure Properties, Axes Properties, Start Entity Picker, Stop Entity Picker, Start datatip
manager e Stop datatip manager.
4. ?: mostra duas opc¸o˜es de ajuda: Scilab Help e About Scilab.
No Scilab, gra´ficos sucessivos sa˜o sobrepostos em uma janela gra´fica. Para evitar que isto ocorra, podemos
utilizar o comando clf(). Estes comando limpa a janela gra´fica.
As janelas gra´ficas podem ser manipuladas atrave´s da func¸a˜o scf(). Por exemplo:
--> // Manipulacao de janelas graficas
--> scf(0) // Acesso a janela grafica 0 (default)
--> scf(1) // Acesso a janela grafica 1
4.2 Gra´ficos Bi-dimensionais
Gra´ficos bi-dimensionais podem ser gerados atrave´s da utilizac¸a˜o da func¸a˜o plot2d(). A forma mais simples
desta func¸a˜o e´:
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS NO SCILAB
--> plot2d( [ x ], y )
onde x e y podem ser matrizes ou vetores reais. Os colchetes [ e ], envolvendo x indicam que este paraˆmetro
e´ opcional. Vejamos algumas considerac¸o˜es sobre este paraˆmetros:
1. Se x e y sa˜o vetores, a func¸a˜o plot2d() permite trac¸ar o gra´fico de y em func¸a˜o de x. E´ importante
observar que os dois vetores devem ter a mesma dimensa˜o, isto e´, os dois vetores devem ter o mesmo
nu´mero de elementos.
2. Se x e´ um vetor e y e´ uma matriz, a func¸a˜o plot2d() permite trac¸ar o gra´fico de cada coluna da matriz y
em func¸a˜o de x. Neste caso, o nu´mero de elementos das colunas da matriz deve ser igual ao nu´mero
de elementos do vetor x.
3. Se x e y sa˜o matrizes, a func¸a˜o plot2d permite trac¸ar o gra´fico de cada coluna da matriz y em func¸a˜o de
cada coluna da matriz x. Neste caso, as matizes devem ter as mesmas dimenso˜es.
4. Se y e´ um vetor, a func¸a˜o plot2d() permite trac¸ar o gra´fico do vetor y em func¸a˜o do vetor [1:size(y)].
5. Se y e´ uma matriz, a func¸a˜o plot2d() permite trac¸ar o gra´fico da matriz y em func¸a˜o do vetor [1:size(y)].
Vamos apresentar exemplos de gra´ficos gerados para cada uma das opc¸o˜es de entrada x, y apresentados
anteriormente. Os gra´ficos sera˜o gerados no intervalo [0, 2pi], 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
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS NO SCILAB
--> // Item 5: Y = matriz (sem x explicito)
--> clf()
--> plot2d( Y )
Verifique que, apo´s a execuc¸a˜o de cada gra´fico, limpamos a tela atrave´s do comando clf(), para evitar que
o pro´ximo gra´fico se sobreponha ao anterior.
Vejamos agora alguns comandos para melhorar a sua janela gra´fica:
• xtitle( titulo ): acrescenta o tı´tulo em cada um dos gra´ficos gerados, cujo argumento e´ uma string.
• xsetech( [ x, y, largura, altura] ): Sub-divide a janela gra´fica do Scilab.
A janela gra´fica e´ definida com largura e altura iguais a 1 e com o seu sistema de refereˆncias 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 ma´ximos 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
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS 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¸a˜o plot2d() inclui um terceiro argumento: plot2d( [x], y, <opt args> ), onde
<opt args> e´ uma sequ¨eˆncia de opc¸o˜es que determinam as caracterı´sticas do gra´fico bi-dimensional:
< opt args > := opcao1 = valor1, opcao2 = valor2, . . . , opcaon = valorn
As opc¸o˜es podem ser:
• style: e´ utilizada para especificar o padra˜o da curva (ou curvas) que esta˜o sendo trac¸adas. O valor
associado a` essa opc¸a˜o dever ser um vetor com valores inteiros positivos ou negativos. Se o valor for
positivo, a curva e´ contı´nua e defina-se a cor da curva trac¸ada. Se o valor for negativo ou zero, a curva
sera´ desenhada usando marcadores.
• logflag: define a escala, logarı´tmica ou linear, a ser utilizada nos eixos x e y do gra´fico. Os valores
associados a` essa opc¸a˜o sa˜o strings, “nn”, “nl”, “ln” ou “ll”, onde l indica a escala logarı´tmica, n a escala
normal, na sequ¨eˆncia xy. O valor padra˜o desta opc¸a˜o e´ “nn”, isto e´, escala normal com graduac¸a˜o normal
dos eixos (omite-se esta opc¸a˜o).
• rect: e´ utilizada para estabelecer os limites do gra´fico. O valor associado a` essa opc¸a˜o um vetor real com
quatro entradas [xmin, ymin, xmax, ymax], onde xmin, xmax, ymin e ymax indicam os valores mı´nimos
e ma´ximos para os eixos x e y, respectivamente.
• frameflag: e´ utilizada para controlar a escala dos eixos coordenados. O valor associado a` essa opc¸a˜o e´
um nu´mero inteiro entre 0 e 8, inclusive.
• axesflag: especifica como os eixos sera˜o trac¸ados. O valor associado a` essa opc¸a˜o e´ um nu´mero inteiro
entre 0 e 5, inclusive;
• leg: permite definer as legendas das curvas. O valor associado a` esse paraˆmetro e´ uma string de carac-
teres para cada gra´fico trac¸ado.
Um exemplo com estas opc¸o˜es 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 trac¸ar gra´ficos bidimensionais polares e´ usando a func¸a˜o polarplot(rho, theta, <opt args>),
como segue no exemplo a seguir (cardeoide.sce).
30
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS 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
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS 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¸o˜es, como apresentado na Tabela 4.1.
Comando Tipo de Gra´fico
plot2d2() gra´ficos 2-D linearizados.
plot2d3() gra´ficos 2-D com barras verticais.
plot2d4() gra´ficos 2-D com setas.
Tabela 4.1: Variac¸o˜es do comando plot2d.
Uma outra maneira de gerar gra´ficos 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
Existem comandos que podem ser utilizados para melhorar a apresentac¸a˜o de um gra´fico (dem subplot.sci).
Dentre eles, destacamos:
• xgrid(): coloca uma grade em um gra´fico bi-dimensional;
• titlepage: coloca um tı´tulo no meio de uma janela gra´fica.
• subplot(m,n,p): divide a janela gra´fica do Scilab em uma matriz m × n (m linhas e n colunas). Em
cada um dos elementos da matriz, especificado por p, pode ser colocado num gra´fico.
// 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
Gra´ficos Bi-dimensionais CAPI´TULO 4. GRA´FICOS NO SCILAB
subplot(2,2,4)
grayplot // Chamada do demo da funcao grayplot
Observem que, no menu horizontal da janela gra´fica temos a opc¸a˜o File e sub-opc¸a˜o Export. Esta sub-opc¸a˜o
permite exportar a figura 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
Exercı´cios CAPI´TULO 4. GRA´FICOS NO SCILAB
4.3 Exerc´ıcios
1. Acompanhe o que foi feito, para func¸o˜es po-
lares (plot2d opt), e fac¸a um (ou mais) pro-
grama(s) para as func¸o˜es que segue. Nem to-
das as func¸o˜es listadas abaixo precisam usar
polarplot! Atenc¸a˜o ao definir os domı´nios de
cada func¸a˜o.
(a) Cisso´ide de Diocles:
y2 =
x3
a− x ou

x =
at2
1 + t2
y =
at3
1 + t2
(b) Estrofo´ide: y2 = x2
a+ x
a− x
(c) Hipociclo´ide (atro´ide): x
2
3 + y
2
3 = a
2
3 ou{
x = a cos3(t)
y = a sen3(t)
(d) Espiral de Arquimedes: r = aϕ, r ≥ 0.
(e) Espirial hiperbo´lica: r =
a
ϕ
, r ≥ 0.
(f) Espiral logaritmica: r = eaϕ.
(g) Rosa de treˆs pe´talas: r = a sen(3ϕ), r ≥ 0.
(h) Rosa de quatro pe´talas: r = a | sen(2ϕ)|
2. Trace o gra´fico das func¸o˜es abaixo (cuidado com
o domı´nio de cada func¸a˜o !!!!).
(a) f(x) = x3;
(b) f(x) =
√
x− 1;
(c) f(x) = |x|;
(d) f(x) = 1x ;
(e) f(x) =
√
4− x2;
(f) f(x) = |x− 4|;
(g) f(x) = x+ |x|;
(h) f(x) =
√
x2 − 4;
(i) f(x) = 1(x−4)2 ;
(j) f(x) = −(4 + x2);
(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. Atrave´s da estrutura function, escreva cada
uma das func¸o˜es abaixo e escreva um programa
(para cada uma ou para todas) e que chame as
func¸o˜es (usando a func¸a˜o exec()) e fac¸a os seus
respectivos gra´ficos:
(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) =

x2 se x ≤ −1
x3 se |x| < 1
2x se x ≥ 1
(d)
f(x) =
{
1 se x e´ inteiro
0 se x na˜o e´ inteiro
(e)
f(x) =

−x se x < 0
2 se 0 ≤ x < 1
x2 se x ≥ 1
(f)
f(x) =

x se x ≤ 1
−x2 se 1 ≤ x < 2
x se x ≥ 2
34
CAPI´TULO 5
Ajuste de Curvas em Ambiente Scilab
Manipulac¸a˜o de Arquivos – Comando read
Para a leiturade 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.
Manipulac¸a˜o de Arquivos – Comandos save e load
As varia´veis, 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 direto´rio de trabalho. O arquivo valores.dat e´ um arquivo
bina´rio. Para recuperar os valores x e y, usamos o comando load:
--> clear
--> x
--> y
--> load(’valores.dat’, ’dd’)
--> dd
Definindo a Func¸a˜o de Ajuste CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
5.1 Definindo a Func¸a˜o de Ajuste
A func¸a˜o de ajuste desenvolvida para ambiente Scilab basea-se no me´todo dos Quadrados Mı´nimos. Lem-
brando que, quando aplicamos este me´todo minimizamos o resı´duo ao quadrado (ou seja, a diferenc¸a entre o
valor ajustado e o valor real ao quadrado), que pode ser escrito da seguinte forma:
< r, r >=
m∑
i=1
(yi − g(xi))2 (5.1)
onde yi sa˜o elementos do vetor y que fornecem os valores reais a serem ajustados e g(x) a func¸a˜o a ser
aproximada para estes valores. O nosso objetivo e´ o de encontrar os coeficientes da func¸a˜o g(x) de maneira
que r seja o menor valor possı´vel (minimizac¸a˜o do resı´duo).
Para os dados do exemplo da Sec¸a˜o 5, uma func¸a˜o que pode fornecer um bom ajuste e´ do tipo:
g(x) = c1 ec2x +c3 (5.2)
A func¸a˜o (5.1), para o ambiente Scilab, retorna dois tipos de informac¸a˜o (como veremos abaixo): um vetor
com os coeficientes de (5.2) e o resı´duo. 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¸a˜o 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¸a˜o 5. O me´todo de Quadrados Mı´nimos
no Scilab sempre segue este padra˜o: a u´ltima componente do vetor sempre corresponde a y.
A Func¸a˜o datafit
O ambiente Scilab possui a func¸a˜o datafit que ajusta qualquer tipo de func¸a˜o pelo me´todo dos Quadrados
Minı´mos. Esta precisa de treˆs informac¸o˜es: a func¸a˜o a ser ajustada g(c,dd) (definida nos padro˜es da sec¸a˜o
anterior), os elementos do arquivo valores.dat, que foram armazenados em dd e um chute inicial para o ca´lculo
dos coeficientes 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 coeficientes da func¸a˜o G(x) e e e´ o resı´duo final.
Apo´s a execuc¸a˜o deste passo, ja´ e´ possı´vel definir a func¸a˜oG(x) com os coeficientes calculados por datafit
(note que o Scilab na˜o confunde g com G):
36
Spline Cu´bicas em Ambiente Scilab CAPI´TULO 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 Cu´bicas em Ambiente Scilab
A interpolac¸a˜o utilizando polinoˆmios de ordem elevada muitas vezes produz resultados mal comportados.
Existem va´rios me´todos para eleminar esse problema. Dentre eles, as Splines Cu´bicas sa˜o muito populares. No
Scilab, a interpolac¸a˜o por splines cu´bicas e´ executada pelas func¸o˜es splin e interp. No help do Scilab, os
detalhes para o uso destas func¸o˜es esta˜o disponı´veis.
A Func¸a˜o splin
A func¸a˜o splin toma os dados x e y e os valores desejados xi (normalmente xi ∈ [x0, xn]), encontra o
polinoˆmio da interpolac¸a˜o por spline cu´bica que se adequa a x e y, e enta˜o calcula os polinoˆmios para encontrar
os valores de yi correspondente a cada valor xi.
• Notac¸a˜o: d = splin( x, y, ’tipo de spline’ ), onde:
x : vetor (linha ou coluna) com, no mı´nimo, 2 elementos;
y : vetor (linha ou coluna) no mesmo formato de x;
tipo de spline : selec¸a˜o do tipo de spline a ser calculada;
d : vetor no mesmo formato de x (di e´ a derivada da spline em xi).
• Descric¸a˜o: a func¸a˜o splin calcula a spline cu´bica (ou sub-spline) s que interpola os pontos (xi, yi), isto
e´, temos s(xi) = yi, ∀i = 0 : n. A spline resultante s e´ completamente definida pelos pontos (x, y, d),
onde d e´ um vetor com as derivadas de xi: s′(xi) = di (conhecida como forma de Hermite).
O ca´lculo das splines em alguns pontos tem de ser feitos pela func¸a˜o interp.
• Tipos de Splines: podemos calcular diferentes tipos de splines cu´bicas, aqui vamos ver as sintaxe das
splines cu´bicas natural e restrita:
37
Spline Cu´bicas em Ambiente Scilab CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
’natural’ : a spline cu´bida e´ calculada supondo s′′(x0) = s′′(xn) = 0. Assim, a func¸a˜o pode ser dada por:
d = splin( x, y, ’natural’)
’clamped’ : a spline cu´bica e´ ca´lcula usando s′(x0) = f ′(x0) e s′(xn) = f ′(xn). Neste caso, temos de passar
um vetor com estes valores, como segue:
d = splin( x, y, ’clamped’, [f’(x0) f’(xn)] )
A Func¸a˜o interp
A func¸a˜o interp calcula a spline cu´bica.
• Notac¸a˜o: yp = interp( xp, x, y, d ), onde:
xp : vetor dos nu´meros reais definida em [x0, xn];
x, y, d : vetores de nu´meros reais, definindo uma spline cu´bica;
yp : vetor de nu´meros reais de mesmo tamanho de xp, com os valores de s(xi) (yp(i) = s( xp(i) )).
• Descric¸a˜o: Dado 3 vetores (x, y, d) definidos pela func¸a˜o splin com f(xi) = s(xi) e di = s′(xi), esta
func¸a˜o calcula s em xp(i).
Exemplos
Veremos aqui, dois exemplos para o uso das func¸o˜es 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 cu´bicas para os dados abaixo, como e´ solicitados nos itens (1) e (2).
1. Natural (s′′(x0) = s′′(xn));
38
Spline Cu´bicas em Ambiente Scilab CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
xi 0.1 0.2 0.3 0.4
yi -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
Exercı´cios CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
5.3 Exerc´ıcios
1. Seja a tabela:
i 1 2 3 4 5 6 7 8 9 10
xi 5 6 7 8 9 10 11 12 13 14
yi 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) Fac¸a o gra´fico da dispersa˜o dos dados da tabela acima.
(c) Use a func¸a˜o datafit para obter os seguintes polinoˆmios:
i. p1(x) = a+ bx;
ii. p2(x) = a+ bx+ cx2;
iii. p3(x) = a+ bx+ cx2 + dx3;
iv. y = axb;
v. y = abx.
(d) Use a func¸a˜o splin - natural para ajustar os dados da tabela acima.
(e) Qual dos casos e´ o melhor ? Por queˆ ?
2. Seja a tabela contendo o tempo de germinac¸a˜o de sementes (dias) em func¸a˜o da temperatura me´dia do
solo (◦C) para doze locais de plantio:
Temperatura (◦C) 14 6 3 6 7 6 7 4 8 7 6 4
Germinac¸a˜o (dias) 10 26 41 29 27 27 19 28 19 31 29 33
(a) Fac¸a o diagrama da dispersa˜o dos dados;
(b) Use a func¸a˜o datafit para determinar uma relac¸a˜o entre temperatura e o tempo de germinac¸a˜o das
sementes;
(c) Fac¸a o gra´fico com a func¸a˜o encontrada e o diagrama de dispersa˜o.
3. Um automo´vel, viajando por uma estrada reta, e´ cronometrado em diversos pontos. Os dados dessas
observac¸o˜es sa˜o apresentados na tabela a seguir:
Tempo (s) 0 3 5 8 13
Distaˆncia (ft) 0 225 383 623 993
Velocidade (ft/s) 75 77 80 74 72
Use um spline cu´bico restrito para prever a posic¸a˜o do automo´vel e sua velocidade quanto t = 10s.
4. Suspeita-se que o alto conteu´do de tanino existente nas folhas maduras do carvalho inibe o crescimento
das larvas da mariposa de inverno, que danificam severamente essas a´rvores em certos anos. A tabela a
seguir relaciona o peso me´dio de duas amostras de larvas em va´rios momentos durante o perı´odo de 28
dias apo´s o nascimento. A primeira amostra foi cultivada em folhas de carvalho novas e a segunda, em
folhas maduras da mesma a´rvore.
(a) Fac¸a o gra´fico de dispersa˜o dos dados;
40
Exercı´cios CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
Dia 0 6 10 13 17 20 28
Peso me´dio da amostra 1 (mg) 6.67 17.33 42.67 37.33 30.1 29.31 28.74
Peso me´dio da amostra 2 (mg) 6.67 16.11 18.89 15 10.56 9.44 8.89
(b) Use um spline cu´bico natural para aproximar a curva de peso me´dio de cada amostra;
(c) Encontre uma aproximac¸a˜o do peso me´dio ma´ximo para cada amostra determinando o ponto ma´ximo
do spline;
(d) Fac¸a um gra´fico com as duas curvas, em cores diferentes e com legenda para cada curva, juntamente
com a dispersa˜o dos dados.
5. O custo do seguro sau´de nos Estados Unidos para os anos de 1994–2001, em bilho˜es de do´lares, e´ dado
pela tabela:
Ano 1994 1995 1996 1997 1998 1999 2000 2001
Seguro Sau´de 55.8 58.0 56.6 59.3 63.6 65.7 70.6 75.0
(a) Fac¸a o gra´fico de dispersa˜o dos dados;
(b) Use a func¸a˜o datafit para ajustar uma curva que melhor modelo o custo do seguro sau´de ao longo
dos anos;
(c) Gere um gra´fico com a func¸a˜o encontrada e a dispersa˜o dos dados.
6. O Consumer Price Index (CPI) e´ uma medida da me´dia de prec¸os, num determinado perı´odo, de servic¸os
e produtos. Para estabelecer uma base para comparac¸a˜o, a me´dia anual de prec¸os mensais nos anos de
1982–84 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) Fac¸a o gra´fico da dispersa˜o destes dados;
(b) Usando a func¸a˜o datafit ajuste a melhor curva para estes dados;
(c) A curva pode ser uma reta ? Por queˆ ?
(d) Acrescente no gra´fico do item (a) a curva obtida;
(e) Usando a curva obtida, qual sera´ o CPI do tabaco em 2010 ?
7. Anualmente, o governo dos Estados Unidos gasta boa parte do seu dinheiro com a dı´vida interna. A
tabela que segue mostra a porcentagem destinada para o pagamento da dı´vida interna para os anos de
1991–2002.
Ano 1991 1993 1995 1997 1999 2001 2002
% gasta 21.6 20.8 22.0 22.2 20.7 19.3 16.4
(a) Fac¸a o gra´fico da dispersa˜o destes dados;
(b) Usando a func¸a˜o datafit ajuste a melhor curva para estes dados;
41
Exercı´cios CAPI´TULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB
(c) Acrescente no gra´fico do item (a) a curva obtida;
(d) Usando a curva obtida, qual sera´ o gasto com a dı´vida interna em 2010 ?
8. O census nos Estados Unidos e´ realizado a cada 10 anos. A tabela abaixo mostra o census realizado
desde 1940 ate´ 2000 (em milha˜o).
Ano 1940 1950 1960 1970 1980 1990 2000
Populac¸a˜o U.S. 132 151 179 203 227 249 281
(a) Fac¸a o gra´fico da dispersa˜o destes dados;
(b) Usando a func¸a˜o datafit ajuste para uma curva linear;
(c) Acrescente no gra´fico do item (a) a curva obtida;
(d) Usando a curva obtida, estime a populac¸a˜o em 2010 e 2020;
(e) Usando a curva obtida, estime o ano que a populac¸a˜o atingira´ 320 milho˜es.
9. A empresa Delta Airlines publicou uma tabela mostrando a temperatura (em F◦) fora do avia˜o quando este
troca de altitude (em 1000 pe´s).
x (Altitude em 1000 pe´s) 1 5 10 15 20 30 36.087
y (Temperatura) 56 41 23 5 -15 -47 -69
(a) Fac¸a o gra´fico da dispersa˜o destes dados;
(b) Usando a func¸a˜o datafit ajuste para uma curva linear;
(c) Acrescente no gra´fico do item (a) a curva obtida;
(d) Usando a curva obtida, determine a temperatura a 40000 pe´s.
42
CAPI´TULO 6
Gra´ficos Tri-Dimensionais
6.1 Gra´ficos Tri-dimensionais
O comando plot3d() permite trac¸ar gra´ficos de superfı´cies z = f(x, y).
Na notac¸a˜o Scilab, as varia´veis independentes x e y sa˜o vetores de dimensa˜o n1 e n2, respectivamente,
e a varia´vel z e´ uma matriz de dimenc¸a˜o n1 x n2. Enta˜o, por essa definic¸a˜o, o elemento z(i,j) e´ o valor da
superfı´cie no ponto ( x(i), y(j) ).
Para exemplificar o uso de plot3d(), vamos considerar a func¸a˜o f(x, y) = cos(x) · sen(y) no intervalo [0, 2pi],
com incremento 0.1 (graf tri.sci).
x = [0:0.1:2*%pi]’;
y = x;
z = cos(x)*sin(y’);
plot3d(x, y, z)
Ale´m da func¸a˜o plot3d(), e de suas variac¸o˜es, o Scilab implementa outras func¸o˜es que permitem trac¸ar
gra´ficos tri-dimensionais. Dentre elas, destacamos:
• fplot3d: permite trac¸ar gra´ficos de superfı´cies por func¸o˜es, 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 trac¸ar gra´ficos de superfı´cies definidas por func¸o˜es, como no caso anterior. Neste caso,
as superfı´cies sa˜o apresentadas em uma graduac¸a˜o de cores diferente do comando acima.
6.1.1 Gra´ficos 3-D Especiais
As seguintes func¸o˜es permitem trac¸ar gra´ficos tri-dimensionais especiais:
• param3d: permite trac¸ar curvas parame´tricas.
• hist3d: permite trac¸ar histogramas 3-D.
Gra´ficos Tri-dimensionais CAPI´TULO 6. GRA´FICOS TRI-DIMENSIONAIS
• contour: permite trac¸ar curvas de nı´vel para uma func¸a˜o 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 verificada usando o help do Scilab.
Acompanhe mais este exemplo (param.sci) com algumas func¸o˜es especiais para gra´ficos 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.

Outros materiais

Perguntas relacionadas

Perguntas Recentes