Escolar Documentos
Profissional Documentos
Cultura Documentos
ITULO 1
Introduc ao ao Ambiente Scilab
1.1 O Ambiente Scilab
OScilab e umambiente utilizado no desenvolvimento de programas para a resoluc ao de problemas num ericos.
Vamos conhecer um pouco mais sobre o seu ambiente de trabalho.
Tendo iniciado o programa (isto depende do sistema operacional), voc e ver a mensagens do fabricante e um
pequeno prompt de comando aguardando alguma ac ao sua:
-----------------------------------------------
scilab-5.3.0
Consortium Scilab (DIGITEO)
Copyright (c) 1989-2010 (INRIA)
Copyright (c) 1989-2007 (ENPC)
------------------------------------------------
Startup execution:
loading initial environment
-->
A echa --> indica que o Scilab est a pronto para receber comandos e o cursor e o prompt inicial. Na janela
do Scilab h a um menu horizontal com seis opc oes: File, Edit, Preferences, Control, Applications e ?. Utilizando
o mouse escolha uma das opc oes.
File possui oito sub-opc oes (apresentaremos as quatro mais importantes):
Execute: executa o conte udo de arquivos (roda o programa implementado).
Open a le: Abre o arquivo do seu programa no editor de texto do Scilab.
Change current directory: Muda o diret orio em que o Scilab foi aberto para o diret orio do arquivo
(programa).
Quit: permite sair do ambiente Scilab de forma natural.
Vari aveis Especiais CAP
ITULO 1. INTRODUC
AO AO AMBIENTE SCILAB
Edit comandos semelhantes ao editor de texto do Microsoft Ofce ou Open Ofce (cut, copy, paste,
select all);
Preferences o comando mais importante desta opc ao e o Clear Console que limpa a janela de execuc ao
do ambiente Scilab.
Control possui tr es sub-opc oes cuja utilidade dos dois primeiros itens pode ser observada na seq u encia
de comandos abaixo:
--> // pressione Ctrl-c e <enter>
-1-> // leva ao prompt de 1o. nivel
-1-> // pressione Ctrl-c e <enter>
-2-> // leva ao prompt de 2o. nivel
-2->resume // retorna ao prompt de 1o. nivel
-1->resume // retorna ao prompt inicial
--> // Ctrl-c e <enter>
-1-> // Ctrl-c e <enter>
-2->abort // retorna ao prompt inicial
-->
Interrupt interrompe a execuc ao de um programa.
Applications aplicativos do ambiente Scilab:
SciNotes abre um editor de texto pr oprio para programac ao em ambiente Scilab.
? informac oes e ajuda sobre o ambiente Scilab. Esta possui quatro sub-opc oes:
Scilab Help: informac oes sobre os comandos do ambiente Scilab.
Scilab Demonstration: Demonstrac ao de alguns comandos deste ambiente de trabalho.
Web Links: sites relacionados ao Scilab.
About Scilab: mostra a licenca de uso do programa.
Ainda na janela do Scilab h a alguns icones abaixo do menu descrito acima. Estes icones s ao atalhos para
as func oes mais usadas no menu acima.
1.2 Variaveis Especiais
Algumas vari aveis assumem valores pr e-denidos no Scilab e podem ser vistas usando o comando who.
--> who
Your variables are:
home modules_managerlib helptoolslib scinoteslib
xcoslib matiolib atomsguilib atomslib
parameterslib simulated_annealinglib genetic_algorithmslib umfpacklib
fft scicos_autolib scicos_utilslib spreadsheetlib
demo_toolslib development_toolslib soundlib texmacslib
tclscilib m2scilib maple2scilablib compatibility_functilib
statisticslib timelib stringlib special_functionslib
3
Vari aveis Especiais CAP
ITULO 1. INTRODUC
AO AO AMBIENTE SCILAB
sparselib signal_processinglib %z %s
polynomialslib overloadinglib optimsimplexlib optimbaselib
neldermeadlib optimizationlib linear_algebralib jvmlib
output_streamlib iolib interpolationlib integerlib
dynamic_linklib uitreelib guilib data_structureslib
cacsdlib graphic_exportlib datatipslib graphicslib
fileiolib functionslib elementary_functionslib differential_equationlib
corelib PWD %tk %pvm
MSDOS %F %T %nan
%inf SCI SCIHOME TMPDIR
%gui %fftw $ %t
%f %eps %io %i
%e %pi
using 7845 elements out of 5000000.
and 78 variables out of 9231.
Your global variables are:
%modalWarning demolist %driverName %exportFileName
%toolboxes %toolboxes_dir
using 623 elements out of 180001.
and 6 variables out of 767.
-->
Vejamos o signicado das vari avies mais recorrentes:
Vari avel O que signica Vari avel O que signica
%i Valor de
p
(1) %pi = 3, 1415926...
%e Constante de Euler e = 2, 7182818... %eps precis ao da m aquina no qual o Scilab est a instalado.
%inf Innito %nan Not a number
Para saber em qual diret orio o Scilab foi instalado, use a vari avel SCI e para saber em qual diret orio o
Scilab foi aberto, use PWD. O resultado depende do sistema operacional em que o Scilab foi instalado.
-->SCI // Diretorio onde o Scilab foi instalado
SCI =
/home/luiza/scilab-5.0.3/share/scilab
-->PWD // Diretorio onde o Scilab foi lancado
PWD =
/home/luiza
-->home // Mesmo valor da variavel PWD
home =
4
Arquivos *.sce de Comandos CAP
ITULO 1. INTRODUC
AO AO AMBIENTE SCILAB
/home/luiza
-->
1.3 Arquivos *.sce de Comandos
Para problemas simples, e mais r apido e eciente introduzir seus comandos no prompt do Scilab. Mas,
se o n umero de comandos e grande, ou se voc e deseja mudar o valor de uma ou mais vari aveis e re-executar
alguns comandos, pode ser trabalhoso e/ou tedioso introduzir os comandos no prompt. O Scilab apresenta
uma soluc ao simples para esse problema: voc e pode colocar os comandos do Scilab em um arquivo de texto
simples (pode-se fazer uso do Editor do Scilab) e depois abrir este arquivo e execut a-lo no Scilab.
Atenc ao: no Scilab, ponto-e-vrgula no nal de um comando inibe a apresentac ao de seu resultado e,
qualquer caracter ap os o uso de // e ignorado pelo Scilab pois este e interpretado como coment ario. Tamb em
e importante salientar que os coment arios (e os nomes das vari aveis e func oes utilizados no Scilab) N
AO
devem ter qualquer tipo de acentuac ao.
Abra o Editor de texto SciPad atrav es do menu do Scilab e digite os comandos abaixo.
// Erro e Estabilidade
// LMC -- 1o. programa
x = input(Entre com o valor de x); // Entrada do valor de x via teclado!
S = 0; // Variavel que recebera o valor somatorio.
format(v, 25); S // no. de elementos na representacao de S
// v: formato padrao de uma variaval numerica
for (i = 1:30000) // somatorio de 1 ate 30000
S = S + x;
end // Final do for
S
Salve este arquivo no diret orio LMC que foi criado. Para isso, clique com o mouse no menu File e selecione
Save as. Atribua o nome soma ex4.sce e volte ao ambiente Scilab executando os passos abaixo:
-->pwd // verifique se esta no diretorio onde gravou o 1oTeste.sce
-->exec(soma.sce) // executa o programa 1oTeste.sce
O comando exec(nome-do-arquivo.sce) executa o programa gerado.
Execute o programa acima para x = 0.5 e x = 0.11 !
Tarefa: Desenvolva um programa em Scilab para calcular (
ITULO 1. INTRODUC
AO AO AMBIENTE SCILAB
a = 2; // a = aulas por semana
b = 15; // b = semanas de aulas no semestre
c = a*b; // c = horas-aulas do semestre
x = (30*c)/100 // 30 --- porcentagem de faltas permitidas
// 100 -- porcentagem total de aulas
// x ---- no. de aulas que o aluno pode faltar
y = int(x/2) // y ---- no. de dias que o aluno pode faltar
// int(.) no. inteiro de dias (em cada dia de aula sao dadas duas aulas)
Teste o programa acima para diferentes valores de a (outras disciplinas) !!!! Por exemplo, para a disciplina
de C alculo Num erico e Computacional.
6
CAP
ITULO 2
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
e nalmente
-->v = [1
-->2
-->3]
v
1.
2.
3.
Note que neste ultimo caso, o Scilab cou esperando que se completasse o vetor com ] .
Um jeito pr atico de criar vetores igualmente espacados e usando o operador : . Observe:
-->u =1:10
u
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
ou ainda
-->u = 0:0.1:1
u
column 1 to 10
0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
column 11
1.
onde podemos especicar umincremento (no caso, 0.1). Observe que, neste caso temos: u = inicio:incremento:final
ou u = inicio:decremento:final (teste u = 1:-0.1:0).
Uma outra maneira de construir um vetor linha e usando a func ao linspace cujos elementos desta func ao
s ao:
linspace( primeiro_valor, ultimo_valor, numero_de_elementos )
Se o numero de elementos e omitido, a func ao gera automanticamente 100 elementos.
--> x = linspace( 0, %pi)
--> x = linspace( 0, %pi, 11)
Veja que, a notac ao : permite especicar o intervalo entre os pontos, mas n ao o n umero de pontos. Por
outro lado, a func ao linspace permite especicar o n umero de elementos mas n ao o intervalo entre os pontos.
Comandos Descric ao
x = inicio:fim Cria um vetor linha comecando em inicio, incrementa em um
e p ara em fim (ou antes).
x = inicio:incremento:fim Cria um vetor linha comecando em inicio, incrementa em incremento
e p ara em fim (ou antes).
x = linspace(inicio,fim,n) Cria um vetor linha, com espacamento linear, comecando em inicio
e terminando em fim com n elementos.
x = linspace(inicio,fim) Cria um vetor linha, com espacamento linear, comecando em inicio
e terminando em fim com cem (100) elementos.
Tabela 2.1: Comandos b asicos para a construc ao de vetores.
8
Matrizes CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
2.2 Matrizes
O caso matricial e igualmente simples. Siga o exemplo:
-->A = [1 2 3 4
-->5 6 7 8
-->9 10 11 12]
A
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
-->size(A)
ans
3. 4.
-->
onde acabamos de criar uma matriz 3 4. A func ao size(.) mostra o tamanho da sua matriz ou vetor.
Note que podemos utilizar o operador : em combinac ao com o que foi visto at e agora. Tente o comando
--> A = [1:5, 9:-1:5; 0:0.25:1, 1:-0.25:0]
Interprete o que aconteceu!
2.2.1 Matrizes Padrao
Dada a utilidade deste tipo de matrizes, o Scilab cont em func oes para a criac ao de matrizes padr ao. Esse
tipo de matriz inclui aqueles cujos elementos s ao todos iguais a zero ou a um, matriz identidade, matrizes de
n umeros aleat orios, matrizes diagonais e cujos elementos s ao uma constante dada.
-->A = ones(3,2) // ones(.) gera uma matriz com todos os elementos iguais a 1
A
1. 1.
1. 1.
1. 1.
-->B = zeros(2,6) // zeros (.) gera matrizes com todos os elementos iguais a 0
B
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
-->C = eye(3,3) // eye(.) gera uma matriz identidade
C
1. 0. 0.
0. 1. 0.
0. 0. 1.
-->D = eye(2,4)
D
1. 0. 0. 0.
9
Matrizes CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
0. 1. 0. 0.
-->E = eye(4,2)
E
1. 0.
0. 1.
0. 0.
0. 0.
-->A = rand(5,5)
A
0.2113249 0.6283918 0.5608486 0.2320748 0.3076091
0.7560439 0.8497452 0.6623569 0.2312237 0.9329616
0.0002211 0.6857310 0.7263507 0.2164633 0.2146008
0.3303271 0.8782165 0.1985144 0.8833888 0.312642
0.6653811 0.0683740 0.5442573 0.6525135 0.3616361
O comando rand(m, n) cria uma matriz m n com entradas aleat orias no
intervalo [0, 1).
-->a = 1:4 // Comece com um vetor simples
a
1. 2. 3. 4.
-->diag(a) // diag(.) coloca os elementos na diagonal principal
ans
1. 0. 0. 0.
0. 2. 0. 0.
0. 0. 3. 0.
0. 0. 0. 4.
-->diag(a,1) // Coloca os elementos uma posicao acima da diagonal
ans
0. 1. 0. 0. 0.
0. 0. 2. 0. 0.
0. 0. 0. 3. 0.
0. 0. 0. 0. 4.
0. 0. 0. 0. 0.
-->diag(a,-2) // Coloca os elementos duas posicoes abaixo da diagonal
ans
0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0.
1. 0. 0. 0. 0. 0.
0. 2. 0. 0. 0. 0.
0. 0. 3. 0. 0. 0.
0. 0. 0. 4. 0. 0.
10
Acesso aos elementos CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
A func ao diag(.) cria matrizes diagonais em que um vetor determinado pode ser colocado em qualquer
posic ao paralela ` a diagonal principal ou na pr opria diagonal principal.
Com essas matrizes padr ao, h a v arias formas de se criar uma matriz em que todos os elementos apresentam
o mesmo valor. Execute os pr oximos comandos e verique o que acontece!
--> d = %e; // Escolha do numero e para este exemplo
--> d*ones(3,4) // Metodo mais lento (multiplicacao de vetor por escalar)
--> d+zeros(3,4) // Metodo mais lento (adicao de escalar a vetor)
--> d(ones(3,4)) // Metodo mais rapido (enderecamento vetorial)
Func ao Prop osito
zeros(n) Gera uma matriz n n com elementos iguais a zero.
zeros(n,m) Gera uma matriz n m com elementos iguais a zero.
one(n) Gera uma matriz n n com elementos iguais a um.
one(n,m) Gera uma matriz n m com elementos iguais a um.
eye(n) Gera uma matriz identidade n n.
eye(n,m) Gera uma matriz identidade n m.
diag(v) Gera uma matriz cujos elementos do vetor v cam na diagonal principal.
rand(n,m) Gera uma matriz n m com valores aleat orios em (0, 1);
size(.) Retorna dois valores, especicando o n umero de linhas e o de colunas de uma matriz ou vetor em (.).
Tabela 2.2: Func oes Scilab para gerar matrizes padr ao.
2.3 Acesso aos elementos
O Scilab d a ao usu ario v arios modos de acesso aos vetores e matrizes. O mais simples deles e sim-
plesmente digitando o nome do vetor/matriz criado. Caso voc e n ao se lembre do que criou, use o comando
whos.
H a duas formas de usar o comando whos:
whos(): Lista todas as func oes do Scilab, apresentando o nome da func ao, o tipo (constante, vari avel,
booleana, e assim por diante), o tamanho e os bytes usado para a func ao apresentada.
whos: Neste caso e preciso especicar o tipo de func ao que voc e deseja vericar (veremos um exemplo
no nal desta sec ao).
--> A
A
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
Para acessar a matriz um elemento por vez, use par enteses:
--> v = [7; 19; 21];
-->v(2)
ans
19.
-->A(2,3)
ans
7.
-->A(3,2)
11
Matem atica Matricial CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
ans
10.
-->A(5,7)
!--error 21
invalid index
--> whos -type constant
Name Type Size Bytes
ans constant 1 by 1 24
v constant 3 by 1 40
A constant 3 by 4 112
%scicos_display_mode constant 1 by 1 24
%scicos_contrib constant 0 by 0 16
%nan constant 1 by 1 24
%inf constant 1 by 1 24
%eps constant 1 by 1 24
%io constant 1 by 2 32
%i constant 1 by 1 32
-->
Note que se voc e tenta acessar elementos que n ao existem, o programa reclama.
Por em, a forma mais poderosa de acesso (e mais r apida) e usando o conceito de sub-matrizes. Para
usarmos partes de matrizes em operac oes, usamos novamente o operador : . Suponha que criamos uma
matriz do tipo:
-->A = rand(6,6)
A
0.0437334 0.7783129 0.8415518 0.5618661 0.3873779 0.2615761
0.4818509 0.2119030 0.4062025 0.5896177 0.9222899 0.4993494
0.2639556 0.1121355 0.4094825 0.6853980 0.9488184 0.2638578
0.4148104 0.6856896 0.8784126 0.8906225 0.3435337 0.5253563
0.2806498 0.1531217 0.1138360 0.5042213 0.3760119 0.5376230
0.1280058 0.6970851 0.1998338 0.3493615 0.7340941 0.1199926
Podemos trabalhar em partes isoladas da matriz. Experimente:
-->A(2:4, 3:5)
Descreva o que ocorreu.
Naturalmente este processo pode ser usado para atribuic ao de matrizes (ou vetores). Por em, antes de
executar, tente prever o resultado.
-->A(3, 3:5) = [1 2 3]
2.4 Matematica Matricial
Para executar operac oes alg ebricas matriciais, seguiremos os seguintes exemplos:
12
Matem atica Matricial CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
Comandos Descric ao
A (r,c) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetor
de ndice r e cujas colunas s ao denidas pelo vetor c.
A (r,:) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetor
de ndice r e inclui todas as colunas.
A (:,c) Fornece a sub-matriz A cujas colunas s ao denidas pelo vetor
de ndice c e inclui todas as linhas.
A (:) Fornece todos os elementos de A em um vetor coluna, coluna a coluna.
Tabela 2.3: Refer encia a sub-matrizes de uma matriz.
--> A = rand(5, 3); //Exemplos de operacoes vetoriais/matriciais
--> B = rand(3, 5);
--> v1 = rand(5, 1);
--> v2 = rand(1, 5);
// soma, subtracao, multiplicacao e transposicao
--> C = A*A+B*B
--> D = A*A*v1(1:3)
--> E = v1 * v2
// operacoes elemento a elemento
--> v3 = v1 + v2
--> v4 = v1 .* v2
--> v5 = v2 .^ 2
--> F = A .* B
// sub-matrizes!
--> G = C(2:4, 2:4) * v2(2:4)
--> C(1:3, 2) = G
Analise os resultados e certique-se que entendeu o enderecamento das matrizes e vetores! Isto e muito
importante!!!
Observe a tabela 2.4.
Operac oes com elementos Dados representativos
de vetores e matrizes A = [a
1
a
2
. . . a
n
]
dados B = [b
1
b
2
. . . b
n
], c R
Adic ao a escalar A + c = [a
1
+ c a
2
+ c . . . a
n
+ c]
Subtrac ao por escalar Ac = [a
1
c a
2
c . . . a
n
c]
Multiplicac ao por escalar A c = [a
1
c a
2
c . . . a
n
c]
Divisc ao por escalar A/c = [a
1
/c a
2
/c . . . a
n
/c]
Soma de vetores A + B = [a
1
+ b
1
a
2
+ b
2
. . . a
n
+ b
n
]
Multiplicac ao de vetores A. B = [a
1
. b
1
a
2
. b
2
. . . a
n
. b
n
]
Divis ao de vetores pela direita A./B = [a
1
./b
1
a
2
./b
2
. . . a
n
./b
n
]
Divis ao de vetores pela esquerda B.\A = [a
1
./b
1
a
2
./b
2
. . . a
n
./b
n
]
Potenciac ao de vetores A.c = [a
1
c a
2
c . . . a
n
c]
c.A = [ca
1
ca
2
. . . ca
n
]
A.B = [a
1
b
1
a
2
b
2
. . . a
n
b
n
]
Tabela 2.4: Operac oes b asicas aplicadas a elementos de vetores e matrizes.
Tomando
A =
_
1 2 3
3 2 1
_
, B =
_
4 5 6
6 5 4
_
, e c = 2
13
Uso de Scilab na Soluc ao de Sistemas Lineares: M etodos Diretos CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
execute as operac oes apresentadas na Tabela 2.4.
2.5 Uso de Scilab na Solucao de Sistemas Lineares: Metodos
Diretos
Considere o sistema Ax = b, associado ` a matriz A e ao vetor b, denidos como segue:
--> A = [ 3 -2 2; 1 1 1; 2 1 -1 ];
--> b = [ -3 -4 -3 ]
Apresentamos a seguir algumas func oes denidas no Scilab relacionados ` a Soluc ao de Sistemas Lineares
M etodos Diretos. Mais informac oes podem ser obtidas pelo recurso help seguido da func ao de interesse (por
exemplo, help lu mostra detalhes sobre o c alculo da decomposic ao LU de uma matriz quadrada).
Para resolver o sistema acima, temos algumas maneiras:
1. Usando o operador \ : Este operador e interno ao Scilab e funciona de forma muito simples:
--> x = A \ b // Calcula a solucao do sistema Ax = b (se existir!).
2. Outra forma e usando a Decomposic ao LU. Para obter a decomposic ao A = LU, e resolver o sistema a
partir dela use:
-->[ L, U ] = lu(A)
--> y = L \ b
--> x = U \ y
Note que o Scilab n ao confundiu U com u, o que indica que o programa e sensvel ao caso (mai usculas
e min usculas). Repare tamb em na forma como o Scilab retornou dois argumentos (L e U) da func ao,
o que e uma caracterstica incomum em linguagens de programac ao, por em corriqueira em linguagem
num erica, como o Scilab. Tamb em poderamos ter feito a operac ao de forma direta:
--> x = U \ ( L \ b )
Ou ainda:
--> [ L, U, P ] = lu(A) // Calcula a decomposicao LU de A
Neste caso P e a matriz de permutac ao do pivoteamento usado no c alculo dos fatores L e U. A matriz P
multiplicada por A tem o efeito das trocas de linhas efetuadas quando o pivoteamento e realizado.
3. C alculo da func ao inversa da matriz A: Um Sistema Linear tem soluc ao unica se a matriz A for inversvel.
Uma maneira de testar esta condic ao e usando a func ao inv(.) do Scilab:
--> IA = inv(A)
--> IA * A
--> x = IA * b
4. Uma outra func ao do Scilab interessante e a que calcula o valor do determinante de uma matriz (det(.)):
-->d = det(A)
Pergunta: Qual a relac ao existente entre det(A) e det(U) ?
14
Exerccios CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
2.6 Exerccios
1. Digite as seguintes matrizes no ambiente
Scilab:
A =
_
_
4 3
2 1
0 6
_
_
, B =
_
_
1 2 4
2 4 1
0 1 5
_
_
, C =
_
_
5
8
7
_
_
(a) Mostre somente a segunda coluna de A;
(b) Mostre o elemento (3, 2) de A;
(c) Mostre somente a terceira coluna de B;
(d) Mostre as duas primeiras colunas de B;
(e) Mostre as duas ultimas linhas de A;
2. Considere as matrizes A, B e o vetor C do
exerccio anterior. Dena uma nova matriz D
com o mesmo conte udo de A. Faca a mudanca
ou execute a operac ao - solicitada:
(a) Atribua ao elemento (1, 1) de D o valor 12;
(b) Atribua ao elemento (3, 2) de D o valor 8;
(c) Execute o comando E = [D C]. Descreva o
conte udo de E em termos de D e C;
(d) Execute o comando F = [D B]. Descreva o
conte udo de F em termos de D e B;
(e) Execute o comando G = [E; B]. Descreva
o conte udo de G em termos de E e B;
3. Para criar um vetor coluna no Scilab digita-se
da seguinte maneira: [1; 2; 3]. Execute os co-
mandos abaixo no Scilab:
(a) Construa um vetor coluna c1 com elemen-
tos: 0, 1, 3, 5;
(b) Construa um vetor coluna c2 com elemen-
tos: 4, 2, 0, 7;
(c) Construa uma matriz H cujas colunas s ao
c1 e c2 sem repetir a entrada dos elemen-
tos;
(d) Construa uma matriz K onde as duas pri-
meiras colunas s ao compostas pelos ele-
mentos de c1 e a terceira coluna com ele-
mentos de c2. Novamente, execute o solici-
tado sem repetir a entrada de dados.
4. Para criar um vetor linha fazemos: [1 2 3]. Exe-
cute no Scilab os comandos abaixo:
(a) Construa um vetor linha r1 com elementos
2, 1, 5.
(b) Construa um vetor linha r2 com elementos
7, 9, 3 .
(c) Construa uma matriz Mcujas linhas s ao r1
e r2 sem repetir a entrada de dados feita
anteiormente.
(d) Descreva o resultado de: 3 r1.
(e) Descreva o resultado de: r1 +r2.
(f) Descreva o resultado de: [r1; r1 r2; r2].
5. Responda ` as quest oes seguintes considerando a
matriz abaixo.
c =
_
_
1.1 3.2 3.4 0.6
0.6 1.1 0.6 3.1
1.3 0.6 5.5 0.0
_
_
(a) Qual o tamanho de c ?
(b) Qual o valor de (2, 3) ?
(c) Apresente todos os ndices cujo valor seja
0.6.
6. Determine o tamanho das seguintes matrizes.
Verique suas respostas criando as matrizes no
Scilab.
(a) u = [10 20*(%i) 10+20];
(b) v = [-1; 20; 3];
(c) w = [1 0 -9; 2 -2 1; 1 2 3];
(d) x = [u v];
(e) y(3,3) = -7;
(f) z = [zeros(4,1) ones(4,1) zeros(1,4)];
(g) v(4) = x(2,1);
7. Qual o valor de w(2,1) ?
8. Qual o valor de x(2,1) ?
9. Qual o valor de y(2,1) ?
10. Qual o valor de v(3) ap os a execuc ao da ex-
press ao (g)?
11. Considere a matriz do exerccio (1). Determine o
conte udo das seguintes submatrizes:
(a) c(2,:)
(b) c(6)
(c) c(1:2, 2:4)
(d) c([1,3],2)
(e) c([2 2], [3 3])
15
Exerccios CAP
ITULO 2.
ALGEBRA LINEAR NUM
ERICA
(f) c([2 2 2], [3 3 3])
(g) c([1 2 2], [3 3])
12. Determine o conte udo da matriz a ap os a exe-
cuc ao das seguintes declarac oes:
(a) a = [1 2 3; 4 5 6; 7 8 9];
a([3 1], :) = a([1 3],:);
(b) a = [1 2 3; 4 5 6; 7 8 9];
a([1 3], :) = a([2 2],:);
(c) a = [1 2 3; 4 5 6; 7 8 9];
a([2 2],:);
13. Determine o conte udo da matriz a ap os a
execuc ao das seguintes declarac oes:
(a) a = eye(3,3);
b = [1 2 3];
a(2,:) = b;
(b) a = eye(3,3);
b = [4 5 6];
a(:,3) = b;
(c) a = eye(3,3);
b = [7 8 9];
a(3,:) = b([3 1 2]);
14. Resolva o seguinte sistema linear Ax = b, onde:
a
ij
=
1
i + j 1
, b
i
=
1
i
, i, j = 1 : n
use n = 5, 10 e 15. Voc e pode explicar os
resultados? Observe que a soluc ao exata e
(1, 0, 0, . . . , 0)
t
15. Duas quantias de dinheiro x
1
e x
2
somam
$600, 00. A quantia x
1
e o dobro de x
2
. Resolva
o sistema usando a func ao LU do Scilab.
16. S ao investidos $8000, 00. Parte a 6% de taxa de
juros e parte a 11% de taxa de juros. Quanto de-
veria ser investido em cada modalidade se um to-
tal de 9% e desejado ? Resolva o sistema usando
a func ao LU do Scilab.
Resposta: x
1
= $3200, 00 para 6% e x
2
=
$4800, 00 para 9%.
17. Encontre a, b e c tais que o gr aco do crculo com
equac ao x
2
+ y
2
+ ax + bx + c = 0 passe pelos
pontos (1, 5), (4, 4) e (3.1). Resolva o sistema
usando a func ao LU do Scilab.
Resposta: a = 4, b = 6 e c = 5.
18. A quantia de $16500, 00 foi investida em tr es con-
tas, resultando um lucro anual de 5%, 8% e 10%,
respectivamente. A quantia investida a 5% era
igual a quantia investida a 8% mais o dobro da
quantia investida a 10%. Quanto foi investido
em cada conta se o total dos juros sobre o in-
vestimento foi de $1085, 00 ? Resolva o sistema
usando a func ao LU do Scilab.
Resposta: $9500, 00 a 5%, $4500, 00 a 8% e
$2500, 00 a 10%.
19. Encontre a, b e c tais que a equac ao da par abola
y = ax
2
+bx+c passe pelos pontos (1, 4), (1, 6)
e (2, 12). Resolva o sistema usando a func ao LU
do Scilab.
Resposta: a = 3, b = 1 e c = 2.
16
CAP
ITULO 3
Projeto de Programac ao
Programar e f acil. Saber o que programar e difcil.
a
a
Citac ao de [3].
Uma das caractersticas da linguagem num erica e a facilidade com que o usu ario cria seus pr oprios progra-
mas.
Apesar de simples, a linguagemnum erica disponibiliza a maioria das estruturas das linguagens de programac ao
convencionais. A diferenca principal e que, na programac ao Scilab, n ao h a necessidade da declarac ao pr evia
dos tipos das vari aveis que ser ao utilizadas ao longo do programa.
As linguagens num ericas, como e o caso do Scilab, e um interpretador de comandos. Os programas
escritos em linguagem num erica s ao executados em um tempo maior que os programas semelhantes escri-
tos em linguagens compil aveis. Por outro lado, a vantagem de linguagens num ericas adv em da facilidade de
prototipac ao de programas e da disponibilidade de uma poderosa biblioteca de func oes gr acas.
Neste prop osito, abordaremos aqui a estrutura de programac ao em ambiente num erico, em especial, no
ambiente Scilab. Na sec ao 3.1 ser ao abordados os operadores relacionais e l ogicos, na sec ao 3.2 a estrutura
de Loop, na sec ao 3.3 a estrutura if (condicional) e na sec ao 3.4 a denic ao de manipulac ao de func oes em
ambiente Scilab.
3.1 Operadores Relacionais e Logicos
Al em das operac oes matem aticas convencionais, o Scilab tamb em inclui operac oes relacionais e l ogicas,
cuja nalidade e o de fornecer respostas do tipo verdadeiro ou falso a perguntas, usadas em estruturas de Loops
e condicionais.
No ambiente Scilab, a resposta para express oes l ogicas produzem T se a resposta e verdadeira (true) e F
se a resposta for falsa (false)
1
.
3.1.1 Operadores Relacionais
Os operadores relacionais do Scilab incluem todas as comparac oes habituais e s ao listados na Tabela 3.1.
Atenc ao: Os smbolo = e == t em signicados diferentes! O smbolo == compara duas vari avies e retorna T
se forem iguais e F se forem diferentes; o smbolo = e usado para atribuir o resultado de uma operac ao a uma
vari avel.
Os operadores relacionais do Scilab podem ser usados para comparar dois vetores de mesmo tamanho ou
para comparar vetores com escalar (ou ainda, escalar com escalar). Interprete os comandos abaixo:
1
Em outros ambientes de programac ao a reposta para uma sentenca verdadeira e 1 e 0 para uma resposta falsa.
Operadores Relacionais e L ogicos CAP
E possvel combinar express oes relacionais com express oes matem aticas:
--> B = 9 - A;
--> B = B + (B==0)*(%eps)
e uma maneira de substituir os elementos iguais a zero em um vetor pelo n umero %eps
2
. Essa express ao em
particular e, algumas vezes, util para evitar a divis ao por zero, como segue no exemplo abaixo.
--> x = (-3:3)/3
--> y = ones( x )
--> vf = x ~= 0 // encontra posicoes com valores nao-nulos
--> y(vf) = sin( x(vf) )./x( vf ) // trabalha apenas com valores nao-nulos
3.1.2 Operadores L ogicos
Os operadores l ogicos permitem que se combinem ou se neguem express oes relacionais. Os operadores
l ogicos do Scilab s ao dados na Tabela 3.2.
Operador Descric ao
& E
| OU
~ N
AO
Tabela 3.2: Operadores l ogicos.
--> A = 1:9;
--> vf = A > 4 // Encontra o que e maior que 4
--> vf = ~(A>4) // Nega o resultado anterior
--> vf = (A > 2) & (A < 6) // Retorna T para valores maior que 2 e menor que 6
--> vf = (A < 3) | (A > 5) // Retorna T para valores menor que 3 ou para valores maior que 5
2
O n umero %eps, em Scilab, e a menor diferenca entre dois n umeros que e possvel representar.
18
O Loop for e while CAP
_
x + y x 0 e y 0
x + y
2
x 0 e y < 0
x
2
+ y x < 0 e y 0
x
2
+ y
2
x < 0 e y < 0
6. Examine os lacos for a seguir e determine quantas vezes cada laco ser a executado.
(a) for index = 7:10
(b) for jj = 7:-1:10
(c) for index = -10:3:-7
(d) for kk = [0 5; 3 3]
7. Examine os lacos a seguir e determine o valor em ires no nal de cada um.
(a) ires = 0;
for index = 1:10
ires = ires + 1;
end
(b) ires = 0;
for index = 1:10
ires = ires + index;
end
(c) ires = 0;
for index1 = 1:10
for index2 = index1:10
if index2 == 6
break;
end
23
Exerccios CAP
j=i
|a
ij
|, i = 1 : n
Escreva uma func ao que, dada uma matriz qualquer n n, retorne T se a matriz for diagonalmente domi-
nante e F caso contr ario.
P.S.: Ocomando read, como mostra o exemplo que segue, AB = read(nome do arquivo.txt, no de linhas,
no de colunas)), l e um arquivo de dados para execuc ao no ambiente Scilab, onde AB e a vari avel que
cont em a matriz.
10. A localizac ao de um ponto em um plano cartesiano pode ser expressa por coordenadas retangulares
(x, y) ou coordenadas polares (r, ). A relac ao entre esses dois conjuntos de coordenadas e dada por
estas equac oes:
x = r cos
y = r sin
r =
_
x
2
+ y
2
= tg
1
_
y
x
_
Escreva duas func oes, rect2polar e polar2rect,
que convertam coordenadas de retangular para po-
lar e vice-versa, com o angulo expresso em graus.
x
y
r
x
y
11. O m etodo da bissecc ao serve para o c alculo apropriado de razes de equac oes do tipo f(x) = 0, com
f : R R.
O m etodo e bastante simples: dado um intervalo inicial [a, b] contendo uma raiz, divide-se este intervalo
ao meio. Por exemplo, m = (a + b)/2. Temos agora dois intervalos: [a, m] e [m, b]. Da basta continuar o
processo at e a precis ao desejada.
Assim:
(a) Encontre as razes de f(x) = x
3
2x 5 = 0.
24
Exerccios CAP
_
a
11
x
1
+ a
12
x
2
+ . . . + a
1n
x
n
= b
1
a
21
x
1
+ a
22
x
2
+ . . . + a
2n
x
n
= b
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
a
n1
x
1
+ a
n2
x
2
+ . . . + a
nn
x
n
= b
n
na forma matricial como Ax = b, ou ainda:
x
1
=
_
_
b
1
n
j=2
a
1j
x
j
_
_
/a
11
.
.
.
x
i
=
_
_
b
i
n
j=i
a
ij
x
j
_
_
/a
ii
.
.
.
x
n
=
_
_
b
n
n1
j=1
a
nj
x
j
_
_
/a
nn
(3.1)
O m etodo de Gauss-Seidel e um processo que usa a forma (3.1), a partir de uma soluc ao inicial e atualiza
os valores de x at e obter uma precis ao requerida. Esta atualizac ao usa as componentes que est a sendo
calculada. Assim, o valor rec em calculado para x
(k+1)
1
ser a usado no c alculo de x
(k+1)
2
. O Algoritmo 1
mostra os passos deste m etodo.
Dado n, A
nn
, b
n1
e x
(0)
n1
, max,
1: Para k = 0 at e k = max fac a
2: Para i = 1 at e i = n fac a
3: x
(k+1)
i
=
1
a
ii
b
i
i1
X
j=1
a
ij
x
(k+1)
j
n
X
j=i+1
a
ij
x
(k)
j
!
4: Se max
1in
x
(k+1)
i
x
(k)
i
< ou
x
(k+1)
i
x
(k)
i
x
(k+1)
i
< ent ao
5: x = x
(k+1)
6: else
7: Se k = max ent ao
8: PARE: n ao houve converg encia.
9: Fim do condicional
10: Fim do condicional
11: Fim do lac o
12: Fim do lac o
Algoritmo 1: M etodo de Gauss-Seidel
Implemente o m etodo de Gauss-Seidel e resolva o sistema:
_
_
5 2 0 1
1 8 3 2
0 1 6 1
1 1 2 9
_
_
_
_
x
1
x
2
x
3
x
4
_
_
=
_
_
6
10
5
0
_
_
25
Exerccios CAP
_
1 0 0 2 0 0
1 0 0 0 1 0
2 4 2 4 4 3
0 2 0 0 0 0
0 1 0 1 1 0
0 0 1 0 0 1
_
_
_
_
x
1
x
2
x
3
x
4
x
5
x
6
_
_
=
_
_
0
0
1
2
0
0
_
_
(a) Resolva o sistema acima usando a func ao LU do Scilab e com o m etodo de Gauss-Seidel imple-
mentado (faca a troca de linhas necess arias para a melhor execuc ao deste m etodo).
(b) Compare as soluc oes obtidas em relac ao a precis ao de cada m etodo.
(c) Faca uma an alise do resultado obtido.
26
CAP
ITULO 4
Gr acos no Scilab
Comecamos aqui a explorar alguns dos recursos gr acos bi-dimensionais do ambiente Scilab. Informac oes
mais detalhadas sobre todos os comandos disponveis na biblioteca gr aca do Scilab (acessem o help).
4.1 A Janela Graca do Scilab
Todas as sadas gr acas de comandos do Scilab s ao apresentadas em uma janela gr aca. Note que, esta
janela tem um menu horizontal com quatro opc oes:
1. File: possui oito sub-opc oes que permitem manipular arquivos relacionados com gr acos gerados: New
Figure, Load, Save, Export to, Copy to clipboard, Page Setup, Print e Close.
2. Tools: apresenta quatro sub-opc oes de mobilidade da gura gerada, que s ao: Show/Hide Toolbar, que
habilita um menu de atalhos para as demais opc oes desta pasta, como descrito abaixo.
Zoom: permite a ampliac ao de uma parte do gr aco. Escolhendo esta opc ao e delimitando uma area,
a parte do gr aco dentro da area escolhida ser a expandida.
UnZoom: desfaz as manipulac oes realizadas atrav es da opc ao Zoom.
3D Rot.: permite efetuar rotac oes em gr acos bi-dimensionais e tri-dimensionais.
3. Edit: possui nove sub-opc oes que permite manipular o gr aco gerado: Select as current gure, Redraw
gure, Clear Figure, Figure Properties, Axes Properties, Start Entity Picker, Stop Entity Picker, Start datatip
manager e Stop datatip manager.
4. ?: mostra duas opc oes de ajuda: Scilab Help e About Scilab.
No Scilab, gr acos sucessivos s ao sobrepostos emuma janela gr aca. Para evitar que isto ocorra, podemos
utilizar o comando clf(). Estes comando limpa a janela gr aca.
As janelas gr acas podem ser manipuladas atrav es da func ao scf(). Por exemplo:
--> // Manipulacao de janelas graficas
--> scf(0) // Acesso a janela grafica 0 (default)
--> scf(1) // Acesso a janela grafica 1
4.2 Gracos Bi-dimensionais
Gr acos bi-dimensionais podemser gerados atrav es da utilizac ao da func ao plot2d(). A forma mais simples
desta func ao e:
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
--> plot2d( [ x ], y )
onde x e y podem ser matrizes ou vetores reais. Os colchetes [ e ], envolvendo x indicam que este par ametro
e opcional. Vejamos algumas considerac oes sobre este par ametros:
1. Se x e y s ao vetores, a func ao plot2d() permite tracar o gr aco de y em func ao de x.
E importante
observar que os dois vetores devem ter a mesma dimens ao, isto e, os dois vetores devem ter o mesmo
n umero de elementos.
2. Se x e um vetor e y e uma matriz, a func ao plot2d() permite tracar o gr aco de cada coluna da matriz y
em func ao de x. Neste caso, o n umero de elementos das colunas da matriz deve ser igual ao n umero
de elementos do vetor x.
3. Se x e y s ao matrizes, a func ao plot2d permite tracar o gr aco de cada coluna da matriz y em func ao de
cada coluna da matriz x. Neste caso, as matizes devem ter as mesmas dimens oes.
4. Se y e um vetor, a func ao plot2d() permite tracar o gr aco do vetor y em func ao do vetor [1:size(y)].
5. Se y e uma matriz, a func ao plot2d() permite tracar o gr aco da matriz y emfunc ao do vetor [1:size(y)].
Vamos apresentar exemplos de gr acos gerados para cada uma das opc oes de entrada x, y apresentados
anteriormente. Os gr acos ser ao gerados no intervalo [0, 2], com incremento 0.1. As atividades abaixo podem
ser feitas no Scipad ou diretamente no ambiente Scilab.
--> // Item 1: x = vetor, y = vetor
--> x = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, x
--> y = sin( x );
--> // x e y devem ter a mesma dimensao!!!!!!!!
--> size( x )
--> size( y )
--> plot2d( x, y )
--> // Item 2: x = vetor, y = matriz
--> clf() // Limpa a tela grafica - evitar sobreposicao
--> Y = [ sin( x ) cos( x ) ]; // Definindo a matriz Y
--> size (Y) // Observar que a matriz Y possui 63 elementos em cada coluna
--> plot2d( x, Y )
--> // Item 3: x = y = matrizes
--> clf()
--> clear
--> t = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliar
--> X = [ t t ] // Criando a matriz X
--> size( X ) // A matriz X possui 63 elementos em cada coluna
--> Y = [ cos( t ) sin( t ) ];
--> size( Y ) // A matriz Y possui 63 elementos em cada coluna
--> plot2d( X, Y )
--> // Item 4: y = vetor (sem x explicito)
--> clf()
--> x = [ 0:0.1:2*%pi ];
--> plot2d( sin( x ) )
28
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
--> // Item 5: Y = matriz (sem x explicito)
--> clf()
--> plot2d( Y )
Verique que, ap os a execuc ao de cada gr aco, limpamos a tela atrav es do comando clf(), para evitar que
o pr oximo gr aco se sobreponha ao anterior.
Vejamos agora alguns comandos para melhorar a sua janela gr aca:
xtitle( titulo ): acrescenta o ttulo em cada um dos gr acos gerados, cujo argumento e uma string.
xsetech( [ x, y, largura, altura] ): Sub-divide a janela gr aca do Scilab.
A janela gr aca e denida com largura e altura iguais a 1 e com o seu sistema de refer encias com origem
(0, 0) no canto superior esquerdo da janela. O eixo x possui valores crescentes para a direita e o eixo y
possui valores crescentes para baixo. Ambos os eixos possuem valores m aximos iguais a 1.
Vamos re-escrever os comandos acima dentro do Scipad (graf 2d.sci) usando os comandos xtitle() e
xsetech().
clear // Limpar a memoria do Scilab
clf() // Limpar a janela grafica
// Item 1: x = vetor, y = vetor
x = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, x
y = sin( x );
// xsetech( [abcissa, ordenada, largura, altura] ) do grafico
xsetech( [0, 0, 0.3, 0.5] );
xtitle(Item 1);
plot2d( x, y )
// Item 2: x = vetor, y = matriz
Y = [ sin( x ) cos( x ) ]; // Definindo a matriz Y
xsetech( [0.35, 0, 0.3, 0.5] );
xtitle(Item 2);
plot2d( x, Y )
// Item 3: x = y = matrizes
clear
t = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliar
X = [ t t ] // Criando a matriz X
Y = [ cos( t ) sin( t ) ];
xsetech( [0.7, 0, 0.3, 0.5] );
xtitle(Item 3);
29
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
plot2d( X, Y )
// Item 4: y = vetor (sem x explicito)
x = [ 0:0.1:2*%pi ];
xsetech( [0, 0.5, 0.5, 0.5] );
xtitle(Item 4);
plot2d( sin( x ) )
// Item 5: Y = matriz (sem x explicito)
xsetech( [0.5, 0.5, 0.5, 0.5] );
xtitle(Item 5);
plot2d( Y )
A forma geral da func ao plot2d() inclui um terceiro argumento: plot2d( [x], y, <opt args> ), onde
<opt args> e uma seq u encia de opc oes que determinam as caractersticas do gr aco bi-dimensional:
< opt args >:= opcao
1
= valor
1
, opcao
2
= valor
2
, . . . , opcao
n
= valor
n
As opc oes podem ser:
style: e utilizada para especicar o padr ao da curva (ou curvas) que est ao sendo tracadas. O valor
associado ` a essa opc ao dever ser um vetor com valores inteiros positivos ou negativos. Se o valor for
positivo, a curva e contnua e dena-se a cor da curva tracada. Se o valor for negativo ou zero, a curva
ser a desenhada usando marcadores.
logflag: dene a escala, logartmica ou linear, a ser utilizada nos eixos x e y do gr aco. Os valores
associados ` a essa opc ao s ao strings, nn, nl, ln ou ll, onde l indica a escala logartmica, n a escala
normal, na seq u encia xy. O valor padr ao desta opc ao e nn, isto e, escala normal com graduac ao normal
dos eixos (omite-se esta opc ao).
rect: e utilizada para estabelecer os limites do gr aco. O valor associado ` a essa opc ao um vetor real com
quatro entradas [xmin, ymin, xmax, ymax], onde xmin, xmax, ymin e ymax indicam os valores mnimos
e m aximos para os eixos x e y, respectivamente.
frameflag: e utilizada para controlar a escala dos eixos coordenados. O valor associado ` a essa opc ao e
um n umero inteiro entre 0 e 8, inclusive.
axesflag: especica como os eixos ser ao tracados. O valor associado ` a essa opc ao e um n umero inteiro
entre 0 e 5, inclusive;
leg: permite dener as legendas das curvas. O valor associado ` a esse par ametro e uma string de carac-
teres para cada gr aco tracado.
Um exemplo com estas opc oes e apresentado a seguir (opt plot.sci).
--> x = [ -%pi:0.1:%pi ]
--> y = [ sin(x) cos(x) ]
--> plot2d( x, y, style = [2, -1], rect = [-%pi, -1.5, %pi, 1.5], ...
--> axesflag = 5, leg = sen( x )@cos( x ) )
Uma maneira de tracar gr acos bidimensionais polares e usando a func ao polarplot(rho, theta, <opt args>),
como segue no exemplo a seguir (cardeoide.sce).
30
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
clear
clf()
xsetech([0, 0, 0.5, 0.5])
t = linspace(0, 2*%pi);
a = 2;
r = a*(1 + cos(t));
polarplot(t,r, 5)
xtitle(Cardeoide)
xsetech([0.5, 0, 0.5, 0.5])
a = 0.25;
t = linspace(-(%pi)/4, (%pi)/4, 80);
r1 = a*sqrt( cos(2*t) );
r2 = -( a* sqrt( cos(2*t) ) );
polarplot([t, t], [r1, r2], 22)
xtitle(Lemniscata de Bernoulli)
xsetech([0, 0.5, 0.325, 0.5])
t = linspace(-2*%pi, 2*%pi);
a = 1;
x = a*(t - sin(t));
y = a*(1 - cos(t));
plot2d(x, y, 2, frameflag = 3, rect = [-6.2, -0.1, 6.2, 2.1])
xtitle(Cicloide)
xgrid(3)
xsetech([0.325, 0.5, 0.325, 0.5])
t = linspace(0, 2*%pi);
a = 2;
x = a*( cos(t) + t.*sin(t) );
y = a*( sin(t) - t.*cos(t) );
plot2d(x, y, 5, frameflag = 3, rect = [-10, -15, 4, 10])
xgrid(2)
xtitle(Evolvente da circunferencia)
xsetech([0.65, 0.5, 0.35, 0.5])
31
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
a = 2;
t = linspace(-4*%pi, 4*%pi);
x = (3*a*t)./(1 + t^3);
y = (3*a*(t^2))./(1 + t^3);
plot2d(x, y, 2)
xgrid(3)
xtitle(Folio de Descartes)
O comando plot2d() apresenta algumas variac oes, como apresentado na Tabela 4.1.
Comando Tipo de Gr aco
plot2d2() gr acos 2-D linearizados.
plot2d3() gr acos 2-D com barras verticais.
plot2d4() gr acos 2-D com setas.
Tabela 4.1: Variac oes do comando plot2d.
Uma outra maneira de gerar gr acos bi-dimensionais e usando o comando fplot2d() (graf fplot.sci).
Consulte o help do Scilab para maiores detalhes.
--> clear
--> clf()
--> deff( y = f(x), y = sin(x) )
--> x = linspace( -%pi, %pi )
--> fplot2d( x, f )
--> xgrid(2)
4.2.1 Outros Comandos
Existemcomandos que podemser utilizados para melhorar a apresentac ao de umgr aco (dem subplot.sci).
Dentre eles, destacamos:
xgrid(): coloca uma grade em um gr aco bi-dimensional;
titlepage: coloca um ttulo no meio de uma janela gr aca.
subplot(m,n,p): divide a janela gr aca do Scilab em uma matriz m n (m linhas e n colunas). Em
cada um dos elementos da matriz, especicado por p, pode ser colocado num gr aco.
// Demonstracao do comando subplot
clf()
subplot(2,2,1)
champ // Chamada do demo da funcao champ
subplot(2,2,2)
histplot // Chamada do demo da funcao histplot
subplot(2,2,3)
errbar // Chamada do demo da funcao barr
32
Gr acos Bi-dimensionais CAP
ITULO 4. GR
AFICOS NO SCILAB
subplot(2,2,4)
grayplot // Chamada do demo da funcao grayplot
Observem que, no menu horizontal da janela gr aca temos a opc ao File e sub-opc ao Export. Esta sub-opc ao
permite exportar a gura gerada no formato: *.gif, entre outros !
Executem o programa (plot2d opt.sce) que segue abaixo e compare com os comandos listados na Tabela
4.1.
clear
clf()
subplot(2,2,1)
x = [-2.9:0.1:2.9];
y = exp(-x.*x);
plot2d(t, x);
errbar(t,x, 0.02*ones(x), 0.1*ones(x))
xtitle("Barra de erros: variacao inferior e Superior")
subplot(2,2,2)
plot2d2(x, y, style = 2)
xtitle("Funcao escada: visualizacao discreta dos dados")
subplot(2,2,3)
plot2d3(x, y, style = 3)
xtitle("Barras verticais: analise de frequencia")
subplot(2,2,4)
x = linspace(1, 1000);
y = log(x);
plot2d(x, y, logflag = "ln") // l == escala logaritmica
// n == escala normal
xgrid(3);
xtitle("logflag: escala logaritmica")
33
Exerccios CAP
ITULO 4. GR
AFICOS NO SCILAB
4.3 Exerccios
1. Acompanhe o que foi feito, para func oes po-
lares (plot2d opt), e faca um (ou mais) pro-
grama(s) para as func oes que segue. Nem to-
das as func oes listadas abaixo precisam usar
polarplot! Atenc ao ao denir os domnios de
cada func ao.
(a) Ciss oide de Diocles:
y
2
=
x
3
a x
ou
_
_
x =
at
2
1 + t
2
y =
at
3
1 + t
2
(b) Estrof oide: y
2
= x
2
a + x
a x
(c) Hipocicl oide (atr oide): x
2
3
+ y
2
3
= a
2
3
ou
_
x = a cos
3
(t)
y = a sen
3
(t)
(d) Espiral de Arquimedes: r = a , r 0.
(e) Espirial hiperb olica: r =
a
, r 0.
(f) Espiral logaritmica: r = e
a
.
(g) Rosa de tr es p etalas: r = a sen(3), r 0.
(h) Rosa de quatro p etalas: r = a | sen(2)|
2. Trace o gr aco das func oes abaixo (cuidado com
o domnio de cada func ao !!!!).
(a) f(x) = x
3
;
(b) f(x) =
x 1;
(c) f(x) = |x|;
(d) f(x) =
1
x
;
(e) f(x) =
4 x
2
;
(f) f(x) = |x 4|;
(g) f(x) = x +|x|;
(h) f(x) =
x
2
4;
(i) f(x) =
1
(x4)
2
;
(j) f(x) = (4 + x
2
);
(k) f(x) =
x
|x|
;
(l) f(x) = 2
x;
(m) f(x) = ln(x) (mude o tipo de escala);
(n) f(x) = e
x
(mude o tipo de escala).
3. Atrav es da estrutura function, escreva cada
uma das func oes abaixo e escreva um programa
(para cada uma ou para todas) e que chame as
func oes (usando a func ao exec()) e faca os seus
respectivos gr acos:
(a)
f(x) =
_
1 se x < 0
1 se x 0
(b)
f(x) =
_
_
_
5 se x < 5
x se 5 x 5
5 se x > 5
(c)
f(x) =
_
_
_
x
2
se x 1
x
3
se |x| < 1
2x se x 1
(d)
f(x) =
_
1 se x e inteiro
0 se x n ao e inteiro
(e)
f(x) =
_
_
_
x se x < 0
2 se 0 x < 1
x
2
se x 1
(f)
f(x) =
_
_
_
x se x 1
x
2
se 1 x < 2
x se x 2
34
CAP
ITULO 5
Ajuste de Curvas em Ambiente Scilab
Manipulacao de Arquivos Comando read
Para a leitura de um arquivo no formato de matriz, o Scilab usa o comando read:
--> A = read(nome_do_arquivo.txt, numero_de_linhas, numero_de_colunas)
O arquivo contendo a matriz a ser lida deve conter apenas os elementos da matriz disposto de maneira
usual.
Manipulacao de Arquivos Comandos save e load
As vari aveis, vetores ou matrizes criadas no ambiente Scilab podem ser armazenadas em um arquivo.
Considere os vetores:
--> x = [0:0.1:2];
--> y = [5.8955 3.5639 ... 0.1704 0.2636];
--> dd = [x; y];
onde
y = [ 5.8955 3.5639 2.5173 1.979 1.899 1.3938 1.1359
1.0096 1.0343 0.8435 0.6856 0.61 0.5392 0.3946
0.3903 0.5474 0.3459 0.137 0.2211 0.1704 0.2636 ]
Para salvar x e y em um arquivo chamado valores.dat, usamos o comando save com a sintaxe:
--> save(valores.dat, dd)
O comando save cria o arquivo valores.dat no diret orio de trabalho. O arquivo valores.dat e um arquivo
bin ario. Para recuperar os valores x e y, usamos o comando load:
--> clear
--> x
--> y
--> load(valores.dat, dd)
--> dd
Denindo a Func ao de Ajuste CAP
i=1
(y
i
g(x
i
))
2
(5.1)
onde y
i
s ao elementos do vetor y que fornecem os valores reais a serem ajustados e g(x) a func ao a ser
aproximada para estes valores. O nosso objetivo e o de encontrar os coecientes da func ao g(x) de maneira
que r seja o menor valor possvel (minimizac ao do resduo).
Para os dados do exemplo da Sec ao 5, uma func ao que pode fornecer um bom ajuste e do tipo:
g(x) = c
1
e
c
2
x
+c
3
(5.2)
A func ao (5.1), para o ambiente Scilab, retorna dois tipos de informac ao (como veremos abaixo): um vetor
com os coecientes de (5.2) e o resduo. Assim (curvas.sce):
// Exemplo de ajuste de dados usando Scilab.
clear
load(valores.dat, dd)
// Definindo a funcao residuo. Supondo que a funcao a ser ajustada
// tenha parametros c_1, c_2, ... c_n, definimos a funcao residuo como:
//
// erro = x_n+1 - g( x, c_1, c_2, ..., c_n )
deff( erro = g(c,dd), erro = dd(2) - c(1)*exp( c(2)*dd(1) ) - c(3) )
Nesta func ao r, os elementos dd(1) e dd(2) correspondem a primeira e segunda linha da matriz armaze-
nada em valores.dat, ou seja, aos valores de x e y do exemplo da Sec ao 5. O m etodo de Quadrados Mnimos
no Scilab sempre segue este padr ao: a ultima componente do vetor sempre corresponde a y.
A Funcao datafit
Oambiente Scilab possui a func ao datafit que ajusta qualquer tipo de func ao pelo m etodo dos Quadrados
Minmos. Esta precisa de tr es informac oes: a func ao a ser ajustada g(c,dd) (denida nos padr oes da sec ao
anterior), os elementos do arquivo valores.dat, que foram armazenados em dd e um chute inicial para o c alculo
dos coecientes de (5.2). No nosso caso:
c0 = [ 1; -1; 0 ]; // Chute inicial para os parametros.
// Calculando o ajuste. A variavel "c" corresponde aos parametros
// ajustados e a variavel "e" ao erro quadratico de ajuste.
[c,e] = datafit(g, dd, c0);
onde c e um vetor coluna contendo os coecientes da func ao G(x) e e e o resduo nal.
Ap os a execuc ao deste passo, j a e possvel denir a func ao G(x) com os coecientes calculados por datafit
(note que o Scilab n ao confunde g com G):
36
Spline C ubicas em Ambiente Scilab CAP
(x
i
) = d
i
(conhecida como forma de Hermite).
O c alculo das splines em alguns pontos tem de ser feitos pela func ao interp.
Tipos de Splines: podemos calcular diferentes tipos de splines c ubicas, aqui vamos ver as sintaxe das
splines c ubicas natural e restrita:
37
Spline C ubicas em Ambiente Scilab CAP
(x
0
) = s
(x
n
) = 0. Assim, a func ao pode ser dada por:
d = splin( x, y, natural)
clamped : a spline c ubica e c alcula usando s
(x
0
) = f
(x
0
) e s
(x
n
) = f
(x
n
). Neste caso, temos de passar
um vetor com estes valores, como segue:
d = splin( x, y, clamped, [f(x0) f(xn)] )
A Funcao interp
A func ao interp calcula a spline c ubica.
Notac ao: yp = interp( xp, x, y, d ), onde:
xp : vetor dos n umeros reais denida em [x
0
, x
n
];
x, y, d : vetores de n umeros reais, denindo uma spline c ubica;
yp : vetor de n umeros reais de mesmo tamanho de xp, com os valores de s(x
i
) (yp(i) = s( xp(i) )).
Descric ao: Dado 3 vetores (x, y, d) denidos pela func ao splin com f(x
i
) = s(x
i
) e d
i
= s
(x
i
), esta
func ao calcula s em xp(i).
Exemplos
Veremos aqui, dois exemplos para o uso das func oes splin e interp.
// Exemplo (spline_teste.sce)
clear
x = [0 1 2];
y = [1 2 -1];
plot2d(x, y, -2)
d = splin(x, y, natural)
xx = linspace(0, 2);
// yy = interp(xx, x, y, d);
deff(yy = f(xx), yy = interp(xx, x, y, d))
// plot2d(xx, yy, 2, rect = [-1, -2, 3, 3])
fplot2d(xx, f, 2, rect = [-1, -2, 3, 3])
Tomemos agora o problema abaixo.
Exemplo 5.2.1. Construa as splines c ubicas para os dados abaixo, como e solicitados nos itens (1) e (2).
1. Natural (s
(x
0
) = s
(x
n
));
38
Spline C ubicas em Ambiente Scilab CAP
(0.1) = 3.58502082 e f
(0.4) = 2.16529366.
// Spline (spline_aula.sce)
clear
clf()
x = [0.1 0.2 0.3 0.4];
y = [-0.62049958 -0.28398668 0.00660095 0.2484244];
xx = linspace(0.1, 0.4);
subplot(1,2,1)
xtitle(Interpolacao Natural)
plot2d(x, y, -5, rect = [0.08, -0.7, 0.45, 0.3])
dnat = splin(x, y, "natural");
ynat = interp(xx, x, y, dnat);
plot2d(xx, ynat, 2)
subplot(1,2,2)
xtitle(Interpolacao Restrita)
plot2d(x, y, -4, rect = [0.08, -0.7, 0.45, 0.3])
t = [3.58502082 2.16529366];
drest = splin(x, y, "clamped", t);
deff(yrest = frest(xx), yrest = interp(xx, x, y, drest));
fplot2d(xx, frest, 2)
39
Exerccios CAP
C) 14 6 3 6 7 6 7 4 8 7 6 4
Germinac ao (dias) 10 26 41 29 27 27 19 28 19 31 29 33
(a) Faca o diagrama da dispers ao dos dados;
(b) Use a func ao datafit para determinar uma relac ao entre temperatura e o tempo de germinac ao das
sementes;
(c) Faca o gr aco com a func ao encontrada e o diagrama de dispers ao.
3. Um autom ovel, viajando por uma estrada reta, e cronometrado em diversos pontos. Os dados dessas
observac oes s ao apresentados na tabela a seguir:
Tempo (s) 0 3 5 8 13
Dist ancia (ft) 0 225 383 623 993
Velocidade (ft/s) 75 77 80 74 72
Use um spline c ubico restrito para prever a posic ao do autom ovel e sua velocidade quanto t = 10s.
4. Suspeita-se que o alto conte udo de tanino existente nas folhas maduras do carvalho inibe o crescimento
das larvas da mariposa de inverno, que danicam severamente essas arvores em certos anos. A tabela a
seguir relaciona o peso m edio de duas amostras de larvas em v arios momentos durante o perodo de 28
dias ap os o nascimento. A primeira amostra foi cultivada em folhas de carvalho novas e a segunda, em
folhas maduras da mesma arvore.
(a) Faca o gr aco de dispers ao dos dados;
40
Exerccios CAP
ITULO 6
Gr acos Tri-Dimensionais
6.1 Gracos Tri-dimensionais
O comando plot3d() permite tracar gr acos de superfcies z = f(x, y).
Na notac ao Scilab, as vari aveis independentes x e y s ao vetores de dimens ao n1 e n2, respectivamente,
e a vari avel z e uma matriz de dimenc ao n1 x n2. Ent ao, por essa denic ao, o elemento z(i,j) e o valor da
superfcie no ponto ( x(i), y(j) ).
Para exemplicar o uso de plot3d(), vamos considerar a func ao f(x, y) = cos(x) sen(y) no intervalo [0, 2],
com incremento 0.1 (graf tri.sci).
x = [0:0.1:2*%pi];
y = x;
z = cos(x)*sin(y);
plot3d(x, y, z)
Al em da func ao plot3d(), e de suas variac oes, o Scilab implementa outras func oes que permitem tracar
gr acos tri-dimensionais. Dentre elas, destacamos:
fplot3d: permite tracar gr acos de superfcies por func oes, como no exemplo abaixo (graf fplot3d.sci):
clear
clf()
deff( z = f(x, y), z = x.^4 - y.^4 )
x = linspace(-3,3, 30);
y = x;
fplot3d( x, y, f, alpha = 5, theta = 31 )
fplot3d1: permite tracar gr acos de superfcies denidas por func oes, como no caso anterior. Neste caso,
as superfcies s ao apresentadas em uma graduac ao de cores diferente do comando acima.
6.1.1 Gracos 3-D Especiais
As seguintes func oes permitem tracar gr acos tri-dimensionais especiais:
param3d: permite tracar curvas param etricas.
hist3d: permite tracar histogramas 3-D.
Gr acos Tri-dimensionais CAP
ITULO 6. GR
AFICOS TRI-DIMENSIONAIS
contour: permite tracar curvas de nvel para uma func ao 3-D.
// Exemplos de graficos 3-D especiais (graf_3dEsp.sci)
subplot(1,2,1)
param3d
subplot(1,2,2)
hist3d
Devo ressaltar que a sintaxe de todos os comandos pode ser vericada usando o help do Scilab.
Acompanhe mais este exemplo (param.sci) com algumas func oes especiais para gr acos 3-D.
clear
clf()
subplot(2,2,1)
x = linspace(0, 10*%pi);
param3d(sin(x), cos(x), x)
subplot(2,2,2)
clear
x = linspace(0,3*%pi);
z1 = sin(x);
z2 = sin(2*x);
z3 = sin(3*x);
y1 = zeros(x);
y3 = ones(x);
y2 = y3/2;
param3d1([x, x, x], [y1, y2, y3], list([z1, z2, z3], [2 3 4]))
// list([z1, z2, ..., zn], [colors]): o segundo elemento serve para
// atribuir cores para cada curva.
subplot(2,2,3)
clear
x = %pi*[-10:10]/10;
y = x;
deff(z = f(x, y), z = sin(x)*cos(y))
fcontour(x, y, f, 8) // ultimo elemento: no. de curvas de nivel
subplot(2,2,4)
clear
t = linspace(-2,2);
44
Detalhes da Func ao plot3d CAP
ITULO 6. GR
AFICOS TRI-DIMENSIONAIS
deff(z = f(x, y), z = 3*x - x^3 - 3*x*(y - 5)^2)
z = feval(t, t, f);
contour(t, t, z, 15)
Qual a diferenca entre param3d e param3d1 ? E entre contour e fcontour ?
6.2 Detalhes da Funcao plot3d
Apresentamos aqui algumas ferramentas adicionais para a execuc ao de gr acos 3D em ambiente Scilab,
uma vez que a func ao plot3d inclui os seguintes formatos:
plot3d( x, y, z, [theta, alpha, leg, flag, ebox] );
plot3d( x, y, z, <opt args> ) (neste caso, possui as mesmas opc oes da func ao plot2d);
plot3d( xf, yf, zf, [theta, alpha, leg, flag, ebox] );
plot3d( xf, yf, zf, <opt args> );
plot3d( xf, yf, list(zf, colors), [theta, alpha, leg, flag, ebox] );
plot3d( xf, yf, list(zf, colors), <opt args> ).
onde:
x, y, z s ao as coordenadas dos eixos x, y e z, respectivamente;
theta e alpha s ao valores dados para a visualizac ao da janela gr aca 3D(o angulo usado para visualizac ao
da gura);
leg e usado para denir uma legenda para cada eixo, separado por @, por exemplo: X@Y@Z;
Atenc ao: Na func ao plot2d, leg e usado para atribuir uma legenda em cada curva disposta na mesma
janela gr aca.
xf, yf e zf s ao matrizes de tamanho (nf, n), onde dene-se as faces usadas para desenhar a superfcie.
No caso, existem n faces, e cada face e denida por uma malha com nf n os.
flag e um vetor com tr es n umeros: flag = [mode, type, box], sendo:
mode usa um valor inteiro para colorir a superfcie desenhada (veja o help para explorar a escala de
cores surface properties);
type ajusta automaticamente a escala da gura, usando valores inteiros de 0 a 6;
box modela o tipo de escala da gura (veja axes properties).
ebox estabelece os limites do gr aco. O valor associado ` a essa opc ao e um vetor real com seis entradas
[xmin, xmax, ymin, ymax, zmin, zmax], onde xmin, xmax, ymin, ymax, zmin e zmax indicam os valores
mnimos e m aximos para os eixos x, y e z, respectivamente.
45
Detalhes da Func ao plot3d CAP
ITULO 6. GR
AFICOS TRI-DIMENSIONAIS
6.2.1 Funcao eval3d e eval3dp
As func oes eval3d e eval3dp criam uma malha para fazer o gr aco de uma func ao em tr es dimens oes.
z = eval3d(funcao, x, y):
funcao: uma func ao que aceita vetores como argumento;
x, y; vetores de tamanhos (1, n1) e (1, n2), mas e aconselh avel que os argumentos x e y tenham
o mesmo tamanho;
z: matriz de tamanho (n1, n2) (malha de n os pela intersecc ao dos vetores x e y).
Exemplo (ex eval3d.sce):
x=-5:5;y=x;
deff(z = f(x,y), z = x.*y);
z=eval3d(f,x,y);
plot3d(x,y,z);
[xf, yf, zf] = eval3dp(funcao, p1, p2), calcula as faces de uma superfcie param etrica 3D, onde:
[xf, yf, zf]: matrizes de tamanho ( 4, (n-1)*(m-1) ). O elementos xf(:, i), yf(:, j) e
zf(:, i) s ao as coordenadas dos eixos x, y e z, respectivamente, de 4 pontos dos 4 lados de cada
face;
funcao: uma func ao implementada em ambiente Scilab;
p1: um vetor de tamanho n;
p2: um vetor de tamanho m;
Exemplo (ex eval3dp.sce):
p1=linspace(0,2*%pi,20);
p2=linspace(0,2*%pi,20);
deff("[x,y,z] = sp(p1,p2)", ["x=p1.*sin(p1).*cos(p2)";..
"y=p1.*cos(p1).*cos(p2)";..
"z=p1.*sin(p2)"])
[xf,yf,zf]=eval3dp(sp,p1,p2);
plot3d(xf,yf,zf)
6.2.2 Exemplo
// spline_solido.sce
clear
clf()
x = [0:0.2:4];
y = sqrt( 4 - (x - 2)^2 );
subplot(2,2,1)
plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])
b = splin(x, y, natural);
xx = linspace(0,4);
yy = interp(xx, x, y, b);
46
Detalhes da Func ao plot3d CAP
ITULO 6. GR
AFICOS TRI-DIMENSIONAIS
plot2d(xx, yy, 2)
xtitle(Grafico da Interpolacao por vetores)
subplot(2,2,2)
deff(ys = fs(xs), ys = interp(xs, x, y, b));
plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])
fplot2d(xx, fs, 3)
xtitle(Grafico da Interpolacao por funcao)
subplot(2,2,3)
deff( [xa,ya,za] = revol(zp, theta), [xa = fs( zp ) .* cos( theta ),...
ya = fs( zp ) .* sin( theta ),...
za = zp] );
// A nova discretizacao
zp = linspace( min( x ), max( x ), 30 );
theta = linspace( 0, 2*%pi, 30 );
// Faces do poligono (coisa de computacao grafica...)
[xf, yf, zf] = eval3dp( revol, zp, theta );
// O grafico, finalmente!
plot3d( xf, yf, zf, alpha = 88, theta = 35 );
xtitle(Solido de revolucao)
subplot(2,2,4)
plot3d( xf, yf, zf, alpha = 85, theta = 30, flag = [30, 2, 3] )
xtitle(Solido de revolucao com outra cor!)
6.2.3 Outro Exemplo
// solido_ex.sce
clear
clf()
subplot(1,2,1)
deff(y = f(x), y = exp(-x.^2))
x = linspace( -2, 2 );
fplot2d( x, f, 2, rect = [-2, 0, 2, 1.2] )
subplot(1,2,2)
deff([xs, ys, zs] = rev(r, t), [xs = f(r) .* cos(t), ...
ys = f(r) .* sin(t), zs = r])
r = linspace( -2, 2, 30 );
t = linspace( 0, 2*%pi, 30 );
47
[xf, yf, zf] = eval3dp( rev, r, t );
plot3d( xf, yf, zf, alpha = 82, theta = 50, flag = [17, 2, 3] )
6.3 Exerccios
1. Faca o gr aco das func oes abaixo:
(a) f(x, y) = x
2
+ y
2
;
(b) f(x, y) = xy + 3x;
(c) f(x, y) = x
2
+ y
2
1;
(d) f(x, y) = 5;
(e) f(x, y) = y
2
+ 3x;
(f) f(x, y) = xy
3
+ 4x
2
2;
(g) f(x, y) =
_
1 x
2
y
2
;
(h) f(x, y) =
_
x
2
+ y
2
;
(i) f(x, y) = y sen(x);
(j) f(x, y) = x
2
y;
(k) f(x, y) = 4x
2
+ y
2
.
2. Esboce gracamente as curvas de nvel associadas a f:
(a) f(x, y) = y
2
x
2
;
(b) f(x, y) = xy;
(c) f(x, y) = 3x 2y;
(d) f(x, y) = x
2
+ y
2
.
3. Faca o s olido de revoluc ao das seguintes func oes (escolha o intervalo e o eixo de rotac ao adequada-
mente):
(a) f(x) = x
3
;
(b) f(x) =
x 1;
(c) f(x) = |x|;
(d) f(x) =
1
x
;
(e) f(x) =
4 x
2
;
(f) f(x) =
x
2
4;
(g) f(x) =
1
(x4)
2
;
(h) f(x) = (4 + x
2
);
(i) f(x) = 2
x;
(j) f(x) = ln(x);
(k) f(x) = e
x
.
48
CAP
ITULO 7
Exerccios Adicionais
1. Podemos denir as func oes seno, cosseno e tangente hiperb olicos como:
sinh (x) =
e
x
e
x
2
, cosh (x) =
e
x
+e
x
2
, tanh (x) =
e
x
e
x
e
x
+e
x
Escreva tr es func oes no Scilab que implementem o seno, o cosseno e a tangente hiperb olicos;
Escreva um programa que utilize suas func oes para desenhar a forma das func oes seno, cosseno e
tangente hiperb olicos numa mesma janela gr aca.
2. O produto vetorial entre dois vetores V
1
e V
2
e denido como:
V
1
V
2
= (V
y1
V
z2
V
y2
V
z1
) i + (V
z1
V
x2
V
z2
V
x1
) j + (V
x1
V
y2
V
x2
V
y1
) k
onde V
1
= V
x1
i + V
y1
j + V
z1
k e V
2
= V
x2
i + V
y2
j + V
z2
k.
Escreva uma func ao para calcular o produto vetorial de dois vetores V
1
e V
2
. Note que essa func ao
retorna um vetor real como resultado;
Utilize a func ao para calcular o produto vetorial dos vetores V
1
= [2, 4, 0.5] e V
2
= [0.5, 3, 2].
3. Escreva uma func ao chamada min max que tente localizar os valores m aximos e mnimos de uma func ao
real f(x) arbitr aria dentro de um intervalo xo [a, b]. Os argumentos de entrada de min max devem ser:
func O nome da func ao;
prim val O primeiro valor de x (a, no intervalo de busca);
ult val O ultimo valor de x (b, no intervalo de busca);
passos O n umero de passos de busca.
Os seguintes argumentos de sada devem ser:
xmin O valor de x no qual o mnimo foi encontrado;
min value O mnimo encontrado de f(x);
xmax O valor de x no qual o m aximo foi encontrado;
max value O m aximo encontrado de f(x).
4. Escreva um programa de teste para a func ao min max criada no exerccio anterior. O programa deve
passar para min max uma func ao denida pelo usu ario f(x) = x
3
5x
2
+ 5x 2, e encontrar o mnimo e
o m aximo com 200 passos no intervalo 1 x 3. Os valores resultantes de mnimo e m aximo devem
ser impressos.
5. A derivada de uma func ao contnua f(x) e denida pela equac ao:
d
dx
f(x) = lim
x0
f(x + x) f(x)
x
Em uma func ao amostrada, a denic ao se torna:
f
(x
i
) =
f(x
i+1
) f(x
i
)
x
(7.1)
onde x = x
i+1
x
i
. Suponha que um vetor vect cont em nsamp amostras de uma func ao espacadas de
dx.
Escreva uma func ao que calcule a derivada desse vetor usando a aproximac ao em (7.1). A func ao
deve vericar se dx e maior que zero para previnir erros de divis ao por zero na func ao.
Para vericar sua func ao, voc e deve gerar um conjunto de dados cuja derivada seja conhecida e
comparar o resultado da func ao com a resposta correta. Uma boa escolha para uma func ao de teste
e f(x) = sen(x). Do c alculo elementar, sabemos que f
ITULO 7. EXERC
ICIOS ADICIONAIS
8. Os antigos babil onios usavam a seguinte aproximac ao (baseada no M etodo de Newton) para calcular
a:
x
k+1
=
1
2
_
x
k
+
a
x
k
_
Escreva uma func ao para calcular
a usando a aproximac ao acima:
A sua func ao deve receber um chute inicial para a raiz;
Execute o c alculo acima at e que |x
k+1
x
k
| < , onde e um valor sucientemente pequeno;
Use a sua func ao para calcular
25,
21 e
5000, e compare com os valores fornecidos pela calcu-
ladora e/ou pelo Scilab.
9. Usando o m etodo de Newton, podemos calcular a raiz
p
125,
4
14641 e
3
(x), max e
1: Para k = 0 at e k = max fac a
2: x
x+1
= x
k
f(x
k
)
f
(x
k
)
3: Se |f(x
k+1
)| ou |x
k+1
x
k
| ent ao
4: PARE, x = x
k+1
5: Fim do condicional
6: Se k = max ent ao
7: PARE, o m etodo n ao converge para a soluc ao.
8: Fim do condicional
9: Fim do lac o
Algoritmo 2: M etodo de Newton-Raphson
51
Refer encias Bibliogr acas
[1] R. L. Burden, J. D. Faires. An alise Num erica. Pioneira Thomson Learning, 2003.
[2] F. F. Campos Fo. Algoritmos Num ericos. LTC Editora, 2001.
[3] S. J. Chapman. Programac ao em Matlab para Engenheiros. Pioneira Thomson Learnin, 2003.
[4] D. Hanselman, B. Littleeld. Matlab 6 Curso Completo, Pearson Prentice Hall, 2003.
[5] D. R. Hill, D. E. Zitarelli. Linear Algebra Labs with Matlab. Third Edition, Pearson Prentice Hall, 2004.
[6] E. Y. Matsumoto. Matlab 7: Fundamentos. Editora
Erica, 2004.
[7] P. S. M. Pires. Introduc ao ao Scilab: vers ao 3.0. http://www.dca.ufrn.br/~pmotta
[8] www.rau-tu.unicamp.br/scilab/
[9] http://www.scilab.org
52