51
L ABORAT ´ ORIO DE M ATEM ´ ATICA C OMPUTACIONAL –S CILAB Luiza Amalia Pinto Cant ˜ ao [email protected]

L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

Embed Size (px)

Citation preview

Page 1: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

LABORATORIO DE MATEMATICA COMPUTACIONAL – SCILAB

Luiza Amalia Pinto [email protected]

Page 2: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

Sumario

1 Introducao ao Ambiente Scilab 21.1 O Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Variaveis Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Arquivos *.sce de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Algebra Linear Numerica 72.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.2.1 Matrizes Padrao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Acesso aos elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4 Matematica Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.5 Uso de Scilab na Solucao de Sistemas Lineares: Metodos Diretos . . . . . . . . . . . . . . . . . 142.6 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Projeto de Programacao 173.1 Operadores Relacionais e Logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3.1.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.1.2 Operadores Logicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

3.2 O Loop for e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.3 Estrutura if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.4 Definicao de Funcoes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.5 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

4 Graficos no Scilab 274.1 A Janela Grafica do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2 Graficos Bi-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.2.1 Outros Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.3 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

5 Ajuste de Curvas em Ambiente Scilab 355.1 Spline Cubicas em Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

6 Graficos Tri-Dimensionais 416.1 Graficos Tri-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

6.1.1 Graficos 3-D Especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416.2 Detalhes da Funcao plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

6.2.1 Funcao eval3d e eval3dp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446.2.2 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446.2.3 Outro Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

6.3 Exercıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

7 Exercıcios Adicionais 47

Referencias Bibliograficas 50

1

Page 3: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 1

Introducao ao Ambiente Scilab

1.1 O Ambiente Scilab

O Scilab e um ambiente utilizado no desenvolvimento de programas para a resolucao de problemas numericos.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 umpequeno “prompt” de comando aguardando alguma acao 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 janelado Scilab ha um menu horizontal com seis opcoes: File, Edit, Preferences, Control, Applications e ?. Utilizandoo mouse escolha uma das opcoes.

• File – possui oito sub-opcoes (apresentaremos as quatro mais importantes):

– Execute: executa o conteudo 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 diretorio em que o Scilab foi aberto para o diretorio do arquivo(programa).

– Quit: permite sair do ambiente Scilab de forma natural.

Page 4: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 1. INTRODUCAO 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 opcao e o Clear Console que limpa a janela de execucaodo ambiente Scilab.

• Control – possui tres sub-opcoes cuja utilidade dos dois primeiros itens pode ser observada na sequenciade 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 execucao de um programa.

• Applications – aplicativos do ambiente Scilab:

– SciNotes – abre um editor de texto proprio para programacao em ambiente Scilab.

• ? – informacoes e ajuda sobre o ambiente Scilab. Esta possui quatro sub-opcoes:

– Scilab Help: informacoes sobre os comandos do ambiente Scilab.

– Scilab Demonstration: Demonstracao 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 ha alguns icones abaixo do menu descrito acima. Estes icones sao atalhos paraas funcoes mais usadas no menu acima.

1.2 Variaveis EspeciaisAlgumas variaveis 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

Page 5: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 1. INTRODUCAO 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 significado das variavies mais recorrentes:

Variavel O que significa Variavel O que significa%i Valor de

√(−1) %pi π = 3, 1415926...

%e Constante de Euler e = 2, 7182818... %eps precisao da maquina no qual o Scilab esta instalado.%inf Infinito %nan Not a number

Tabela 1.1: Vaiaveis mais recorrentes.

Para saber em qual diretorio o Scilab foi instalado, use a variavel SCI e para saber em qual diretorio oScilab 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

Page 6: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 1. INTRODUCAO AO AMBIENTE SCILAB

/home/luiza

-->

A Tabela 1.2 apresenta alguns os sımbolos matematicos usados no ambiente Scilab.

Sımbolo Nomeclatura+ Soma− Subtracao∗ Multiplicacao/ Divisaoˆ Potencia

sqrt(.) Raiz quadrada(√·)

exp(.) Exponecial f(x) = ex

Tabela 1.2: Sımbolos Matematicos

Tarefa: Suponha que u = 1 e v = 3. Avalie as expressoes a seguir, no ambiente Scilab:

a.4u

3vb.

2v−2

(u+ v)2c.

4

3πv2 d.

√v e. 3

√v

1.3 Arquivos *.sce de ComandosPara problemas simples, e mais rapido e eficiente introduzir seus comandos no prompt do Scilab. Mas,

se o numero de comandos e grande, ou se voce deseja mudar o valor de uma ou mais variaveis e re-executaralguns comandos, pode ser trabalhoso e/ou tedioso introduzir os comandos no prompt. O Scilab apresentauma solucao simples para esse problema: voce pode colocar os comandos do Scilab em um arquivo de textosimples (pode-se fazer uso do Editor do Scilab) e depois abrir este arquivo e executa-lo no Scilab.

Atencao: no Scilab, ponto-e-vırgula no final de um comando inibe a apresentacao de seu resultado e,qualquer caracter apos o uso de // e ignorado pelo Scilab pois este e interpretado como comentario. Tambeme importante salientar que os comentarios (e os nomes das variaveis e funcoes utilizados no Scilab) NAOdevem ter qualquer tipo de acentuacao.

Abra o Editor de texto SciPad atraves 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

5

Page 7: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 1. INTRODUCAO AO AMBIENTE SCILAB

Salve este arquivo no diretorio LMC que foi criado. Para isso, clique com o mouse no menu File e selecioneSave 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 25dıgitos.

Um outro programinha para se testar com uma estrutura diferente da apresentada abaixo, e para calcular onumero 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

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 disciplinade Calculo Numerico e Computacional.

6

Page 8: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2

Algebra Linear Numerica

Vamos comecar com as estruturas sobre as quais toda a filosofia Scilab (e linguagens numericas) estabaseada.

2.1 VetoresPara criar um vetor no Scilab e muito simples. Apenas deve ser tomado cuidado com a diferenciacao 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 sao desnecessarias; poderıamos simplesmenteusar

--->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 tres opcoes: cria-los diretamente, usar o operador de transposicao, ’ (apostrofo)

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.

Page 9: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

e finalmente

-->v = [1

-->2

-->3]

v

1.

2.

3.

Note que neste ultimo caso, o Scilab ficou esperando que se completasse o vetor com “ ] ”.Um jeito pratico 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 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 funcao linspace cujos elementos desta funcao

sao:

linspace( primeiro_valor, ultimo_valor, numero_de_elementos )

Se o numero de elementos e omitido, a funcao gera automanticamente 100 elementos.

--> x = linspace( 0, %pi)

--> x = linspace( 0, %pi, 11)

Veja que, a notacao “ : ” permite especificar o intervalo entre os pontos, mas nao o numero de pontos. Poroutro lado, a funcao linspace permite especificar o numero de elementos mas nao o intervalo entre os pontos.

Comandos Descricao

x = inicio:fim Cria um vetor linha comecando em inicio, incrementa em ume para em fim (ou antes).

x = inicio:incremento:fim Cria um vetor linha comecando em inicio, incrementa em incremento

e para 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 basicos para a construcao de vetores.

8

Page 10: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

2.2 MatrizesO 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 funcao size(.) mostra o tamanho da sua matriz ou vetor.Note que podemos utilizar o operador “ : ” em combinacao 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 Padrao

Dada a utilidade deste tipo de matrizes, o Scilab contem funcoes para a criacao de matrizes padrao. Essetipo de matriz inclui aqueles cujos elementos sao todos iguais a zero ou a um, matriz identidade, matrizes denumeros aleatorios, matrizes diagonais e cujos elementos sao 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

Page 11: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

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 aleatorias nointervalo [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

Page 12: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

A funcao diag(.) cria matrizes diagonais em que um vetor determinado pode ser colocado em qualquerposicao paralela a diagonal principal ou na propria diagonal principal.

Com essas matrizes padrao, ha varias formas de se criar uma matriz em que todos os elementos apresentamo mesmo valor. Execute os proximos 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)

Funcao Proposito

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 aleatorios em (0, 1);size(.) Retorna dois valores, especificando o numero de linhas e o de colunas de uma matriz ou vetor em (.).

Tabela 2.2: Funcoes Scilab para gerar matrizes padrao.

2.3 Acesso aos elementosO Scilab da ao usuario varios modos de acesso aos vetores e matrizes. O mais simples deles e sim-

plesmente digitando o nome do vetor/matriz criado. Caso voce nao se lembre do que criou, use o comandowhos.

Ha duas formas de usar o comando whos:

• whos(): Lista todas as funcoes do Scilab, apresentando o nome da funcao, o tipo (constante, variavel,booleana, e assim por diante), o tamanho e os bytes usado para a funcao apresentada.

• whos: Neste caso e preciso especificar o tipo de funcao que voce deseja verificar (veremos um exemplono final desta secao).

--> A

A

1. 2. 3. 4.

5. 6. 7. 8.

9. 10. 11. 12.

Para acessar a matriz um elemento por vez, use parenteses:

--> v = [7; 19; 21];

-->v(2)

ans

19.

-->A(2,3)

ans

7.

-->A(3,2)

11

Page 13: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

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 nao existem, o programa reclama.Porem, a forma mais poderosa de acesso (e mais rapida) e usando o conceito de sub-matrizes. Para

usarmos partes de matrizes em operacoes, usamos novamente o operador “ : ”. Suponha que criamos umamatriz 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 atribuicao de matrizes (ou vetores). Porem, antes de

executar, tente prever o resultado.

-->A(3, 3:5) = [1 2 3]

2.4 Matematica MatricialPara executar operacoes algebricas matriciais, seguiremos os seguintes exemplos:

12

Page 14: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

Comandos Descricao

A (r,c) Fornece a sub-matriz A cujas linhas sao definidas pelo vetorde ındice r e cujas colunas sao definidas pelo vetor c.

A (r,:) Fornece a sub-matriz A cujas linhas sao definidas pelo vetorde ındice r e inclui todas as colunas.

A (:,c) Fornece a sub-matriz A cujas colunas sao definidas pelo vetorde ındice c e inclui todas as linhas.

A (:) Fornece todos os elementos de A em um vetor coluna, coluna a coluna.

Tabela 2.3: Referencia 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 enderecamento das matrizes e vetores! Isto e muitoimportante!!!

Observe a tabela 2.4.

Operacoes com elementos Dados representativosde vetores e matrizes A = [a1 a2 . . . an]

dados B = [b1 b2 . . . bn], c ∈ RAdicao a escalar A+ c = [a1 + c a2 + c . . . an + c]

Subtracao por escalar A− c = [a1 − c a2 − c . . . an − c]Multiplicacao por escalar A ∗ c = [a1 ∗ c a2 ∗ c . . . an ∗ c]

Diviscao por escalar A/c = [a1/c a2/c . . . an/c]

Soma de vetores A+B = [a1 + b1 a2 + b2 . . . an + bn]

Multiplicacao de vetores A. ∗B = [a1. ∗ b1 a2. ∗ b2 . . . an. ∗ bn]Divisao de vetores pela direita A./B = [a1./b1 a2./b2 . . . an./bn]

Divisao de vetores pela esquerda B.\A = [a1./b1 a2./b2 . . . an./bn]

Potenciacao 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: Operacoes basicas 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

Page 15: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

execute as operacoes apresentadas na Tabela 2.4.

2.5 Uso de Scilab na Solucao de Sistemas Lineares: Metodos

DiretosConsidere 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 funcoes definidas no Scilab relacionados a Solucao de Sistemas Lineares– Metodos Diretos. Mais informacoes podem ser obtidas pelo recurso help seguido da funcao de interesse (porexemplo, help lu mostra detalhes sobre o calculo da decomposicao 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 Decomposicao LU . Para obter a decomposicao A = LU , e resolver o sistema apartir dela use:

-->[ L, U ] = lu(A)

--> y = L \ b

--> x = U \ y

Note que o Scilab nao confundiu U com u, o que indica que o programa e sensıvel ao caso (maiusculase minusculas). Repare tambem na forma como o Scilab retornou dois argumentos (L e U ) da funcao,o que e uma caracterıstica incomum em linguagens de programacao, porem corriqueira em linguagemnumerica, como o Scilab. Tambem poderıamos ter feito a operacao 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 permutacao do pivoteamento usado no calculo dos fatores L e U . A matriz Pmultiplicada por A tem o efeito das trocas de linhas efetuadas quando o pivoteamento e realizado.

3. Calculo da funcao inversa da matriz A: Um Sistema Linear tem solucao unica se a matriz A for inversıvel.Uma maneira de testar esta condicao e usando a funcao inv(.) do Scilab:

--> IA = inv(A)

--> IA * A

--> x = IA * b

4. Uma outra funcao do Scilab interessante e a que calcula o valor do determinante de uma matriz (det(.)):

-->d = det(A)

Pergunta: Qual a relacao existente entre det(A) e det(U) ?

14

Page 16: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

2.6 Exercıcios1. 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 doexercıcio anterior. Defina uma nova matriz D

com o mesmo conteudo de A. Faca a mudancaou execute a operacao - 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 oconteudo de E em termos de D e C;

(d) Execute o comando F = [D B]. Descreva oconteudo de F em termos de D e B;

(e) Execute o comando G = [E; B]. Descrevao conteudo de G em termos de E e B;

3. Para criar um vetor coluna no Scilab digita-seda 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 saoc1 e c2 sem repetir a entrada dos elemen-tos;

(d) Construa uma matriz K onde as duas pri-meiras colunas sao 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 elementos2,−1, 5.

(b) Construa um vetor linha r2 com elementos7, 9,−3 .

(c) Construa uma matriz M cujas linhas sao r1

e r2 sem repetir a entrada de dados feitaanteiormente.

(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 questoes seguintes considerando amatriz 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 seja0.6.

6. Determine o tamanho das seguintes matrizes.Verifique suas respostas criando as matrizes noScilab.

(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) apos a execucao da ex-pressao (g)?

11. Considere a matriz do exercıcio (5). Determine oconteudo 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

Page 17: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 2. ALGEBRA LINEAR NUMERICA

(f) c([2 2 2], [3 3 3])

(g) c([1 2 2], [3 3])

12. Determine o conteudo da matriz a apos a exe-cucao das seguintes declaracoes:

(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 conteudo da matriz a apos aexecucao das seguintes declaracoes:

(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 osresultados? Observe que a solucao 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. Resolvao sistema usando a funcao LU do Scilab.

16. Sao investidos $8000, 00. Parte a 6% de taxa dejuros 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 usandoa funcao LU do Scilab.

Resposta: x1 = $3200, 00 para 6% e x2 =

$4800, 00 para 9%.

17. Encontre a, b e c tais que o grafico do cırculo comequacao x2 + y2 + ax + bx + c = 0 passe pelospontos (1, 5), (4, 4) e (3.1). Resolva o sistemausando a funcao LU do Scilab.

Resposta: a = −4, b = −6 e c = 5.

18. A quantia de $16500, 00 foi investida em tres con-tas, resultando um lucro anual de 5%, 8% e 10%,respectivamente. A quantia investida a 5% eraigual a quantia investida a 8% mais o dobro daquantia investida a 10%. Quanto foi investidoem cada conta se o total dos juros sobre o in-vestimento foi de $1085, 00 ? Resolva o sistemausando a funcao 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 equacao da parabolay = ax2+bx+c passe pelos pontos (1, 4), (−1, 6)

e (2, 12). Resolva o sistema usando a funcao LU

do Scilab.

Resposta: a = 3, b = −1 e c = 2.

16

Page 18: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3

Projeto de Programacao

Programar e facil. Saber o que programar e difıcil.a

aCitacao de [3].

Uma das caracterısticas da linguagem numerica e a facilidade com que o usuario cria seus proprios progra-mas.

Apesar de simples, a linguagem numerica disponibiliza a maioria das estruturas das linguagens de programacaoconvencionais. A diferenca principal e que, na programacao Scilab, nao ha necessidade da declaracao previados tipos das variaveis que serao utilizadas ao longo do programa.

As linguagens numericas, como e o caso do Scilab, e um interpretador de comandos. Os programasescritos em linguagem numerica sao executados em um tempo maior que os programas semelhantes escri-tos em linguagens compilaveis. Por outro lado, a vantagem de linguagens numericas advem da facilidade deprototipacao de programas e da disponibilidade de uma poderosa biblioteca de funcoes graficas.

Neste proposito, abordaremos aqui a estrutura de programacao em ambiente numerico, em especial, noambiente Scilab. Na secao 3.1 serao abordados os operadores relacionais e logicos, na secao 3.2 a estruturade Loop, na secao 3.3 a estrutura if (condicional) e na secao 3.4 a definicao de manipulacao de funcoes emambiente Scilab.

3.1 Operadores Relacionais e LogicosAlem das operacoes matematicas convencionais, o Scilab tambem inclui operacoes relacionais e logicas,

cuja finalidade e o de fornecer respostas do tipo verdadeiro ou falso a perguntas, usadas em estruturas de Loopse condicionais.

No ambiente Scilab, a resposta para expressoes logicas 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 comparacoes habituais e sao listados na Tabela 3.1.Atencao: Os sımbolo = e == tem significados diferentes! O sımbolo == compara duas variavies e retorna T

se forem iguais e F se forem diferentes; o sımbolo = e usado para atribuir o resultado de uma operacao a umavariavel.

Os operadores relacionais do Scilab podem ser usados para comparar dois vetores de mesmo tamanho oupara comparar vetores com escalar (ou ainda, escalar com escalar). Interprete os comandos abaixo:

1Em outros ambientes de programacao a reposta para uma sentenca verdadeira e 1 e 0 para uma resposta falsa.

Page 19: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

Operador Descricao

< 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 tambem que o teste de igualdade as vezes produz resultados confusos para operacoes em pontoflutuante. Execute as operacoes 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 expressoes relacionais com expressoes matematicas:

--> B = 9 - A;

--> B = B + (B==0)*(%eps)

e uma maneira de substituir os elementos iguais a zero em um vetor pelo numero %eps2. Essa expressao emparticular e, algumas vezes, util para evitar a divisao 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 Logicos

Os operadores logicos permitem que se combinem ou se neguem expressoes relacionais. Os operadoreslogicos do Scilab sao dados na Tabela 3.2.

Operador Descricao

& E| OU~ NAO

Tabela 3.2: Operadores logicos.

--> 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 numero %eps, em Scilab, e a menor diferenca entre dois numeros que e possıvel representar.

18

Page 20: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

3.2 O Loop for e while

O loop for possibilita que uma serie de comandos seja repetida por um numero de vezes fixo e pre-determinados. A forma geral do loop for e:

for x = vetor

comandos ...

end

Os comandos entre as instrucoes for e end sao executados uma vez para cada coluna de vetor. A cadaiteracao, atribui-se a x a proxima 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 instrucao diz: “para n igual a 1 ate 10, calcule todas as instrucoes ate a proxima instrucaode end”. No primeiro ciclo de for, n = 1, no segundo, n = 2, e assim por diante, ate n = 10. Depois do ciclopara n = 10, o loop for termina e os comandos apos a instrucao end sao executados e as componentes de x

sao 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 atraves da pre-alocacao de memoria. Ou seja, osvetores 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 sao executados, o tamanho da variavelx e incrementada de 1. Isso forca o Scilab a gastar tempo para alocar mais memoria para x todas as vezesque o loop e percorrido.

Ao contrario do loop for, que executa um grupo de comandos um numero fixo de vezes, o loop while

executa um grupo de comandos um numero indefinido de vezes, ate que uma certa condicao seja satisfeita. Aforma geral do loop while e:

while CONDICAO

comandos ...

end

Os comandos ... entre as instrucoes while e end sao executados enquanto TODOS os elementos de CONDICAO

forem verdadeiros.

19

Page 21: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

--> 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

sao executados. Uma vez que EPS e continuamente divivido em dois, em algum momento ele se tornara taopequeno 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 ultima divisao por 2 o tornoupequeno demais.

3.3 Estrutura if

Em diversas situacoes, as sequencias de comandos tem de ser executadas condicionalmente, com base emum teste relacional. Nas linguagens de programacao, essa logica e implementada por meio de uma das diversasformas de estrutura if-else-end, cuja estrutura mais simples e:

if expressao

comandos ...

end

Os comandos ... entre as funcoes if e end sao executados se todos os elementos na expressao foremverdadeiros.

Nos casos em que expressao envolve muitas subexpressoes logicas, apenas as subexpressoesnecessarias para determinar o valor logico da expressao sao executadas. Por exemplo,se expressao e (expressao1 | expressao2), entao expressao2 e executada somente seexpressao1 for falsa. Da mesma maneira, se expressao e (expressao1 & expressao2), entaoexpressao2 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 seexpressao for falsa.

Quando houver tres ou mais alternativas, a estrutura if-else-end toma a forma:

20

Page 22: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

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 expressao verdadeira encontradas sao exe-cutados; as expressoes relacionais seguintes nao sao testadas e o resto da extrutura if-else-end e ignorada.Alem disso, nao e necessario 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 numero de vezes. A estrutura if-else-end testa; quando EPS ficasuficiente pequeno, o comando break forca o loop for a terminar prematuramente.

Desenvolva um programa em Scilab para encontrar as raızes de uma equacao do tipo ax2 +bx+c =

0.

3.4 Definicao de FuncoesUma funcao 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 funcao, xi, para i = 1, 2, ..., m, sao os seus argumentos de entrada, yj, para j =

1, 2, ..., n sao argumentos de saıda e instrucao i, para i = 1, 2, ..., p, representa a sequencia deinstrucoes que devem ser executados pela funcao.

Toda funcao no Scilab e executada chamando seu nome seguido de seus argumentos. No exemplo, afuncao foo e executada atraves do comando:

--> foo(x1, x2, ..., xm)

Como pode ser observado, uma funcao possui uma estrutura pre-determinada. As principais caracterısticas deuma funcao sao:

21

Page 23: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

• As variaveis definidas na funcao, chamadas de variaveis locais, nao permanecem no ambiente Scilab

apos a execucao da funcao;

• As entradas e saıdas do programa sao claramente definidas, e

• Uma funcao, apos ser definida, pode ser chamada a qualquer tempo.

Uma funcao pode ser criada usando um dos seguintes procedimentos:

1. Digitando no proprio 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 funcao em um arquivo e, em seguida, carregando esse arquivo no ambiente Scilab.Por convencao, as funcoes definidas pelo usuario possuem extensao sci e sao carregadas no ambienteScilab atraves do comando:

--> exec(’nome_do_arquivo_de_comandos.sce’)

22

Page 24: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

3.5 Exercıcios1. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes expressoes 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 expressoes 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 avaliacao de cada uma das seguintesexpressoes, 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. Seo pacote pesar mais de 35 quilos, uma taxa de peso adicional de $10,00 e adicionada ao custo. Nenhumpacote com mais de 50 quilos e aceito. Escreva um programa que aceite o peso do pacote em quilos ecalcule o custo de enviar o pacote. Inclua o caso dos pacotes acima do peso.

5. Escreva um programa para calcular a funcao f(x, y) para quaisquer dois valores reais, dado pelo usuariopara 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 lacos for a seguir e determine quantas vezes cada laco 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 lacos 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

Page 25: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

ires = ires + 1;

end

end

(d) Calcule os valores da funcao:

f(t) =

{sen(t) ∀t tal que sen(t) > 0

0 caso contrario

para −6π < t < π com intervalos de π/10.

8. O n-esimo numero de Fibonacci e definido pelas equacoes 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 numeros maiores. Escreva um programafib.sci para calcular e imprimir o n-esimo numero de Fibonacci para n > 2, onde n e fornecido pelousuario.

9. Uma matriz An×n e dita diagonalmente dominante se

|aii| >n∑

j 6=i

|aij |, i = 1 : n

Escreva uma funcao que, dada uma matriz qualquer n× n, retorne T se a matriz for diagonalmente domi-nante e F caso contrario.

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 execucao no ambiente Scilab, onde AB e a variavel quecontem a matriz.

10. A localizacao de um ponto em um plano cartesiano pode ser expressa por coordenadas retangulares(x, y) ou coordenadas polares (r, θ). A relacao entre esses dois conjuntos de coordenadas e dada porestas equacoes:

x = r cos θ

y = r sin θ

r =√x2 + y2

θ = tg−1(yx

)Escreva duas funcoes, 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 metodo da bisseccao serve para o calculo apropriado de raızes de equacoes do tipo f(x) = 0, comf : R→ R.

O metodo e bastante simples: dado um intervalo inicial [a, b] contendo uma raiz, divide-se este intervaloao meio. Por exemplo, m = (a + b)/2. Temos agora dois intervalos: [a,m] e [m, b]. Daı basta continuar oprocesso ate a precisao desejada.

Assim:

(a) Encontre as raızes de f(x) = x3 − 2x− 5 = 0.

24

Page 26: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

(b) Calcule as raızes negativas de P (x) = x3 − 3x2 − 6x+ 8 = 0, com ε ≥ 0.05 (erro absoluto) que estano intervalo [−3.83,−0.62].

12. Um sistema linear pode ser dado por:a11x1 + a12x2 + . . . + a1nxn = b1a21x1 + 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 metodo de Gauss-Seidel e um processo que usa a forma (3.1), a partir de uma solucao inicial e atualizaos valores de x ate obter uma precisao requerida. Esta atualizacao usa as componentes que esta sendocalculada. Assim, o valor recem calculado para x

(k+1)1 sera usado no calculo de x

(k+1)2 . O Algoritmo 1

mostra os passos deste metodo.

Dado n, An×n, bn×1 e x(0)n×1, max, ε

1: Para k = 0 ate k = max faca2: Para i = 1 ate i = n faca

3: x(k+1)i =

1

aii

(bi −

i−1∑j=1

aijx(k+1)j −

n∑j=i+1

aijx(k)j

)

4: Se max1≤i≤n

∣∣∣x(k+1)i − x(k)i

∣∣∣ < ε ou

∣∣∣x(k+1)i − x(k)i

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

∣∣∣ < ε entao

5: x = x(k+1)

6: else7: Se k = max entao8: PARE: nao houve convergencia.9: Fim do condicional

10: Fim do condicional11: Fim do laco12: Fim do laco

Algoritmo 1: Metodo de Gauss-Seidel

Implemente o metodo 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

Page 27: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 3. PROJETO DE PROGRAMACAO

com ε < 10−3 e max = 50. Antes de iniciar o algoritmo acima, verifique se o sistema e diagonalmentedominante, usando a funcao implementada no exercıcio 9 (usando o Scilab, e claro!).

13. Equilibrar a reacao quiımica:

KMnO2 + H2SO4 + NaNO2 → K2SO4 + MnSO4 + NaNO3 + H2O.

Modelagem Matematica

O balanceamento de uma equacao quımica e baseada na lei de conservacao da massa de Lavoisier: Emum sistema quımico isolado, a massa permanente conservante, quaisquer que sejam as transformacoesque nele se processem. A lei de Lavoisier tambem pode ser expressa na forma: Em uma reacao quımica,a soma das massas dos reagentes e igual a soma das massas dos produtos resultantes. Conclui-se,entao, que os elementos tem de estar nos dois membros da equacao em igual quantidade.

O metodo algebrico de balanceamento consiste em atribuir coeficientes literais xi as substacias que apa-recem na equacao, os quais constituem as incognitas. Aplicando a lei de Lavoisier e comparando os ele-mentos membro a membro, constroi-se um sistema de equacoes algebricas lineares, onde as incognitassao os coeficientes estequiometricos xi da reacao quiımica. Se houver mais incognitas do que equacoes,atribui-se um valor arbitrario a uma delas:

x1 KMnO2 + x2 H2SO4 + x3 NaNO2 → x4 K2SO4 + x5 MnSO4 + x6 NaNO3 + x7 H2O

A Tabela 3.3 sistematiza a equacao acima.

K: x1 = 2x4

Mn: x1 = x5O: 2x1 + 4x2 + 2x3 = 4x4 + 4x5 + 3x6 + x7

H: 2x2 = 2x7

S: x2 = x4 + x5

Na: x3 = x6

N: x3 = x6

Tabela 3.3: Transformacao da equacao quımica em equacoes.

Como as duas ultimas expressoes sao iguais, elimina-se uma delas. Deste modo, tem-se um sistemalinear com 6 equacoes e 7 incognitas. Atribuindo um valor arbitrario a uma delas, por exemplo, x7 = 1,obtem-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 funcao LU do Scilab e com o metodo de Gauss-Seidel imple-

mentado (faca a troca de linhas necessarias para a melhor execucao deste metodo).

(b) Compare as solucoes obtidas em relacao a precisao de cada metodo.

(c) Faca uma analise do resultado obtido.

26

Page 28: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4

Graficos no Scilab

Comecamos aqui a explorar alguns dos recursos graficos bi-dimensionais do ambiente Scilab. Informacoesmais detalhadas sobre todos os comandos disponıveis na biblioteca grafica do Scilab (acessem o help).

4.1 A Janela Grafica do Scilab

Todas as saıdas graficas de comandos do Scilab sao apresentadas em uma janela grafica. Note que, estajanela tem um menu horizontal com quatro opcoes:

1. File: possui oito sub-opcoes que permitem manipular arquivos relacionados com graficos gerados: NewFigure, Load, Save, Export to, Copy to clipboard, Page Setup, Print e Close.

2. Tools: apresenta quatro sub-opcoes de mobilidade da figura gerada, que sao: Show/Hide Toolbar, quehabilita um menu de atalhos para as demais opcoes desta pasta, como descrito abaixo.

• Zoom: permite a ampliacao de uma parte do grafico. Escolhendo esta opcao e delimitando uma area,a parte do grafico dentro da area escolhida sera expandida.

• UnZoom: desfaz as manipulacoes realizadas atraves da opcao Zoom.

• 3D Rot.: permite efetuar rotacoes em graficos bi-dimensionais e tri-dimensionais.

3. Edit: possui nove sub-opcoes que permite manipular o grafico gerado: Select as current figure, Redrawfigure, Clear Figure, Figure Properties, Axes Properties, Start Entity Picker, Stop Entity Picker, Start datatipmanager e Stop datatip manager.

4. ?: mostra duas opcoes de ajuda: Scilab Help e About Scilab.

No Scilab, graficos sucessivos sao sobrepostos em uma janela grafica. Para evitar que isto ocorra, podemosutilizar o comando clf(). Estes comando limpa a janela grafica.

As janelas graficas podem ser manipuladas atraves da funcao scf(). Por exemplo:

--> // Manipulacao de janelas graficas

--> scf(0) // Acesso a janela grafica 0 (default)

--> scf(1) // Acesso a janela grafica 1

4.2 Graficos Bi-dimensionaisGraficos bi-dimensionais podem ser gerados atraves da utilizacao da funcao plot2d(). A forma mais simples

desta funcao e:

Page 29: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS NO SCILAB

--> plot2d( [ x ], y )

onde x e y podem ser matrizes ou vetores reais. Os colchetes [ e ], envolvendo x indicam que este parametroe opcional. Vejamos algumas consideracoes sobre este parametros:

1. Se x e y sao vetores, a funcao plot2d() permite tracar o grafico de y em funcao de x. E importanteobservar que os dois vetores devem ter a mesma dimensao, isto e, os dois vetores devem ter o mesmonumero de elementos.

2. Se x e um vetor e y e uma matriz, a funcao plot2d() permite tracar o grafico de cada coluna da matriz y

em funcao de x. Neste caso, o numero de elementos das colunas da matriz deve ser igual ao numerode elementos do vetor x.

3. Se x e y sao matrizes, a funcao plot2d permite tracar o grafico de cada coluna da matriz y em funcao decada coluna da matriz x. Neste caso, as matizes devem ter as mesmas dimensoes.

4. Se y e um vetor, a funcao plot2d() permite tracar o grafico do vetor y em funcao do vetor [1:size(y)].

5. Se y e uma matriz, a funcao plot2d() permite tracar o grafico da matriz y em funcao do vetor [1:size(y)].

Vamos apresentar exemplos de graficos gerados para cada uma das opcoes de entrada x, y apresentadosanteriormente. Os graficos serao gerados no intervalo [0, 2π], com incremento 0.1. As atividades abaixo podemser feitas no Scinote 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

Page 30: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS NO SCILAB

--> // Item 5: Y = matriz (sem x explicito)

--> clf()

--> plot2d( Y )

Verifique que, apos a execucao de cada grafico, limpamos a tela atraves do comando clf(), para evitar queo proximo grafico se sobreponha ao anterior.

Vejamos agora alguns comandos para melhorar a sua janela grafica:

• xtitle( titulo ): acrescenta o tıtulo em cada um dos graficos gerados, cujo argumento e uma string.

• xsetech( [ x, y, largura, altura] ): Sub-divide a janela grafica do Scilab.

A janela grafica e definida com largura e altura iguais a 1 e com o seu sistema de referencias 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 maximos iguais a 1.

Vamos re-escrever os comandos acima dentro do Scinote (graf 2d.sci) usando os comandos xtitle() exsetech().

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

Page 31: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS 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 funcao plot2d() inclui um terceiro argumento: plot2d( [x], y, <opt args> ), onde<opt args> e uma sequencia de opcoes que determinam as caracterısticas do grafico bi-dimensional:

< opt args > := opcao1 = valor1, opcao2 = valor2, . . . , opcaon = valorn

As opcoes podem ser:

• style: e utilizada para especificar o padrao da curva (ou curvas) que estao sendo tracadas. O valorassociado a essa opcao dever ser um vetor com valores inteiros positivos ou negativos. Se o valor forpositivo, a curva e contınua e defina-se a cor da curva tracada. Se o valor for negativo ou zero, a curvasera desenhada usando marcadores.

• logflag: define a escala, logarıtmica ou linear, a ser utilizada nos eixos x e y do grafico. Os valoresassociados a essa opcao sao strings, “nn”, “nl”, “ln” ou “ll”, onde l indica a escala logarıtmica, n a escalanormal, na sequencia xy. O valor padrao desta opcao e “nn”, isto e, escala normal com graduacao normaldos eixos (omite-se esta opcao).

• rect: e utilizada para estabelecer os limites do grafico. O valor associado a essa opcao um vetor real comquatro entradas [xmin, ymin, xmax, ymax], onde xmin, xmax, ymin e ymax indicam os valores mınimose maximos para os eixos x e y, respectivamente.

• frameflag: e utilizada para controlar a escala dos eixos coordenados. O valor associado a essa opcao eum numero inteiro entre 0 e 8, inclusive.

• axesflag: especifica como os eixos serao tracados. O valor associado a essa opcao e um numero inteiroentre 0 e 5, inclusive;

• leg: permite definer as legendas das curvas. O valor associado a esse parametro e uma string de carac-teres para cada grafico tracado.

Um exemplo com estas opcoes 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 graficos bidimensionais polares e usando a funcao polarplot(rho, theta, <opt args>),como segue no exemplo a seguir (cardeoide.sce).

30

Page 32: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS 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

Page 33: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS 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 variacoes, como apresentado na Tabela 4.1.

Comando Tipo de Graficoplot2d2() graficos 2-D linearizados.plot2d3() graficos 2-D com barras verticais.plot2d4() graficos 2-D com setas.

Tabela 4.1: Variacoes do comando plot2d.

Uma outra maneira de gerar graficos 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 apresentacao de um grafico (dem subplot.sci).Dentre eles, destacamos:

• xgrid(): coloca uma grade em um grafico bi-dimensional;

• titlepage: coloca um tıtulo no meio de uma janela grafica.

• subplot(m,n,p): divide a janela grafica do Scilab em uma matriz m × n (m linhas e n colunas). Emcada um dos elementos da matriz, especificado por p, pode ser colocado num grafico.

// 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

Page 34: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS NO SCILAB

subplot(2,2,4)

grayplot // Chamada do demo da funcao grayplot

Observem que, no menu horizontal da janela grafica temos a opcao File e sub-opcao Export. Esta sub-opcaopermite 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 Tabela4.1.

clear

clf()

subplot(2,2,1)

x = [-2.9:0.1:2.9]’;

y = exp(-x.*x);

plot2d(x, y);

errbar(x, y, 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

Page 35: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 4. GRAFICOS NO SCILAB

4.3 Exercıcios1. Acompanhe o que foi feito, para funcoes po-

lares (plot2d opt), e faca um (ou mais) pro-grama(s) para as funcoes que segue. Nem to-das as funcoes listadas abaixo precisam usarpolarplot! Atencao ao definir os domınios decada funcao.

(a) Cissoide de Diocles:

y2 =x3

a− xou

x =

at2

1 + t2

y =at3

1 + t2

(b) Estrofoide: y2 = x2 a+ x

a− x(c) Hipocicloide (atroide): x

23 + y

23 = a

23 ou{

x = a cos3(t)

y = a sen3(t)

(d) Espiral de Arquimedes: r = aϕ, r ≥ 0.

(e) Espirial hiperbolica: r =a

ϕ, r ≥ 0.

(f) Espiral logaritmica: r = eaϕ.

(g) Rosa de tres petalas: r = a sen(3ϕ), r ≥ 0.

(h) Rosa de quatro petalas: r = a | sen(2ϕ)|

2. Trace o grafico das funcoes abaixo (cuidado como domınio de cada funcao !!!!).

(a) f(x) = x3;

(b) f(x) =√x− 1;

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

x ;

(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. Atraves da estrutura function, escreva cadauma das funcoes abaixo e escreva um programa(para cada uma ou para todas) e que chame asfuncoes (usando a funcao exec()) e faca os seusrespectivos graficos:

(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 inteiro0 se x nao 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

Page 36: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 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 maneirausual.

Manipulacao de Arquivos – Comandos save e load

As variaveis, 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.13591.0096 1.0343 0.8435 0.6856 0.61 0.5392 0.39460.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 diretorio de trabalho. O arquivo valores.dat e um arquivobinario. Para recuperar os valores x e y, usamos o comando load:

--> clear

--> x

--> y

--> load(’valores.dat’, ’dd’)

--> dd

Page 37: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB

5.1 Spline Cubicas em Ambiente Scilab

A interpolacao utilizando polinomios de ordem elevada muitas vezes produz resultados mal comportados.Existem varios metodos para eleminar esse problema. Dentre eles, as Splines Cubicas sao muito populares. NoScilab, a interpolacao por splines cubicas e executada pelas funcoes splin e interp. No help do Scilab, osdetalhes para o uso destas funcoes estao disponıveis.

A Funcao splin

A funcao splin toma os dados x e y e os valores desejados xi (normalmente xi ∈ [x0, xn]), encontra opolinomio da interpolacao por spline cubica que se adequa a x e y, e entao calcula os polinomios para encontraros valores de yi correspondente a cada valor xi.

• Notacao: 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 : selecao do tipo de spline a ser calculada;

d : vetor no mesmo formato de x (di e a derivada da spline em xi).

• Descricao: a funcao splin calcula a spline cubica (ou sub-spline) s que interpola os pontos (xi, yi), istoe, 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 calculo das splines em alguns pontos tem de ser feitos pela funcao interp.

• Tipos de Splines: podemos calcular diferentes tipos de splines cubicas, aqui vamos ver as sintaxe dassplines cubicas natural e restrita:

’natural’ : a spline cubida e calculada supondo s′′(x0) = s′′(xn) = 0. Assim, a funcao pode ser dada por:

d = splin( x, y, ’natural’)

’clamped’ : a spline cubica e calcula usando s′(x0) = f ′(x0) e s′(xn) = f ′(xn). Neste caso, temos de passarum vetor com estes valores, como segue:

d = splin( x, y, ’clamped’, [f’(x0) f’(xn)] )

A Funcao interp

A funcao interp calcula a spline cubica.

• Notacao: yp = interp( xp, x, y, d ), onde:

xp : vetor dos numeros reais definida em [x0, xn];

x, y, d : vetores de numeros reais, definindo uma spline cubica;

yp : vetor de numeros reais de mesmo tamanho de xp, com os valores de s(xi) (yp(i) = s( xp(i) )).

• Descricao: Dado 3 vetores (x, y, d) definidos pela funcao splin com f(xi) = s(xi) e di = s′(xi), estafuncao calcula s em xp(i).

36

Page 38: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB

ExemplosVeremos aqui, dois exemplos para o uso das funcoes 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.1.1. Construa as splines cubicas para os dados abaixo, como e solicitados nos itens (1) e (2).

xi 0.1 0.2 0.3 0.4yi -0.62049958 -0.28398668 0.00660095 0.2484244

1. Natural (s′′(x0) = s′′(xn));

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])

37

Page 39: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB

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)

5.2 Exercıcios1. Seja a tabela:

i 1 2 3 4 5 6 7 8 9 10xi 5 6 7 8 9 10 11 12 13 14yi 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 usandoload.

(b) Faca o grafico da dispersao dos dados da tabela acima.

(c) Use a funcao splin - natural para ajustar os dados da tabela acima.

2. Seja a tabela contendo o tempo de germinacao de sementes (dias) em funcao da temperatura media dosolo (◦C) para doze locais de plantio:

Temperatura (◦C) 14 6 3 6 7 6 7 4 8 7 6 4Germinacao (dias) 10 26 41 29 27 27 19 28 19 31 29 33

(a) Faca o diagrama da dispersao dos dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva que melhor ajuste os dados.

(c) Faca o grafico com a funcao encontrada e o diagrama de dispersao.

3. Um automovel, viajando por uma estrada reta, e cronometrado em diversos pontos. Os dados dessasobservacoes sao apresentados na tabela a seguir:

Use um spline cubico restrito para prever a posicao do automovel e sua velocidade quanto t = 10s.

4. Suspeita-se que o alto conteudo de tanino existente nas folhas maduras do carvalho inibe o crescimentodas larvas da mariposa de inverno, que danificam severamente essas arvores em certos anos. A tabela a

38

Page 40: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB

Tempo (s) 0 3 5 8 13Distancia (ft) 0 225 383 623 993

Velocidade (ft/s) 75 77 80 74 72

seguir relaciona o peso medio de duas amostras de larvas em varios momentos durante o perıodo de 28dias apos o nascimento. A primeira amostra foi cultivada em folhas de carvalho novas e a segunda, emfolhas maduras da mesma arvore.

Dia 0 6 10 13 17 20 28Peso medio da amostra 1 (mg) 6.67 17.33 42.67 37.33 30.1 29.31 28.74Peso medio da amostra 2 (mg) 6.67 16.11 18.89 15 10.56 9.44 8.89

(a) Faca o grafico de dispersao dos dados;

(b) Use um spline cubico natural para aproximar a curva de peso medio de cada amostra;

(c) Encontre uma aproximacao do peso medio maximo para cada amostra determinando o ponto maximodo spline;

(d) Faca um grafico com as duas curvas, em cores diferentes e com legenda para cada curva, juntamentecom a dispersao dos dados.

5. O custo do seguro saude nos Estados Unidos para os anos de 1994–2001, em bilhoes de dolares, e dadopela tabela:

Ano 1994 1995 1996 1997 1998 1999 2000 2001Seguro Saude 55.8 58.0 56.6 59.3 63.6 65.7 70.6 75.0

(a) Faca o grafico de dispersao dos dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva que melhor ajuste os dados.

(c) Gere um grafico com a funcao encontrada e a dispersao dos dados.

6. O Consumer Price Index (CPI) e uma medida da media de precos, num determinado perıodo, de servicose produtos. Para estabelecer uma base para comparacao, a media anual de precos mensais nos anos de1982–84 e usada para gerar os dados que segue na tabela abaixo para produtos derivados do tabaco. Atabela representa a porcentagem de consumo deste produto.

Ano 1970 1975 1980 1985 1990 1995 1999 2000 2001Tabaco (CPI) 43.1 54.7 72.0 116.7 181.5 225.7 355.8 374.9 425.2

(a) Faca o grafico da dispersao destes dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva que melhor ajuste os dados;

(c) A curva pode ser uma reta ? Por que ?

(d) Acrescente no grafico do item (a) a curva obtida;

(e) Usando a curva obtida, qual sera o CPI do tabaco em 2010 ?

39

Page 41: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB

Ano 1991 1993 1995 1997 1999 2001 2002% gasta 21.6 20.8 22.0 22.2 20.7 19.3 16.4

7. Anualmente, o governo dos Estados Unidos gasta boa parte do seu dinheiro com a dıvida interna. Atabela que segue mostra a porcentagem destinada para o pagamento da dıvida interna para os anos de1991–2002.

(a) Faca o grafico da dispersao destes dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva que melhor ajuste os dados;

(c) Acrescente no grafico 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 realizadodesde 1940 ate 2000 (em milhao).

Ano 1940 1950 1960 1970 1980 1990 2000Populacao U.S. 132 151 179 203 227 249 281

(a) Faca o grafico da dispersao destes dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva linear para ajustar os dados;

(c) Acrescente no grafico do item (a) a curva obtida;

(d) Usando a curva obtida, estime a populacao em 2010 e 2020;

(e) Usando a curva obtida, estime o ano que a populacao atingira 320 milhoes.

9. A empresa Delta Airlines publicou uma tabela mostrando a temperatura (em F◦) fora do aviao quando estetroca de altitude (em 1000 pes).

x (Altitude em 1000 pes) 1 5 10 15 20 30 36.087y (Temperatura) 56 41 23 5 -15 -47 -69

(a) Faca o grafico da dispersao destes dados;

(b) Programe o Metodo de Quadrados Mınimos para obter uma curva linear para ajustar os dados;

(c) Acrescente no grafico do item (a) a curva obtida;

(d) Usando a curva obtida, determine a temperatura a 40000 pes.

40

Page 42: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 6

Graficos Tri-Dimensionais

6.1 Graficos Tri-dimensionaisO comando plot3d() permite tracar graficos de superfıcies z = f(x, y).Na notacao Scilab, as variaveis independentes x e y sao vetores de dimensao n1 e n2, respectivamente,

e a variavel z e uma matriz de dimencao n1 x n2. Entao, por essa definicao, o elemento z(i,j) e o valor dasuperfıcie no ponto ( x(i), y(j) ).

Para exemplificar o uso de plot3d(), vamos considerar a funcao 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)

Alem da funcao plot3d(), e de suas variacoes, o Scilab implementa outras funcoes que permitem tracargraficos tri-dimensionais. Dentre elas, destacamos:

• fplot3d: permite tracar graficos de superfıcies por funcoes, 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 graficos de superfıcies definidas por funcoes, como no caso anterior. Neste caso,as superfıcies sao apresentadas em uma graduacao de cores diferente do comando acima.

6.1.1 Graficos 3-D Especiais

As seguintes funcoes permitem tracar graficos tri-dimensionais especiais:

• param3d: permite tracar curvas parametricas.

• hist3d: permite tracar histogramas 3-D.

Page 43: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 6. GRAFICOS TRI-DIMENSIONAIS

• contour: permite tracar curvas de nıvel para uma funcao 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 funcoes especiais para graficos 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);

42

Page 44: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 6. GRAFICOS 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 execucao de graficos 3D em ambiente Scilab,uma vez que a funcao 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 opcoes da funcao 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 sao as coordenadas dos eixos x, y e z, respectivamente;

• theta e alpha sao valores dados para a visualizacao da janela grafica 3D (o angulo usado para visualizacaoda figura);

• leg e usado para definir uma legenda para cada eixo, separado por @, por exemplo: X@Y@Z;

Atencao: Na funcao plot2d, leg e usado para atribuir uma legenda em cada curva disposta na mesmajanela grafica.

• xf, yf e zf sao matrizes de tamanho (nf, n), onde define-se as faces usadas para desenhar a superfıcie.No caso, existem n faces, e cada face e definida por uma malha com nf nos.

• flag e um vetor com tres numeros: flag = [mode, type, box], sendo:

– mode usa um valor inteiro para colorir a superfıcie desenhada (veja o help para explorar a escala decores – surface properties);

– type ajusta automaticamente a escala da figura, usando valores inteiros de 0 a 6;

– box modela o tipo de escala da figura (veja axes properties).

• ebox estabelece os limites do grafico. O valor associado a essa opcao e um vetor real com seis entradas[xmin, xmax, ymin, ymax, zmin, zmax], onde xmin, xmax, ymin, ymax, zmin e zmax indicam os valoresmınimos e maximos para os eixos x, y e z, respectivamente.

43

Page 45: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 6. GRAFICOS TRI-DIMENSIONAIS

6.2.1 Funcao eval3d e eval3dp

As funcoes eval3d e eval3dp criam uma malha para fazer o grafico de uma funcao em tres dimensoes.

• z = eval3d(funcao, x, y):

– funcao: uma funcao que aceita vetores como argumento;

– x, y; vetores de tamanhos (1, n1) e (1, n2), mas e aconselhavel que os argumentos x e y tenhamo mesmo tamanho;

– z: matriz de tamanho (n1, n2) (malha de nos pela interseccao 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 superfıcie parametrica 3D, onde:

– [xf, yf, zf]: matrizes de tamanho ( 4, (n-1)*(m-1) ). O elementos xf(:, i), yf(:, j) ezf(:, i) sao as coordenadas dos eixos x, y e z, respectivamente, de 4 pontos dos 4 lados de cadaface;

– funcao: uma funcao 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);

44

Page 46: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 6. GRAFICOS 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 );

45

Page 47: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

[xf, yf, zf] = eval3dp( rev, r, t );

plot3d( xf, yf, zf, alpha = 82, theta = 50, flag = [17, 2, 3] )

6.3 Exercıcios1. Faca o grafico das funcoes abaixo:

(a) f(x, y) = x2 + y2;

(b) f(x, y) = xy + 3x;

(c) f(x, y) = x2 + y2 − 1;

(d) f(x, y) = 5;

(e) f(x, y) = y2 + 3x;

(f) f(x, y) = xy3 + 4x2 − 2;

(g) f(x, y) =√

1− x2 − y2;

(h) f(x, y) =√x2 + y2;

(i) f(x, y) = y − sen(x);

(j) f(x, y) = x2 − y;

(k) f(x, y) = 4x2 + y2.

2. Esboce graficamente as curvas de nıvel associadas a f :

(a) f(x, y) = y2 − x2;

(b) f(x, y) = xy;

(c) f(x, y) = 3x− 2y;

(d) f(x, y) = x2 + y2.

3. Faca o solido de revolucao das seguintes funcoes (escolha o intervalo e o eixo de rotacao adequada-mente):

(a) f(x) = x3;

(b) f(x) =√x− 1;

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

x ;

(e) f(x) =√

4− x2;

(f) f(x) =√x2 − 4;

(g) f(x) = 1(x−4)2 ;

(h) f(x) = −(4 + x2);

(i) f(x) = 2−√x;

(j) f(x) = ln(x);

(k) f(x) = e−x.

46

Page 48: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 7

Exercıcios Adicionais

1. Podemos definir as funcoes seno, cosseno e tangente hiperbolicos como:

sinh (x) =ex− e−x

2, cosh (x) =

ex + e−x

2, tanh (x) =

ex− e−x

ex + e−x

• Escreva tres funcoes no Scilab que implementem o seno, o cosseno e a tangente hiperbolicos;

• Escreva um programa que utilize suas funcoes para desenhar a forma das funcoes seno, cosseno etangente hiperbolicos numa mesma janela grafica.

2. O produto vetorial × entre dois vetores V1 e V2 e definido como:

V1 ×V2 = (Vy1Vz2 − Vy2Vz1) i + (Vz1Vx2 − Vz2Vx1) j + (Vx1Vy2 − Vx2Vy1)k

onde V1 = Vx1i + Vy1j + Vz1 k e V2 = Vx2i + Vy2j + Vz2 k.

• Escreva uma funcao para calcular o produto vetorial de dois vetores V1 e V2. Note que essa funcaoretorna um vetor real como resultado;

• Utilize a funcao para calcular o produto vetorial dos vetores V1 = [−2, 4, 0.5] e V2 = [0.5, 3, 2].

3. Escreva uma funcao chamada “min max” que tente localizar os valores maximos e mınimos de uma funcaoreal f(x) arbitraria dentro de um intervalo fixo [a, b]. Os argumentos de entrada de min max devem ser:

• func – O nome da funcao;

• 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 numero de passos de busca.

Os seguintes argumentos de saıda devem ser:

• xmin – O valor de x no qual o mınimo foi encontrado;

• min value – O mınimo encontrado de f(x);

• xmax – O valor de x no qual o maximo foi encontrado;

• max value – O maximo encontrado de f(x).

Page 49: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

4. Escreva um programa de teste para a funcao min max criada no exercıcio anterior. O programa devepassar para min max uma funcao definida pelo usuario f(x) = x3 − 5x2 + 5x− 2, e encontrar o mınimo eo maximo com 200 passos no intervalo −1 ≤ x ≤ 3. Os valores resultantes de mınimo e maximo devemser impressos.

5. A derivada de uma funcao contınua f(x) e definida pela equacao:

d

dxf(x) = lim

∆x→0

f(x+ ∆x)− f(x)

∆x

Em uma funcao amostrada, a definicao se torna:

f ′(xi) =f(xi+1)− f(xi)

∆x(7.1)

onde ∆x = xi+1 − xi. Suponha que um vetor vect contem nsamp amostras de uma funcao espacadas dedx.

• Escreva uma funcao que calcule a derivada desse vetor usando a aproximacao em (7.1). A funcaodeve verificar se dx e maior que zero para previnir erros de divisao por zero na funcao.

• Para verificar sua funcao, voce deve gerar um conjunto de dados cuja derivada seja conhecida ecomparar o resultado da funcao com a resposta correta. Uma boa escolha para uma funcao de testee f(x) = sen(x). Do calculo elementar, sabemos que f ′(x) = cos(x). Gere um vetor com 100 valoresda funcao f(x) = sen(x), iniciando com x = 0 e utilizando um passo ∆x = 0.05. Calcule a derivadado vetor com a sua funcao e compare os resultados com a resposta correta.

• Faca um grafico com os valores calculados pela equacao (7.1) de maneira discretizada e um graficoda funcao f(x) = cos(x) contınua.

Quao proximo ficou a sua funcao do calculo da resposta correta para a derivada ?

6. A forca gravitacional F entre dois corpos com massas m1 e m2 e dada pela equacao:

F =Gm1m2

r2

onde G e a constante gravitacional(6.672× 10−11Nm2/kg2

), m1 e m2 sao as massas dos corpos em

quilogramas e r e a distancia entre os dois corpos. Escreva uma funcao para calcular a forca gravitacionalentre dois corpos dadas as suas massas e a distancia entre eles. Teste a sua funcao determinando aforca sobre um satelite de 800 kg em orbita a 38000 km da superfıcie da Terra. (A massa da Terra e de5.98× 1024 kg.)

7. Suponha que voce 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 voce tera no banco depois de n meses sera dada pela equacao:

F = P

(1 +

i

1200

)n

onde F e o valor futuro da conta ei

12e a taxa de juros mensal (o fator extra de 100 no denominador

converte a taxa de interesse de porcentagens para fracoes). Escreva um programa para ler uma quantiainicial P e uma taxa de juros anual i, calcular e gerar uma matriz do valor futuro do investimento a cadames dos proximos cinco anos.

48

Page 50: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

CAPITULO 7. EXERCICIOS ADICIONAIS

8. Os antigos babilonios usavam a seguinte aproximacao (baseada no Metodo de Newton) para calcular√a:

xk+1 =1

2

(xk +

a

xk

)Escreva uma funcao para calcular

√a usando a aproximacao acima:

• A sua funcao deve receber um chute inicial para a raiz;

• Execute o calculo acima ate que |xk+1 − xk| < ε, onde ε e um valor suficientemente pequeno;

• Use a sua funcao para calcular√

25,√

21 e√

5000, e compare com os valores fornecidos pela calcu-ladora e/ou pelo Scilab.

9. Usando o metodo de Newton, podemos calcular a raiz p√a, a ≥ 0 atraves da seguinte formula de recorrecia:

xx+1 =1

p

((p− 1)xk +

a

xp−1k

), com x0 > 0.

Escreva uma funcao para calcular p√a usando a aproximacao acima:

• A sua funcao deve receber um chute inicial para a raiz e a sua potencia (p);

• Execute o calculo acima ate que |xk+1 − xk| < ε, onde ε e um valor suficientemente pequeno;

• Use a sua funcao para calcular 3√

125, 4√

14641 e 3√

14, e compare com os valores fornecidos pelacalculadora e/ou pelo Scilab.

10. O Metodo de Newton pode ser aplicado a qualquer equacao contendo funcoes cujas derivadas possamser calculadas. Por exemplo, ache uma aproximacao para o recıproco de um numero positivo C, definindoa funcao f(x) = 1

x − C e aplicando o Metodo de Newton.

Observacao: O Metodo de Newton aplicado a essa funcao nos permite calcular o inverso de um numerosem efetuar nenhuma divisao! Este metodo e util porque, na maioria dos computadores de alta velocidade,a operacao de divisao consume mais tempo do que varias multiplicacoes e adicoes juntas.

• Escreva uma funcao (no inverso.sci)para este problema onde devemos fornecer apenas o numeroC.

• Escreva um programa que leia a funcao no inverso.sci e execute a funcao para um dado C.

Dado x0, f(x), f ′(x), max e ε1: Para k = 0 ate k = max faca

2: xx+1 = xk −f(xk)

f ′(xk)3: Se |f(xk+1)| ≤ ε ou |xk+1 − xk| ≤ ε entao4: PARE, x = xk+1

5: Fim do condicional6: Se k = max entao7: PARE, o metodo nao converge para a solucao.8: Fim do condicional9: Fim do laco

Algoritmo 2: Metodo de Newton-Raphson

49

Page 51: L ´ MATEMATICA ´ COMPUTACIONAL CILAB - sorocaba.unesp.br · 6.1 Graficos Tri-dimensionais ... /100 // 30 --- porcentagem de faltas permitidas // 100 -- porcentagem total de aulas

Referencias Bibliograficas

[1] R. L. Burden, J. D. Faires. Analise Numerica. Pioneira Thomson Learning, 2003.

[2] F. F. Campos Fo. Algoritmos Numericos. LTC Editora, 2001.

[3] S. J. Chapman. Programacao em Matlab para Engenheiros. Pioneira Thomson Learnin, 2003.

[4] D. Hanselman, B. Littlefield. 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. Introducao ao Scilab: versao 3.0. http://www.dca.ufrn.br/~pmotta

[8] www.rau-tu.unicamp.br/scilab/

[9] http://www.scilab.org

50