Universidade Federal de Minas Gerais

Departamento de Ciˆencia da Computa¸c˜ao do ICEx
Fundamentos de SCILAB
edi¸ c˜ao 2010.08
Frederico F. Campos, filho
agosto de 2010
Pref´acio
O SCILAB ´e um software para computa¸c˜ao cient´ıfica e visualiza¸c˜ao, gratuito, com c´odigo
fonte aberto e interface para as linguagens FORTRAN e C. Ele permite a solu¸c˜ao de problemas
num´ericos em uma fra¸ c˜ao do tempo que seria necess´ario para escrever um programa em uma
linguagem como FORTRAN, Pascal ou C, devido `as suas centenas de fun¸c˜oes matem´ aticas.
O SCILAB ´e desenvolvido pelo INRIA (Institut National de Recherche en Informatique
et en Automatique) e ENPC (
´
Ecole Nationale des Ponts et Chauss´ees) da Fran¸ ca. Em
www.scilab.org est˜ao dispon´ıveis v´ arias informa¸c˜oes, documenta¸ c˜ao e instru¸c˜oes de como
baixar o programa. As vers˜oes do SCILAB est˜ao dispon´ıveis na forma pr´e-compilada para
diversas plataformas: Linux, Windows, HP-UX e Mac OSX. Como o c´odigo fonte tamb´em
est´a dispon´ıvel, ele pode ser compilado para uso em um computador espec´ıfico.
O objetivo deste texto ´e apresentar o SCILAB como uma linguagem de programa¸ c˜ao do-
tada de fun¸c˜oes n˜ao dispon´ıveis nas linguagens convencionais. Por isto, este material pode
ser utilizado em disciplinas, tais como, Programa¸c˜ao de Computadores, C´ alculo Num´erico,
An´ alise Num´erica,
´
Algebra Linear e quaisquer outras dos cursos de Engenharia e das ´ areas
de Ciˆencias Exatas. Tamb´em, s˜ao exploradas algumas caracter´ısticas pr´ oprias que mostram
por que o SCILAB ´e uma poderosa ferramenta de apoio ao aprendizado e utiliza¸c˜ao da
Computa¸c˜ao Cient´ıfica.
O Cap´ıtulo 1 L´ogica de programa¸ c˜ao apresenta uma revis˜ ao de l´ ogica de programa¸ c˜ao ex-
plicando as estruturas b´asicas: sequencial, condicional e de repeti¸c˜ao, al´em das estruturas
de dados fundamentais. No Cap´ıtulo 2 Ambiente de programa¸c˜ao ´e descrito o ambiente de
programa¸ c˜ao do SCILAB mostrando a janela de comandos e como obter informa¸c˜oes de co-
mandos durante a sess˜ ao. O Cap´ıtulo 3 Estruturas de dados apresenta as estruturas de dados
suportadas pelo SCILAB, como constantes, vetores, matrizes, hipermatrizes, polinˆ omios e
listas. No Cap´ıtulo 4 Express˜oes s˜ao mostradas as express˜oes aritm´eticas, l´ ogicas e literais,
bem como, o modo de execut´ a-las. O Cap´ıtulo 5 Gr´aficos ´e dedicado ` a elabora¸ c˜ao de gr´ aficos
bi e tridimensionais. No Cap´ıtulo 6 Linguagem de programa¸c˜ao, o SCILAB ´e visto como uma
linguagem de programa¸ c˜ao, sendo mostrado como escrever programas e fun¸c˜oes, estruturas
condicionais e de repeti¸c˜ao e depura¸ c˜ao de programas. O Cap´ıtulo 7 Comandos de entrada e
sa´ıda apresenta os formatos de exibi¸ c˜ao, grava¸c˜ao e leitura de vari´aveis do espa¸co de trabalho,
al´em de leitura de grava¸c˜ao de dados em arquivos. Finalmente, no Cap´ıtulo 8 Computa¸c˜ao
cient´ıfica s˜ao apresentadas fun¸c˜oes do SCILAB para resolver problemas de Computa¸c˜ao Ci-
ent´ıfica.
Sugest˜ oes para aprimorar o presente texto, bem como, para efetuar corre¸ c˜oes ser˜ao bem-
vindas pelo e-mail: ffcampos@dcc.ufmg.br.
Belo Horizonte, agosto de 2010.
Frederico F. Campos, filho
DCC.ICEx.UFMG
Sum´ario
1 L´ ogica de programa¸c˜ao 1
1.1 Estrutura b´asica de um algoritmo . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Comandos de entrada e sa´ıda . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Estrutura sequencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Vari´aveis e coment´arios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Express˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.1 Comando de atribui¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.2 Express˜oes aritm´eticas . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.5.3 Express˜oes l´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5.4 Ordem geral de precedˆencia . . . . . . . . . . . . . . . . . . . . . . . 8
1.5.5 Express˜oes literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.6 Estruturas condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.6.1 Estrutura condicional simples . . . . . . . . . . . . . . . . . . . . . . 10
1.6.2 Estrutura condicional composta . . . . . . . . . . . . . . . . . . . . . 11
1.7 Estruturas de repeti¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.7.1 N´ umero indefinido de repeti¸c˜oes . . . . . . . . . . . . . . . . . . . . . 12
iii
iv SUM
´
ARIO
1.7.2 N´ umero definido de repeti¸c˜oes . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Falha no algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.9 Modulariza¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.10 Estruturas de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.10.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.10.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.10.3 Hipermatrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.11 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2 Ambiente de programa¸c˜ao 27
2.1 Janela de comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.1 Espa¸ co de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.1.2 Diret´ orio corrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.1.3 Comando unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2 Comandos de aux´ılio ao usu´ ario . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 Comando help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.2 Comando apropos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.3 Menu de barras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.3 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3 Estruturas de dados 35
3.1 Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.1 Num´ericas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
SUM
´
ARIO v
3.1.2 L´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.1.3 Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2 Vari´aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
3.2.1 Regras para nomes de vari´aveis . . . . . . . . . . . . . . . . . . . . . 36
3.2.2 Comando de atribui¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.2.3 Vari´aveis especiais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.4 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4.1 Constru¸ c˜ao e manipula¸c˜ao de matrizes . . . . . . . . . . . . . . . . . 42
3.4.2 Fun¸c˜oes matriciais b´asicas . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4.3 Fun¸c˜oes para manipula¸c˜ao de matrizes . . . . . . . . . . . . . . . . . 48
3.4.4 Matrizes elementares . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.5 Hipermatrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.6 Polinˆ omios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.1 Constru¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.6.2 Avalia¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.6.3 Adi¸c˜ao e subtra¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.6.4 Multiplica¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.6.5 Divis˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3.6.6 Deriva¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.6.7 C´alculo de ra´ızes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.7 Vari´aveis l´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
vi SUM
´
ARIO
3.8 Vari´aveis literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.9 Listas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.10 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4 Express˜oes 69
4.1 Express˜oes aritm´eticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.1.1 Ordem de precedˆencia . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.1.2 Express˜oes vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.1.3 Express˜oes matriciais . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Express˜oes l´ ogicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3 Express˜oes literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.3.1 Convers˜ao de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.3.2 Manipula¸c˜ao de caracteres . . . . . . . . . . . . . . . . . . . . . . . . 80
4.4 Execu¸ c˜ao de express˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
4.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5 Gr´aficos 91
5.1 Gr´ aficos bidimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.1.1 Fun¸c˜ao plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.1.2 Fun¸c˜ao fplot2d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
5.2 Gr´ aficos tridimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.2.1 Fun¸c˜ao meshgrid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
5.2.2 Fun¸c˜ao plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
SUM
´
ARIO vii
5.2.3 Fun¸c˜ao mesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.2.4 Fun¸c˜ao surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.3 Janela de figura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.4 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6 Linguagem de programa¸c˜ao 105
6.1 Programa¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.1.1 Programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.1.2 Subprograma function . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.2 Estruturas condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.1 Estrutura if-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.2 Estrutura if-else-end . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.3 Estrutura if-elseif-end . . . . . . . . . . . . . . . . . . . . . . . . 114
6.2.4 Estrutura select-case-end . . . . . . . . . . . . . . . . . . . . . . . 115
6.3 Estruturas de repeti¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
6.3.1 Estrutura for-end . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.3.2 Estrutura while-end . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.3.3 Estrutura com interrup¸c˜ao no interior . . . . . . . . . . . . . . . . . . 119
6.4 Depura¸c˜ao de programa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
7 Comandos de entrada e sa´ıda 125
7.1 Formato de exibi¸ c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
viii SUM
´
ARIO
7.2 Espa¸ co de trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
7.2.1 Gravar dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
7.2.2 Recuperar dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.2.3 Entrada de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
7.2.4 Janela de mensagem . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
7.3 Di´ ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.4 Leitura e grava¸c˜ao de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.4.1 Abertura de arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
7.4.2 Fechamento de arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.4.3 Grava¸c˜ao em arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
7.4.4 Leitura em arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8 Computa¸c˜ao cient´ıfica 139
8.1 Medidas de tempo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
8.2
´
Algebra linear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.2.1 Parˆ ametros da matriz . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
8.2.2 Decomposi¸c˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
8.2.3 Solu¸c˜ao de sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
8.2.4 Inversa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
8.2.5 Autovalores e autovetores . . . . . . . . . . . . . . . . . . . . . . . . 150
8.3 Interpola¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
SUM
´
ARIO ix
8.3.1 C´alculo das diferen¸cas finitas ascendentes . . . . . . . . . . . . . . . . 151
8.3.2 Interpola¸c˜ao unidimensional . . . . . . . . . . . . . . . . . . . . . . . 152
8.4 Integra¸ c˜ao num´erica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
8.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
x SUM
´
ARIO
Cap´ıtulo 1
L´ogica de programa¸ c˜ao
Segundo Wirth [5], programas de computadores s˜ao formula¸c˜oes concretas de algoritmos
abstratos baseados em representa¸ c˜oes e estruturas espec´ıficas de dados, sendo um algoritmo
1
a descri¸c˜ao de um conjunto de comandos que resultam em uma sucess˜ao finita de a¸c˜oes.
Para este mesmo autor, a linguagem exerce uma grande influˆencia na express˜ ao do pensa-
mento. Portanto, um modo mais adequado para a elabora¸ c˜ao de algoritmos deve considerar
apenas a express˜ao do racioc´ınio l´ ogico. Al´em do mais, ao expressar as v´ arias etapas do
racioc´ınio por meio de uma linguagem de programa¸ c˜ao o programador ´e induzido a se pre-
ocupar com detalhes pouco importantes da linguagem.
O modelo l´ ogico resultante de uma nota¸c˜ao algor´ıtmica deve ser codificado com facilidade
em qualquer linguagem de programa¸ c˜ao. Assim, o uso de uma nota¸ c˜ao algor´ıtmica leva o
programador a expressar o seu racioc´ınio l´ ogico independente da linguagem de programa¸ c˜ao.
Uma nota¸c˜ao algor´ıtmica deve conter um n´ umero m´ınimo de estruturas de controle (sequen-
cial, condicional e de repeti¸c˜ao) de modo a serem implementadas facilmente nas linguagens
de programa¸ c˜ao dispon´ıveis.
Os algoritmos deste texto s˜ao descritos na nota¸c˜ao utilizada em Algoritmos Num´ericos [2],
a qual ´e baseada naquela proposta por Farrer e outros [3, 4].
1.1 Estrutura b´asica de um algoritmo
Um algoritmo apresenta a seguinte estrutura b´asica:
1
Esta palavra deriva do nome do matem´atico ´arabe Mohammed ibu-Musa al-Khowarizmi (≈ 800 d.C.).
1
2 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Algoritmo <nome-do-algoritmo>
{ Objetivo: Mostrar a estrutura b´asica de um algoritmo }
<declara¸c˜ao das vari´aveis>
<comandos 1>
<comandos 2>
. . .
<comandos n>
fimalgoritmo
onde
Algoritmo <nome-do-algoritmo>
indica o in´ıcio do algoritmo denominado <nome-do-algoritmo> e o seu t´ermino ´e definido
por
fimalgoritmo .
A finalidade do algoritmo ´e descrita na forma de coment´ario, sendo
{ Objetivo: <objetivo-do-algoritmo> } .
As vari´aveis usadas no algoritmo, bem como seus tipos e estruturas, s˜ao declaradas por
meio da < declara¸c˜ao das vari´aveis > e os < comandos i > especificam as n a¸c˜oes a serem
executadas pelo algoritmo.
1.2 Comandos de entrada e sa´ıda
O comando
leia <lista-de-vari´aveis>
´e usado para indicar que a <lista-de-vari´aveis>est´a dispon´ıvel para armazenar os dados lidos
em algum dispositivo externo. N˜ao se faz necess´ario descrever exatamente como os valores
dessas vari´aveis ser˜ao fornecidos ao algoritmo. Compete ao programador decidir durante a
codifica¸ c˜ao do programa se os dados ser˜ao fornecidos interativamente pelo teclado, lidos de
um arquivo, passados como argumentos de um subprograma ou at´e mesmo definidos como
constantes dentro do pr´ oprio programa. Por sua vez, o comando
1.3. Estrutura sequencial 3
escreva <lista-de-vari´aveis>
´e utilizado para indicar as vari´aveis cujos valores devem ser escritos em algum dispositivo
externo.
Exemplo 1.1 Apresenta um algoritmo b´asico, o qual lˆe as vari´aveis a, b e c necess´arias ` a sua
execu¸c˜ao e escreve as vari´aveis x e y em algum dispositivo externo.
Algoritmo Opera¸c˜oes aritm´eticas
{ Objetivo: Somar e subtrair dois n´ umeros }
leia a, b, c
x ←a + b
y ←b −c
escreva x, y
fimalgoritmo
Exemplo 1.2 Exibe um algoritmo para ler uma temperatura em grau Fahrenheit e converter
em grau Celsius.
Algoritmo Converte grau
{ Objetivo: Converter grau Fahrenheit em Celsius }
leia Fahrenheit
Celsius ←(Fahrenheit −32) ∗ 5/9
escreva Fahrenheit, Celsius
fimalgoritmo
1.3 Estrutura sequencial
A mais simples das estruturas de controle de um algoritmo ´e a estrutura sequencial. Ela
indica que os comandos devem ser executados na ordem em que aparecem. No Exemplo 1.1,
o comando x ←a + b ´e executado seguido pelo comando y ←b −c.
1.4 Vari´aveis e coment´arios
Uma vari´avel corresponde a uma posi¸c˜ao de mem´oria do computador onde pode ser ar-
mazenado um valor. As vari´aveis s˜ao representadas por identificadores que s˜ao cadeias de
4 Cap´ıtulo 1. L´ogica de programa¸c˜ao
caracteres alfanum´ericos. Os elementos de vetores e matrizes podem ser referenciados ou
por subscritos ou por ´ındices, por exemplo, v
i
ou v(i ) e M
ij
ou M(i , j ).
Um coment´ario ´e um texto inserido em qualquer parte do algoritmo para document´a-lo e
aumentar a sua clareza. Esse texto ´e delimitado por chaves { <texto> }, como, por exemplo,
{ avalia¸ c˜ao do polinˆ omio }.
1.5 Express˜oes
Express˜oes s˜ao combina¸c˜oes de vari´aveis, constantes e operadores. Existem trˆes tipos de ex-
press˜ oes: aritm´eticas, l´ ogicas e literais, dependendo dos tipos dos operadores e das vari´aveis
envolvidas.
1.5.1 Comando de atribui¸ c˜ao
O resultado de uma express˜ao ´e armazenado em uma vari´avel por meio do s´ımbolo ←
(recebe)
<vari´avel > ←<express˜ao>
como visto no Exemplo 1.1.
1.5.2 Express˜ oes aritm´eticas
Express˜ao aritm´etica ´e aquela cujos operadores s˜ao aritm´eticos e cujos operandos s˜ao cons-
tantes e/ou vari´aveis aritm´eticas; elas visam avaliar alguma f´ormula matem´ atica. Os ope-
radores aritm´eticos s˜ao mostrados na Tabela 1.1, e a Tabela 1.2 apresenta algumas fun¸c˜oes
matem´ aticas elementares.
Tabela 1.1: Operadores aritm´eticos.
Opera¸c˜ao Operador Uso
adi¸c˜ao + a + b
mais un´ario + +a
subtra¸ c˜ao - a - b
menos un´ario - -a
multiplica¸ c˜ao * a * b
divis˜ ao / a / b
potencia¸c˜ao ^ a ^ b
1.5. Express˜ oes 5
Tabela 1.2: Fun¸c˜oes matem´ aticas.
Fun¸c˜ao Descri¸c˜ao Fun¸c˜ao Descri¸c˜ao
Trigonom´etricas
sen seno cos co-seno
tan tangente sec secante
Exponenciais
exp exponencial log
10
logaritmo decimal
log
e
logaritmo natural raiz
2
raiz quadrada
Num´ericas
abs valor absoluto quociente divis˜ ao inteira
arredonda arredonda em dire¸ c˜ao ao in-
teiro mais pr´ oximo
sinal sinal(x) = 1 se x>0, = 0 se
x=0 e = −1 se x<0
max maior valor resto resto de divis˜ ao
min menor valor trunca arredonda em dire¸ c˜ao a 0
Exemplo 1.3 A Tabela 1.3 mostra exemplos de uso das fun¸c˜oes matem´ aticas num´ericas.
´
E
importante observar a diferen¸ca entre as fun¸c˜oes arredonda e trunca.
Tabela 1.3: Resultados de fun¸c˜oes matem´ aticas num´ericas.
Fun¸c˜ao x [e y] Valor x [e y] Valor
abs(x) 5 5 −3 3
arredonda(x) 0,4 0 0,5 1
quociente(x, y) 5 e 3 1 3 e 5 0
resto(x, y) 5 e 3 2 3 e 5 3
sinal(x) −2 −1 7 1
trunca(x) 1,1 1 1,9 1
Ordem de precedˆencia
Dada uma express˜ao matem´ atica, ela deve ser escrita em uma forma linear no algoritmo,
por exemplo,
t = a +
b
c
deve ser escrita como t ←a + b/c, enquanto que a nota¸c˜ao de
u =
a + b
c
´e u ← (a + b)/c. Ao converter a nota¸c˜ao matem´ atica para a nota¸c˜ao algor´ıtmica tem que
se respeitar a ordem de precedˆencia das opera¸c˜oes aritm´eticas, a qual ´e apresentada na
6 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Tabela 1.4. Quando duas opera¸c˜oes tˆem a mesma prioridade efetua-se primeiro a opera¸c˜ao
mais ` a esquerda. No c´alculo de u acima foi utilizado parˆenteses para que a adi¸c˜ao fosse
efetuada primeiro que a divis˜ ao, pois a divis˜ ao tem precedˆencia sobre a adi¸c˜ao.
Tabela 1.4: Ordem de precedˆencia das opera¸c˜oes aritm´eticas.
Prioridade Opera¸c˜oes
1
a
resolver parˆenteses
2
a
avaliar fun¸c˜ao
3
a
potencia¸c˜ao
4
a
menos e mais un´ario
5
a
multiplica¸ c˜ao e divis˜ ao
6
a
adi¸c˜ao e subtra¸ c˜ao
Exemplo 1.4 Escrever as express˜oes aritm´eticas na nota¸c˜ao algor´ıtmica.
t = a +
b
c
+ d −→ t ←a + b/c + d.
x =
a + b
c + d
−→ x ←(a + b)/(c + d).
y = a +
b
c +
d+1
2
−→ y ←a + b/(c + (d + 1)/2).
´
E importante verificar o balanceamento dos parˆenteses, ou seja, o n´ umero de abre parˆenteses
’(’ tem que ser igual ao n´ umero de fecha parˆenteses ’)’.
Exemplo 1.5 Avaliar as express˜oes aritm´eticas do Exemplo 1.4, para a = 1, b = 2, c = 3 e
d = 4, arredondando o resultado para cinco casas decimais.
t ← a + b/c + d,
1 + 2/3 + 4,
t ← 5,66667.
x ← (a + b)/(c + d),
(1 + 2)/(3 + 4) = 3/7,
x ← 0,42857.
y ← a + b/(c + (d + 1)/2),
1 + 2/(3 + (4 + 1)/2) = 1 + 2/(3 + 5/2) = 1 + 2/(5,5),
y ← 1,36364.
1.5. Express˜ oes 7
1.5.3 Express˜ oes l´ ogicas
Express˜ao l´ ogica ´e aquela cujos operadores s˜ao l´ ogicos e cujos operandos s˜ao rela¸ c˜oes e/ou
vari´aveis do tipo l´ ogico. Uma rela¸ c˜ao ´e uma compara¸c˜ao realizada entre valores do mesmo
tipo. A natureza da compara¸c˜ao ´e indicada por um operador relacional definido conforme a
Tabela 1.5. O resultado de uma rela¸ c˜ao ou de uma express˜ao l´ ogica ´e verdadeiro ou falso.
Tabela 1.5: Operadores relacionais.
Rela¸ c˜ao Operador Uso
igual a = a = b
diferente de = a = b
maior que > a > b
maior ou igual a ≥ a ≥ b
menor que < a < b
menor ou igual a ≤ a ≤ b
Exemplo 1.6 Avaliar as express˜oes l´ ogicas para c = 1, d = 3, x = 2, y = 3 e z = 10.
c ≥ d, 1 ≥ 3 →falso.
d = c + x, 3 = 1 + 2 →verdadeiro.
x + y < z −c, 2 + 3 < 10 −1 →verdadeiro.
Os operadores l´ ogicos mostrados na Tabela 1.6 permitem a combina¸c˜ao ou nega¸c˜ao das
rela¸ c˜oes l´ ogicas.
Tabela 1.6: Operadores l´ ogicos.
Opera¸c˜ao Operador Uso
conjun¸c˜ao e <express˜ao 1> e <express˜ao 2>
disjun¸ c˜ao ou <express˜ao 1> ou <express˜ao 2>
nega¸c˜ao n˜ao n˜ao(<express˜ao>)
A Tabela 1.7 mostra os resultados obtidos com os operadores l´ ogicos, sendo que V significa
verdadeiro e F significa falso.
Tabela 1.7: Resultados com operadores l´ ogicos.
a e b
a\b V F
V V F
F F F
a ou b
a\b V F
V V V
F V F
n˜ao a
a V F
F V
8 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Ordem de precedˆencia
De modo similar `as express˜oes aritm´eticas, as express˜oes l´ ogicas tamb´em possuem uma
ordem de precedˆencia, como mostrado na Tabela 1.8.
Tabela 1.8: Ordem de precedˆencia das opera¸c˜oes l´ ogicas.
Prioridade Opera¸c˜ao
1
a
relacional
2
a
nega¸c˜ao
3
a
conjun¸c˜ao
4
a
disjun¸ c˜ao
Exemplo 1.7 Avaliar as express˜oes l´ ogicas abaixo para c = 1, d = 3, x = 2, y = 3 e z = 10.
d > c e x + y + 5 = z,
3 > 1 e 2 + 3 + 5 = 10, →3 > 1 e 10 = 10,
V e V →verdadeiro.
x = d −2 ou c + y = z,
2 = 3 −2 ou 1 + 3 = 10, →2 = 1 ou 4 = 10,
F ou V →verdadeiro.
d + x ≥ z/2 e n˜ao(d = y),
3 + 2 ≥ 10/2 e n˜ao(3 = 3) →5 ≥ 5 e n˜ao(V),
V e F →falso.
1.5.4 Ordem geral de precedˆencia
Combinando as ordens de precedˆencia das opera¸c˜oes aritm´eticas e l´ ogicas, tem-se uma ordem
geral de precedˆencia das opera¸c˜oes matem´ aticas, como apresentada na Tabela 1.9.
1.5. Express˜ oes 9
Tabela 1.9: Ordem de precedˆencia das opera¸c˜oes matem´ aticas.
Prioridade Opera¸c˜oes
1
a
( )
2
a
fun¸c˜ao
3
a
^
4
a
+ e − un´ario
5
a
∗ e /
6
a
+ e −
7
a
>, ≥, <, ≤, = e =
8
a
n˜ao
9
a
e
10
a
ou
Exemplo 1.8 Avaliar as express˜oes abaixo para a = 1, b = 2 e c = 3.
−(a + 5)^2 > b + 6 ∗ c e 4 ∗ c = 15,
−(1 + 5)^2 > 2 + 6 ∗ 3 e 4 ∗ 3 = 15,
−6^2 > 20 e 12 = 15, −36 > 20 e F,
F e F →falso.
(a + b)/c ≤ b^c −a ou a ∗ (b + c) ≥ 5,
(1 + 2)/3 ≤ 2^3 −1 ou 1 ∗ (2 + 3) ≥ 5,
1 ≤ 7 ou 5 ≥ 5,
V ou V →verdadeiro.
c + a/2 = b −a e b + c^(b + 1) < −(b + c)/4,
3 + 1/2 = 2 −1 e 2 + 3^(2 + 1) < −(2 + 3)/4,
3,5 = 1 e 29 < −1,25,
V e F →falso.
1.5.5 Express˜ oes literais
Uma express˜ao literal ´e formada por operadores literais e operandos, os quais s˜ao constantes
e/ou vari´aveis do tipo literal. Opera¸c˜oes envolvendo literais, tais como, concatena¸ c˜ao, in-
ser¸c˜ao, busca etc, geralmente, s˜ao realizadas por meio de fun¸c˜oes dispon´ıveis nas bibliotecas
das linguagens de programa¸ c˜ao.
O caso mais simples de uma express˜ao literal ´e uma constante literal, a qual ´e constitu´ıda por
uma cadeia de caracteres delimitada por ap´ostrofo (’), por exemplo, mensagem ← ’matriz
singular’.
10 Cap´ıtulo 1. L´ogica de programa¸c˜ao
1.6 Estruturas condicionais
Os algoritmos apresentados nos Exemplos 1.1 e 1.2 utilizam apenas a estrutura sequencial.
Ela faz com que os comandos sejam executados na ordem em que aparecem. Uma estrutura
condicional possibilita a escolha dos comandos a serem executados quando certa condi¸ c˜ao for
ou n˜ao satisfeita alterarando, assim, o fluxo natural de comandos. A condi¸ c˜ao ´e representada
por uma express˜ao l´ ogica. As estruturas condicionais podem ser simples ou compostas.
1.6.1 Estrutura condicional simples
Esta estrutura apresenta a forma
se <condi¸c˜ao> ent˜ao
<comandos>
fimse
Neste caso, a lista de <comandos> ser´a executada se, e somente se, a express˜ ao l´ ogica
<condi¸c˜ao> tiver como resultado o valor verdadeiro.
Exemplo 1.9 Fazer um algoritmo para calcular o logaritmo decimal de um n´ umero positivo.
Algoritmo Logaritmo decimal
{ Objetivo: Calcular logaritmo decimal de n´ umero positivo }
leia x
se x > 0 ent˜ao
Log ← log
10
(x)
escreva x, Log
fimse
fimalgoritmo
Os comandos Log ← log
10
(x) e escreva x, Log s´o ser˜ao executados se a vari´avel x contiver
um valor maior que 0.
Exemplo 1.10 Escrever um algoritmo para ler dois n´ umeros e escrevˆe-los em ordem decres-
cente.
1.6. Estruturas condicionais 11
Algoritmo Ordem decrescente
{ Objetivo: Escrever dois n´ umeros dados em ordem decrescente }
leia m, n
se m < n ent˜ao
aux ←m
m ←n
n ←aux
fimse
escreva m, n
fimalgoritmo
Haver´ a a troca entre as vari´aveis m e n, por meio dos trˆes comandos aux ← m, m ← n e
n ←aux se, e somente se, a vari´avel m contiver um valor menor que n.
1.6.2 Estrutura condicional composta
No caso de haver duas alternativas poss´ıveis, deve ser usada uma estrutura da forma
se <condi¸c˜ao> ent˜ao
<comandos 1>
sen˜ao
<comandos 2>
fimse
Se a express˜ao l´ ogica <condi¸c˜ao> tiver como resultado o valor verdadeiro, ent˜ao a sequˆen-
cia <comandos 1> ser´a executada e a sequˆencia <comandos 2> n˜ao ser´a executada. Por
outro lado, se o resultado de <condi¸c˜ao> for falso, ent˜ao ser´a a lista <comandos 2> a ´ unica
a ser executada.
Exemplo 1.11 Elaborar um algoritmo para verificar se um n´ umero est´a dentro de um dado
intervalo, por exemplo, se 1 ≤ a < 5.
Algoritmo Intervalo
{ Objetivo: Verificar se um n´ umero pertence ao intervalo [1, 5) }
leia a
se a ≥ 1 e a < 5 ent˜ao
escreva a ’ pertence ao intervalo ’[1, 5)
sen˜ao
escreva a ’ n˜ao pertence ao intervalo ’[1, 5)
fimse
fimalgoritmo
12 Cap´ıtulo 1. L´ogica de programa¸c˜ao
O comando escreva a ’ pertence ao intervalo’ ser´a executado se, e somente se, a vari´avel a
contiver um valor maior ou igual a 1 e menor que 5. Caso contr´ ario, se a for menor que
1 ou maior ou igual a 5 ent˜ao escreva a ’ n˜ao pertence ao intervalo’ ser´a o ´ unico comando
executado.
Exemplo 1.12 Elaborar um algoritmo para avaliar as fun¸c˜oes modulares f(x) = |2x| e g(x) =
|5x|.
Algoritmo Fun¸c˜oes modulares
{ Objetivo: Avaliar duas fun¸c˜oes modulares }
leia x
se x ≥ 0 ent˜ao
fx ←2 ∗ x
gx ←5 ∗ x
sen˜ao
fx ←−2 ∗ x
gx ←−5 ∗ x
fimse
escreva x, fx, gx
fimalgoritmo
Se a vari´avel x contiver um valor positivo ou nulo, ent˜ao os dois comandos fx ← 2 ∗ x e
gx ← 5 ∗ x ser˜ao executados, seguindo-se o comando escreva x, fx, gx. No entanto, se x
contiver um valor negativo, os comandos fx ← −2 ∗ x, gx ← −5 ∗ x e escreva x, fx, gx
ser˜ao os ´ unicos a serem executados.
1.7 Estruturas de repeti¸ c˜ao
Uma estrutura de repeti¸c˜ao faz com que uma sequˆencia de comandos seja executada repe-
tidamente at´e que uma dada condi¸ c˜ao de interrup¸c˜ao seja satisfeita. Existem, basicamente,
dois tipos dessas estruturas, dependendo se o n´ umero de repeti¸c˜oes for indefinido ou definido.
1.7.1 N´ umero indefinido de repeti¸c˜oes
Este tipo de estrutura de repeti¸c˜ao apresenta a forma
1.7. Estruturas de repeti¸ c˜ao 13
repita
<comandos 1 >
se <condi¸c˜ao> ent˜ao
interrompa
fimse
<comandos 2 >
fimrepita
<comandos 3 >
O comando interrompa faz com que o fluxo de execu¸c˜ao seja transferido para o comando
imediatamente a seguir do fimrepita. Assim, as listas <comandos 1> e <comandos 2>
ser˜ao repetidas at´e que a express˜ao l´ ogica <condi¸c˜ao> resulte no valor verdadeiro. Quando
isso ocorrer, a repeti¸c˜ao ser´a interrompida (<comandos 2> n˜ao ser´a executada) e a lista
<comandos 3>, ap´os ao fimrepita, ser´a executada.
Exemplo 1.13 Elaborar um algoritmo para calcular

a, a > 0, utilizando o processo ba-
bilˆonico baseado na f´ormula de recorrˆencia [2]
x
k+1
=
_
x
k
+
a
x
k
_
×0,5 para x
0
> 0.
Algoritmo Raiz quadrada
{ Objetivo: Calcular a raiz quadrada de um n´ umero positivo }
leia a, z { valor para calcular a raiz quadrada e valor inicial }
i ←0
repita
i ←i + 1
x ←(z + a/z) ∗ 0,5
se abs(x −z) < 10
−10
ou i = 20 ent˜ao
interrompa
fimse
z ←x
fimrepita
{ teste de convergˆencia }
se abs(x −z) < 10
−10
ent˜ao
escreva x { raiz quadrada de a }
sen˜ao
escreva ’processo n˜ao convergiu com 20 itera¸c˜oes’
fimse
fimalgoritmo
14 Cap´ıtulo 1. L´ogica de programa¸c˜ao
´
E gerada uma sequˆencia de valores em x que ´e interrompida quando a diferen¸ca entre dois
valores consecutivos for menor que a tolerˆancia 10
−10
ou atingir 20 itera¸c˜oes. O teste de
convergˆencia verifica qual das duas condi¸ c˜oes foi satisfeita, se for a primeira ent˜ao o processo
convergiu.
Exemplo 1.14 Escrever um algoritmo para determinar o maior n´ umero de ponto flutuante
que, somado a 1, seja igual a 1.
Algoritmo Epsilon
{ Objetivo: Determinar a precis˜ao da m´ aquina }
Epsilon ←1
repita
Epsilon ←Epsilon/2
se Epsilon + 1 = 1 ent˜ao
interrompa
fimse
fimrepita
escreva Epsilon
fimalgoritmo
Esta sequˆencia faz com que seja calculada a chamada precis˜ao da m´ aquina ε. Quando a
vari´avel Epsilon assumir um valor que, adicionado a 1, seja igual a 1, ent˜ao a estrutura
repita–fimrepita ´e abandonada e o comando escreva Epsilon ser´a executado.
A forma repita–fimrepita ´e o caso geral de uma estrutura de repeti¸c˜ao. Se a lista
<comandos 1> n˜ao existir, ter-se-´ a uma estrutura de repeti¸c˜ao com interrup¸c˜ao no in´ıcio
(estrutura while). Similarmente, se n˜ao houver a lista <comandos 2>, ent˜ao ser´a uma
estrutura com interrup¸c˜ao no final (estrutura repeat–until).
1.7.2 N´ umero definido de repeti¸c˜oes
Quando se souber com antecedˆencia quantas vezes a estrutura deve ser repetida, pode ser
usado um comando de forma mais simples
para <controle> ←<valor-inicial > at´e <valor-final > passo <delta> fa¸ca
<comandos>
fimpara
Nesta estrutura, inicialmente, ´e atribu´ıdo `a vari´avel <controle> o valor de <valor-inicial>
e verificado se ele ´e maior que o <valor-final>. Se for maior, a estrutura para–fa¸ca n˜ao
ser´a executada. Se for menor ou igual, ent˜ao os <comandos> ser˜ao executados e a vari´avel
1.7. Estruturas de repeti¸ c˜ao 15
<controle> ser´a incrementada com o valor de <delta>. Novamente, ´e verificado se a vari´avel
<controle> ´e maior que o <valor-final>; se n˜ao for maior, ent˜ao os <comandos> ser˜ao
executados e assim sucessivamente. As repeti¸c˜oes se processam at´e que a vari´avel <controle>
se torne maior que o <valor-final>. Quando o incremento <delta> tiver o valor 1, ent˜ao o
passo <delta> pode ser omitido da estrutura para–fa¸ca.
Exemplo 1.15 Escrever um algoritmo para mostrar que a soma dos n primeiros n´ umeros
´ımpares ´e igual ao quadrado de n
n

i=1
(2i −1) = 1 + 3 + 5 + . . . + 2n −1 = n
2
. (1.1)
Por exemplo, para n = 5 a vari´avel i assume os valores i = 1, 2, 3, 4 e 5. Assim, a express˜ ao
do somat´orio (2i − 1) gera os n = 5 primeiros ´ımpares (2i −1) = 1, 3, 5, 7 e 9, cuja soma ´e
1 + 3 + 5 + 7 + 9 = 25 = 5
2
.
Para implementar um somat´orio se faz necess´ario o uso de uma vari´avel auxiliar para acu-
mular o resultado da soma de cada novo termo. Inicialmente, esse acumulador, denominado
Soma, recebe o valor 0 que ´e o elemento neutro da adi¸c˜ao. Para cada valor de i ´e incremen-
tado o valor de 2i −1, como mostrado na tabela
i 2i −1 Soma
– – 0
1 1 0 + 1 = 1
2 3 1 + 3 = 4
3 5 4 + 5 = 9
4 7 9 + 7 = 16
5 9 16 + 9 = 25
.
Ao final, quando i = n a vari´avel Soma conter´a o valor do somat´ orio (n
2
= 5
2
= 25). A
implementa¸ c˜ao da nota¸c˜ao matem´ atica (1.1) ´e mostrada no algoritmo abaixo.
Algoritmo Primeiros ´ımpares
{ Objetivo: Verificar propriedade dos n´ umeros ´ımpares }
leia n
Soma ←0
para i ←1 at´e n fa¸ca
Soma ←Soma + 2 ∗ i −1
fimpara
escreva Soma, n
2
fimalgoritmo
16 Cap´ıtulo 1. L´ogica de programa¸c˜ao
A sequˆencia de n´ umeros ´ımpares (2i − 1) ´e gerada por uma estrutura para–fa¸ca, na qual
a vari´avel de controle i come¸ ca com o valor 1 e ´e incrementada de 1 at´e assumir o valor n.
Essa mesma sequˆencia de n´ umeros ´ımpares pode ser gerada pela estrutura similar
para j ←1 at´e 2 ∗ n −1 passo 2 fa¸ca
Soma ←Soma + j
fimpara
Exemplo 1.16 Elaborar um algoritmo para calcular o fatorial de um n´ umero inteiro n, sendo
n! =
n

k=1
k = 1 ×2 ×3 ×. . . ×n. (1.2)
Para n = 4, por exemplo, a vari´avel k assume os valores k = 1, 2, 3 e 4. A express˜ ao do
produt´ orio resulta em 4! = 1 ×2 ×3 ×4 = 24.
Como no caso do somat´orio, para implementar um produt´ orio ´e necess´ario uma vari´avel
auxiliar para acumular o resultado do produto de cada termo. Esse acumulador recebe,
inicialmente, o valor 1 que ´e o elemento neutro da multiplica¸ c˜ao. Para cada valor de k o
acumulador, denominado Fatorial , ´e multiplicado por k, conforme esquematizado na tabela
k Fatorial
– 1
1 1 × 1 = 1
2 1 × 2 = 2
3 2 × 3 = 6
4 6 × 4 = 24
.
Quando k = n a vari´avel Fatorial conter´a o valor do produt´ orio que ´e igual a n!. A imple-
menta¸ c˜ao da nota¸c˜ao matem´ atica (1.2) ´e apresentada no algoritmo abaixo.
Algoritmo Fatorial
{ Objetivo: Calcular o fatorial de um n´ umero inteiro }
leia n
Fatorial ←1
para k ←2 at´e n fa¸ca
Fatorial ←Fatorial ∗ k
fimpara
escreva n, Fatorial
fimalgoritmo
1.8. Falha no algoritmo 17
Esse algoritmo utiliza a estrutura de repeti¸c˜ao para –fa¸ca. Inicialmente, a vari´avel de
controle k recebe o valor 2, para evitar a opera¸c˜ao desnecess´aria 1 ×1 se k = 1. Se n = 1
ent˜ao a estrutura para–fa¸ca n˜ao ser´a executada, mas ter-se-´ a o resultado correto 1! = 1.
1.8 Falha no algoritmo
O comando
abandone
´e usado para indicar que haver´ a uma falha evidente na execu¸c˜ao do algoritmo, isto ´e, uma
condi¸ c˜ao de erro. Por exemplo, uma divis˜ ao por zero, uma singularidade da matriz ou mesmo
o uso inapropriado de parˆ ametros. Neste caso, a execu¸c˜ao deve ser cancelada.
1.9 Modulariza¸c˜ao
A t´ecnica de modulariza¸ c˜ao consiste em subdividir o algoritmo principal em m´ odulos, for-
mados por um subconjunto de comandos, cada qual com um objetivo bem espec´ıfico. Uma
grande vantagem da modulariza¸ c˜ao ´e a utiliza¸c˜ao de um mesmo m´ odulo por outros algorit-
mos que requeiram aquela funcionalidade.
A intera¸c˜ao entre as vari´aveis dos m´ odulo e as vari´aveis do algoritmo principal ´e realizada
pelos parˆ ametros de entrada e de sa´ıda. Os dados necess´arios para a execu¸c˜ao de um
algoritmo (m´odulo) s˜ao declarados por meio do comando
parˆametros de entrada <lista-de-vari´aveis> ,
onde <lista-de-vari´aveis> s˜ao os nomes das vari´aveis, separadas por v´ırgulas, contendo os
valores fornecidos. Por outro lado, os valores de interesse calculados pelo algoritmo (m´odulo)
s˜ao definidos pelo comando
parˆametros de sa´ıda <lista-de-vari´aveis> .
´
E de responsabilidade do projetista do m´ odulo definir a <lista-de-vari´aveis> em termos de
identificadores, ordem e n´ umero.
Exemplo 1.17 Escrever um m´ odulo, baseado no algoritmo de Exemplo 1.16, que receba como
parˆ ametro de entrada o n´ umero inteiro n e retorne como parˆ ametro de sa´ıda o fatorial desse
n´ umero na vari´avel Fatorial .
18 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Algoritmo Calcula fatorial
{ Objetivo: Calcular o fatorial de um n´ umero inteiro }
parˆametro de entrada n { n´ umero inteiro }
parˆametro de sa´ıda Fatorial { fatorial do n´ umero inteiro }
Fatorial ←1
para k ←2 at´e n fa¸ca
Fatorial ←Fatorial ∗ k
fimpara
fimalgoritmo
.
A forma de chamada do m´ odulo acima pelo m´ odulo principal depende da linguagem de
programa¸ c˜ao escolhida. Essa forma pode ser, por exemplo,
Algoritmo Fatorial principal
{ Objetivo: Utilizar o m´ odulo Calcula fatorial }
leia n { n´ umero inteiro }
Fatorial ←Calcula fatorial(n) { chamada do m´ odulo }
escreva Fatorial { fatorial do n´ umero inteiro }
fimalgoritmo
1.10 Estruturas de dados
Conforme visto na Se¸ c˜ao 1.4 Vari´aveis e coment´arios, uma vari´avel corresponde a uma posi¸c˜ao
de mem´oria do computador onde est´a armazenado um determinado valor. Ela ´e representada
por um identificador que ´e uma cadeia de caracteres alfanum´ericos. Quando se faz referˆencia
a um identificador, na realidade, est´a tendo acesso ao conte´ udo de uma posi¸c˜ao de mem´ oria.
Quando se tem v´ arias vari´aveis com o conte´ udo do mesmo tipo elas podem ser agrupadas
em uma ´ unica vari´avel, sendo cada conte´ udo individualizado por ´ındices. Por isso, elas s˜ao
denominadas vari´aveis compostas homogˆeneas e as mais comuns s˜ao os vetores, com um
´ unico ´ındice, e as matrizes, com dois ou mais ´ındices.
1.10.1 Vetores
Vetores ou arranjos s˜ao vari´aveis homogˆeneas unidimensionais, ou seja, s˜ao vari´aveis agrupa-
das em um ´ unico nome, cujos elementos s˜ao individualizados por um s´o ´ındice. Por exemplo,
sejam as notas de 45 alunos referentes `a Prova 1 da disciplina An´ alise Num´erica, mostradas
na tabela abaixo, sendo nc o n´ umero de chamada de cada aluno,
1.10. Estruturas de dados 19
Notas
nc Prova 1
1 15
2 19
3 12
4 20
5 18
6 20
7 13
8 19
.
.
.
.
.
.
45 17
.
O vetor Notas cont´em 45 elementos, cada um referenciando a nota da Prova 1 de cada aluno.
Deste modo, Notas(1) = 15 ´e a nota do aluno 1 da lista de chamada, Notas(2) = 19 ´e a
nota do aluno 2 da lista e assim, sucessivamente, at´e que Notas(45) = 17 ´e a nota do aluno
45. Por exemplo, para obter a nota m´edia da Prova 1 basta calcular
Nota m´edia =
1
45
45

i=1
Notas(i ) =
1
45
(15 + 19 + 12 + . . . + 17).
Exemplo 1.18 A Figura 1.1 mostra um algoritmo para determinar o maior elemento de um
vetor x de tamanho n.
Algoritmo Vetor maior
{ Objetivo: Determinar o maior elemento de um vetor }
parˆametros de entrada n, x
{ tamanho do vetor e o vetor }
parˆametro de sa´ıda Maior
{ Maior elemento do vetor }
Maior ←x(1)
para i ←2 at´e n fa¸ca
se x(i ) > Maior ent˜ao
Maior ←x(i )
fimse
fimpara
fimalgoritmo
Figura 1.1: Maior elemento de um vetor x de tamanho n.
20 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Exemplo 1.19 O algoritmo da Figura 1.2 inverte a ordem dos elementos de um vetor x de
tamanho n.
Algoritmo Vetor inverte
{ Objetivo: Inverter a ordem dos elementos de um vetor }
parˆametros de entrada n, x
{ tamanho do vetor e o vetor }
parˆametro de sa´ıda x
{ vetor com os elementos em ordem inversa }
para i ←1 at´e trunca(n/2) fa¸ca
t ←x(i )
x(i ) ←x(n + 1 −i )
x(n + 1 −i ) ←t
fimpara
fimalgoritmo
Figura 1.2: Invers˜ao da ordem dos elementos de um vetor x de tamanho n.
(Ver significado da fun¸c˜ao trunca na Tabela 1.2, na p´agina 5.)
Exemplo 1.20 Dado um vetor x com n componentes, a Figura 1.3 mostra um algoritmo para
calcular a m´edia aritm´etica ¯ x e o desvio padr˜ao s de seus elementos, sabendo que
¯ x =
1
n
n

i=1
x
i
e s
2
=
1
n −1
_
_
n

i=1
x
2
i

1
n
_
n

i=1
x
i
_
2
_
_
.
Algoritmo M´edia desvio
{ Objetivo: Calcular m´edia aritm´etica e desvio padr˜ ao }
parˆametros de entrada n, x
{ tamanho e elementos do vetor }
parˆametros de sa´ıda M´edia, DesvioPadr˜ao
Soma ←0
Soma2 ←0
para i ←1 at´e n fa¸ca
Soma ←Soma + x(i )
Soma2 ←Soma2 + x(i )
2
fimpara
M´edia ←Soma/n
DesvioPadr˜ao ← raiz
2
((Soma2 −Soma
2
/n)/(n −1))
escreva M´edia, DesvioPadr˜ao
fimalgoritmo
Figura 1.3: Algoritmo para c´alculo da m´edia aritm´etica e desvio padr˜ ao.
(Ver significado da fun¸c˜ao raiz
2
na Tabela 1.2, na p´agina 5.)
1.10. Estruturas de dados 21
1.10.2 Matrizes
Matrizes s˜ao vari´aveis homogˆeneas bidimensionais, isto ´e, s˜ao vari´aveis agrupadas em um
´ unico nome com os elementos individualizados por meio de dois ´ındices. Para exemplificar,
considere a tabela abaixo com as notas de 45 alunos referentes ` as Provas 1, 2, 3 e 4 da
disciplina An´ alise Num´erica, onde nc ´e o n´ umero de ordem na chamada de cada aluno,
Notas
An´ alise Num´erica
nc Prova 1 Prova 2 Prova 3 Prova 4
1 15 12 17 10
2 19 20 18 20
3 12 19 17 18
4 20 20 20 20
5 18 13 20 19
6 20 19 19 20
7 13 17 14 18
8 19 20 20 17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45 17 12 10 16
.
Para referenciar a nota de cada aluno em cada prova s˜ao necess´ arios dois ´ındices. O primeiro
´ındice indica qual aluno entre os quarenta e cinco e o segundo ´ındice especifica qual das
quatro provas. Por isso, a matriz Notas cont´em 45 linhas referentes ` a cada aluno e 4 colunas
indicando cada uma das provas. Assim, Notas(1, 1) = 15 ´e a nota do aluno 1 na Prova 1,
Nota(2, 3) = 18 ´e a nota do aluno 2 na Prova 3 e Notas(45, 4) = 16 ´e a nota do aluno 45
na Prova 4.
Exemplo 1.21 O algoritmo da Figura 1.4 calcula a soma das linhas da matriz A de dimens˜ ao
m×n.
Exemplo 1.22 A Figura 1.5 apresenta um algoritmo para determinar o maior elemento em
cada linha de uma matriz A de dimens˜ ao m×n.
22 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Algoritmo Matriz soma linha
{ Objetivo: Calcular a soma de cada linha da matriz }
parˆametros de entrada m, n, A
{ n´ umero de linhas, n´ umero de colunas e elementos da matriz }
parˆametro de sa´ıda SomaLinha
{ vetor contendo a soma de cada linha }
para i ←1 at´e m fa¸ca
SomaLinha(i ) ←0
para j ←1 at´e n fa¸ca
SomaLinha(i ) ←SomaLinha(i ) + A(i , j )
fimpara
fimpara
fimalgoritmo
Figura 1.4: Algoritmo para calcular a soma das linhas de uma matriz.
Algoritmo Matriz maior
{ Objetivo: Determinar maior elemento em cada linha da matriz }
parˆametros de entrada m, n, A
{ n´ umero de linhas, n´ umero de colunas e elementos da matriz }
parˆametro de sa´ıda Maior
{ vetor contendo o maior elemento de cada linha }
para i ←1 at´e m fa¸ca
Maior (i ) ←A(i , 1)
para j ←2 at´e n fa¸ca
se A(i , j ) > Maior (i ) ent˜ao
Maior (i ) ←A(i , j )
fimse
fimpara
fimpara
fimalgoritmo
Figura 1.5: Algoritmo para determinar o maior elemento da linha de uma matriz.
1.10. Estruturas de dados 23
Exemplo 1.23 A Figura 1.6 mostra um algoritmo para calcular o vetor x (n ×1) resultante
do produto de uma matriz A (n ×m) por um vetor v (m×1)
x
i
=
m

j=1
a
ij
v
j
, i = 1, 2, . . . , n.
Algoritmo Produto matriz vetor
{ Objetivo: Calcular o produto de uma matriz por um vetor }
parˆametros de entrada n, m, A, v
{ n´ umero de linhas, n´ umero de colunas, }
{ elementos da matriz e elementos do vetor }
parˆametro de sa´ıda x
{ vetor resultante do produto matriz-vetor }
para i ←1 at´e n fa¸ca
Soma ←0
para j ←1 at´e m fa¸ca
Soma ←Soma + A(i , j ) ∗ v(j )
fimpara
x(i ) ←Soma
fimpara
fimalgoritmo
Figura 1.6: Produto matriz-vetor.
1.10.3 Hipermatrizes
Hipermatrizes s˜ao vari´aveis compostas homogˆeneas multidimensionais, sendo o n´ umero
m´ aximo de dimens˜ oes limitado por cada linguagem de programa¸ c˜ao. Por exemplo, seja
a tabela abaixo mostrando as notas de 45 alunos referentes `as Provas 1, 2, 3 e 4 da disci-
plina Algoritmos e Estruturas de Dados III (AEDS III), sendo nc o n´ umero de ordem na
chamada de cada aluno,
Notas
AEDS III
nc Prova 1 Prova 2 Prova 3 Prova 4
1 16 14 18 12
2 17 19 20 18
3 14 20 20 19
4 19 18 19 19
5 20 19 19 20
6 12 20 20 19
7 15 18 11 18
8 18 19 17 20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
45 18 14 15 17
.
24 Cap´ıtulo 1. L´ogica de programa¸c˜ao
Nesse caso, para referenciar a nota de cada aluno em cada prova e em cada disciplina na
mesma vari´avel Nota s˜ao necess´arios agora trˆes ´ındices. O primeiro ´ındice indica qual aluno
entre os quarenta e cinco, o segundo ´ındice especifica qual das quatro provas e o terceiro
estabelece qual das duas disciplinas entre An´ alise Num´erica e AEDS III. Assim, a hipermatriz
tridimensional Notas cont´em duas p´aginas, uma para cada disciplina (terceiro ´ındice), com
cada p´agina contendo 45 linhas referentes `a cada aluno (primeiro ´ındice) e com 4 colunas
indicando cada uma das provas (segundo ´ındice). Por exemplo, Notas(3, 2, 1) = 19 ´e a nota
do aluno 3 na Prova 2 em An´ alise Num´erica enquanto que Nota(8, 4, 2) = 20 ´e a nota do
aluno 8 na Prova 4 de AEDS III.
1.11 Exerc´ıcios
Se¸c˜ao 1.5 Express˜oes
Escrever as f´ ormulas abaixo na nota¸c˜ao algor´ıtmica e avaliar a express˜ ao para a = 2, b = 5,
c = 7 e d = 10.
1.1 v ←
a + d
4

3
b −c −1
.
1.2 w ←
b +
d+2
6
a −1
+ c.
1.3 x ←a +
b
4 +
c−2
d−5
.
1.4 y ←c ≥ d + 1 e ab = d.
1.5 z ←b +
d
2
< ac ou

a
2
+ b + c >
d
a + 3
.
Se¸ c˜ao 1.6 Estruturas condicionais
Escrever um algoritmo para avaliar uma fun¸c˜ao abaixo:
1.6 e(x) = x
2
+

x + 1, para x > −1.
1.7 f(x) = 3x
2
+ 2x + cos(x
3
−1), para 1 ≤ x < 5.
1.8 g(x) = sen
−1
(x) + e
2x+1
, para |x| ≤ 1.
1.9 h(x) =
_
e
x
−1, −3 ≤ x ≤ 0,
x sen(5x), 0 ≤ x ≤ 5,
.
1.10 Fazer um algoritmo para ler dois n´ umeros e escrevˆe-los em ordem crescente.
1.11. Exerc´ıcios 25
Se¸c˜ao 1.7 Estruturas de repeti¸c˜ao
Fazer um algoritmo para calcular uma express˜ao abaixo.
1.11 S =
1
2
+
3
4
+
5
6
+ . . . +
9
10
.
1.12 T =
30 ×29
1
+
28 ×27
2
+
26 ×25
3
+ . . . +
2 ×1
15
.
1.13 N =
1
1

2
4
+
3
9

4
16
+ . . . −
12
144
.
1.14 F = 1! + 2! −3! + 4! + 5! −6! + . . . ±n!.
1.15 P = −
1
3
1!
+
3
3
2!

5
3
3!
+ . . . +
19
3
10!
.
Elaborar um algoritmo para ler um argumento e calcular uma fun¸c˜ao elementar abaixo, apro-
ximada por s´erie de potˆencias [1]. A s´erie deve ser truncada quando um termo for menor que
10
−10
ou atingir 1000 termos. Essas expans˜oes em s´erie, geralmente, s˜ao muito ineficientes
para aproximar fun¸c˜oes, pois requerem um n´ umero elevado de termos. No entanto, elas
possibilitam ´otimos exemplos para uso das estruturas de repeti¸c˜ao.
1.16 log
e
(x) = (x −1) −
(x −1)
2
2
+
(x −1)
3
3
−. . . , para 0 < x ≤ 2.
1.17 exp(x) = 1 +
x
1!
+
x
2
2!
+
x
3
3!
+ . . ..
1.18 sen(x) = x −
x
3
3!
+
x
5
5!

x
7
7!
+ . . ..
1.19 cos(x) = 1 −
x
2
2!
+
x
4
4!

x
6
6!
+ . . ..
1.20 arcsen(x) = x +
1
2
×
x
3
3
+
1 ×3
2 ×4
×
x
5
5
+
1 ×3 ×5
2 ×4 ×6
×
x
7
7
+ . . . , para |x| ≤ 1.
Se¸c˜ao 1.9 Modulariza¸c˜ao
Converter os algoritmos dos exemplos abaixo, que utilizam os comandos leia e escreva, em
m´ odulos com parˆ ametros de entrada e de sa´ıda.
1.21 Exemplo 1.13.
1.22 Exemplo 1.18.
26 Cap´ıtulo 1. L´ogica de programa¸c˜ao
1.23 Exemplo 1.20.
1.24 Exemplo 1.21.
1.25 Exemplo 1.23.
Se¸c˜ao 1.10 Estruturas de dados
Elaborar um algoritmo para cada item, sendo x, y e v vetores de dimens˜ ao n e k um escalar.
1.26 Calcular o produto interno k = x
T
y = x
1
y
1
+ x
2
y
2
+ x
3
y
3
+· · · + x
n
y
n
=
n

i=1
x
i
y
i
.
1.27 Avaliar v = kx + y →v
i
= k ×x
i
+ y
i
, para i = 1, 2, 3, . . . , n.
1.28 Determinar a norma Euclidiana x
2
=
¸
¸
¸
_
n

i=1
|x
i
|
2
.
1.29 Calcular a norma de m´ axima magnitude x

= lim
p→∞
p
¸
¸
¸
_
n

i=1
|x
i
|
p
= max
1≤i≤n
|x
i
|.
1.30 Ordenar os elementos de x em ordem decrescente.
Sejam o vetor x de dimens˜ ao n, o vetor y de dimens˜ ao m, a matriz A (m × n) e a matriz
B (n ×p). Escrever um algoritmo para cada item abaixo.
1.31 Avaliar o produto externo M = xy
T
, com m
ij
= x
i
y
j
, i = 1, 2, . . . , n e j =
1, 2, . . . , m.
1.32 Avaliar a norma de Frobenius A
F
=
¸
¸
¸
_
m

i=1
n

j=1
|a
ij
|
2
.
1.33 Calcular a norma de soma m´ axima de coluna A
1
= max
1≤j≤n
m

i=1
|a
ij
|.
1.34 Determinar a norma de soma m´ axima de linha A

= max
1≤i≤m
n

j=1
|a
ij
|.
1.35 Calcular o produto C = AB, sendo c
ij
=
n

k=1
a
ik
b
kj
, i = 1, 2, . . . , m e j = 1, 2, . . . , p.
Cap´ıtulo 2
Ambiente de programa¸ c˜ao
O SCILAB ´e executado por meio do script scilab no diret´orio <SCIDIR>/bin, sendo que
<SCIDIR> denota o diret´orio onde o programa foi instalado. A intera¸c˜ao entre o SCILAB e o
usu´ ario ´e feita por interm´edio de uma janela, na qual um comando ´e fornecido, interpretado
e exibido o resultado.
Neste cap´ıtulo ser´a descrita a janela de comando do SCILAB e seus comandos b´asicos, bem
como, os meios que o programa tem de auxiliar o usu´ ario durante a sess˜ ao, no caso de d´ uvida
sobre a sintaxe ou mesmo a existˆencia de algum comando.
2.1 Janela de comando
Para executar o SCILAB em ambiente Windows ou Macintosh, o cursor deve ser colocado
sobre o seu ´ıcone e pressionado o bot˜ ao da esquerda do mouse ou ent˜ao, no caso de ambi-
ente Linux, entrar com o comando scilab ou scilab -nw (no window) em uma janela de
comando. Sem a op¸c˜ao -nw aparecer´ a uma nova janela pela qual ser´a feita a intera¸c˜ao entre
o SCILAB e o usu´ ario (ver Figura 2.1).
Se for utilizada a op¸c˜ao -nw a janela do SCILAB aparecer´ a na pr´ opria janela de comando
(ver Figura 2.2). O sinal de que o programa est´a pronto para receber um comando ´e indicado
pelo prompt formado pelos trˆes caracteres (-->).
Um comando ´e finalizado acionando-se a tecla Enter ou Return. Se um comando for muito
longo, ent˜ao trˆes pontos (...) seguidos do pressionamento da tecla Enter ou Return indica
que o comando continuar´ a na pr´ oxima linha. V´arios comandos podem ser colocados em
uma mesma linha se eles forem separados por v´ırgulas ou pontos-e-v´ırgulas. Al´em disto, as
v´ırgulas indicam ao SCILAB para mostrar os resultados e os pontos-e-v´ırgulas para suprimir
27
28 Cap´ıtulo 2. Ambiente de programa¸c˜ao
Figura 2.1: Janela de comando da vers˜ao 5.1.1 do SCILAB (sem -nw).
Figura 2.2: Janela de comando da vers˜ao de 5.1.1 do SCILAB (com -nw).
a exibi¸ c˜ao.
Um texto ap´os duas barras invertidas (//) ´e ignorado; ele pode ser utilizado como um
coment´ario para a documenta¸ c˜ao de um programa.
As teclas ↑ e ↓ podem ser usadas para listar os comandos previamente dados e as teclas →
e ← movem o cursor na linha de comando facilitando a sua modifica¸ c˜ao.
O n´ umero de linhas e colunas a serem exibidas de cada vez na janela de comando pode ser
2.1. Janela de comando 29
redefinida pelo comando lines. Sua sintaxe ´e
lines(<n´umero-de-linhas>,<n´umero-de-colunas>)
onde <n´ umero-de-linhas> e <n´ umero-de-colunas> definem o n´ umero de linhas e colunas,
respectivamente, a serem exibidas, sendo o segundo argumento opcional. O comando ´e
desativado por lines(0).
O comando clc ´e usado para limpar a janela de comando
1
e tohome posiciona o cursor no
canto superior esquerdo da janela de comando. O t´ermino de execu¸c˜ao do SCILAB ´e feito
pelos comandos quit ou exit.
Quando o SCILAB for ativado, os comandos contidos no arquivo scilab.ini s˜ao automati-
camente executados, caso ele exista, para que sejam atribu´ıdos valores a alguns parˆ ametros.
Deste modo, o usu´ ario pode criar um arquivo contendo, por exemplo, defini¸ c˜ao de constantes
matem´ aticas e f´ısicas, formatos de exibi¸ c˜ao ou quaisquer comandos do SCILAB para perso-
nalizar a sua janela de comando. Este arquivo deve ser criado em um diret´ orio espec´ıfico,
dependendo do sistema operacional utilizado (use help startup para mais informa¸c˜oes).
A abrangˆencia e potencialidade do SCILAB est´a muito al´em do que ser´a mostrado neste
texto, por isso ´e aconselh´ avel executar a op¸c˜ao Scilab Demonstrations, dentro da op¸c˜ao
? no canto superior `a direita
1
, para visualizar uma demonstra¸c˜ao e se ter uma id´eia dessa
potencialidade.
2.1.1 Espa¸ co de trabalho
As vari´aveis criadas durante uma sess˜ ao ficam armazenadas em uma mem´ oria denominada
espa¸co de trabalho. O comando who lista o nome das vari´aveis que est˜ao sendo usadas, ou
seja, que est˜ao presentes no espa¸co de trabalho. Este comando lista as vari´aveis criadas pelo
usu´ ario e as definidas pelo pr´ oprio SCILAB. Por exemplo, no in´ıcio de uma sess˜ ao, quando
o usu´ ario criou apenas uma vari´avel,
-->a = 1 // cria a variavel a com o valor 1
a =
1.
-->who
Your variables are:
a home matiolib parameterslib
simulated_annealinglib genetic_algorithmslib umfpacklib fft
scicos_pal %scicos_menu %scicos_short %scicos_help
%scicos_display_mode modelica_libs scicos_pal_libs %scicos_lhb_list
%CmenuTypeOneVector %scicos_gif %scicos_contrib scicos_menuslib
scicos_utilslib scicos_autolib spreadsheetlib demo_toolslib
development_toolslib scilab2fortranlib scipadinternalslib scipadlib
soundlib texmacslib tclscilib m2scilib
maple2scilablib metanetgraph_toolslib metaneteditorlib compatibility_functilib
statisticslib timelib stringlib special_functionslib
sparselib signal_processinglib %z %s
1
Quando o SCILAB for executado sem a op¸c˜ ao -nw.
30 Cap´ıtulo 2. Ambiente de programa¸c˜ao
polynomialslib overloadinglib optimizationlib linear_algebralib
jvmlib iolib interpolationlib integerlib
dynamic_linklib guilib data_structureslib cacsdlib
graphic_exportlib graphicslib fileiolib functionslib
elementary_functionlib differential_equationlib helptoolslib corelib
PWD %F %T %nan
%inf COMPILER SCI SCIHOME
TMPDIR MSDOS %gui %pvm
%tk %fftw $ %t
%f %eps %io %i
%e %pi
using 33369 elements out of 5000000.
and 86 variables out of 9231.
Your global variables are:
%modalWarning demolist %helps %helps_modules
%driverName %exportFileName LANGUAGE %toolboxes
%toolboxes_dir
using 2681 elements out of 5000001.
and 9 variables out of 767.
2.1.2 Diret´orio corrente
Diret´ orio corrente ´e aquele considerado em uso, sem ser necess´ario especific´ a-lo explicita-
mente durante uma a¸c˜ao. Para saber qual o diret´orio de trabalho corrente utiliza-se o
comando pwd,
-->pwd // mostra o diretorio de trabalho corrente
ans =
ffcampos
O resultado exibido depende do diret´orio de onde o SCILAB foi executado. O diret´ orio
corrente pode ser alterado por meio do comando cd,
-->cd scilab // muda o diretorio de trabalho corrente para ’scilab’
ans =
ffcampos/scilab
O SCILAB fornece diversos comandos para gerenciamento de arquivos, os quais s˜ao mostra-
dos na Tabela 2.1.
Tabela 2.1: Comandos para gerenciamento de arquivos.
Comando Descri¸c˜ao
dir ou ls lista os arquivos do diret´orio corrente;
mdelete(’<nome do arquivo>’) remove o arquivo <nome do arquivo>;
cd <dir> ou chdir <dir> muda o diret´orio para <dir>;
pwd mostra o diret´orio corrente.
2.2. Comandos de aux´ılio ao usu´ario 31
2.1.3 Comando unix
O comando unix(’<comando do unix>’) permite a execu¸c˜ao de um comando do sistema
operacional Unix dentro do SCILAB. Por exemplo, caso o arquivo precisao.sci exista no
diret´ orio corrente, o seu conte´ udo ´e exibido pelo comando,
-->unix(’more precisao.sci’); // lista conteudo do arquivo
// programa precisao
// Objetivo: determinar a precisao de um computador
n = 0;
Epsilon = 1;
while 1 + Epsilon > 1
n = n + 1;
Epsilon = Epsilon / 2;
end
n, Epsilon, %eps
2.2 Comandos de aux´ılio ao usu´ario
O SCILAB possui muito mais comandos do que aqueles apresentados neste texto, o que
torna mais dif´ıcil lembr´ a-los. Com o intuito de auxiliar o usu´ ario na procura de comandos, o
programa provˆe assistˆencia por interm´edio de suas extensivas capacidades de aux´ılio direto.
Estas capacidades est˜ao dispon´ıveis em trˆes formas: o comando help, o comando apropos
e, interativamente, por meio de um menu de barras.
2.2.1 Comando help
O comando help ´e a maneira mais simples de obter aux´ılio no caso de conhecer o t´opico em
que se quer assistˆencia. Sua sintaxe ´e
help <t´ opico>
onde <t´ opico> ´e o nome da fun¸c˜ao ou de diret´orio. Por exemplo, quando se usa help sqrt,
abre-se uma janela como a mostrada na Figura 2.3.
Assim, s˜ao dadas informa¸c˜oes sobre a fun¸c˜ao sqrt para extrair raiz quadrada. O comando
help funciona a contento quando se conhece exatamente o t´opico sobre o qual quer as-
sistˆencia. Considerando que muitas vezes este n˜ao ´e o caso, o help pode ser usado sem
<t´ opico> para apresentar uma p´agina de hipertexto contendo a lista de ´ıtens dispon´ıveis.
O comando help ´e mais conveniente se o usu´ ario conhecer exatamente o t´opico em que
deseja aux´ılio. No caso de n˜ao saber soletrar ou mesmo desconhecer um t´opico as outras
duas formas de assistˆencia s˜ao muitas vezes mais proveitosas.
32 Cap´ıtulo 2. Ambiente de programa¸c˜ao
Figura 2.3: Janela do comando help.
2.2.2 Comando apropos
O comando apropos provˆe assistˆencia pela procura em todas as primeiras linhas dos t´opicos
de aux´ılio e retornando aquelas que contenham a palavra-chave especificada. O mais impor-
tante ´e que a palavra-chave n˜ao precisa ser um comando do SCILAB. Sua sintaxe ´e
apropos <palavra-chave>
onde <palavra-chave> ´e a cadeia de caracteres que ser´a procurada nos comandos do SCI-
LAB. Por exemplo, para informa¸c˜oes sobre fatoriza¸c˜ao, tecla-se apropos factorization,
resultando em uma tela com p´agina dupla. A p´agina da esquerda apresenta as classes de
fun¸c˜oes do SCILAB que cont´em pelo menos uma fun¸c˜ao com a descri¸c˜ao de factorization.
A segunda p´agina mostra dentro de uma classe quais as fun¸c˜oes que apresentam a palavra
factorization em sua descri¸c˜ao. A escolha da classe Linear Algebra, por exemplo, re-
sulta em uma tela, como mostrada na Figura 2.4.
Apesar de a palavra factorization n˜ao ser um comando do SCILAB, ela foi encontrada na
descri¸c˜ao de v´ arias fun¸c˜oes. Um clique sobre uma das linhas da p´agina ` a esquerda escolhe a
classe de fun¸c˜oes e um clique sobre uma fun¸c˜ao da p´agina `a direita descreve aquela fun¸c˜ao
espec´ıfica, como um comando help. Por exemplo, a escolha de chfact - sparse Cholesky
factorization, ´e equivalente ao comando help chfact.
2.3. Exerc´ıcios 33
Figura 2.4: Janela do comando apropos.
2.2.3 Menu de barras
Quando o SCILAB for executado sem a op¸c˜ao -nw, um aux´ılio por interm´edio de menu-
dirigido ´e dispon´ıvel selecionando a op¸c˜ao Help Browser indicada por um (?) dentro de
um c´ırculo (´ ultimo ´ıcone `a direita) no menu de barras, como visto na Figura 2.1. Como o
uso desta forma de assistˆencia ´e bem intuitivo, o melhor a fazer ´e experimentar!
2.3 Exerc´ıcios
Se¸c˜ao 2.1 Janela de comando
2.1 Executar o programa SCILAB.
2.2 Verificar a diferen¸ca entre , e ; nos comandos %pi+1, %pi*10 e %pi+1; %pi*10;.
2.3 Testar o funcionamento das teclas ↑ e ↓.
2.4 Ver o funcionamento das teclas → e ←.
2.5 Verificar a diferen¸ca entre lines(20), lines() e lines(0).
Se¸c˜ao 2.2 Comandos de aux´ılio ao usu´ario
2.6 Quantos parˆ ametros tem a fun¸c˜ao erro erf?
2.7 Quais s˜ao os comandos utilizados para interpola¸c˜ao (interpolation)?
34 Cap´ıtulo 2. Ambiente de programa¸c˜ao
2.8 Qual o comando usado para calcular o determinante (determinant) de uma matriz?
2.9 Qual o comando para achar ra´ızes (roots) de uma equa¸ c˜ao polinomial?
2.10 Comparar a soma dos autovalores (eigenvalues) com o tra¸co (trace) de uma matriz de
ordem qualquer. Fazer a mesma compara¸c˜ao usando uma matriz com elementos aleat´ orios.
Cap´ıtulo 3
Estruturas de dados
Neste cap´ıtulo ser˜ao apresentados alguns ´ıtens b´asicos, tais como, constantes, vari´aveis,
vetores, matrizes, hipermatrizes, polinˆ omios e listas, o que tornar´ a poss´ıvel o uso imediato
do SCILAB no modo interativo. Al´em disto, o conhecimento sobre as estruturas de dados ´e
fundamental para um uso eficiente do programa.
3.1 Constantes
O SCILAB suporta trˆes tipos de constantes: num´ericas, l´ ogicas e literais.
3.1.1 Num´ericas
Uma constante num´erica ´e formada por uma seq¨ uˆencia de d´ıgitos que pode estar ou n˜ao
precedida de um sinal positivo (+) ou um negativo (-) e pode conter um ponto decimal (.).
Esta seq¨ uˆencia pode terminar ou n˜ao por uma das letras e, E, d ou D seguida de outra
seq¨ uˆencia de d´ıgitos precedida ou n˜ao de um sinal positivo (+) ou um negativo (-). Esta
segunda seq¨ uˆencia ´e a potˆencia de 10 pela qual a primeira seq¨ uˆencia ´e multiplicada. Por
exemplo, 1.23e-1 significa 1,23×10
−1
= 0,123 e 4.567d2 ´e 4,567×10
2
= 456,7
-->1.23e-1
ans =
0.123
-->4.567d2
ans =
456.7
Algumas linguagens de programa¸ c˜ao requerem um tratamento especial para n´ umeros com-
plexos, o que n˜ao ´e o caso do SCILAB. Opera¸c˜oes matem´ aticas com n´ umeros complexos s˜ao
escritas do mesmo modo como para n´ umeros reais. Para indicar a parte imagin´ aria basta
35
36 Cap´ıtulo 3. Estruturas de dados
acrescentar os trˆes caracteres (*%i), ou seja, multiplicar (*) por

−1 = i representado por
(%i),
-->3+2*%i
ans =
3. + 2.i
As vari´aveis reais e complexas em SCILAB ocupam 24 e 32 bytes de mem´ oria, respectiva-
mente.
3.1.2 L´ ogicas
Uma constante l´ ogica pode assumir apenas dois valores: %t ou %T (true) para verdadeiro e
%f ou %F (false) para falso,
-->%t // valor verdadeiro
ans =
T
-->%f // valor falso
ans =
F
3.1.3 Literais
Uma constante literal ´e composta por uma cadeia de caracteres em vez de n´ umeros ou
verdadeiro e falso. A cadeia de caracteres deve estar delimitada por aspas (’) ou ap´ostrofos
("),
-->’abcde’ // um valor literal
ans =
abcde
3.2 Vari´aveis
Uma vari´avel ´e uma posi¸c˜ao da mem´oria do computador utilizada para armazenar uma
informa¸c˜ao, sendo representada por um identificador.
3.2.1 Regras para nomes de vari´aveis
Como qualquer outra linguagem de programa¸ c˜ao, o SCILAB tem regras a respeito do nome
de vari´aveis, conforme mostrado na Tabela 3.1.
3.2. Vari´aveis 37
Tabela 3.1: Regras para nomes de vari´aveis.
Regra Coment´ario
conter at´e 24 caracteres caracteres al´em do 24
o
s˜ao ignorados;
come¸ car com uma letra seguida
de letras, n´ umeros ou dos carac-
teres , #, $, ! e ?
alguns caracteres de pontua¸ c˜ao s˜ao permitidos;
tamanho da letra ´e diferenciador raiz, Raiz e RAIZ s˜ao trˆes vari´aveis distintas.
3.2.2 Comando de atribui¸ c˜ao
O SCILAB ´e um interpretador de express˜oes. A express˜ao fornecida ´e analisada sintatica-
mente e se estiver correta ent˜ao ser´a avaliada. O resultado ´e atribu´ıdo ` a uma vari´avel por
interm´edio do comando de atribui¸ c˜ao
<vari´avel> = <express~ao>
Por exemplo,
-->a=10.2+5.1
a =
15.3
Quando o comando de atribui¸ c˜ao for finalizado pelo caracter (;) ent˜ao o resultado ´e atribu´ıdo
`a vari´avel, por´em o seu conte´ udo n˜ao ´e exibido,
-->b=5-2; // atribuicao sem exibir o resultado
-->b // conteudo da variavel b
ans =
3.
Se o nome da vari´avel e o sinal de atribui¸ c˜ao (=) forem omitidos ent˜ao o resultado ser´a dado
`a vari´avel default ans (answer),
-->8/5
ans =
1.6
3.2.3 Vari´aveis especiais
O SCILAB tem diversas vari´aveis especiais, as quais s˜ao consideradas como pr´e-definidas,
n˜ao podendo ser alteradas ou removidas (com excess˜ ao de ans). Elas est˜ao listadas na
Tabela 3.2.
Para obter os valores destas vari´aveis especiais, faz-se
-->%e, %eps, %i, %inf, %nan, %pi, %s
38 Cap´ıtulo 3. Estruturas de dados
Tabela 3.2: Vari´aveis especiais do SCILAB.
Vari´avel Valor
ans nome de vari´avel default usada para resultados;
%e base do logaritmo natural, e = 2,71828 . . .
%eps menor n´ umero de ponto flutuante que adicionado a 1 resulta um
n´ umero maior que 1. Seu valor ´e ǫ = 2
−52
≈ 2,2204×10
−16
em
computadores com aritm´etica de ponto flutuante IEEE;
%i i =

−1;
%inf infinito, por exemplo, 1/0;
%nan n˜ao ´e um n´ umero (Not-A-Number), por exemplo, 0/0;
%pi π = 3, 14159 . . .
%s usada como vari´avel de polinˆ omio.
%e =
2.7182818
%eps =
2.220D-16
%i =
i
%inf =
Inf
%nan =
Nan
%pi =
3.1415927
%s =
s
3.3 Vetores
Vetor ou arranjo ´e um conjunto de vari´aveis homogˆeneas (conte´ udo de mesmo tipo) iden-
tificadas por um mesmo nome e individualizadas por meio de um ´ındice. No SCILAB, um
vetor ´e definido de v´ arias formas, por exemplo, elemento por elemento, separados por espa¸co
em branco ou v´ırgula e delimitados pelos caracteres ([) e (]),
<vetor> = [ e
1
, e
2
, ... , e
n
]
sendo <vetor> o nome da vari´avel e e
i
o seu i-´esimo elemento,
-->a = [5 1.5,-0.3] // elementos separados por espa¸ co em branco ou v´ırgula
a =
5. 1.5 - 0.3
3.3. Vetores 39
O vetor a possui os elementos a(1)=5, a(2)=1.5 e a(3)=-0.3. Se os valores do vetor forem
igualmente espa¸cados ele pode ser definido por interm´edio da express˜ ao
<vetor> = <valor inicial>:<incremento>:<valor final> .
Para gerar um vetor com o primeiro elemento igual a 10, o segundo igual a 15, o terceiro
igual a 20 e assim, sucessivamente, at´e o ´ ultimo igual a 40 basta o comando
-->b = 10:5:40 // valor inicial = 10, incremento = 5 e valor final = 40
b =
10. 15. 20. 25. 30. 35. 40.
Se o incremento desejado for igual a 1 ent˜ao ele poder´a ser omitido,
-->u = 5:9 // valor inicial = 5, incremento = 1 e valor final = 9
u =
5. 6. 7. 8. 9.
Em vez de usar incremento, um arranjo pode tamb´em ser constru´ıdo definindo o n´ umero
desejado de elementos na fun¸c˜ao linspace, cuja sintaxe ´e
<vetor> = linspace(<valor inicial>,<valor final>,<n´umero de elementos>) .
Assim, para criar um arranjo com o primeiro elemento igual a 10, o ´ ultimo igual a 40 e
possuindo 7 elementos,
// valor inicial = 10, valor final = 40 e elementos = 7
-->c = linspace(10,40,7)
c =
10. 15. 20. 25. 30. 35. 40.
Isto produz um vetor idˆentico a b=10:5:40 definido acima. Se no comando linspace o
parˆ ametro <n´ umero de elementos> for omitido ent˜ao ser˜ao gerados 100 pontos. No caso
de n´ umeros complexos, os incrementos s˜ao feitos separadamente para a parte real e para a
parte imagin´ aria,
// valor inicial = 1+i, valor final = 2+4i e elementos = 5
-->d = linspace(1+%i,2+4*%i,5)
d =
1. + i 1.25 + 1.75i 1.5 + 2.5i 1.75 + 3.25i 2. + 4.i
Os elementos podem ser acessados individualmente; por exemplo, para o vetor c definido
acima
-->c(2) // segundo elemento de c
ans =
15.
ou em blocos usando os comandos de defini¸ c˜ao de arranjos,
40 Cap´ıtulo 3. Estruturas de dados
-->c(3:5) // terceiro ao quinto elementos
ans =
20. 25. 30.
Lembrando que 5:-2:1 gera a seq¨ uˆencia 5, 3, 1, ent˜ao,
-->c(5:-2:1) // quinto, terceiro e primeiro elementos
ans =
30. 20. 10.
O endere¸camento indireto ´e tamb´em poss´ıvel, permitindo referenciar os elementos de um
vetor na ordem definida pelos elementos de um outro vetor. Por exemplo, sejam os vetores
c, definido acima, e ind
-->ind = 1:2:7 // valor inicial = 1, incremento = 2 e valor final = 7
ind =
1. 3. 5. 7.
Assim, ind([4 2]) produz um vetor contendo os elementos 4 e 2 do vetor ind, ou seja, [7
3]. Por sua vez,
-->c(ind([4 2])) // vetor c indexado pelo vetor ind
ans =
40. 20.
´e equivalente a c([7 3]), ou seja, o vetor gerado cont´em os elementos 7 e 3 do vetor c.
Nos exemplos acima, os vetores possuem uma linha e v´ arias colunas, por isto s˜ao tamb´em
chamados vetores linha. Do mesmo modo, podem existir vetores coluna, ou seja, vetores
com v´ arias linhas e uma ´ unica coluna. Para criar um vetor coluna elemento por elemento
estes devem estar separados por (;)
<vetor> = [ e
1
; e
2
; ... ; e
n
]
Deste modo, para gerar um vetor coluna com os elementos 1.5, -3.2 e -8.9,
-->v = [1.5;-3.2;-8.9] // elementos separados por ponto-e-v´ ırgula
v =
1.5
- 3.2
- 8.9
Por isto, separando os elementos de um vetor por brancos ou v´ırgulas s˜ao especificados os
elementos em diferentes colunas (vetor linha). Por outro lado, separando os elementos por
ponto-e-v´ırgula especifica-se os elementos em diferentes linhas (vetor coluna). Para trans-
formar um vetor linha em vetor coluna e vice-versa, usa-se o operador de transposi¸c˜ao (’),
3.3. Vetores 41
-->x = v’ // vetor linha obtido pela transposi¸ c~ao de vetor coluna
x =
1.5 - 3.2 - 8.9
-->y = (1:3)’ // vetor coluna obtido pelo operador de transposi¸ c~ao
y =
1.
2.
3.
No caso do vetor ser complexo, a transposi¸c˜ao ´e obtida pelo operador (.’), pois o uso do
operador (’) resultar´a em um complexo conjugado transposto. Por exemplo, seja o vetor
complexo,
// valor inicial = 1+0,1i, incremento = 1+0,1i e valor final = 3+0,3i
-->z = (1:3)+(0.1:0.1:0.3)*%i
z =
1. + 0.1i 2. + 0.2i 3. + 0.3i
o transposto ´e
-->t = z.’ // vetor transposto
t =
1. + 0.1i
2. + 0.2i
3. + 0.3i
e o complexo conjugado transposto
-->cc = z’ // vetor complexo conjugado transposto
cc =
1. - 0.1i
2. - 0.2i
3. - 0.3i
No caso do vetor n˜ao ser complexo a transposi¸c˜ao pode ser feita usando (’) ou (.’). A fun¸c˜ao
length ´e utilizada para saber o comprimento de um vetor, ou seja, quantos elementos ele
possui
-->l = length(z)
l =
3.
Por fim, deve-se notar a importˆancia da posi¸c˜ao do caracter branco na defini¸ c˜ao de um vetor
-->p=[1+2]
p =
3.
-->p=[1 +2]
42 Cap´ıtulo 3. Estruturas de dados
p =
1. 2.
-->p=[1+ 2]
p =
3.
-->p=[1 + 2]
p =
3.
3.4 Matrizes
As matrizes s˜ao arranjos bidimensionais homogˆeneos e constituem as estruturas fundamen-
tais do SCILAB e por isto existem v´ arias maneiras de manipul´ a-las. Uma vez definidas, elas
podem ser modificadas de v´ arias formas, como por inser¸c˜ao, extra¸c˜ao e rearranjo.
Similarmente aos vetores, para construir uma matriz os elementos de uma mesma linha
devem estar separados por branco ou v´ırgula e as linhas separadas por ponto-e-v´ırgula ou
Enter (ou Return),
<matriz> = [ e
11
e
12
... e
1n
; e
21
e
22
... e
2n
; ... ; e
m1
e
m2
... e
mn
]
3.4.1 Constru¸c˜ao e manipula¸ c˜ao de matrizes
Para criar uma matriz A com 2 linhas e 3 colunas,
-->A = [3 2 -5; 4 7 9] // atribui os elementos da matriz A
A =
3. 2. - 5.
4. 7. 9.
Para modificar um elemento basta atribuir-lhe um novo valor,
-->A(1,2)=8 // altera o elemento da linha 1 e coluna 2
A =
3. 8. - 5.
4. 7. 9.
Cuidado: se for atribu´ıdo um valor a um elemento n˜ao existente, ou seja, al´em dos elementos
da matriz ent˜ao o SCILAB aumenta esta matriz, automaticamente, preenchendo-a com
valores nulos de forma a matriz permanecer retangular,
-->A(3,6)=1 // atribui valor ao elemento da linha 3 e coluna 6
A =
3. 8. - 5. 0. 0. 0.
4. 7. 9. 0. 0. 0.
0. 0. 0. 0. 0. 1.
3.4. Matrizes 43
Seja agora a matriz quadrada B de ordem 3,
-->B = [1 2 3; 4 5 6; 7 8 9] // atribui os elementos da matriz B
B =
1. 2. 3.
4. 5. 6.
7. 8. 9.
De modo similar aos vetores, os elementos de uma matriz podem ser referenciados individu-
almente, tal como,
-->B(2,3) // elemento da linha 2 e coluna 3
ans =
6.
ou em conjuntos, neste caso usando a nota¸c˜ao de vetor. Por exemplo, os elementos das
linhas 1 e 3 e coluna 2,
-->B([1 3],2) // elementos das linhas 1 e 3 da coluna 2
ans =
2.
8.
A nota¸c˜ao de vetor, <valor inicial>:<incremento>:<valor final>, tamb´em pode ser
usada ou at´e mesmo linspace. Lembrando que 3:-1:1 gera a seq¨ uˆencia 3, 2 e 1 e 1:3
produz 1, 2 e 3, ent˜ao o comando,
-->C = B(3:-1:1,1:3) // obt´em a matriz C a partir da invers~ao das linhas de B
C =
7. 8. 9.
4. 5. 6.
1. 2. 3.
cria uma matriz C a partir das linhas 3, 2 e 1 e colunas 1, 2 e 3 de B, ou seja, cria uma matriz
C a partir das linhas de B em ordem contr´ aria. Considerando que s˜ao referenciadas todas as
3 colunas de B, a nota¸c˜ao simplificada (:) pode ser igualmente usada em vez de 1:3
-->C = B(3:-1:1,:) // nota¸ c~ao simplificada
C =
7. 8. 9.
4. 5. 6.
1. 2. 3.
Para criar uma matriz D a partir das linhas 1 e 2 e colunas 1 e 3 de B, faz-se
-->D = B(1:2,[1 3])
D =
1. 3.
4. 6.
44 Cap´ıtulo 3. Estruturas de dados
Para construir uma matriz E a partir da matriz B seguida da coluna 2 de C seguida ainda de
uma coluna com os elementos iguais a 3,
-->E = [B C(:,2) [3 3 3]’]
E =
1. 2. 3. 8. 3.
4. 5. 6. 5. 3.
7. 8. 9. 2. 3.
Para remover uma linha ou coluna de uma matriz usa-se a matriz vazia ([]). Para remover
a coluna 3 de E,
-->E(:,3) = [] // remo¸ c~ao da coluna 3 da matriz E
E =
1. 2. 8. 3.
4. 5. 5. 3.
7. 8. 2. 3.
E posteriormente para remover a linha 1,
-->E(1,:) = [] // remo¸ c~ao da linha 1 da matriz E
E =
4. 5. 5. 3.
7. 8. 2. 3.
Quando o s´ımbolo (:) for usado sozinho para referenciar os dois ´ındices de uma matriz ent˜ao
´e gerado um vetor constitu´ıdo pelas colunas da matriz. Seja o vetor vet obtido das colunas
da matriz E acima,
-->vet = E(:) // vetor formado pelas colunas da matriz E
vet =
4.
7.
5.
8.
5.
2.
3.
3.
O s´ımbolo ($) ´e utilizado para indicar o ´ındice da ´ ultima linha ou coluna da matriz,
-->E(1,$-1) // elemento da primeira linha e penultima coluna da matriz E
ans =
5.
3.4. Matrizes 45
3.4.2 Fun¸c˜oes matriciais b´asicas
O SCILAB tem fun¸c˜oes que se aplicam aos vetores e `as matrizes. Algumas destas fun¸c˜oes
b´asicas s˜ao mostradas na Tabela 3.3.
Tabela 3.3: Exemplos de fun¸c˜oes b´asicas do SCILAB.
Fun¸c˜ao Descri¸c˜ao
size dimens˜ ao da matriz;
length n´ umero de elementos;
sum soma dos elementos;
prod produto dos elementos;
max maior elemento;
min menor elemento;
mean m´edia aritm´etica;
stdev desvio padr˜ao.
Fun¸c˜ao size
A fun¸c˜ao size ´e usada para fornecer o n´ umero de linhas e colunas de uma matriz. Ela pode
ser usada de duas formas:
-->t = size(E)
t =
2. 4.
onde a vari´avel t ´e um vetor linha com duas posi¸c˜oes, contendo o n´ umero de linhas e colunas
de E, respectivamente. A outra forma ´e
-->[lin,col] = size(E)
col =
4.
lin =
2.
onde as vari´aveis simples col e lin cont´em o n´ umero de colunas e linhas de E, respectiva-
mente.
Fun¸c˜ao length
Se a fun¸c˜ao length for usada em uma matriz ela fornecer´a o n´ umero de elementos da matriz,
-->e = length(E)
e =
8.
46 Cap´ıtulo 3. Estruturas de dados
Se for acrescentado o argumento ’r’ (row) ent˜ao a fun¸c˜ao produz um vetor linha obtido
dos elementos das colunas da matriz. Se o argumento for ’c’ (column) ent˜ao ser´a gerado
um vetor coluna a partir dos elementos das linhas da matriz. Se n˜ao for usado o argumento
extra ent˜ao a fun¸c˜ao produz um escalar utilizando todos elementos da matriz. Para a matriz
A,
-->A = [1 2 3;4 5 6;7 8 9] // define os elementos da matriz A
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
Fun¸c˜ao sum
// vetor linha com i-´ esimo elemento = soma dos elementos da coluna i da matriz A
-->sum(A,’r’)
ans =
12. 15. 18.
// vetor coluna com i-´ esimo elemento = soma dos elementos da linha i da matriz A
-->sum(A,’c’)
ans =
6.
15.
24.
-->sum(A) // escalar igual a soma dos elementos da matriz A
ans =
45.
Fun¸c˜ao prod
// vetor linha com i-´ esimo elemento = produto dos elementos da coluna i de A
-->prod(A,’r’)
ans =
28. 80. 162.
// vetor coluna com i-´ esimo elemento = produto dos elementos da linha i de A
-->prod(A,’c’)
ans =
6.
120.
504.
-->prod(A) // escalar igual ao produto dos elementos da matriz A
ans =
362880.
Fun¸c˜ao max
// vetor linha com i-´ esimo elemento = maior elemento da coluna i da matriz A
-->max(A,’r’)
3.4. Matrizes 47
ans =
7. 8. 9.
// vetor coluna com i-´ esimo elemento = maior elemento da linha i da matriz A
-->max(A,’c’)
ans =
3.
6.
9.
-->max(A) // escalar igual ao maior elemento da matriz A
ans =
9.
Fun¸c˜ao min
// vetor linha com i-´ esimo elemento = menor elemento da coluna i da matriz A
-->min(A,’r’)
ans =
1. 2. 3.
// vetor coluna com i-´ esimo elemento = menor elemento da linha i da matriz A
-->min(A,’c’)
ans =
1.
4.
7.
-->min(A) // escalar igual ao menor elemento da matriz A
ans =
1.
Fun¸c˜ao mean
// vetor linha com i-´ esimo elemento = m´edia dos elementos da coluna i da matriz A
-->mean(A,’r’)
ans =
4. 5. 6.
// vetor coluna com i-´ esimo elemento = m´edia dos elementos da linha i da matriz A
-->mean(A,’c’)
ans =
2.
5.
8.
-->mean(A) // escalar igual a m´edia dos elementos da matriz A
ans =
5.
Fun¸c˜ao stdev
//vetor linha com i-´ esimo elemento = desvio padr~ ao dos elementos da coluna i de A
-->stdev(A,’r’)
48 Cap´ıtulo 3. Estruturas de dados
ans =
3. 3. 3.
//vetor coluna com i-´ esimo elemento = desvio padr~ ao dos elementos da linha i de A
-->stdev(A,’c’)
ans =
1.
1.
1.
-->stdev(A) // escalar igual ao desvio padr~ ao dos elementos da matriz A
ans =
2.7386128
3.4.3 Fun¸c˜oes para manipula¸ c˜ao de matrizes
O SCILAB possui v´ arias fun¸c˜oes para manipula¸c˜ao de matrizes dentre as quais destacam-se
aquelas mostradas na Tabela 3.4.
Tabela 3.4: Algumas fun¸c˜oes para manipula¸c˜ao de matrizes.
Fun¸c˜ao Descri¸c˜ao
diag inclui ou obt´em a diagonal de uma matriz;
tril obt´em a parte triangular inferior de uma matriz;
triu obt´em a parte triangular superior de uma matriz;
matrix altera a forma de uma matriz;
sparse cria uma matriz esparsa.
full cria uma matriz densa.
gsort ordena os elementos de uma matriz.
Fun¸c˜ao diag
Inclui ou obt´em a diagonal de uma matriz, sendo sua sintaxe,
<sa´ıda> = diag(<argumento> [,<k>])
de modo que, se <argumento> for um vetor de dimens˜ ao n ent˜ao <sa´ıda> ser´a uma matriz
diagonal contendo os elementos de <argumento> na diagonal principal; o parˆ ametro inteiro
opcional <k> faz com que <sa´ıda> seja uma matriz de ordem n + abs(<k>) com os ele-
mentos de <argumento> ao longo de sua <k>-´esima diagonal: para <k> = 0 (default) ´e a
diagonal principal, <k> > 0 ´e a <k>-´esima diagonal superior (superdiagonal) e <k> < 0 ´e a
<k>-´esima diagonal inferior (subdiagonal). Por exemplo,
-->d = [1 2 3] // define um vetor com 3 elementos
d =
1. 2. 3.
-->D = diag(d) // cria matriz diagonal de ordem 3 com elementos do vetor d
D =
3.4. Matrizes 49
1. 0. 0.
0. 2. 0.
0. 0. 3.
-->D5 = diag(d,2) // cria matriz de ordem 5 com elementos de d na superdiagonal 2
D5 =
0. 0. 1. 0. 0.
0. 0. 0. 2. 0.
0. 0. 0. 0. 3.
0. 0. 0. 0. 0.
0. 0. 0. 0. 0.
Por outro lado, se o <argumento> for uma matriz ent˜ao diag cria um vetor coluna com os
elementos da <k>-´esima diagonal da matriz,
-->A = [1 2 3; 4 5 6; 7 8 9] // define a matriz A
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
-->d1 = diag(A,-1) // cria vetor com elementos da subdiagonal 1 de A
d1 =
4.
8.
-->d0 = diag(A) // cria vetor com elementos da diagonal principal de A
d0 =
1.
5.
9.
// cria matriz diagonal com elementos da superdiagonal 1 de A
-->D = diag(diag(A,1))
D =
2. 0.
0. 6.
Fun¸c˜ao tril
Obt´em a parte triangular inferior de uma matriz, cuja sintaxe ´e
<sa´ıda> = tril(<argumento> [,<k>])
sendo <argumento> uma matriz e o parˆ ametro inteiro opcional <k> faz com que <sa´ıda> seja
uma matriz de mesma dimens˜ ao de <argumento> de obtida a partir da <k>-´esima diagonal
de <argumento> e os elementos abaixo dela: para <k> = 0 (default) diagonal principal, <k>
> 0 <k>-´esima diagonal superior e <k> < 0 <k>-´esima diagonal inferior. Por exemplo,
-->M = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] // define matriz M
M =
50 Cap´ıtulo 3. Estruturas de dados
1. 2. 3. 4.
5. 6. 7. 8.
9. 10. 11. 12.
13. 14. 15. 16.
// cria matriz triangular inferior a partir da superdiagonal 1 de M
-->L1 = tril(M,1)
L1 =
1. 2. 0. 0.
5. 6. 7. 0.
9. 10. 11. 12.
13. 14. 15. 16.
// cria matriz triangular inferior a partir da subdiagonal 2 de M
-->L2 = tril(M,-2)
L2 =
0. 0. 0. 0.
0. 0. 0. 0.
9. 0. 0. 0.
13. 14. 0. 0.
Fun¸c˜ao triu
Obt´em a parte triangular superior de uma matriz, sendo sua sintaxe
<sa´ıda> = triu(<argumento> [,<k>])
sendo <argumento> uma matriz e o parˆ ametro inteiro opcional <k> faz com que <sa´ıda>
seja uma matriz de mesma dimens˜ ao de <argumento> obtida a partir da <k>-´esima diagonal
de <argumento> e os elementos acima dela: para <k> = 0 (default) diagonal principal, <k>
> 0 <k>-´esima diagonal superior e <k> < 0 <k>-´esima diagonal inferior. Para a matriz M
acima,
// cria matriz triangular superior a partir da subdiagonal 1 de M
-->U1 = triu(M,-1)
U1 =
1. 2. 3. 4.
5. 6. 7. 8.
0. 10. 11. 12.
0. 0. 15. 16.
// cria matriz triangular superior a partir da superdiagonal2 de M
-->U2 = triu(M,2)
U2 =
0. 0. 3. 4.
0. 0. 0. 8.
0. 0. 0. 0.
0. 0. 0. 0.
3.4. Matrizes 51
Fun¸c˜ao matrix
Altera a forma de uma matriz, cuja sintaxe ´e
<sa´ıda> = matrix(<matriz>, <linhas>, <colunas>) .
Esta fun¸c˜ao cria uma matriz <sa´ıda> com n´ umero de linhas dados por <linhas> e n´ umero
de colunas igual a <colunas>, a partir de <matriz> com (<linhas> × <colunas>) elementos
selecionados no sentido das colunas. Por exemplo, para a matriz B de dimens˜ ao 2 ×3,
-->B = [1 2 3;4 5 6] // define matriz B de dimensao 2 x 3
B =
1. 2. 3.
4. 5. 6.
-->c = matrix(B,1,6) // cria matriz (vetor linha) de dimensao 1 x 6
c =
1. 4. 2. 5. 3. 6.
-->D = matrix(B,3,2) // cria matriz de dimensao 3 x 2
D =
1. 5.
4. 3.
2. 6.
Fun¸c˜ao sparse
Constr´ oi uma matriz esparsa de dois modos distintos. No primeiro
<sa´ıda> = sparse(<matriz>)
cria uma matriz esparsa <sa´ıda> armazenando somente os elementos n˜ao nulos de <matriz>
na forma densa. Para a matriz E,
-->E = [2 0 -1; 0 5 6; 7 0 9] // define matriz com alguns elementos nulos
E =
2. 0. - 1.
0. 5. 6.
7. 0. 9.
-->S = sparse(E) // cria matriz esparsa a partir da matriz densa E
S =
( 3, 3) sparse matrix
( 1, 1) 2.
( 1, 3) - 1.
( 2, 2) 5.
( 2, 3) 6.
( 3, 1) 7.
( 3, 3) 9.
52 Cap´ıtulo 3. Estruturas de dados
Os tripletos acima indicam (linha, coluna, valor), ou seja, linha = 1, coluna = 1, valor = 2;
linha = 1, coluna = 3, valor = −1 e assim sucessivamente. No segundo modo,
<sa´ıda> = sparse(<linha coluna>, <valor>)
constr´ oi uma matriz esparsa <sa´ıda> a partir de uma matriz <linha coluna> com duas
colunas contendo os ´ındices dos elementos n˜ao nulos e do vetor <valor> com os valores
desses elementos. Por exemplo,
// define matriz de dimensao 7 x 2
-->lincol = [1 1; 1 3; 2 2; 2 4; 3 3; 4 1; 5 5]
lincol =
1. 1.
1. 3.
2. 2.
2. 4.
3. 3.
4. 1.
5. 5.
-->vet = [2 -1 5 4 3 8 -9] // define vetor com 7 elementos
vet =
2. - 1. 5. 4. 3. 8. - 9.
-->F = sparse(lincol,vet) // cria matriz esparsa a partir de lincol e vet
F =
( 5, 5) sparse matrix
( 1, 1) 2.
( 1, 3) - 1.
( 2, 2) 5.
( 2, 4) 4.
( 3, 3) 3.
( 4, 1) 8.
( 5, 5) - 9.
Fun¸c˜ao full
O comando <matriz> = full(<esparsa>) converte a matriz <esparsa> para a sua repre-
senta¸ c˜ao densa <matriz>. Para a matriz F acima,
-->FF = full(F) // cria matriz densa a partir de esparsa
FF =
2. 0. - 1. 0. 0.
0. 5. 0. 4. 0.
0. 0. 3. 0. 0.
8. 0. 0. 0. 0.
0. 0. 0. 0. - 9.
3.4. Matrizes 53
Fun¸c˜ao gsort
Uma fun¸c˜ao, particularmente, ´ util ´e a gsort que permite a ordena¸ c˜ao dos elementos de um
vetor ou de uma matriz. Sua sintaxe ´e
[<matriz sa´ ıda>[,<´ ındice>]] = gsort(<matriz entrada>[,<op¸c~ ao>][,<dire¸c~ ao>])
sendo <matriz entrada> um vetor ou uma matriz contendo elementos num´ericos ou literais;
[,<op¸c~ ao>] (opcional) ´e uma cadeia de caracteres que especifica qual o tipo de ordena¸ c˜ao a
ser realizada, ’r’: por linha, ’c’: por coluna, ’g’ (default): todos os elementos da matriz
s˜ao ordenados; [,dire¸ c~ ao] (opcional) indica a dire¸ c˜ao de ordena¸ c˜ao, ’i’: ordem crescente
e ’d’( default): ordem decrescente. Os parˆ ametros de sa´ıda s˜ao <matriz sa´ ıda>, com o
mesmo tipo e dimens˜ ao de <matriz entrada>, cont´em o resultado da ordena¸ c˜ao e o vetor
opcional <´ ındice> cont´em os ´ındices originais, tal que
<matriz sa´ ıda> = <matriz entrada>(<´ındice>).
Para o vetor v e a matriz M,
-->v = [3 9 5 6 2]
v =
3. 9. 5. 6. 2.
-->M = [2 5 1; 3 8 9; 7 6 4]
M =
2. 5. 1.
3. 8. 9.
7. 6. 4.
tem-se os resultados,
-->gsort(v,’g’,’i’) // ordena os elementos do vetor v em ordem crescente
ans =
2. 3. 5. 6. 9.
// ordena os elementos do vetor v em ordem decrescente
-->[w,ind] = gsort(v,’g’,’d’)
ind =
2. 4. 3. 1. 5.
w =
9. 6. 5. 3. 2.
Para a ordena¸ c˜ao decrescente requerida, w = v(ind), isto ´e, w(1) = v(ind(1)), w(2) =
v(ind(2)), . . . , w(5) = v(ind(5)).
-->B = gsort(M,’r’,’i’) // ordena as linhas da matriz M em ordem crescente
B =
2. 5. 1.
3. 6. 4.
7. 8. 9.
54 Cap´ıtulo 3. Estruturas de dados
-->D = gsort(M,’c’,’d’) // ordena as colunas da matriz M em ordem decrescente
D =
5. 2. 1.
9. 8. 3.
7. 6. 4.
3.4.4 Matrizes elementares
O SCILAB fornece v´ arias matrizes elementares de grande utilidade, como as mostradas na
Tabela 3.5. O n´ umero de parˆ ametros providos fornecem as dimens˜ oes da matriz. Se o
parˆ ametro for uma matriz ent˜ao ser´a criada uma matriz de igual dimens˜ ao.
Tabela 3.5: Algumas matrizes elementares do SCILAB.
Fun¸c˜ao Descri¸c˜ao da matriz
zeros nula;
ones elementos iguais a 1;
eye identidade ou parte dela;
grand elementos aleat´ orios com dada distribui¸ c˜ao.
Seja a matriz,
-->P = [1 2 3; 4 5 6] // define uma matriz de dimensao 2 x 3
P =
1. 2. 3.
4. 5. 6.
Fun¸c˜ao zeros
O comando
<matriz> = zeros(<linhas>, <colunas>)
gera uma matriz de dimens˜ ao (<linhas> × <colunas>), com elementos nulos e <matriz> =
zeros(<argumento>) cria uma matriz com elementos nulos de mesma dimens˜ ao da matriz
<argumento>,
-->z = zeros(1,4) // cria matriz nula de dimensao 1 x 4
z =
0. 0. 0. 0.
Fun¸c˜ao ones
O comando
<matriz> = ones(<linhas>, <colunas>)
cria uma matriz de dimens˜ ao (<linhas> × <colunas>), com elementos iguais a 1 e <matriz>
= ones(<argumento>) gera uma matriz com elementos iguais a 1 com a mesma dimens˜ ao
da matriz <argumento>,
3.4. Matrizes 55
-->U = ones(P) // cria matriz de 1’s com mesma dimensao da matriz P
U =
1. 1. 1.
1. 1. 1.
Fun¸c˜ao eye
O comando
<matriz> = eye(<linhas>, <colunas>)
gera uma matriz identidade (com 1 na diagonal principal e 0 fora da diagonal) de dimens˜ ao
(<linhas> × <colunas>). Por sua vez, <matriz> = eye(<argumento>) cria uma matriz
identidade de mesma dimens˜ ao da matriz <argumento>,
-->I = eye(P’*P) // cria matriz identidade com a mesma dimensao de P’P
I =
1. 0. 0.
0. 1. 0.
0. 0. 1.
Fun¸c˜ao grand
O comando
<alea> = grand(<linhas>, <colunas>, <tipo dist> [,<param 1>,...,<param n>])
gera a matriz <alea> com elementos aleat´ orios de dimens˜ ao (<linhas> × <colunas>) com
o tipo de distribui¸ c˜ao dado pela cadeia de caracteres <tipo dist>, sendo <param i> um
conjunto de parˆ ametros opcionais necess´arios para definir uma distribui¸ c˜ao espec´ıfica. Por
exemplo,
Distribui¸c˜ao uniforme no intervalo [0,1)
// cria matriz de dimensao 3 x 5 com elementos aleat´orios com
// distribui¸ c~ao uniforme no intervalo [0,1)
-->U = grand(3,5,’def’)
U =
0.8147237 0.8350086 0.9133759 0.3081671 0.2784982
0.135477 0.1269868 0.2210340 0.0975404 0.1883820
0.9057919 0.9688678 0.6323592 0.5472206 0.5468815
Distribui¸c˜ao uniforme no intervalo [Inf,Sup)
// cria matriz de dimensao 3 x 4 com elementos aleat´orios com
// distribui¸ c~ao uniforme no intervalo [10,12)
-->R = grand(3,4,’unf’,10,12)
R =
11.985763 11.929777 11.451678 11.914334
11.915014 11.93539 11.941186 10.219724
11.992923 10.315226 11.962219 10.970751
56 Cap´ıtulo 3. Estruturas de dados
Distribui¸c˜ao normal com m´edia Med e desvio padr˜ao Despad
// cria matriz de dimensao 2 x 4 com elementos aleat´orios com
// distribui¸ c~ao normal com m´edia = 1,5 e desvio padr~ ao = 2,6
-->N = grand(2,4,’nor’,1.5,2.6)
N =
2.761686 0.2303274 - 3.5420607 - 1.4501598
2.7455511 - 1.1118334 1.0909685 1.94921
Distribui¸c˜ao normal multivariada com m´edia Med e covariˆancia Cov
sendo Med uma matriz (m x 1) e Cov uma matriz (m x m) sim´etrica positiva definida.
-->M = grand(5,’mn’,[0 0]’,[1 0.5;0.5 1])
M =
1.0745727 0.9669574 - 0.7460049 0.8510105 - 0.2161951
2.2602797 0.7828132 - 0.2634706 1.1711612 0.4133844
Distribui¸c˜ao de Poisson com m´edia Med
// cria matriz de dimensao 3 x 5 com elementos aleat´orios com
// distribui¸ c~ao de Poisson com m´edia = 3,5
-->P = grand(3,5,’poi’,3.5)
P =
5. 3. 2. 4. 2.
5. 3. 2. 5. 2.
3. 4. 2. 1. 6.
Gera n permuta¸c˜oes aleat´orias de um vetor coluna de tamanho m
// cria matriz de dimens~ao (length(vet) x 8) com 8 permuta¸ c~oes no vetor vet de
// tamanho 5
-->vet = [1 2 3 4 5]’ // define vetor coluna de tamanho 5
vet =
1.
2.
3.
4.
5.
-->V = grand(8,’prm’,vet)
V =
3. 1. 2. 4. 5. 3. 5. 3.
2. 4. 4. 2. 2. 5. 2. 2.
1. 3. 5. 5. 1. 1. 4. 4.
5. 5. 1. 3. 3. 2. 1. 5.
4. 2. 3. 1. 4. 4. 3. 1.
3.5. Hipermatrizes 57
A fun¸c˜ao grand produz n´ umeros pseudo-aleat´ orios e a seq¨ uˆencia gerada de qualquer distri-
bui¸c˜ao ´e determinada pelo estado do gerador. Quando o SCILAB for ativado, ´e atribu´ıdo
um valor inicial ao estado, o qual ´e alterado `a cada chamada da fun¸c˜ao grand. Para atri-
buir um valor ao estado do gerador quando esta fun¸c˜ao j´a tiver sido executada usa-se o
comando grand(’setsd’,<semente>), sendo <semente> o valor inicial desejado do estado.
Por exemplo,
-->grand(’setsd’,1) // atribui 1 ao estado
-->a = grand(1,5,’def’) // gera uma sequ^ encia aleat´oria uniforme
a =
0.417022 0.9971848 0.7203245 0.9325574 0.0001144
-->b = grand(1,5,’def’) // gera outra sequ^ encia aleat´oria uniforme
b =
0.1281244 0.3023326 0.9990405 0.1467559 0.2360890
-->grand(’setsd’,1) // atribui 1 novamente ao estado
-->c = grand(1,5,’def’) // gera outra sequ^ encia aleat´oria uniforme
c =
0.417022 0.9971848 0.7203245 0.9325574 0.0001144
-->c - a // mostra que as sequ^ encias c e a s~ao id^ enticas
ans =
0. 0. 0. 0. 0.
A fun¸c˜ao grand permite a gera¸c˜ao de vinte diferentes tipos de distribui¸ c˜ao de n´ umeros
pseudo-aleat´ orios, utilizando seis diferentes geradores. Para maiores informa¸c˜oes use o co-
mando de aux´ılio help grand.
3.5 Hipermatrizes
Hipermatrizes s˜ao vari´aveis homogˆeneas com mais de duas dimens˜ oes. Elas podem ser
criadas pela fun¸c˜ao hypermat(<dimens~ ao>, <valores>), onde o vetor <dimens~ ao> define
as dimens˜ oes da hipermatriz e a matriz <valores> define os elementos. Por exemplo, para
criar a hipermatriz H com dimens˜ oes 2 × 3 × 4, ou seja, composta por 4 submatrizes de
dimens˜ oes 2 ×3, faz-se
-->mat1 = [1.1 1.2 1.3; 1.4 1.5 1.6] // define submatriz 1
mat1 =
1.1 1.2 1.3
1.4 1.5 1.6
-->mat2 = [2.1 2.2 2.3; 2.4 2.5 2.6] // define submatriz 2
mat2 =
2.1 2.2 2.3
2.4 2.5 2.6
-->mat3 = [3.1 3.2 3.3; 3.4 3.5 3.6] // define submatriz 3
mat3 =
58 Cap´ıtulo 3. Estruturas de dados
3.1 3.2 3.3
3.4 3.5 3.6
-->mat4 = [4.1 4.2 4.3; 4.4 4.5 4.6] // define submatriz 4
mat4 =
4.1 4.2 4.3
4.4 4.5 4.6
// cria hipermatriz H de dimensao 2 x 3 x 4 a partir de 4 submatrizes
-->H = hypermat([2 3 4],[mat1 mat2 mat3 mat4])
H =
(:,:,1)
1.1 1.2 1.3
1.4 1.5 1.6
(:,:,2)
2.1 2.2 2.3
2.4 2.5 2.6
(:,:,3)
3.1 3.2 3.3
3.4 3.5 3.6
(:,:,4)
4.1 4.2 4.3
4.4 4.5 4.6
As hipermatrizes podem ser manipuladas como as matrizes bidimensionais. Assim, para
alterar para 12.3 os elementos da posi¸c˜ao (2,1) das submatrizes 1 e 4 da hipermatriz H
acima,
-->H(2,1,[1 4]) = 12.3 / atribui o valor 12,3 aos elementos H(2,1,1) e H(2,1,4)
H =
(:,:,1)
1.1 1.2 1.3
12.3 1.5 1.6
(:,:,2)
2.1 2.2 2.3
2.4 2.5 2.6
(:,:,3)
3.1 3.2 3.3
3.4 3.5 3.6
(:,:,4)
4.1 4.2 4.3
12.3 4.5 4.6
Outros comandos,
-->size(H) // dimensoes da hipermatriz
ans =
2. 3. 4.
3.6. Polinˆ omios 59
// vetor linha contendo a soma dos elementos das colunas da submatriz 3
-->sum(H(:,:,3),’r’)
ans =
6.5 6.7 6.9
// vetor coluna contendo os menores elementos das linhas da submatriz 2
-->min(H(:,:,2),’c’)
ans =
2.1
2.4
3.6 Polinˆ omios
O SCILAB fornece v´ arias fun¸c˜oes que permitem que as opera¸c˜oes envolvendo polinˆ omios
sejam feitas de um modo bem simples.
3.6.1 Constru¸c˜ao
Os polinˆ omios podem ser constru´ıdos ou a partir de seus coeficientes ou de seus zeros.
Constru¸ c˜ao a partir dos coeficientes
Um polinˆ omio na forma P(x) = c
1
+c
2
x+c
3
x
2
+. . . +c
n−1
x
n−2
+c
n
x
n−1
pode ser constru´ıdo
a partir dos coeficientes c
i
, usando a fun¸c˜ao poly(<par^ametros>, <vari´ avel>, <modo>),
onde o vetor <par^ametros> cont´em os coeficientes c
i
, <vari´avel> ´e uma cadeia de caracteres
que determina a vari´avel do polinˆ omio e a outra cadeia de caracteres <modo> especifica como
o polinˆ omio ser´a constru´ıdo. Se <modo> = ’coeff’ ent˜ao ele ser´a constru´ıdo a partir de
seus coeficientes. Por exemplo, para construir o polinˆ omio P(x) = 24+14x−13x
2
−2x
3
+x
4
basta,
-->P = poly([24 14 -13 -2 1],’x’,’coeff’) // P(x) a partir dos coeficientes
P =
2 3 4
24 + 14x - 13x - 2x + x
Constru¸ c˜ao a partir das ra´ızes
Utilizando a mesma fun¸c˜ao poly, mas com <par^ametros> contendo os zeros do polinˆ omio e
sendo <modo> = ’roots’ (ou n˜ao sendo especificado) ent˜ao ele ser´a constru´ıdo a partir de
seus zeros. Para construir um polinˆ omio com zeros ξ
1
= −1, ξ
2
= −3, ξ
3
= 2 e ξ
4
= 4, faz-se
-->R = poly([-1 -3 2 4],’s’,’roots’) // R(s) a partir dos zeros
R =
2 3 4
24 + 14s - 13s - 2s + s
60 Cap´ıtulo 3. Estruturas de dados
3.6.2 Avalia¸c˜ao
Um polinˆ omio ´e avaliado por meio da fun¸c˜ao horner(<polin^omio>, <abscissas>), onde
<polin^ omio> cont´em o polinˆ omio e <abscissas> cont´em os pontos nos quais ele deve ser
avaliado. Por exemplo, para avaliar T(x) = 1 − 3x + 7x
2
+ 5x
3
− 2x
4
+ 3x
5
nos pontos
x = −1, 0, 1, 2 e 3,
-->T = poly([1 -3 7 5 -2 3],’x’,’coeff’) // T(x) a partir dos coeficientes
T =
2 3 4 5
1 - 3x + 7x + 5x - 2x + 3x
-->y = horner(T,(-1:3)) // avalia T(x) em x = -1, 0, 1, 2 e 3
y =
1. 1. 11. 127. 757.
3.6.3 Adi¸c˜ao e subtra¸c˜ao
Para somar e subtrair polinˆ omios, mesmo de graus diferentes, basta usar os operadores de
adi¸c˜ao (+) e subtra¸ c˜ao (-). Assim, para somar os polinˆ omios a(x) = 1 − 4x
2
+ 5x
3
+ 8x
4
e
b(x) = −4 −x + 5x
2
+ 2x
3
,
-->a = poly([1 0 -4 5 8],’x’,’coeff’) // constroi a(x)
a =
2 3 4
1 - 4x + 5x + 8x
-->b = poly([-4 -1 5 2],’x’,’coeff’) // constroi b(x)
b =
2 3
- 4 - x + 5x + 2x
-->c = a + b // soma polinomios
c =
2 3 4
- 3 - x + x + 7x + 8x
resultando c(x) = −3 −x + x
2
+ 7x
3
+ 8x
4
; e para subtrair
-->d = a - b // subtrai polinomios
d =
2 3 4
5 + x - 9x + 3x + 8x
3.6.4 Multiplica¸c˜ao
A multiplica¸ c˜ao de dois polinˆ omios ´e feita utilizando o operador de multiplica¸ c˜ao (*). Sejam
os polinˆ omios e(v) = 4 −5v + 3v
2
e f(v) = −1 + 2v, a multiplica¸ c˜ao resulta em,
-->e = poly([4 -5 3],’v’,’coeff’) // constroi e(v)
3.6. Polinˆ omios 61
e =
2
4 - 5v + 3v
-->f = poly([-1 2],’v’,’coeff’) // constroi f(v)
f =
- 1 + 2v
-->g = e * f // multiplica e(v) por f(v)
g =
2 3
- 4 + 13v - 13v + 6v
resultando no polinˆ omio g(v) = −4 + 13v −13v
2
+ 6v
3
.
3.6.5 Divis˜ao
O comando [<resto>, <quociente>] = pdiv(<polin^ omio 1>, <polin^ omio 2>) faz a di-
vis˜ ao entre o <polin^ omio 1> e o <polin^ omio 2>, retornando o polinˆ omio quociente em
<quociente> e o polinˆ omio do resto da divis˜ ao em <resto>, ou seja, <polin^ omio 1> =
<polin^ omio 2> * <quociente> + <resto>. Por exemplo, a divis˜ ao de h(x) = 6 − 5x +
4x
2
−3x
3
+ 2x
4
por i(x) = 1 −3x + x
2
´e efetuada por,
-->h = poly([6 -5 4 -3 2],’x’,’coeff’) // constroi h(x)
h =
2 3 4
6 - 5x + 4x - 3x + 2x
-->i = poly([1 -3 1],’x’,’coeff’) // constroi i(x)
i =
2
1 - 3x + x
-->[r,q] = pdiv(h,i) // divide h(x) por i(x)
q =
2
11 + 3x + 2x
r =
- 5 + 25x
resultado no quociente q(x) = 11 + 3x + 2x
2
com resto r(x) = −5 + 25x. No caso do uso
do operador de divis˜ ao (/) em vez da fun¸c˜ao pdiv, ´e criado um polinˆ omio racional. Para os
polinˆ omios h(x) e i(x) definidos acima,
-->j = h / i // polinomio racional obtido da divisao de h(x) por i(x)
j =
2 3 4
6 - 5x + 4x - 3x + 2x
---------------------
2
1 - 3x + x
62 Cap´ıtulo 3. Estruturas de dados
3.6.6 Deriva¸c˜ao
A fun¸c˜ao derivat efetua a deriva¸c˜ao polinomial. Deste modo, para obter a primeira e
segunda derivada de P(x) = −5 + 14x −12x
2
+ 2x
3
+ x
4
,
-->p = poly([-5 14 -12 2 1],’x’,’coeff’) // constroi p(x)
p =
2 3 4
- 5 + 14x - 12x + 2x + x
-->p1 = derivat(p) // derivada primeira de p(x)
p1 =
2 3
14 - 24x + 6x + 4x
-->p2 = derivat(p1) // derivada segunda de p(x)
p2 =
2
- 24 + 12x + 12x
resultando P

(x) = 14 −24x + 6x
2
+ 4x
3
e P
′′
(x) = −24 + 12x + 12x
2
.
3.6.7 C´alculo de ra´ızes
A fun¸c˜ao roots(<polin^ omio>) calcula os zeros de <polin^ omio>. Por exemplo, para calcular
as quatro ra´ızes de T(x) = 24 −14x −13x
2
+ 2x
3
+ x
4
= 0,
-->T = poly([24 -14 -13 2 1],’x’,’coeff’) // constroi T(x)
T =
2 3 4
24 - 14x - 13x + 2x + x
-->raizes = roots(T) // calcula as raizes de T(x) = 0
raizes =
1.
- 2.
3.
- 4.
Para calcular as ra´ızes de um polinˆ omio dado em termos de seus coeficientes, sem construir
previamente o polinˆ omio, os coeficientes devem ser fornecidos do maior para o menor grau.
Por exemplo, para calcular as quatro ra´ızes de T(x) = 24 −14x −13x
2
+ 2x
3
+ x
4
= 0,
-->a = roots([1 2 -13 -14 24]) // calcula raizes a partir dos coeficientes
a =
1.
- 2.
3.
- 4.
3.7. Vari´aveis l´ogicas 63
Quando o polinˆ omio for real e possuir grau menor ou igual a 100 a fun¸c˜ao roots calcula
os zeros por um algoritmo r´apido, caso contr´ ario, os zeros s˜ao calculados por meio dos
autovalores da matriz companheira. Se for acrescentado o segundo argumento da fun¸c˜ao
roots, dado por ’e’, ent˜ao os zeros ser˜ao calculados utilizando os autovalores, independente
do grau do polinˆ omio.
Pode ser mostrado que as ra´ızes de P(x) = c
1
+ c
2
x + c
3
x
2
+ . . . + c
n−1
x
n−2
+ c
n
x
n−1
= 0
s˜ao os autovalores da matriz companheira,
C =
_
_
_
_
_
_
_
−c
n−1
/c
n
−c
n−2
/c
n
. . . −c
2
/c
n
−c
1
/c
n
1 0 . . . 0 0
0 1 . . . 0 0
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
0 0 . . . 1 0
_
_
_
_
_
_
_
.
Deste modo, r = roots(T,’e’) ´e equivalente `a
-->A = companion(T) // matriz companheira do polinomio T(x)
A =
- 2. 13. 14. - 24.
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
-->r = spec(A) // autovalores da matriz companheira A
r =
- 4.
3.
- 2.
1.
3.7 Vari´aveis l´ogicas
Conforme visto, uma constante l´ ogica tem os valores %t (ou %T) para verdadeiro e %f (ou
%F) para falso, os quais podem ser atribu´ıdos `a uma vari´avel l´ ogica, com estrutura de vetor
ou matriz. Por exemplo,
-->a = %t // variavel logica simples
a =
T
-->b = [%f %F %t %T] // vetor logico
b =
F F T T
-->C = [%T %f %t;%f %T %F] // matriz logica
C =
T F T
F T F
64 Cap´ıtulo 3. Estruturas de dados
As vari´aveis l´ ogicas podem ser utilizadas para acessar os elementos de uma matriz (ou vetor).
Quando o valor for verdadeiro o ´ındice ´e acessado e no caso de ser falso o ´ındice n˜ao ser´a
acessado. Por exemplo,
-->v = [11 12 13 14 15 16 17 18 ] // define o vetor v com 8 elementos
v =
11. 12. 13. 14. 15. 16. 17. 18.
-->ind = [%t %t %f %t %f] // define vetor logico ind com 5 elementos
ind =
T T F T F
-->v(ind) // elementos 1, 2 e 4 do vetor
ans =
11. 12. 14.
O n´ umero de elementos do vetor l´ ogico deve ser menor ou igual ao n´ umero de elementos do
vetor que ele referencia. O uso de vari´aveis l´ ogicas ´e fundamental nas express˜ oes l´ ogicas que
ser˜ao vistas na Se¸ c˜ao 4.2 Express˜oes l´ogicas.
3.8 Vari´aveis literais
Uma vari´avel literal cont´em uma constante literal formada por uma cadeia de caracteres
delimitada por aspas (’) ou ap´ostrofos ("). Por exemplo,
-->a = ’SCILAB’, b = "cadeia de caracteres"
a =
SCILAB
b =
cadeia de caracteres
Os caracteres podem ser concatenados usando o operador (+) ou a nota¸c˜ao vetorial,
-->d = a+’ manipula ’+b
d =
SCILAB manipula cadeia de caracteres
-->e = [a ’utiliza’ b]
e =
!SCILAB utiliza cadeia de caracteres !
A utiliza¸c˜ao de vari´aveis literais ser´a abordada com mais detalhes na Se¸ c˜ao 4.3 Express˜ oes
literais.
3.9 Listas
Uma lista ´e um conjunto de dados n˜ao necessariamente do mesmo tipo, podendo conter
matrizes ou mesmo outras listas. As listas s˜ao ´ uteis para definirem dados estruturados.
Uma lista ´e constru´ıda a partir do comando list,
3.9. Listas 65
-->Rol = list(’tipo’,%f,[1 2 3; 4 5 6]) // gera a lista Rol com 3 objetos
Rol =
Rol(1)
tipo
Rol(2)
F
Rol(3)
1. 2. 3.
4. 5. 6.
-->Rol(2) // objeto 2 de Rol
ans =
F
-->Rol(3)(2,1) // elemento (2,1) do objeto 3 de Rol
ans =
4.
Uma lista pode ser um objeto de outra lista,
-->Rol(1) = list(’tamanho’,[10 20 30]) // objeto 1 de Rol torna-se uma lista
Rol =
Rol(1)
Rol(1)(1)
tamanho
Rol(1)(2)
10. 20. 30.
Rol(2)
F
Rol(3)
1. 2. 3.
4. 5. 6.
Para obter e atribuir valor a objeto da lista, faz-se
-->Rol(1)(2)(1,3) // elemento (1,3) do objeto 2 de Rol(1)
ans =
30.
-->Rol(3)(2,1) = 55.8 // atribuindo novo valor ao elemento (2,1) de Rol(3)
Rol =
Rol(1)
Rol(1)(1)
tamanho
Rol(1)(2)
10. 20. 30.
Rol(2)
F
Rol(3)
1. 2. 3.
55.8 5. 6.
66 Cap´ıtulo 3. Estruturas de dados
3.10 Exerc´ıcios
Se¸c˜ao 3.1 Constantes
Observar atentamente e anotar o resultado dos comandos do SCILAB. Apesar de os coman-
dos estarem separados por v´ırgula, entrar com um de cada vez.
3.1 Atribuir o valor −1,23×10
3
`a vari´avel a e 4,17×10
−2
`a vari´avel b.
3.2
3.3 Criar um vetor l´ ogico com cinco elementos sendo o primeiro, segundo e quarto com o
valor verdadeiro e os outros com o valor falso.
3.4 Criar uma matriz de dimens˜ ao 2 ×3 com elementos l´ ogicos, com a terceira coluna com
elementos com o valor falso e as demais com o valor verdadeiro.
3.5
Se¸c˜ao 3.2 Vari´aveis
3.6 Conferir os nomes permitidos de vari´aveis arco-seno=0, limite:sup=3, Area=3 e
area=1.
3.7 Atribuir a cadeia de caracteres ’abc’ `a vari´avel literal letras e ’01234’ ` a vari´avel
literal numeros.
3.8
3.9
3.10
Se¸c˜ao 3.3 Vetores
Construir os vetores e analisar as opera¸c˜oes:
3.11 al = [1 3.5 -4.2 7.5], ac = (2:3:11)’.
3.12 b = 10:5:30, c = 5:-2:-6, d = 5:10.
3.13 e = linspace(0,10,5), e(3), e(2:4).
3.10. Exerc´ıcios 67
3.14 f = linspace(10,20,6), f(3:-1:1), f([6 5 1 3]).
3.15 g = linspace(2,11,4) + linspace(0.2,1.1,4)*%i , h = g’, i = g.’
Se¸c˜ao 3.4 Matrizes
Construir as matrizes e verificar o resultado das opera¸c˜oes e fun¸c˜oes
3.16 A = [6 -1 4; 0 2 -3; 5 7 8], A(2,1) = 1,
sum(A,’r’), sum(A,’c’), prod(A,’r’), prod(A,’c’).
3.17 B = A(2:3,[2 3 1]), min(B,’r’), max(B,’c’).
3.18 C = [A B’], C(:,[2 4])=[], C(2,:) = [], size(C).
3.19 zeros(3,5), ones(2,4), eye(5,3).
3.20 D = grand(3,3,’def’), diag(diag(D)), triu(D), tril(D).
Se¸c˜ao 3.5 Hipermatrizes
3.21
3.22
3.23
3.24
3.25
Se¸c˜ao 3.6 Polinˆomios
3.26
3.27
3.28
3.29
3.30
68 Cap´ıtulo 3. Estruturas de dados
Se¸c˜ao 3.7 Vari´aveis l´ ogicas
3.31
3.32
3.33
3.34
3.35
Se¸c˜ao 3.8 Vari´aveis literais
3.36
3.37
3.38
3.39
3.40
Se¸c˜ao 3.9 Listas
3.41
3.42
3.43
3.44
3.45
Cap´ıtulo 4
Express˜oes
Uma express˜ao ´e uma combina¸c˜ao de constantes, vari´aveis e operadores, cuja avalia¸ c˜ao
resulta em um valor ´ unico. Neste cap´ıtulo ser˜ao mostrados os trˆes tipos de express˜ oes do
SCILAB: aritm´eticas, l´ ogicas e literais.
4.1 Express˜oes aritm´eticas
´
E dispon´ıvel no SCILAB as opera¸c˜oes aritm´eticas b´asicas mostradas na Tabela 4.1.
Tabela 4.1: Opera¸c˜oes aritm´eticas b´asicas do SCILAB.
Opera¸c˜ao Express˜ao Operador Exemplo
adi¸c˜ao a + b + 1+2
subtra¸ c˜ao a −b - 5.1-4.7
multiplica¸ c˜ao a ×b * 6*9.98
divis˜ ao a ÷b / ou \ 6/7 5\3
potencia¸c˜ao a
b
^ 2^10
4.1.1 Ordem de precedˆencia
O SCILAB obedece a ordem de precedˆencia das opera¸c˜oes aritm´eticas apresentadas na
Se¸ c˜ao 1.5 Express˜oes. Para o Exemplo 1.5, na p´agina 6,
-->a = 1; b = 2; c = 3; d = 4;
-->t = a + b / c + d
t =
5.6666667
69
70 Cap´ıtulo 4. Express˜oes
-->x = (a + b) / (c + d)
x =
0.4285714
-->y = a + b / (c + (d + 1) / 2)
y =
1.3636364
-->w = ((a+b*c)/(a+1)-(b+4)/(c+5))/(-c^2+(-b)^(d+1))
w =
- 0.0670732
-->z = (a^b+3-c^(d+3))/(a*b/c+sqrt(1+d/(a+b)))
z =
- 994.89931
4.1.2 Express˜ oes vetoriais
As opera¸c˜oes b´asicas entre vetores s´o s˜ao definidas quando estes tiverem o mesmo tamanho
e orienta¸ c˜ao (linha ou coluna). Estas opera¸c˜oes b´asicas s˜ao apresentadas na Tabela 4.2.
As opera¸c˜oes de multiplica¸ c˜ao, divis˜ ao e potencia¸c˜ao envolvendo vetores quando antecedi-
das pelo caracter (.) significa que estas opera¸c˜oes s˜ao efetuadas entre os correspondentes
elementos dos vetores.
Tabela 4.2: Opera¸c˜oes vetoriais b´asicas.
Sejam a = [ a
1
a
2
...a
n
], b = [ b
1
b
2
...b
n
] e c um escalar
Opera¸c˜ao Express˜ao Resultado
adi¸c˜ao escalar a+c [ a
1
+c a
2
+c ... a
n
+c ]
adi¸c˜ao vetorial a+b [ a
1
+b
1
a
2
+b
2
... a
n
+b
n
]
multiplica¸ c˜ao escalar a*c [ a
1
∗c a
2
∗c ... a
n
∗c ]
multiplica¸ c˜ao vetorial a.*b [ a
1
∗b
1
a
2
∗b
2
... a
n
∗b
n
]
divis˜ ao `a direita a./b [ a
1
/b
1
a
2
/b
2
... a
n
/b
n
]
divis˜ ao `a esquerda a.\b [ b
1
/a
1
b
2
/a
2
... b
n
/a
n
]
potencia¸c˜ao a.^c [ a
1
^c a
2
^c ... a
n
^c ]
c.^a [ c^a
1
c^a
2
... c^a
n
]
a.^b [ a
1
^b
1
a
2
^b
2
... a
n
^b
n
]
Considere as vari´aveis,
-->a = 1:5, b = 10:10:50, c = 2
a =
1. 2. 3. 4. 5.
b =
10. 20. 30. 40. 50.
4.1. Express˜ oes aritm´eticas 71
c =
2.
Adi¸c˜ao escalar,
-->a + c
ans =
3. 4. 5. 6. 7.
Adi¸c˜ao vetorial,
-->a + b
ans =
11. 22. 33. 44. 55.
Multiplica¸c˜ao escalar,
-->a * c
ans =
2. 4. 6. 8. 10.
Multiplica¸c˜ao vetorial entre elementos correspondentes,
-->a .* b
ans =
10. 40. 90. 160. 250.
Divis˜ao vetorial `a direita entre elementos correspondentes,
-->a ./ b
ans =
0.1 0.1 0.1 0.1 0.1
Divis˜ao vetorial `a esquerda entre elementos correspondentes,
-->a .\ b
ans =
10. 10. 10. 10. 10.
Potencia¸c˜ao,
-->a .^ c
ans =
1. 4. 9. 16. 25.
-->c .^ a
ans =
2. 4. 8. 16. 32.
-->a .^ b
ans =
1. 1048576. 2.059D+14 1.209D+24 8.882D+34
72 Cap´ıtulo 4. Express˜oes
4.1.3 Express˜ oes matriciais
De modo similar `as opera¸c˜oes vetorias, existem as opera¸c˜oes matriciais b´asicas, as quais est˜ao
compiladas na Tabela 4.3. O operador (\) envolvendo matrizes e vetores est´a relacionado
com solu¸c˜ao de sistemas lineares, conforme ser´a visto na Se¸ c˜ao 8.2.3 Solu¸ c˜ao de sistemas.
Tabela 4.3: Opera¸c˜oes matriciais b´asicas.
Sejam c um escalar e
A = [ a
11
a
12
... a
1p
; a
21
a
22
... a
2p
; ... ; a
m1
a
m2
... a
mp
]
B = [ b
11
b
12
... b
1n
; b
21
b
22
... b
2n
; ... ; b
p1
b
p2
... b
pn
]
Opera¸c˜ao Express˜ao Resultado
adi¸c˜ao escalar A+c a
ij
+ c
adi¸c˜ao matricial A+B a
ij
+ b
ij
multiplica¸ c˜ao escalar A*c a
ij
∗ c
multiplica¸ c˜ao matricial A*B AB
multiplica¸ c˜ao entre elementos correspondentes A.*B a
ij
∗ b
ij
divis˜ ao `a direita entre elementos correspondentes A./B a
ij
/b
ij
divis˜ ao `a esquerda entre elementos correspondentes A.\B b
ij
/a
ij
potencia¸c˜ao A^c A
c
A.^c a
c
ij
c.^A c
a
ij
A.^B a
b
ij
ij
Sejam as matrizes A e B de ordem 3 e o escalar c,
-->A = [1 2 3; 4 5 6; 7 8 9], B = [10 20 30; 40 50 60; 70 80 90], c = 3
A =
1. 2. 3.
4. 5. 6.
7. 8. 9.
B =
10. 20. 30.
40. 50. 60.
70. 80. 90.
c =
3.
Adi¸c˜ao escalar,
-->A + c
4.1. Express˜ oes aritm´eticas 73
ans =
4. 5. 6.
7. 8. 9.
10. 11. 12.
Adi¸c˜ao matricial,
-->A + B
ans =
11. 22. 33.
44. 55. 66.
77. 88. 99.
Multiplica¸c˜ao escalar,
-->A * c
ans =
3. 6. 9.
12. 15. 18.
21. 24. 27.
A diferen¸ca no resultado das express˜oes quando os operadores cont´em o caracter (.) deve
ser observada. Na multiplica¸ c˜ao matricial,
-->A * B
ans =
300. 360. 420.
660. 810. 960.
1020. 1260. 1500.
Multiplica¸c˜ao entre elementos correspondentes,
-->A .* B
ans =
10. 40. 90.
160. 250. 360.
490. 640. 810.
Divis˜ao ` a direita entre elementos correspondentes,
-->A ./ B
ans =
0.1 0.1 0.1
0.1 0.1 0.1
0.1 0.1 0.1
Divis˜ao ` a esquerda entre elementos correspondentes,
74 Cap´ıtulo 4. Express˜oes
-->A .\ B
ans =
10. 10. 10.
10. 10. 10.
10. 10. 10.
E nos diferentes tipos de potencia¸c˜ao,
-->A .^ c // elemento da matriz elevado a uma constante
ans =
1. 8. 27.
64. 125. 216.
343. 512. 729.
-->A ^ c // matriz elevada a uma constante
ans =
468. 576. 684.
1062. 1305. 1548.
1656. 2034. 2412.
-->c .^ A // constante elevada a elemento da matriz
ans =
3. 9. 27.
81. 243. 729.
2187. 6561. 19683.
-->A .^ B // elemento de matriz elevado a elemento de matriz
ans =
1. 1048576. 2.059D+14
1.209D+24 8.882D+34 4.887D+46
1.435D+59 1.767D+72 7.618D+85
´
E importante observar que no SCILAB as opera¸c˜oes c.^A e c^A s˜ao equivalentes.
Como pode ser esperado de uma linguagem para aplica¸c˜oes nas ´areas t´ecnicas e cient´ıficas,
o SCILAB oferece v´ arias fun¸c˜oes importantes. A Tabela 4.4 apresenta algumas fun¸c˜oes
matem´ aticas elementares do SCILAB.
Se a vari´avel for um vetor ou uma matriz a avalia¸ c˜ao de uma fun¸c˜ao se d´a para cada elemento
da vari´avel,
-->a = 1:5
a =
1. 2. 3. 4. 5.
-->b = sqrt(a) // raiz quadrada
b =
1. 1.4142136 1.7320508 2. 2.236068
Os resultados acima podem ser apresentados na forma de uma tabela por interm´edio do
comando
4.2. Express˜ oes l´ogicas 75
Tabela 4.4: Fun¸c˜oes matem´ aticas elementares do SCILAB.
Fun¸c˜ao Descri¸c˜ao Fun¸c˜ao Descri¸c˜ao
trigonom´etricas
acos arco co-seno cotg co-tangente
asin arco seno sin seno
atan arco tangente tan tangente
cos co-seno
exponenciais
acosh arco co-seno hiperb´olico log logaritmo natural
asinh arco seno hiperb´olico log10 logaritmo decimal
atanh arco tangente hiperb´olica sinh seno hiperb´ olico
cosh co-seno hiperb´olico sqrt raiz quadrada
coth co-tangente hiperb´olica tanh tangente hiperb´ olica
exp exponencial
complexas
abs valor absoluto imag parte imagin´ aria do complexo
conj complexo conjugado real parte real do complexo
num´ericas
ceil arredonda em dire¸ c˜ao a +∞ lcm m´ınimo m´ ultiplo comum
fix arredonda em dire¸ c˜ao a 0 modulo resto de divis˜ ao
floor arredonda em dire¸ c˜ao a −∞ round arredonda em dire¸ c˜ao ao in-
teiro mais pr´ oximo
gcd m´ aximo divisor comum sign sinal
-->[a;b]’
ans =
1. 1.
2. 1.4142136
3. 1.7320508
4. 2.
5. 2.236068
4.2 Express˜oes l´ogicas
Uma express˜ao se diz l´ ogica quando os operadores forem l´ ogicos e os operandos forem rela¸ c˜oes
e/ou vari´aveis do tipo l´ ogico. Uma rela¸ c˜ao ´e uma compara¸c˜ao realizada entre valores do
mesmo tipo. A natureza da compara¸c˜ao ´e indicada por um operador relacional conforme a
Tabela 4.5.
O resultado de uma rela¸ c˜ao ou de uma express˜ao l´ ogica ´e verdadeiro ou falso. No SCILAB
o resultado ´e literal, sendo que T significa verdadeiro e F significa falso. Note que o caracter
(=) ´e usado para atribui¸ c˜ao de um valor `a uma vari´avel enquanto que os caracteres (==) s˜ao
usados para compara¸c˜ao de igualdade. Os operadores relacionais s˜ao usados para comparar
76 Cap´ıtulo 4. Express˜oes
Tabela 4.5: Operadores relacionais do SCILAB.
Operador relacional Descri¸c˜ao
== igual a
> maior que
>= maior ou igual a
< menor que
<= menor ou igual a
~= ou <> diferente de
vetores ou matrizes do mesmo tamanho ou comparar um escalar com os elementos de um
vetor ou de matriz. Sejam os vetores a e b e o escalar c,
-->a = 1:10, b = 9:-1:0, c = 5
a =
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
b =
9. 8. 7. 6. 5. 4. 3. 2. 1. 0.
c =
5.
Assim,
-->d = a >= c
d =
F F F F T T T T T T
produz um vetor que cont´em o valor T (verdadeiro) quando o elemento correspondente do
vetor a for maior ou igual a 5, caso contr´ ario cont´em o valor F (falso). Apesar de o resultado
da rela¸ c˜ao l´ ogica ser um valor literal, ele pode fazer parte de uma express˜ ao aritm´etica,
sendo que F vale 0 e T tem o valor 1,
-->e = a + (b <= 3)
e =
1. 2. 3. 4. 5. 6. 8. 9. 10. 11.
Quando um elemento de b for menor ou igual a 3, o valor 1 (resultado da rela¸ c˜ao l´ ogica) ´e
adicionado ao correspondente valor de a. Os operadores l´ ogicos permitem a combina¸c˜ao ou
nega¸c˜ao das rela¸ c˜oes l´ ogicas. Os operadores l´ ogicos do SCILAB s˜ao listados na Tabela 4.6.
Para os vetores a e b definidos anteriormente,
-->f = (a>3) & (a<=8)
f =
F F F T T T T T F F
4.2. Express˜ oes l´ogicas 77
Tabela 4.6: Operadores l´ ogicos do SCILAB.
Operador l´ ogico Descri¸c˜ao Uso
& e conjun¸c˜ao
| ou disjun¸ c˜ao
~ n˜ao nega¸c˜ao
Os elementos de f s˜ao iguais a T quando os correspondentes elementos de a forem maiores
do que 3 e menores ou iguais a 8, caso contr´ ario s˜ao iguais a F. Para fazer a nega¸c˜ao, ou
seja, onde for T ser´a F e vice-versa basta,
-->g = ~f
g =
T T T F F F F F T T
A Tabela 4.7 apresenta a tabela verdade para os operadores l´ ogicos do SCILAB.
Tabela 4.7: Tabela verdade.
a b a & b a | b ~a
T T T T F
T F F T F
F T F T T
F F F F T
A ordem de precedˆencia no SCILAB para express˜oes envolvendo operadores aritm´eticos e
l´ ogicos s˜ao indicados na Tabela 4.8.
Tabela 4.8: Ordem de precedˆencia das opera¸c˜oes aritm´eticas e l´ ogicas.
Ordem de precedˆencia Operadores
1
a
( )
2
a
fun¸c˜ao
3
a
^ .^ ’ .’
4
a
+ (un´ ario) e - (un´ ario)
5
a
* / \ .* ./ .\
6
a
+ e -
7
a
> >= < <= == ~=
8
a
~
9
a
&
10
a
|
Os parˆenteses podem ser usados para alterar a ordem de precedˆencia. Para os vetores a e b
definidos acima, a avalia¸ c˜ao da express˜ao,
78 Cap´ıtulo 4. Express˜oes
-->h = -(a-5).^2 > -9 & 3*b <= 15
h =
F F F F T T T F F F
´e equivalente `as v´ arias etapas,
-->h1 = a-5 // parenteses
h1 =
- 4. - 3. - 2. - 1. 0. 1. 2. 3. 4. 5.
-->h2 = h1.^2 // potenciacao
h2 =
16. 9. 4. 1. 0. 1. 4. 9. 16. 25.
-->h3 = -h2 // - unario
h3 =
- 16. - 9. - 4. - 1. 0. - 1. - 4. - 9. - 16. - 25.
-->h4 = 3*b // multiplicacao
h4 =
27. 24. 21. 18. 15. 12. 9. 6. 3. 0.
-->h5 = h3 > -9 // operador relacional (primeiro a esquerda)
h5 =
F F T T T T T F F F
-->h6 = h4 <= 15 // operador relacional (segundo a esquerda)
h6 =
F F F F T T T T T T
-->h = h5 & h6 // operador logico
h =
F F F F T T T F F F
4.3 Express˜oes literais
O SCILAB disp˜oe de v´ arias fun¸c˜oes para manipula¸c˜ao de cadeia de caracteres, sendo algumas
delas mostradas a seguir.
4.3.1 Convers˜ao de caracteres
Ser˜ ao apresentadas fun¸c˜oes para alterar o tamanho da caixa das letras e fazer a convers˜ao
de caracteres para n´ umero e vice-versa.
Caixas altas e baixas
A fun¸c˜ao convstr(<texto>,<tipo>) converte a cadeia de caracteres <texto> de acordo
com o <tipo>. Se ele for ’u’ (upper) ent˜ao converte para caixa alta (mai´ usculo) e se for
’l’ (lower) ou omitido converte para caixa baixa (min´ usculo),
-->texto = ’Caixas Altas e Baixas’ // define o texto
texto =
4.3. Express˜ oes literais 79
Caixas Altas e Baixas
-->convstr(texto,’u’) // converte para caixa alta
ans =
CAIXAS ALTAS E BAIXAS
-->convstr(texto) // converte para caixa baixa
ans =
caixas altas e baixas
C´ odigo ASCII
Os comandos <n´ umero> = ascii(<texto>) e <texto> = ascii(<n´umero>) fazem a con-
vers˜ao dos caracteres ASCII (American Standard Code for Information Interchange) conti-
dos no vetor de caracteres <texto> para valores num´ericos e atribuem ao vetor <n´ umero> e
vice-versa, de acordo com a Tabela 4.9.
Tabela 4.9: Caracteres em c´odigo ASCII.
Representa¸ c˜ao decimal dos caracteres
33 ! 45 - 57 9 69 E 81 Q 93 ] 105 i 117 u
34 " 46 . 58 : 70 F 82 R 94 ^ 106 j 118 v
35 # 47 / 59 ; 71 G 83 S 95 _ 107 k 119 w
36 $ 48 0 60 < 72 H 84 T 96 ‘ 108 l 120 x
37 % 49 1 61 = 73 I 85 U 97 a 109 m 121 y
38 & 50 2 62 > 74 J 86 V 98 b 110 n 122 z
39 ’ 51 3 63 ? 75 K 87 W 99 c 111 o 123 {
40 ( 52 4 64 @ 76 L 88 X 100 d 112 p 124 |
41 ) 53 5 65 A 77 M 89 Y 101 e 113 q 125 }
42 * 54 6 66 B 78 N 90 Z 102 f 114 r 126 ~
43 + 55 7 67 C 79 O 91 [ 103 g 115 s
44 , 56 8 68 D 80 P 92 \ 104 h 116 t
Por exemplo, para o vetor s de tamanho 5,
-->s = ’5+3*i’ // vetor de caracteres
s =
5+3*i
-->n = ascii(s) // converte caracteres para numeros
n =
53. 43. 51. 42. 105.
-->t = ascii(n) // converte numeros para caracteres
t =
5+3*i
80 Cap´ıtulo 4. Express˜oes
C´ odigo do SCILAB
Os comandos <texto> = code2str(<n´ umero>) e <n´ umero> = str2code(<texto>) fazem
a convers˜ao de um vetor de n´ umeros inteiros <n´ umero> para a cadeia de caracteres <texto>
e vice-versa, segundo o c´odigo do SCILAB,
-->texto = ’Caracteres’ // define o texto
texto =
Caracteres
-->numero = str2code(texto)’ // converte texto para numero (vetor transposto)
numero =
- 12. 10. 27. 10. 12. 29. 14. 27. 14. 28.
-->palavra = code2str(numero) // converte numero para texto
palavra =
Caracteres
´
E importante observar que os c´odigos de convers˜ao produzidos pelas fun¸c˜oes code2str e
str2code s˜ao diferentes daqueles produzidos pela fun¸c˜ao ascii,
-->car = ’01AZaz’ // define caracteres
car =
01AZaz
-->cod = str2code(car)’ // converte para codigo do SCILAB (vetor transposto)
cod =
0. 1. - 10. - 35. 10. 35.
-->asc = ascii(car) // converte para codigo ASCII
asc =
48. 49. 65. 90. 97. 122.
N´ umeros
O comando <texto> = string(<n´umero>) converte a constante num´erica <n´ umero> para
a sua representa¸ c˜ao em caracteres e atribui o resultado a <texto>. Este comando ´e de
grande utilidade quando da escrita de r´otulos e t´ıtulos em gr´ aficos, conforme ser´a visto no
Cap´ıtulo 5,
-->v = 4.25
v =
4.25
-->titulo = ’velocidade = ’ + string(v) + ’ m/s’
titulo =
velocidade = 4.25 m/s
4.3.2 Manipula¸ c˜ao de caracteres
Ser˜ ao descritas, a seguir, fun¸c˜oes para obter o tamanho, criar, operar e procurar caracteres.
4.3. Express˜ oes literais 81
Tamanho
A fun¸c˜ao length(<vari´ avel>) fornece o n´ umero de caracteres presentes na cadeia de ca-
racteres <vari´avel>; se ela for uma matriz ent˜ao ´e informado o n´ umero de caracteres de
cada elemento,
-->length(’abcde’) // numero de caracteres
ans =
5.
-->length([’ab’ ’123’; ’*’ ’abcd’]) // numero de caracteres de matriz
ans =
2. 3.
1. 4.
Cria¸c˜ao
O comando <vari´avel> = emptystr(<linhas>,<colunas>) gera uma matriz de caracte-
res <vari´avel> vazia de dimens˜ ao <linhas> × <colunas>. Por sua vez, <vari´ avel> =
emptystr(<matriz>) cria a matriz de caracteres <vari´avel> vazia com as mesmas di-
mens˜ oes de <matriz>,
-->mat = emptystr(2,3) // matriz vazia de dimensao 2 x 3
mat =
! !
! !
! !
-->length(mat) // numero de caracteres de mat
ans =
0. 0. 0.
0. 0. 0.
-->matnum = [1 2; 3 4] // define matriz numerica
matnum =
1. 2.
3. 4.
-->S = emptystr(matnum) // matriz vazia com mesma dimensao de matnum
S =
! !
! !
! !
-->length(S) // numero de caracteres de S
ans =
0. 0.
0. 0.
A fun¸c˜ao strcat(<vetor>,<caracteres>) insere a cadeia <caracteres> entre cada ele-
mento da cadeia de caracteres <vetor>,
82 Cap´ıtulo 4. Express˜oes
-->vet = [’a’ ’b’ ’c’ ’d’ ’e’] // define vetor de caracteres
vet =
!a b c d e !
-->vv = strcat(vet,’,’) // insere ’,’ entre cada elemento
vv =
a,b,c,d,e
-->ve = strcat(vet,’ >= ’) // insere ’ >= ’ entre cada elemento
ve =
a >= b >= c >= d >= e
Opera¸c˜ao
O comando <matriz pos> = justify(<matriz>,<posi¸ c~ ao>) cria <matriz pos>, uma ma-
triz de caracteres, alterando a posi¸c˜ao das colunas da matriz de caracteres <matriz> de
acordo com <posi¸c~ ao>. Se for igual a ’l’ (left) as colunas ser˜ao movidas para a esquerda,
se for ’c’ (center) elas ser˜ao centradas e se <posi¸c~ ao> = ’r’ (right) as colunas ser˜ao mo-
vidas para a direita,
-->M = [’abcdefg’ ’h’ ’ijklmnopq’; ’1’ ’1234567’ ’7890’; ’abc’ ’01’ ’def’]
M =
!abcdefg h ijklmnopq !
! !
!1 1234567 7890 !
! !
!abc 01 def !
-->C = justify(M,’c’) // cria matriz C a partir de M com colunas centradas
C =
!abcdefg h ijklmnopq !
! !
! 1 1234567 7890 !
! !
! abc 01 def !
A fun¸c˜ao stripblanks(<texto>) elimina os caracteres brancos do in´ıcio e do final da cadeia
de caracteres <texto>,
-->v = ’ a b c ’ // vetor v com 3 caracteres brancos no inicio e no final
v =
a b c
-->length(v) // numero de caracteres de v
ans =
11.
-->s = stripblanks(v) // remove caracteres brancos do inicio e do final de v
s =
a b c
-->length(s) // numero de caracteres de s
ans =
5.
4.3. Express˜ oes literais 83
A fun¸c˜ao strsplit(<texto>,<´ındice>) quebra a cadeia de caracteres <texto> nas posi¸c˜oes
dadas no vetor num´erico <´ ındice>, com valores estritamente crescentes, gerando um vetor
de caracteres,
-->s = ’1234567890abcdefgh’ // define vetor de caracteres
s =
1234567890abcdefgh
-->v = strsplit(s,[3 8 12]) // quebra o vetor s nas posicoes 3, 8 e 12
v =
!123 !
! !
!45678 !
! !
!90ab !
! !
!cdefgh !
A fun¸c˜ao strsubst(<matriz>,<texto orig>,<texto subs>) substitui todas as ocorrˆencias
da cadeia de caracteres <texto orig> na matriz de caracteres <matriz> pelos caracteres
contidos em <texto subs>,
-->frase = ’determinante = produto dos autovalores’ // define o texto
frase =
determinante = produto dos autovalores
-->strsubst(frase,’e’,’E’) // substitui as letras ’e’ por ’E’
ans =
dEtErminantE = produto dos autovalorEs
-->strsubst(frase,’ = ’,’ e’’ igual ao ’) // substitui simbolo por texto
ans =
determinante e’ igual ao produto dos autovalores
-->strsubst(frase,’ ’,’’) // remove todos os caracteres brancos
ans =
determinante=produtodosautovalores
Procura
Seja o comando [<linhas>,<qual>] = grep(<matriz>,<texto>). Para cada entrada da
<matriz> de caracteres, a fun¸c˜ao grep pesquisa se pelo menos uma cadeia de caracteres no
vetor <texto> ´e igual a uma subcadeia de <matriz>. O vetor num´erico <linhas> informa
os ´ındices das entradas de <matriz> onde, pelo menos, uma igualdade foi encontrada. O
argumento opcional <qual> fornece ´ındices informando qual das cadeias de caracteres de
<texto> foi encontrada. Por exemplo,
-->matriz = [’o scilab e’’ um software livre’;
--> ’para aplicacoes cientificas’;
84 Cap´ıtulo 4. Express˜oes
--> ’ver www.scilab.org’] // define a matriz de caracteres
matriz =
!o scilab e’ um software livre !
! !
!para aplicacoes cientificas !
! !
!ver www.scilab.org !
-->[linha,qual] = grep(matriz,[’ver’,’scilab’]) // procura por ’ver’ e ’scilab’
qual =
2. 1. 2.
linha =
1. 3. 3.
As cadeias de caracteres ver (posi¸c˜ao 1) e scilab (posi¸c˜ao 2) foram encontradas nas linhas
1, 3 e 3, sendo que na linha 1 foi encontrada a cadeia de ´ındice 2 (scilab) e na linha 3
foram as de ´ındice 1 (ver) e 2 (scilab).
Considere o comando [<´ ındices>,<qual>] = strindex(<texto>,<vetor i>). A fun¸c˜ao
strindex procura os ´ındices de onde o i-´esimo elemento do vetor de caracteres <vetor i> foi
encontrado na cadeia de caracteres <texto>. Estes ´ındices s˜ao retornados no vetor num´erico
<´ ındices>. O argumento opcional <qual> fornece ´ındices informando qual das cadeias de
caracteres de <vetor i> foram encontradas. Por exemplo,
-->ind = strindex(’abcd dabc’,’a’) // procura os indices de ocorrencia de ’a’
ind =
1. 7.
-->ind = strindex(’baad daaa’,’aa’) // indices de ocorrencia de ’aa’
ind =
2. 7. 8.
-->[ind,qual] = strindex(’baad daaa bdac’,[’aa’ ’da’])
qual =
1. 2. 1. 1. 2.
ind =
2. 6. 7. 8. 12.
Os caracteres aa e da foram encontrados nas posi¸c˜oes 2, 6, 7, 8, e 12 e os elementos que
apareceram foram, respectivamente, 1 (aa), 2 (da), 1 (aa), 1 (aa) e 2 (da).
O comando <elementos> = tokens(<texto>,<delimitador>) cria um vetor coluna de ca-
racteres <elementos> particionando a cadeia de caracteres <texto> onde ocorrer a presen¸ca
de um dos componentes do vetor <delimitador>. Cada componente do segundo argumento
´e formado por um ´ unico caracter. Se este argumento for omitido ent˜ao ´e assumido o vetor
[’ ’,<Tab>] (caracteres branco e ascii(9)). Por exemplo,
-->tokens(’Exemplo de cadeia de caracteres’) // particiona com delimitador ’ ’
4.3. Express˜ oes literais 85
ans =
!Exemplo !
! !
!de !
! !
!cadeia !
! !
!de !
! !
!caracteres !
-->tokens(’Exemplo de cadeia de caracteres’,’c’) // delimitador ’c’
ans =
!Exemplo de !
! !
!adeia de !
! !
!ara !
! !
!teres !
-->tokens(’Exemplo de cadeia de caracteres’,[’d’ ’t’]) // delimitadores ’d’ e ’t’
ans =
!Exemplo !
! !
!e ca !
! !
!eia !
! !
!e carac !
! !
!eres !
Seja o comando <matriz> = tokenpos(<texto>,<delimitador>). A fun¸c˜ao tokenpos
particiona a cadeia de caracteres <texto> onde ocorrer a presen¸ca de um dos componentes
do vetor <delimitador>. Os ´ındices inicial e final de cada elemento resultante da parti¸ c˜ao
s˜ao atribu´ıdos `a matriz num´erica de duas colunas <matriz>. Cada componente do segundo
argumento ´e formado por um ´ unico caracter. Se este argumento for omitido ent˜ao ´e assumido
o vetor [’ ’,<Tab>] (caracteres branco e ascii(9)). Por exemplo,
-->tokenpos(’Exemplo de cadeia de caracteres’) // particiona com delimitador ’ ’
ans =
1. 7.
9. 10.
12. 17.
19. 20.
22. 31.
86 Cap´ıtulo 4. Express˜oes
-->tokenpos(’Exemplo de cadeia de caracteres’,[’d’ ’t’])// delimitadores ’d’, ’t’
ans =
1. 8.
10. 13.
15. 18.
20. 26.
28. 31.
Seja o comando <elementos> = part(<texto>,<´ındices>), onde <elementos> e <texto>
s˜ao matrizes de caracteres e <´ ındices> ´e um vetor num´erico de´ındices. A fun¸c˜ao part obt´em
<elementos> a partir dos elementos de <texto> nas posi¸c˜oes especificadas em <´ ındice>.
Por exemplo,
-->c = part([’123’,’4567’,’890’],[1,3]) // obtendo com indices 1 e 3
c =
!13 46 80 !
Observar que cada valor de <elementos> ´e separado por dois caracteres branco. Se um
elemento de <´ ındice> for maior que o comprimento de um componente de <texto> ent˜ao
<elementos> receber´ a um caractere branco,
-->vet = part([’a’,’bcd’,’efghi’],[1,2,4,1]) // obtendo com indices 1, 2, 4 e 1
vet =
!a a bc b efhe !
O comprimento do primeiro componente ’a’ ´e 1 que ´e menor que 2 e 4, portanto, o primeiro
componente de vet recebe dois caracteres brancos nas posi¸c˜oes 2 e 3. O segundo componente
’bcd’ tem comprimento 3 que ´e menor que 4 por isso recebe um branco na posi¸c˜ao 3.
4.4 Execu¸ c˜ao de express˜ oes
O SCILAB possui comandos com o prop´osito de executar express˜oes, um dos quais ´e o eval,
cuja sintaxe ´e
<resultado> = eval(<express~ao>)
A cadeia de caracteres <express~ao> cont´em a express˜ao matem´ atica que deve ser interpre-
tada e atribu´ıda `a vari´avel <resultado>. Por exemplo,
-->r = eval(’sin(%pi/2)’)
r =
1.
-->x = 1; y = 2; eval(’2*x+exp(y-2)’)
ans =
3.
Note que para avaliar uma express˜ao que possui as vari´aveis x e y, estas tˆem que ser previ-
amente definidas. A fun¸c˜ao eval ´e tamb´em capaz de executar tarefas mais complexas,
4.5. Exerc´ıcios 87
-->Tabela = [’sqrt(x)’; ’exp(x)’;’1/x+5*x^2’] // define matriz com 3 expressoes
Tabela =
!sqrt(x) !
! !
!exp(x) !
! !
!1/x+5*x^2 !
-->x = 16; eval(Tabela(1,:)) // avalia a expressao da linha 1 com x = 16
ans =
4.
-->x = 2; eval(Tabela(3,:)) // avalia a expressao da linha 3 com x = 2
ans =
20.5
A fun¸c˜ao evstr(<express~ao>) converte a representa¸ c˜ao do valor num´erico da cadeia de
caracteres <express~ao> escrita em c´odigo ASCII para a representa¸ c˜ao num´erica. O argu-
mento <express~ao> deve estar escrito de acordo com as regras de defini¸ c˜ao de constantes
num´ericas vistas na Se¸ c˜ao 3.1 Constantes,
-->x = evstr(’1.23d2+5.678e-1*%i’)
x =
123. + 0.5678i
com este valor num´erico ´e poss´ıvel, por exemplo, calcular a raiz quadrada,
-->y = sqrt(x)
y =
11.090566 + 0.0255983i
4.5 Exerc´ıcios
Observar atentamente e anotar o resultado dos comandos do SCILAB. Apesar de os coman-
dos estarem separados por v´ırgula, entrar com um de cada vez.
Se¸c˜ao 4.1 Express˜oes aritm´eticas
4.1 Avaliar as express˜oes escalares
5+3, 4-1, 6*3, 10/2, 2\ 5, 3^2, 1+2*3-4/5, 6*2^3.
4.2 Sejam a = 1, b = 2, c = 3, d = 4, e = 5. Avaliar
x =
3
_
e(e −a)(e −b) + c
d
,
y = a −
b
2
−c
d + e
+
_
cos(a)
d + sen(b + c)
_
3
,
88 Cap´ıtulo 4. Express˜oes
z = log
10
_
b
d + e
2
_
+ exp
_
b + a
b −a
+
c
2
1 + b
3

1 + b
2
_
.
Avaliar as express˜oes vetoriais para u = 2:6, v = linspace(10,14,5), k = 5,
4.3 u-k, u+v, u*k, u.*v, u./v, u.\v.
4.4 u.^k, k.^u, v.^u.
4.5 w = sqrt(u+v) - cos(u-k*v).
Avaliar as express˜oes matriciais para
M = [2 -3 1; 4 6 -1; -5 2 1], N = [1 1 2; 3 1 -1; 3 2 1], x = (1:3)’, z = 2.
4.6 M-z, M+N, M*z.
4.7 M.*N, M*N, M*x, M./N, M.\N.
4.8 M.^z, M^z, z.^M, z^M, M.^N.
4.9 Verificar a diferen¸ca entre as fun¸c˜oes usando a = π e a = −5,6,
ceil(a), fix(a), floor(a), round(a), sign(a).
4.10 Para c = 3 + 4i e c = 5 −3i, observar os resultados das fun¸c˜oes complexas,
abs(c), conj(c), real(c), imag(c).
Se¸ c˜ao 4.2 Express˜oes l´ ogicas
4.11 Com rela¸ c˜ao `as vari´aveis l´ ogicas, dados a = %t, b = %f, c = sqrt(2) > 1, d =
exp(0) == 0, completar a tabela
a b c d a&b a&c b&d a|b a|c b|d ~a ~b
Avaliar as express˜oes l´ ogicas para x = -2:2 e v = 1:5,
4.12 x > -1.
4.13 abs(x) == 1.
4.14 x <= -1 & v > 1.
4.5. Exerc´ıcios 89
4.15 x > 1 | abs(v-3) < 1.
Se¸c˜ao 4.3 Express˜oes literais
4.16 Definir os comandos para gerar as cadeias de caracteres T´ ıtulo, vari´avel e equa¸c~ oes.
4.17 Dada a cadeia de caracteres [’1’ ’2’ ’3’ ’4’], inserir ’ menor que ’ entre eles.
4.18 Quebrar a cadeia de caracteres ’123456789012345’ nas posi¸c˜oes 5 e 10.
4.19 Dado ’abcde edabc eacdb’, substituir toda ocorrˆencia do caracter ’d’ pelo caracter
’X’.
4.20 Dada a seq¨ uˆencia de caracteres ’abcdeedabceacdbdbcae’ determinar os ´ındices de
onde ocorre ’bc’.
Se¸c˜ao 4.4 Execu¸c˜ao de express˜ oes
4.21 Avaliar o resultado da express˜ao dada pela cadeia de caracteres ’sqrt(4)+cos(%pi)’.
Para x = 1:5 e y = 3, avaliar as express˜oes abaixo,
4.22 ’exp(x-y)’.
4.23 ’modulo(x,y) .* sinh(x*y/10)’.
4.24 Converter para n´ umero as cadeias de caracteres ’12.3d-1’ e ’0.0456789e2’.
4.25 Qual a diferen¸ca entre as fun¸c˜oes evstr e string?
90 Cap´ıtulo 4. Express˜oes
Cap´ıtulo 5
Gr´aficos
Uma das grandes virtudes do SCILAB ´e a facilidade que ele oferece para produzir gr´ aficos
de boa qualidade. Neste cap´ıtulo ser˜ao vistos como gerar gr´ aficos bi e tridimensionais e os
modos de imprimi-los ou grav´ a-los em arquivos para que possam ser inclu´ıdos em textos.
5.1 Gr´aficos bidimensionais
Para gerar gr´ aficos bidimensionais s˜ao usadas as vers´ateis fun¸c˜oes plot e fplot2d.
5.1.1 Fun¸c˜ao plot
A sintaxe da fun¸c˜ao plot ´e
plot(<x 1>,<y 1>,<tipo de linha 1>,...,<x n>,<y n>,<tipo de linha n>)
onde <x i> e <y i> s˜ao vetores contendo as abscissas e ordenadas dos pontos a serem exibi-
dos, respectivamente e <tipo de linha i> ´e uma cadeia de 1 a 4 caracteres que especifica
a cor, o estilo da linha e o marcador dos pontos dados. Os tipos de linha s˜ao mostrados na
Tabela 5.1. Use o comando help plot para mais detalhes.
Considere os vetores
-->x = linspace(-8,8,50); // define as abscissas
-->y = sin(x); // vetor com elementos da funcao seno
-->z = cos(x); // vetor com elementos da funcao co-seno
Para gerar um gr´ afico de sen(x) em fun¸c˜ao de x basta,
-->plot(x,y)
91
92 Cap´ıtulo 5. Gr´aficos
Tabela 5.1: Tipos de linha da fun¸c˜ao plot.
S´ımbolo Cor S´ımbolo Estilo de linha S´ımbolo Marcador
r vermelho - linha s´olida (default) + mais
g verde -- linha tracejada o c´ırculo
b azul : linha pontilhada * asterisco
c turquesa -. linha de tra¸co e ponto . ponto
m lil´ as x cruz
y amarelo ’s’ quadrado
k preto ’d’ diamante
w branco ^ triang. cima
v triang. baixo
> triang. direita
< triang. esquerda
’pentagram’ pentagrama
’none’ sem marca (default)
O gr´ afico produzido ´e mostrado na Figura 5.1(a). Tamb´em pode ser gerado um gr´ afico um
pouco mais complexo, sen(x) e cos(x) em fun¸c˜ao de x com os valores de sen(x) em linha
s´olida e os pontos dados sendo destacados com (*) e os de cos(x) em linha tracejada e com
(o). Para produzir o grafico da Figura 5.1(b) basta o comando
-->plot(x,y,’-*’,x,z,’--o’)
O SCILAB oferece algumas fun¸c˜oes para identifica¸ c˜ao dos gr´ aficos.
T´ıtulos e r´ otulos
A fun¸c˜ao
xtitle(<t´ıtulo>[,<r´otulo x>[,<r´ otulo y>[,<r´ otulo z>]]])
escreve a cadeia de caracteres <t´ ıtulo> no cabe¸calho e a cadeia de caracteres <r´ otulo i>
no i-´esimo eixo do gr´ afico. Os trˆes argumentos <r´ otulo i> s˜ao opcionais.
Texto
A fun¸c˜ao
xstring(x,y,<texto>[,<^ angulo>][,<caixa>])
escreve a cadeia de caracteres <texto> na posi¸c˜ao de coordenadas x,y com inclina¸ c˜ao
<^ angulo>, em graus, no sentido hor´ ario. O escalar inteiro <caixa> informa se ser´a dese-
nhada uma caixa em torno do <texto>. Se <^ angulo> = 0 e <caixa> = 1 ent˜ao uma caixa
ser´a desenhada em torno do <texto>. Os argumentos <^ angulo> e <caixa> s˜ao opcionais.
Assim os comandos,
5.1. Gr´aficos bidimensionais 93
(a) f(x) = sen(x). (b) f(x) = sen(x) e g(x) = cos(x).
Figura 5.1: Gr´aficos produzidos pela fun¸c˜ao plot.
-->xtitle(’funcoes seno e co-seno’,’eixo x’,’eixo y’)
-->xstring(4.1,0.7,’cos(x)’)
-->xstring(6.1,-0.6,’sen(x)’,0,1)
produzir˜ ao os t´ıtulos e r´otulos no gr´ afico da Figura 5.1(b), como mostrado na Figura 5.2(a).
Legenda
A fun¸c˜ao
legend([<texto 1>,...,<texto n>][,<posi¸c~ ao>][,<caixa>])
adiciona legendas ao esbo¸co da figura, usando as cadeias de caracteres <texto i> como
r´otulos. O argumento <posi¸c~ ao> especifica onde as legendas ser˜ao colocadas, 1: canto
superior direito (default), 2: canto superior esquerdo, 3: canto inferior esquerdo, 4: canto
inferior direito e 5: a legenda ´e colocada usando o mouse. A caixa de legendas move-se com
o mouse e assim que estiver na posi¸c˜ao desejada pressiona-se um bot˜ ao. Valores negativos de
<posi¸c~ ao> permitem colocar as legendas fora do quadro do gr´ afico (usar help legend para
mais detalhes). A vari´avel l´ ogica <caixa> indica se uma caixa ser´a ou n˜ao desenhada em
torno das legendas, sendo o valor default igual a %T. Os argumentos <posi¸ c~ ao> e <caixa>
s˜ao opcionais.
Grade
A fun¸c˜ao xgrid(<estilo>) faz com que apare¸ca uma grade no gr´ afico produzido de acordo
com a constante inteira <estilo>, que define a forma e a cor da grade. A Figura 5.2(b)
mostra o efeito dos comandos.
94 Cap´ıtulo 5. Gr´aficos
(a) T´ıtulos e r´otulos. Legendas e grade.
Figura 5.2: Documenta¸ c˜ao de gr´ aficos.
-->legend([’sen(x)’,’cos(x)’],5)
-->xgrid(1)
5.1.2 Fun¸c˜ao fplot2d
A fun¸c˜ao fplot2d ´e utilizada para esbo¸car gr´ afico de fun¸c˜ao no R
2
, sendo sua sintaxe
fplot2d(<abscissas>,<fun¸ c~ ao>,<argumentos>)
onde <abscissas> ´e um vetor num´erico contendo as abscissas, <fun¸c~ ao> ´e o nome de uma
function externa e <argumentos> ´e um conjunto opcional que define o estilo do gr´ afico na
forma <op¸c~ ao 1> = <valor 1>,..., <op¸c~ ao n> = <valor n>. O argumento <op¸c~ ao i>
pode ser style, rect, logflag, frameflag, axesflag, nax e leg.
style
Esta op¸c˜ao ´e utilizada para definir como as curvas ser˜ao desenhadas, com seus valores sendo
dados por um vetor com elementos inteiros de tamanho igual ao n´ umero de curvas. Se
style(i) for positivo a linha ent˜ao ´e desenhada como uma linha plana e o ´ındice define
qual cor ser´a usada. Se style(i) for negativo ou nulo ent˜ao a curva ´e esbo¸cada usando
marcadores e abs(style(i)) define o tipo de marcador.
rect
Define os limites das abscissas e ordenadas com os valores definidos por um vetor de quatro
elementos (rect = [Xmin, Ymin, Xmax, Ymax]). As abscissas estar˜ ao entre os limites Xmin
e Xmax e as ordenadas entre Ymin e Ymax.
5.1. Gr´aficos bidimensionais 95
logflag
Especifica a escala (linear ou logar´ıtmica) ao longo dos dois eixos de coordenadas com valores
associados podendo ser ’nn’, ’nl’, ’ln’, ’ll’, sendo que cada letra representa um eixo
com n significando escala normal ou linear e l para escala logar´ıtmica.
frameflag
Esta op¸c˜ao controla o c´alculo dos limites das coordenadas atuais a partir dos valores m´ınimos
requeridos. Este argumento pode assumir um valor inteiro, tal que, 0: escala default (sem
c´alculos); 1: limites dados pela op¸c˜ao rect; 2: calculados pelos m´ aximos e m´ınimos dos
vetores de abscissas e ordenadas; 3: dados pela op¸c˜ao rect, por´em aumentados para obter
uma escala isom´etrica; 4: calculados pelos m´ aximos e m´ınimos dos vetores de abscissas e
ordenadas, mas aumentados para obter uma escala isom´etrica; 5: dados pela op¸c˜ao rect,
por´em aumentados para produzir melhores r´otulos dos eixos; 6: calculados pelos m´ aximos
e m´ınimos dos vetores de abscissas e ordenadas, mas aumentados para produzir melhores
r´otulos dos eixos; 7: como frameflag = 1, todavia os gr´ aficos anteriores s˜ao redesenhados
para usar a nova escala; 8: como frameflag = 2, contudo os gr´ aficos anteriores s˜ao redese-
nhados para usar a nova escala e 9: como frameflag = 8, por´em aumentados para produzir
melhores r´otulos dos eixos (default).
axesflag
Especifica como os eixos ser˜ao desenhados podendo ter um valor inteiro, tal que, 0: nada
´e desenhado em torno do gr´ afico; 1: eixos desenhados com o eixo de ordenadas mostrado ` a
esquerda; 2: gr´ afico contornado por uma caixa sem marcadores; 3: eixos desenhados com o
eixo de ordenadas mostrado `a direita; 4: eixos desenhados centrados no meio do contorno
da caixa e 5: eixos desenhados de modo a cruzar o ponto (0,0) e caso este ponto n˜ao esteja
dentro da ´area exibida ent˜ao os eixos n˜ao aparecer˜ ao.
nax
Atribui os r´otulos e define as marcas nos eixos quando a op¸c˜ao axesflag = 1 for usada.
Os valores s˜ao definidos por um vetor de quatro elementos inteiros ([<nx>, <Nx>, <ny>,
<Ny>]), tal que, <Nx>: n´ umero de marcas principais a ser usado no eixo das abscissas; <nx>:
n´ umero de submarcas a serem desenhadas entre marcas no eixo das abscissas; <Ny> e <ny>:
fornecem informa¸c˜oes similares, mas para o eixo das ordenadas. Se a op¸c˜ao axesflag n˜ao
for usada ent˜ao a op¸c˜ao nax sup˜ oe que axesflag = 1.
leg
Esta op¸c˜ao define as legendas referentes `a cada curva devendo ser uma cadeia de carac-
teres na forma <legenda 1>@<legenda 2>@...@<legenda n>, sendo <legenda i> o t´ıtulo
correspondente `a i-´esima curva. Se essa op¸c˜ao n˜ao for definida ´e assumido o valor ’ ’.
96 Cap´ıtulo 5. Gr´aficos
Exemplos
A seguir ser˜ao mostrados alguns gr´ aficos gerados pela fun¸c˜ao fplot2d. A lista de comandos
-->x = -20:0.1:20; // define valores de x
-->deff(’[y]=f(x)’,’y=sin(x)*x’) // define funcao
-->fplot2d(x,f) // esboca grafico
-->xtitle(’f(x) = sen(x) * x’,’x’,’f(x)’) // titulos e rotulos
produzem o gr´ afico apresentado na Figura 5.3(a) apenas com o t´ıtulo e os r´otulos dos eixos.
Os comandos abaixo geram o gr´ afico da Figura 5.3(b), com o uso das op¸c˜oes style e rect,
-->fplot2d(x,f,style=-10,rect=[-15 -10 15 10]) // grafico com style e rect
-->xtitle(’f(x) = sen(x) * x’,’x’,’f(x)’) // titulos e rotulos
(a) T´ıtulo e r´otulos. (b) Op¸c˜oes style e rect.
Figura 5.3: Esbo¸cos de f(x) = sen(x)x pela fun¸c˜ao fplot2d.
O comando abaixo apresenta as op¸c˜oes frameflag e axesflag, produzindo o gr´ afico da
Figura 5.4(a),
-->fplot2d(x,f,frameflag=4,axesflag=5) // grafico com frameflag e axesflag
As op¸c˜oes nax e leg podem ser vistas no comando abaixo, que gera o gr´ afico da Figura 5.4(b),
-->fplot2d(x,f,nax=[5 10 4 8],leg=’sen(x)*x’) // grafico com nax e leg
Para mais informa¸c˜oes sobre os comandos para manipula¸c˜ao de gr´ aficos bidimensionais use
help fplot2d.
5.2. Gr´aficos tridimensionais 97
(a) Op¸c˜oes frameflag e axesflag. (b) Op¸c˜oes nax e leg.
Figura 5.4: Esbo¸cos de f(x) = sen(x)x pela fun¸c˜ao fplot2d com op¸c˜oes.
5.2 Gr´aficos tridimensionais
De uma maneira similar aos gr´ aficos bidimensionais, o SCILAB possui v´ arios comandos para
que gr´ aficos tridimensionais sejam tamb´em facilmente esbo¸cados. Ser˜ ao descritas a seguir,
de modo sucinto, algumas fun¸c˜oes com esta finalidade. Para mais informa¸c˜oes sobre essas
fun¸c˜oes deve ser utilizado o comando help graphics.
5.2.1 Fun¸c˜ao meshgrid
A fun¸c˜ao [<matriz X>,<matriz Y>] = meshgrid(<vetor x>,<vetor y>) transforma o do-
m´ınio especificado por <vetor x> e <vetor y> em matrizes <matriz X> e <matriz Y> que
possam ser usadas para avaliar fun¸c˜oes de duas vari´aveis e fazer esbo¸cos tridimensionais
de malhas e superf´ıcies. As linhas de <matriz X> s˜ao c´opias de <vetor x> e as colunas de
<matriz Y> s˜ao c´opias de <vetor y>,
-->x = -1:0.5:2 // define vetor x
x =
- 1. - 0.5 0. 0.5 1. 1.5 2.
-->y = -1:0.5:1 // define vetor y
y =
- 1. - 0.5 0. 0.5 1.
-->[X,Y] = meshgrid(x,y) // cria matrizes X e Y
Y =
- 1. - 1. - 1. - 1. - 1. - 1. - 1.
- 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5 - 0.5
0. 0. 0. 0. 0. 0. 0.
0.5 0.5 0.5 0.5 0.5 0.5 0.5
98 Cap´ıtulo 5. Gr´aficos
1. 1. 1. 1. 1. 1. 1.
X =
- 1. - 0.5 0. 0.5 1. 1.5 2.
- 1. - 0.5 0. 0.5 1. 1.5 2.
- 1. - 0.5 0. 0.5 1. 1.5 2.
- 1. - 0.5 0. 0.5 1. 1.5 2.
- 1. - 0.5 0. 0.5 1. 1.5 2.
-->Z = X + Y // operacao com X e Y
Z =
- 2. - 1.5 - 1. - 0.5 0. 0.5 1.
- 1.5 - 1. - 0.5 0. 0.5 1. 1.5
- 1. - 0.5 0. 0.5 1. 1.5 2.
- 0.5 0. 0.5 1. 1.5 2. 2.5
0. 0.5 1. 1.5 2. 2.5 3.
5.2.2 Fun¸c˜ao plot3d
Esta fun¸c˜ao ´e uma generaliza¸ c˜ao da fun¸c˜ao plot vista na Se¸ c˜ao 5.1 para esbo¸cos tridimen-
sionais. Sua sintaxe ´e
plot3d(<matriz X>,<matriz Y>,<matriz Z>,<argumentos>)
onde <matriz X>, <matriz Y> e <matriz Z> s˜ao matrizes de mesmas dimens˜ oes contendo
as coordenadas tridimensionais dos pontos a serem exibidos e <argumentos> ´e um conjunto
opcional que define o estilo do gr´ afico na forma <op¸c~ ao 1> = <valor 1>,..., <op¸c~ ao n>
= <valor n>. O argumento <op¸c~ ao i> pode ser alpha, theta, leg, flag e ebox.
alpha e theta
S˜ao ˆangulos, em graus, que definem as coordenadas esf´ericas do ponto do observador. O
argumento theta descreve o ˆangulo no plano xy e alpha em torno do eixo z. Se n˜ao forem
especificados s˜ao assumidos os valores pr´e-definidos alpha = 35 e theta = 45.
leg
Define os r´otulos referentes `a cada um dos trˆes eixos devendo ser uma cadeia de caracteres
na forma <legenda x>@<legenda y>@<legenda z>, sendo <legenda i> correpondente ao
i-´esimo eixo. Se essa op¸c˜ao n˜ao for fornecida ent˜ao ´e assumido o valor ’ ’.
flag
Essa op¸c˜ao ´e um vetor num´erico com trˆes elementos flag = [<modo>,<tipo>,<caixa>]. O
elemento inteiro <modo> define a cor da superf´ıcie. Se positivo ent˜ao a superf´ıcie ´e desenhada
com a cor <modo> e o contorno de cada faceta ´e desenhado com estilo de linha e cor definidos.
5.2. Gr´aficos tridimensionais 99
Se ele for nulo ent˜ao somente a malha da superf´ıcie ´e desenhada e se ele for negativo ent˜ao
a superf´ıcie ´e desenhada com a cor -<modo> e o contorno da faceta n˜ao ´e desenhado.
O segundo elemento inteiro <tipo> define a escala, tal que, 0: o gr´ afico ´e feito usando a
escala 3D atual; 1: reescala automaticamente a caixa 3D com raz˜ ao de aspecto extremo e os
contornos s˜ao definidos pelo valor do argumento opcional ebox; 2: reescala automaticamente
a caixa 3D com raz˜ao de aspecto extremo e os contornos s˜ao computados usando os dados
fornecidos; 3: 3D isom´etrico com limites da caixa fornecido por ebox; 4: 3D isom´etrico com
limites derivados dos dados fornecidos; 5: limites isom´etricos expandidos 3D com os limites
da caixa fornecidos por ebox e 6: limites isom´etricos expandidos 3D com limites derivados
dos dados fornecidos.
O terceiro elemento inteiro <caixa> define a moldura em torno do gr´ afico, tal que, 0: nada
´e desenhado em torno do gr´ afico; 1: o mesmo que o anterior porque ainda n˜ao est´a imple-
mentado (!); 2: somente os eixos atr´as da superf´ıcie s˜ao desenhados; 3: uma caixa em torno
da superf´ıcie ´e desenhada e os t´ıtulos s˜ao adicionados e 4: uma caixa em torno da superf´ıcie
´e desenhada e t´ıtulos e eixos s˜ao adicionados.
ebox
Esta op¸c˜ao define os limites das trˆes coordenadas do gr´ afico com os valores dados em um vetor
de seis elementos (ebox = [Xmin, Xmax, Ymin, Ymax, Zmin, Zmax]). Este argumento ´e
usado junto com <tipo> da op¸c˜ao flag, caso <tipo> tenha o valor 1, 3 ou 5. Se a op¸c˜ao
flag n˜ao for fornecida ent˜ao ebox n˜ao ´e considerado.
Exemplos
Para produzir o esbo¸co da fun¸c˜ao z = sen(x) cos(y)
2
no intervalo −3 ≤ x ≤ 3 e −2 ≤ y ≤ 2,
mostrado na Figura 5.5(a), utiliza-se os comandos
-->[X,Y] = meshgrid(-3:0.2:3,-2:0.2:2);// cria matrizes X e Y a partir de vetores
-->Z = sin(X).*cos(Y).^2; // calcula pontos da funcao
-->plot3d(X,Y,Z) // desenha grafico 3D
Nesta figura foram utilizados os valores pr´e-definidos alpha = 35 e theta = 45 graus. A
Figura 5.5(b) apresenta o gr´ afico com os valores alterados para alpha = 30 e theta = 60,
usando o comando
-->plot3d(X,Y,Z,alpha=30,theta=60)
Quando os argumentos tˆem os valores alterados para alpha = 60 e theta = 30, pelo co-
mando abaixo, o gr´ afico ´e rotacionado do modo mostrado na Figura 5.6(a),
-->plot3d(X,Y,Z,alpha=60,theta=30)
100 Cap´ıtulo 5. Gr´aficos
(a) Op¸c˜oes alpha = 35 e theta = 45. (b) Op¸c˜oes alpha = 30 e theta = 60.
Figura 5.5: Esbo¸cos de z = sen(x) cos(y)
2
usando a fun¸c˜ao plot3d.
(a) Op¸c˜oes alpha = 60 e theta = 30. (b) Op¸c˜oes alpha = 80 e theta = 230.
Figura 5.6: Esbo¸cos de z = sen(x) cos(y)
2
usando plot3d com varia¸c˜ao de alpha e theta.
5.2. Gr´aficos tridimensionais 101
Um gr´ afico com a orienta¸ c˜ao dos eixos mais natural ´e apresentado na Figura 5.6(b), sendo
obtido pelo comando com alpha = 80 e theta = 230,
-->plot3d(X,Y,Z,alpha=80,theta=230)
Um exemplo de uso da op¸c˜ao leg pode ser visto na Figura 5.7(a), obtida pelos comandos
-->legenda = ’eixo x@eixo y@eixo z’ // define legenda
legenda =
eixo x@eixo y@eixo z
-->plot3d(X,Y,Z,alpha=80,theta=230,leg=legenda)
Acrescentando a op¸c˜ao flag com os argumentos <modo> = 0, <tipo> = 2 e <caixa> = 3
pelo comando abaixo, tem-se a Figura 5.7(b),
-->plot3d(X,Y,Z,alpha=80,theta=230,leg=legenda,flag=[0 2 3])
(a) Op¸c˜ao leg. (b) Op¸c˜oes leg e flag.
Figura 5.7: Esbo¸cos de z = sen(x) cos(y)
2
usando plot3d com as op¸c˜oes leg e flag.
5.2.3 Fun¸c˜ao mesh
A fun¸c˜ao mesh(<matriz X>,<matriz Y>,<matriz Z>) produz o esbo¸co de uma malha na
superf´ıcie especificada pelas matrizes <matriz X>, <matriz Y> e <matriz Z>. Os comandos
abaixo geram o esbo¸co mostrado na Figura 5.8(a),
-->[X,Y] = meshgrid(-3:0.2:3,-2:0.2:2); // define as matrizes X e Y
-->Z = sin(X).*cos(Y).^2; // define a matriz Z com a funcao
-->mesh(X,Y,Z); // desenha a malha
-->xgrid(1) // coloca a grade
-->xtitle(’mesh’,’eixo x’,’eixo y’,’eixo z’) // titulos e rotulos
102 Cap´ıtulo 5. Gr´aficos
(a) Fun¸c˜ao mesh. (b) Fun¸c˜ao surf.
Figura 5.8: Esbo¸cos de z = sen(x) cos(y)
2
com diferentes fun¸c˜oes.
5.2.4 Fun¸c˜ao surf
A fun¸c˜ao surf(<matriz X>,<matriz Y>,<matriz Z>) produz uma superf´ıcie sombreada
tridimensional especificada pelas matrizes <matriz X>, <matriz Y> e <matriz Z>. Deste
modo, os comandos abaixo produzem a Figura 5.8(b),
-->[X,Y] = meshgrid(-3:0.2:3,-2:0.2:2); // define as matrizes X e Y
-->Z = sin(X).*cos(Y).^2; // define a matriz Z com a funcao
-->surf(X,Y,Z); // desenha a superficie
-->xtitle(’surf’,’eixo x’,’eixo y’,’eixo z’) // titulos e rotulos
-->xgrid(1) // coloca a grade
5.3 Janela de figura
As figuras geradas pelo SCILAB podem ser facilmente modificadas, impressas ou gravadas
em um arquivo para posterior impress˜ao ou inclus˜ao em um texto.
Uma figura ´e gerada na janela Scilab Graphic(0) que apresenta cinco bot˜ oes: File, Zoom,
UnZoom, 3D Rot. e Edit.
Escolhendo File aparecem v´ arias op¸c˜oes entre as quais Export, com a qual surge a janela
Xscilab, mostrada na Figura 5.9, com v´ arias op¸c˜oes para produzir um arquivo com o gr´ afico.
5.4. Exerc´ıcios 103
Figura 5.9: Janela para gerar arquivo com figura.
5.4 Exerc´ıcios
Se¸c˜ao 5.1 Gr´aficos bidimensionais
5.1 Seja a fun¸c˜ao
y = e
1+x/10
+ cos(x)x.
Gerar uma tabela com 20 pontos para −5 ≤ x ≤ 5 e exibir o gr´ afico da fun¸c˜ao usando o
comando plot colocando r´otulos e grade.
5.2 Repetir a opera¸c˜ao acima usando 50 pontos e sem usar grade.
5.3 Utilizar a fun¸c˜ao fplot2d no Exerc´ıcio 5.1 variando os argumentos opcionais.
5.4 Gerar uma tabela de 40 pontos para
y = sen(x)x, −10 ≤ x ≤ 10
e exibir o seu gr´ afico usando o comando fplot2d com r´otulos e grade.
5.5 Usar a fun¸c˜ao plot no Exerc´ıcio 5.4.
Se¸c˜ao 5.2 Gr´aficos tridimensionais
5.6 Seja a fun¸c˜ao
z = sen(x)y
2
.
Gerar uma malha com −5 ≤ x ≤ 5 e −3 ≤ y ≤ 3 usando a fun¸c˜ao meshgrid.
104 Cap´ıtulo 5. Gr´aficos
5.7 Gerar um gr´ afico usando a fun¸c˜ao plot3d.
5.8 Repetir o Exerc´ıcio 5.7 variando os argumentos opcionais.
5.9 Usando o comando surf exibir a superf´ıcie de
z = xcos(x) sen(y)
com −π ≤ x ≤ π e −π ≤ y ≤ π.
5.10
Se¸c˜ao 5.3 Janela de figura
5.11 Gravar a figura do Exerc´ıcio 5.9 no arquivo figura.eps, utilizando a janela Xscilab.
5.12
5.13
5.14
5.15
Cap´ıtulo 6
Linguagem de programa¸ c˜ao
Nos cap´ıtulos anteriores foram descritos os elementos fundamentais do SCILAB, os quais
possibilitam sua utiliza¸c˜ao em um modo interativo. Neste cap´ıtulo ser˜ao abordadas algumas
estruturas de programa¸ c˜ao que tornar˜ ao poss´ıvel desenvolver programas e fun¸c˜oes escritos
em SCILAB, tais como, estruturas condicionais e estruturas de repeti¸c˜ao.
6.1 Programa¸c˜ao
Al´em de poder entrar com cada comando de uma vez, o SCILAB permite, como qualquer
outra linguagem de programa¸ c˜ao, que seja executada uma seq¨ uˆencia de comandos escrita
em um arquivo. Por esta raz˜ao este tipo de arquivo ´e chamado de roteiro (script). Ser˜ ao
apresentados dois tipos de roteiros: programa e fun¸c˜ao.
6.1.1 Programa
Um arquivo contendo um programa ´e criado usando um editor de texto qualquer e para
executar esse programa utiliza-se o comando exec, cuja sintaxe ´e
exec(<arquivo>,<modo>)
onde a cadeia de caracteres <arquivo> determina o nome do arquivo (incluido o caminho)
com o programa a ser executado e o escalar opcional <modo> especifica como ser´a a execu¸c˜ao,
de acordo com a Tabela 6.1.
Seja o programa escrito no arquivo decsomat.sci para gerar uma matriz com elementos
aleat´ orios entre −100 e 100 e decompˆo-la na soma de trˆes matrizes: uma triangular inferior,
uma diagonal e outra triangular superior,
105
106 Cap´ıtulo 6. Linguagem de programa¸c˜ao
Tabela 6.1: Modos de execu¸c˜ao do comando exec.
<modo> Descri¸c˜ao
0 exibe resultados, n˜ao ecoa linha de comando e n˜ao exibe
o prompt --> (valor default);
-1 nada ´e exibido;
1 ecoa cada linha de comando;
2 o prompt --> ´e exibido;
3 ecoa cada linha de comando e exibe o prompt -->;
4 p´ara antes de cada prompt e continua ap´os um Enter;
7 modos 3 e 4 juntos.
// editado no arquivo decsomat.sci
// programa decomposicao_matriz
// Objetivo: decompor uma matriz aleatoria na soma de tres matrizes:
// uma triangular inferior, uma diagonal e outra triangular superior
n = input(’Ordem da matriz: ’);
// gera matriz n x n com elementos aleatorios com distribuicao uniforme
// no intervalo [0,1)
A = fix(200*(grand(n,n,’def’)-0.5*ones(n,n)));
D = diag(diag(A)); // obtem matriz diagonal
L = tril(A) - D; // matriz triangular inferior com diagonal nula
U = triu(A) - D; // matriz triangular superior com diagonal nula
A, L, D, U
Executando com <modo> = 1 para ecoar cada linha de comando,
-->exec(’decsomat.sci’,1)
produz os resultados,
-->// editado no arquivo decsomat.sci
-->// programa decomposicao_matriz
-->// Objetivo: decompor uma matriz aleatoria na soma de tres matrizes:
-->// uma triangular inferior, uma diagonal e outra triangular superior
-->n = input(’Ordem da matriz: ’);
Ordem da matriz: 3
-->// gera matriz n x n com elementos aleatorios com distribuicao uniforme
// no intervalo [0,1)
-->A = fix(200*(grand(n,n,’def’)-0.5*ones(n,n)));
-->D = diag(diag(A)); // obtem matriz diagonal
-->L = tril(A) - D; // matriz triangular inferior com diagonal nula
-->U = triu(A) - D; // matriz triangular superior com diagonal nula
-->A, L, D, U
6.1. Programa¸ c˜ao 107
A =
62. 67. 82.
- 72. - 74. - 55.
81. 93. 26.
L =
0. 0. 0.
- 72. 0. 0.
81. 93. 0.
D =
62. 0. 0.
0. - 74. 0.
0. 0. 26.
U =
0. 67. 82.
0. 0. - 55.
0. 0. 0.
Um programa tem acesso `as vari´aveis no espa¸co de trabalho e as vari´aveis criadas por ele
far˜ ao parte do espa¸co de trabalho. No exemplo acima, as matrizes A, D, L e U foram criadas
no espa¸co de trabalho.
O comando halt interrompe a execu¸c˜ao do SCILAB at´e que se tecle Enter. Qualquer
comando digitado entre o prompt e o Enter ser´a ignorado,
-->a = 1 // comando qualquer
a =
1.
-->halt // causa a interrupcao no SCILAB
halt-->b = 2 // atribui o valor 2 a variavel b
-->b // a atribuicao acima nao foi efetuada
!--error 4
Undefined variable: b
6.1.2 Subprograma function
Um outro tipo de arquivo de roteiro ´e usado para o pr´ oprio usu´ ario criar novas fun¸c˜oes para
o SCILAB. Sua sintaxe ´e
function [<par^ametros sa´ ıda>] = <nome fun¸c~ ao> (<par^ ametros entrada>)
<comandos>
endfunction
sendo function uma palavra-chave que determina o in´ıcio da fun¸c˜ao, <par^ametros sa´ ıda> ´e
um conjunto de vari´aveis contendo os argumentos gerados pela fun¸c˜ao (separados por v´ırgula
e delimitados por [ e ]), <nome fun¸c~ ao> ´e uma cadeia de caracteres que especifica o nome da
fun¸c˜ao e <par^ametros entrada> ´e um conjunto de vari´aveis com os argumentos fornecidos
108 Cap´ıtulo 6. Linguagem de programa¸c˜ao
`a fun¸c˜ao (separados por v´ırgula e delimitados por ( e )). Os <par^ametros entrada> s˜ao
opcionais e mesmo no caso de sua omiss˜ao os parˆenteses devem ser mantidos. Os <comandos>
especificam o conte´ udo da fun¸c˜ao e a palavra-chave endfunction o seu final.
Por exemplo, seja o arquivo parabola.sci contendo uma fun¸c˜ao para calcular as duas ra´ızes
de uma par´ abola,
// editado no arquivo parabola.sci
function [raiz1,raiz2] = parabola(a,b,c)
// Objetivo: calcular as duas raizes de uma parabola
// parabola(a,b,c) calcula as duas raizes da parabola
// P(X) = a*x^2 + b*x + c = 0
// retornando-as em raiz1 e raiz2.
delta = sqrt(b^2-4*a*c);
raiz1 = (-b + delta ) / (2*a);
raiz2 = (-b - delta ) / (2*a);
endfunction
Os argumentos que devem ser fornecidos `a fun¸c˜ao (parˆametros de entrada) s˜ao a, b e c e
os valores gerados pela fun¸c˜ao (parˆametros de sa´ıda) s˜ao raiz1 e raiz2. O comando exec,
apresentado na Se¸ c˜ao 6.1.1 Programa, tamb´em ´e utilizado para que as function’s editadas
em um dado arquivo passem a fazer parte da biblioteca do SCILAB para uso posterior. Por
exemplo,
-->exists(’parabola’) // verifica que a funcao parabola nao existe
ans =
0.
-->exec(’parabola.sci’,-1) // funcao carregada para o espaco de trabalho
-->exists(’parabola’) // verifica que parabola agora existe
ans =
1.
Para calcular as ra´ızes de p(x) = 16x
2
−8x + 5 faz-se,
-->[r1,r2] = parabola(16,-8,5) // executa a funcao parabola
r2 =
0.25 - 0.5i
r1 =
0.25 + 0.5i
Caso o arquivo contendo uma function seja reeditado e salvo, o comando exec deve ser
novamente executado para atualiz´ a-la no espa¸co de trabalho, fato que gera uma mensagem
de aviso.
Ao contr´ ario do programa no qual as vari´aveis s˜ao globais, em uma function a lista dos
<par^ametros entrada> e as vari´aveis internas s˜ao locais, ou seja, elas n˜ao tem acesso `as
6.1. Programa¸ c˜ao 109
vari´aveis do espa¸co de trabalho. Por sua vez, os <par^ametros sa´ ıda> s˜ao criados no espa¸co
de trabalho. No caso da function parabola acima, a vari´avel raizes ´e criada no espa¸co
de trabalho do SCILAB.
´
E possivel chamar uma function com n´ umeros diferentes de parˆ ametros de entrada ou de
sa´ıda do que aqueles definidos no arquivo que a cont´em. Isto ´e feito pela fun¸c˜ao argn, cuja
sintaxe ´e
[<n´umero par^ametros sa´ ıda>,<n´ umero par^ametros entrada>] = argn() .
Ao evocar argn dentro da function s˜ao fornecidos o <n´ umero par^ametros sa´ ıda> e o
<n´ umero par^ametros entrada>. O segundo argumento ´e opcional.
A function pegaso escrita no arquivo pegaso.sci calcula o zero pertence ao intervalo [a
b] da fun¸c˜ao definida na cadeia de caracteres funcao, utilizando o robusto e eficiente m´etodo
p´egaso [2]. Nesta function ´e utilizado o comando eval para avalia¸ c˜ao de express˜ ao, o qual
ser´a descrito na Se¸ c˜ao 4.4 Execu¸c˜ao de express˜oes.
// editado no arquivo pegaso.sci
function [Raiz,CondErro,Iter] = pegaso(funcao,a,b,Toler,IterMax,Exibe)
// Objetivo: Calcular raiz de equacao pelo metodo pegaso.
//
// PEGASO(FUNCAO,A,B,TOLER,ITERMAX,EXIBE) calcula a raiz de uma
// equacao F(X)=0 contida no intervalo [A B] com tolerancia TOLER
// e com no maximo ITERMAX iteracoes, usando o metodo pegaso,
// sendo a funcao F(X) dada na cadeia de caracteres FUNCAO.
// EXIBE especifica se os resultados intermediarios serao
// mostrados, O: nao exibe e 1: exibe.
// FUNCAO, A e B sao necessarios enquanto que TOLER, ITERMAX e
// EXIBE terao valores pre-definidos caso nao sejam fornecidos.
//
[nargsai,nargent] = argn() // numero de argumentos de saida e de entrada
if nargent < 3, error(’Numero de argumentos insuficientes’); end
if nargent < 4, Toler = 1e-10; end
if nargent < 5, IterMax = 100; end
if nargent < 6, Exibe = 0; end
x = a; Fa = eval(funcao); x = b; Fb = eval(funcao);
if Exibe ~= 0
disp(’ Calculo de raiz de equacao pelo metodo pegaso’)
disp(’iter a b x Fx delta_x’)
end
k = 0; x = b; Fx = Fb;
while 1
k = k + 1; DeltaX = -Fx / (Fb - Fa) * (b - a);
x = x + DeltaX; Fx = eval(funcao);
110 Cap´ıtulo 6. Linguagem de programa¸c˜ao
if Exibe ~= 0
mprintf(’%3i%11.5f%11.5f%11.5f%14.5e%14.5e\n’,k,a,b,x,Fx,DeltaX);
end
if ((abs(DeltaX) < Toler & abs(Fx) < Toler) | k >= IterMax), break, end
if Fx*Fb < 0 a = b; Fa = Fb; else Fa = Fa * Fb / (Fb + Fx); end
b = x; Fb = Fx;
end
Raiz = x;
if nargsai > 1, CondErro = abs(DeltaX) >= Toler | abs(Fx) >= Toler; end
if nargsai > 2, Iter = k; end
endfunction
O comando error(<mensagem>) exibe a cadeia de caracteres <mensagem> e interrompe a
execu¸c˜ao de um programa ou fun¸c˜ao.
Os argumentos funcao, a e b devem ser fornecidos sen˜ao uma mensagem de erro ser´a exibida
e a execu¸c˜ao da function interrompida. No entanto, os argumentos Toler (tolerˆancia da
raiz), IterMax (n´ umero m´ aximo de itera¸c˜oes) e Exibe (exibe resultados intermedi´arios)
s˜ao opcionais; caso n˜ao sejam inclu´ıdos na lista de argumentos de entrada ser˜ao atribu´ıdos
valores pr´e-definidos. Se forem especificados mais de seis argumentos de sa´ıda haver´ a a
exibi¸ c˜ao de uma mensagem de erro e a interrup¸c˜ao da function.
Se nenhum ou apenas um argumento de sa´ıda for especificado ent˜ ao ser´a retornado a raiz
da equa¸ c˜ao na vari´avel Raiz. Se forem dois argumentos ent˜ao al´em da Raiz ser´a retornado
a condi¸ c˜ao de erro na vari´avel CondErro. Se forem trˆes argumentos de sa´ıda ent˜ao ser˜ao
retornados Raiz, CondErro e o n´ umero de itera¸c˜oes Iter. Mais de trˆes argumentos de sa´ıda
causam a exibi¸ c˜ao de uma mensagem de erro e a n˜ao execu¸c˜ao da function pegaso.
Para calcular a raiz de f(x) = cos(x
2
− 1)

x + 1 = 0 pertencente ao intervalo [0 2], com
tolerˆ ancia ǫ = 10
−2
, com no m´ aximo 10 itera¸c˜oes, listando os resultados intermedi´arios e
retornado a raiz, a condi¸ c˜ao de erro e o n´ umero de itera¸c˜oes,
-->exec(’pegaso.sci’,0) // carrega a funcao pegaso no espaco de trabalho
-->[r,e,i] = pegaso(’cos(x^2-1)*sqrt(x+1)’,0,2,1e-2,10,1) // executa pegaso
Calculo de raiz de equacao pelo metodo pegaso
iter a b x Fx delta_x
1 0.00000 2.00000 0.47920 8.72828e-01 -1.52080e+00
2 2.00000 0.47920 0.99219 1.41128e+00 5.12995e-01
3 2.00000 0.99219 1.68045 -4.09987e-01 6.88254e-01
4 0.99219 1.68045 1.52552 3.83307e-01 -1.54933e-01
5 1.68045 1.52552 1.60038 1.54647e-02 7.48614e-02
6 1.68045 1.60038 1.60340 -1.55627e-04 3.02353e-03
i =
6.
6.1. Programa¸ c˜ao 111
e =
F
r =
1.6034004
Por sua vez, calculando a mesma raiz com os argumentos de entrada opcionais previamente
atribu´ıdos, ou seja, tolerˆancia ǫ = 10
−10
, m´ aximo de 100 itera¸c˜oes, n˜ao listando os resultados
intermedi´arios e al´em disto retornado somente a raiz e a condi¸ c˜ao de erro, faz-se
// executa pegaso com tres argumentos
-->[r,e] = pegaso(’cos(x^2-1)*sqrt(x+1)’,0,2)
e =
F
r =
1.6033703
Conforme j´a mencionado, as vari´aveis de uma function s˜ao locais, ou seja, s´o podem ser refe-
renciadas internamente, n˜ao sendo reconhecidas pelo espa¸co de trabalho e outras function’s.
No entanto, al´em do uso de argumentos, um outro modo de trocar informa¸c˜oes entre o espa¸co
de trabalho e as functions’s ´e pelo uso de vari´aveis globais. A declara¸c˜ao
global <lista de vari´aveis>
faz com que as vari´aveis especificadas na <lista de vari´aveis>, separadas por branco,
tornem-se globais e portanto esta declara¸c˜ao deve aparecer no programa e nas function’s
de interesse. Por exemplo, seja a fun¸c˜ao no arquivo soma diagonal.sci para calcular a
soma da diagonal da matriz resultante do produto das matrizes A e B definidas no espa¸co de
trabalho,
// editado no arquivo soma_diagonal.sci
function somadiag = soma_diagonal
// Objetivo:
// calcular a soma da diagonal do produto das matrizes A*B do espaco de trabalho
global A B
somadiag = sum(diag(A*B));
endfunction
A sua execu¸c˜ao fornece,
-->exec(’soma_diagonal.sci’,0) // carrega soma_diagonal no espaco de trabalho
-->A = [1 2; 3 4]; B = [5 6; 7 8]; // define as matrizes A e B
-->somdg = soma_diagonal() // executa a funcao soma_diagonal
somdg =
69.
O uso de vari´aveis globais dificulta o entedimento e a modifica¸ c˜ao das function’s, al´em
de tornar os m´ odulos do programa menos independentes. Por estas raz˜ oes, a utiliza¸c˜ao de
vari´aveis globais deve ser evitada.
112 Cap´ıtulo 6. Linguagem de programa¸c˜ao
O comando return colocado dentro de uma function causa um retorno normal para o
comando seguinte `aquele que chamou a function. J´a o comando
[<varesp 1>,...,<varesp n>] = return (<varloc 1>,...,<varloc n>)
faz com que as vari´aveis locais <varloc i> sejam copiadas no espa¸co de trabalho com os
correspondentes nomes <varesp i>. Seja a fun¸c˜ao descrita no arquivo consistencia.sci,
// editado no arquivo consistencia.sci
function y = consiste(a,b)
// Objetivo: exemplo de consistencia de dados
if a <= 0 | b > 1
y = %i
[e,f] = return(a,b)
end
y = log10(a) + sqrt(1-b);
endfunction
O seu uso resulta em,
-->exec(’consistencia.sci’,0) // carrega a function do arquivo
-->x = consiste(100,-3) // uso da function com argumentos validos
x =
4.
-->x = consiste(100,3) // uso com argumentos invalidos
x =
i
-->e,f // verifica que as variaveis estao no espaco de trabalho
e =
100.
f =
3.
Uma fun¸c˜ao pode tamb´em ser definida na janela de comando pela fun¸c˜ao deff,
deff(’[<param sa´ ıda>] = <nome fun¸c~ ao> (<param entrada>)’, [<comandos>])
onde <param sa´ ıda> ´e uma lista contendo os argumentos gerados pela fun¸c˜ao (separados por
v´ırgula e delimitados por [ e ]), <nome fun¸c~ ao> ´e uma cadeia de caracteres que especifica
o nome da fun¸c˜ao e <param entrada> ´e uma lista com os argumentos fornecidos ` a fun¸c˜ao
(separados por v´ırgula e delimitados por ( e )). A matriz de caracteres <comandos> especifica
o corpo da fun¸c˜ao. Por exemplo, seja a fun¸c˜ao para multiplicar e dividir dois n´ umeros,
-->deff(’[mul,div] = operacao(a,b)’,[’mul = a * b’;’div = a / b’])//define funcao
-->[multiplica, divide] = operacao(3,2) // uso da funcao operacao
divide =
1.5
multiplica =
6.
6.2. Estruturas condicionais 113
6.2 Estruturas condicionais
Uma estrutura condicional permite a escolha do grupo de comandos a serem executados
quando uma dada condi¸ c˜ao for satisfeita ou n˜ao, possibilitando desta forma alterar o fluxo
natural de comandos. Esta condi¸ c˜ao ´e representada por uma express˜ ao l´ ogica.
6.2.1 Estrutura if-end
A estrutura condicional mais simples do SCILAB ´e
if <condi¸ c~ ao>
<comandos>
end
Se o resultado da express˜ao l´ ogica <condi¸ c~ ao> for T (verdadeiro) ent˜ao a lista <comandos>
ser´a executada. Se o resultado for F (falso) ent˜ao <comandos> n˜ao ser˜ao executados. Con-
sidere o programa logaritmo decimal.sci,
// programa logaritmo_decimal
// Objetivo: calcular logaritmo decimal
x = input(’Entre com x: ’);
if x > 0
LogDec = log10(x);
disp([x LogDec]);
end
e a execu¸c˜ao para x = 0.001,
-->exec(’logaritmo_decimal.sci’,-1)
Entre com x: 0.001
0.001 - 3.
Neste exemplo, o logaritmo decimal de x ser´a atribu´ıdo a LogDec se, e somente se, o valor
de x for maior que 0.
6.2.2 Estrutura if-else-end
No caso de haver duas alternativas, uma outra estrutura condicional deve ser usada
if <condi¸ c~ ao>
<comandos 1>
else
<comandos 2>
end
Se o resultado da express˜ao l´ ogica <condi¸ c~ ao> for T (verdadeiro) ent˜ao somente a lista
contendo <comandos 1> ser´a executada. Se <condi¸ c~ ao> for F (falso) ent˜ao ser´a a lista
114 Cap´ıtulo 6. Linguagem de programa¸c˜ao
<comando 2> a ´ unica a ser executada. O programa funcao modular.sci utiliza a fun¸c˜ao
modular f(x) = |2x|. Se x for positivo ou nulo ent˜ao ser´a atribu´ıdo `a vari´avel fx o resultado
de 2*x, todavia, se x for negativo ent˜ao fx ser´a igual a -2*x,
// programa funcao_modular
// Objetivo: avaliar uma funcao modular
x = input(’Entre com x: ’);
if x >= 0
fx = 2 * x;
else
fx = -2 * x;
end
disp([x fx]);
Executando com x = -3 produz,
-->exec(’funcao_modular.sci’,-1)
Entre com x: -3
- 3. 6.
6.2.3 Estrutura if-elseif-end
Quando houver mais de duas alternativas, a estrutura if-else-end do SCILAB torna-se
if <condi¸ c~ ao 1>
<comandos 1>
elseif <condi¸ c~ ao 2>
<comandos 2>
elseif <condi¸ c~ ao 3>
<comandos 3>
. . .
else
<comandos n>
end
A lista <comandos 1> ser´a executada se <condi¸ c~ ao 1> for igual a T (verdadeiro); j´ a a lista
<comandos 2> ser´a executada se <condi¸ c~ ao 2> for T e assim para as outras condi¸ c˜oes. Se
nenhuma das condi¸ c˜oes for T ent˜ao <comandos n> ser´a executada. Quando a <condi¸ c~ ao i>
for satisfeita e os <comandos i> executados, a estrutura if-elseif-end ser´a abandonada,
ou seja, o controle do processamento ser´a transferido para o comando imediatamente ap´os
o end.
Seja o programa modulo.sci para calcular o valor absoluto de um n´ umero real ou complexo,
// programa modulo
// Objetivo: calcular o valor absoluto de um numero real ou complexo
6.2. Estruturas condicionais 115
a = input(’Entre com a: ’);
if imag(a) ~= 0
b = sqrt(real(a).^2+imag(a).^2);
elseif a < 0
b = -a;
else
b = a;
end
disp([a b]);
Para a = 3 - 4*%i,
--->exec(’modulo.sci’,-1)
Entre com a: 3 - 4 * %i
3. - 4.i 5.
Deste modo foi executado o primeiro comando para o qual a condi¸ c˜ao imag(a) ~= 0 foi
satisfeita. Assim, na estrutura if-elseif-end uma ´ unica lista de comandos ´e executada.
6.2.4 Estrutura select-case-end
Esta estrutura ´e similar a if-elseif-end e sua sixtaxe ´e
select <express~ao>
case <express~ao 1> then <comandos 1>
case <express~ao 2> then <comandos 2>
case <express~ao 3> then <comandos 3>
. . .
case <express~ao n> then <comandos n>
else <comandos e>
end
A lista <comandos 1> ser´a executada se <express~ao> for igual a <express~ao 1>. A lista
<comandos 2> ser´a executada se <express~ao> for igual a <express~ao 2> e assim para as
outras express˜oes. Se <express~ao> n˜ao for igual a nenhuma das express˜ oes anteriores ent˜ao
<comandos e> ser´a executada. Cabe ressaltar que somente uma lista de comandos ser´a
executada.
Considere o programa posicao poltrona.sci para determinar a posi¸c˜ao de uma poltrona
para quem entra em um ˆonibus,
// programa posicao_poltrona
// Objetivo: determinar a posicao de uma poltrona em onibus
poltrona = input(’Entre com o numero da poltrona: ’);
fila = fix(poltrona/4) + 1;
select modulo(poltrona,4)
116 Cap´ıtulo 6. Linguagem de programa¸c˜ao
case 0 then
if poltrona > 0
fila = fila - 1;
posicao = ’esquerda / corredor’
mprintf(’poltrona%3i na fila%3i ’’a %s\n’,poltrona,fila,posicao)
else
posicao = ’nao existe’
mprintf(’poltrona%3i %s\n’,poltrona,posicao)
end
case 1 then
posicao = ’direita / janela’
mprintf(’poltrona%3i na fila%3i ’’a %s\n’,poltrona,fila,posicao)
case 2 then
posicao = ’direita / corredor’
mprintf(’poltrona%3i na fila%3i ’’a %s\n’,poltrona,fila,posicao)
case 3 then
posicao = ’esquerda / janela’
mprintf(’poltrona%3i na fila%3i ’’a %s\n’,poltrona,fila,posicao)
else
posicao = ’nao existe’
mprintf(’poltrona%3i %s\n’,poltrona,posicao)
end
Por exemplo, as posi¸c˜oes das poltronas de n´ umeros 15, 42 e −5 s˜ao
-->exec(’posicao_poltrona.sci’,-1)
Entre com o numero da poltrona: 15
poltrona 15 na fila 4 ’a esquerda / janela
-->exec(’posicao_poltrona.sci’,-1)
Entre com o numero da poltrona: 42
poltrona 42 na fila 11 ’a direita / corredor
-->exec(’posicao_poltrona.sci’,-1)
Entre com o numero da poltrona: -5
poltrona -5 nao existe
6.3 Estruturas de repeti¸ c˜ao
As estruturas de repeti¸c˜ao fazem com que uma seq¨ uˆencia de comandos seja executada re-
petidamente at´e que uma dada condi¸ c˜ao de interrup¸c˜ao seja satisfeita. O SCILAB possui
duas estruturas de repeti¸c˜ao, as estruturas for-end e a while-end, com as quais ´e poss´ıvel
construir uma terceira estrutura com interrup¸c˜ao no interior.
6.3. Estruturas de repeti¸ c˜ao 117
6.3.1 Estrutura for-end
A estrutura for-end permite que um grupo de comandos seja repetido um n´ umero deter-
minado de vezes. Sua sintaxe ´e
for <vari´avel>=<arranjo>
<comandos>
end
onde <vari´avel> ´e a vari´avel-de-controle que assume todos os valores contidos no vetor
linha <arranjo>. Assim, o n´ umero de repeti¸c˜oes da lista <comandos> ´e igual ao n´ umero
de elementos no vetor <arranjo>. A vari´avel-de-controle n˜ao pode ser redefinida dentro da
estrutura for-end.
O programa primeiros impares.sci mostra que a soma dos n primeiros n´ umeros ´ımpares
´e igual ao quadrado de n,
// programa primeiros_impares
// Objetivo: verificar propriedade dos numeros impares
n = input(’Entre com n: ’);
Soma = 0;
for i = 1:2:2*n-1
Soma = Soma + i;
end
disp([Soma n^2])
Quando executado para n = 5,
-->exec(’primeiros_impares.sci’,-1)
Entre com n: 5
25. 25.
Para n = 5 a vari´avel-de-controle i assume os valores 1 3 5 7 9, cuja soma ´e igual a 25.
Para mostrar que as estruturas for-end podem estar encadeadas, considere o programa
soma matriz.sci para calcular a soma dos elementos das linhas, colunas e diagonal de uma
matriz,
// programa soma_matriz
// Objetivo:
// calcular a soma dos elmentos das linhas, colunas e diagonal de matriz
A = input(’Entre com a matriz: ’);
[nlin,ncol] = size(A);
Soma_Linhas = zeros(nlin,1);
Soma_Colunas = zeros(1,ncol);
Soma_Diagonal = 0;
for i = 1:nlin
Soma_Diagonal = Soma_Diagonal + A(i,i);
118 Cap´ıtulo 6. Linguagem de programa¸c˜ao
for j = 1:ncol
Soma_Linhas(i) = Soma_Linhas(i) + A(i,j);
Soma_Colunas(j) = Soma_Colunas(j) + A(i,j);
end
end
A, Soma_Linhas, Soma_Colunas, Soma_Diagonal
Um quadrado m´ agico de ordem n ´e uma matriz com elementos n˜ao repetidos e com valores
entre 1 e n
2
, tal que a soma dos elementos das linhas, das colunas e da diagonal sejam iguais.
Para o quadrado m´ agico de ordem 4,
-->exec(’soma_matriz.sci’,0)
Entre com a matriz: [16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]
A =
16. 2. 3. 13.
5. 11. 10. 8.
9. 7. 6. 12.
4. 14. 15. 1.
Soma_Linhas =
34.
34.
34.
34.
Soma_Colunas =
34. 34. 34. 34.
Soma_Diagonal =
34.
Cumpre observar que o SCILAB possui comandos para determinar estes somat´ orios de um
modo bem simples, pelo uso da fun¸c˜ao sum que fornece a soma dos elementos de uma matriz
(ver Tabela 3.3 na p´agina 45).
6.3.2 Estrutura while-end
A estrutura while-end, ao contr´ ario da for-end, repete um grupo de comandos um n´ umero
indeterminado de vezes. Sua sintaxe ´e
while <condi¸ c~ ao>
<comandos 1>
[else <comandos 2>]
end
Enquanto a express˜ao l´ ogica <condi¸ c~ ao> for T (verdadeiro) a lista <comandos 1> ser´a repe-
tida. Quando ela for F (falsa) ent˜ao a lista <comandos 2> ser´a executada. O comando else
´e opcional.
Por exemplo, seja o programa precisao.sci para determinar a precis˜ao de um computador,
6.3. Estruturas de repeti¸ c˜ao 119
// programa precisao
// Objetivo: determinar a precisao de um computador
n = 0;
Epsilon = 1;
while 1 + Epsilon > 1
n = n + 1;
Epsilon = Epsilon / 2;
end
n, Epsilon, %eps
Quando executado fornece
-->exec(’precisao.sci’,0)
n =
53.
Epsilon =
1.110D-16
%eps =
2.220D-16
Epsilon ´e a chamada precis˜ao da m´ aquina ǫ, ou seja, o maior n´ umero que somado a 1 ´e
igual a 1. Para computadores com aritm´etica IEEE ǫ = 2
−53
. Comparada com a vari´avel
especial %eps = 2
−52
do SCILAB,
-->1 + %eps - 1
ans =
2.220D-16
-->1 + Epsilon - 1
ans =
0.
Note que quando %eps for somado a 1 resulta um n´ umero maior que 1. O mesmo n˜ao ocorre
com Epsilon, porque qualquer valor igual ou menor do que ele somado a 1 ser´a simplesmente
1, ou seja, o computador j´a n˜ao consegue mais representar 1 + ǫ.
6.3.3 Estrutura com interrup¸c˜ao no interior
A estrutura while-end permite que um grupo de comandos seja repetido um n´ umero inde-
terminado de vezes, no entanto, a condi¸ c˜ao de interrup¸c˜ao ´e testada no in´ıcio da estrutura.
Em v´ arias situa¸ c˜oes em programa¸ c˜ao se faz necess´ario interromper a execu¸c˜ao da repeti¸c˜ao
verificando a condi¸ c˜ao no interior ou final da estrutura e n˜ao somente no seu in´ıcio.
O comando break interrompe a execu¸c˜ao de uma estrutura while-end ou for-end e trans-
fere a execu¸c˜ao para o comando imediatamente seguinte ao end. Em repeti¸c˜oes aninhadas, o
break interrompe a execu¸c˜ao apenas da estrutura mais interna. Assim, uma repeti¸c˜ao com
120 Cap´ıtulo 6. Linguagem de programa¸c˜ao
condi¸ c˜ao de interrup¸c˜ao no interior pode ter a forma
while %T
<comandos 1>
if <condi¸ c~ ao>
break
end
<comandos 2>
end
A estrutura while-end ´e executada indefinidamente a princ´ıpio, pois a condi¸ c˜ao do while
´e sempre T (verdadeiro). Contudo, quando a <condi¸ c~ ao> do if for satisfeita o comando
break ser´a executado causando a interrup¸c˜ao da repeti¸c˜ao while-end.
Seja o programa racional.sci para fornecer a aproxima¸c˜ao racional de um n´ umero positivo
com uma dada tolerˆancia,
// programa racional
// Objetivo: fornecer a aproximacao racional de numero positivo com dada precisao
while %T
numero = input(’Entre com um numero > 0: ’);
if numero <= 0
break
end
tol = input(’Entre com tolerancia: ’);
[num,den] = rat(numero,tol);
disp([numero num den numero-num/den])
end
Por exemplo, para

2 e π,
-->exec(’racional.sci’,0)
Entre com um numero > 0: sqrt(2)
Entre com tolerancia: 1e-5
1.4142136 239. 169. 0.0000124
Entre com um numero > 0: %pi
Entre com tolerancia: 1e-10
3.1415927 208341. 66317. 1.224D-10
Entre com um numero > 0: 0
Ele lista continuamente a representa¸ c˜ao racional de um n´ umero fornecido enquanto este for
positivo.
6.4. Depura¸c˜ao de programa 121
6.4 Depura¸ c˜ao de programa
O comando pause interrompe a execu¸c˜ao de um programa e transfere o controle para o
teclado; quando em uma fun¸c˜ao ele interrompe a sua execu¸c˜ao. No modo de pausa aparece
o s´ımbolo do prompt indicando o n´ıvel da pausa, por exemplo, -1->.
´
E disponibilizado,
ent˜ao, um novo espa¸co de trabalho no qual todas as vari´aveis de n´ıvel mais baixo est˜ao
acess´ıveis, mesmo as vari´aveis de uma fun¸c˜ao.
Para voltar ao espa¸co de trabalho que evocou a pausa usa-se o comando return. Conforme
mencionado na Se¸ c˜ao 6.1.2 Subprograma function o comando
[<varesp 1>,...,<varesp n>] = return (<varloc 1>,...,<varloc n>)
faz com que as vari´aveis locais <varloc i> sejam copiadas no espa¸co de trabalho que evocou
a pausa com os correspondentes nomes <varesp i>. Se o comando n˜ao for usado ent˜ao as
vari´aveis de n´ıvel mais baixo est˜ao protegidas e n˜ao podem ser modificadas. Seja a fun¸c˜ao
no arquivo avalia.sci,
// editado no arquivo avalia.sci
function expressao = avalia(a)
divide = a/10;
raiz = sqrt(a);
logdec = log10(a)
expressao = divide + raiz + logdec;
endfunction
e sua execu¸c˜ao,
-->exec(’avalia.sci’,-1) // carrega a funcao para o espaco de trabalho
-->valor = avalia(100) // avalia a funcao
valor =
22.
-->exists(’raiz’) // verifica a inexistencia da variavel local raiz
ans =
0.
A vari´avel raiz n˜ao existe no espa¸co de trabalho por se tratar de uma vari´avel local. Se for
colocado o comando pause, todas as vari´aveis definidas antes dele estar˜ ao dispon´ıveis. Por
exemplo, se for colocado depois de raiz = sqrt(a);
-->exec(’avalia.sci’,-1) // carrega a funcao modificada
Warning : redefining function: avalia. Use funcprot(0) to avoid this message
-->valor = avalia(100) // avalia a funcao entrando no modo de pausa
-1->raiz // existencia da variavel local raiz no novo espaco de trabalho
ans =
10.
122 Cap´ıtulo 6. Linguagem de programa¸c˜ao
-1->exists(’logdec’) // inexistencia da variavel logdec
ans =
0.
-1->return
valor =
22.
Neste caso a vari´avel local raiz est´a dispon´ıvel no espa¸co de trabalho e logdec n˜ao est´a
porque ela foi definida depois do pause.
6.5 Exerc´ıcios
Se¸c˜ao 6.1 Programa¸c˜ao
6.1 Criar o arquivo almaxmin.sci
n = input(’Ordem da matriz: ’);
A = rand(n,n);
maior = max(A)
menor = min(A)
Executar o programa acima para n = 5, 10 e 30.
6.2 Escrever uma function para calcular a norma-2 de um vetor.
6.3 Escrever uma function para calcular a norma-∞ de um vetor.
6.4 Dada a matriz triangular inferior L = {l
ij
} e o vetor c, escrever uma function para
calcular y tal que Ly = c:
_
_
_
_
_
_
_
l
11
l
21
l
22
l
31
l
32
l
33
.
.
.
.
.
.
.
.
.
l
n1
l
n2
l
n3
· · · l
nn
_
_
_
_
_
_
_
_
_
_
_
_
_
_
y
1
y
2
y
3
.
.
.
y
n
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
c
1
c
2
c
3
.
.
.
c
n
_
_
_
_
_
_
_
.
6.5 Dada a matriz triangular superior U = {u
ij
} e o vetor d, escrever uma function para
calcular x tal que Ux = d:
_
_
_
_
_
_
_
u
11
u
12
u
13
· · · u
1n
u
22
u
23
· · · u
2n
u
33
· · · u
3n
.
.
.
u
nn
_
_
_
_
_
_
_
_
_
_
_
_
_
_
x
1
x
2
x
3
.
.
.
x
n
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
d
1
d
2
d
3
.
.
.
d
n
_
_
_
_
_
_
_
.
6.5. Exerc´ıcios 123
Se¸c˜ao 6.2 Estruturas condicionais
6.6 Qual o valor de LogDec no exemplo sobre a estrutura if-end mostrada na Se¸ c˜ao 6.2.1
para x = 2?
6.7 Encontrar o valor de fx no exemplo sobre if-else-end da Se¸ c˜ao 6.2.2 para x = 10.
6.8 Achar o valor de b no exemplo de if-elseif-end da Se¸ c˜ao 6.2.3 para a = -3.
6.9 Qual o valor de b no exemplo sobre a estrutura if-elseif-end da Se¸ c˜ao 6.2.3 para a
= -3+4*%i?
6.10 Encontrar as posi¸c˜oes das poltronas n´ umeros 4, 25 e 40 usando o exemplo da estrutura
select-case-end da Se¸ c˜ao 6.2.4.
Se¸c˜ao 6.3 Estruturas de repeti¸c˜ao
6.11 Determinar o valor de Soma no exemplo sobre a estrutura for-end mostrada na
Se¸ c˜ao 6.3.1 para n = 7.
6.12 Calcular a soma das linhas, das colunas e da diagonal de uma matriz de Toeplitz de
ordem 5.
6.13 Explicar como ´e feita a determina¸ c˜ao da precis˜ao de um computador.
6.14 Calcular a norma-2 do vetor x = [1e200 2e200 3e200] usando a function escrita
no Exerc´ıcio 6.2. Qual a altera¸c˜ao a ser feita para que a fun¸c˜ao calcule corretamente?
6.15 Calcular a raiz de f(x) = sen(x)x + 4 = 0 que est´a no intervalo [1 5], utilizando a
function pegaso mostrada na Se¸ c˜ao 6.1.2.
Se¸c˜ao 6.4 Depura¸c˜ao de programa
6.16
6.17
6.18
6.19
6.20
124 Cap´ıtulo 6. Linguagem de programa¸c˜ao
Cap´ıtulo 7
Comandos de entrada e sa´ıda
O SCILAB fornece algumas facilidades para especificar o formato de sa´ıda dos resultados,
grava¸c˜ao e leitura das vari´aveis de uma sess˜ ao de trabalho e de arquivos.
7.1 Formato de exibi¸c˜ao
Para saber o valor de uma vari´avel basta entrar com o seu nome. O resultado ´e exibido
usando um formato pr´e-definido,
-->%pi
%pi =
3.1415927
O comando disp(<vari´avel>) ´e usado para exibir o conte´ udo de <vari´ avel> sem mostrar
o seu nome ou para exibir uma cadeia de caracteres contida na <vari´ avel>.
-->disp(’numeros aleatorios entre 0 e 1’), disp(grand(2,6,’def’))
numeros aleatorios entre 0 e 1
0.8147237 0.9057919 0.1269868 0.9133759 0.6323592 0.0975404
0.135477 0.8350086 0.9688678 0.2210340 0.3081671 0.5472206
Ao exibir um resultado num´erico o SCILAB segue diversas regras. Se o resultado for um
n´ umero real (ponto flutuante), ele ´e mostrado com dez caracteres, incluindo o ponto decimal
e o sinal. Quando o sinal for positivo ´e exibido um caracter branco em seu lugar. Se os
d´ıgitos significativos do resultado estiverem fora desta faixa ent˜ao o resultado ser´a exibido
em nota¸c˜ao cient´ıfica,
-->disp([%e*1e-5 %e*1e5 %e*1e-10 %e*1e10])
0.0000272 271828.18 2.718D-10 2.718D+10
125
126 Cap´ıtulo 7. Comandos de entrada e sa´ıda
A fun¸c˜ao format(<tipo>,<d´ ıgitos>) ´e usada para alterar o formato num´erico de exibi¸ c˜ao,
onde <tipo> ´e um dos caracteres ’v’ ou ’e’ para indicar formato vari´avel ou em nota¸c˜ao
cient´ıfica, respectivamente. O parˆ ametro <d´ ıgitos> indica o n´ umero m´ aximo de caracteres a
serem exibidos, incluindo sinal, ponto decimal e no caso de formato ’e’ os quatro caracteres
referentes ` a potˆencia de 10. Caso esse parˆ ametro n˜ao seja fornecido ´e assumido o valor 10.
Uma vez definido o formato de exibi¸ c˜ao ele ´e mantido at´e que seja modificado por um outro
comando format,
-->format(’v’,8), %pi // pi com formato variavel com 8 caracteres
ans =
3.14159
-->format(’v’,12), %pi // pi com formato variavel com 12 caracteres
ans =
3.141592654
-->format(’e’,8), %eps // eps em notacao cientifica com 8 caracteres
ans =
2.2D-16
-->format(’e’,12), %eps // eps em notacao cientifica com 12 caracteres
ans =
2.22045D-16
-->sqrt(%eps) // verificar que o ultimo formato e’ mantido
ans =
1.49012D-08
A fun¸c˜ao mprintf exibe dados formatados pertencentes ao espa¸co de trabalho na tela prin-
cipal do SCILAB. Sua sintaxe ´e
mprintf(<formato>,<vari´aveis>)
onde a cadeia de caracteres <formato> cont´em caracteres alfanum´ericos e/ou especifica¸c˜oes
de convers˜ao para exibir na tela a lista <vari´aveis>. Estas especifica¸c˜oes de convers˜ao s˜ao
delimitadas pelo caracter % e uma das letras i, e, f, g ou s, de acordo com a Tabela 7.1.
Tabela 7.1: Formatos de exibi¸ c˜ao.
Formato Especifica¸c˜ao
%ni usado para valores inteiros, sendo n o tamanho do campo de exibi¸ c˜ao;
%n.df nota¸c˜ao na forma [−]888.888, sendo n o tamanho do campo (n´ umero
total de caracteres exibidos) e d o n´ umero de d´ıgitos decimais;
%n.de nota¸c˜ao na forma [−]8.888 ±88, sendo n o tamanho do campo (n´ umero
total de caracteres exibidos) e d o n´ umero de d´ıgitos decimais;
%n.dg equivalente a %n.de ou %n.df, dependendo de qual formato for mais curto,
al´em disso os zeros insignificantes n˜ao s˜ao exibidos;
%ns exibe caracteres em um campo de tamanho n.
7.2. Espa¸ co de trabalho 127
Deste modo,
-->mprintf(’a precisao deste computador =%12.5e\n’,%eps/2)
a precisao deste computador = 1.11022e-16
onde \n ´e usado para come¸ car uma nova linha. Quando for necess´ario ter o caracter (’)
exibido basta us´ a-lo duas vezes,
-->mprintf(’o valor de pi e’’ aproximadamente%13.10f\n’,%pi)
o valor de pi e’ aproximadamente 3.1415926536
Assim, a exibi¸ c˜ao pode ser feita pelos comandos disp e mprintf,
-->x = 1:0.5:3;
-->M = [x;sqrt(x)]’;
-->format(’v’,10)
-->disp(M)
1. 1.
1.5 1.2247449
2. 1.4142136
2.5 1.5811388
3. 1.7320508
-->mprintf(’%5.3f%10.5f\n’,M)
1.000 1.00000
1.500 1.22474
2.000 1.41421
2.500 1.58114
3.000 1.73205
7.2 Espa¸co de trabalho
Durante uma sess˜ ao as vari´aveis utilizadas residem no espa¸co de trabalho do SCILAB e
podem ser armazenadas em um arquivo quando desejado. Conforme visto, o comando who
lista o nome das vari´aveis que est˜ao sendo usadas, ou seja, que est˜ao presentes no espa¸co
de trabalho. Por sua vez, o comando whos fornece informa¸c˜oes mais detalhadas sobre essas
vari´aveis. Estes dois comandos listam as vari´aveis criadas pelo usu´ ario e as definidas pelo
pr´ oprio SCILAB. Por exemplo, no in´ıcio de uma sess˜ ao, quando o usu´ ario criou apenas as
vari´aveis a, b, C e d, tem-se,
-->a = 2.5, b = [1.2 3.2 -5.4], C = [2.1 3.4; 6.1 -9.3], d = ’caracteres’
a =
2.5
b =
1.2 3.2 - 5.4
C =
2.1 3.4
128 Cap´ıtulo 7. Comandos de entrada e sa´ıda
6.1 - 9.3
d =
caracteres
-->whos
Name Type Size Bytes
whos function 9000
d string 1 by 1 64
C constant 2 by 2 48
b constant 1 by 3 40
a constant 1 by 1 24
M constant 5 by 2 96
.
. algumas variaveis foram removidas da lista
.
%t boolean 1 by 1 24
%f boolean 1 by 1 24
%eps constant 1 by 1 24
%io constant 1 by 2 32
%i constant 1 by 1 32
%e constant 1 by 1 24
%pi constant 1 by 1 24
As vari´aveis no espa¸co de trabalho criadas pelo usu´ ario podem ser removidas, incondicio-
nalmente, usando o comando clear
--> clear tempo raiz remove as vari´aveis tempo e raiz,
--> clear remove todas as vari´aveis do espa¸co de trabalho.
Aten¸ c˜ao: n˜ao ser´a solicitada a confirma¸c˜ao. Todas
as vari´aveis estar˜ ao, irremediavelmente, removidas.
7.2.1 Gravar dados
O comando save ´e usado para gravar as vari´aveis do espa¸co de trabalho em um arquivo.
Sua sintaxe ´e
save(<nome do arquivo>,<vari´aveis>)
onde <nome do arquivo> ´e uma cadeia de caracteres que especifica o nome do arquivo
bin´ ario onde vari´aveis do espa¸co de trabalho ser˜ao gravadas e <vari´ aveis> ´e uma lista
de nomes que define quais as vari´aveis do espa¸co de trabalho criadas pelo usu´ ario ser˜ao
gravadas no arquivo <nome do arquivo>. As vari´aveis devem estar separadas por v´ırgula.
Se os nomes <vari´aveis> n˜ao forem especificados, ent˜ao todas as vari´aveis do espa¸cco de
trabalho criadas pelo usu´ ario ser˜ao salvas. Por exemplo, considerando as vari´aveis a, b, C e
d criadas acima,
-->save(’quatro.dat’) // salva as quatro variaveis no arquivo ’quatro.dat’
-->save(’duas.dat’,b,d) // salva as variaveis b e d no arquivo ’duas.dat’
7.2. Espa¸ co de trabalho 129
7.2.2 Recuperar dados
O comando load ´e usado para recuperar os dados gravados em um arquivo pelo comando
save e coloc´a-los de volta no espa¸co de trabalho. Sua sintaxe ´e
load(<nome do arquivo>,<vari´aveis>)
onde <nome do arquivo> e <vari´aveis> s˜ao os mesmos definidos para o comando save.
Se o arquivo contiver uma vari´avel com o mesmo nome de uma j´ a existente no espa¸co de
trabalho ent˜ao o comando load faz com que a vari´avel do espa¸co de trabalho seja substitu´ıda
pela vari´avel existente no arquivo,
-->clear // remove todas as variaveis do espaco de trabalho
-->d = ’novos’ // atribui novo valor a variavel d
d =
novos
-->load(’duas.dat’,’b’,’d’) // recupera as variaveis b e d do arquivo ’duas.dat’
-->d // verifica o valor de d
ans =
caracteres
7.2.3 Entrada de dados
A leitura de dados pelo teclado ´e feita pelo comando input, cuja sintaxe ´e
<vari´avel> = input(<mensagem>,’string’)
O comando acima exibe a cadeia de caracteres <mensagem> e espera at´e que o usu´ ario forne¸ca
o valor de <vari´avel> pelo teclado. O segundo argumento ’string’ ou simplesmente ’s’
´e opcional e informa que <vari´avel> ´e uma cadeia de caracteres,
-->Indice = input(’entre com o indice: ’)
entre com o indice: 13
Indice =
13.
// cadeia de caracteres com parametro ’s’
-->texto = input(’fornecer o texto: ’,’s’)
fornecer o texto: programa SCILAB
texto =
programa SCILAB
// caracteres sem parametro ’s’, mas com ’ ’
-->texto = input(’fornecer o texto: ’)
fornecer o texto: ’programa SCILAB’
texto =
programa SCILAB
130 Cap´ıtulo 7. Comandos de entrada e sa´ıda
7.2.4 Janela de mensagem
A intera¸c˜ao SCILAB / usu´ ario pode tamb´em ser feita por meio de janelas de mensagens
utilizando comandos, tais como, x mdialog e x message. O comando
<resultado> = x mdialog(<t´ıtulo>,<r´otulos i>,<valores i>)
exibe uma janela contendo a cadeia de caracteres <t´ ıtulo> com uma mensagem, v´ arios
vetores de caracteres <r´ otulos i> com o nome do i-´esimo valor requerido e os vetores de
caracteres <valores i> com os valores iniciais sugeridos, correspondentes a <r´ otulos i>.
Se for acionado o bot˜ ao Ok ent˜ao <resultado> receber´ a os valores sugeridos ou os outros
valores digitados; caso seja acionado o bot˜ ao Cancel ent˜ao <resultado> = []. Por exemplo,
-->nomes = [’Comprimento:’;’Largura:’;’Altura:’] // define os nomes das variaveis
nomes =
!Comprimento: !
! !
!Largura: !
! !
!Altura: !
-->valor_ini = [’’;’’;’’] // define os valores iniciais (nenhum no caso)
valor_ini =
! !
! !
! !
! !
! !
-->dimensao = x_mdialog(’Entre com as dimensoes’, nomes, valor_ini)// abre janela
apresenta a janela mostrada na Figura 7.1. Digita-se os valores desejados e pressiona-se
Ok. O vetor de caracteres dimensao ´e apresentado. Em seguida converte os caracteres para
n´ umeros, utilizando a fun¸c˜ao eval (ver Se¸ c˜ao 4.4 Execu¸c˜ao de express˜ oes),
dimensao =
!1.23 !
! !
!4.56 !
! !
!7.89 !
-->com = eval(dimensao(1)) // valor numerico do comprimento
com =
1.23
-->lar = eval(dimensao(2)) // valor numerico da largura
lar =
4.56
-->alt = eval(dimensao(3)) // valor numerico da altura
alt =
7.89
7.3. Di´ario 131
Figura 7.1: Janela do comando x mdialog.
Por sua vez,
<resultado> = x message(<t´ıtulo>,<bot~ oes i>)
exibe uma janela contendo a cadeia de caracteres <t´ ıtulo> com uma mensagem e v´ arios
vetores de caracteres <bot~oes i> com as op¸c˜oes. Se for acionado o i-´esimo bot˜ ao ent˜ao
<resultado> = i. Se <bot~oes i> n˜ao for especificado assume-se o valor Ok. Por exemplo,
o comando
-->resp = x_message([’A matriz e’’ simetrica.’; ’Usar Cholesky?’],[’Sim’ ’Nao’])
apresenta a janela mostrada na Figura 7.2. Se for escolhida a op¸c˜ao Sim ent˜ao a vari´avel
resp receber´ a o valor 1,
resp =
1.
Figura 7.2: Janela do comando x message.
7.3 Di´ario
Todos os comandos solicitados pelo usu´ ario e as respostas fornecidas pelo SCILAB (com ex-
cess˜ ao de gr´ aficos) podem ser gravados em um arquivo ASCII para que possam ser impressos
ou mesmo inclu´ıdos em algum relat´orio, como foi feito neste texto!
132 Cap´ıtulo 7. Comandos de entrada e sa´ıda
Para esta grava¸c˜ao basta usar o comando diary(<nome do arquivo>), a partir do qual a
intera¸c˜ao SCILAB / usu´ ario ser´a registrada no arquivo, cujo nome ´e dado pela cadeia de
caracteres <nome do arquivo>. A finaliza¸c˜ao do registro ´e feita por diary(0). Por exemplo,
-->diary(’diario’) // cria o arquivo diario
-->a = 1, b = sqrt(%eps)
a =
1.
b =
1.490D-08
-->diary(0) // fecha o arquivo diario
O conte´ udo do arquivo diario ´e,
-->unix(’more diario’); // executa o comando ’more’ do Linux
-->a = 1, b = sqrt(%eps)
a =
1.
b =
1.490D-08
-->diary(0) // fecha o arquivo diario
7.4 Leitura e grava¸c˜ao de dados
A transferˆencia de dados entre o espa¸co de trabalho e algum dispositivo de entrada e sa´ıda
(arquivo em disco, impressora etc) aumenta a utiliza¸c˜ao do SCILAB visto tornar poss´ıvel,
por exemplo, at´e a troca de informa¸c˜oes com um outro programa.
7.4.1 Abertura de arquivo
A fun¸c˜ao mopen abre um arquivo, sendo sua sintaxe
[<idenarq>,<erro>] = mopen(<nome do arquivo>,<permiss~ ao>)
Deste modo, a fun¸c˜ao mopen associa o nome externo do arquivo dado pela cadeia de carac-
teres <nome do arquivo> `a unidade <idenarq> que ser´a utilizada nos comandos de entrada
e sa´ıda no modo especificado pela <permiss~ao>. O escalar <erro> indica a ocorrˆencia de
algum erro. Os caracteres permitidos para <permiss~ao> est˜ao listados na Tabela 7.2. O
caractere b indica que o arquivo ´e bin´ario.
Se <permiss~ao> for omitida ent˜ao ser´a assumido o valor ’r’. Caso o comando mopen tenha
sucesso ao abrir o arquivo, ele retornar´ a o identificador de arquivo <idenarq> contendo um
n´ umero inteiro positivo e o valor de <erro> ser´a 0. Em caso de algum erro o valor de <erro>
ser´a negativo. O <idenarq> ´e usado com outras rotinas de entrada e sa´ıda para identificar
o arquivo no qual as opera¸c˜oes ser˜ao realizadas. Por exemplo,
7.4. Leitura e grava¸ c˜ao de dados 133
Tabela 7.2: Atributos de arquivo.
<permiss~ao> Especifica¸c˜ao
’r’ ou ’rb’ Abre o arquivo para leitura.
’r+’ ou ’r+b’ Abre o arquivo para atualiza¸ c˜ao (leitura e escrita), mas n˜ao cria o
arquivo.
’w’ ou ’wb’ Abre o arquivo para escrita e caso necess´ario cria o arquivo. Por´em,
remove o conte´ udo do arquivo existente.
’w+’ ou ’w+b’ Abre o arquivo para atualiza¸ c˜ao (leitura e escrita) e se necess´ario
cria o arquivo. Todavia, remove o conte´ udo do arquivo existente.
’a’ ou ’ab’ Cria e abre um arquivo novo ou abre um arquivo j´ a existente para
escrita, anexando ao final do arquivo.
’a+’ ou ’a+b’ Cria e abre um arquivo novo ou abre um arquivo j´ a existente para
atualiza¸ c˜ao (leitura e escrita), anexando ao final do arquivo.
-->[fid,erro] = mopen(’dados.dat’,’w’) // abre o arquivo dados.dat para escrita
erro =
0.
fid =
1.
7.4.2 Fechamento de arquivo
A fun¸c˜ao mclose(<idenarq>) fecha o arquivo previamente aberto pela fun¸c˜ao mopen, cujo
identificador associado a este arquivo seja <idenarq>. Quando um arquivo ´e fechado, a
associa¸c˜ao entre o identificador <idenarq> e o arquivo f´ısico <nome do arquivo> ´e desfeita,
-->mclose(1) // fecha o arquivo dados.dat
ans =
0.
7.4.3 Grava¸c˜ao em arquivo
A fun¸c˜ao mfprintf grava dados formatados em um arquivo e sua sintaxe ´e
mfprintf(<idenarq>,<formato>,<vari´ aveis>)
onde a cadeia de caracteres <formato> cont´em caracteres alfanum´ericos e/ou especifica¸c˜oes
de convers˜ao para gravar no arquivo com identificador associado <idenarq> a lista contendo
<vari´aveis>. Estas especifica¸c˜oes de convers˜ao s˜ao delimitadas pelo caracter % e uma das
letras i, e, f, g ou s, de acordo com a Tabela 7.1.
No exemplo abaixo, uma tabela contendo x,

x e e
−x
para 1 ≤ x ≤ 2 ´e gerada e gravada
no arquivo sqrtexp.dat,
134 Cap´ıtulo 7. Comandos de entrada e sa´ıda
-->x = 1:0.2:2; // define o vetor x
-->tab = [x; sqrt(x); exp(-x)]’ // gera a tabela tab
tab =
1. 1. 0.3678794
1.2 1.0954451 0.3011942
1.4 1.183216 0.2465970
1.6 1.2649111 0.2018965
1.8 1.3416408 0.1652989
2. 1.4142136 0.1353353
-->[fid,erro] = mopen(’sqrtexp.dat’,’w’) // abre arquivo sqrtexp.dat para escrita
erro =
0.
fid =
1.
-->mfprintf(fid,’%5.2f%15.10f%15.10f\n’,tab) // escreve tabela no arquivo
-->mclose(fid) // fecha o arquivo
ans =
0.
O conte´ udo do arquivo sqrtexp.dat ´e,
-->unix(’more sqrtexp.dat’); // executa o comando ’more’ do Linux
1.00 1.0000000000 0.3678794412
1.20 1.0954451150 0.3011942119
1.40 1.1832159566 0.2465969639
1.60 1.2649110641 0.2018965180
1.80 1.3416407865 0.1652988882
2.00 1.4142135624 0.1353352832
7.4.4 Leitura em arquivo
A fun¸c˜ao mfscanf efetua a leitura de dados formatados em um arquivo, sendo sua sintaxe
[<tamanho>,<vari´ aveis>] = mfscanf(<num>,<idenarq>,<formato>)
onde <idenarq> ´e o identificador associado ao arquivo no qual est´a sendo feita a leitura
dos dados escritos no formato especificado na cadeia de caracteres <formato> e o parˆ ametro
opcional <num> especifica o n´ umero de vezes que o formato ´e usado. Os dados s˜ ao con-
vertidos segundo a cadeia de caracteres <formato> e atribu´ıdos `a lista <vari´ aveis>. As
especifica¸c˜oes de convers˜ao s˜ao mostradas na Tabela 7.1. A vari´avel <tamanho> retorna o
n´ umero de elementos que foram lidos do arquivo com sucesso,
-->fid = mopen(’sqrtexp.dat’,’r’) // abre arquivo para leitura
fid =
1.
-->[n,a,b,c] = mfscanf(1,fid,’%5f%15f%15f’) // leitura de 1 linha em 3 variaveis
c =
7.4. Leitura e grava¸ c˜ao de dados 135
0.3678795
b =
1.
a =
1.
n =
3.
-->vetor = mfscanf(1,fid,’%5f%15f%15f’) // leitura de 1 linha em 1 vetor
vetor =
1.2 1.0954452 0.3011942
-->matriz = mfscanf(2,fid,’%5f%15f%15f’) // leitura de 2 linhas em 1 matriz
matriz =
1.4 1.183216 0.2465970
1.6 1.2649111 0.2018965
A fun¸c˜ao mseek(<n´umero>,<idenarq>,<posi¸ c~ao>) ´e usada para posicionar o acesso a um
registro do arquivo, cujo identificador seja <idenarq>. A nova posi¸c˜ao ´e especificada a
partir da distˆ ancia dada pelo <n´ umero> de bytes do in´ıcio (se <posi¸ c~ ao> = ’set’), ou da
posi¸c˜ao atual (se <posi¸c~ ao> = ’cur’) ou do fim de arquivo (se <posi¸ c~ ao> = ’end’). Se
o parˆ ametro <posi¸c~ ao> n˜ao for especificado ´e assumido o valor ’set’,
-->mseek(0,fid) // posiciona leitura para o inicio do arquivo
-->matriz = mfscanf(6,fid,’%5f%15f%15f’) // leitura das 6 linhas em 1 matriz
matriz =
1. 1. 0.3678795
1.2 1.0954452 0.3011942
1.4 1.183216 0.2465970
1.6 1.2649111 0.2018965
1.8 1.3416408 0.1652989
2. 1.4142135 0.1353353
Durante o processo de leitura ´e importante verificar se o ´ ultimo registro do arquivo j´ a foi
lido. A fun¸c˜ao meof(<idenarq>) faz esta verifica¸c˜ao no arquivo de identificador <idenarq>.
Se o ´ ultimo registro j´a foi lido ent˜ao ser´a retornado o valor 1, caso contr´ ario 0 ser´a retornado.
Continuando o exemplo acima,
-->meof(fid) // verifica se fim de arquivo
ans =
0.
-->[n,m] = mfscanf(1,fid,’%5f%15f%15f’) // leitura de 1 linha em 1 variavel
m =
[]
n =
- 1.
-->meof(fid) // verifica se fim de arquivo
ans =
136 Cap´ıtulo 7. Comandos de entrada e sa´ıda
1.
-->mclose(fid) // fecha o arquivo
ans =
0.
7.5 Exerc´ıcios
Se¸c˜ao 7.1 Formato de exibi¸c˜ao
Verificar as diferen¸cas entre os formatos de exibi¸ c˜ao para as vari´aveis a = sqrt(2), e =
exp(10), x = 1:10, y = x’ e M = rand(3,3),
7.1 a, M, disp(a), disp(M).
7.2 format(15,’e’), a, e, x.
7.3 mprintf(’%10.5f %12.3e\n’,a,e).
7.4 mprintf(’%5.1f\n’,x) e mprintf(’%5.1f\n’,y).
7.5 Explicar a diferen¸ca de d´ıgitos entre a vari´avel tab e o conte´ udo do arquivo sqrtexp.dat
na mostrado Se¸ c˜ao 7.4.3.
Se¸c˜ao 7.2 Espa¸co de trabalho
Observar os resultados dos comandos para controle do espa¸co de trabalho utilizando as
vari´aveis dos Exerc´ıcios 7.1–7.5,
7.6 who, whos.
7.7 save (’dados’), clear, who.
7.8 load (’dados’), who.
7.9 save (’esptrab’,x,y), clear, who.
7.10 load (’esptrab’), who, x, y.
Se¸c˜ao 7.3 Di´ario
Entre com os comandos abaixo,
7.5. Exerc´ıcios 137
7.11 diary(’meudiario’).
7.12 a = 4.
7.13 b = log10(a).
7.14 diary(0).
7.15 Verificar o conte´ udo do arquivo meudiario.
Se¸c˜ao 7.4 Leitura e grava¸c˜ao de dados
7.16 Gerar uma tabela com 10 linhas de x, sen(x), 0 ≤ x ≤ π/2 e grav´ a-la no arquivo
seno.dat.
7.17 Fechar o arquivo seno.dat gravado no Exerc´ıcio 7.16 e verificar o seu conte´ udo.
7.18 Acrescentar o valor π + 1, sen(π + 1) na ´ ultima linha do arquivo seno.dat e verificar
o seu conte´ udo.
7.19 Abrir o arquivo seno.dat para leitura e ler a primeira linha.
7.20 Gravar os valores -1 e -2 na ´ ultima linha de seno.dat e observar o resultado.
138 Cap´ıtulo 7. Comandos de entrada e sa´ıda
Cap´ıtulo 8
Computa¸c˜ao cient´ıfica
8.1 Medidas de tempo
O SCILAB provˆe duas maneiras de medir o tempo gasto para executar um conjunto de
comandos: o tempo de execu¸c˜ao e o tempo de CPU.
Usando o tic-toc ´e poss´ıvel saber o tempo gasto para a execu¸c˜ao de um grupo de comandos.
A sua sintaxe ´e
tic()
<comandos>
<vari´avel> = toc()
O tic inicia a contagem do tempo e o toc fornece para <vari´avel> o tempo, em segundos,
passado desde o ´ ultimo tic. A atribui¸ c˜ao do tempo gasto a <vari´ avel> ´e opcional. Se o
computador estiver executando v´ arias tarefas simultaneamente, tic-toc pode n˜ao ser uma
medida muito confi´avel. Uma outra medida ´e obtida por timer que fornece o tempo de
CPU (unidade central de processamento) que ´e o tempo gasto para execu¸c˜ao de opera¸c˜oes
aritm´eticas e l´ ogicas. Pode ser usado na forma
<vari´avel 1> = timer()
<comandos>
<vari´avel 2> = timer() - <vari´avel 1>
Por exemplo, considere a execu¸c˜ao do programa no arquivo medidas.sci,
// define duas matrizes aleatorias
A = grand(2500,300,’unf’,0,10); B = grand(300,1000,’unf’,0,100);
tic() // inicia contagem do tempo de execucao
t0 = timer(); // inicia contagem do tempo de CPU
C = A * B - 5;
139
140 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
maximo = max(abs(diag(C)));
tempo_cpu = timer() - t0 // tempo de CPU
tempo_exec = toc() // tempo de execucao
Os resultados produzidos foram,
-->exec(’medidas.sci’,0)
tempo_cpu =
7.63
tempo_exec =
7.815
A diferen¸ca de tempo produzida por tic-toc e timer pode ser bem significativa se o com-
putador estiver executando outros programas ao mesmo tempo. Al´em disso, esses tempos
medidos depender˜ ao do computador utilizado.
8.2
´
Algebra linear
Nesta se¸ c˜ao ser˜ao mostrados alguns comandos do SCILAB relativos aos t´opicos usualmente
abordados em textos de C´alculo Num´erico. Para um conhecimento mais amplo dos comandos
do SCILAB com respeito a vetores e matrizes usar os comandos apropos vector e apropos
matrix.
8.2.1 Parˆametros da matriz
O SCILAB disponibiliza diversas fun¸c˜oes para se obter informa¸c˜oes sobre matrizes, tais
como, normas, n´ umero de condi¸ c˜ao, determinante, posto e tra¸co.
Normas
A fun¸c˜ao norm(<vari´avel>,<tipo>) fornece a norma <tipo> de um vetor ou matriz contido
em <vari´avel>, de acordo com a Tabela 8.1. No caso de um vetor, <tipo> pode ser qualquer
n´ umero (inteiro ou real, positivo ou negativo).
Exemplos de normas vetoriais,
-->x = [1 2 3 4 5]; // define vetor x
-->norm(x,1) // norma de soma de magnitudes
ans =
15.
-->norm(x), norm(x,2) // norma Euclidiana
ans =
7.4161985
ans =
7.4161985
8.2.
´
Algebra linear 141
Tabela 8.1: Normas vetoriais e matriciais.
Sejam v = [ v
1
v
2
. . . v
m
] e
M = [ m
11
m
12
. . . m
1p
; m
21
m
22
. . . m
2p
; . . . ; m
n1
m
n2
. . . m
np
]
<tipo> Descri¸c˜ao Nome
norm(v,p) v
p
=
p
¸
¸
¸
_
m

i=1
|v
i
|
p
norma-p
norm(v,2) ou norm(v) v
2
=
¸
¸
¸
_
m

i=1
|v
i
|
2
norma Euclidiana
norm(v,’inf’) v

= max
1≤i≤m
|v
i
| norma de m´ axima magnitude
norm(M,1) M
1
= max
1≤j≤p
n

i=1
|m
ij
| norma de soma m´ axima de coluna
norm(M,’inf’) M

= max
1≤i≤n
p

j=1
|m
ij
| norma de soma m´ axima de linha
norm(M,’fro’) M
F
=
¸
¸
¸
_
n

i=1
p

j=1
|m
ij
|
2
norma de Frobenius
norm(M,2) ou norm(M) max σ
i
(valores singulares) norma espectral
-->norm(x,’inf’) // norma de maxima magnitude
ans =
5.
-->norm(x,-%pi) // norma -pi
ans =
0.9527515
e normas matriciais,
-->A = [1 2 3; 4 5 6; 7 8 9]; // define matriz A
-->norm(A,1) // norma de soma maxima de coluna
ans =
18.
-->norm(A,’inf’) // norma de soma maxima de linha
ans =
24.
-->norm(A,’fro’) // norma de Frobenius
ans =
142 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
16.881943
-->norm(A,2), norm(A) // norma espectral
ans =
16.848103
ans =
16.848103
N´ umero de condi¸c˜ao
A fun¸c˜ao cond(<matriz>) calcula o n´ umero de condi¸ c˜ao de <matriz> quadrada definido
em termos da norma-2, ou seja, ´e a raz˜ao entre o maior e o menor valor singular,
cond(M) = κ
2
(M) = M
2
M
−1

2
=
σ
max
σ
min
.
Para a matrix,
-->B = [5 3 0; -1 8 6; 4 2 9];
-->cond(B) // numero de condicao
ans =
2.6641005
A fun¸c˜ao rcond(<matriz>) fornece uma estimativa do rec´ıproco do n´ umero de condi¸ c˜ao de
<matriz> definido em termos da norma-1. Se <matriz> for bem-condicionada ent˜ao rcond
´e pr´ oximo de 1 e se ela for malcondicionada rcond ser´a pr´ oximo de 0. Para a matriz B
acima,
-->r = rcond(B)
r =
0.2094488
-->1/r
ans =
4.7744361
Determinante
A fun¸c˜ao det(<matriz>) calcula o determinante de <matriz>, sendo ela quadrada. Na
forma [<mantissa>,<expoente>] = det(<matriz>) o valor do determinante ´e apresentado
em nota¸c˜ao cient´ıfica: <mantissa>×10
<expoente>
. Para A e B definidas previamente,
-->det(B) // determinante de B
ans =
399.
-->[mantissa,expoente] = det(A) // determinante de A em notacao cientifica
expoente =
6.6613381
mantissa =
- 16.
-->det(A)
ans =
6.661D-16
8.2.
´
Algebra linear 143
Posto
O posto de uma matriz A (m × n) ´e o n´ umero m´ aximo de vetores linhas ou de vetores
colunas de A que s˜ao linearmente independentes, sendo posto(A) ≤ min(m, n). No SCILAB
o posto de <matriz> ´e obtido por rank(<matriz>,<toler^ancia>), sendo igual ao n´ umero
de valores singulares de <matriz> maiores que <toler^ ancia>. Se <toler^ ancia> n˜ao for
dada ent˜ao ´e assumido o valor <toler^ ancia> = max(m, n) * norm(<matriz>) * %eps.
Para as matrizes A e B,
-->rank(A) // posto de A
ans =
2.
-->rank(A,1e-20) // posto de A com tolerancia 1e-20
ans =
3.
-->rank(B) // posto de B
ans =
3.
Tra¸co
A fun¸c˜ao trace(<matriz>) determina o tra¸co de <matriz>, isto ´e, a soma dos elementos
da sua diagonal principal. Para a matriz A definida anteriormente,
-->trace(A) // traco de A
ans =
15.
8.2.2 Decomposi¸ c˜oes
O SCILAB disponibiliza v´ arios tipos de decomposi¸c˜oes de matrizes entre as quais, LU,
Cholesky, QR e SVD.
Decomposi¸c˜ao LU
A fun¸c˜ao lu(<matriz>) faz a decomposi¸c˜ao LU de <matriz>, de dimens˜ ao m×n, usando
o m´etodo de elimina¸c˜ao de Gauss com pivota¸ c˜ao parcial.
O uso do comando [<fatorL>,<fatorU>,<matrizP>] = lu(<matriz>) gera uma matriz
triangular inferior unit´aria <fatorL> (dimens˜ao m × min(m, n)), uma matriz triangular
superior <fatorU> (dimens˜ao min(m, n) × n) e uma matriz de permuta¸ c˜oes <matrizP>
(dimens˜ao n×n), tal que <matrizP> * <matriz> = <fatorL> * <fatorU>. Por exemplo,
-->M = [2 -3 5; 4 1 -1; 1 8 6] // define a matriz M
M =
2. - 3. 5.
4. 1. - 1.
144 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
1. 8. 6.
-->[L,U,P] = lu(M) // decomposicao LU de M
P =
0. 1. 0.
0. 0. 1.
1. 0. 0.
U =
4. 1. - 1.
0. 7.75 6.25
0. 0. 8.3225806
L =
1. 0. 0.
0.25 1. 0.
0.5 - 0.4516129 1.
-->R = P * M - L * U // verificando que P * M = L * U
R =
0. 0. 0.
0. 0. 0.
0. 0. 0.
Contudo, o uso de dois parˆ ametros de sa´ıda [<matrizInf>,<matrizSup>] = lu(<matriz>)
gera uma matriz triangular superior <matrizSup> = <fatorU> e uma matriz triangular in-
ferior <matrizInf> tal que <matrizP> * <matrizInf> = <fatorL> de modo que <matriz>
= <matrizInf> * <matrizSup>. Para as matrizes acima,
-->[Tinf,Tsup] = lu(M) // decomposicao LU de M com dois parametros
Tsup =
4. 1. - 1.
0. 7.75 6.25
0. 0. 8.3225806
Tinf =
0.5 - 0.4516129 1.
1. 0. 0.
0.25 1. 0.
-->M - Tinf * Tsup // verificando que M = Tinf * Tsup
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
-->Tsup - U // verificando que Tsup = U
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
-->P * Tinf - L // verificando que P * Tinf = L
8.2.
´
Algebra linear 145
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
Decomposi¸c˜ao de Cholesky
A fun¸c˜ao <fator> = chol(<matriz>) fatora <matriz> sim´etrica definida positiva pelo
m´etodo de Cholesky produzindo uma matriz <fator> triangular superior tal que <fator>’
* <fator> = <matriz>. Por exemplo,
-->A = [4 -2 2; -2 10 -7; 2 -7 30] // define a matriz A
A =
4. - 2. 2.
- 2. 10. - 7.
2. - 7. 30.
-->U = chol(A) // calcula o fator U
U =
2. - 1. 1.
0. 3. - 2.
0. 0. 5.
-->A - U’ * U // verificando que A = U’*U
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
-->B = [1 -2 4; -2 5 3; 4 3 8] // define a matriz B
B =
1. - 2. 4.
- 2. 5. 3.
4. 3. 8.
-->F = chol(B) // calcula o fator F
!--error 29
Matrix is not positive definite.
Houve um erro porque a matriz B n˜ao ´e definida positiva.
Decomposi¸c˜ao QR
A fun¸c˜ao qr faz a decomposi¸c˜ao QR de uma matriz de dimens˜ ao m× n. O uso na forma
[<matrizQ>,<matrizR>]=qr(<matriz>) produz uma matriz ortonormal <matrizQ> de or-
dem m (<matrizQ>’*<matrizQ>=eye(m,m)) e uma matriz triangular superior <matrizR>
com a mesma dimens˜ ao m×n de <matriz>, de modo que <matriz>=<matrizQ>*<matrizR>.
Sejam,
-->A = [2 -4; 3 5; 1 -7; 8 6] // define a matriz A
146 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
A =
2. - 4.
3. 5.
1. - 7.
8. 6.
-->[Q,R] = qr(A) // calcula fatores Q e R
R =
- 8.8317609 - 5.4349298
0. - 9.8214835
0. 0.
0. 0.
Q =
- 0.2264554 0.5325844 - 0.5445505 - 0.6070721
- 0.3396831 - 0.3211171 0.5753910 - 0.6711366
- 0.1132277 0.7753803 0.5906262 0.1926801
- 0.9058216 - 0.1096497 - 0.1534623 0.3793593
-->round(Q’*Q) // verificando que Q e’ ortonormal
ans =
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
0. 0. 0. 1.
-->round( A - Q * R ) // verificando que A = Q*R
ans =
0. 0.
0. 0.
0. 0.
0. 0.
Quando os quatro caracteres (,’e’) forem colocados ap´os o nome de uma matriz de dimens˜ ao
(m×n, m > n) o SCILAB produz uma decomposi¸c˜ao econˆomica, de modo que <matrizQ>
ter´a dimens˜ ao (m×n) e <matrizR> ser´a (n ×n). Para a matriz A acima,
-->[Qe,Re] = qr(A,’e’) // calcula fatores Q e R na forma economica
Re =
- 8.8317609 - 5.4349298
0. - 9.8214835
Qe =
- 0.2264554 0.5325844
- 0.3396831 - 0.3211171
- 0.1132277 0.7753803
- 0.9058216 - 0.1096497
-->round(A - Qe * Re) // verificando que A = Qe * Re
ans =
0. 0.
0. 0.
8.2.
´
Algebra linear 147
0. 0.
0. 0.
A fun¸c˜ao qr possui diversas formas de ser utilizada; para maiores informa¸c˜oes use help qr.
Decomposi¸c˜ao em valores singulares
A fun¸c˜ao svd faz a decomposi¸c˜ao em valores singulares de uma matriz de dimens˜ ao m ×
n. O comando [<matrizU>,<matrizS>,<matrizV>] = svd(<matriz>) produz uma matriz
ortonormal <matrizU> de ordem m, uma matriz diagonal <matrizS> de dimens˜ ao m × n
contendo os valores singulares de <matriz> em ordem decrescente e uma matriz ortonormal
<matrizV> de ordem n, de modo que <matriz> = <matrizU> * <matrizS> * <matrizV>’.
Por exemplo,
-->A = [2 -4; 3 5; 1 -7; 8 6] // define a matriz A
A =
2. - 4.
3. 5.
1. - 7.
8. 6.
-->[U,S,V] = svd(A) // calcula os fatores U, S e V de A
V =
- 0.5257311 0.8506508
- 0.8506508 - 0.5257311
S =
12.476603 0.
0. 6.9522923
0. 0.
0. 0.
U =
0.188444 0.5471902 - 0.5445505 - 0.6070721
- 0.4673105 - 0.0110328 0.5753910 - 0.6711366
0.4351204 0.6516942 0.5906262 0.1926801
- 0.7461769 0.5251246 - 0.1534623 0.3793593
-->round( U’*U ) // verificando que U e’ ortonormal
ans =
1. 0. 0. 0.
0. 1. 0. 0.
0. 0. 1. 0.
0. 0. 0. 1.
-->round( V’*V ) // verificando que V e’ ortonormal
ans =
1. 0.
0. 1.
-->round( A - U * S * V’) // verificando que A = U*S*V’
148 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
ans =
0. 0.
0. 0.
0. 0.
0. 0.
Se os quatro caracteres (,’e’) forem colocados ap´os o nome de uma matriz de dimens˜ ao
(m × n, m > n) ser´a computada uma decomposi¸c˜ao econˆomica, de modo que <matrizU>
ter´a dimens˜ ao (m×n), <matrizS> e <matrizR> ser˜ao (n ×n). Utilizando a mesma matriz
A,
-->[Ue,Se,Ve] = svd(A,’e’) // calcula os fatores U, S e V na forma economica
Ve =
- 0.5257311 0.8506508
- 0.8506508 - 0.5257311
Se =
12.476603 0.
0. 6.9522923
Ue =
0.188444 0.5471902
- 0.4673105 - 0.0110328
0.4351204 0.6516942
- 0.7461769 0.5251246
-->round( A - Ue * Se * Ve’) // verificando que A = Ue*Se*Ve’
ans =
0. 0.
0. 0.
0. 0.
0. 0.
Para se obter apenas os valores singulares de <matriz> em <vetor> basta <vetor> =
svd(<matriz>),
-->s = svd(A) // calcula apenas os valores singulares de A
s =
12.476603
6.9522923
A fun¸c˜ao svd possui outras formas de ser utilizada; para maiores informa¸c˜oes use help svd.
8.2.3 Solu¸c˜ao de sistemas
Dado um sistema Ax = b, a solu¸c˜ao x pode ser facilmente calculada pelo SCILAB pelo
operador (\), por exemplo, para um sistema com matriz sim´etrica,
-->A = [4 -2 2; -2 10 -7; 2 -7 30] // matriz dos coeficientes
8.2.
´
Algebra linear 149
A =
4. - 2. 2.
- 2. 10. - 7.
2. - 7. 30.
-->b = [8 11 -31]’ // vetor dos termos independentes
b =
8.
11.
- 31.
-->x = A \ b // solucao de Ax = b
x =
3.
1.
- 1.
-->r = ( b - A * x )’ // verificando a exatidao da solucao
r =
0. 0. 0.
No caso de uma matriz n˜ao sim´etrica,
-->B = [1 -3 2; -2 8 -1; 4 -6 5] // matriz dos coeficientes
B =
1. - 3. 2.
- 2. 8. - 1.
4. - 6. 5.
-->c = [11 -15 29]’ // vetor dos termos independentes
c =
11.
- 15.
29.
-->y = B \ c // solucao de By = c
y =
2.
- 1.
3.
-->r = ( c - B * y )’ // verificando a exatidao da solucao
r =
0. 0. 0.
8.2.4 Inversa
A fun¸c˜ao inv(<matriz>) calcula a inversa de <matriz> de ordem n, tal que <matriz> *
inv(<matriz>) = eye(n,n). Para a matriz M acima,
-->E = inv(B) // inversa de B
E =
150 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
- 1.4166667 - 0.125 0.5416667
- 0.25 0.125 0.125
0.8333333 0.25 - 0.0833333
-->round( B * E - eye(3,3) ) // verificando que B * E = I
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
8.2.5 Autovalores e autovetores
Os autovalores s˜ao os zeros do polinˆ omio caracter´ıstico da matriz. A fun¸c˜ao poly constr´ oi
o polinˆ omio caracter´ıstico de uma matriz. Por exemplo,
-->A = [4 -1 3; -1 5 2; 3 2 8] // define a matriz A
A =
4. - 1. 3.
- 1. 5. 2.
3. 2. 8.
-->p = poly(A,’x’) // constroi o polinomio caracteristico de A
p =
2 3
- 79 + 78x - 17x + x
-->raizes = roots(p) // zeros do polinomio caracteristico
raizes =
1.410402
5.6161546
9.9734434
A fun¸c˜ao spec permite o c´alculo do autosistema (autovalores e autovetores) de uma ma-
triz de ordem n por um m´etodo mais eficiente do que construindo o polinˆ omio carac-
ter´ıstico. O uso de [<AutoVetor>,<AutoValor>]=spec(<matriz>) produz uma matriz
diagonal <AutoValor> contendo os autovalores e uma matriz <AutoVetor> com os cor-
respondentes autovetores. Se a matriz for sim´etrica ent˜ao os autovetores s˜ao mutuamente
ortogonais (<AutoVetor>’ * <AutoVetor> = eye(n,n)). Para a matriz A acima,
-->[Vetor,Valor] = spec(A) // calcula os autovalores e autovetores
Valor =
1.410402 0. 0.
0. 5.6161546 0.
0. 0. 9.9734434
Vetor =
0.7387367 0.5462817 0.3947713
0.4732062 - 0.8374647 0.2733656
- 0.4799416 0.0151370 0.8771698
-->round(Vetor’*Vetor-eye(3,3)) // autovetores ortogonais de uma matriz simetrica
8.3. Interpola¸c˜ao 151
ans =
0. 0. 0.
0. 0. 0.
0. 0. 0.
Para obter apenas os autovalores em <vetor> basta <vetor> = spec(<matriz>). Para a
matriz sim´etrica A definida acima,
-->lambda = spec(A) // calcula apenas os autovalores de A
lambda =
1.410402
5.6161546
9.9734434
A fun¸c˜ao spec possui diversas formas de ser utilizada; para maiores informa¸c˜oes use help
spec.
8.3 Interpola¸c˜ao
O SCILAB possui fun¸c˜oes para c´alculo das diferen¸cas finitas ascendentes e interpola¸c˜ao
unidimensional.
8.3.1 C´alculo das diferen¸cas finitas ascendentes
A fun¸c˜ao diff(<vari´avel>,<ordem>,<dimens~ao>) calcula a diferen¸ca finita ascendente de
ordem dada por <ordem> entre dois elementos de <vari´avel> ao longo de <dimens~ ao>, que
pode assumir os valores ’r’ para linha, ’c’ para coluna ou ’*’ para as colunas da matriz
<vari´avel> colocadas em um vetor. Os argumentos <ordem> e <dimens~ ao> s˜ao opcionais e
seus valores pr´e-definidos s˜ao 1 e ’*’, respectivamente. Para um vetor,
-->x = [1 2 4 4 7] // define o vetor x
x =
1. 2. 4. 4. 7.
-->d1 = diff(x) // diferenca de ordem 1 de x
d1 =
1. 2. 0. 3.
-->d2 = diff(d1) // diferenca de ordem 1 de d1
d2 =
1. - 2. 3.
-->xd2 = diff(x,2) // diferenca de ordem 2 de x
xd2 =
1. - 2. 3.
No caso de matriz,
152 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
-->A = [1:5;(1:5)^2;(1:5)^3] // define a matriz A
A =
1. 2. 3. 4. 5.
1. 4. 9. 16. 25.
1. 8. 27. 64. 125.
-->L1 = diff(A,1,’r’) // diferenca de ordem 1 ao longo das linhas
L1 =
0. 2. 6. 12. 20.
0. 4. 18. 48. 100.
-->C1 = diff(A,1,’c’) // diferenca de ordem 1 ao longo das colunas
C1 =
1. 1. 1. 1.
3. 5. 7. 9.
7. 19. 37. 61.
-->A(:)’ // colunas da matriz A em um vetor (transposto)
ans =
column 1 to 12
1. 1. 1. 2. 4. 8. 3. 9. 27. 4. 16. 64.
column 13 to 15
5. 25. 125.
-->V1 = diff(A,1,’*’)’//diferenca de ordem 1 assumindo A em um vetor (transposto)
V1 =
column 1 to 12
0. 0. 1. 2. 4. - 5. 6. 18. - 23. 12. 48. - 59.
column 13 to 14
20. 100.
8.3.2 Interpola¸c˜ao unidimensional
Dada uma tabela com pares (x
i
, y
i
) especificados nos vetores <abscissas> e <ordenadas>,
respectivamente, ent˜ao os valores de z contidos no vetor <interpolar> podem ser interpo-
lados usando a fun¸c˜ao interp1, cuja sintaxe ´e
<resultado> = interp1(<abscissas>,<ordenadas>,<interpolar>,<m´ etodo>)
onde a cadeia de caracteres <m´ etodo> especifica o m´etodo a ser utilizado na interpola¸c˜ao,
sendo
parˆ ametro m´etodo
’linear’ interpola¸c˜ao linear.
’spline’ interpola¸c˜ao por splines c´ ubicos.
’nearest’ interpola¸c˜ao usando o vizinho mais pr´ oximo.
Quando o m´etodo n˜ao for especificado ser´a assumida uma interpola¸c˜ao linear. Por exemplo,
sejam cinco pontos da fun¸c˜ao y = x
4
, para −1 ≤ x ≤ 1 definidos por,
8.4. Integra¸c˜ao num´erica 153
-->x = linspace(-1,1,5); // abscissas dos pontos
-->y = x.^4; // ordenadas
Interpolando os valores z = −0,6 e z = 0,7, usando os trˆes m´etodos,
-->interp1(x,y,[-0.6 0.7],’linear’) // interpolacao linear
ans =
0.25 0.4375
-->interp1(x,y,[-0.6 0.7],’spline’) // interpolacao com splines cubicos
ans =
0.144 0.2695
-->interp1(x,y,[-0.6 0.7],’nearest’) // interpolacao com vizinho mais proximo
ans =
0.0625 0.0625
Considerando que os valores exatos s˜ao (−0,6)
4
≈ 0,1296 e 0,7
4
≈ 0,2401, o m´etodo de
interpola¸c˜ao com splines c´ ubicos produziu os melhores resultados para este caso.
As aproxima¸c˜oes da fun¸c˜ao y = x
4
por trˆes fun¸c˜oes interpoladoras de interp1 podem ser
visualizadas pelos comandos,
-->x1 = linspace(-1,1,50); // abscissas para a interpolacao
-->y1 = x1.^4; // ordenadas da curva real
-->nea = interp1(x,y,x1,’nearest’); // interpolacao vizinho mais proximo
-->spl = interp1(x,y,x1,’spline’); // interpolacao por splines
-->plot(x,y,’o’,x,y,’-.’,x1,y1,’-’,x1,nea,’--’,x1,spl,’:’); xgrid(1)
-->xtitle(’M’+ascii(233)+’todos de interp1’,’x’,’y’); // gera graficos e grade
-->legend([’pontos’,’linear’,’y=x^4’,’nearest’,’splines’],3) // coloca legenda
A partir dos 50 pontos em x1 foram criados os vetores nea e spl que contˆem as ordenadas
obtidas por interpola¸c˜ao usando os argumentos ’nearest’ e ’splines’, respectivamente.
A Figura 8.1 mostra graficamente os resultados da fun¸c˜ao interp1. Os cinco pontos iniciais
est˜ao representados por o. Uma interpola¸c˜ao linear ´e feita implicitamente desde que o
comando plot interliga os pontos por retas. O gr´ afico da fun¸c˜ao y = x
4
est´a representado
por uma linha s´olida, a aproxima¸c˜ao por polinˆ omios com ’nearest’ por uma linha tracejada
e os splines por uma linha pontilhada. Usualmente os splines produzem uma aproxima¸c˜ao
mais suave da fun¸c˜ao como pode ser observado neste caso.
8.4 Integra¸ c˜ao num´erica
A fun¸c˜ao integrate calcula numericamente uma integral e sua sintaxe ´e
integrate(<fun¸c~ ao>,<vari´avel>,<lim inf>,<lim sup>,<erro abs>,<erro rel>)
onde <fun¸c~ ao> ´e uma cadeia de caracteres que define a fun¸c˜ao a ser integrada, <vari´ avel>
´e uma cadeia de caracteres que especifica a vari´avel de integra¸ c˜ao, <lim inf> e <lim sup>
154 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
−1.0 −0.8 −0.6 −0.4 −0.2 0.0 0.2 0.4 0.6 0.8 1.0
−0.2
0.0
0.2
0.4
0.6
0.8
1.0
Métodos de interp1
x
y
pontos
linear
y=x^4
nearest
splines
Figura 8.1: Aproxima¸c˜ao de y = x
4
pela fun¸c˜ao interp1.
s˜ao os limites inferior e superior de integra¸ c˜ao. Os argumentos <erro abs> e <erro rel> s˜ao
os erros absoluto e relativo e s˜ao opcionais. No caso de n˜ao serem fornecidos, s˜ao assumidos
os valores 0 e 10
−8
, respectivamente.
Por exemplo, seja a fun¸c˜ao f(x) = cos(3x+1)x
2
+x
1,5
, cujo esbo¸co ´e mostrado na Figura 8.2.
1 2 3 4 5 6 7 8 9
−60
−40
−20
0
20
40
60
80
100
f(x) = cos(3x+1)x^2+x^1,5
x
y
Figura 8.2: Integra¸ c˜ao de f(x) = cos(3x + 1)x
2
+ x
1,5
.
Para calcular
_
9
1
cos(3x + 1)x
2
+ x
1,5
dx
faz-se
8.5. Exerc´ıcios 155
-->Integral = integrate(’cos(3*x+1)*x^2+x^1.5’,’x’,1,9) // calcula a integral
Integral =
102.51064
A fun¸c˜ao a ser integrada pode tamb´em estar definida em uma function. Seja o arquivo
func.sci com o conte´ udo,
function y = g(x)
y = cos(3*x+1).*x.^2+x.^1.5;
endfunction
Assim, para calcular a integral acima usando a function g definida no arquivo func.sci,
-->exec(’func.sci’,-1) // carrega a function g do arquivo func.sci
-->Integral = integrate(’g’,’x’,1,9) // calcula a integral
Integral =
102.51064
8.5 Exerc´ıcios
Se¸c˜ao 8.1 Medidas de tempo
8.1
8.2
8.3
8.4
8.5
Se¸c˜ao 8.2
´
Algebra linear
8.6
8.7
8.8
8.9
8.10
Se¸c˜ao 8.3 Interpola¸c˜ao
156 Cap´ıtulo 8. Computa¸c˜ao cient´ıfica
8.11
8.12
8.13
8.14
8.15
Se¸c˜ao 8.4 Integra¸c˜ao num´erica
8.16
8.17
8.18
8.19
8.20
Referˆencias Bibliogr´aficas
[1] M. Abramowitz e I. A. Stegun. Handbook of Mathematical Functions. Dover, Nova
Iorque, 1972.
[2] F. F. Campos, filho. Algoritmos Num´ericos. LTC Editora, Rio de Janeiro, 2
a
edi¸c˜ao,
2007.
[3] H. Farrer, C. G. Becker, E. C. Faria, F. F. Campos, filho, H. F. de Matos, M. A. dos
Santos, e M. L. Maia. Pascal Estruturado. LTC Editora, Rio de Janeiro, 3
a
edi¸c˜ao, 1999.
[4] H. Farrer, C. G. Becker, E. C. Faria, H. F. de Matos, M. A. dos Santos, e M. L. Maia.
Algoritmos Estruturados. LTC Editora, Rio de Janeiro, 3
a
edi¸c˜ao, 1999.
[5] N. Wirth. Algorithms + Data Structures = Programs. Prentice-Hall, 1976.
157
158 REFER
ˆ
ENCIAS BIBLIOGR
´
AFICAS

Pref´cio a
O SCILAB ´ um software para computa¸˜o cient´ e ca ıfica e visualiza¸˜o, gratuito, com c´digo ca o fonte aberto e interface para as linguagens FORTRAN e C. Ele permite a solu¸˜o de problemas ca num´ricos em uma fra¸˜o do tempo que seria necess´rio para escrever um programa em uma e ca a linguagem como FORTRAN, Pascal ou C, devido `s suas centenas de fun¸˜es matem´ticas. a co a O SCILAB ´ desenvolvido pelo INRIA (Institut National de Recherche en Informatique e ´ et en Automatique) e ENPC (Ecole Nationale des Ponts et Chauss´es) da Fran¸a. Em e c www.scilab.org est˜o dispon´ a ıveis v´rias informa¸˜es, documenta¸˜o e instru¸˜es de como a co ca co baixar o programa. As vers˜es do SCILAB est˜o dispon´ o a ıveis na forma pr´-compilada para e diversas plataformas: Linux, Windows, HP-UX e Mac OSX. Como o c´digo fonte tamb´m o e est´ dispon´ a ıvel, ele pode ser compilado para uso em um computador espec´ ıfico. O objetivo deste texto ´ apresentar o SCILAB como uma linguagem de programa¸˜o doe ca tada de fun¸˜es n˜o dispon´ co a ıveis nas linguagens convencionais. Por isto, este material pode ser utilizado em disciplinas, tais como, Programa¸˜o de Computadores, C´lculo Num´rico, ca a e ´ An´lise Num´rica, Algebra Linear e quaisquer outras dos cursos de Engenharia e das areas a e ´ de Ciˆncias Exatas. Tamb´m, s˜o exploradas algumas caracter´ e e a ısticas pr´prias que mostram o por que o SCILAB ´ uma poderosa ferramenta de apoio ao aprendizado e utiliza¸˜o da e ca Computa¸˜o Cient´ ca ıfica. O Cap´ ıtulo 1 L´gica de programa¸˜o apresenta uma revis˜o de l´gica de programa¸˜o exo ca a o ca plicando as estruturas b´sicas: sequencial, condicional e de repeti¸˜o, al´m das estruturas a ca e de dados fundamentais. No Cap´ ıtulo 2 Ambiente de programa¸˜o ´ descrito o ambiente de ca e programa¸˜o do SCILAB mostrando a janela de comandos e como obter informa¸˜es de coca co mandos durante a sess˜o. O Cap´ a ıtulo 3 Estruturas de dados apresenta as estruturas de dados suportadas pelo SCILAB, como constantes, vetores, matrizes, hipermatrizes, polinˆmios e o listas. No Cap´ ıtulo 4 Express˜es s˜o mostradas as express˜es aritm´ticas, l´gicas e literais, o a o e o bem como, o modo de execut´-las. O Cap´ a ıtulo 5 Gr´ficos ´ dedicado a elabora¸˜o de gr´ficos a e ` ca a bi e tridimensionais. No Cap´ ıtulo 6 Linguagem de programa¸˜o, o SCILAB ´ visto como uma ca e linguagem de programa¸˜o, sendo mostrado como escrever programas e fun¸˜es, estruturas ca co condicionais e de repeti¸˜o e depura¸˜o de programas. O Cap´ ca ca ıtulo 7 Comandos de entrada e sa´ apresenta os formatos de exibi¸˜o, grava¸˜o e leitura de vari´veis do espa¸o de trabalho, ıda ca ca a c al´m de leitura de grava¸˜o de dados em arquivos. Finalmente, no Cap´ e ca ıtulo 8 Computa¸˜o ca cient´ ıfica s˜o apresentadas fun¸˜es do SCILAB para resolver problemas de Computa¸˜o Cia co ca ent´ ıfica. Sugest˜es para aprimorar o presente texto, bem como, para efetuar corre¸˜es ser˜o bemo co a vindas pelo e-mail: ffcampos@dcc.ufmg.br. Belo Horizonte, agosto de 2010. Frederico F. Campos, filho DCC.ICEx.UFMG

.

. . . .3 1. . . . . . . . . . . . . . . . . .4 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Express˜es . . . . . . . .5. . . . . e Express˜es literais . . 1. .6 Estruturas condicionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . .3 Estrutura sequencial . . . . . . . . . . . . . Estrutura condicional composta . . . u co iii . . . . . . . . . . . . . . . . a a 1.2 Estrutura condicional simples . . . . . . . . . . . . . . . . . . . .1 1. . . . . .1 1. . .5. . .1 N´ mero indefinido de repeti¸˜es . . a 1. . . . . . . 1. . . . . . . ca 1. . . . . . . .6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . .2 1. . . . 1. . . . . . . . . . . . . . . . . . . . .Sum´rio a 1 L´gica de programa¸˜o o ca 1. . . . . .1 Estrutura b´sica de um algoritmo . . . . . . . . . . . . .6. . . . . . . . . . . . . . . .2 Comandos de entrada e sa´ ıda . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. 1. o 1 1 2 3 3 4 4 4 7 8 9 10 10 11 12 12 1. . . . . . . . . . . . . . . . . . . . . . ca Express˜es aritm´ticas . .4 Vari´veis e coment´rios . . . . . . . .7 Estruturas de repeti¸˜o . . . . . . . . o 1. . o o Ordem geral de precedˆncia . . . . . . . .7. o e Express˜es l´gicas . .5 Comando de atribui¸˜o . . . .

. . . . . . . . . . . . .3 Hipermatrizes . . . . . . . . . . . . . . . . . . ca 1. . . . .2. . . . . . . . . . . . . . . . . . . . . . 3. . . . 2. . . . . . . . . . . . .1 Janela de comando . . . . . . . . . . . . . . . . . .2 1. . . . . . . . . . . . . . . . . . . . . . . .8 1. . . . . . . . . . . . . . . . . . . . .2 Matrizes . . .1 Num´ricas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . .3 Exerc´ ıcios . . . . . 27 27 29 30 31 31 31 32 33 33 Comandos de aux´ ao usu´rio . . . . . . .10. Menu de barras . . .1 2. . . . . . .1 2. . . . . . . . .10 Estruturas de dados . . . . . . . . . . 2 Ambiente de programa¸˜o ca 2. .7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .10. . . . . . ılio a 2. . . . . . . . . . . . . . . . .3 2. .2. u co 14 17 17 18 18 21 23 24 Falha no algoritmo . . . . . . . . 2. . . . . . . . . . . . .3 Comando help . . . . . 1. . . . . . . . .1. . . . 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1.9 N´ mero definido de repeti¸˜es . . . . . . . . . . .11 Exerc´ ıcios . .1 Vetores . . . . . . . . . . . .1 Constantes . . Modulariza¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . 1. . . . . . . . . . . . . . . . . 1. . . . . . . . . .2 Espa¸o de trabalho . . . .iv ´ SUMARIO 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . o Comando unix . . . .10. . . . . . Comando apropos . . . . . . . . . . . c Diret´rio corrente . . . . . . . . . . . . . . . 3 Estruturas de dados 3. . . . . . . . . . . . . . . . . . . . . .2. . .2 2.2 2. . . . . . . . . . . . . . . . . . e 35 35 35 .

. . . . . . . . . . . .2 Vari´veis . . . . . . . . . . . . . . . . .1 3. . . . .7 Constru¸˜o . . . . .6. . . . . a Deriva¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . a Comando de atribui¸˜o . . . . . . co ca Matrizes elementares . . . . . .6. . . . ca Divis˜o . . . . . . . . . . . .4. . . . . . . . . . . . . . . . . . . . . . . . . . . . .2 3. . . . . . . . . . . . . .5 3. .6.6. . . . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . .6. . . . . . . . . . . . . . . . . . . . 3. . . . . . . . . . . . . . . . co a Fun¸˜es para manipula¸˜o de matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Vetores . ca C´lculo de ra´ a ızes . . . . . . . . . . . . . . . . . . .6 3. . . . . . . .4. . . . . . . . . . . . . . .2 3. . . . a o . . . . . . . . . . . . . . . . . . . . ca ca Fun¸˜es matriciais b´sicas . . . . . .2 3. . . . . . .2. . . . .3 3. . . . . . o Literais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 L´gicas . .7 Vari´veis l´gicas . . . . . . . . . . . . . . . ca Avalia¸˜o . a 3. . . . . . . . . . . . . . . . .1 3. . . . a 3. . . . . . . . . . . . . . . . . . . . . . . . . . . .4. 3. . . . ca Adi¸˜o e subtra¸˜o . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . .4 Matrizes . . . . . . . . . .1. ca ca Multiplica¸˜o . . . . . . . . o 3. . . .6 Polinˆmios . . . . . . . 3. .5 Hipermatrizes . . . . . . . . . . . 3.4 3. . . . . . . . . . . . . . . . . . . . . . . . . . . .3 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 3. ca Vari´veis especiais .1. . . . . . . . . . . . . 3. . . . . . . . . .4 Constru¸˜o e manipula¸˜o de matrizes . . .3 Regras para nomes de vari´veis . . . .2 3. . . . . v 36 36 36 36 37 37 38 42 42 45 48 54 57 59 59 60 60 60 61 62 62 63 3.2. . . . . . . . . . . . . . . . . . . . .´ SUMARIO 3. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3. . ca Fun¸˜o plot3d . . . . . . . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ca . .10 Exerc´ ıcios . . . 64 64 66 3. . . . . . . o 4.2 4. . . . . . . . . . . . .3 Ordem de precedˆncia . . . .1. .2. . . . . .1 Express˜es aritm´ticas . .1. . . . a Listas . . e Express˜es vetoriais . . . . . o 69 69 69 70 72 75 78 78 80 86 87 Express˜es l´gicas . . . . . . . . . . . . . . . ca o Exerc´ ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . .5 Execu¸˜o de express˜es . . . . . . . . .1. . . . . . . . . . . . . . . . . . .1 4. . . . . . . . . . . .2 Convers˜o de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2.9 ´ SUMARIO Vari´veis literais . . . ca 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . ca 91 91 91 94 97 97 98 Gr´ficos tridimensionais . . . . . . . . . . . . . . .vi 3. . . .1 Gr´ficos bidimensionais . . . . . . . . . . . . . . . . . . . . . .1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Gr´ficos a 5. . . . . . . . . . . . . . . . . . . . . . . . . . . a 5. a Manipula¸˜o de caracteres . . . . . . . . . . . . . .8 3. . . . . a 5. . . . . . . . . . . . . . . . . . . . . .3 4. . . . . . . . . . .1 5. . . . . . . . . . . . . . . . . . . . . .2 5. . . .1 5.2 Fun¸˜o meshgrid . . .1 4. . . . . . o o Express˜es literais . . o e 4. . . o Express˜es matriciais . . . . .4 4. . . . . . . . . . . . . . ca Fun¸˜o fplot2d . . . . . . . . . . . . . . . . . . . . . . . . . 4 Express˜es o 4. . . .2 Fun¸˜o plot . . . . . . . . . . .2 4. .

. . . 103 6 Linguagem de programa¸˜o ca 105 6. . . . . . . 113 Estrutura if-elseif-end . . . . .3 Estrutura for-end . . . . . . . . . . . . . . . . . . . . . . . .4 Exerc´ ıcios . . . . . 125 ca . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . . .1 6. . . . .2 Programa . . . . . . . . . . . . . . . . . . . . .2 6. 114 Estrutura select-case-end . .2. . . . . . . . . . . 113 Estrutura if-else-end . . . . . . . . . . . . . . . . . . . . . .1 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 5.2. . . . . . . . . . . . . . . . . . . . . 117 Estrutura while-end . . . . . 118 Estrutura com interrup¸˜o no interior . . . . . . . . . . . . . . . . . . . . 116 ca 6. . . .3 Janela de figura . . . . . . . . . . . . . . . . . . . . . . . . .4 Estrutura if-end . . . . . 105 ca 6. . . . . . . . . . . . . . . .3. . . . . . 121 ca 6. . . . . . . . .2 6. . . .2. . . . . . . . . . .2. . . . . . . . . . . . . . . . . . .4 vii Fun¸˜o mesh . . . . . . . . . . . . . . . .1 6. .1. . . . . . . . . . . 107 6. . . . . . .1 Formato de exibi¸˜o . . . . . 102 ca 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3 Estruturas de repeti¸˜o . . . . . . . .3. . . . . . . . . . . . 102 5. . . . . . . . . .´ SUMARIO 5. . . .2 Estruturas condicionais . 113 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5 Exerc´ ıcios . . . . . . . . . . . .4 Depura¸˜o de programa . . . .2. . . . . . 115 6. . . 105 Subprograma function .1. . . . . . . . . . . . . 101 ca Fun¸˜o surf . . . . . . . . . . . . . .3 6. . .3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 7 Comandos de entrada e sa´ ıda 125 7. 119 ca 6. . . . . . . . . . . . . . . . . .1 Programa¸˜o .

. . . . . . . . . . . . . . .4 Abertura de arquivo . . . . . . . . . . 136 8 Computa¸˜o cient´ ca ıfica 8. . . .4. . . . . . . . . . . . . . . . . 128 Recuperar dados . . . . . . . . . . . . . . . . . . . .1 8. . . . . . . . . . . . . . . . . . . . .3 Interpola¸˜o . . . . . . 134 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4. . . . 149 Autovalores e autovetores . . . . . . . . . . . . . . . . . . . . . . . .2 139 Medidas de tempo . . . . . . . . . 140 a Decomposi¸˜es . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . . . .5 Exerc´ ıcios . . 140 8. . . . . . . . . . . . . . . 127 c 7.4. . . .3 7. . . . . . . . . . . . . . .3 8. . . . . . . . . . . . . . . . .2 7. . . . . . . . . . . .3 7.2. . . . . . . . . . . . . . . . . . . . 148 ca Inversa . . . . . .2. . . . . . . . . . . .4 Di´rio . . . . . . . . . . . . . 151 ca . .2. . . . . . .1 8. . . . . . . .2 8. . . . . . . . . . . . . . . . . . . . . . . . 129 Janela de mensagem .3 7. . 129 Entrada de dados . . . . . . .4 8. . . . . . 133 ca Leitura em arquivo . .2.viii 7. . . . . . .5 Parˆmetros da matriz . . . . . 133 Grava¸˜o em arquivo . . . . .2. . . . . . . . . . .4. . . . . .1 7. . . . . . . . . . . . . . . . . . . .2. . . . . . . 150 8. . . . . . . . 139 ´ Algebra linear . . . . . . . . . . . . . . . . . . . . . . 143 co Solu¸˜o de sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1 7.2. .2 7. . . 131 a Leitura e grava¸˜o de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .4 Gravar dados . . 132 ca 7. . . . . . . . . . . . . .2 ´ SUMARIO Espa¸o de trabalho . . . . . . 132 Fechamento de arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2. . . 130 7. . . . . . .

. 155 . . . . . .4 Integra¸˜o num´rica . . . . . . . . . . . .3. . . . . .3. . . . . .´ SUMARIO 8. . . . . . . . . . . . . . . . . . .5 Exerc´ ıcios . . . . . . . . . 152 ca 8.2 ix C´lculo das diferen¸as finitas ascendentes . . . . . 151 a c Interpola¸˜o unidimensional . . . . . .1 8. . . . . . 153 ca e 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

x ´ SUMARIO .

sendo um algoritmo1 abstratos baseados em representa¸˜es e estruturas espec´ co a descri¸˜o de um conjunto de comandos que resultam em uma sucess˜o finita de a¸˜es. condicional e de repeti¸˜o) de modo a serem implementadas facilmente nas linguagens ca de programa¸˜o dispon´ ca ıveis. e 1. ınio o ca Uma nota¸˜o algor´ ca ıtmica deve conter um n´ mero m´ u ınimo de estruturas de controle (sequencial. a linguagem exerce uma grande influˆncia na express˜o do pensae a mento. programas de computadores s˜o formula¸˜es concretas de algoritmos a co ıficas de dados. O modelo l´gico resultante de uma nota¸˜o algor´ o ca ıtmica deve ser codificado com facilidade em qualquer linguagem de programa¸˜o. Os algoritmos deste texto s˜o descritos na nota¸˜o utilizada em Algoritmos Num´ricos [2]. 4]. Portanto.1 Estrutura b´sica de um algoritmo a Um algoritmo apresenta a seguinte estrutura b´sica: a 1 Esta palavra deriva do nome do matem´tico ´rabe Mohammed ibu-Musa al-Khowarizmi (≈ 800 d. Assim. Al´m do mais. um modo mais adequado para a elabora¸˜o de algoritmos deve considerar ca apenas a express˜o do racioc´ a ınio l´gico. o uso de uma nota¸˜o algor´ ca ca ıtmica leva o programador a expressar o seu racioc´ l´gico independente da linguagem de programa¸˜o. ao expressar as v´rias etapas do o e a racioc´ ınio por meio de uma linguagem de programa¸˜o o programador ´ induzido a se preca e ocupar com detalhes pouco importantes da linguagem. a a 1 .C. a ca e a qual ´ baseada naquela proposta por Farrer e outros [3.Cap´ ıtulo 1 L´gica de programa¸˜o o ca Segundo Wirth [5]. ca a co Para este mesmo autor.).

lidos de ca a um arquivo. < comandos n > fim algoritmo onde Algoritmo < nome-do-algoritmo > indica o in´ do algoritmo denominado < nome-do-algoritmo > e o seu t´rmino ´ definido ıcio e e por fim algoritmo . sendo e a { Objetivo: < objetivo-do-algoritmo> } . Por sua vez. bem como seus tipos e estruturas. 1. As vari´veis usadas no algoritmo. A finalidade do algoritmo ´ descrita na forma de coment´rio. Compete ao programador decidir durante a a a codifica¸˜o do programa se os dados ser˜o fornecidos interativamente pelo teclado. o comando o . s˜o declaradas por a a meio da < declara¸˜o das vari´veis > e os < comandos i > especificam as n a¸˜es a serem ca a co executadas pelo algoritmo.2 Cap´ ıtulo 1. N˜o se faz necess´rio descrever exatamente como os valores a a dessas vari´veis ser˜o fornecidos ao algoritmo... passados como argumentos de um subprograma ou at´ mesmo definidos como e constantes dentro do pr´prio programa.2 Comandos de entrada e sa´ ıda O comando leia < lista-de-vari´veis> a ´ usado para indicar que a <lista-de-vari´veis> est´ dispon´ para armazenar os dados lidos e a a ıvel em algum dispositivo externo. L´gica de programa¸˜o o ca Algoritmo < nome-do-algoritmo > { Objetivo: Mostrar a estrutura b´sica de um algoritmo } a < declara¸˜o das vari´veis > ca a < comandos 1 > < comandos 2 > .

4 Vari´veis e coment´rios a a Uma vari´vel corresponde a uma posi¸˜o de mem´ria do computador onde pode ser ara ca o mazenado um valor. No Exemplo 1.1.2 Exibe um algoritmo para ler uma temperatura em grau Fahrenheit e converter em grau Celsius. ca a Algoritmo Opera¸˜es aritm´ticas co e { Objetivo: Somar e subtrair dois n´ meros } u leia a. o comando x ← a + b ´ executado seguido pelo comando y ← b − c. Estrutura sequencial 3 escreva < lista-de-vari´veis> a ´ utilizado para indicar as vari´veis cujos valores devem ser escritos em algum dispositivo e a externo. e 1.1 Apresenta um algoritmo b´sico. o qual lˆ as vari´veis a.1.3 Estrutura sequencial A mais simples das estruturas de controle de um algoritmo ´ a estrutura sequencial. b.3. y fim algoritmo Exemplo 1. b e c necess´rias a sua a e a a ` execu¸˜o e escreve as vari´veis x e y em algum dispositivo externo. Ela e indica que os comandos devem ser executados na ordem em que aparecem. c x ←a+b y ←b−c escreva x. Celsius fim algoritmo 1. As vari´veis s˜o representadas por identificadores que s˜o cadeias de a a a . Exemplo 1. Algoritmo Converte grau { Objetivo: Converter grau Fahrenheit em Celsius } leia Fahrenheit Celsius ← (Fahrenheit − 32 ) ∗ 5 /9 escreva Fahrenheit.

4

Cap´ ıtulo 1. L´gica de programa¸˜o o ca

caracteres alfanum´ricos. Os elementos de vetores e matrizes podem ser referenciados ou e por subscritos ou por ´ ındices, por exemplo, vi ou v (i ) e Mij ou M(i , j). Um coment´rio ´ um texto inserido em qualquer parte do algoritmo para document´-lo e a e a aumentar a sua clareza. Esse texto ´ delimitado por chaves { <texto> }, como, por exemplo, e { avalia¸˜o do polinˆmio }. ca o

1.5

Express˜es o

Express˜es s˜o combina¸˜es de vari´veis, constantes e operadores. Existem trˆs tipos de exo a co a e press˜es: aritm´ticas, l´gicas e literais, dependendo dos tipos dos operadores e das vari´veis o e o a envolvidas.

1.5.1

Comando de atribui¸˜o ca

O resultado de uma express˜o ´ armazenado em uma vari´vel por meio do s´ a e a ımbolo ← (recebe) < vari´vel > ← < express˜o > a a como visto no Exemplo 1.1.

1.5.2

Express˜es aritm´ticas o e

Express˜o aritm´tica ´ aquela cujos operadores s˜o aritm´ticos e cujos operandos s˜o consa e e a e a tantes e/ou vari´veis aritm´ticas; elas visam avaliar alguma f´rmula matem´tica. Os opea e o a radores aritm´ticos s˜o mostrados na Tabela 1.1, e a Tabela 1.2 apresenta algumas fun¸˜es e a co matem´ticas elementares. a Tabela 1.1: Operadores aritm´ticos. e Opera¸˜o ca adi¸˜o ca mais un´rio a subtra¸˜o ca menos un´rio a multiplica¸˜o ca divis˜o a potencia¸˜o ca Operador + + * / ^ Uso a + b +a a - b -a a * b a / b a ^ b

1.5. Express˜es o Tabela 1.2: Fun¸˜es matem´ticas. co a Fun¸˜o ca sen tan exp loge abs arredonda max min Fun¸˜o ca Trigonom´tricas e seno cos tangente sec Exponenciais exponencial log10 logaritmo natural raiz2 Num´ricas e valor absoluto quociente arredonda em dire¸˜o ao in- sinal ca teiro mais pr´ximo o maior valor resto menor valor trunca Descri¸˜o ca Descri¸˜o ca co-seno secante logaritmo decimal raiz quadrada divis˜o inteira a sinal(x) = 1 se x > 0, = 0 se x = 0 e = −1 se x < 0 resto de divis˜o a arredonda em dire¸˜o a 0 ca

5

´ Exemplo 1.3 A Tabela 1.3 mostra exemplos de uso das fun¸˜es matem´ticas num´ricas. E co a e importante observar a diferen¸a entre as fun¸˜es arredonda e trunca. c co Tabela 1.3: Resultados de fun¸˜es matem´ticas num´ricas. co a e Fun¸˜o ca abs(x) arredonda(x) quociente(x, y ) resto(x, y ) sinal(x) trunca(x) x [e y ] Valor 5 5 0,4 0 5e3 1 5e3 2 −2 −1 1,1 1 x [e y ] Valor −3 3 0,5 1 3e5 0 3e5 3 7 1 1,9 1

Ordem de precedˆncia e Dada uma express˜o matem´tica, ela deve ser escrita em uma forma linear no algoritmo, a a por exemplo, b c deve ser escrita como t ← a + b/c, enquanto que a nota¸˜o de ca t=a+ u=

a+b c ´ u ← (a + b)/c. Ao converter a nota¸˜o matem´tica para a nota¸˜o algor´ e ca a ca ıtmica tem que se respeitar a ordem de precedˆncia das opera¸˜es aritm´ticas, a qual ´ apresentada na e co e e

6

Cap´ ıtulo 1. L´gica de programa¸˜o o ca

Tabela 1.4. Quando duas opera¸˜es tˆm a mesma prioridade efetua-se primeiro a opera¸˜o co e ca mais a esquerda. No c´lculo de u acima foi utilizado parˆnteses para que a adi¸˜o fosse ` a e ca efetuada primeiro que a divis˜o, pois a divis˜o tem precedˆncia sobre a adi¸˜o. a a e ca Tabela 1.4: Ordem de precedˆncia das opera¸˜es aritm´ticas. e co e Prioridade 1a 2a 3a 4a 5a 6a Opera¸˜es co resolver parˆnteses e avaliar fun¸˜o ca potencia¸˜o ca menos e mais un´rio a multiplica¸˜o e divis˜o ca a adi¸˜o e subtra¸˜o ca ca

Exemplo 1.4 Escrever as express˜es aritm´ticas na nota¸˜o algor´ o e ca ıtmica. t=a+ x= b + d −→ t ← a + b/c + d . c

a+b −→ x ← (a + b)/(c + d ). c+d b −→ y ← a + b/(c + (d + 1)/2). c + d+1 2

y =a+

´ E importante verificar o balanceamento dos parˆnteses, ou seja, o n´ mero de abre parˆnteses e u e ’(’ tem que ser igual ao n´ mero de fecha parˆnteses ’)’. u e Exemplo 1.5 Avaliar as express˜es aritm´ticas do Exemplo 1.4, para a = 1, b = 2, c = 3 e o e d = 4, arredondando o resultado para cinco casas decimais. t ← a + b/c + d , 1 + 2/3 + 4, t ← 5,66667. (1 + 2)/(3 + 4) = 3/7, x ← 0,42857. y ← a + b/(c + (d + 1)/2), 1 + 2/(3 + (4 + 1)/2) = 1 + 2/(3 + 5/2) = 1 + 2/(5,5), y ← 1,36364.

x ← (a + b)/(c + d ),

sendo que V significa o verdadeiro e F significa falso. y = 3 e z = 10.7 mostra os resultados obtidos com os operadores l´gicos. x = 2. d = 3. co o Tabela 1.5.6 Avaliar as express˜es l´gicas para c = 1. A natureza da compara¸˜o ´ indicada por um operador relacional definido conforme a ca e Tabela 1.6: Operadores l´gicos. d = c + x.5. 3 = 1 + 2 → verdadeiro. o o c ≥ d . ca a o e Tabela 1. Os operadores l´gicos mostrados na Tabela 1.1. 2 + 3 < 10 − 1 → verdadeiro. Uma rela¸˜o ´ uma compara¸˜o realizada entre valores do mesmo a o ca e ca tipo. o a e b a\b V F V V F F F F a ou b a\b V F V V V F V F n˜o a a a V F F V . x + y < z − c.6 permitem a combina¸˜o ou nega¸˜o das o ca ca rela¸˜es l´gicas. o Opera¸˜o ca conjun¸˜o ca disjun¸˜o ca nega¸˜o ca Operador Uso e < express˜o 1 > e < express˜o 2 > a a ou < express˜o 1 > ou < express˜o 2 > a a n˜o a n˜o(< express˜o >) a a A Tabela 1. Express˜es o 7 1. Rela¸˜o ca Operador igual a = diferente de = maior que > maior ou igual a ≥ menor que < menor ou igual a ≤ Uso a=b a=b a>b a≥b a<b a≤b Exemplo 1.3 Express˜es l´gicas o o Express˜o l´gica ´ aquela cujos operadores s˜o l´gicos e cujos operandos s˜o rela¸˜es e/ou a o e a o a co vari´veis do tipo l´gico. O resultado de uma rela¸˜o ou de uma express˜o l´gica ´ verdadeiro ou falso.5: Operadores relacionais. 1 ≥ 3 → falso.5. Tabela 1.7: Resultados com operadores l´gicos.

e co o Prioridade 1a 2a 3a 4a Opera¸˜o ca relacional nega¸˜o ca conjun¸˜o ca disjun¸˜o ca Exemplo 1. d = 3. → 3 > 1 e 10 = 10.7 Avaliar as express˜es l´gicas abaixo para c = 1. tem-se uma ordem e co e o geral de precedˆncia das opera¸˜es matem´ticas. como mostrado na Tabela 1. a a V e F → falso. 1. 3 > 1 e 2 + 3 + 5 = 10.5. como apresentada na Tabela 1. 3 + 2 ≥ 10/2 e n˜o(3 = 3) → 5 ≥ 5 e n˜o(V). y = 3 e z = 10. o o d > c e x + y + 5 = z. a d + x ≥ z/2 e n˜o(d = y ). F ou V → verdadeiro.8: Ordem de precedˆncia das opera¸˜es l´gicas. x = 2.8. V e V → verdadeiro. as express˜es l´gicas tamb´m possuem uma a o e o o e ordem de precedˆncia. e Tabela 1.8 Cap´ ıtulo 1. L´gica de programa¸˜o o ca Ordem de precedˆncia e De modo similar `s express˜es aritm´ticas. → 2 = 1 ou 4 = 10. 2 = 3 − 2 ou 1 + 3 = 10.9. e co a .4 Ordem geral de precedˆncia e Combinando as ordens de precedˆncia das opera¸˜es aritm´ticas e l´gicas. x = d − 2 ou c + y = z.

−(1 + 5)^2 > 2 + 6 ∗ 3 e 4 ∗ 3 = 15. = e = n˜o a e ou Exemplo 1.25. mensagem ← ’matriz o singular’. (1 + 2)/3 ≤ 2^3 − 1 ou 1 ∗ (2 + 3) ≥ 5. Opera¸˜es envolvendo literais.8 Avaliar as express˜es abaixo para a = 1. −36 > 20 e F. 3. tais como. Express˜es o 9 Tabela 1. ca O caso mais simples de uma express˜o literal ´ uma constante literal. <.5. e co a Prioridade 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a Opera¸˜es co ( ) fun¸˜o ca ^ + e − un´rio a ∗e/ +e− >. por exemplo.5 Express˜es literais o Uma express˜o literal ´ formada por operadores literais e operandos.5. busca etc. 1.9: Ordem de precedˆncia das opera¸˜es matem´ticas. V ou V → verdadeiro. 1 ≤ 7 ou 5 ≥ 5.1. a qual ´ constitu´ por a e e ıda uma cadeia de caracteres delimitada por ap´strofo (’). ≥.5 = 1 e 29 < −1. ina co ca ser¸˜o. ≤. os quais s˜o constantes a e a e/ou vari´veis do tipo literal. b = 2 e c = 3. −6^2 > 20 e 12 = 15. concatena¸˜o. o −(a + 5)^2 > b + 6 ∗ c e 4 ∗ c = 15. c + a/2 = b − a e b + c^(b + 1) < −(b + c)/4. V e F → falso. s˜o realizadas por meio de fun¸˜es dispon´ ca a co ıveis nas bibliotecas das linguagens de programa¸˜o. F e F → falso. . 3 + 1/2 = 2 − 1 e 2 + 3^(2 + 1) < −(2 + 3)/4. (a + b)/c ≤ b^c − a ou a ∗ (b + c) ≥ 5. geralmente.

a lista de <comandos> ser´ executada se. Uma estrutura condicional possibilita a escolha dos comandos a serem executados quando certa condi¸˜o for ca ou n˜o satisfeita alterarando. A condi¸˜o ´ representada a ca e por uma express˜o l´gica.10 Cap´ ıtulo 1. u Algoritmo Logaritmo decimal { Objetivo: Calcular logaritmo decimal de n´ mero positivo } u leia x se x > 0 ent˜o a Log ← log10 (x) escreva x.1 Estrutura condicional simples Esta estrutura apresenta a forma se < condi¸˜o > ent˜o ca a < comandos> fim se Neste caso. a express˜o l´gica a a o <condi¸˜o> tiver como resultado o valor verdadeiro. Log fim se fim algoritmo Os comandos Log ← log10 (x) e escreva x. a o 1. L´gica de programa¸˜o o ca 1. assim.9 Fazer um algoritmo para calcular o logaritmo decimal de um n´ mero positivo.1 e 1. As estruturas condicionais podem ser simples ou compostas. Exemplo 1. Ela faz com que os comandos sejam executados na ordem em que aparecem. Log s´ ser˜o executados se a vari´vel x contiver o a a um valor maior que 0 . ca Exemplo 1. o fluxo natural de comandos.6.10 Escrever um algoritmo para ler dois n´ meros e escrevˆ-los em ordem decresu e cente.6 Estruturas condicionais Os algoritmos apresentados nos Exemplos 1. .2 utilizam apenas a estrutura sequencial. e somente se.

deve ser usada uma estrutura da forma se < condi¸˜o > ent˜o ca a < comandos 1 > sen˜o a < comandos 2 > fim se Se a express˜o l´gica <condi¸˜o> tiver como resultado o valor verdadeiro. se o resultado de <condi¸˜o> for falso. se 1 ≤ a < 5. por meio dos trˆs comandos aux ← m. ent˜o a sequˆna o ca a e a e a a cia <comandos 1> ser´ executada e a sequˆncia <comandos 2> n˜o ser´ executada.6. a 1. Algoritmo Intervalo { Objetivo: Verificar se um n´ mero pertence ao intervalo [1. por exemplo. 5) } u leia a se a ≥ 1 e a < 5 ent˜o a escreva a ’ pertence ao intervalo ’[1. n fim algoritmo Haver´ a troca entre as vari´veis m e n. Exemplo 1.1. Por outro lado.2 Estrutura condicional composta No caso de haver duas alternativas poss´ ıveis. Estruturas condicionais 11 Algoritmo Ordem decrescente { Objetivo: Escrever dois n´ meros dados em ordem decrescente } u leia m. ent˜o ser´ a lista <comandos 2> a unica ca a a ´ a ser executada.6. a vari´vel m contiver um valor menor que n.11 Elaborar um algoritmo para verificar se um n´ mero est´ dentro de um dado u a intervalo. m ← n e a a e n ← aux se. 5) sen˜o a escreva a ’ n˜o pertence ao intervalo ’[1. e somente se. n a se m < n ent˜o aux ← m m←n n ← aux fim se escreva m. 5) a fim se fim algoritmo .

se a for menor que a 1 ou maior ou igual a 5 ent˜o escreva a ’ n˜o pertence ao intervalo’ ser´ o unico comando a a a ´ executado. fx. dependendo se o n´ mero de repeti¸˜es for indefinido ou definido. gx ← −5 ∗ x e escreva x. Algoritmo Fun¸˜es modulares co { Objetivo: Avaliar duas fun¸˜es modulares } co leia x se x ≥ 0 ent˜o a fx ← 2 ∗ x gx ← 5 ∗ x sen˜o a fx ← −2 ∗ x gx ← −5 ∗ x fim se escreva x. L´gica de programa¸˜o o ca O comando escreva a ’ pertence ao intervalo’ ser´ executado se. gx ser˜o os unicos a serem executados. fx. os comandos fx ← −2 ∗ x. No entanto.12 Cap´ ıtulo 1. e ca ca dois tipos dessas estruturas. gx fim algoritmo Se a vari´vel x contiver um valor positivo ou nulo.1 N´ mero indefinido de repeti¸˜es u co Este tipo de estrutura de repeti¸˜o apresenta a forma ca . Existem. Caso contr´rio. seguindo-se o comando escreva x.7 Estruturas de repeti¸˜o ca Uma estrutura de repeti¸˜o faz com que uma sequˆncia de comandos seja executada repeca e tidamente at´ que uma dada condi¸˜o de interrup¸˜o seja satisfeita. se x a contiver um valor negativo. gx. basicamente.12 Elaborar um algoritmo para avaliar as fun¸˜es modulares f (x) = |2x| e g(x) = co |5x|. a vari´vel a a a contiver um valor maior ou igual a 1 e menor que 5 .7. fx. Exemplo 1. a ´ 1. u co 1. ent˜o os dois comandos fx ← 2 ∗ x e a a gx ← 5 ∗ x ser˜o executados. e somente se.

ap´s ao fim repita.13 Elaborar um algoritmo para calcular bilˆnico baseado na f´rmula de recorrˆncia [2] o o e xk+1 = xk + a xk × 0. a > 0. Quando a e a o ca isso ocorrer. Exemplo 1. as listas <comandos 1> e <comandos 2> ser˜o repetidas at´ que a express˜o l´gica <condi¸˜o> resulte no valor verdadeiro. Estruturas de repeti¸˜o ca 13 repita < comandos 1 > se < condi¸˜o > ent˜o ca a interrompa fim se < comandos 2 > fim repita < comandos 3 > O comando interrompa faz com que o fluxo de execu¸˜o seja transferido para o comando ca imediatamente a seguir do fim repita.5 para x0 > 0. ser´ executada. a repeti¸˜o ser´ interrompida (<comandos 2> n˜o ser´ executada) e a lista ca a a a o a <comandos 3>. utilizando o processo ba- Algoritmo Raiz quadrada { Objetivo: Calcular a raiz quadrada de um n´ mero positivo } u leia a. z { valor para calcular a raiz quadrada e valor inicial } i ←0 repita i ←i +1 x ← (z + a/z) ∗ 0 . √ a.7.1.5 se abs(x − z) < 10 −10 ou i = 20 ent˜o a interrompa fim se z ←x fim repita { teste de convergˆncia } e se abs(x − z) < 10 −10 ent˜o a escreva x { raiz quadrada de a } sen˜o a escreva ’processo n˜o convergiu com 20 itera¸˜es’ a co fim se fim algoritmo . Assim.

´ atribu´ ` vari´vel <controle> o valor de <valor-inicial> e ıdo a a e verificado se ele ´ maior que o <valor-final>. se n˜o houver a lista <comandos 2>. ent˜o os <comandos> ser˜o executados e a vari´vel a a a a .2 N´ mero definido de repeti¸˜es u co Quando se souber com antecedˆncia quantas vezes a estrutura deve ser repetida. Se for menor ou igual. ter-se-´ uma estrutura de repeti¸˜o com interrup¸˜o no in´ (estrutura while). pode ser e usado um comando de forma mais simples para < controle > ← < valor-inicial> at´ < valor-final > passo < delta > fa¸a e c < comandos > fim para Nesta estrutura. somado a 1. se for a primeira ent˜o o processo e co a convergiu. e a A forma repita–fim repita ´ o caso geral de uma estrutura de repeti¸˜o. Similarmente. inicialmente. Quando a e a a vari´vel Epsilon assumir um valor que. seja igual a 1. a estrutura para–fa¸a n˜o e c a ser´ executada.7. Algoritmo Epsilon { Objetivo: Determinar a precis˜o da m´quina } a a Epsilon ← 1 repita Epsilon ← Epsilon/2 se Epsilon + 1 = 1 ent˜o a interrompa fim se fim repita escreva Epsilon fim algoritmo Esta sequˆncia faz com que seja calculada a chamada precis˜o da m´quina ε. Exemplo 1. adicionado a 1. ent˜o a estrutura a a repita–fim repita ´ abandonada e o comando escreva Epsilon ser´ executado. L´gica de programa¸˜o o ca ´ E gerada uma sequˆncia de valores em x que ´ interrompida quando a diferen¸a entre dois e e c −10 valores consecutivos for menor que a tolerˆncia 10 a ou atingir 20 itera¸˜es. ent˜o ser´ uma a a a estrutura com interrup¸˜o no final (estrutura repeat–until).14 Escrever um algoritmo para determinar o maior n´ mero de ponto flutuante u que. ca 1. seja igual a 1. Se a lista e ca a a ca ca ıcio <comandos 1> n˜o existir. O teste de co convergˆncia verifica qual das duas condi¸˜es foi satisfeita.14 Cap´ ıtulo 1. Se for maior.

A a a o implementa¸˜o da nota¸˜o matem´tica (1. . n2 fim algoritmo . esse acumulador. Para implementar um somat´rio se faz necess´rio o uso de uma vari´vel auxiliar para acuo a a mular o resultado da soma de cada novo termo. . ´ verificado se a vari´vel a e a <controle> ´ maior que o <valor-final>. ent˜o os <comandos> ser˜o e a a a executados e assim sucessivamente. 5. Assim. 4 e 5. As repeti¸˜es se processam at´ que a vari´vel <controle> co e a se torne maior que o <valor-final>. cuja soma ´ e 2 1 + 3 + 5 + 7 + 9 = 25 = 5 . recebe o valor 0 que ´ o elemento neutro da adi¸˜o. 4+5=9 9 + 7 = 16 16 + 9 = 25 Ao final. Para cada valor de i ´ incremene ca e tado o valor de 2i − 1. ca ca a e Algoritmo Primeiros ´ ımpares { Objetivo: Verificar propriedade dos n´ meros ´ u ımpares } leia n Soma ← 0 para i ← 1 at´ n fa¸a e c Soma ← Soma + 2 ∗ i − 1 fim para escreva Soma.1) ´ mostrada no algoritmo abaixo.7. c Exemplo 1. ent˜o o a passo <delta> pode ser omitido da estrutura para –fa¸a. 2. Estruturas de repeti¸˜o ca 15 <controle> ser´ incrementada com o valor de <delta>. se n˜o for maior. 3. + 2n − 1 = n2 . quando i = n a vari´vel Soma conter´ o valor do somat´rio (n2 = 52 = 25). denominado Soma.15 Escrever um algoritmo para mostrar que a soma dos n primeiros n´ meros u ´ ımpares ´ igual ao quadrado de n e n i=1 (2i − 1) = 1 + 3 + 5 + . 7 e 9. Novamente. como mostrado na tabela i 2i − 1 – – 1 1 2 3 3 5 4 7 5 9 Soma 0 0+1=1 1+3=4 . (1.1) Por exemplo. Quando o incremento <delta> tiver o valor 1. Inicialmente. para n = 5 a vari´vel i assume os valores i = 1.1. 3. a express˜o a a do somat´rio (2i − 1) gera os n = 5 primeiros ´ o ımpares (2i − 1) = 1.

na qual e c a vari´vel de controle i come¸a com o valor 1 e ´ incrementada de 1 at´ assumir o valor n.2) ´ apresentada no algoritmo abaixo. para implementar um produt´rio ´ necess´rio uma vari´vel o o e a a auxiliar para acumular o resultado do produto de cada termo.16 Cap´ ıtulo 1. A implea a o e menta¸˜o da nota¸˜o matem´tica (1. . Esse acumulador recebe. a c e e Essa mesma sequˆncia de n´ meros ´ e u ımpares pode ser gerada pela estrutura similar para j ← 1 at´ 2 ∗ n − 1 passo 2 fa¸a e c Soma ← Soma + j fim para Exemplo 1. o Como no caso do somat´rio. (1. L´gica de programa¸˜o o ca A sequˆncia de n´ meros ´ e u ımpares (2i − 1) ´ gerada por uma estrutura para –fa¸a.16 Elaborar um algoritmo para calcular o fatorial de um n´ mero inteiro n. inicialmente. 3 e 4. denominado Fatorial . a vari´vel k assume os valores k = 1. o valor 1 que ´ o elemento neutro da multiplica¸˜o. por exemplo. sendo u n n! = k=1 k = 1 × 2 × 3 × . conforme esquematizado na tabela e k – 1 2 3 4 Fatorial 1 1×1=1 . Fatorial fim algoritmo . A express˜o do a a produt´rio resulta em 4! = 1 × 2 × 3 × 4 = 24. Para cada valor de k o e ca acumulador. 2.2) Para n = 4. 1×2=2 2×3=6 6 × 4 = 24 Quando k = n a vari´vel Fatorial conter´ o valor do produt´rio que ´ igual a n!. . × n. ´ multiplicado por k. ca ca a e Algoritmo Fatorial { Objetivo: Calcular o fatorial de um n´ mero inteiro } u leia n Fatorial ← 1 para k ← 2 at´ n fa¸a e c Fatorial ← Fatorial ∗ k fim para escreva n.

u Exemplo 1. uma e a ca e condi¸˜o de erro.1. para evitar a opera¸˜o desnecess´ria 1 × 1 se k = 1 . Neste caso. que receba como o parˆmetro de entrada o n´ mero inteiro n e retorne como parˆmetro de sa´ o fatorial desse a u a ıda n´ mero na vari´vel Fatorial . baseado no algoritmo de Exemplo 1.8. uma singularidade da matriz ou mesmo ca a o uso inapropriado de parˆmetros. a vari´vel de ca c a controle k recebe o valor 2 . u a . Uma grande vantagem da modulariza¸˜o ´ a utiliza¸˜o de um mesmo m´dulo por outros algoritca e ca o mos que requeiram aquela funcionalidade. Se n = 1 ca a ent˜o a estrutura para –fa¸a n˜o ser´ executada. Os dados necess´rios para a execu¸˜o de um a ca algoritmo (m´dulo) s˜o declarados por meio do comando o a parˆmetros de entrada < lista-de-vari´veis> .8 Falha no algoritmo O comando abandone ´ usado para indicar que haver´ uma falha evidente na execu¸˜o do algoritmo. Inicialmente. a a onde <lista-de-vari´veis> s˜o os nomes das vari´veis. mas ter-se-´ o resultado correto 1! = 1. a ca 1. a execu¸˜o deve ser cancelada. ordem e n´ mero. Por outro lado. uma divis˜o por zero.17 Escrever um m´dulo. A intera¸˜o entre as vari´veis dos m´dulo e as vari´veis do algoritmo principal ´ realizada ca a o a e pelos parˆmetros de entrada e de sa´ a ıda. isto ´.9 Modulariza¸˜o ca A t´cnica de modulariza¸˜o consiste em subdividir o algoritmo principal em m´dulos. cada qual com um objetivo bem espec´ ıfico. os valores de interesse calculados pelo algoritmo (m´dulo) o s˜o definidos pelo comando a parˆmetros de sa´ a ıda < lista-de-vari´veis> . fore ca o mados por um subconjunto de comandos. a c a a a 1.16. Por exemplo. a ´ E de responsabilidade do projetista do m´dulo definir a <lista-de-vari´veis> em termos de o a identificadores. Falha no algoritmo 17 Esse algoritmo utiliza a estrutura de repeti¸˜o para –fa¸a. separadas por v´ a a a ırgulas. contendo os valores fornecidos.

mostradas a a e na tabela abaixo. s˜o vari´veis agrupaa a e a a das em um unico nome. por exemplo.4 Vari´veis e coment´rios. ou seja. Essa forma pode ser. Por isso.10 Estruturas de dados Conforme visto na Se¸˜o 1. a u ca o Quando se tem v´rias vari´veis com o conte´ do do mesmo tipo elas podem ser agrupadas a a u em uma unica vari´vel. L´gica de programa¸˜o o ca Algoritmo Calcula fatorial { Objetivo: Calcular o fatorial de um n´ mero inteiro } u parˆmetro de entrada n { n´ mero inteiro } a u parˆmetro de sa´ Fatorial { fatorial do n´ mero inteiro } a ıda u .10. na realidade. sejam as notas de 45 alunos referentes ` Prova 1 da disciplina An´lise Num´rica. Ela ´ representada o a e por um identificador que ´ uma cadeia de caracteres alfanum´ricos. e as matrizes. uma vari´vel corresponde a uma posi¸˜o ca a a a ca de mem´ria do computador onde est´ armazenado um determinado valor. Por exemplo. Fatorial ← 1 para k ← 2 at´ n fa¸a e c Fatorial ← Fatorial ∗ k fim para fim algoritmo A forma de chamada do m´dulo acima pelo m´dulo principal depende da linguagem de o o programa¸˜o escolhida.18 Cap´ ıtulo 1. sendo nc o n´ mero de chamada de cada aluno. elas s˜o a denominadas vari´veis compostas homogˆneas e as mais comuns s˜o os vetores. com um a e a unico ´ ´ ındice. ca Algoritmo Fatorial principal { Objetivo: Utilizar o m´dulo Calcula fatorial } o leia n { n´ mero inteiro } u Fatorial ← Calcula fatorial(n) { chamada do m´dulo } o escreva Fatorial { fatorial do n´ mero inteiro } u fim algoritmo 1.1 Vetores Vetores ou arranjos s˜o vari´veis homogˆneas unidimensionais. cujos elementos s˜o individualizados por um s´ ´ ´ a o ındice. com dois ou mais ´ ındices. Quando se faz referˆncia e e e a um identificador. 1. u . sendo cada conte´ do individualizado por ´ ´ a u ındices. est´ tendo acesso ao conte´ do de uma posi¸˜o de mem´ria.

45 O vetor Notas cont´m 45 elementos. e Deste modo. + 17). x a { tamanho do vetor e o vetor } parˆmetro de sa´ Maior a ıda { Maior elemento do vetor } Maior ← x(1 ) para i ← 2 at´ n fa¸a e c se x(i ) > Maior ent˜o a Maior ← x(i ) fim se fim para fim algoritmo Figura 1. 17 19 nc 1 2 3 4 5 6 7 8 . sucessivamente. . . para obter a nota m´dia da Prova 1 basta calcular e Nota m´dia = e 1 45 45 Notas(i ) = i=1 1 (15 + 19 + 12 + . . Por exemplo. Algoritmo Vetor maior { Objetivo: Determinar o maior elemento de um vetor } parˆmetros de entrada n. . Estruturas de dados Notas Prova 1 15 19 12 20 . Notas(2 ) = 19 ´ a e e e nota do aluno 2 da lista e assim. 45 Exemplo 1.1 mostra um algoritmo para determinar o maior elemento de um vetor x de tamanho n.1. 18 20 13 19 . . .10. Notas(1 ) = 15 ´ a nota do aluno 1 da lista de chamada. at´ que Notas(45 ) = 17 ´ a nota do aluno e 45.18 A Figura 1.1: Maior elemento de um vetor x de tamanho n. . cada um referenciando a nota da Prova 1 de cada aluno.

20 Cap´ ıtulo 1. sabendo que e e ¯ a   2 n n n 1 1  1 x= ¯ xi e s2 = x2 − xi  .) ca a . DesvioPadr˜ o a ıda e a Soma ← 0 Soma2 ← 0 para i ← 1 at´ n fa¸a e c Soma ← Soma + x(i ) Soma2 ← Soma2 + x(i )2 fim para M´ dia ← Soma/n e DesvioPadr˜ o ← raiz2 ((Soma2 − Soma2 /n)/(n − 1 )) a escreva M´ dia.2 inverte a ordem dos elementos de um vetor x de tamanho n. x a { tamanho e elementos do vetor } parˆmetros de sa´ M´ dia. x a { tamanho do vetor e o vetor } parˆmetro de sa´ x a ıda { vetor com os elementos em ordem inversa } para i ← 1 at´ trunca(n/2 ) fa¸a e c t ← x(i ) x(i ) ← x(n + 1 − i ) x(n + 1 − i ) ← t fim para fim algoritmo Figura 1.2.3: Algoritmo para c´lculo da m´dia aritm´tica e desvio padr˜o.2.2: Invers˜o da ordem dos elementos de um vetor x de tamanho n. na p´gina 5.) ca a Exemplo 1. DesvioPadr˜ o e a fim algoritmo Figura 1. a Figura 1. na p´gina 5. L´gica de programa¸˜o o ca Exemplo 1.3 mostra um algoritmo para calcular a m´dia aritm´tica x e o desvio padr˜o s de seus elementos.20 Dado um vetor x com n componentes. i n i=1 n − 1 i=1 n i=1 Algoritmo M´dia desvio e { Objetivo: Calcular m´dia aritm´tica e desvio padr˜o } e e a parˆmetros de entrada n. a e e a (Ver significado da fun¸˜o raiz2 na Tabela 1. a (Ver significado da fun¸˜o trunca na Tabela 1.19 O algoritmo da Figura 1. Algoritmo Vetor inverte { Objetivo: Inverter a ordem dos elementos de um vetor } parˆmetros de entrada n.

17 Notas An´lise Num´rica a e 1 Prova 2 Prova 3 Prova 4 12 17 10 20 18 20 19 17 18 20 20 20 .22 A Figura 1. . 13 20 19 19 19 20 17 14 18 20 20 17 . .10. . considere a tabela abaixo com as notas de 45 alunos referentes as Provas 1. . a e e u nc 1 2 3 4 5 6 7 8 . s˜o vari´veis agrupadas em um a a e e a a unico nome com os elementos individualizados por meio de dois ´ ´ ındices. .2 Matrizes Matrizes s˜o vari´veis homogˆneas bidimensionais. . a matriz Notas cont´m 45 linhas referentes a cada aluno e 4 colunas e ` indicando cada uma das provas. . 1 ) = 15 ´ a nota do aluno 1 na Prova 1. 3 ) = 18 ´ a nota do aluno 2 na Prova 3 e Notas(45 . . Assim. 3 e 4 da ` disciplina An´lise Num´rica. 45 Prova 15 19 12 20 18 20 13 19 . isto ´.5 apresenta um algoritmo para determinar o maior elemento em cada linha de uma matriz A de dimens˜o m × n. Exemplo 1. a . Estruturas de dados 21 1. . 4 ) = 16 ´ a nota do aluno 45 e e na Prova 4.10. Exemplo 1. e Nota(2 . 12 10 16 Para referenciar a nota de cada aluno em cada prova s˜o necess´rios dois ´ a a ındices.1.21 O algoritmo da Figura 1. onde nc ´ o n´ mero de ordem na chamada de cada aluno. . 2. Notas(1 . Por isso. . Para exemplificar.4 calcula a soma das linhas da matriz A de dimens˜o a m × n. O primeiro ´ ındice indica qual aluno entre os quarenta e cinco e o segundo ´ ındice especifica qual das quatro provas. .

j) fim para fim para fim algoritmo Figura 1. n. j) > Maior (i ) ent˜o a Maior (i ) ← A(i . L´gica de programa¸˜o o ca Algoritmo Matriz soma linha { Objetivo: Calcular a soma de cada linha da matriz } parˆmetros de entrada m. j) fim se fim para fim para fim algoritmo Figura 1. A a { n´ mero de linhas.22 Cap´ ıtulo 1. Algoritmo Matriz maior { Objetivo: Determinar maior elemento em cada linha da matriz } parˆmetros de entrada m. 1 ) para j ← 2 at´ n fa¸a e c se A(i . n.4: Algoritmo para calcular a soma das linhas de uma matriz. n´ mero de colunas e elementos da matriz } u u parˆmetro de sa´ Maior a ıda { vetor contendo o maior elemento de cada linha } para i ← 1 at´ m fa¸a e c Maior (i ) ← A(i .5: Algoritmo para determinar o maior elemento da linha de uma matriz. A a { n´ mero de linhas. n´ mero de colunas e elementos da matriz } u u parˆmetro de sa´ SomaLinha a ıda { vetor contendo a soma de cada linha } para i ← 1 at´ m fa¸a e c SomaLinha(i ) ← 0 para j ← 1 at´ n fa¸a e c SomaLinha(i ) ← SomaLinha(i ) + A(i . .

n. . 45 18 Prova 4 12 18 19 19 . n´ mero de colunas. m. Estruturas de dados 23 Exemplo 1. . . . .1. . .3 Hipermatrizes Hipermatrizes s˜o vari´veis compostas homogˆneas multidimensionais. 2.6 mostra um algoritmo para calcular o vetor x (n × 1) resultante do produto de uma matriz A (n × m) por um vetor v (m × 1) m xi = j=1 aij vj .10. .6: Produto matriz-vetor. . . . . 20 19 18 20 . } u u { elementos da matriz e elementos do vetor } parˆmetro de sa´ x a ıda { vetor resultante do produto matriz-vetor } para i ← 1 at´ n fa¸a e c Soma ← 0 para j ← 1 at´ m fa¸a e c Soma ← Soma + A(i . Algoritmo Produto matriz vetor { Objetivo: Calcular o produto de uma matriz por um vetor } parˆmetros de entrada n. Por exemplo. v a { n´ mero de linhas. . 14 15 nc Prova 1 1 16 2 17 3 14 4 19 5 20 6 12 7 15 8 18 .10. A. i = 1. 17 . . j) ∗ v (j) fim para x(i ) ← Soma fim para fim algoritmo Figura 1. 2. sendo nc o n´ mero de ordem na u chamada de cada aluno. Notas AEDS III Prova 2 Prova 3 14 18 19 20 20 20 18 19 19 19 20 20 18 11 19 17 . .23 A Figura 1. . 3 e 4 da discia plina Algoritmos e Estruturas de Dados III (AEDS III). seja a o ca a tabela abaixo mostrando as notas de 45 alunos referentes `s Provas 1. 1. sendo o n´ mero a a e u m´ximo de dimens˜es limitado por cada linguagem de programa¸˜o.

1. 1. 2 .6 Estruturas condicionais ca Escrever um algoritmo para avaliar uma fun¸˜o abaixo: ca 1. 1 ) = 19 ´ a nota e do aluno 3 na Prova 2 em An´lise Num´rica enquanto que Nota(8 .24 Cap´ ıtulo 1.10 Fazer um algoritmo para ler dois n´ meros e escrevˆ-los em ordem crescente.3 x ← a + b c−2 . 1. 4 + d−5 1. 1. para 1 ≤ x < 5.6 e(x) = x2 + √ x + 1. 1. 1. com cada p´gina contendo 45 linhas referentes ` cada aluno (primeiro ´ a a ındice) e com 4 colunas indicando cada uma das provas (segundo ´ ındice). −3 ≤ x ≤ 0.7 f (x) = 3x2 + 2x + cos(x3 − 1). 2 a+3 Se¸˜o 1. x sen(5x). para referenciar a nota de cada aluno em cada prova e em cada disciplina na mesma vari´vel Nota s˜o necess´rios agora trˆs ´ a a a e ındices. . 1. para x > −1.5 z ← b + √ d d < ac ou a2 + b + c > . uma para cada disciplina (terceiro ´ e a ındice).2 w ← a−1 1. 4 b−c−1 b + d+2 6 + c. o segundo ´ ındice especifica qual das quatro provas e o terceiro estabelece qual das duas disciplinas entre An´lise Num´rica e AEDS III. c = 7 e d = 10. u e . 0 ≤ x ≤ 5. Notas(3 .5 Express˜es ca o a Escrever as f´rmulas abaixo na nota¸˜o algor´ o ca ıtmica e avaliar a express˜o para a = 2. para |x| ≤ 1. 4 . a hipermatriz a e tridimensional Notas cont´m duas p´ginas. Assim.11 Exerc´ ıcios Se¸˜o 1. L´gica de programa¸˜o o ca Nesse caso.8 g(x) = sen−1 (x) + e2x+1 .9 h(x) = ex − 1. b = 5.4 y ← c ≥ d + 1 e ab = d. O primeiro ´ ındice indica qual aluno entre os quarenta e cinco. 2 ) = 20 ´ a nota do a e e aluno 8 na Prova 4 de AEDS III.1 v ← a+d 3 − . Por exemplo. 1.

. pois requerem um n´ mero elevado de termos. que utilizam os comandos leia e escreva. Exerc´ ıcios Se¸˜o 1.22 Exemplo 1. a 1. . 1! 2! 3! x3 x5 x7 + − + . 1! 2! 3! 10! Elaborar um algoritmo para ler um argumento e calcular uma fun¸˜o elementar abaixo. . s˜o muito ineficientes o e a para aproximar fun¸˜es.. para |x| ≤ 1. 1 4 9 16 144 25 1.18.7 Estruturas de repeti¸˜o ca ca Fazer um algoritmo para calcular uma express˜o abaixo. .. A s´rie deve ser truncada quando um termo for menor que e e e −10 10 ou atingir 1000 termos. aproca ximada por s´rie de potˆncias [1]. . .11 S = 1.16 loge (x) = (x − 1) − 1..1.19 cos(x) = 1 − (x − 1)2 (x − 1)3 + − . 1. geralmente.+ .− . para 0 < x ≤ 2. 1. Essas expans˜es em s´rie.20 arcsen(x) = x + Se¸˜o 1. . .12 T = 1. 1 2 3 15 4 12 1 2 3 − + − + .13. .. em m´dulos com parˆmetros de entrada e de sa´ o a ıda. 3! 5! 7! x2 x4 x6 + − + . .18 sen(x) = x − 1.. o ca 1. 2! 4! 6! 1 x3 1 × 3 x5 1 × 3 × 5 x7 × + × + × + . 2 3 2×4 5 2×4×6 7 1.+ .11. ± n!.. .. 2 3 x x2 x3 + + + .. .14 F = 1! + 2! − 3! + 4! + 5! − 6! + .13 N = 1 3 5 9 + + + . .21 Exemplo 1.15 P = − 13 33 53 193 + − + .+ .. 1. elas co u possibilitam ´timos exemplos para uso das estruturas de repeti¸˜o.9 Modulariza¸˜o ca ca Converter os algoritmos dos exemplos abaixo. .17 exp(x) = 1 + 1.. No entanto. 2 4 6 10 2×1 30 × 29 28 × 27 26 × 25 + + + . ..

23. m. y e v vetores de dimens˜o n e k um escalar. . . . 2. . com mij = xi yj .24 Exemplo 1. 1≤i≤n 1.34 Determinar a norma de soma m´xima de linha A a n ∞ = max 1≤i≤m j=1 |aij |. .28 Determinar a norma Euclidiana x 2 = i=1 |xi |2 . o vetor y de dimens˜o m. m 1. 1. 3. 1. . 2. Se¸˜o 1. n xi yi . a n 1. . a matriz A (m × n) e a matriz B (n × p). n 1. n. . . p. . 1. L´gica de programa¸˜o o ca 1. . sendo cij = k=1 aik bkj . 2. n 1.35 Calcular o produto C = AB. . n 1.27 Avaliar v = kx + y → vi = k × xi + yi .29 Calcular a norma de m´xima magnitude x a ∞ = lim p p→∞ i=1 |xi |p = max |xi |.26 Calcular o produto interno k = xT y = x1 y1 + x2 y2 + x3 y3 + · · · + xn yn = 1. m e j = 1. . .30 Ordenar os elementos de x em ordem decrescente.25 Exemplo 1. a a Sejam o vetor x de dimens˜o n.26 Cap´ ıtulo 1.33 Calcular a norma de soma m´xima de coluna A a 1 = max 1≤j≤n i=1 |aij |. .21. . sendo x.20. 2. Escrever um algoritmo para cada item abaixo. . i = 1.10 Estruturas de dados ca Elaborar um algoritmo para cada item.31 Avaliar o produto externo M = xy T .32 Avaliar a norma de Frobenius A F = i=1 j=1 |aij |2 .23 Exemplo 1. . i=1 1. 2. para i = 1. . . 1. i = 1. . m n e j = 1.

Se um comando for muito e longo... no caso de ambia a ente Linux.) seguidos do pressionamento da tecla Enter ou Return indica a e que o comando continuar´ na pr´xima linha. interpretado a e e e e exibido o resultado. A intera¸˜o entre o SCILAB e o usu´rio ´ feita por interm´dio de uma janela. e Um comando ´ finalizado acionando-se a tecla Enter ou Return.2). na qual um comando ´ fornecido. sendo que e o o ca <SCIDIR> denota o diret´rio onde o programa foi instalado. no caso de d´ vida a a u sobre a sintaxe ou mesmo a existˆncia de algum comando.Cap´ ıtulo 2 Ambiente de programa¸˜o ca O SCILAB ´ executado por meio do script scilab no diret´rio <SCIDIR>/bin. os meios que o programa tem de auxiliar o usu´rio durante a sess˜o. a Se for utilizada a op¸˜o -nw a janela do SCILAB aparecer´ na pr´pria janela de comando ca a o (ver Figura 2. Al´m disto. o cursor deve ser colocado sobre o seu ´ ıcone e pressionado o bot˜o da esquerda do mouse ou ent˜o. e 2. as e v´ ırgulas indicam ao SCILAB para mostrar os resultados e os pontos-e-v´ ırgulas para suprimir 27 . ent˜o trˆs pontos (. bem a como. Sem a op¸˜o -nw aparecer´ uma nova janela pela qual ser´ feita a intera¸˜o entre ca a a ca o SCILAB e o usu´rio (ver Figura 2. V´rios comandos podem ser colocados em a o a uma mesma linha se eles forem separados por v´ ırgulas ou pontos-e-v´ ırgulas. a Neste cap´ ıtulo ser´ descrita a janela de comando do SCILAB e seus comandos b´sicos. entrar com o comando scilab ou scilab -nw (no window) em uma janela de comando.1).1 Janela de comando Para executar o SCILAB em ambiente Windows ou Macintosh. O sinal de que o programa est´ pronto para receber um comando ´ indicado a e pelo prompt formado pelos trˆs caracteres (-->).

28

Cap´ ıtulo 2. Ambiente de programa¸˜o ca

Figura 2.1: Janela de comando da vers˜o 5.1.1 do SCILAB (sem -nw). a

Figura 2.2: Janela de comando da vers˜o de 5.1.1 do SCILAB (com -nw). a

a exibi¸˜o. ca Um texto ap´s duas barras invertidas (//) ´ ignorado; ele pode ser utilizado como um o e coment´rio para a documenta¸˜o de um programa. a ca As teclas ↑ e ↓ podem ser usadas para listar os comandos previamente dados e as teclas → e ← movem o cursor na linha de comando facilitando a sua modifica¸˜o. ca O n´ mero de linhas e colunas a serem exibidas de cada vez na janela de comando pode ser u

2.1. Janela de comando redefinida pelo comando lines. Sua sintaxe ´ e lines(<n´mero-de-linhas>,<n´mero-de-colunas>) u u

29

onde <n´mero-de-linhas> e <n´mero-de-colunas> definem o n´ mero de linhas e colunas, u u u e respectivamente, a serem exibidas, sendo o segundo argumento opcional. O comando ´ desativado por lines(0). O comando clc ´ usado para limpar a janela de comando1 e tohome posiciona o cursor no e canto superior esquerdo da janela de comando. O t´rmino de execu¸˜o do SCILAB ´ feito e ca e pelos comandos quit ou exit. Quando o SCILAB for ativado, os comandos contidos no arquivo scilab.ini s˜o automatia camente executados, caso ele exista, para que sejam atribu´ ıdos valores a alguns parˆmetros. a Deste modo, o usu´rio pode criar um arquivo contendo, por exemplo, defini¸˜o de constantes a ca matem´ticas e f´ a ısicas, formatos de exibi¸˜o ou quaisquer comandos do SCILAB para persoca nalizar a sua janela de comando. Este arquivo deve ser criado em um diret´rio espec´ o ıfico, dependendo do sistema operacional utilizado (use help startup para mais informa¸˜es). co A abrangˆncia e potencialidade do SCILAB est´ muito al´m do que ser´ mostrado neste e a e a texto, por isso ´ aconselh´vel executar a op¸˜o Scilab Demonstrations, dentro da op¸˜o e a ca ca 1 ? no canto superior ` direita , para visualizar uma demonstra¸˜o e se ter uma id´ia dessa a ca e potencialidade.

2.1.1

Espa¸o de trabalho c

As vari´veis criadas durante uma sess˜o ficam armazenadas em uma mem´ria denominada a a o espa¸o de trabalho. O comando who lista o nome das vari´veis que est˜o sendo usadas, ou c a a seja, que est˜o presentes no espa¸o de trabalho. Este comando lista as vari´veis criadas pelo a c a usu´rio e as definidas pelo pr´prio SCILAB. Por exemplo, no in´ de uma sess˜o, quando a o ıcio a o usu´rio criou apenas uma vari´vel, a a
-->a = 1 // cria a variavel a com o valor 1 a = 1. -->who Your variables are: a home simulated_annealinglib genetic_algorithmslib scicos_pal %scicos_menu %scicos_display_mode modelica_libs %CmenuTypeOneVector %scicos_gif scicos_utilslib scicos_autolib development_toolslib scilab2fortranlib soundlib texmacslib maple2scilablib metanetgraph_toolslib statisticslib timelib sparselib signal_processinglib
1

matiolib umfpacklib %scicos_short scicos_pal_libs %scicos_contrib spreadsheetlib scipadinternalslib tclscilib metaneteditorlib stringlib %z

parameterslib fft %scicos_help %scicos_lhb_list scicos_menuslib demo_toolslib scipadlib m2scilib compatibility_functilib special_functionslib %s

Quando o SCILAB for executado sem a op¸ao -nw. c˜

30

Cap´ ıtulo 2. Ambiente de programa¸˜o ca

polynomialslib overloadinglib jvmlib iolib dynamic_linklib guilib graphic_exportlib graphicslib elementary_functionlib differential_equationlib PWD %F %inf COMPILER TMPDIR MSDOS %tk %fftw %f %eps %e %pi using 33369 elements out of 5000000. and 86 variables out of 9231. Your global variables are: %modalWarning demolist %driverName %exportFileName %toolboxes_dir using 2681 elements out of 5000001. and 9 variables out of 767.

optimizationlib interpolationlib data_structureslib fileiolib helptoolslib %T SCI %gui $ %io

linear_algebralib integerlib cacsdlib functionslib corelib %nan SCIHOME %pvm %t %i

%helps LANGUAGE

%helps_modules %toolboxes

2.1.2

Diret´rio corrente o

Diret´rio corrente ´ aquele considerado em uso, sem ser necess´rio especific´-lo explicitao e a a mente durante uma a¸˜o. Para saber qual o diret´rio de trabalho corrente utiliza-se o ca o comando pwd,
-->pwd // mostra o diretorio de trabalho corrente ans = ffcampos

O resultado exibido depende do diret´rio de onde o SCILAB foi executado. O diret´rio o o corrente pode ser alterado por meio do comando cd,
-->cd scilab // muda o diretorio de trabalho corrente para ’scilab’ ans = ffcampos/scilab

O SCILAB fornece diversos comandos para gerenciamento de arquivos, os quais s˜o mostraa dos na Tabela 2.1. Tabela 2.1: Comandos para gerenciamento de arquivos. Comando dir ou ls mdelete(’<nome do arquivo>’) cd <dir> ou chdir <dir> pwd Descri¸˜o ca lista os arquivos do diret´rio corrente; o remove o arquivo <nome do arquivo>; muda o diret´rio para <dir>; o mostra o diret´rio corrente. o

2.2. Comandos de aux´ ao usu´rio ılio a

31

2.1.3

Comando unix

O comando unix(’<comando do unix>’) permite a execu¸˜o de um comando do sistema ca operacional Unix dentro do SCILAB. Por exemplo, caso o arquivo precisao.sci exista no diret´rio corrente, o seu conte´ do ´ exibido pelo comando, o u e
-->unix(’more precisao.sci’); // lista conteudo do arquivo // programa precisao // Objetivo: determinar a precisao de um computador n = 0; Epsilon = 1; while 1 + Epsilon > 1 n = n + 1; Epsilon = Epsilon / 2; end n, Epsilon, %eps

2.2

Comandos de aux´ ao usu´rio ılio a

O SCILAB possui muito mais comandos do que aqueles apresentados neste texto, o que torna mais dif´ lembr´-los. Com o intuito de auxiliar o usu´rio na procura de comandos, o ıcil a a programa provˆ assistˆncia por interm´dio de suas extensivas capacidades de aux´ direto. e e e ılio Estas capacidades est˜o dispon´ a ıveis em trˆs formas: o comando help, o comando apropos e e, interativamente, por meio de um menu de barras.

2.2.1

Comando help

O comando help ´ a maneira mais simples de obter aux´ no caso de conhecer o t´pico em e ılio o que se quer assistˆncia. Sua sintaxe ´ e e help <t´pico> o onde <t´pico> ´ o nome da fun¸˜o ou de diret´rio. Por exemplo, quando se usa help sqrt, o e ca o abre-se uma janela como a mostrada na Figura 2.3. Assim, s˜o dadas informa¸˜es sobre a fun¸˜o sqrt para extrair raiz quadrada. O comando a co ca help funciona a contento quando se conhece exatamente o t´pico sobre o qual quer aso sistˆncia. Considerando que muitas vezes este n˜o ´ o caso, o help pode ser usado sem e a e <t´pico> para apresentar uma p´gina de hipertexto contendo a lista de ´ o a ıtens dispon´ ıveis. O comando help ´ mais conveniente se o usu´rio conhecer exatamente o t´pico em que e a o deseja aux´ ılio. No caso de n˜o saber soletrar ou mesmo desconhecer um t´pico as outras a o duas formas de assistˆncia s˜o muitas vezes mais proveitosas. e a

32

Cap´ ıtulo 2. Ambiente de programa¸˜o ca

Figura 2.3: Janela do comando help.

2.2.2

Comando apropos

e e o O comando apropos provˆ assistˆncia pela procura em todas as primeiras linhas dos t´picos de aux´ e retornando aquelas que contenham a palavra-chave especificada. O mais imporılio e tante ´ que a palavra-chave n˜o precisa ser um comando do SCILAB. Sua sintaxe ´ e a apropos <palavra-chave> onde <palavra-chave> ´ a cadeia de caracteres que ser´ procurada nos comandos do SCIe a LAB. Por exemplo, para informa¸˜es sobre fatoriza¸˜o, tecla-se apropos factorization, co ca resultando em uma tela com p´gina dupla. A p´gina da esquerda apresenta as classes de a a fun¸˜es do SCILAB que cont´m pelo menos uma fun¸˜o com a descri¸˜o de factorization. co e ca ca A segunda p´gina mostra dentro de uma classe quais as fun¸˜es que apresentam a palavra a co factorization em sua descri¸˜o. A escolha da classe Linear Algebra, por exemplo, reca sulta em uma tela, como mostrada na Figura 2.4. Apesar de a palavra factorization n˜o ser um comando do SCILAB, ela foi encontrada na a descri¸˜o de v´rias fun¸˜es. Um clique sobre uma das linhas da p´gina a esquerda escolhe a ca a co a ` classe de fun¸˜es e um clique sobre uma fun¸˜o da p´gina ` direita descreve aquela fun¸˜o co ca a a ca espec´ ıfica, como um comando help. Por exemplo, a escolha de chfact - sparse Cholesky factorization, ´ equivalente ao comando help chfact. e

2.3. Exerc´ ıcios

33

Figura 2.4: Janela do comando apropos.

2.2.3

Menu de barras

Quando o SCILAB for executado sem a op¸˜o -nw, um aux´ por interm´dio de menuca ılio e dirigido ´ dispon´ selecionando a op¸˜o Help Browser indicada por um (?) dentro de e ıvel ca um c´ ırculo (´ ltimo ´ u ıcone ` direita) no menu de barras, como visto na Figura 2.1. Como o a uso desta forma de assistˆncia ´ bem intuitivo, o melhor a fazer ´ experimentar! e e e

2.3

Exerc´ ıcios

Se¸˜o 2.1 Janela de comando ca 2.1 Executar o programa SCILAB. 2.2 Verificar a diferen¸a entre , e ; nos comandos %pi+1, %pi*10 e %pi+1; %pi*10;. c 2.3 Testar o funcionamento das teclas ↑ e ↓. 2.4 Ver o funcionamento das teclas → e ←. 2.5 Verificar a diferen¸a entre lines(20), lines() e lines(0). c Se¸˜o 2.2 Comandos de aux´ ao usu´rio ca ılio a 2.6 Quantos parˆmetros tem a fun¸˜o erro erf? a ca 2.7 Quais s˜o os comandos utilizados para interpola¸˜o (interpolation)? a ca

Ambiente de programa¸˜o ca 2.34 Cap´ ıtulo 2.9 Qual o comando para achar ra´ (roots) de uma equa¸˜o polinomial? ızes ca 2. ca o .8 Qual o comando usado para calcular o determinante (determinant) de uma matriz? 2.10 Comparar a soma dos autovalores (eigenvalues) com o tra¸o (trace) de uma matriz de c ordem qualquer. Fazer a mesma compara¸˜o usando uma matriz com elementos aleat´rios.

567×102 = 456.23e-1 ans = 0. Esta seq¨ˆncia pode terminar ou n˜o por uma das letras e. Opera¸˜es matem´ticas com n´ meros complexos s˜o a e co a escritas do mesmo modo como para n´ meros reais. o que n˜o ´ o caso do SCILAB. polinˆmios e listas.1 Num´ricas e Uma constante num´rica ´ formada por uma seq¨ˆncia de d´ e e ue ıgitos que pode estar ou n˜o a precedida de um sinal positivo (+) ou um negativo (-) e pode conter um ponto decimal (.Cap´ ıtulo 3 Estruturas de dados Neste cap´ ıtulo ser˜o apresentados alguns ´ a ıtens b´sicos.567d2 ´ 4.1. Al´m disto. E.123 -->4. a a a ıvel vetores. d ou D seguida de outra ue a seq¨ˆncia de d´ ue ıgitos precedida ou n˜o de um sinal positivo (+) ou um negativo (-). hipermatrizes.123 e 4.7 e -->1. tais como.23×10−1 = 0. e e o 3.567d2 ans = 456. Esta a segunda seq¨ˆncia ´ a potˆncia de 10 pela qual a primeira seq¨ˆncia ´ multiplicada. 3. o conhecimento sobre as estruturas de dados ´ e e fundamental para um uso eficiente do programa. 1. vari´veis. matrizes. constantes.). Para indicar a parte imagin´ria basta u a 35 .7 Algumas linguagens de programa¸˜o requerem um tratamento especial para n´ meros comca u u a plexos.23e-1 significa 1. Por ue e e ue e exemplo. l´gicas e literais. o que tornar´ poss´ o uso imediato o do SCILAB no modo interativo.1 Constantes O SCILAB suporta trˆs tipos de constantes: num´ricas.

36 Cap´ ıtulo 3. + 2.1. -->’abcde’ ans = abcde // um valor literal 3. ca 3. Estruturas de dados √ acrescentar os trˆs caracteres (*%i). conforme mostrado na Tabela 3.1.i −1 = i representado por As vari´veis reais e complexas em SCILAB ocupam 24 e 32 bytes de mem´ria. -->3+2*%i ans = 3. respectivaa o mente.1.1 Regras para nomes de vari´veis a Como qualquer outra linguagem de programa¸˜o. sendo representada por um identificador.3 Literais Uma constante literal ´ composta por uma cadeia de caracteres em vez de n´ meros ou e u verdadeiro e falso. o SCILAB tem regras a respeito do nome ca de vari´veis. -->%t // valor verdadeiro ans = T -->%f // valor falso ans = F 3. A cadeia de caracteres deve estar delimitada por aspas (’) ou ap´strofos o ("). 3.2 Vari´veis a Uma vari´vel ´ uma posi¸˜o da mem´ria do computador utilizada para armazenar uma a e ca o informa¸˜o.2 L´gicas o Uma constante l´gica pode assumir apenas dois valores: %t ou %T (true) para verdadeiro e o %f ou %F (false) para falso. ou seja. multiplicar (*) por e (%i). a .2.

%inf.2 Comando de atribui¸˜o ca O SCILAB ´ um interpretador de express˜es.2. #. A express˜o fornecida ´ analisada sintaticae o a e mente e se estiver correta ent˜o ser´ avaliada. Se o nome da vari´vel e o sinal de atribui¸˜o (=) forem omitidos ent˜o o resultado ser´ dado a ca a a a ` vari´vel default ans (answer). %i.3. n´ meros ou dos caracu teres . ! e ? tamanho da letra ´ diferenciador raiz.2+5. %s . $.2. %nan. Raiz e RAIZ s˜o trˆs vari´veis distintas. a -->8/5 ans = 1. %eps.2.6 3. e a e a 3. a e u a e -->b=5-2. Para obter os valores destas vari´veis especiais. Vari´veis a 37 Tabela 3.1: Regras para nomes de vari´veis.2. c ca a de letras.) ent˜o o resultado ´ atribu´ ca a e ıdo a ` vari´vel. %pi. O resultado ´ atribu´ a uma vari´vel por a a e ıdo ` a interm´dio do comando de atribui¸˜o e ca <vari´vel> = <express~o> a a Por exemplo. faz-se a -->%e. -->a=10. e a come¸ar com uma letra seguida alguns caracteres de pontua¸˜o s˜o permitidos. por´m o seu conte´ do n˜o ´ exibido.3 Quando o comando de atribui¸˜o for finalizado pelo caracter (. Elas est˜o listadas na a a a Tabela 3.1 a = 15. a Regra Coment´rio a conter at´ 24 caracteres e caracteres al´m do 24o s˜o ignorados. as quais s˜o consideradas como pr´-definidas. a a e n˜o podendo ser alteradas ou removidas (com excess˜o de ans). // atribuicao sem exibir o resultado -->b // conteudo da variavel b ans = 3.3 Vari´veis especiais a O SCILAB tem diversas vari´veis especiais.

menor n´ mero de ponto flutuante que adicionado a 1 resulta um u n´ mero maior que 1. e2 . . Estruturas de dados Tabela 3. 14159 .-0.38 Cap´ ıtulo 3.3 Vetores Vetor ou arranjo ´ um conjunto de vari´veis homogˆneas (conte´ do de mesmo tipo) idene a e u tificadas por um mesmo nome e individualizadas por meio de um ´ ındice.1415927 %s = s 3.. infinito. por exemplo.0.3] a = 5.2204×10−16 em u e computadores com aritm´tica de ponto flutuante IEEE. . en ] sendo <vetor> o nome da vari´vel e ei o seu i-´simo elemento. separados por espa¸o e a em branco ou v´ ırgula e delimitados pelos caracteres ([) e (]). por exemplo.7182818 %eps = 2. a Vari´vel a ans %e %eps Valor nome de vari´vel default usada para resultados.5 . elemento por elemento. usada como vari´vel de polinˆmio. . <vetor> = [ e1 . e = 2. . . a e -->a = [5 1. Seu valor ´ ǫ = 2−52 ≈ 2. a base do logaritmo natural. e √ i = −1. a e u π = 3.. 1.71828 . n˜o ´ um n´ mero (Not-A-Number). . No SCILAB. 0/0.3 // elementos separados por espa¸o em branco ou v´rgula c ı .220D-16 %i = i %inf = Inf %nan = Nan %pi = 3. um c vetor ´ definido de v´rias formas. 1/0.2: Vari´veis especiais do SCILAB.5. por exemplo. a o %i %inf %nan %pi %s %e = 2.

a(2)=1. 30. para o vetor c definido acima -->c(2) ans = 15. a a -->u = 5:9 // valor inicial = 5. incremento = 1 e valor final = 9 u = 5. + i 1. at´ o ultimo igual a 40 basta o comando e ´ -->b = 10:5:40 b = 10. + 4. 30. o ultimo igual a 40 e ´ possuindo 7 elementos. Em vez de usar incremento. 8. Isto produz um vetor idˆntico a b=10:5:40 definido acima. Se o incremento desejado for igual a 1 ent˜o ele poder´ ser omitido. valor final = 40 e elementos = 7 -->c = linspace(10. por exemplo. incremento = 5 e valor final = 40 20. cuja sintaxe ´ ca e <vetor> = linspace(<valor inicial>. a // valor inicial = 1+i. // valor inicial = 10.5) d = 1. 15.75i 1. um arranjo pode tamb´m ser constru´ definindo o n´ mero e ıdo u desejado de elementos na fun¸˜o linspace. 35. 40. 25.<n´mero de elementos>) u .2+4*%i. 25. 9.75 + 3.40.5 e a(3)=-0. No caso a u de n´ meros complexos.3. 6. Vetores 39 O vetor a possui os elementos a(1)=5. 15. o terceiro igual a 20 e assim.25i 2. // valor inicial = 10.<valor final>.3. Se os valores do vetor forem igualmente espa¸ados ele pode ser definido por interm´dio da express˜o c e a <vetor> = <valor inicial>:<incremento>:<valor final> . para criar um arranjo com o primeiro elemento igual a 10. 35.3. 20.25 + 1. Para gerar um vetor com o primeiro elemento igual a 10.5 + 2. Se no comando linspace o e a a parˆmetro <n´mero de elementos> for omitido ent˜o ser˜o gerados 100 pontos.5i 1. 40. o segundo igual a 15.7) c = 10. ca .i Os elementos podem ser acessados individualmente. valor final = 2+4i e elementos = 5 -->d = linspace(1+%i. // segundo elemento de c ou em blocos usando os comandos de defini¸˜o de arranjos. os incrementos s˜o feitos separadamente para a parte real e para a u a parte imagin´ria. sucessivamente. Assim. 7.

10. Lembrando que 5:-2:1 gera a seq¨ˆncia 5. o vetor gerado cont´m os elementos 7 e 3 do vetor c.) <vetor> = [ e1 . Por outro lado. para gerar um vetor coluna com os elementos 1.2 . por isto s˜o tamb´m a a e chamados vetores linha. vetores com v´rias linhas e uma unica coluna. Do mesmo modo.. e e Nos exemplos acima. // vetor c indexado pelo vetor ind ´ equivalente a c([7 3]). terceiro e primeiro elementos ans = 30.9. Para criar um vetor coluna elemento por elemento a ´ estes devem estar separados por (. -->c(ind([4 2])) ans = 40.2. -3. separando os elementos de um vetor por brancos ou v´ ırgulas s˜o especificados os a elementos em diferentes colunas (vetor linha). Para transca formar um vetor linha em vetor coluna e vice-versa. Estruturas de dados -->c(3:5) ans = 20.3.40 Cap´ ıtulo 3. ind([4 2]) produz um vetor contendo os elementos 4 e 2 do vetor ind. ou seja. 3. os vetores possuem uma linha e v´rias colunas. e ind -->ind = 1:2:7 ind = 1.9 // elementos separados por ponto-e-v´rgula ı Por isto. 3. .5.2 e -8. 7. 20. ent˜o.-3. incremento = 2 e valor final = 7 5.5. usa-se o operador de transposi¸˜o (’). // valor inicial = 1.9] v = 1. permitindo referenciar os elementos de um vetor na ordem definida pelos elementos de um outro vetor. ue a -->c(5:-2:1) // quinto. . podem existir vetores coluna. separando os elementos por ponto-e-v´ ırgula especifica-se os elementos em diferentes linhas (vetor coluna). Por exemplo.. [7 3]. 1. e2 . 30. definido acima. ou seja. 20. ou seja. // terceiro ao quinto elementos 25. -->v = [1. Por sua vez.-8. Assim. O endere¸amento indireto ´ tamb´m poss´ c e e ıvel. . en ] Deste modo.8.5 . sejam os vetores c.

3.0. Vetores 41 -->x = v’ // vetor linha obtido pela transposi¸~o de vetor coluna ca x = 1. deve-se notar a importˆncia da posi¸˜o do caracter branco na defini¸˜o de um vetor a ca ca -->p=[1+2] p = 3.1i 2.3.3.1i + 0. z.3.1:0.5 . Por exemplo.3i o transposto ´ e -->t = t = 1.2i 3.8.’). . ou seja. + 0. a transposi¸˜o ´ obtida pelo operador (.1i e valor final = 3+0. -->p=[1 +2] . . quantos elementos ele e possui -->l = length(z) l = 3.1i.1i 2. seja o vetor a complexo.3)*%i z = 1.’ // vetor transposto + 0. A fun¸˜o a ca ca length ´ utilizada para saber o comprimento de um vetor.3i No caso do vetor n˜o ser complexo a transposi¸˜o pode ser feita usando (’) ou (.3i -->z = (1:3)+(0.1:0. + 0. 2. 3. 2. pois o uso do ca e operador (’) resultar´ em um complexo conjugado transposto. + 0.2i 3. Por fim. .2i + 0.0.’).3i e o complexo conjugado transposto -->cc = z’ // vetor complexo conjugado transposto cc = 1.0.9 -->y = (1:3)’ // vetor coluna obtido pelo operador de transposi¸~o ca y = 1. No caso do vetor ser complexo.2 . incremento = 1+0. // valor inicial = 1+0.

4 Matrizes As matrizes s˜o arranjos bidimensionais homogˆneos e constituem as estruturas fundamena e tais do SCILAB e por isto existem v´rias maneiras de manipul´-las. para construir uma matriz os elementos de uma mesma linha devem estar separados por branco ou v´ ırgula e as linhas separadas por ponto-e-v´ ırgula ou Enter (ou Return).2)=8 A = 3. . e21 e22 . e2n . 2. 4 7 9] A = 3. 9. // atribui valor ao elemento da linha 3 e coluna 6 . 2. 0. 7.. 3. Para modificar um elemento basta atribuir-lhe um novo valor..5.. 4. ou seja. emn ] 3. 4. <matriz> = [ e11 e12 . 9.. 0. 8. 0. -->A = [3 2 -5. 0. Uma vez definidas.. .5. elas a a podem ser modificadas de v´rias formas. 0. 0.. -->p=[1+ 2] p = 3. como por inser¸˜o. 0. // altera o elemento da linha 1 e coluna 2 . Cuidado: se for atribu´ um valor a um elemento n˜o existente.5. al´m dos elementos ıdo a e da matriz ent˜o o SCILAB aumenta esta matriz. 8. 0.. em1 em2 . preenchendo-a com a valores nulos de forma a matriz permanecer retangular. Estruturas de dados = 1. -->A(3. 7. 0.. 0. .4.42 p Cap´ ıtulo 3.6)=1 A = 3. 7. 0. -->p=[1 + 2] p = 3. 4.1 Constru¸˜o e manipula¸˜o de matrizes ca ca // atribui os elementos da matriz A Para criar uma matriz A com 2 linhas e 3 colunas. -->A(1. . e1n . a ca ca Similarmente aos vetores. 9. automaticamente. extra¸˜o e rearranjo. 1.

2 e 1 e 1:3 e ue produz 1. 9. 5. ent˜o o comando. // atribui os elementos da matriz B De modo similar aos vetores. Lembrando que 3:-1:1 gera a seq¨ˆncia 3. 2 e 3. 4. 4. os elementos das ca linhas 1 e 3 e coluna 2. 3. 7 8 9] B = 1. 3. 4. tal como. 9. 1. // elemento da linha 2 e coluna 3 ou em conjuntos. Matrizes 43 Seja agora a matriz quadrada B de ordem 3.:) C = 7. -->B([1 3]. 6.[1 3]) D = 1. a nota¸˜o simplificada (:) pode ser igualmente usada em vez de 1:3 ca -->C = B(3:-1:1. neste caso usando a nota¸˜o de vetor. 8. 2. Considerando que s˜o referenciadas todas as a a 3 colunas de B. cria uma matriz C a partir das linhas de B em ordem contr´ria. 8. 1. 5.3.1:3) C = 7. tamb´m pode ser ca e usada ou at´ mesmo linspace. 7. 8. <valor inicial>:<incremento>:<valor final>. 6. 2 e 3 de B.3) ans = 6. 9. -->B = [1 2 3. 5. faz-se -->D = B(1:2. 2 e 1 e colunas 1.4. 2. Por exemplo. 6. 2. 4. // elementos das linhas 1 e 3 da coluna 2 A nota¸˜o de vetor. ou seja. a -->C = B(3:-1:1. 3. -->B(2.2) ans = 2. 8. . // nota¸~o simplificada ca Para criar uma matriz D a partir das linhas 1 e 2 e colunas 1 e 3 de B. 3. os elementos de uma matriz podem ser referenciados individualmente. 4 5 6. // obt´m a matriz C a partir da invers~o das linhas de B e a cria uma matriz C a partir das linhas 3. 6.

Para remover uma linha ou coluna de uma matriz usa-se a matriz vazia ([]). 2. 3. 8. 7. 5. -->E(:. 5. 5. 4. 8. 5. // remo¸~o da coluna 3 da matriz E ca 8. ´ -->E(1. 8. 3. 6. Quando o s´ ımbolo (:) for usado sozinho para referenciar os dois ´ ındices de uma matriz ent˜o a ´ gerado um vetor constitu´ pelas colunas da matriz.3) E = 1.2) [3 3 3]’] E = 1. 3. Estruturas de dados Para construir uma matriz E a partir da matriz B seguida da coluna 2 de C seguida ainda de uma coluna com os elementos iguais a 3. 2. 3. 7. 3. -->E(1. 2. // elemento da primeira linha e penultima coluna da matriz E . 3. 3. 3. E posteriormente para remover a linha 1. 7. 2.:) = [] E = 4. 8. 8.$-1) ans = 5.44 Cap´ ıtulo 3. Seja o vetor vet obtido das colunas e ıdo da matriz E acima. 3. // vetor formado pelas colunas da matriz E O s´ ımbolo ($) ´ utilizado para indicar o ´ e ındice da ultima linha ou coluna da matriz. 3. 9. // remo¸~o da linha 1 da matriz E ca 5. 5. -->vet = E(:) vet = 4. -->E = [B C(:. 5. 3. 4. = [] 2. 5. 2. 7. Para remover a coluna 3 de E.

Ela pode ca e u ser usada de duas formas: -->t = size(E) t = 2. respectivamente.3. produto dos elementos. onde as vari´veis simples col e lin cont´m o n´ mero de colunas e linhas de E.4. Fun¸˜o length ca Se a fun¸˜o length for usada em uma matriz ela fornecer´ o n´ mero de elementos da matriz. contendo o n´ mero de linhas e colunas a e co u de E.col] = size(E) col = 4. 4. onde a vari´vel t ´ um vetor linha com duas posi¸˜es. m´dia aritm´tica. a Fun¸˜o size ca A fun¸˜o size ´ usada para fornecer o n´ mero de linhas e colunas de uma matriz. respectivaa e u mente. u soma dos elementos. Matrizes 45 3.3: Exemplos de fun¸˜es b´sicas do SCILAB. a n´ mero de elementos.3. lin = 2. menor elemento. a a Tabela 3. co a Fun¸˜o ca size length sum prod max min mean stdev Descri¸˜o ca dimens˜o da matriz. ca a u -->e = length(E) e = 8. A outra forma ´ e -->[lin. maior elemento. . e e desvio padr˜o.2 Fun¸˜es matriciais b´sicas co a O SCILAB tem fun¸˜es que se aplicam aos vetores e `s matrizes.4. Algumas destas fun¸˜es co a co b´sicas s˜o mostradas na Tabela 3.

2. 15. // vetor coluna com i-´simo elemento = soma dos elementos da linha i da matriz A e -->sum(A. 18. 162. // vetor coluna com i-´simo elemento = produto dos elementos da linha i de A e -->prod(A.’c’) ans = 6. Se n˜o for usado o argumento a extra ent˜o a fun¸˜o produz um escalar utilizando todos elementos da matriz. Estruturas de dados Se for acrescentado o argumento ’r’ (row) ent˜o a fun¸˜o produz um vetor linha obtido a ca dos elementos das colunas da matriz. Se o argumento for ’c’ (column) ent˜o ser´ gerado a a um vetor coluna a partir dos elementos das linhas da matriz. 120. 6. Fun¸˜o prod ca // vetor linha com i-´simo elemento = produto dos elementos da coluna i de A e -->prod(A. -->A = [1 2 3. 7.’r’) ans = 12. 8. // define os elementos da matriz A Fun¸˜o sum ca // vetor linha com i-´simo elemento = soma dos elementos da coluna i da matriz A e -->sum(A.’c’) ans = 6. 4. 9. 504. 15. -->prod(A) // escalar igual ao produto dos elementos da matriz A ans = 362880.’r’) . Fun¸˜o max ca // vetor linha com i-´simo elemento = maior elemento da coluna i da matriz A e -->max(A. Para a matriz a ca A.7 8 9] 3. -->sum(A) // escalar igual a soma dos elementos da matriz A ans = 45. 24.4 A = 1.46 Cap´ ıtulo 3.’r’) ans = 28. 5 6. 5. 80.

ans Fun¸˜o min ca // vetor linha com i-´simo elemento = menor elemento da coluna i da matriz A e -->min(A. // vetor coluna com i-´simo elemento = menor elemento da linha i da matriz A e -->min(A. 2. -->min(A) // escalar igual ao menor elemento da matriz A ans = 1. -->mean(A) // escalar igual a m´dia dos elementos da matriz A e ans = 5.3. Matrizes 47 = 7. 8. Fun¸˜o mean ca // vetor linha com i-´simo elemento = m´dia dos elementos da coluna i da matriz A e e -->mean(A.’c’) ans = 3. // vetor coluna com i-´simo elemento = m´dia dos elementos da linha i da matriz A e e -->mean(A. 5.4. 6. 9.’r’) ans = 1. 3.’r’) ans = 4. Fun¸˜o stdev ca //vetor linha com i-´simo elemento = desvio padr~o dos elementos da coluna i de A e a -->stdev(A. 5. 9. 7. -->max(A) // escalar igual ao maior elemento da matriz A ans = 9.’r’) . // vetor coluna com i-´simo elemento = maior elemento da linha i da matriz A e -->max(A.’c’) ans = 2. 6. 8. 4.’c’) ans = 1.

-->stdev(A) // escalar igual ao desvio padr~o dos elementos da matriz A a ans = 2. cria uma matriz densa. se <argumento> for um vetor de dimens˜o n ent˜o <sa´da> ser´ uma matriz a a ı a diagonal contendo os elementos de <argumento> na diagonal principal. 3. 1.48 Cap´ ıtulo 3.4: Algumas fun¸˜es para manipula¸˜o de matrizes.’c’) ans = 1. e -->d = [1 2 3] d = 1. e altera a forma de uma matriz. Por exemplo. .7386128 3. ordena os elementos de uma matriz. e obt´m a parte triangular superior de uma matriz. Tabela 3. // cria matriz diagonal de ordem 3 com elementos do vetor d Descri¸˜o ca inclui ou obt´m a diagonal de uma matriz. //vetor coluna com i-´simo elemento = desvio padr~o dos elementos da linha i de A e a -->stdev(A. e <sa´da> = diag(<argumento> [. <k> > 0 ´ a <k>-´sima diagonal superior (superdiagonal) e <k> < 0 ´ a e e e <k>-´sima diagonal inferior (subdiagonal). o parˆmetro inteiro a opcional <k> faz com que <sa´da> seja uma matriz de ordem n + abs(<k>) com os eleı mentos de <argumento> ao longo de sua <k>-´sima diagonal: para <k> = 0 (default) ´ a e e diagonal principal.4. 3.<k>]) ı de modo que. Estruturas de dados ans = 3. cria uma matriz esparsa. e obt´m a parte triangular inferior de uma matriz.4. -->D = diag(d) D = // define um vetor com 3 elementos 3.3 Fun¸˜es para manipula¸˜o de matrizes co ca O SCILAB possui v´rias fun¸˜es para manipula¸˜o de matrizes dentre as quais destacam-se a co ca aquelas mostradas na Tabela 3. sendo sua sintaxe. co ca Fun¸˜o ca diag tril triu matrix sparse full gsort Fun¸˜o diag ca Inclui ou obt´m a diagonal de uma matriz. 1. 2.

Matrizes 49 1. 0. Por outro lado. 5. 3. 7.3. 1. 0. 0. 13 14 15 16] M = // define matriz M . e e -->M = [1 2 3 4. 0. 0. 9. -->A = [1 2 3. 0. -->d0 = diag(A) // cria vetor com elementos da diagonal principal de A d0 = 1. 0. 0. <k> > 0 <k>-´sima diagonal superior e <k> < 0 <k>-´sima diagonal inferior. 8. 0. 0. 0. 0. 3.4. -->D5 = diag(d. 0. 0. 0. 0. 4. 0. 0. 0. Fun¸˜o tril ca Obt´m a parte triangular inferior de uma matriz. 2. 4 5 6. -->d1 = diag(A. 9. // cria matriz diagonal com elementos da superdiagonal 1 de A -->D = diag(diag(A. 6. 7 8 9] // define a matriz A A = 1.<k>]) ı sendo <argumento> uma matriz e o parˆmetro inteiro opcional <k> faz com que <sa´da> seja a ı uma matriz de mesma dimens˜o de <argumento> de obtida a partir da <k>-´sima diagonal a e de <argumento> e os elementos abaixo dela: para <k> = 0 (default) diagonal principal. 5 6 7 8. 0. 9 10 11 12.1)) D = 2. 2. 3. 0. cuja sintaxe ´ e e <sa´da> = tril(<argumento> [. Por exemplo. 0. 0. 0. 6. 0. 2. 8.-1) // cria vetor com elementos da subdiagonal 1 de A d1 = 4. 0. 0.2) // cria matriz de ordem 5 com elementos de d na superdiagonal 2 D5 = 0. 0. 0. se o <argumento> for uma matriz ent˜o diag cria um vetor coluna com os a e elementos da <k>-´sima diagonal da matriz. 5.

10. 9. 0. 0. 7. 14. 10. 9. 0. 9. 8. 11. Fun¸˜o triu ca Obt´m a parte triangular superior de uma matriz. 0. 6. 8. 7. matriz triangular superior a partir da subdiagonal 1 de M triu(M. 0. 13. 0. 0. 0. // cria -->U2 = U2 = 0. Estruturas de dados 1. 13. 0. 8. // cria -->L1 = L1 = 1. 7. 0. 11. 0. 3. 4. Para a matriz M e e acima. 10. 3. 0. 0. 0. 4. 6. 0.1) 2. 5. 15. 16. 12. sendo sua sintaxe e <sa´da> = triu(<argumento> [. 0.2) 0. 12. 14. 2. 15. matriz triangular superior a partir da superdiagonal2 de M triu(M. 0. 16.-1) 2. 0. <k> > 0 <k>-´sima diagonal superior e <k> < 0 <k>-´sima diagonal inferior. 3. 0. 0. 0. matriz triangular inferior a partir da superdiagonal 1 de M tril(M. // cria -->L2 = L2 = 0. 0. 0. 5. 4. 6. 0. // cria -->U1 = U1 = 1. 0. 15. 16.50 Cap´ ıtulo 3. 13. matriz triangular inferior a partir da subdiagonal 2 de M tril(M.-2) 0. 11.<k>]) ı sendo <argumento> uma matriz e o parˆmetro inteiro opcional <k> faz com que <sa´da> a ı seja uma matriz de mesma dimens˜o de <argumento> obtida a partir da <k>-´sima diagonal a e de <argumento> e os elementos acima dela: para <k> = 0 (default) diagonal principal. 0. 14. . 0. 12. 0. 5.

( 2. 3. <colunas>) ı . -->E = [2 0 -1. Por exemplo. . -->D = matrix(B. a -->B = [1 2 3. ( 1. 7.3. 1) 7. No primeiro o <sa´da> = sparse(<matriz>) ı cria uma matriz esparsa <sa´da> armazenando somente os elementos n˜o nulos de <matriz> ı a na forma densa.2) D = 1. 3) 9.4 5 6] B = 1. 6. 5. 4. 3) .4. ( 3. 0 5 6. 3) 6. 1) 2. <linhas>. 0.1. para a matriz B de dimens˜o 2 × 3. 0.3. 2. 0. 6. . 5. cuja sintaxe ´ e <sa´da> = matrix(<matriz>. -->c = matrix(B. 3. 4. 3) sparse matrix ( 1. 2. 6.1.1. 7 0 9] // define matriz com alguns elementos nulos E = 2. 9. 2) 5. 2. 6. // define matriz B de dimensao 2 x 3 // cria matriz (vetor linha) de dimensao 1 x 6 5.6) c = 1. ( 2. ( 3. -->S = sparse(E) // cria matriz esparsa a partir da matriz densa E S = ( 3. 3. 5. Matrizes 51 Fun¸˜o matrix ca Altera a forma de uma matriz. Esta fun¸˜o cria uma matriz <sa´da> com n´ mero de linhas dados por <linhas> e n´ mero ca ı u u de colunas igual a <colunas>. Para a matriz E. a partir de <matriz> com (<linhas> × <colunas>) elementos selecionados no sentido das colunas. // cria matriz de dimensao 3 x 2 Fun¸˜o sparse ca Constr´i uma matriz esparsa de dois modos distintos. 4.

. ( 5. 5) . coluna = 3. 2) 5. 0. ou seja.9. 3. . Para a matriz F acima.9. 0. ( 2. 3) . 0. 1 3. linha = 1. 0. 0. <valor>) ı constr´i uma matriz esparsa <sa´da> a partir de uma matriz <linha coluna> com duas o ı colunas contendo os ´ ındices dos elementos n˜o nulos e do vetor <valor> com os valores a desses elementos.52 Cap´ ıtulo 3. 5. 0. 0. Estruturas de dados Os tripletos acima indicam (linha. 3) 3. 4) 4. 0. ( 4. 2. valor = −1 e assim sucessivamente. 4. . No segundo modo. 5 5] lincol = 1. . 1. // define matriz de dimensao 7 x 2 -->lincol = [1 1. 8. 2. 3. 0. 2 4.vet) // cria matriz esparsa a partir de lincol e vet F = ( 5. 5. . 1. Por exemplo. 0. 3. 0. 4 1. Fun¸˜o full ca O comando <matriz> = full(<esparsa>) converte a matriz <esparsa> para a sua representa¸˜o densa <matriz>. 5. 3. 5. 2. 1. 0.9. ( 3. 4. 4.1. ca -->FF = full(F) // cria matriz densa a partir de esparsa FF = 2. valor = 2. ( 1. 3. 0. 4. 0. 0. -->vet = [2 -1 5 4 3 8 -9] // define vetor com 7 elementos vet = 2. valor). <sa´da> = sparse(<linha coluna>. 0. 5) sparse matrix ( 1. coluna.1. 1) 8. 8. linha = 1. 0. -->F = sparse(lincol. 1) 2. 0. coluna = 1. 2 2.1. ( 2. 3 3.

. w = v(ind). com o a ıda a ı e ca mesmo tipo e dimens˜o de <matriz entrada>. ’r’: por linha. 6. 6. -->gsort(v. 5. 2. cont´m o resultado da ordena¸˜o e o vetor a opcional <´ndice> cont´m os ´ ı e ındices originais. Sua sintaxe ´ e [<matriz sa´da>[. -->M = [2 5 1. 5. 3 8 9. 3.3. 2.’i’) // ordena os elementos do vetor v em ordem crescente ans = 2.<dire¸ao>]) ı ı c~ c~ sendo <matriz entrada> um vetor ou uma matriz contendo elementos num´ricos ou literais. 8. 3. 7. 4.’d’) ind = 2. 6. Para a ordena¸˜o decrescente requerida. 5. // ordena as linhas da matriz M em ordem crescente . 4. 7 6 4] M = 2. -->v = [3 9 5 6 2] v = 3. 9. w(2) = ca e v(ind(2)). ’i’: ordem crescente a c~ ca ca e ’d’( default): ordem decrescente. 4.ind] = gsort(v. w(5) = v(ind(5)).<´ndice>]] = gsort(<matriz entrada>[. 5. 1.<op¸ao>] (opcional) ´ uma cadeia de caracteres que especifica qual o tipo de ordena¸˜o a c~ e ca ser realizada.4.’r’. 8.dire¸ao] (opcional) indica a dire¸˜o de ordena¸˜o. ı ı Para o vetor v e a matriz M. w(1) = v(ind(1)). 9.’g’. ’g’ (default): todos os elementos da matriz s˜o ordenados. 3. -->B = gsort(M. e [. Os parˆmetros de sa´ s˜o <matriz sa´da>. tem-se os resultados. // ordena os elementos do vetor v em ordem decrescente -->[w. ’c’: por coluna. 7. 5. 3. . w = 9. util ´ a gsort que permite a ordena¸˜o dos elementos de um ca ´ e ca vetor ou de uma matriz. . 6.’i’) B = 2. 9. 6. particularmente. 1. 1. isto ´. . 3. 9.<op¸ao>][. Matrizes 53 Fun¸˜o gsort ca Uma fun¸˜o.’g’. [. tal que <matriz sa´da> = <matriz entrada>(<´ndice>). 5.

Se o u a o parˆmetro for uma matriz ent˜o ser´ criada uma matriz de igual dimens˜o. 7. 3.4 Matrizes elementares O SCILAB fornece v´rias matrizes elementares de grande utilidade. como as mostradas na a Tabela 3. <colunas>) cria uma matriz de dimens˜o (<linhas> × <colunas>). // define uma matriz de dimensao 2 x 3 Descri¸˜o da matriz ca nula.54 Cap´ ıtulo 3.4) z = 0. 0. -->P = [1 2 3. Fun¸˜o ones ca O comando <matriz> = ones(<linhas>. o ca Fun¸˜o zeros ca O comando <matriz> = zeros(<linhas>. a a a a Tabela 3. com elementos nulos e <matriz> = a zeros(<argumento>) cria uma matriz com elementos nulos de mesma dimens˜o da matriz a <argumento>. elementos iguais a 1.5. Fun¸˜o ca zeros ones eye grand Seja a matriz. 4. 3.4. 6. 0.’d’) D = 5. 4 5 6] P = 1. <colunas>) gera uma matriz de dimens˜o (<linhas> × <colunas>). // cria matriz nula de dimensao 1 x 4 0. 8. -->z = zeros(1. 1. // ordena as colunas da matriz M em ordem decrescente 3. identidade ou parte dela.5: Algumas matrizes elementares do SCILAB. Estruturas de dados -->D = gsort(M.’c’. elementos aleat´rios com dada distribui¸˜o. 4. . com elementos iguais a 1 e <matriz> a = ones(<argumento>) gera uma matriz com elementos iguais a 1 com a mesma dimens˜o a da matriz <argumento>. O n´ mero de parˆmetros providos fornecem as dimens˜es da matriz. 9. 2. 5. 6. 2.

sendo <param i> um ca conjunto de parˆmetros opcionais necess´rios para definir uma distribui¸˜o espec´ a a ca ıfica.8350086 0. <colunas>) gera uma matriz identidade (com 1 na diagonal principal e 0 fora da diagonal) de dimens˜o a (<linhas> × <colunas>)..Sup) ca // cria matriz de dimensao 3 x 4 com elementos aleat´rios com o // distribui¸~o uniforme no intervalo [10.4.4.2784982 0.3.5472206 0. 1.<param n>]) gera a matriz <alea> com elementos aleat´rios de dimens˜o (<linhas> × <colunas>) com o a o tipo de distribui¸˜o dado pela cadeia de caracteres <tipo dist>.<param 1>.1) ca -->U = grand(3.’unf’.2210340 0.9688678 0.219724 11.5468815 Distribui¸˜o uniforme no intervalo [Inf.. 0. <matriz> = eye(<argumento>) cria uma matriz identidade de mesma dimens˜o da matriz <argumento>.929777 11. Matrizes 55 -->U = ones(P) U = 1.10.5.3081671 0. 0. 0.1883820 0. Fun¸˜o eye ca O comando <matriz> = eye(<linhas>. 1.914334 11. // cria matriz de 1’s com mesma dimensao da matriz P 1.970751 . 0.93539 11.1269868 0.9133759 0.992923 10. 1.’def’) U = 0.915014 11. 0. Por exemplo..962219 10. <colunas>.12) R = 11. Fun¸˜o grand ca O comando <alea> = grand(<linhas>.9057919 0.8147237 0. <tipo dist> [.451678 11.941186 10. 1. a -->I = eye(P’*P) // cria matriz identidade com a mesma dimensao de P’P I = 1. Por sua vez.1) ca // cria matriz de dimensao 3 x 5 com elementos aleat´rios com o // distribui¸~o uniforme no intervalo [0. 1.12) ca -->R = grand(3.315226 11.985763 11. 0. Distribui¸˜o uniforme no intervalo [0.0975404 0.. 1.135477 0.6323592 0.

[1 0. 4.5. 3.1118334 1.4.9669574 . 1.’prm’.’mn’. 4.56 Cap´ ıtulo 3. 4.3. 5. 2.5 e desvio padr~o = 2.vet) V = 3.1. 3.0. 4. 5. 1. 2. 5. 3. 5. 3. 1. 1.4501598 2. 2. 3. 4. 6.0. 2.5 ca e -->P = grand(3.2602797 0.7828132 . Gera n permuta¸˜es aleat´rias de um vetor coluna de tamanho m co o // cria matriz de dimens~o (length(vet) x 8) com 8 permuta¸~es no vetor vet de a co // tamanho 5 -->vet = [1 2 3 4 5]’ // define vetor coluna de tamanho 5 vet = 1. 2.0.[0 0]’.3.5 1]) M = 1. 3. 2.1. 5.4133844 Distribui¸˜o de Poisson com m´dia Med ca e // cria matriz de dimensao 3 x 5 com elementos aleat´rios com o // distribui¸~o de Poisson com m´dia = 3.5420607 .2634706 0.6) N = 2. 2.5) P = 5. 4.761686 0.0909685 1. 4. 5. 3.1711612 . 2.8510105 1. 5.5. 2. 4.6 ca e a -->N = grand(2. 5.0.2. .’poi’. 4.’nor’. Estruturas de dados Distribui¸˜o normal com m´dia Med e desvio padr˜o Despad ca e a // cria matriz de dimensao 2 x 4 com elementos aleat´rios com o // distribui¸~o normal com m´dia = 1. 4.7455511 .5. 5. -->V = grand(8. 3. 3. 2. 1. 1.2161951 0. 2. e -->M = grand(5.94921 Distribui¸˜o normal multivariada com m´dia Med e covariˆncia Cov ca e a sendo Med uma matriz (m x 1) e Cov uma matriz (m x m) sim´trica positiva definida.7460049 2. 4. 5. 3. 1. 3. 2. 2. 5.2303274 .1. 1. 1. 2.0745727 0.

Elas podem ser a a e o criadas pela fun¸˜o hypermat(<dimens~o>.1281244 0.3023326 0.<semente>).1) // atribui 1 novamente ao estado -->c = grand(1.5 2. Hipermatrizes 57 A fun¸˜o grand produz n´ meros pseudo-aleat´rios e a seq¨ˆncia gerada de qualquer districa u o ue bui¸˜o ´ determinada pelo estado do gerador.9971848 0. 0.1) // atribui 1 ao estado -->a = grand(1.5. para o criar a hipermatriz H com dimens˜es 2 × 3 × 4.3.5 1.4 3. A fun¸˜o grand permite a gera¸˜o de vinte diferentes tipos de distribui¸˜o de n´ meros ca ca ca u pseudo-aleat´rios. Para atrie a ca buir um valor ao estado do gerador quando esta fun¸˜o j´ tiver sido executada usa-se o ca a comando grand(’setsd’.1 2.3 2.5.417022 0.0001144 -->b = grand(1.417022 0.’def’) // gera outra sequ^ncia aleat´ria uniforme e o c = 0. 2. 0. faz-se o -->mat1 = [1.9990405 0.6 -->mat3 = [3.6] mat2 = 2.2 3.2 1.5 3.’def’) // gera outra sequ^ncia aleat´ria uniforme e o b = 0.5 1. Por exemplo.1 2.1 1. -->grand(’setsd’.’def’) // gera uma sequ^ncia aleat´ria uniforme e o a = 0.0001144 -->c . ou seja. onde o vetor <dimens~o> define ca a a as dimens˜es da hipermatriz e a matriz <valores> define os elementos.2 2.5.4 2. o qual ´ alterado ` cada chamada da fun¸˜o grand.2360890 -->grand(’setsd’. Quando o SCILAB for ativado. 3. <valores>).3.6] mat1 = 1. Para maiores informa¸˜es use o coo co mando de aux´ help grand.5.4 1.1467559 0. 0. ´ atribu´ ca e e ıdo um valor inicial ao estado. utilizando seis diferentes geradores.a // mostra que as sequ^ncias c e a s~o id^nticas e a e ans = 0. composta por 4 submatrizes de o dimens˜es 2 × 3.4 1. ılio 3.9971848 0.1 3.2 1.5 Hipermatrizes Hipermatrizes s˜o vari´veis homogˆneas com mais de duas dimens˜es.3 1. Por exemplo.2 2.5 2.4 2.9325574 0. 0.1 1.6 -->mat2 = [2.3. sendo <semente> o valor inicial desejado do estado.6] mat3 = // define submatriz 1 // define submatriz 2 // define submatriz 3 . 1.7203245 0.9325574 0.3.7203245 0.

6 As hipermatrizes podem ser manipuladas como as matrizes bidimensionais.:.5 3.3 1.1) 1.:.3 4.2 4.3 3.4 3.5 4.2 4.6 (:. 3.:. .4 4.1 4.4 4.3 3.2 3.5 4.6] // define submatriz 4 mat4 = 4.1 3.5 4.3 os elementos da posi¸˜o (2.5 2. Estruturas de dados 3.3 12.2 1.1 1. para alterar para 12. -->H(2.4 3.1 2.5 1.2 2.4) 4.6 / atribui o valor 12.:.3 H = (:.5 3.:.1) das submatrizes 1 e 4 da hipermatriz H ca acima.4) Outros comandos.3 3.4) 4.2 2.3 aos elementos H(2.2 3. Assim.3 4.6 (:.6 (:.1 3.5 3.:.:.3) 3.1 1.2) 2.4 4.6 // cria hipermatriz H de dimensao 2 x 3 x 4 a partir de 4 submatrizes -->H = hypermat([2 3 4]. -->size(H) // dimensoes da hipermatriz ans = 2.:.1.2 4.3 4. 4.4 2.4 3.1. 4.1) e H(2.1 4.3 2.1 4.6 (:.3.3) 3.1.2 1.[mat1 mat2 mat3 mat4]) H = (:.3 12.[1 4]) = 12.1 2.4 2.6 (:.2) 2.2 4.1) 1.1 3.5 1.3 2.4 1.58 Cap´ ıtulo 3.2 3.6 (:.5 4.3 1.6 -->mat4 = [4.5 2.1 4.

Por exemplo. Se <modo> = ’coeff’ ent˜o ele ser´ constru´ a partir de a a ıdo seus coeficientes.1 2.6 Polinˆmios o O SCILAB fornece v´rias fun¸˜es que permitem que as opera¸˜es envolvendo polinˆmios a co co o sejam feitas de um modo bem simples. -->P = poly([24 14 -13 -2 1].13s .’roots’) R = 2 3 4 24 + 14s .’r’) ans = 6.’s’. Polinˆmios o 59 // vetor linha contendo a soma dos elementos das colunas da submatriz 3 -->sum(H(:.3.9 // vetor coluna contendo os menores elementos das linhas da submatriz 2 -->min(H(:.7 6. 3. mas com <par^metros> contendo os zeros do polinˆmio e ca a o sendo <modo> = ’roots’ (ou n˜o sendo especificado) ent˜o ele ser´ constru´ a partir de a a a ıdo seus zeros. ξ2 = −3.4 3. para construir o polinˆmio P (x) = 24 + 14x−13x2 −2x3 + x4 o basta.2).’x’. usando a fun¸˜o poly(<par^metros>.13x . ca a a onde o vetor <par^metros> cont´m os coeficientes ci . Constru¸˜o a partir dos coeficientes ca Um polinˆmio na forma P (x) = c1 + c2 x + c3 x2 + . <modo>). .6. <vari´vel>.’coeff’) P = 2 3 4 24 + 14x . Para construir um polinˆmio com zeros ξ1 = −1.’c’) ans = 2.6.2x + x // P(x) a partir dos coeficientes Constru¸˜o a partir das ra´ ca ızes Utilizando a mesma fun¸˜o poly.3).2s + s // R(s) a partir dos zeros . faz-se o -->R = poly([-1 -3 2 4].1 Constru¸˜o ca Os polinˆmios podem ser constru´ o ıdos ou a partir de seus coeficientes ou de seus zeros.:. + cn−1 xn−2 + cn xn−1 pode ser constru´ o ıdo a partir dos coeficientes ci .:. . ξ3 = 2 e ξ4 = 4. <vari´vel> ´ uma cadeia de caracteres a e a e que determina a vari´vel do polinˆmio e a outra cadeia de caracteres <modo> especifica como a o o polinˆmio ser´ constru´ o a ıdo.5 6.

6. 2 e 3.(-1:3)) // avalia T(x) em x = -1. e para subtrair -->d = a .’coeff’) a = 2 3 4 1 . -->T = poly([1 -3 7 5 -2 3]. Estruturas de dados Avalia¸˜o ca Um polinˆmio ´ avaliado por meio da fun¸˜o horner(<polin^mio>. -->a = poly([1 0 -4 5 8]. 0. 757.’x’. o ca -->e = poly([4 -5 3].6. onde o e ca o <polin^mio> cont´m o polinˆmio e <abscissas> cont´m os pontos nos quais ele deve ser o e o e avaliado. Assim. 3. 127. 1. 0. 1.’x’. mesmo de graus diferentes.2x + 3x -->y = horner(T.3 Adi¸˜o e subtra¸˜o ca ca Para somar e subtrair polinˆmios.x + x + 7x + 8x // constroi a(x) // constroi b(x) resultando c(x) = −3 − x + x2 + 7x3 + 8x4 .6.3 . 11.9x + 3x + 8x 3.4 .’coeff’) // T(x) a partir dos coeficientes T = 2 3 4 5 1 .4x + 5x + 8x -->b = poly([-4 -1 5 2]. 2 e 3 y = 1. Sejam ca o e ca 2 os polinˆmios e(v) = 4 − 5v + 3v e f (v) = −1 + 2v.’v’.4 Multiplica¸˜o ca A multiplica¸˜o de dois polinˆmios ´ feita utilizando o operador de multiplica¸˜o (*). Por exemplo.3x + 7x + 5x .’coeff’) b = 2 3 .2 Cap´ ıtulo 3. 1.’coeff’) // constroi e(v) .b d = // subtrai polinomios 2 3 4 5 + x . para avaliar T (x) = 1 − 3x + 7x2 + 5x3 − 2x4 + 3x5 nos pontos x = −1. basta usar os operadores de o adi¸˜o (+) e subtra¸˜o (-).’x’. <abscissas>).x + 5x + 2x -->c = a + b // soma polinomios c = 2 3 4 . a multiplica¸˜o resulta em.60 3. para somar os polinˆmios a(x) = 1 − 4x2 + 5x3 + 8x4 e ca ca o 2 3 b(x) = −4 − x + 5x + 2x .

q] = pdiv(h. ou seja. o -->j = h / i j = // polinomio racional obtido da divisao de h(x) por i(x) 2 3 4 6 . <polin^mio 2>) faz a divis˜o entre o <polin^mio 1> e o <polin^mio 2>.’coeff’) // constroi f(v) f = . <quociente>] = pdiv(<polin^mio 1>.i) // divide h(x) por i(x) q = 2 11 + 3x + 2x r = .5v + 3v -->f = poly([-1 2].5 Divis˜o a o o O comando [<resto>.’coeff’) // constroi h(x) h = 2 3 4 6 . Por exemplo.6.4 + 13v .’x’.1 + 2v -->g = e * f // multiplica e(v) por f(v) g = 2 3 .3x + x . ´ criado um polinˆmio racional.5 + 25x resultado no quociente q(x) = 11 + 3x + 2x2 com resto r(x) = −5 + 25x.’coeff’) // constroi i(x) i = 2 1 . <polin^mio 1> = o a o a <polin^mio 2> * <quociente> + <resto>. o 3.’v’.3x + x -->[r.’x’. retornando o polinˆmio quociente em a o o o <quociente> e o polinˆmio do resto da divis˜o em <resto>. Polinˆmios o 61 e = 2 4 .3.5x + 4x . Para os a ca e o polinˆmios h(x) e i(x) definidos acima.3x + 2x --------------------2 1 . e -->h = poly([6 -5 4 -3 2].5x + 4x . a divis˜o de h(x) = 6 − 5x + o 4x2 − 3x3 + 2x4 por i(x) = 1 − 3x + x2 ´ efetuada por.13v + 6v resultando no polinˆmio g(v) = −4 + 13v − 13v 2 + 6v 3 .3x + 2x -->i = poly([1 -3 1]. No caso do uso do operador de divis˜o (/) em vez da fun¸˜o pdiv.6.

’x’.14x . // calcula raizes a partir dos coeficientes . 3.6 Cap´ ıtulo 3. Por exemplo. sem construir ızes o previamente o polinˆmio. para calcular ca o o 2 3 4 as quatro ra´ de T (x) = 24 − 14x − 13x + 2x + x = 0. os coeficientes devem ser fornecidos do maior para o menor grau.12x + 2x + x -->p1 = derivat(p) // derivada primeira de p(x) p1 = 2 3 14 . 3.6.24x + 6x + 4x -->p2 = derivat(p1) // derivada segunda de p(x) p2 = 2 .6.’x’.’coeff’) // constroi p(x) p = 2 3 4 .62 3. -->p = poly([-5 14 -12 2 1].4. o Por exemplo. .24 + 12x + 12x resultando P ′ (x) = 14 − 24x + 6x2 + 4x3 e P ′′ (x) = −24 + 12x + 12x2 . Deste modo.4. Para calcular as ra´ de um polinˆmio dado em termos de seus coeficientes.2. .7 C´lculo de ra´ a ızes A fun¸˜o roots(<polin^mio>) calcula os zeros de <polin^mio>.’coeff’) // constroi T(x) T = 2 3 4 24 . para obter a primeira e ca ca segunda derivada de P (x) = −5 + 14x − 12x2 + 2x3 + x4 . ızes -->T = poly([24 -14 -13 2 1]. 3. Estruturas de dados Deriva¸˜o ca A fun¸˜o derivat efetua a deriva¸˜o polinomial.13x + 2x + x -->raizes = roots(T) // calcula as raizes de T(x) = 0 raizes = 1. .2. ızes -->a = roots([1 2 -13 -14 24]) a = 1. para calcular as quatro ra´ de T (x) = 24 − 14x − 13x2 + 2x3 + x4 = 0.5 + 14x . .

0. . . 0. −c2 /cn −c1 /cn   1 0 . 0 0 C= . .. 1. -->a = %t // variavel logica simples a = T -->b = [%f %F %t %T] // vetor logico b = F F T T -->C = [%T %f %t. 0 0     0 1 .%f %T %F] // matriz logica C = T F T F T F . . com estrutura de vetor a a o ou matriz. os quais podem ser atribu´ ıdos ` uma vari´vel l´gica.3.4. .. 0. . 0. .. . . . . 0. 0.7 Vari´veis l´gicas a o Conforme visto. .24.. o Pode ser mostrado que as ra´ ızes de P (x) = c1 + c2 x + c3 x2 + . . dado por ’e’.2. 3. . a   −cn−1 /cn −cn−2 /cn .2.   . -->r = spec(A) // autovalores da matriz companheira A r = . + cn−1 xn−2 + cn xn−1 = 0 s˜o os autovalores da matriz companheira. 0. 0. . 1. independente a a do grau do polinˆmio. 3. 1.. . Se for acrescentado o segundo argumento da fun¸˜o ca roots. Por exemplo. os zeros s˜o calculados por meio dos a a a autovalores da matriz companheira.’e’) ´ equivalente ` e a -->A = companion(T) // matriz companheira do polinomio T(x) A = . Vari´veis l´gicas a o 63 Quando o polinˆmio for real e possuir grau menor ou igual a 100 a fun¸˜o roots calcula o ca os zeros por um algoritmo r´pido. uma constante l´gica tem os valores %t (ou %T) para verdadeiro e %f (ou o %F) para falso. r = roots(T. . 1.. caso contr´rio. ent˜o os zeros ser˜o calculados utilizando os autovalores.   . 0. 1 0 Deste modo.7. 0 0 . . 14. . 13.

16.8 Vari´veis literais a Uma vari´vel literal cont´m uma constante literal formada por uma cadeia de caracteres a e delimitada por aspas (’) ou ap´strofos ("). 12.3 Express˜es ca a a ca o literais. 12. 18. As listas s˜o uteis para definirem dados estruturados. e ıda . a ´ Uma lista ´ constru´ a partir do comando list. podendo conter e a matrizes ou mesmo outras listas. 14. -->ind = [%t %t %f %t %f] // define vetor logico ind com 5 elementos ind = T T F T F -->v(ind) // elementos 1. 2 e 4 do vetor ans = 11. 14. b = "cadeia de caracteres" a = SCILAB b = cadeia de caracteres Os caracteres podem ser concatenados usando o operador (+) ou a nota¸˜o vetorial.2 Express˜es l´gicas. a o Quando o valor for verdadeiro o ´ ındice ´ acessado e no caso de ser falso o ´ e ındice n˜o ser´ a a acessado.64 Cap´ ıtulo 3. -->v = [11 12 13 14 15 16 17 18 ] // define o vetor v com 8 elementos v = 11. O uso de vari´veis l´gicas ´ fundamental nas express˜es l´gicas que a o e o o ser˜o vistas na Se¸˜o 4. Por exemplo. 3. Por exemplo. O n´ mero de elementos do vetor l´gico deve ser menor ou igual ao n´ mero de elementos do u o u vetor que ele referencia. ca -->d = a+’ manipula ’+b d = SCILAB manipula cadeia de caracteres -->e = [a ’utiliza’ b] e = !SCILAB utiliza cadeia de caracteres ! A utiliza¸˜o de vari´veis literais ser´ abordada com mais detalhes na Se¸˜o 4. 17. Estruturas de dados As vari´veis l´gicas podem ser utilizadas para acessar os elementos de uma matriz (ou vetor). a ca o o 3. 15.9 Listas Uma lista ´ um conjunto de dados n˜o necessariamente do mesmo tipo. o -->a = ’SCILAB’. 13.

4 5 6]) // gera a lista Rol com 3 objetos Rol = Rol(1) tipo Rol(2) F Rol(3) 1.3) do objeto 2 de Rol(1) ans = 30. Uma lista pode ser um objeto de outra lista. 20.1) // elemento (2.%f. Rol(2) F Rol(3) 1. faz-se -->Rol(1)(2)(1. // objeto 1 de Rol torna-se uma lista Para obter e atribuir valor a objeto da lista. 4. 4. -->Rol(2) // objeto 2 de Rol ans = F -->Rol(3)(2.1) de Rol(3) Rol = Rol(1) Rol(1)(1) tamanho Rol(1)(2) 10. 2. 5. 3.[1 2 3. 55. . -->Rol(1) = list(’tamanho’. -->Rol(3)(2. 3.3. 6. 6. 20. Listas 65 -->Rol = list(’tipo’.1) do objeto 3 de Rol ans = 4. 3. Rol(2) F Rol(3) 1. 2.8 5.1) = 55. 30.3) // elemento (1.8 // atribuindo novo valor ao elemento (2. 5.[10 20 30]) Rol = Rol(1) Rol(1)(1) tamanho Rol(1)(2) 10.9. 2. 6. 30.

c = 5:-2:-6. Apesar de os comandos estarem separados por v´ ırgula. 3.2 Vari´veis ca a 3.11 al = [1 3. 3.2 7.10 Exerc´ ıcios Se¸˜o 3. entrar com um de cada vez. Area=3 e a area=1.12 b = 10:5:30. e(3).8 3.5). 3. . com a terceira coluna com a o elementos com o valor falso e as demais com o valor verdadeiro.23×103 ` vari´vel a e 4.4 Criar uma matriz de dimens˜o 2 × 3 com elementos l´gicos.5 -4.1 Atribuir o valor −1.3 Criar um vetor l´gico com cinco elementos sendo o primeiro. Estruturas de dados 3.1 Constantes ca Observar atentamente e anotar o resultado dos comandos do SCILAB.13 e = linspace(0.9 3.5 Se¸˜o 3.17×10−2 ` vari´vel b.10. limite:sup=3. d = 5:10.7 Atribuir a cadeia de caracteres ’abc’ ` vari´vel literal letras e ’01234’ a vari´vel a a ` a literal numeros. 3.3 Vetores ca Construir os vetores e analisar as opera¸˜es: co 3.6 Conferir os nomes permitidos de vari´veis arco-seno=0.5]. 3.2 3. 3. 3.66 Cap´ ıtulo 3. segundo e quarto com o o valor verdadeiro e os outros com o valor falso. ac = (2:3:11)’.10 Se¸˜o 3. e(2:4). a a a a 3.

3. prod(A.6). max(B. size(C).16 A = [6 -1 4.15 g = linspace(2. 3.1. 67 .4) + linspace(0. 3.11. f([6 5 1 3]). min(B.27 3. h = g’.17 B = A(2:3. Exerc´ ıcios 3. diag(diag(D)).18 C = [A B’].26 3. f(3:-1:1).1.20. eye(5. ones(2. sum(A.’c’). triu(D).4)*%i . sum(A.25 Se¸˜o 3.19 zeros(3.29 3.’def’). prod(A. Se¸˜o 3.’r’).’r’).30 = [].’ Se¸˜o 3.’c’).3.[2 3 1]).14 f = linspace(10.24 3.28 3.2.4 Matrizes ca Construir as matrizes e verificar o resultado das opera¸˜es e fun¸˜es co co 3.3).5 Hipermatrizes ca 3.1) = 1.[2 4])=[].23 3. 3.’r’). 5 7 8].4).’c’).3.5).22 3.20 D = grand(3.6 Polinˆmios ca o 3.21 3. 0 2 -3. i = g.10. A(2.:) 3. C(2. C(:. tril(D).

9 Listas ca 3.37 3.7 Vari´veis l´gicas ca a o 3.35 Se¸˜o 3.68 Cap´ ıtulo 3. Estruturas de dados Se¸˜o 3.44 3.31 3.43 3.33 3.42 3.39 3.45 .36 3.8 Vari´veis literais ca a 3.34 3.32 3.40 Se¸˜o 3.41 3.38 3.

1-4. c = 3.6666667 69 .Cap´ ıtulo 4 Express˜es o Uma express˜o ´ uma combina¸˜o de constantes. b = 2.7 * 6*9. co e a Opera¸˜o ca adi¸˜o ca subtra¸˜o ca multiplica¸˜o ca divis˜o a potencia¸˜o ca Express˜o a a+b a−b a×b a÷b ab Operador Exemplo + 1+2 5.1: Opera¸˜es aritm´ticas b´sicas do SCILAB. ıvel co e a Tabela 4.1 Express˜es aritm´ticas o e ´ E dispon´ no SCILAB as opera¸˜es aritm´ticas b´sicas mostradas na Tabela 4. cuja avalia¸˜o a e ca a ca e o resulta em um valor unico.1.98 / ou \ 6/7 5\3 ^ 2^10 4. na p´gina 6. l´gicas e literais. e o 4. ca o a -->a = 1. -->t = a + b / c + d t = 5. Neste cap´ ´ ıtulo ser˜o mostrados os trˆs tipos de express˜es do a SCILAB: aritm´ticas.5 Express˜es. Para o Exemplo 1.1 Ordem de precedˆncia e O SCILAB obedece a ordem de precedˆncia das opera¸˜es aritm´ticas apresentadas na e co e Se¸˜o 1. d = 4.1.5. vari´veis e operadores.

3. an ∗bn ] [ a1 /b1 a2 /b2 .70 Cap´ ıtulo 4. Resultado [ a1 +c a2 +c .2... b = [ b1 b2 ..994. Express˜es o -->x = (a + b) / (c + d) x = 0..4285714 -->y = a + b / (c + (d + 1) / 2) y = 1.*b a..^c c.^b Considere as vari´veis... 2.\b a. Tabela 4.. Estas opera¸˜es b´sicas s˜o apresentadas na Tabela 4... c = 2 a = 1. an +bn ] [ a1 ∗b1 a2 ∗b2 .0670732 -->z = (a^b+3-c^(d+3))/(a*b/c+sqrt(1+d/(a+b))) z = .^a a.. an /bn ] [ b1 /a1 b2 /a2 ..bn ] e c um escalar Opera¸˜o ca adi¸˜o escalar ca adi¸˜o vetorial ca multiplica¸˜o escalar ca multiplica¸˜o vetorial ca divis˜o ` direita a a divis˜o ` esquerda a a potencia¸˜o ca Express˜o a a+c a+b a*c a.3636364 -->w = ((a+b*c)/(a+1)-(b+4)/(c+5))/(-c^2+(-b)^(d+1)) w = .1. c^an ] [ a1 ^b1 a2 ^b2 . an ^c ] [ c^a1 c^a2 .. an +c ] [ a1 +b1 a2 +b2 .) significa que estas opera¸˜es s˜o efetuadas entre os correspondentes co a elementos dos vetores.. ca co a a As opera¸˜es de multiplica¸˜o.89931 4./b a.an ]. divis˜o e potencia¸˜o envolvendo vetores quando antecedico ca a ca das pelo caracter (. 20.. 30. an ∗c ] .. 5.. b = 10:10:50. co a Sejam a = [ a1 a2 .0..2 Express˜es vetoriais o As opera¸˜es b´sicas entre vetores s´ s˜o definidas quando estes tiverem o mesmo tamanho co a o a e orienta¸˜o (linha ou coluna). 40. 4.2: Opera¸˜es vetoriais b´sicas. an ^bn ] [ a1 ∗c a2 ∗c .. 50. bn /an ] [ a1 ^c a2 ^c . b = 10.... a -->a = 1:5.

ca -->a + b ans = 11. -->c . 2. 1048576.^ a ans = 2.* b ans = 10. 90.\ b ans = 10.1 0.059D+14 1. Divis˜o vetorial ` direita entre elementos correspondentes. 16. 10.882D+34 . 4. Multiplica¸˜o vetorial entre elementos correspondentes.1 0. Adi¸˜o vetorial. 250. 4.^ c ans = 1. 22. 40.209D+24 8. ca -->a + c ans = 3. 16. ca -->a . 33. a a -->a . 8. 55.1 0. 44. ca -->a . 5. 6. Multiplica¸˜o escalar.1 Divis˜o vetorial ` esquerda entre elementos correspondentes. 10. 8. 7. 4. 6. 32. Potencia¸˜o. Adi¸˜o escalar.1./ b ans = 0.1 0.4.^ b ans = 1. 10. a a -->a . 4. 10. 160. 10. 9. -->a . Express˜es aritm´ticas o e 71 c = 2. 25. ca -->a * c ans = 2.

-->A = [1 A = 1. c = 3. ca -->A + c ... 30... am1 am2 . .*B A. 7 8 9].^B Resultado aij + c aij + bij aij ∗ c AB aij ∗ bij aij /bij Ac ac ij caij ij aij bij /aij b Sejam as matrizes A e B de ordem 3 e o escalar c. b1n .3.. 4... 2 3. conforme ser´ visto na Se¸˜o 8. bp1 bp2 . c = 3 2. amp ] B = [ b11 b12 .. 9.. Adi¸˜o escalar. existem as opera¸˜es matriciais b´sicas. 70.^A A..\B A^c A. B = 10. 4 5 6. 7. as quais est˜o a co co a a compiladas na Tabela 4.^c c. b2n .. 8..2. . 5.. b21 b22 . Express˜es o Express˜es matriciais o De modo similar `s opera¸˜es vetorias. 40 50 60.72 4. .3: Opera¸˜es matriciais b´sicas.3 Solu¸˜o de sistemas. 40. co a Sejam c um escalar e A = [ a11 a12 . B = [10 20 30. a1p .3 Cap´ ıtulo 4. 50. 6. 90. a2p . 80.. 20. 70 80 90].. bpn ] Opera¸˜o ca adi¸˜o escalar ca adi¸˜o matricial ca multiplica¸˜o escalar ca multiplica¸˜o matricial ca multiplica¸˜o entre elementos correspondentes ca divis˜o a direita entre elementos correspondentes a ` divis˜o a esquerda entre elementos correspondentes a ` potencia¸˜o ca Express˜o a A+c A+B A*c A*B A. O operador (\) envolvendo matrizes e vetores est´ relacionado a com solu¸˜o de sistemas lineares.1. ca a ca ca Tabela 4./B A. 60.. . a21 a22 . 3.

1020. 33. Adi¸˜o matricial.1 0. 6. 8. 810.1 0. Multiplica¸˜o entre elementos correspondentes. a ` -->A .1 Divis˜o a esquerda entre elementos correspondentes. 160. 960. 55.1 0. 77. 21. A diferen¸a no resultado das express˜es quando os operadores cont´m o caracter (. 66.1 0. 5.) deve c o e ser observada. 99. Multiplica¸˜o escalar.1 0. 360. 9. 27. Na multiplica¸˜o matricial. 810.1 0. Divis˜o a direita entre elementos correspondentes. 1260. 24. Express˜es aritm´ticas o e 73 ans = 4.4. 7. ca -->A * c ans = 3.1 0. 6. 88./ B ans = 0. 12. 10.1 0. 660. ca -->A + B ans = 11.* B ans = 10. 9. 90. 11. 15. 22. 40. 250. a ` .1. ca -->A . 1500. 44. 490. ca -->A * B ans = 300. 12. 420. 640. 18. 360.

a -->a = 1:5 a = 1.7320508 2. 8. E nos diferentes tipos de potencia¸˜o. A Tabela 4. 4. 729. 10. 243. 1048576. -->A . 9.^ B // elemento de matriz elevado a elemento de matriz ans = 1.4 apresenta algumas fun¸˜es a co co matem´ticas elementares do SCILAB. Express˜es o -->A . 10. 2412. 27. co a Como pode ser esperado de uma linguagem para aplica¸˜es nas ´reas t´cnicas e cient´ co a e ıficas. 5.^A e c^A s˜o equivalentes.74 Cap´ ıtulo 4. 6561.4142136 1.209D+24 8. 64. 576.882D+34 4.\ B ans = 10. 10. 1305. 512. -->c .059D+14 1. 27. 10. 125. o SCILAB oferece v´rias fun¸˜es importantes. 10. 2034. ca -->A .435D+59 1. 10. 729. 10.767D+72 7. 10.^ c // elemento da matriz elevado a uma constante ans = 1. 1548.^ A // constante elevada a elemento da matriz ans = 3. 1062. 2. 1656.618D+85 ´ E importante observar que no SCILAB as opera¸˜es c. 216. 343. 1. -->A ^ c // matriz elevada a uma constante ans = 468. a Se a vari´vel for um vetor ou uma matriz a avalia¸˜o de uma fun¸˜o se d´ para cada elemento a ca ca a da vari´vel. 81.236068 Os resultados acima podem ser apresentados na forma de uma tabela por interm´dio do e comando .887D+46 1. 3. -->b = sqrt(a) // raiz quadrada b = 1. 19683. 684. 2. 2. 2187.

Os operadores relacionais s˜o usados para comparar ca a .236068 4. A natureza da compara¸˜o ´ indicada por um operador relacional conforme a ca e Tabela 4. 2. Note que o caracter e (=) ´ usado para atribui¸˜o de um valor ` uma vari´vel enquanto que os caracteres (==) s˜o e ca a a a usados para compara¸˜o de igualdade.5. 2. 5.2 Express˜es l´gicas o o Uma express˜o se diz l´gica quando os operadores forem l´gicos e os operandos forem rela¸˜es a o o co e/ou vari´veis do tipo l´gico. sendo que T significa verdadeiro e F significa falso. O resultado de uma rela¸˜o ou de uma express˜o l´gica ´ verdadeiro ou falso. Uma rela¸˜o ´ uma compara¸˜o realizada entre valores do a o ca e ca mesmo tipo.2. 3.4142136 1. Express˜es l´gicas o o 75 Tabela 4. 1.b]’ ans = 1. co a Fun¸˜o ca acos asin atan cos acosh asinh atanh cosh coth exp abs conj ceil fix floor gcd -->[a. Descri¸˜o ca arco co-seno arco seno arco tangente co-seno Fun¸˜o ca trigonom´tricas e cotg sin tan Descri¸˜o ca co-tangente seno tangente logaritmo natural logaritmo decimal seno hiperb´lico o raiz quadrada tangente hiperb´lica o parte imagin´ria do complexo a parte real do complexo m´ ınimo m´ ltiplo comum u resto de divis˜o a arredonda em dire¸˜o ao inca teiro mais pr´ximo o sinal exponenciais arco co-seno hiperb´lico o log arco seno hiperb´lico o log10 arco tangente hiperb´lica o sinh co-seno hiperb´lico o sqrt co-tangente hiperb´lica o tanh exponencial complexas valor absoluto imag complexo conjugado real num´ricas e arredonda em dire¸˜o a +∞ ca lcm arredonda em dire¸˜o a 0 ca modulo arredonda em dire¸˜o a −∞ ca round m´ximo divisor comum a sign 1. 4.4: Fun¸˜es matem´ticas elementares do SCILAB.7320508 2.4. No SCILAB ca a o e o resultado ´ literal.

4. 2. o valor 1 (resultado da rela¸˜o l´gica) ´ ca o e adicionado ao correspondente valor de a. 6. Assim.6. 7. 8. ca co o o a Para os vetores a e b definidos anteriormente. 6. 9. 10. Operador relacional == > >= < <= ~= ou <> Descri¸˜o ca igual a maior que maior ou igual a menor que menor ou igual a diferente de vetores ou matrizes do mesmo tamanho ou comparar um escalar com os elementos de um vetor ou de matriz. 5. -->f = (a>3) & (a<=8) f = F F F T T T T T F F . 11. 8. c = 5. 3. 5. Express˜es o Tabela 4. 8. 9.5: Operadores relacionais do SCILAB. caso contr´rio cont´m o valor F (falso). 6. 7. c = 5 a = 1. 1. 3. ca o a e sendo que F vale 0 e T tem o valor 1. 4. b = 9:-1:0. Sejam os vetores a e b e o escalar c. 10. -->a = 1:10. Quando um elemento de b for menor ou igual a 3. 5. 4. b = 9. Apesar de o resultado da rela¸˜o l´gica ser um valor literal. 3. 2. Os operadores l´gicos do SCILAB s˜o listados na Tabela 4. 2.76 Cap´ ıtulo 4. -->e = a + (b <= 3) e = 1. 0. ele pode fazer parte de uma express˜o aritm´tica. Os operadores l´gicos permitem a combina¸˜o ou o ca nega¸˜o das rela¸˜es l´gicas. -->d = a >= c d = F F F F T T T T T T produz um vetor que cont´m o valor T (verdadeiro) quando o elemento correspondente do e a e vetor a for maior ou igual a 5.

caso contr´rio s˜o iguais a F. Express˜es l´gicas o o 77 Tabela 4.* . a T T F F b T F T F a & b T F F F a | b ~a T F T F T T F T A ordem de precedˆncia no SCILAB para express˜es envolvendo operadores aritm´ticos e e o e l´gicos s˜o indicados na Tabela 4.8.4. Para fazer a nega¸˜o. ou a a ca seja.^ ’ ./ . o Tabela 4. Para os vetores a e b e e definidos acima.7: Tabela verdade.2. a avalia¸˜o da express˜o.6: Operadores l´gicos do SCILAB.8: Ordem de precedˆncia das opera¸˜es aritm´ticas e l´gicas. ca a . e co e o Ordem de precedˆncia e a 1 2a 3a 4a 5a 6a 7a 8a 9a 10a Operadores ( ) fun¸˜o ca ^ . onde for T ser´ F e vice-versa basta.’ + (un´rio) e .\ +e> >= < <= == ~= ~ & | Os parˆnteses podem ser usados para alterar a ordem de precedˆncia. a -->g = ~f g = T T T F F F F F T T A Tabela 4.7 apresenta a tabela verdade para os operadores l´gicos do SCILAB.(un´rio) a a * / \ . o a Tabela 4. o Operador l´gico Descri¸˜o o ca & e | ou ~ n˜o a Uso conjun¸˜o ca disjun¸˜o ca nega¸˜o ca Os elementos de f s˜o iguais a T quando os correspondentes elementos de a forem maiores a do que 3 e menores ou iguais a 8.

<tipo>) converte a cadeia de caracteres <texto> de acordo ca com o <tipo>.4. . . 21. 0. 12. Se ele for ’u’ (upper) ent˜o converte para caixa alta (mai´ sculo) e se for a u ’l’ (lower) ou omitido converte para caixa baixa (min´ sculo).4. 1. 9. 1.1. 0. 0. 18.9.3 Express˜es literais o O SCILAB disp˜e de v´rias fun¸˜es para manipula¸˜o de cadeia de caracteres. 5. . 24. 2. e a a -->h1 = a-5 // parenteses h1 = . -->h3 = -h2 // . 1.unario h3 = . 4.9. Express˜es o -->h = -(a-5).78 Cap´ ıtulo 4. 16. 9. . -->h4 = 3*b // multiplicacao h4 = 27.1. -->h2 = h1. .^2 // potenciacao h2 = 16. sendo algumas o a co ca delas mostradas a seguir. 0. 4.16. -->h5 = h3 > -9 // operador relacional (primeiro a esquerda) h5 = F F T T T T T F F F -->h6 = h4 <= 15 // operador relacional (segundo a esquerda) h6 = F F F F T T T T T T -->h = h5 & h6 // operador logico h = F F F F T T T F F F 4. .3. u -->texto = ’Caixas Altas e Baixas’ texto = // define o texto .2. . 15. 9. u Caixas altas e baixas A fun¸˜o convstr(<texto>.3. .1. 3.25. 25.4. . 4. .1 Convers˜o de caracteres a Ser˜o apresentadas fun¸˜es para alterar o tamanho da caixa das letras e fazer a convers˜o a co a de caracteres para n´ mero e vice-versa. 4. .^2 > -9 & 3*b <= 15 h = F F F F T T T F F F ´ equivalente `s v´rias etapas. 6. 3.16.

60 < 61 = 62 > 63 ? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ‘ 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 | 125 } 126 ~ Por exemplo. -->t = ascii(n) t = 5+3*i // vetor de caracteres // converte caracteres para numeros 51.’u’) // converte para caixa alta ans = CAIXAS ALTAS E BAIXAS -->convstr(texto) // converte para caixa baixa ans = caixas altas e baixas C´digo ASCII o Os comandos <n´mero> = ascii(<texto>) e <texto> = ascii(<n´mero>) fazem a conu u vers˜o dos caracteres ASCII (American Standard Code for Information Interchange) contia dos no vetor de caracteres <texto> para valores num´ricos e atribuem ao vetor <n´mero> e e u vice-versa. 43. Express˜es literais o 79 Caixas Altas e Baixas -->convstr(texto. 45 46 . 105.9. // converte numeros para caracteres . o Representa¸˜o decimal dos caracteres ca 33 ! 34 " 35 # 36 $ 37 % 38 & 39 ’ 40 ( 41 ) 42 * 43 + 44 .3. Tabela 4. 42. 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 . para o vetor s de tamanho 5.9: Caracteres em c´digo ASCII. de acordo com a Tabela 4.4. -->s = ’5+3*i’ s = 5+3*i -->n = ascii(s) n = 53.

criar. a seguir. fun¸˜es para obter o tamanho. 29. Este comando ´ de ca e grande utilidade quando da escrita de r´tulos e t´ o ıtulos em gr´ficos. 49. 90. 14. 65. a co . 35.3.25 m/s 4. 10. -->v = 4. 10. 27. Express˜es o C´digo do SCILAB o Os comandos <texto> = code2str(<n´mero>) e <n´mero> = str2code(<texto>) fazem u u a convers˜o de um vetor de n´ meros inteiros <n´mero> para a cadeia de caracteres <texto> a u u e vice-versa. 12. conforme ser´ visto no a a Cap´ ıtulo 5. N´ meros u O comando <texto> = string(<n´mero>) converte a constante num´rica <n´mero> para u e u a sua representa¸˜o em caracteres e atribui o resultado a <texto>.35. 1. -->asc = ascii(car) // converte para codigo ASCII asc = 48. 122.25 -->titulo = ’velocidade = ’ + string(v) + ’ m/s’ titulo = velocidade = 4. 97.10.2 Manipula¸˜o de caracteres ca Ser˜o descritas.80 Cap´ ıtulo 4. . o -->texto = ’Caracteres’ // define o texto texto = Caracteres -->numero = str2code(texto)’ // converte texto para numero (vetor transposto) numero = . a ca -->car = ’01AZaz’ // define caracteres car = 01AZaz -->cod = str2code(car)’ // converte para codigo do SCILAB (vetor transposto) cod = 0. 27. 14. 10. . -->palavra = code2str(numero) // converte numero para texto palavra = Caracteres ´ E importante observar que os c´digos de convers˜o produzidos pelas fun¸˜es code2str e o a co str2code s˜o diferentes daqueles produzidos pela fun¸˜o ascii.25 v = 4.12. operar e procurar caracteres. segundo o c´digo do SCILAB. 28.

0. 3 4] // define matriz numerica matnum = 1. 3. Cria¸˜o ca O comando <vari´vel> = emptystr(<linhas>. A fun¸˜o strcat(<vetor>. -->S = emptystr(matnum) // matriz vazia com mesma dimensao de matnum S = ! ! ! ! ! ! -->length(S) // numero de caracteres de S ans = 0. 4. ’*’ ’abcd’]) // numero de caracteres de matriz ans = 2. o -->mat = emptystr(2. 0. se ela for uma matriz ent˜o ´ informado o n´ mero de caracteres de a a e u cada elemento. 0. Por sua vez. -->length([’ab’ ’123’. -->matnum = [1 2. Express˜es literais o 81 Tamanho A fun¸˜o length(<vari´vel>) fornece o n´ mero de caracteres presentes na cadeia de caca a u racteres <vari´vel>. 2.4. 1.3) // matriz vazia de dimensao 2 x 3 mat = ! ! ! ! ! ! -->length(mat) // numero de caracteres de mat ans = 0. -->length(’abcde’) // numero de caracteres ans = 5. 0. 0. . 0. <vari´vel> = a a a emptystr(<matriz>) cria a matriz de caracteres <vari´vel> vazia com as mesmas dia mens˜es de <matriz>.<colunas>) gera uma matriz de caractea res <vari´vel> vazia de dimens˜o <linhas> × <colunas>. 0. 0.<caracteres>) insere a cadeia <caracteres> entre cada eleca mento da cadeia de caracteres <vetor>.3. 4. 3.

-->v = ’ a b c ’ // vetor v com 3 caracteres brancos no inicio e no final v = a b c -->length(v) // numero de caracteres de v ans = 11.d.’c’) // cria matriz C a partir de M com colunas centradas C = !abcdefg h ijklmnopq ! ! ! ! 1 1234567 7890 ! ! ! ! abc 01 def ! A fun¸˜o stripblanks(<texto>) elimina os caracteres brancos do in´ e do final da cadeia ca ıcio de caracteres <texto>.c.<posi¸ao>) cria <matriz pos>. ’1’ ’1234567’ ’7890’.’ entre cada elemento vv = a. -->s = stripblanks(v) // remove caracteres brancos do inicio e do final de v s = a b c -->length(s) // numero de caracteres de s ans = 5. Express˜es o -->vet = [’a’ ’b’ ’c’ ’d’ ’e’] // define vetor de caracteres vet = !a b c d e ! -->vv = strcat(vet. ’abc’ ’01’ ’def’] M = !abcdefg h ijklmnopq ! ! ! !1 1234567 7890 ! ! ! !abc 01 def ! -->C = justify(M. alterando a posi¸˜o das colunas da matriz de caracteres <matriz> de ca acordo com <posi¸ao>. uma matriz de caracteres. c~ a se for ’c’ (center) elas ser˜o centradas e se <posi¸ao> = ’r’ (right) as colunas ser˜o moa c~ a vidas para a direita.b.’ >= ’) // insere ’ >= ’ entre cada elemento ve = a >= b >= c >= d >= e Opera¸˜o ca c~ O comando <matriz pos> = justify(<matriz>.82 Cap´ ıtulo 4.e -->ve = strcat(vet. Se for igual a ’l’ (left) as colunas ser˜o movidas para a esquerda. .’) // insere ’.’. -->M = [’abcdefg’ ’h’ ’ijklmnopq’.

’ ’. -->matriz = [’o scilab e’’ um software livre’.<texto subs>) substitui todas as ocorrˆncias ca da cadeia de caracteres <texto orig> na matriz de caracteres <matriz> pelos caracteres contidos em <texto subs>.[3 8 12]) v = !123 ! ! ! !45678 ! ! ! !90ab ! ! ! !cdefgh ! // define vetor de caracteres // quebra o vetor s nas posicoes 3.’’) // remove todos os caracteres brancos ans = determinante=produtodosautovalores Procura Seja o comando [<linhas>.<texto orig>.4. --> ’para aplicacoes cientificas’. 8 e 12 e A fun¸˜o strsubst(<matriz>.’ = ’. O vetor num´rico <linhas> informa e e os ´ ındices das entradas de <matriz> onde.<´ndice>) quebra a cadeia de caracteres <texto> nas posi¸˜es ca ı co dadas no vetor num´rico <´ndice>. -->frase = ’determinante = produto dos autovalores’ // define o texto frase = determinante = produto dos autovalores -->strsubst(frase. Por exemplo. . Express˜es literais o 83 A fun¸˜o strsplit(<texto>.3. -->s = ’1234567890abcdefgh’ s = 1234567890abcdefgh -->v = strsplit(s.<texto>). gerando um vetor e ı de caracteres. com valores estritamente crescentes. Para cada entrada da <matriz> de caracteres. O argumento opcional <qual> fornece ´ ındices informando qual das cadeias de caracteres de <texto> foi encontrada.’E’) // substitui as letras ’e’ por ’E’ ans = dEtErminantE = produto dos autovalorEs -->strsubst(frase.<qual>] = grep(<matriz>. pelo menos.’ e’’ igual ao ’) // substitui simbolo por texto ans = determinante e’ igual ao produto dos autovalores -->strsubst(frase.’e’. a fun¸˜o grep pesquisa se pelo menos uma cadeia de caracteres no ca vetor <texto> ´ igual a uma subcadeia de <matriz>. uma igualdade foi encontrada.

12. 1 (aa). Estes ´ ındices s˜o retornados no vetor num´rico a e <´ndices>. 2. 1.84 Cap´ ıtulo 4. respectivamente. Os caracteres aa e da foram encontrados nas posi¸˜es 2. 2. 6.[’aa’ ’da’]) qual = 1. Se este argumento for omitido ent˜o ´ assumido o vetor e ´ a e [’ ’.<Tab>] (caracteres branco e ascii(9)). 2. linha = 1.<delimitador>) cria um vetor coluna de caracteres <elementos> particionando a cadeia de caracteres <texto> onde ocorrer a presen¸a c de um dos componentes do vetor <delimitador>.[’ver’. -->[ind. 2 (da). O comando <elementos> = tokens(<texto>.<vetor i>). O argumento opcional <qual> fornece ´ ı ındices informando qual das cadeias de caracteres de <vetor i> foram encontradas. sendo que na linha 1 foi encontrada a cadeia de ´ ındice 2 (scilab) e na linha 3 foram as de ´ ındice 1 (ver) e 2 (scilab). Considere o comando [<´ndices>. 7.qual] = grep(matriz. 3. Express˜es o --> ’ver www. 1 (aa).scilab. -->ind = strindex(’abcd dabc’. 1.org’] // define a matriz de caracteres matriz = !o scilab e’ um software livre ! ! ! !para aplicacoes cientificas ! ! ! !ver www. 6. -->tokens(’Exemplo de cadeia de caracteres’) // particiona com delimitador ’ ’ . Por exemplo. 7.’a’) // procura os indices de ocorrencia de ’a’ ind = 1. 3 e 3. 8. ind = 2. A fun¸˜o ca ı strindex procura os ´ ındices de onde o i-´simo elemento do vetor de caracteres <vetor i> foi e encontrado na cadeia de caracteres <texto>. 1.’scilab’]) // procura por ’ver’ e ’scilab’ qual = 2. 8. 3. As cadeias de caracteres ver (posi¸˜o 1) e scilab (posi¸˜o 2) foram encontradas nas linhas ca ca 1.qual] = strindex(’baad daaa bdac’. -->ind = strindex(’baad daaa’.scilab. e 12 e os elementos que co apareceram foram.’aa’) // indices de ocorrencia de ’aa’ ind = 2. 7. Cada componente do segundo argumento ´ formado por um unico caracter. 7.org ! -->[linha. 1 (aa) e 2 (da). Por exemplo.<qual>] = strindex(<texto>. 8.

. Por exemplo. Os ´ ındices inicial e final de cada elemento resultante da parti¸˜o ca s˜o atribu´ a ıdos ` matriz num´rica de duas colunas <matriz>.<Tab>] (caracteres branco e ascii(9)).3. Express˜es literais o 85 ans = !Exemplo ! ! ! !de ! ! ! !cadeia ! ! ! !de ! ! ! !caracteres ! -->tokens(’Exemplo de cadeia de caracteres’. 9.’c’) // delimitador ’c’ ans = !Exemplo de ! ! ! !adeia de ! ! ! !ara ! ! ! !teres ! -->tokens(’Exemplo de cadeia de caracteres’. 19. 31. A fun¸˜o tokenpos ca particiona a cadeia de caracteres <texto> onde ocorrer a presen¸a de um dos componentes c do vetor <delimitador>. 12. 17. Cada componente do segundo a e argumento ´ formado por um unico caracter.4.<delimitador>). Se este argumento for omitido ent˜o ´ assumido e ´ a e o vetor [’ ’. 7.[’d’ ’t’]) // delimitadores ’d’ e ’t’ ans = !Exemplo ! ! ! !e ca ! ! ! !eia ! ! ! !e carac ! ! ! !eres ! Seja o comando <matriz> = tokenpos(<texto>. -->tokenpos(’Exemplo de cadeia de caracteres’) // particiona com delimitador ’ ’ ans = 1. 20. 22. 10.

18. e ca 4. 15.3]) c = !13 46 80 ! // obtendo com indices 1 e 3 Observar que cada valor de <elementos> ´ separado por dois caracteres branco. onde <elementos> e <texto> ı s˜o matrizes de caracteres e <´ndices> ´ um vetor num´rico de ´ a ı e e ındices.’890’]. ’t’ ans = 1.[1. estas tˆm que ser previa a e amente definidas.’bcd’.’efghi’]. -->x = 1. co ı Por exemplo. 26.86 Cap´ ıtulo 4. Express˜es o -->tokenpos(’Exemplo de cadeia de caracteres’.’4567’. A fun¸˜o eval ´ tamb´m capaz de executar tarefas mais complexas. 31. o o e cuja sintaxe ´ e <resultado> = eval(<express~o>) a A cadeia de caracteres <express~o> cont´m a express˜o matem´tica que deve ser interprea e a a tada e atribu´ ` vari´vel <resultado>.1]) // obtendo com indices 1. a -->vet = part([’a’. 10. o primeiro e e componente de vet recebe dois caracteres brancos nas posi¸˜es 2 e 3. ca e e . 8. -->c = part([’123’. Por exemplo. 13.[1.4 Execu¸˜o de express˜es ca o O SCILAB possui comandos com o prop´sito de executar express˜es. Note que para avaliar uma express˜o que possui as vari´veis x e y.4. 28.2. y = 2.<´ndices>). 2.[’d’ ’t’])// delimitadores ’d’. portanto. Se um e elemento de <´ndice> for maior que o comprimento de um componente de <texto> ent˜o ı a <elementos> receber´ um caractere branco. O segundo componente co ’bcd’ tem comprimento 3 que ´ menor que 4 por isso recebe um branco na posi¸˜o 3. um dos quais ´ o eval. 4 e 1 vet = !a a bc b efhe ! O comprimento do primeiro componente ’a’ ´ 1 que ´ menor que 2 e 4. A fun¸˜o part obt´m ca e <elementos> a partir dos elementos de <texto> nas posi¸˜es especificadas em <´ndice>. Seja o comando <elementos> = part(<texto>. 20. eval(’2*x+exp(y-2)’) ans = 3. ıda a a -->r = eval(’sin(%pi/2)’) r = 1.

b2 − c + d+e cos(a) d + sen(b + c) 3 y =a− . Apesar de os comandos estarem separados por v´ ırgula. Exerc´ ıcios 87 -->Tabela = [’sqrt(x)’. 4-1. por exemplo. eval(Tabela(1.1 Avaliar as express˜es escalares 5+3. ’exp(x)’. b = 2. d = 4. .1 Constantes. 1+2*3-4/5. O argua o ca e mento <express~o> deve estar escrito de acordo com as regras de defini¸˜o de constantes a ca num´ricas vistas na Se¸˜o 3.’1/x+5*x^2’] // define matriz com 3 expressoes Tabela = !sqrt(x) ! ! ! !exp(x) ! ! ! !1/x+5*x^2 ! -->x = 16. entrar com um de cada vez.5 A fun¸˜o evstr(<express~o>) converte a representa¸˜o do valor num´rico da cadeia de ca a ca e caracteres <express~o> escrita em c´digo ASCII para a representa¸˜o num´rica. 2\ 5. c = 3.1 Express˜es aritm´ticas ca o e o 4.4. e ca -->x = evstr(’1. e = 5.0255983i 4.678e-1*%i’) x = 123.5.:)) // avalia a expressao da linha 3 com x = 2 ans = 20. 6*3. eval(Tabela(3.2 Sejam a = 1. 4.090566 + 0. -->x = 2. Se¸˜o 4.5678i com este valor num´rico ´ poss´ e e ıvel. 3^2.:)) // avalia a expressao da linha 1 com x = 16 ans = 4. -->y = sqrt(x) y = 11. Avaliar x= 3 e(e − a)(e − b) + cd . 6*2^3.5 Exerc´ ıcios Observar atentamente e anotar o resultado dos comandos do SCILAB. 10/2. + 0. calcular a raiz quadrada.23d2+5.

3 u-k.^k. d = ca a a o exp(0) == 0. 4.7 M.\v.13 abs(x) == 1. sign(a). b = %f. .88 Cap´ ıtulo 4./N. 3 1 -1. 4 6 -1. dados a = %t. z. 4. M^z.14. 4. M. floor(a).9 Verificar a diferen¸a entre as fun¸˜es usando a = π e a = −5. 4.8 M. conj(c). M*x. c = sqrt(2) > 1. observar os resultados das fun¸˜es complexas.cos(u-k*v). N = [1 1 2. b − a 1 + b3 Avaliar as express˜es vetoriais para u = 2:6. u. real(c). Avaliar as express˜es matriciais para o M = [2 -3 1.*N. u.*v.12 x > -1. 4.11 Com rela¸˜o `s vari´veis l´gicas. Se¸˜o 4. o o 4. M*N. 4.\N. 4.2 Express˜es l´gicas ca o o 4. u.4 u. v = linspace(10. 4. M. Express˜es o z = log10 b d + e2 + exp b+a c2 √ + 1 + b2 .6 M-z. M. -5 2 1]. u*k.^z. 4.^M. k = 5.^N. z^M. co abs(c). M*z. x = (1:3)’.14 x <= -1 & v > 1./v. round(a). z = 2. u+v. 3 2 1].^u. o 4. c co ceil(a).6. v. imag(c). fix(a). k. completar a tabela a b c d a&b a&c b&d a|b a|c b|d ~a ~b Avaliar as express˜es l´gicas para x = -2:2 e v = 1:5.10 Para c = 3 + 4i e c = 5 − 3i.5).^u. M+N.5 w = sqrt(u+v) .

co 4.3d-1’ e ’0.22 ’exp(x-y)’. avaliar as express˜es abaixo. inserir ’ menor que ’ entre eles.5.* sinh(x*y/10)’.21 Avaliar o resultado da express˜o dada pela cadeia de caracteres ’sqrt(4)+cos(%pi)’.16 Definir os comandos para gerar as cadeias de caracteres T´tulo.y) .19 Dado ’abcde edabc eacdb’. 4. 4.20 Dada a seq¨ˆncia de caracteres ’abcdeedabceacdbdbcae’ determinar os ´ ue ındices de onde ocorre ’bc’. substituir toda ocorrˆncia do caracter ’d’ pelo caracter e ’X’. 4.24 Converter para n´ mero as cadeias de caracteres ’12. u 4.17 Dada a cadeia de caracteres [’1’ ’2’ ’3’ ’4’].15 x > 1 | abs(v-3) < 1.25 Qual a diferen¸a entre as fun¸˜es evstr e string? c co . Se¸˜o 4. Exerc´ ıcios 4. ı a c~ 4.18 Quebrar a cadeia de caracteres ’123456789012345’ nas posi¸˜es 5 e 10.0456789e2’. a Para x = 1:5 e y = 3.3 Express˜es literais ca o 89 4. vari´vel e equa¸oes.23 ’modulo(x. o 4. Se¸˜o 4. 4.4 Execu¸˜o de express˜es ca ca o 4.4.

Express˜es o .90 Cap´ ıtulo 4.

<y 1>.8. Os tipos de linha s˜o mostrados na a Tabela 5. a ca -->plot(x.. Neste cap´ ıtulo ser˜o vistos como gerar gr´ficos bi e tridimensionais e os a a modos de imprimi-los ou grav´-los em arquivos para que possam ser inclu´ a ıdos em textos.<x n>.y) 91 .1. // define as abscissas -->y = sin(x).Cap´ ıtulo 5 Gr´ficos a Uma das grandes virtudes do SCILAB ´ a facilidade que ele oferece para produzir gr´ficos e a de boa qualidade. respectivamente e <tipo de linha i> ´ uma cadeia de 1 a 4 caracteres que especifica e a cor.50). 5.. // vetor com elementos da funcao co-seno Para gerar um gr´fico de sen(x) em fun¸˜o de x basta. // vetor com elementos da funcao seno -->z = cos(x)...1 Gr´ficos bidimensionais a Para gerar gr´ficos bidimensionais s˜o usadas as vers´teis fun¸˜es plot e fplot2d. a a a co 5.<tipo de linha 1>.1 Fun¸˜o plot ca plot(<x 1>.<y n>. Use o comando help plot para mais detalhes.<tipo de linha n>) A sintaxe da fun¸˜o plot ´ ca e onde <x i> e <y i> s˜o vetores contendo as abscissas e ordenadas dos pontos a serem exibia dos. Considere os vetores -->x = linspace(-8.1. o estilo da linha e o marcador dos pontos dados.

O escalar inteiro <caixa> informa se ser´ desea a a nhada uma caixa em torno do <texto>. Gr´ficos a Tabela 5. cima triang.1(b) basta o comando -->plot(x.1(a). no sentido hor´rio.z.<caixa>]) a escreve a cadeia de caracteres <texto> na posi¸˜o de coordenadas x. e a e o Texto A fun¸˜o ca xstring(x.y.<r´tulo z>]]]) ı o o o escreve a cadeia de caracteres <t´tulo> no cabe¸alho e a cadeia de caracteres <r´tulo i> ı c o a no i-´simo eixo do gr´fico. Se <^ngulo> = 0 e <caixa> = 1 ent˜o uma caixa a a ser´ desenhada em torno do <texto>. lil´s a amarelo preto branco Estilo de linha linha s´lida (default) o linha tracejada linha pontilhada linha de tra¸o e ponto c S´ ımbolo + o * .92 Cap´ ıtulo 5. em graus. . ca S´ ımbolo r g b c m y k w Cor S´ ımbolo vermelho verde -azul : turquesa -. sen(x) e cos(x) em fun¸˜o de x com os valores de sen(x) em linha ca s´lida e os pontos dados sendo destacados com (*) e os de cos(x) em linha tracejada e com o (o).<texto>[.’--o’) O SCILAB oferece algumas fun¸˜es para identifica¸˜o dos gr´ficos. x ’s’ ’d’ ^ v > < ’pentagram’ ’none’ Marcador mais c´ ırculo asterisco ponto cruz quadrado diamante triang. Os trˆs argumentos <r´tulo i> s˜o opcionais. Os argumentos <^ngulo> e <caixa> s˜o opcionais.y.<^ngulo>][.x. Tamb´m pode ser gerado um gr´fico um a e e a pouco mais complexo.<r´tulo x>[. esquerda pentagrama sem marca (default) O gr´fico produzido ´ mostrado na Figura 5. co ca a T´ ıtulos e r´tulos o A fun¸˜o ca xtitle(<t´tulo>[.1: Tipos de linha da fun¸˜o plot.<r´tulo y>[. direita triang. Para produzir o grafico da Figura 5.’-*’.y com inclina¸˜o ca ca <^ngulo>. baixo triang. a a a Assim os comandos.

Figura 5.7.1.<posi¸ao>][.<texto n>][. a Grade A fun¸˜o xgrid(<estilo>) faz com que apare¸a uma grade no gr´fico produzido de acordo ca c a com a constante inteira <estilo>.’sen(x)’..0.-0.. 1: canto o c~ a superior direito (default).’eixo x’.1: Gr´ficos produzidos pela fun¸˜o plot. .’eixo y’) -->xstring(4. como mostrado na Figura 5.2(a). Valores negativos de ca a <posi¸ao> permitem colocar as legendas fora do quadro do gr´fico (usar help legend para c~ a mais detalhes). sendo o valor default igual a %T.1(b). A caixa de legendas move-se com e o mouse e assim que estiver na posi¸˜o desejada pressiona-se um bot˜o.1. o a Legenda A fun¸˜o ca legend([<texto 1>. 4: canto inferior direito e 5: a legenda ´ colocada usando o mouse. 2: canto superior esquerdo. Os argumentos <posi¸ao> e <caixa> c~ s˜o opcionais. A Figura 5. a ca -->xtitle(’funcoes seno e co-seno’.. (b) f (x) = sen(x) e g(x) = cos(x).6.’cos(x)’) -->xstring(6.1. A vari´vel l´gica <caixa> indica se uma caixa ser´ ou n˜o desenhada em a o a a torno das legendas.1) produzir˜o os t´ a ıtulos e r´tulos no gr´fico da Figura 5.<caixa>]) c~ adiciona legendas ao esbo¸o da figura. usando as cadeias de caracteres <texto i> como c r´tulos. Gr´ficos bidimensionais a 93 (a) f (x) = sen(x).0.5.2(b) mostra o efeito dos comandos.. 3: canto inferior esquerdo. O argumento <posi¸ao> especifica onde as legendas ser˜o colocadas. que define a forma e a cor da grade.

’cos(x)’]. com seus valores sendo ca e a dados por um vetor com elementos inteiros de tamanho igual ao n´ mero de curvas. Se style(i) for negativo ou nulo ent˜o a curva ´ esbo¸ada usando a a e c marcadores e abs(style(i)) define o tipo de marcador. Ymax]).. <op¸ao n> = <valor n>. . Xmax.1. As abscissas estar˜o entre os limites Xmin a e Xmax e as ordenadas entre Ymin e Ymax. Se u style(i) for positivo a linha ent˜o ´ desenhada como uma linha plana e o ´ a e ındice define qual cor ser´ usada. ca a -->legend([’sen(x)’.2 Fun¸˜o fplot2d ca fplot2d(<abscissas>. Gr´ficos a (a) T´ ıtulos e r´tulos.<fun¸ao>. o Legendas e grade. logflag. rect Define os limites das abscissas e ordenadas com os valores definidos por um vetor de quatro elementos (rect = [Xmin. sendo sua sintaxe ca e c a ca onde <abscissas> ´ um vetor num´rico contendo as abscissas..2: Documenta¸˜o de gr´ficos. axesflag. <fun¸ao> ´ o nome de uma e e c~ e function externa e <argumentos> ´ um conjunto opcional que define o estilo do gr´fico na e a c~ c~ forma <op¸ao 1> = <valor 1>.94 Cap´ ıtulo 5. style Esta op¸˜o ´ utilizada para definir como as curvas ser˜o desenhadas.. nax e leg. Figura 5. rect. Ymin. frameflag. O argumento <op¸ao i> c~ pode ser style.<argumentos>) c~ A fun¸˜o fplot2d ´ utilizada para esbo¸ar gr´fico de fun¸˜o no R2 ..5) -->xgrid(1) 5.

<Nx>: n´ mero de marcas principais a ser usado no eixo das abscissas. mas aumentados para obter uma escala isom´trica. 1: limites dados pela op¸˜o rect. 5: dados pela op¸˜o rect. mas aumentados para produzir melhores r´tulos dos eixos. <nx>: u n´ mero de submarcas a serem desenhadas entre marcas no eixo das abscissas. ’nl’. 1: eixos desenhados com o eixo de ordenadas mostrado a e a ` esquerda. mas para o eixo das ordenadas.@<legenda n>. ’ln’. 6: calculados pelos m´ximos e o a e m´ ınimos dos vetores de abscissas e ordenadas. o axesflag Especifica como os eixos ser˜o desenhados podendo ter um valor inteiro. tal que. a <Ny>]). sendo <legenda i> o t´ ıtulo correspondente ` i-´sima curva.0) e caso este ponto n˜o esteja a dentro da ´rea exibida ent˜o os eixos n˜o aparecer˜o. <Nx>. 0: escala default (sem c´lculos). 3: eixos desenhados com o a eixo de ordenadas mostrado ` direita. tal que. contudo os gr´ficos anteriores s˜o redesea a nhados para usar a nova escala e 9: como frameflag = 8. Se a op¸˜o axesflag n˜o co ca a for usada ent˜o a op¸˜o nax sup˜e que axesflag = 1. a a a a nax Atribui os r´tulos e define as marcas nos eixos quando a op¸˜o axesflag = 1 for usada. 2: gr´fico contornado por uma caixa sem marcadores. Se essa op¸˜o n˜o for definida ´ assumido o valor ’ ’. por´m aumentados para produzir e melhores r´tulos dos eixos (default). sendo que cada letra representa um eixo com n significando escala normal ou linear e l para escala logar´ ıtmica. <Ny> e <ny>: u fornecem informa¸˜es similares.. o ca Os valores s˜o definidos por um vetor de quatro elementos inteiros ([<nx>. 3: dados pela op¸˜o rect. e ca por´m aumentados para produzir melhores r´tulos dos eixos. <ny>. a ca o leg Esta op¸˜o define as legendas referentes ` cada curva devendo ser uma cadeia de caracca a teres na forma <legenda 1>@<legenda 2>@. ’ll’. todavia os gr´ficos anteriores s˜o redesenhados o a a para usar a nova escala. 7: como frameflag = 1. a e ca a e . 8: como frameflag = 2. 4: calculados pelos m´ximos e m´ e a ınimos dos vetores de abscissas e ordenadas. 4: eixos desenhados centrados no meio do contorno a da caixa e 5: eixos desenhados de modo a cruzar o ponto (0. tal que. 2: calculados pelos m´ximos e m´ a ca a ınimos dos vetores de abscissas e ordenadas.1.. Este argumento pode assumir um valor inteiro. 0: nada a ´ desenhado em torno do gr´fico.5. frameflag Esta op¸˜o controla o c´lculo dos limites das coordenadas atuais a partir dos valores m´ ca a ınimos requeridos. por´m aumentados para obter ca e uma escala isom´trica. Gr´ficos bidimensionais a logflag 95 Especifica a escala (linear ou logar´ ıtmica) ao longo dos dois eixos de coordenadas com valores associados podendo ser ’nn’.

// define valores de x -->deff(’[y]=f(x)’. que gera o gr´fico da Figura 5. Gr´ficos a Exemplos A seguir ser˜o mostrados alguns gr´ficos gerados pela fun¸˜o fplot2d.f.leg=’sen(x)*x’) // grafico com nax e leg Para mais informa¸˜es sobre os comandos para manipula¸˜o de gr´ficos bidimensionais use co ca a help fplot2d. c ca O comando abaixo apresenta as op¸˜es frameflag e axesflag. o Os comandos abaixo geram o gr´fico da Figura 5.3: Esbo¸os de f (x) = sen(x)x pela fun¸˜o fplot2d.f. A lista de comandos a a ca -->x = -20:0.f) // esboca grafico -->xtitle(’f(x) = sen(x) * x’.’x’.axesflag=5) // grafico com frameflag e axesflag As op¸˜es nax e leg podem ser vistas no comando abaixo.frameflag=4.96 Cap´ ıtulo 5.1:20.’f(x)’) // titulos e rotulos produzem o gr´fico apresentado na Figura 5.rect=[-15 -10 15 10]) // grafico com style e rect -->xtitle(’f(x) = sen(x) * x’.’f(x)’) // titulos e rotulos (a) T´ ıtulo e r´tulos. o (b) Op¸˜es style e rect. .4(b). com o uso das op¸˜es style e rect.3(b). produzindo o gr´fico da co a Figura 5. co a -->fplot2d(x.style=-10. co Figura 5.’x’. -->fplot2d(x. a co -->fplot2d(x.4(a).nax=[5 10 4 8].’y=sin(x)*x’) // define funcao -->fplot2d(x.3(a) apenas com o t´ a ıtulo e os r´tulos dos eixos.f.

0.Y] = meshgrid(x. c ca co 5. .5:1 // define vetor y y = .1. .1 Fun¸˜o meshgrid ca A fun¸˜o [<matriz X>. 0.5 1.0.5 . 0. 0. algumas fun¸˜es com esta finalidade.5 2. 0.1.0. 0.1.0. co (b) Op¸˜es nax e leg.0.5 0. co Figura 5. 0. 1.1.1. .5 0.5 1. . -->y = -1:0.5 0. Gr´ficos tridimensionais a 97 (a) Op¸˜es frameflag e axesflag. o SCILAB possui v´rios comandos para a a que gr´ficos tridimensionais sejam tamb´m facilmente esbo¸ados.5 .1.5 0. Para mais informa¸˜es sobre essas co co fun¸˜es deve ser utilizado o comando help graphics.5 .1.y) // cria matrizes X Y = .5 .<matriz Y>] = meshgrid(<vetor x>.5 0.0. .1.5 e Y 1. co 5.5 . a e c a de modo sucinto. -->[X.2.5 0.5 0.5 0.0. .5:2 // define vetor x x = . 0.0. 0.5. . a o -->x = -1:0. As linhas de <matriz X> s˜o c´pias de <vetor x> e as colunas de <matriz Y> s˜o c´pias de <vetor y>. 0. .5 .2.5 0.2 Gr´ficos tridimensionais a De uma maneira similar aos gr´ficos bidimensionais.4: Esbo¸os de f (x) = sen(x)x pela fun¸˜o fplot2d com op¸˜es.0. Ser˜o descritas a seguir.<vetor y>) transforma o doca m´ ınio especificado por <vetor x> e <vetor y> em matrizes <matriz X> e <matriz Y> que possam ser usadas para avaliar fun¸˜es de duas vari´veis e fazer esbo¸os tridimensionais co a c a o de malhas e superf´ ıcies.

1. 1. 0. 1. Gr´ficos a 1. . 1.5 1.<argumentos>) a o onde <matriz X>.5 1. 1. 0.5 1. a e leg Define os r´tulos referentes ` cada um dos trˆs eixos devendo ser uma cadeia de caracteres o a e na forma <legenda x>@<legenda y>@<legenda z>. 1.5 -->Z = X + Y Z = 2. 1. 0.5 0. 1.5 1. 0.1 para esbo¸os tridimenca e ca ca ca c sionais.5 1.5 0.5 0.5 1.5 2. 2. 1.2 Fun¸˜o plot3d ca Esta fun¸˜o ´ uma generaliza¸˜o da fun¸˜o plot vista na Se¸˜o 5..<matriz Y>. O ca e e e elemento inteiro <modo> define a cor da superf´ ıcie. Se essa op¸˜o n˜o for fornecida ent˜o ´ assumido o valor ’ ’. c~ alpha e theta S˜o angulos..1. .5 1. 0.0.. 1. flag e ebox.0.1. . 2.<matriz Z>. .5 // operacao com X e Y . 0. 2. . 1.<tipo>. que definem as coordenadas esf´ricas do ponto do observador.1. theta. leg. 5.5 1.5 . 1. 1.0. .5 1.5 1. .0. 2..5 . e ca a a e flag Essa op¸˜o ´ um vetor num´rico com trˆs elementos flag = [<modo>. O argumento <op¸ao i> pode ser alpha.5 .0.1.5 3.5 2. 2. <op¸ao n> a c~ = <valor n>.5 0. 0.2.5 0.5 0. Se positivo ent˜o a superf´ ´ desenhada a ıcie e com a cor <modo> e o contorno de cada faceta ´ desenhado com estilo de linha e cor definidos.1.5 2. 1. Se n˜o forem a a especificados s˜o assumidos os valores pr´-definidos alpha = 35 e theta = 45. sendo <legenda i> correpondente ao i-´simo eixo. <matriz Y> e <matriz Z> s˜o matrizes de mesmas dimens˜es contendo as coordenadas tridimensionais dos pontos a serem exibidos e <argumentos> ´ um conjunto e c~ opcional que define o estilo do gr´fico na forma <op¸ao 1> = <valor 1>. 2. 1.0.98 Cap´ ıtulo 5.5 0.5 .5 . 0. e .1. 1. O a ˆ e argumento theta descreve o ˆngulo no plano xy e alpha em torno do eixo z. em graus. . Sua sintaxe ´ e plot3d(<matriz X>.<caixa>].5 0. 0. X = .0.5 0. 0. 0. 0.5 1. 2.5 1.1.0. .

A e Figura 5. 3 ou 5.2. pelo coe mando abaixo. Xmax.theta=30) .alpha=30.-2:0. Ymax. 1: o mesmo que o anterior porque ainda n˜o est´ implee a a a mentado (!). Ymin. 5: limites isom´tricos expandidos 3D com os limites e da caixa fornecidos por ebox e 6: limites isom´tricos expandidos 3D com limites derivados e dos dados fornecidos. tal que. Zmax]).alpha=60.^2. Se a op¸˜o ca ca flag n˜o for fornecida ent˜o ebox n˜o ´ considerado.5. 2: reescala automaticamente a a caixa 3D com raz˜o de aspecto extremo e os contornos s˜o computados usando os dados a a fornecidos. o gr´fico ´ rotacionado do modo mostrado na Figura 5. 0: nada a ´ desenhado em torno do gr´fico. 1: reescala automaticamente a caixa 3D com raz˜o de aspecto extremo e os a contornos s˜o definidos pelo valor do argumento opcional ebox.theta=60) Quando os argumentos tˆm os valores alterados para alpha = 60 e theta = 30.2:2).Z) // desenha grafico 3D Nesta figura foram utilizados os valores pr´-definidos alpha = 35 e theta = 45 graus.Y. a a a e Exemplos Para produzir o esbo¸o da fun¸˜o z = sen(x) cos(y)2 no intervalo −3 ≤ x ≤ 3 e −2 ≤ y ≤ 2. Gr´ficos tridimensionais a 99 Se ele for nulo ent˜o somente a malha da superf´ ´ desenhada e se ele for negativo ent˜o a ıcie e a a superf´ ´ desenhada com a cor -<modo> e o contorno da faceta n˜o ´ desenhado. 3: uma caixa em torno a ıcie a da superf´ ´ desenhada e os t´ ıcie e ıtulos s˜o adicionados e 4: uma caixa em torno da superf´ a ıcie ´ desenhada e t´ e ıtulos e eixos s˜o adicionados. utiliza-se os comandos -->[X.Z. O terceiro elemento inteiro <caixa> define a moldura em torno do gr´fico. tal que. 4: 3D isom´trico com e e limites derivados dos dados fornecidos. 0: o gr´fico ´ feito usando a a e escala 3D atual.2:3.Z. c ca mostrado na Figura 5. a usando o comando -->plot3d(X.Y. a e -->plot3d(X.6(a). // calcula pontos da funcao -->plot3d(X.5(b) apresenta o gr´fico com os valores alterados para alpha = 30 e theta = 60. a ebox Esta op¸˜o define os limites das trˆs coordenadas do gr´fico com os valores dados em um vetor ca e a de seis elementos (ebox = [Xmin.Y. 2: somente os eixos atr´s da superf´ s˜o desenhados. Zmin. Este argumento ´ e usado junto com <tipo> da op¸˜o flag. 3: 3D isom´trico com limites da caixa fornecido por ebox.*cos(Y).5(a).Y] = meshgrid(-3:0. caso <tipo> tenha o valor 1.// cria matrizes X e Y a partir de vetores -->Z = sin(X). ıcie e a e O segundo elemento inteiro <tipo> define a escala.

5: Esbo¸os de z = sen(x) cos(y)2 usando a fun¸˜o plot3d. co (b) Op¸˜es alpha = 30 e theta = 60. c ca . co (b) Op¸˜es alpha = 80 e theta = 230. Gr´ficos a (a) Op¸˜es alpha = 35 e theta = 45. co Figura 5. c ca (a) Op¸˜es alpha = 60 e theta = 30.100 Cap´ ıtulo 5. co Figura 5.6: Esbo¸os de z = sen(x) cos(y)2 usando plot3d com varia¸˜o de alpha e theta.

3 Fun¸˜o mesh ca c A fun¸˜o mesh(<matriz X>.7(b).2:2).theta=230. // define as matrizes X e Y -->Z = sin(X).2:3.alpha=80.Z.*cos(Y).Y.8(a).7: Esbo¸os de z = sen(x) cos(y)2 usando plot3d com as op¸˜es leg e flag.theta=230) Um exemplo de uso da op¸˜o leg pode ser visto na Figura 5. <matriz Y> e <matriz Z>. co Figura 5. ca (b) Op¸˜es leg e flag.’eixo x’. Os comandos ıcie abaixo geram o esbo¸o mostrado na Figura 5. Gr´ficos tridimensionais a 101 Um gr´fico com a orienta¸˜o dos eixos mais natural ´ apresentado na Figura 5.Z.2.2.Y] = meshgrid(-3:0.^2.flag=[0 2 3]) (a) Op¸˜o leg. -->plot3d(X.’eixo y’.Y.theta=230. c co 5.leg=legenda) Acrescentando a op¸˜o flag com os argumentos <modo> = 0.7(a).Y. obtida pelos comandos ca -->legenda = ’eixo x@eixo y@eixo z’ // define legenda legenda = eixo x@eixo y@eixo z -->plot3d(X. sendo a ca e obtido pelo comando com alpha = 80 e theta = 230.leg=legenda.alpha=80. // define a matriz Z com a funcao -->mesh(X. // desenha a malha -->xgrid(1) // coloca a grade -->xtitle(’mesh’.Z). <tipo> = 2 e <caixa> = 3 ca pelo comando abaixo.<matriz Y>.6(b).alpha=80.’eixo z’) // titulos e rotulos .Y. tem-se a Figura 5. c -->[X.-2:0.5. -->plot3d(X.Z.<matriz Z>) produz o esbo¸o de uma malha na ca superf´ especificada pelas matrizes <matriz X>.

<matriz Z>) produz uma superf´ ca tridimensional especificada pelas matrizes <matriz X>.3 Janela de figura As figuras geradas pelo SCILAB podem ser facilmente modificadas. c co 5. -->[X. // define a matriz Z com a funcao -->surf(X. mostrada na Figura 5. e o UnZoom.<matriz Y>.’eixo x’. com v´rias op¸˜es para produzir um arquivo com o gr´fico. ca (b) Fun¸˜o surf.Z).2:3.4 Fun¸˜o surf ca ıcie sombreada A fun¸˜o surf(<matriz X>.2. Deste modo.-2:0.8: Esbo¸os de z = sen(x) cos(y)2 com diferentes fun¸˜es. a a Uma figura ´ gerada na janela Scilab Graphic(0) que apresenta cinco bot˜es: File.Y] = meshgrid(-3:0. a co a . Zoom. 3D Rot.102 Cap´ ıtulo 5.’eixo y’. // define as matrizes X e Y -->Z = sin(X). ca Figura 5.*cos(Y). os comandos abaixo produzem a Figura 5. Gr´ficos a (a) Fun¸˜o mesh.’eixo z’) // titulos e rotulos -->xgrid(1) // coloca a grade 5.8(b). impressas ou gravadas em um arquivo para posterior impress˜o ou inclus˜o em um texto. Escolhendo File aparecem v´rias op¸˜es entre as quais Export. e Edit.^2.9.2:2).Y. // desenha a superficie -->xtitle(’surf’. com a qual surge a janela a co Xscilab. <matriz Y> e <matriz Z>.

5. o 5. a o ca ıcio 5. Gerar uma malha com −5 ≤ x ≤ 5 e −3 ≤ y ≤ 3 usando a fun¸˜o meshgrid.1 Gr´ficos bidimensionais ca a ca 5.2 Gr´ficos tridimensionais ca a 5.4 Exerc´ ıcios Se¸˜o 5. ca ıcio 5. ca 5. Se¸˜o 5. Exerc´ ıcios 103 Figura 5.2 Repetir a opera¸˜o acima usando 50 pontos e sem usar grade.9: Janela para gerar arquivo com figura.1 variando os argumentos opcionais.5 Usar a fun¸˜o plot no Exerc´ 5.4.5. Gerar uma tabela com 20 pontos para −5 ≤ x ≤ 5 e exibir o gr´fico da fun¸˜o usando o a ca comando plot colocando r´tulos e grade. ca .3 Utilizar a fun¸˜o fplot2d no Exerc´ 5.1 Seja a fun¸˜o y = e1+x/10 + cos(x)x.6 Seja a fun¸˜o ca z = sen(x)y 2 . −10 ≤ x ≤ 10 e exibir o seu gr´fico usando o comando fplot2d com r´tulos e grade.4 Gerar uma tabela de 40 pontos para y = sen(x)x.4.

Gr´ficos a 5.13 5.9 Usando o comando surf exibir a superf´ de ıcie z = x cos(x) sen(y) com −π ≤ x ≤ π e −π ≤ y ≤ π.3 Janela de figura ca 5.12 5.7 variando os argumentos opcionais.14 5.15 .eps.11 Gravar a figura do Exerc´ 5.7 Gerar um gr´fico usando a fun¸˜o plot3d. a ca 5. ıcio 5.104 Cap´ ıtulo 5.8 Repetir o Exerc´ 5. ıcio 5.10 Se¸˜o 5. utilizando a janela Xscilab.9 no arquivo figura. 5.

tais como. 105 .1. que seja executada uma seq¨ˆncia de comandos escrita ca ue em um arquivo. ca 6.1 Programa Um arquivo contendo um programa ´ criado usando um editor de texto qualquer e para e executar esse programa utiliza-se o comando exec. Neste cap´ ca ıtulo ser˜o abordadas algumas estruturas de programa¸˜o que tornar˜o poss´ desenvolver programas e fun¸˜es escritos ca a ıvel co em SCILAB.<modo>) onde a cadeia de caracteres <arquivo> determina o nome do arquivo (incluido o caminho) com o programa a ser executado e o escalar opcional <modo> especifica como ser´ a execu¸˜o. Seja o programa escrito no arquivo decsomat. Ser˜o a e a apresentados dois tipos de roteiros: programa e fun¸˜o. os quais a possibilitam sua utiliza¸˜o em um modo interativo. o SCILAB permite. estruturas condicionais e estruturas de repeti¸˜o. o o e uma diagonal e outra triangular superior. como qualquer e outra linguagem de programa¸˜o.1 Programa¸˜o ca Al´m de poder entrar com cada comando de uma vez.Cap´ ıtulo 6 Linguagem de programa¸˜o ca Nos cap´ ıtulos anteriores foram descritos os elementos fundamentais do SCILAB. ca 6. cuja sintaxe ´ e exec(<arquivo>. Por esta raz˜o este tipo de arquivo ´ chamado de roteiro (script).1. a ca de acordo com a Tabela 6.sci para gerar uma matriz com elementos aleat´rios entre −100 e 100 e decompˆ-la na soma de trˆs matrizes: uma triangular inferior.

’def’)-0. // matriz triangular inferior com diagonal nula U = triu(A) . // matriz triangular inferior com diagonal nula -->U = triu(A) . o prompt --> ´ exibido. nada ´ exibido. p´ra antes de cada prompt e continua ap´s um Enter.sci -->// programa decomposicao_matriz -->// Objetivo: decompor uma matriz aleatoria na soma de tres matrizes: -->// uma triangular inferior.5*ones(n.D.1) produz os resultados.n))). -->D = diag(diag(A)). D = diag(diag(A)). L.D. e ecoa cada linha de comando.n))).1) -->A = fix(200*(grand(n. uma diagonal e outra triangular superior n = input(’Ordem da matriz: ’). D.5*ones(n.D. // matriz triangular superior com diagonal nula A. U .n. -->exec(’decsomat. U Executando com <modo> = 1 para ecoar cada linha de comando. D.n. // matriz triangular superior com diagonal nula -->A. uma diagonal e outra triangular superior -->n = input(’Ordem da matriz: ’).sci // programa decomposicao_matriz // Objetivo: decompor uma matriz aleatoria na soma de tres matrizes: // uma triangular inferior. // obtem matriz diagonal -->L = tril(A) . Linguagem de programa¸˜o ca Tabela 6. // obtem matriz diagonal L = tril(A) . ca <modo> 0 -1 1 2 3 4 7 Descri¸˜o ca exibe resultados.1) A = fix(200*(grand(n.sci’. -->// editado no arquivo decsomat. // gera matriz n x n com elementos aleatorios com distribuicao uniforme // no intervalo [0. n˜o ecoa linha de comando e n˜o exibe a a o prompt --> (valor default).106 Cap´ ıtulo 6.D. e ecoa cada linha de comando e exibe o prompt -->. Ordem da matriz: 3 -->// gera matriz n x n com elementos aleatorios com distribuicao uniforme // no intervalo [0.1: Modos de execu¸˜o do comando exec. // editado no arquivo decsomat. a o modos 3 e 4 juntos. L.’def’)-0.

0. 0.6. <nome fun¸ao> ´ uma cadeia de caracteres que especifica o nome da c~ e e a fun¸˜o e <par^metros entrada> ´ um conjunto de vari´veis com os argumentos fornecidos ca a . 0. a -->a = 1 // comando qualquer a = 1. L e U foram criadas a c no espa¸o de trabalho. 0. Qualquer ca e comando digitado entre o prompt e o Enter ser´ ignorado. c O comando halt interrompe a execu¸˜o do SCILAB at´ que se tecle Enter. 93. 93. D. No exemplo acima. D = 62. 0.72. U = 0. L = 0.74. 0. . . 0.55. 0. .2 Subprograma function Um outro tipo de arquivo de roteiro ´ usado para o pr´prio usu´rio criar novas fun¸˜es para e o a co o SCILAB. . . 26. 82. 26.74. 0. -->halt // causa a interrupcao no SCILAB halt-->b = 2 // atribui o valor 2 a variavel b -->b // a atribuicao acima nao foi efetuada !--error 4 Undefined variable: b 6. 0. 0.1.55. 81. 0. as matrizes A. 0. 81. 67. 0. . 0. <par^metros sa´da> ´ ıcio ca a um conjunto de vari´veis contendo os argumentos gerados pela fun¸˜o (separados por v´ a ca ırgula e delimitados por [ e ]).72. 82. 67. 0.1. Sua sintaxe ´ e ı c~ a function [<par^metros sa´da>] = <nome fun¸ao> (<par^metros entrada>) a <comandos> endfunction ı e sendo function uma palavra-chave que determina o in´ da fun¸˜o. Programa¸˜o ca 107 A = 62. Um programa tem acesso `s vari´veis no espa¸o de trabalho e as vari´veis criadas por ele a a c a far˜o parte do espa¸o de trabalho.

a apresentado na Se¸˜o 6. delta = sqrt(b^2-4*a*c). a // editado no arquivo parabola.25 . fato que gera uma mensagem a c de aviso. ızes -->[r1.sci’.sci contendo uma fun¸˜o para calcular as duas ra´ ca ızes de uma par´bola.108 Cap´ ıtulo 6. raiz1 = (-b + delta ) / (2*a). Por exemplo.delta ) / (2*a). endfunction Os argumentos que devem ser fornecidos ` fun¸˜o (parˆmetros de entrada) s˜o a. -->exists(’parabola’) // verifica que a funcao parabola nao existe ans = 0.sci function [raiz1.raiz2] = parabola(a. elas n˜o tem acesso `s a .-1) // funcao carregada para o espaco de trabalho -->exists(’parabola’) // verifica que parabola agora existe ans = 1. seja o arquivo parabola. Ao contr´rio do programa no qual as vari´veis s˜o globais.-8.5i // executa a funcao parabola Caso o arquivo contendo uma function seja reeditado e salvo.c) // Objetivo: calcular as duas raizes de uma parabola // parabola(a. Os <comandos> a e especificam o conte´ do da fun¸˜o e a palavra-chave endfunction o seu final.0.1 Programa. b e c e a ca a a os valores gerados pela fun¸˜o (parˆmetros de sa´ ca a ıda) s˜o raiz1 e raiz2. O comando exec.25 + 0. -->exec(’parabola.1.5i r1 = 0. u ca Por exemplo.b.5) r2 = 0. Linguagem de programa¸˜o ca a ` fun¸˜o (separados por v´ ca ırgula e delimitados por ( e )). o comando exec deve ser novamente executado para atualiz´-la no espa¸o de trabalho. tamb´m ´ utilizado para que as function’s editadas ca e e em um dado arquivo passem a fazer parte da biblioteca do SCILAB para uso posterior. Para calcular as ra´ de p(x) = 16x2 − 8x + 5 faz-se. raiz2 = (-b .b. Os <par^metros entrada> s˜o a a opcionais e mesmo no caso de sua omiss˜o os parˆnteses devem ser mantidos. em uma function a lista dos a a a a a a a <par^metros entrada> e as vari´veis internas s˜o locais.r2] = parabola(16.c) calcula as duas raizes da parabola // P(X) = a*x^2 + b*x + c = 0 // retornando-as em raiz1 e raiz2. ou seja.

sci function [Raiz. DeltaX = -Fx / (Fb . x = b.6. // [nargsai. // sendo a funcao F(X) dada na cadeia de caracteres FUNCAO. cuja ıda e e ca sintaxe ´ e [<n´mero par^metros sa´da>. usando o metodo pegaso. Exibe = 0. Fx = Fb. // FUNCAO. os <par^metros sa´da> s˜o criados no espa¸o a c a ı a c de trabalho. if Exibe ~= 0 disp(’ Calculo de raiz de equacao pelo metodo pegaso’) disp(’iter a b x Fx delta_x’) end k = 0.B.Exibe) // Objetivo: Calcular raiz de equacao pelo metodo pegaso.Iter] = pegaso(funcao. O segundo argumento ´ opcional. x = x + DeltaX. .Toler. O: nao exibe e 1: exibe. end if nargent < 6. // // PEGASO(FUNCAO. No caso da function parabola acima. end if nargent < 5. A e B sao necessarios enquanto que TOLER. Fx = eval(funcao). // EXIBE especifica se os resultados intermediarios serao // mostrados. Isto ´ feito pela fun¸˜o argn.EXIBE) calcula a raiz de uma // equacao F(X)=0 contida no intervalo [A B] com tolerancia TOLER // e com no maximo ITERMAX iteracoes.ITERMAX. a ca ca o // editado no arquivo pegaso.sci calcula o zero pertence ao intervalo [a b] da fun¸˜o definida na cadeia de caracteres funcao. end if nargent < 4. a vari´vel raizes ´ criada no espa¸o a e c de trabalho do SCILAB. utilizando o robusto e eficiente m´todo ca e p´gaso [2]. ITERMAX e // EXIBE terao valores pre-definidos caso nao sejam fornecidos. IterMax = 100.b. Fa = eval(funcao).<n´mero par^metros entrada>] = argn() u a ı u a . u a e A function pegaso escrita no arquivo pegaso. Fb = eval(funcao). o qual e e ca a ser´ descrito na Se¸˜o 4.CondErro. Por sua vez. error(’Numero de argumentos insuficientes’).Fa) * (b . Toler = 1e-10.TOLER. end x = a. while 1 k = k + 1.nargent] = argn() // numero de argumentos de saida e de entrada if nargent < 3. Programa¸˜o ca 109 vari´veis do espa¸o de trabalho.IterMax. Ao evocar argn dentro da function s˜o fornecidos o <n´mero par^metros sa´da> e o a u a ı <n´mero par^metros entrada>.1.A. ´ E possivel chamar uma function com n´ meros diferentes de parˆmetros de entrada ou de u a sa´ do que aqueles definidos no arquivo que a cont´m. x = b. Nesta function ´ utilizado o comando eval para avalia¸˜o de express˜o.a).a.4 Execu¸˜o de express˜es.

caso n˜o sejam inclu´ a a ıdos na lista de argumentos de entrada ser˜o atribu´ a ıdos valores pr´-definidos. end b = x.09987e-01 6.60038 1. ca u co -->exec(’pegaso. Se forem dois argumentos ent˜o al´m da Raiz ser´ retornado ca a a e a a condi¸˜o de erro na vari´vel CondErro. Iter = k.54933e-01 5 1.0. end Raiz = x. else Fa = Fa * Fb / (Fb + Fx).10.99219 1.72828e-01 -1. a condi¸˜o de erro e o n´ mero de itera¸˜es.DeltaX). a e b devem ser fornecidos sen˜o uma mensagem de erro ser´ exibida a a e a execu¸˜o da function interrompida.12995e-01 3 2.00000 0.52552 1. . com no m´ximo 10 itera¸˜es.68045 -4.1) // executa pegaso Calculo de raiz de equacao pelo metodo pegaso iter a b x Fx delta_x 1 0.5e\n’.00000 0. ca a ca √ Para calcular a raiz de f (x) = cos(x2 − 1) x + 1 = 0 pertencente ao intervalo [0 2]. ca ca Se nenhum ou apenas um argumento de sa´ for especificado ent˜o ser´ retornado a raiz ıda a a da equa¸˜o na vari´vel Raiz.00000 2. os argumentos Toler (tolerˆncia da ca a raiz).5e%14.52080e+00 2 2.b. com tolerˆncia ǫ = 10−2 .68045 1.sci’.a.83307e-01 -1.e.41128e+00 5. IterMax (n´ mero m´ximo de itera¸˜es) e Exibe (exibe resultados intermedi´rios) u a co a s˜o opcionais.02353e-03 i = 6. end endfunction O comando error(<mensagem>) exibe a cadeia de caracteres <mensagem> e interrompe a execu¸˜o de um programa ou fun¸˜o. Se forem especificados mais de seis argumentos de sa´ haver´ a e ıda a exibi¸˜o de uma mensagem de erro e a interrup¸˜o da function. Mais de trˆs argumentos de sa´ u co e ıda causam a exibi¸˜o de uma mensagem de erro e a n˜o execu¸˜o da function pegaso. Fa = Fb.i] = pegaso(’cos(x^2-1)*sqrt(x+1)’. CondErro = abs(DeltaX) >= Toler | abs(Fx) >= Toler.60340 -1.1e-2.48614e-02 6 1.0) // carrega a funcao pegaso no espaco de trabalho -->[r.Fx.99219 1. Linguagem de programa¸˜o ca if Exibe ~= 0 mprintf(’%3i%11. end if Fx*Fb < 0 a = b. end if ((abs(DeltaX) < Toler & abs(Fx) < Toler) | k >= IterMax).5f%14. CondErro e o n´ mero de itera¸˜es Iter.60038 1.54647e-02 7.x.2.99219 1. end if nargsai > 2. break.110 Cap´ ıtulo 6. No entanto. listando os resultados intermedi´rios e a a co a retornado a raiz.5f%11. if nargsai > 1. Fb = Fx.00000 0.68045 1. ca ca Os argumentos funcao.55627e-04 3. Se forem trˆs argumentos de sa´ ent˜o ser˜o ca a e ıda a a retornados Raiz.5f%11.47920 8.52552 3.47920 0.68045 1.88254e-01 4 0.k.

Programa¸˜o ca 111 e F r = = 1. 3 4].0.sci para calcular a ca soma da diagonal da matriz resultante do produto das matrizes A e B definidas no espa¸o de c trabalho. as vari´veis de uma function s˜o locais. ou seja. Por estas raz˜es. a utiliza¸˜o de o o ca vari´veis globais deve ser evitada. 7 8]. a .sci’. Por exemplo.6033703 Conforme j´ mencionado. B = [5 6.e] = pegaso(’cos(x^2-1)*sqrt(x+1)’.6. separadas por branco. a tornem-se globais e portanto esta declara¸˜o deve aparecer no programa e nas function’s ca de interesse. um outro modo de trocar informa¸˜es entre o espa¸o e co c de trabalho e as functions’s ´ pelo uso de vari´veis globais. O uso de vari´veis globais dificulta o entedimento e a modifica¸˜o das function’s. m´ximo de 100 itera¸˜es. ca -->exec(’soma_diagonal.2) e = F r = 1. endfunction A sua execu¸˜o fornece.sci function somadiag = soma_diagonal // Objetivo: // calcular a soma da diagonal do produto das matrizes A*B do espaco de trabalho global A B somadiag = sum(diag(A*B)). n˜o listando os resultados a a co a intermedi´rios e al´m disto retornado somente a raiz e a condi¸˜o de erro. seja a fun¸˜o no arquivo soma diagonal. n˜o sendo reconhecidas pelo espa¸o de trabalho e outras function’s.6034004 Por sua vez. ou seja. s´ podem ser refea a a o renciadas internamente. // editado no arquivo soma_diagonal. tolerˆncia ǫ = 10−10 . al´m do uso de argumentos. A declara¸˜o e a ca a global <lista de vari´veis> a faz com que as vari´veis especificadas na <lista de vari´veis>. faz-se a e ca // executa pegaso com tres argumentos -->[r. al´m a ca e de tornar os m´dulos do programa menos independentes.0) // carrega soma_diagonal no espaco de trabalho -->A = [1 2. // define as matrizes A e B -->somdg = soma_diagonal() // executa a funcao soma_diagonal somdg = 69. a c No entanto. calculando a mesma raiz com os argumentos de entrada opcionais previamente atribu´ ıdos.1.

f = 3..<varesp n>] = return (<varloc 1>.2) // uso da funcao operacao divide = 1.5 multiplica = 6.sci.. -->exec(’consistencia. [<comandos>]) ı e ca onde <param sa´da> ´ uma lista contendo os argumentos gerados pela fun¸˜o (separados por v´ ırgula e delimitados por [ e ]).b) // Objetivo: exemplo de consistencia de dados if a <= 0 | b > 1 y = %i [e.f] = return(a. divide] = operacao(3.[’mul = a * b’.div] = operacao(a. A matriz de caracteres <comandos> especifica o corpo da fun¸˜o. endfunction O seu uso resulta em.112 Cap´ ıtulo 6. seja a fun¸˜o para multiplicar e dividir dois n´ meros. <nome fun¸ao> ´ uma cadeia de caracteres que especifica c~ e o nome da fun¸˜o e <param entrada> ´ uma lista com os argumentos fornecidos a fun¸˜o ca e ` ca (separados por v´ ırgula e delimitados por ( e )). .’div = a / b’])//define funcao -->[multiplica. Por exemplo. -->x = consiste(100.. ca // editado no arquivo consistencia.3) // uso com argumentos invalidos x = i -->e.sci’.f // verifica que as variaveis estao no espaco de trabalho e = 100. Uma fun¸˜o pode tamb´m ser definida na janela de comando pela fun¸˜o deff..b)’.. Linguagem de programa¸˜o ca O comando return colocado dentro de uma function causa um retorno normal para o comando seguinte `quele que chamou a function. J´ o comando a a [<varesp 1>.0) // carrega a function do arquivo -->x = consiste(100. ca ca u -->deff(’[mul.b) end y = log10(a) + sqrt(1-b).<varloc n>) faz com que as vari´veis locais <varloc i> sejam copiadas no espa¸o de trabalho com os a c correspondentes nomes <varesp i>.-3) // uso da function com argumentos validos x = 4.. ca e ca ı c~ deff(’[<param sa´da>] = <nome fun¸ao> (<param entrada>)’..sci function y = consiste(a.. Seja a fun¸˜o descrita no arquivo consistencia.

Se o resultado for F (falso) ent˜o <comandos> n˜o ser˜o executados. end e a execu¸˜o para x = 0.-1) Entre com x: 0.2 Estruturas condicionais Uma estrutura condicional permite a escolha do grupo de comandos a serem executados quando uma dada condi¸˜o for satisfeita ou n˜o. Estruturas condicionais 113 6.2. Esta condi¸˜o ´ representada por uma express˜o l´gica.sci’.001 . if x > 0 LogDec = log10(x). e somente se. 6.2.3. ca -->exec(’logaritmo_decimal. // programa logaritmo_decimal // Objetivo: calcular logaritmo decimal x = input(’Entre com x: ’). possibilitando desta forma alterar o fluxo ca a natural de comandos.6. o valor a ıdo de x for maior que 0.2 Estrutura if-else-end if <condi¸ao> c~ <comandos 1> else <comandos 2> end No caso de haver duas alternativas. Neste exemplo.001 0. ca e a o 6.sci. Se <condi¸ao> for F (falso) ent˜o ser´ a lista . Cona a a a sidere o programa logaritmo decimal. uma outra estrutura condicional deve ser usada Se o resultado da express˜o l´gica <condi¸ao> for T (verdadeiro) ent˜o somente a lista a o c~ a a c~ a a contendo <comandos 1> ser´ executada. disp([x LogDec]).2.001. o logaritmo decimal de x ser´ atribu´ a LogDec se.1 Estrutura if-end if <condi¸ao> c~ <comandos> end A estrutura condicional mais simples do SCILAB ´ e Se o resultado da express˜o l´gica <condi¸ao> for T (verdadeiro) ent˜o a lista <comandos> a o c~ a ser´ executada.

114 Cap´ ıtulo 6.3 Estrutura if-elseif-end if <condi¸ao 1> c~ <comandos 1> elseif <condi¸ao 2> c~ <comandos 2> elseif <condi¸ao 3> c~ <comandos 3> . a estrutura if-elseif-end ser´ abandonada. else fx = -2 * x. .2. else <comandos n> end Quando houver mais de duas alternativas. a ou seja. a a // programa funcao_modular // Objetivo: avaliar uma funcao modular x = input(’Entre com x: ’). 6. todavia. j´ a lista <comandos 2> ser´ executada se <condi¸ao 2> for T e assim para as outras condi¸˜es. se x for negativo ent˜o fx ser´ igual a -2*x. Quando a <condi¸ao i> co a a c~ for satisfeita e os <comandos i> executados. o controle do processamento ser´ transferido para o comando imediatamente ap´s a o o end. Linguagem de programa¸˜o ca <comando 2> a unica a ser executada. Executando com x = -3 produz. O programa funcao modular. Seja o programa modulo. -->exec(’funcao_modular.sci utiliza a fun¸˜o ´ ca modular f (x) = |2x|. if x >= 0 fx = 2 * x.-1) Entre com x: -3 . .3. Se a c~ co nenhuma das condi¸˜es for T ent˜o <comandos n> ser´ executada. a estrutura if-else-end do SCILAB torna-se a c~ a A lista <comandos 1> ser´ executada se <condi¸ao 1> for igual a T (verdadeiro). 6. u // programa modulo // Objetivo: calcular o valor absoluto de um numero real ou complexo . Se x for positivo ou nulo ent˜o ser´ atribu´ ` vari´vel fx o resultado a a ıdo a a de 2*x.sci’. end disp([x fx]).sci para calcular o valor absoluto de um n´ mero real ou complexo.

4 * %i 3. Cabe ressaltar que somente uma lista de comandos ser´ a a executada. case <express~o n> a else <comandos e> end Esta estrutura ´ similar a if-elseif-end e sua sixtaxe ´ e e then <comandos 1> then <comandos 2> then <comandos 3> then <comandos n> A lista <comandos 1> ser´ executada se <express~o> for igual a <express~o 1>. --->exec(’modulo.2. end disp([a b]). A lista a a a a a a <comandos 2> ser´ executada se <express~o> for igual a <express~o 2> e assim para as outras express˜es.4*%i.i 5. na estrutura if-elseif-end uma unica lista de comandos ´ executada.sci’. .4) .^2+imag(a). Para a = 3 . Se <express~o> n˜o for igual a nenhuma das express˜es anteriores ent˜o o a a o a <comandos e> ser´ executada.-1) Entre com a: 3 .2.sci para determinar a posi¸˜o de uma poltrona para quem entra em um ˆnibus. fila = fix(poltrona/4) + 1. o // programa posicao_poltrona // Objetivo: determinar a posicao de uma poltrona em onibus poltrona = input(’Entre com o numero da poltrona: ’).4 Estrutura select-case-end select <express~o> a case <express~o 1> a case <express~o 2> a case <express~o 3> a . . elseif a < 0 b = -a.^2). . if imag(a) ~= 0 b = sqrt(real(a).6. else b = a. select modulo(poltrona. ca Considere o programa posicao poltrona. Deste modo foi executado o primeiro comando para o qual a condi¸˜o imag(a) ~= 0 foi ca satisfeita. ´ e 6.4. Assim. Estruturas condicionais 115 a = input(’Entre com a: ’).

poltrona.-1) Entre com o numero da poltrona: 42 poltrona 42 na fila 11 ’a direita / corredor -->exec(’posicao_poltrona. Linguagem de programa¸˜o ca case 0 then if poltrona > 0 fila = fila .posicao) end case 1 then posicao = ’direita / janela’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.116 Cap´ ıtulo 6.-1) Entre com o numero da poltrona: 15 poltrona 15 na fila 4 ’a esquerda / janela -->exec(’posicao_poltrona.poltrona. O SCILAB possui e ca ca duas estruturas de repeti¸˜o.poltrona.-1) Entre com o numero da poltrona: -5 poltrona -5 nao existe 6.fila. as posi¸˜es das poltronas de n´ meros 15.3 Estruturas de repeti¸˜o ca As estruturas de repeti¸˜o fazem com que uma seq¨ˆncia de comandos seja executada reca ue petidamente at´ que uma dada condi¸˜o de interrup¸˜o seja satisfeita.posicao) case 3 then posicao = ’esquerda / janela’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.sci’.poltrona.posicao) case 2 then posicao = ’direita / corredor’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.posicao) end Por exemplo.fila.poltrona.sci’.fila. com as quais ´ poss´ ca e ıvel construir uma terceira estrutura com interrup¸˜o no interior.1.poltrona. as estruturas for-end e a while-end. posicao = ’esquerda / corredor’ mprintf(’poltrona%3i na fila%3i ’’a %s\n’.posicao) else posicao = ’nao existe’ mprintf(’poltrona%3i %s\n’.fila.posicao) else posicao = ’nao existe’ mprintf(’poltrona%3i %s\n’. 42 e −5 s˜o co u a -->exec(’posicao_poltrona.sci’. ca .

ncol] = size(A).-1) Entre com n: 5 25. 25.1 Estrutura for-end A estrutura for-end permite que um grupo de comandos seja repetido um n´ mero deteru minado de vezes.1). o n´ mero de repeti¸˜es da lista <comandos> ´ igual ao n´ mero u co e u de elementos no vetor <arranjo>. -->exec(’primeiros_impares.ncol). // programa soma_matriz // Objetivo: // calcular a soma dos elmentos das linhas.sci para calcular a soma dos elementos das linhas. for i = 1:nlin Soma_Diagonal = Soma_Diagonal + A(i. e // programa primeiros_impares // Objetivo: verificar propriedade dos numeros impares n = input(’Entre com n: ’). Soma = 0. .3. end disp([Soma n^2]) Quando executado para n = 5. considere o programa soma matriz. for i = 1:2:2*n-1 Soma = Soma + i.3. Para n = 5 a vari´vel-de-controle i assume os valores 1 3 5 7 9. colunas e diagonal de uma matriz. Estruturas de repeti¸˜o ca 117 6. Soma_Linhas = zeros(nlin.i).sci’. Soma_Colunas = zeros(1. colunas e diagonal de matriz A = input(’Entre com a matriz: ’). Assim.6. Soma_Diagonal = 0. [nlin. Sua sintaxe ´ e for <vari´vel>=<arranjo> a <comandos> end onde <vari´vel> ´ a vari´vel-de-controle que assume todos os valores contidos no vetor a e a linha <arranjo>. cuja soma ´ igual a 25. A vari´vel-de-controle n˜o pode ser redefinida dentro da a a estrutura for-end. O programa primeiros impares.sci mostra que a soma dos n primeiros n´ meros ´ u ımpares ´ igual ao quadrado de n. a e Para mostrar que as estruturas for-end podem estar encadeadas.

e Por exemplo. Soma_Colunas.3 na p´gina 45). ao contr´rio da for-end. end end A.j). Soma_Linhas. 9 7 6 12. 34. 10. Soma_Linhas = 34. Soma_Diagonal = 34. a . 6. 12. repete um grupo de comandos um n´ mero a u indeterminado de vezes. 4 14 15 1] A = 16. das colunas e da diagonal sejam iguais. O comando else a a ´ opcional. 34.2 Estrutura while-end A estrutura while-end. 13.0) Entre com a matriz: [16 2 3 13. 4. 34. tal que a soma dos elementos das linhas. 5. pelo uso da fun¸˜o sum que fornece a soma dos elementos de uma matriz ca (ver Tabela 3. Quando ela for F (falsa) ent˜o a lista <comandos 2> ser´ executada. 15. a 6. 34.j). 5 11 10 8. 1. 8.3. Soma_Diagonal Um quadrado m´gico de ordem n ´ uma matriz com elementos n˜o repetidos e com valores a e a entre 1 e n2 . 34. 11. 34. Sua sintaxe ´ e while <condi¸ao> c~ <comandos 1> [else <comandos 2>] end Enquanto a express˜o l´gica <condi¸ao> for T (verdadeiro) a lista <comandos 1> ser´ repea o c~ a tida. 14. 9.sci’. a -->exec(’soma_matriz. Linguagem de programa¸˜o ca for j = 1:ncol Soma_Linhas(i) = Soma_Linhas(i) + A(i. Soma_Colunas(j) = Soma_Colunas(j) + A(i. Cumpre observar que o SCILAB possui comandos para determinar estes somat´rios de um o modo bem simples. Para o quadrado m´gico de ordem 4.118 Cap´ ıtulo 6. seja o programa precisao.sci para determinar a precis˜o de um computador. 7. Soma_Colunas = 34. 3. 2.

1 ans = 0. -->1 + %eps . o ca co break interrompe a execu¸˜o apenas da estrutura mais interna. uma repeti¸˜o com ca ca . Epsilon. Epsilon = 1.sci’. Estruturas de repeti¸˜o ca 119 // programa precisao // Objetivo: determinar a precisao de um computador n = 0. O comando break interrompe a execu¸˜o de uma estrutura while-end ou for-end e transca fere a execu¸˜o para o comando imediatamente seguinte ao end.3.0) n = 53.3 Estrutura com interrup¸˜o no interior ca A estrutura while-end permite que um grupo de comandos seja repetido um n´ mero indeu terminado de vezes. Assim. ou seja. Epsilon = Epsilon / 2. Em repeti¸˜es aninhadas.1 ans = 2. %eps Quando executado fornece -->exec(’precisao. porque qualquer valor igual ou menor do que ele somado a 1 ser´ simplesmente a 1. Comparada com a vari´vel e a especial %eps = 2−52 do SCILAB. no entanto.220D-16 Epsilon ´ a chamada precis˜o da m´quina ǫ. a condi¸˜o de interrup¸˜o ´ testada no in´ da estrutura. while 1 + Epsilon > 1 n = n + 1.3. ou seja. a a 6.6.220D-16 -->1 + Epsilon . end n.110D-16 %eps = 2. Note que quando %eps for somado a 1 resulta um n´ mero maior que 1. Para computadores com aritm´tica IEEE ǫ = 2 . O mesmo n˜o ocorre u a com Epsilon. o computador j´ n˜o consegue mais representar 1 + ǫ. o maior n´ mero que somado a 1 ´ e a a u e −53 igual a 1. Epsilon = 1. ca ca e ıcio Em v´rias situa¸˜es em programa¸˜o se faz necess´rio interromper a execu¸˜o da repeti¸˜o a co ca a ca ca verificando a condi¸˜o no interior ou final da estrutura e n˜o somente no seu in´ ca a ıcio.

1415927 208341. Linguagem de programa¸˜o ca condi¸˜o de interrup¸˜o no interior pode ter a forma ca ca while %T <comandos 1> if <condi¸ao> c~ break end <comandos 2> end A estrutura while-end ´ executada indefinidamente a princ´ e ıpio.sci para fornecer a aproxima¸˜o racional de um n´ mero positivo ca u com uma dada tolerˆncia. disp([numero num den numero-num/den]) end Por exemplo. [num. . Contudo. pois a condi¸˜o do while ca ´ sempre T (verdadeiro). quando a <condi¸ao> do if for satisfeita o comando e c~ break ser´ executado causando a interrup¸˜o da repeti¸˜o while-end. para √ 2 e π. 0. a ca ca Seja o programa racional. if numero <= 0 break end tol = input(’Entre com tolerancia: ’). a // programa racional // Objetivo: fornecer a aproximacao racional de numero positivo com dada precisao while %T numero = input(’Entre com um numero > 0: ’). Entre com um numero > 0: 0 1.0) Entre com um numero > 0: sqrt(2) Entre com tolerancia: 1e-5 1.224D-10 Ele lista continuamente a representa¸˜o racional de um n´ mero fornecido enquanto este for ca u positivo. 66317.den] = rat(numero. -->exec(’racional.tol).0000124 Entre com um numero > 0: %pi Entre com tolerancia: 1e-10 3. 169.120 Cap´ ıtulo 6.sci’.4142136 239.

sci’.sci. se for colocado depois de raiz = sqrt(a). No modo de pausa aparece ca ca ´ o s´ ımbolo do prompt indicando o n´ ıvel da pausa.sci’. A vari´vel raiz n˜o existe no espa¸o de trabalho por se tratar de uma vari´vel local.6. Se o comando n˜o for usado ent˜o as vari´veis de n´ mais baixo est˜o protegidas e n˜o podem ser modificadas. Seja a fun¸˜o a ıvel a a ca no arquivo avalia. endfunction e sua execu¸˜o.<varloc n>) c faz com que as vari´veis locais <varloc i> sejam copiadas no espa¸o de trabalho que evocou a a a a pausa com os correspondentes nomes <varesp i>. Use funcprot(0) to avoid this message -->valor = avalia(100) // avalia a funcao entrando no modo de pausa -1->raiz // existencia da variavel local raiz no novo espaco de trabalho ans = 10. -1->. ca -->exec(’avalia.. -->exec(’avalia. a ca Para voltar ao espa¸o de trabalho que evocou a pausa usa-se o comando return... raiz = sqrt(a). -->exists(’raiz’) // verifica a inexistencia da variavel local raiz ans = 0.<varesp n>] = return (<varloc 1>. por exemplo. quando em uma fun¸˜o ele interrompe a sua execu¸˜o. ent˜o. // editado no arquivo avalia..-1) // carrega a funcao modificada Warning : redefining function: avalia. logdec = log10(a) expressao = divide + raiz + logdec. ..4.4 Depura¸˜o de programa ca O comando pause interrompe a execu¸˜o de um programa e transfere o controle para o ca teclado.-1) // carrega a funcao para o espaco de trabalho -->valor = avalia(100) // avalia a funcao valor = 22. todas as vari´veis definidas antes dele estar˜o dispon´ a a ıveis.. Por exemplo.. E disponibilizado. Depura¸˜o de programa ca 121 6.sci function expressao = avalia(a) divide = a/10.1.2 Subprograma function o comando ca [<varesp 1>. um novo espa¸o de trabalho no qual todas as vari´veis de n´ a c a ıvel mais baixo est˜o a acess´ ıveis.. Se for a a c a colocado o comando pause. Conforme c mencionado na Se¸˜o 6. mesmo as vari´veis de uma fun¸˜o.

escrever uma function para calcular x tal que Ux = d:  u11 u12 u13 · · · u1n  u22 u23 · · · u2n   u33 · · · u3n   .   . . ln1 ln2 l33 .sci n = input(’Ordem da matriz: ’). A = rand(n.1 Criar o arquivo almaxmin. 6. .   c1 c2 c3 .2 Escrever uma function para calcular a norma-2 de um vetor.4 Dada a matriz triangular inferior L = {lij } e o vetor c.   .5 Dada a matriz triangular superior U = {uij } e o vetor d. .122 Cap´ ıtulo 6. . dn xn x1 x2 x3 . unn        d1   d2    d = 3   . ln3 · · · lnn yn       =        . -1->return valor = 22. cn  l22 l32 .5 Exerc´ ıcios Se¸˜o 6. . // inexistencia da variavel logdec Neste caso a vari´vel local raiz est´ dispon´ no espa¸o de trabalho e logdec n˜o est´ a a ıvel c a a porque ela foi definida depois do pause. maior = max(A) menor = min(A) Executar o programa acima para n = 5. . .  y1   y2   y  3  .   6. 6.3 Escrever uma function para calcular a norma-∞ de um vetor.1 Programa¸˜o ca ca 6. 6.  . 6. escrever uma function para calcular y tal que Ly = c:        l11 l21 l31 .       . . . . . . 10 e 30. Linguagem de programa¸˜o ca -1->exists(’logdec’) ans = 0.n).  . .

16 6.2.1 ca para x = 2? 6.4.3.5.2.9 Qual o valor de b no exemplo sobre a estrutura if-elseif-end da Se¸˜o 6. Exerc´ ıcios Se¸˜o 6.3 para a = -3.2.20 . ca 6.17 6. ca 6.1 para n = 7.3 para a ca = -3+4*%i? 6.2 para x = 10. das colunas e da diagonal de uma matriz de Toeplitz de ordem 5. utilizando a a function pegaso mostrada na Se¸˜o 6.13 Explicar como ´ feita a determina¸˜o da precis˜o de um computador.7 Encontrar o valor de fx no exemplo sobre if-else-end da Se¸˜o 6. ca 6.6 Qual o valor de LogDec no exemplo sobre a estrutura if-end mostrada na Se¸˜o 6.2.19 6.2.1.2. 25 e 40 usando o exemplo da estrutura co u select-case-end da Se¸˜o 6.4 Depura¸˜o de programa ca ca 6. 6.15 Calcular a raiz de f (x) = sen(x)x + 4 = 0 que est´ no intervalo [1 5].3 Estruturas de repeti¸˜o ca ca 6. ca Se¸˜o 6.14 Calcular a norma-2 do vetor x = [1e200 2e200 3e200] usando a function escrita no Exerc´ 6.8 Achar o valor de b no exemplo de if-elseif-end da Se¸˜o 6.18 6.11 Determinar o valor de Soma no exemplo sobre a estrutura for-end mostrada na Se¸˜o 6.2.6.2 Estruturas condicionais ca 123 6.12 Calcular a soma das linhas.10 Encontrar as posi¸˜es das poltronas n´ meros 4. ca Se¸˜o 6. Qual a altera¸˜o a ser feita para que a fun¸˜o calcule corretamente? ıcio ca ca 6. e ca a 6.

Linguagem de programa¸˜o ca .124 Cap´ ıtulo 6.

2210340 0.6. ele ´ mostrado com dez caracteres. Quando o sinal for positivo ´ exibido um caracter branco em seu lugar.0975404 0.135477 0.1415927 O comando disp(<vari´vel>) ´ usado para exibir o conte´ do de <vari´vel> sem mostrar a e u a o seu nome ou para exibir uma cadeia de caracteres contida na <vari´vel>.5472206 Ao exibir um resultado num´rico o SCILAB segue diversas regras.18 2.718D-10 2.718D+10 125 .0000272 271828.1 Formato de exibi¸˜o ca Para saber o valor de uma vari´vel basta entrar com o seu nome.9688678 0. ıda grava¸˜o e leitura das vari´veis de uma sess˜o de trabalho e de arquivos. e -->%pi %pi = 3.8147237 0. disp(grand(2.3081671 0. a -->disp(’numeros aleatorios entre 0 e 1’).1269868 0.’def’)) numeros aleatorios entre 0 e 1 0. -->disp([%e*1e-5 %e*1e5 %e*1e-10 %e*1e10]) 0. ca a a 7.9057919 0. Se o resultado for um e n´ mero real (ponto flutuante). Se os e d´ ıgitos significativos do resultado estiverem fora desta faixa ent˜o o resultado ser´ exibido a a em nota¸˜o cient´ ca ıfica.Cap´ ıtulo 7 Comandos de entrada e sa´ ıda O SCILAB fornece algumas facilidades para especificar o formato de sa´ dos resultados. O resultado ´ exibido a e usando um formato pr´-definido.9133759 0. incluindo o ponto decimal u e e o sinal.8350086 0.6323592 0.

22045D-16 -->sqrt(%eps) // verificar que o ultimo formato e’ mantido ans = 1. g ou s. ` e a a e Uma vez definido o formato de exibi¸˜o ele ´ mantido at´ que seja modificado por um outro ca e e comando format. sendo n o tamanho do campo de exibi¸˜o.df nota¸˜o na forma [−]888.12). al´m disso os zeros insignificantes n˜o s˜o exibidos. incluindo sinal.8). f. Caso esse parˆmetro n˜o seja fornecido ´ assumido o valor 10.1: Formatos de exibi¸˜o. dependendo de qual formato for mais curto. -->format(’v’. Sua sintaxe ´ e mprintf(<formato>. Comandos de entrada e sa´ ıda A fun¸˜o format(<tipo>. %eps // eps em notacao cientifica com 12 caracteres ans = 2. %n.de ou %n. ponto decimal e no caso de formato ’e’ os quatro caracteres referentes a potˆncia de 10. de acordo com a Tabela 7.<vari´veis>) a onde a cadeia de caracteres <formato> cont´m caracteres alfanum´ricos e/ou especifica¸˜es e e co de convers˜o para exibir na tela a lista <vari´veis>. %pi // pi com formato variavel com 12 caracteres ans = 3.49012D-08 A fun¸˜o mprintf exibe dados formatados pertencentes ao espa¸o de trabalho na tela princa c cipal do SCILAB. %eps // eps em notacao cientifica com 8 caracteres ans = 2.14159 -->format(’v’. %pi // pi com formato variavel com 8 caracteres ans = 3.126 Cap´ ıtulo 7.1.888. sendo n o tamanho do campo (n´ mero ca u total de caracteres exibidos) e d o n´ mero de d´ u ıgitos decimais. ca ı e e ca onde <tipo> ´ um dos caracteres ’v’ ou ’e’ para indicar formato vari´vel ou em nota¸˜o e a ca cient´ ıfica.<d´gitos>) ´ usada para alterar o formato num´rico de exibi¸˜o.de nota¸˜o na forma [−]8.141592654 -->format(’e’.888 ± 88. ca Formato Especifica¸˜o ca %ni usado para valores inteiros. %n.df.2D-16 -->format(’e’. .12).8). sendo n o tamanho do campo (n´ mero ca u total de caracteres exibidos) e d o n´ mero de d´ u ıgitos decimais. ca %n. e a a %ns exibe caracteres em um campo de tamanho n.dg equivalente a %n. Estas especifica¸˜es de convers˜o s˜o a a co a a delimitadas pelo caracter % e uma das letras i. Tabela 7. e. respectivamente. O parˆmetro <d´gitos> indica o n´ mero m´ximo de caracteres a a ı u a serem exibidos.

ou seja.M) 1.7320508 -->mprintf(’%5.2 -5.2 . b = [1.500 1.2247449 2.3f%10.41421 2. Por sua vez. Por exemplo.4]. o comando whos fornece informa¸˜es mais detalhadas sobre essas co vari´veis. C e d.000 1. 1.%eps/2) a precisao deste computador = 1.%pi) o valor de pi e’ aproximadamente 3.2. Estes dois comandos listam as vari´veis criadas pelo usu´rio e as definidas pelo a a a a pr´prio SCILAB. quando o usu´rio criou apenas as o ıcio a vari´veis a.4 .3].73205 7.4 C = 2.2 Espa¸o de trabalho c Durante uma sess˜o as vari´veis utilizadas residem no espa¸o de trabalho do SCILAB e a a c podem ser armazenadas em um arquivo quando desejado.4.5 1.5:3. ca -->x = 1:0.1 3. C = [2.2 3.sqrt(x)]’. Conforme visto.10) -->disp(M) 1. b. -->M = [x. 6. 1.1 -9.000 1.500 1. que est˜o presentes no espa¸o a a a c de trabalho.11022e-16 onde \n ´ usado para come¸ar uma nova linha.1415926536 Assim. 1.000 1. o comando who lista o nome das vari´veis que est˜o sendo usadas. tem-se. -->mprintf(’a precisao deste computador =%12.5 1.1 3.5e\n’. a -->a = 2.2 3. a -->mprintf(’o valor de pi e’’ aproximadamente%13.5 b = 1.22474 2.58114 3. a exibi¸˜o pode ser feita pelos comandos disp e mprintf.00000 1. Espa¸o de trabalho c 127 Deste modo.5. Quando for necess´rio ter o caracter (’) e c a exibido basta us´-lo duas vezes.4142136 2. -->format(’v’.7.5f\n’. 1. no in´ de uma sess˜o.5811388 3.5. d = ’caracteres’ a = 2.10f\n’.

b. C e a a a d criadas acima.dat’.dat’ -->save(’duas.9.<vari´veis>) a onde <nome do arquivo> ´ uma cadeia de caracteres que especifica o nome do arquivo e bin´rio onde vari´veis do espa¸o de trabalho ser˜o gravadas e <vari´veis> ´ uma lista a a c a a e de nomes que define quais as vari´veis do espa¸o de trabalho criadas pelo usu´rio ser˜o a c a a gravadas no arquivo <nome do arquivo>. Se os nomes <vari´veis> n˜o forem especificados. Todas ca a a ca as vari´veis estar˜o. As vari´veis devem estar separadas por v´ a ırgula.dat’ . a c Aten¸˜o: n˜o ser´ solicitada a confirma¸˜o.dat’) // salva as quatro variaveis no arquivo ’quatro. irremediavelmente.1 . a remove todas as vari´veis do espa¸o de trabalho. %t boolean 1 by 1 %f boolean 1 by 1 %eps constant 1 by 1 %io constant 1 by 2 %i constant 1 by 1 %e constant 1 by 1 %pi constant 1 by 1 Bytes 9000 64 48 40 24 96 24 24 24 32 32 24 24 As vari´veis no espa¸o de trabalho criadas pelo usu´rio podem ser removidas. -->save(’quatro.2. a a 7. Por exemplo. considerando as vari´veis a. removidas. . incondicioa c a nalmente. ent˜o todas as vari´veis do espa¸co de a a a a c trabalho criadas pelo usu´rio ser˜o salvas. algumas variaveis foram removidas da lista .1 Gravar dados O comando save ´ usado para gravar as vari´veis do espa¸o de trabalho em um arquivo. e a c Sua sintaxe ´ e save(<nome do arquivo>.128 Cap´ ıtulo 7. b. Comandos de entrada e sa´ ıda 6.d) // salva as variaveis b e d no arquivo ’duas.3 d = caracteres -->whos Name Type Size whos function d string 1 by 1 C constant 2 by 2 b constant 1 by 3 a constant 1 by 1 M constant 5 by 2 . usando o comando clear --> clear tempo raiz --> clear remove as vari´veis tempo e raiz.

’b’.2. a a Se o arquivo contiver uma vari´vel com o mesmo nome de uma j´ existente no espa¸o de a a c trabalho ent˜o o comando load faz com que a vari´vel do espa¸o de trabalho seja substitu´ a a c ıda pela vari´vel existente no arquivo.dat’ -->d // verifica o valor de d ans = caracteres 7. // cadeia de caracteres com parametro ’s’ -->texto = input(’fornecer o texto: ’. a -->clear // remove todas as variaveis do espaco de trabalho -->d = ’novos’ // atribui novo valor a variavel d d = novos -->load(’duas. Espa¸o de trabalho c 129 7.<vari´veis>) a onde <nome do arquivo> e <vari´veis> s˜o os mesmos definidos para o comando save.2 Recuperar dados O comando load ´ usado para recuperar os dados gravados em um arquivo pelo comando e save e coloc´-los de volta no espa¸o de trabalho.3 Entrada de dados <vari´vel> = input(<mensagem>.’string’) a A leitura de dados pelo teclado ´ feita pelo comando input.2.’s’) fornecer o texto: programa SCILAB texto = programa SCILAB // caracteres sem parametro ’s’.’d’) // recupera as variaveis b e d do arquivo ’duas.7. mas com ’ ’ -->texto = input(’fornecer o texto: ’) fornecer o texto: ’programa SCILAB’ texto = programa SCILAB . Sua sintaxe ´ a c e load(<nome do arquivo>. cuja sintaxe ´ e e O comando acima exibe a cadeia de caracteres <mensagem> e espera at´ que o usu´rio forne¸a e a c o valor de <vari´vel> pelo teclado. e a e -->Indice = input(’entre com o indice: ’) entre com o indice: 13 Indice = 13. O segundo argumento ’string’ ou simplesmente ’s’ a ´ opcional e informa que <vari´vel> ´ uma cadeia de caracteres.2.dat’.

56 ! ! ! !7.23 -->lar = eval(dimensao(2)) lar = 4. x mdialog e x message. a a -->nomes = [’Comprimento:’.’Altura:’] // define os nomes das variaveis nomes = !Comprimento: ! ! ! !Largura: ! ! ! !Altura: ! -->valor_ini = [’’.4 Execu¸˜o de express˜es).89 // valor numerico do comprimento // valor numerico da largura // valor numerico da altura . Por exemplo. correspondentes a <r´tulos i>.89 ! -->com = eval(dimensao(1)) com = 1.’’. o Se for acionado o bot˜o Ok ent˜o <resultado> receber´ os valores sugeridos ou os outros a a a valores digitados. tais como. Comandos de entrada e sa´ ıda Janela de mensagem A intera¸˜o SCILAB / usu´rio pode tamb´m ser feita por meio de janelas de mensagens ca a e utilizando comandos.<r´tulos i>.1. u ca ca ca o dimensao = !1.<valores i>) ı o exibe uma janela contendo a cadeia de caracteres <t´tulo> com uma mensagem. Em seguida converte os caracteres para e n´ meros. O comando <resultado> = x mdialog(<t´tulo>. O vetor de caracteres dimensao ´ apresentado.’’] // define os valores iniciais (nenhum no caso) valor_ini = ! ! ! ! ! ! ! ! ! ! -->dimensao = x_mdialog(’Entre com as dimensoes’.2.130 7. Digita-se os valores desejados e pressiona-se Ok.56 -->alt = eval(dimensao(3)) alt = 7.23 ! ! ! !4. v´rios ı a vetores de caracteres <r´tulos i> com o nome do i-´simo valor requerido e os vetores de o e caracteres <valores i> com os valores iniciais sugeridos. valor_ini)// abre janela apresenta a janela mostrada na Figura 7.4 Cap´ ıtulo 7. utilizando a fun¸˜o eval (ver Se¸˜o 4.’Largura:’. caso seja acionado o bot˜o Cancel ent˜o <resultado> = []. nomes.

’.2: Janela do comando x message. Di´rio a 131 Figura 7. ’Usar Cholesky?’]. Por exemplo.<bot~es i>) exibe uma janela contendo a cadeia de caracteres <t´tulo> com uma mensagem e v´rios ı a vetores de caracteres <bot~es i> com as op¸˜es.7. o a o comando -->resp = x_message([’A matriz e’’ simetrica. a resp = 1. Se for acionado o i-´simo bot˜o ent˜o o co e a a <resultado> = i.3 Di´rio a Todos os comandos solicitados pelo usu´rio e as respostas fornecidas pelo SCILAB (com exa cess˜o de gr´ficos) podem ser gravados em um arquivo ASCII para que possam ser impressos a a ou mesmo inclu´ ıdos em algum relat´rio. como foi feito neste texto! o .3.2. 7.[’Sim’ ’Nao’]) apresenta a janela mostrada na Figura 7. Por sua vez.1: Janela do comando x mdialog. ı o <resultado> = x message(<t´tulo>. Se <bot~es i> n˜o for especificado assume-se o valor Ok. Se for escolhida a op¸˜o Sim ent˜o a vari´vel ca a a resp receber´ o valor 1. Figura 7.

u e -->unix(’more diario’). e co 7. impressora etc) aumenta a utiliza¸˜o do SCILAB visto tornar poss´ ca ıvel. por exemplo.1 Abertura de arquivo a [<idenarq>. O escalar <erro> indica a ocorrˆncia de ıda a e algum erro. b = 1. Em caso de algum erro o valor de <erro> u a ser´ negativo.490D-08 -->diary(0) // fecha o arquivo diario O conte´ do do arquivo diario ´. Por exemplo.490D-08 -->diary(0) // fecha o arquivo diario 7. a partir do qual a ca intera¸˜o SCILAB / usu´rio ser´ registrada no arquivo. Comandos de entrada e sa´ ıda Para esta grava¸˜o basta usar o comando diary(<nome do arquivo>). ele retornar´ o identificador de arquivo <idenarq> contendo um a n´ mero inteiro positivo e o valor de <erro> ser´ 0. A finaliza¸˜o do registro ´ feita por diary(0). b = 1. b = sqrt(%eps) a = 1. Os caracteres permitidos para <permiss~o> est˜o listados na Tabela 7. co a .4. O a a caractere b indica que o arquivo ´ bin´rio. e a Se <permiss~o> for omitida ent˜o ser´ assumido o valor ’r’.<permiss~o>) A fun¸˜o mopen abre um arquivo. Por exemplo.2.132 Cap´ ıtulo 7. sendo sua sintaxe ca Deste modo. a fun¸˜o mopen associa o nome externo do arquivo dado pela cadeia de caracca teres <nome do arquivo> ` unidade <idenarq> que ser´ utilizada nos comandos de entrada a a e sa´ no modo especificado pela <permiss~o>.4 Leitura e grava¸˜o de dados ca A transferˆncia de dados entre o espa¸o de trabalho e algum dispositivo de entrada e sa´ e c ıda (arquivo em disco. cujo nome ´ dado pela cadeia de ca a a e caracteres <nome do arquivo>. O <idenarq> ´ usado com outras rotinas de entrada e sa´ para identificar a e ıda o arquivo no qual as opera¸˜es ser˜o realizadas. at´ a troca de informa¸˜es com um outro programa. // executa o comando ’more’ do Linux -->a = 1.<erro>] = mopen(<nome do arquivo>. ca e -->diary(’diario’) // cria o arquivo diario -->a = 1. b = sqrt(%eps) a = 1. Caso o comando mopen tenha a a a sucesso ao abrir o arquivo.

3 Grava¸˜o em arquivo ca mfprintf(<idenarq>. g ou s.dat. f.2: Atributos de arquivo. // fecha o arquivo dados. Abre o arquivo para atualiza¸˜o (leitura e escrita).dat para escrita 7.<formato>. <permiss~o> a ’r’ ou ’rb’ ’r+’ ou ’r+b’ ’w’ ou ’wb’ ’w+’ ou ’w+b’ ’a’ ou ’ab’ ’a+’ ou ’a+b’ Especifica¸˜o ca Abre o arquivo para leitura.1. e. Leitura e grava¸˜o de dados ca 133 Tabela 7. remove o conte´ do do arquivo existente.4.7. Quando um arquivo ´ fechado. No exemplo abaixo. anexando ao final do arquivo.4. √ x e e−x para 1 ≤ x ≤ 2 ´ gerada e gravada e .<vari´veis>) a A fun¸˜o mfprintf grava dados formatados em um arquivo e sua sintaxe ´ ca e onde a cadeia de caracteres <formato> cont´m caracteres alfanum´ricos e/ou especifica¸˜es e e co de convers˜o para gravar no arquivo com identificador associado <idenarq> a lista contendo a <vari´veis>. Estas especifica¸˜es de convers˜o s˜o delimitadas pelo caracter % e uma das a co a a letras i. Abre o arquivo para escrita e caso necess´rio cria o arquivo. u Abre o arquivo para atualiza¸˜o (leitura e escrita) e se necess´rio ca a cria o arquivo. de acordo com a Tabela 7.4. e -->mclose(1) ans = 0. cujo ca ca identificador associado a este arquivo seja <idenarq>.erro] = mopen(’dados. anexando ao final do arquivo. a e associa¸˜o entre o identificador <idenarq> e o arquivo f´ ca ısico <nome do arquivo> ´ desfeita. u Cria e abre um arquivo novo ou abre um arquivo j´ existente para a escrita. Por´m. no arquivo sqrtexp. // abre o arquivo dados. a e remove o conte´ do do arquivo existente.’w’) erro = 0. mas n˜o cria o ca a arquivo. uma tabela contendo x. ca -->[fid.dat’.dat 7.2 Fechamento de arquivo A fun¸˜o mclose(<idenarq>) fecha o arquivo previamente aberto pela fun¸˜o mopen. Cria e abre um arquivo novo ou abre um arquivo j´ existente para a atualiza¸˜o (leitura e escrita). Todavia. fid = 1.

134 Cap´ ıtulo 7.183216 0.’%5.1652988882 2.0954451150 0.1652989 2.3416408 0.2018965 1. A vari´vel <tamanho> retorna o co a a a n´ mero de elementos que foram lidos do arquivo com sucesso.<formato>) a A fun¸˜o mfscanf efetua a leitura de dados formatados em um arquivo.4142135624 0.60 1.fid. u e -->unix(’more sqrtexp.80 1.20 1. u -->fid = mopen(’sqrtexp. As a a especifica¸˜es de convers˜o s˜o mostradas na Tabela 7.1832159566 0. fid = 1.’w’) // abre arquivo sqrtexp.2f%15.dat’.3416407865 0.2465969639 1. -->mfprintf(fid.00 1.00 1. 0.erro] = mopen(’sqrtexp.<vari´veis>] = mfscanf(<num>.10f%15.2018965180 1.b.4 Leitura em arquivo [<tamanho>.c] = mfscanf(1. // define o vetor x -->tab = [x.4 1.a.3678794412 1.8 1.0954451 0.10f\n’. sqrt(x).40 1.dat para escrita erro = 0.4142136 0.3011942 1.’%5f%15f%15f’) // leitura de 1 linha em 3 variaveis c = .dat ´. exp(-x)]’ // gera a tabela tab tab = 1.1.2465970 1.2649110641 0.1353353 -->[fid.tab) // escreve tabela no arquivo -->mclose(fid) // fecha o arquivo ans = 0. 1.dat’).6 1. O conte´ do do arquivo sqrtexp.3678794 1. // executa o comando ’more’ do Linux 1. sendo sua sintaxe ca onde <idenarq> ´ o identificador associado ao arquivo no qual est´ sendo feita a leitura e a dos dados escritos no formato especificado na cadeia de caracteres <formato> e o parˆmetro a opcional <num> especifica o n´ mero de vezes que o formato ´ usado. Os dados s˜o conu e a vertidos segundo a cadeia de caracteres <formato> e atribu´ ıdos ` lista <vari´veis>.4.dat’. Comandos de entrada e sa´ ıda -->x = 1:0.1353352832 7.<idenarq>.3011942119 1. -->[n.2649111 0. 1.2:2.2 1.’r’) // abre arquivo para leitura fid = 1.0000000000 0.

Leitura e grava¸˜o de dados ca 135 0.183216 0. ou da = ’end’). ´ a a a a a Continuando o exemplo acima. a c~ a e o acesso a um especificada a ’set’).fid) // posiciona leitura para o inicio do arquivo -->matriz = mfscanf(6. -->vetor = mfscanf(1. A fun¸˜o meof(<idenarq>) faz esta verifica¸˜o no arquivo de identificador <idenarq>. 1.fid.0954452 0.3011942 1.2018965 A fun¸˜o mseek(<n´mero>.1.2018965 1.’%5f%15f%15f’) // leitura das 6 linhas em 1 matriz matriz = 1. -->meof(fid) // verifica se fim de arquivo ans = .’%5f%15f%15f’) // leitura de 1 linha em 1 variavel m = [] n = .8 1.2 1.0954452 0. -->[n.3011942 -->matriz = mfscanf(2. cujo identificador seja <idenarq>.<posi¸~o>) ´ usada para posicionar ca u ca e registro do arquivo. 0.fid.6 1.183216 0.’%5f%15f%15f’) // leitura de 1 linha em 1 vetor vetor = 1.7.4142135 0.2 1.6 1. n = 3.1652989 2.2649111 0.3416408 0.2465970 1.3678795 1.fid.2649111 0.4.fid.4 1.’%5f%15f%15f’) // leitura de 2 linhas em 1 matriz matriz = 1. caso contr´rio 0 ser´ retornado.<idenarq>. a = 1.3678795 b = 1. -->meof(fid) // verifica se fim de arquivo ans = 0.2465970 1. A nova posi¸˜o ´ ca e partir da distˆncia dada pelo <n´mero> de bytes do in´ (se <posi¸ao> = a u ıcio c~ posi¸˜o atual (se <posi¸ao> = ’cur’) ou do fim de arquivo (se <posi¸ao> ca c~ c~ o parˆmetro <posi¸ao> n˜o for especificado ´ assumido o valor ’set’. ca ca Se o ultimo registro j´ foi lido ent˜o ser´ retornado o valor 1. Se -->mseek(0.m] = mfscanf(1.4 1.1353353 Durante o processo de leitura ´ importante verificar se o ultimo registro do arquivo j´ foi e ´ a lido. 1.

6 who.3 mprintf(’%10. 7.3.5f %12. disp(a).4 mprintf(’%5.8 load (’dados’).1f\n’.1–7. ca Se¸˜o 7.7 save (’dados’). -->mclose(fid) ans = 0. clear.5. Comandos de entrada e sa´ ıda 1. // fecha o arquivo 7. 7. a.3e\n’.1 Formato de exibi¸˜o ca ca Verificar as diferen¸as entre os formatos de exibi¸˜o para as vari´veis a = sqrt(2). x. 7.5 Explicar a diferen¸a de d´ c ıgitos entre a vari´vel tab e o conte´ do do arquivo sqrtexp. x.y).1 a. e = c ca a exp(10). disp(M). x = 1:10. 7. who.136 Cap´ ıtulo 7.3 Di´rio ca a Entre com os comandos abaixo. who. y = x’ e M = rand(3. who. .y). 7.’e’).3). who.e).4.a. Se¸˜o 7.x. clear.1f\n’.x) e mprintf(’%5.10 load (’esptrab’). 7. y.2 format(15. 7. 7. M.2 Espa¸o de trabalho ca c Observar os resultados dos comandos para controle do espa¸o de trabalho utilizando as c vari´veis dos Exerc´ a ıcios 7.9 save (’esptrab’. 7. whos. 7. e.5 Exerc´ ıcios Se¸˜o 7.dat a u na mostrado Se¸˜o 7.

5.12 a = 4.dat e observar o resultado. ıcio u 7. Exerc´ ıcios 7. 0 ≤ x ≤ π/2 e grav´-la no arquivo a seno.16 e verificar o seu conte´ do.dat.19 Abrir o arquivo seno. 7. 7.11 diary(’meudiario’).17 Fechar o arquivo seno.dat e verificar ´ o seu conte´ do. 7. ´ .14 diary(0).18 Acrescentar o valor π + 1. sen(π + 1) na ultima linha do arquivo seno. sen(x). 7.dat gravado no Exerc´ 7.dat para leitura e ler a primeira linha.16 Gerar uma tabela com 10 linhas de x.7.13 b = log10(a).20 Gravar os valores -1 e -2 na ultima linha de seno. 7.4 Leitura e grava¸˜o de dados ca ca 137 7. 7. u 7.15 Verificar o conte´ do do arquivo meudiario. u Se¸˜o 7.

138 Cap´ ıtulo 7. Comandos de entrada e sa´ ıda .

139 .1 Medidas de tempo O SCILAB provˆ duas maneiras de medir o tempo gasto para executar um conjunto de e comandos: o tempo de execu¸˜o e o tempo de CPU. considere a execu¸˜o do programa no arquivo medidas.0. A atribui¸˜o do tempo gasto a <vari´vel> ´ opcional.300.Cap´ ıtulo 8 Computa¸˜o cient´ ca ıfica 8. tic-toc pode n˜o ser uma a a medida muito confi´vel. Se o ´ ca a e computador estiver executando v´rias tarefas simultaneamente. ca // define duas matrizes aleatorias A = grand(2500. ca Usando o tic-toc ´ poss´ saber o tempo gasto para a execu¸˜o de um grupo de comandos. // inicia contagem do tempo de CPU C = A * B . Uma outra medida ´ obtida por timer que fornece o tempo de a e CPU (unidade central de processamento) que ´ o tempo gasto para execu¸˜o de opera¸˜es e ca co aritm´ticas e l´gicas.100).0.’unf’. em segundos.’unf’.sci. Pode ser usado na forma e o <vari´vel 1> = timer() a <comandos> a <vari´vel 2> = timer() .5. B = grand(300.<vari´vel 1> a Por exemplo.10). a passado desde o ultimo tic. e ıvel ca A sua sintaxe ´ e tic() <comandos> <vari´vel> = toc() a O tic inicia a contagem do tempo e o toc fornece para <vari´vel> o tempo. tic() // inicia contagem do tempo de execucao t0 = timer().1000.

Al´m disso.2) // norma Euclidiana ans = 7. positivo ou negativo). n´ mero de condi¸˜o. esses tempos e medidos depender˜o do computador utilizado. Computa¸˜o cient´ ca ıfica maximo = max(abs(diag(C))). -->norm(x). No caso de um vetor. <tipo> pode ser qualquer a n´ mero (inteiro ou real.140 Cap´ ıtulo 8.4161985 ans = 7.t0 // tempo de CPU tempo_exec = toc() // tempo de execucao Os resultados produzidos foram.sci’. posto e tra¸o.4161985 .1.1 Parˆmetros da matriz a O SCILAB disponibiliza diversas fun¸˜es para se obter informa¸˜es sobre matrizes. -->x = [1 2 3 4 5]. 8. u Exemplos de normas vetoriais.<tipo>) fornece a norma <tipo> de um vetor ou matriz contido ca a em <vari´vel>. -->exec(’medidas.1) // norma de soma de magnitudes ans = 15. de acordo com a Tabela 8. a 8. norm(x. determinante.0) tempo_cpu = 7. tais co co como.2. tempo_cpu = timer() .815 A diferen¸a de tempo produzida por tic-toc e timer pode ser bem significativa se o comc putador estiver executando outros programas ao mesmo tempo.63 tempo_exec = 7.2 ´ Algebra linear Nesta se¸˜o ser˜o mostrados alguns comandos do SCILAB relativos aos t´picos usualmente ca a o abordados em textos de C´lculo Num´rico. u ca c Normas A fun¸˜o norm(<vari´vel>. normas. // define vetor x -->norm(x. Para um conhecimento mais amplo dos comandos a e do SCILAB com respeito a vetores e matrizes usar os comandos apropos vector e apropos matrix.

// define matriz A -->norm(A. Algebra linear 141 Tabela 8.2) ou norm(v) norm(v. m2p . Sejam v = [ v1 v2 .’fro’) norm(M.1) norm(M.-%pi) ans = 0.’fro’) // norma de Frobenius ans = .2) ou norm(M) M F = i=1 j=1 norma de Frobenius norma espectral max σi (valores singulares) -->norm(x.’inf’) norm(M. . .’inf’) M M v v 1 2 = i=1 norma Euclidiana norma de m´xima magnitude a norma de soma m´xima de coluna a norma de soma m´xima de linha a ∞ = max |vi | 1≤i≤m n 1≤j≤p i=1 p = max |mij | |mij | |mij |2 ∞ = max n 1≤i≤n j=1 p norm(M. -->A = [1 2 3.9527515 // norma de maxima magnitude // norma -pi e normas matriciais.’inf’) ans = 5. . vm ] e M = [ m11 m12 .2. -->norm(A.’inf’) // norma de soma maxima de linha ans = 24. .p) v Descri¸˜o ca m p Nome |vi |p |vi |2 norma-p = p i=1 m norm(v. . m1p . -->norm(x. 7 8 9]. .1) // norma de soma maxima de coluna ans = 18. . 4 5 6. -->norm(A. . . . mn1 mn2 . mnp ] <tipo> norm(v. .´ 8.1: Normas vetoriais e matriciais. . m21 m22 .

e a σmax . -->[mantissa. Na ca forma [<mantissa>. sendo ela quadrada. ou seja. Computa¸˜o cient´ ca ıfica 16.848103 ans = 16.6613381 mantissa = . -1 8 6.142 Cap´ ıtulo 8.7744361 Determinante A fun¸˜o det(<matriz>) calcula o determinante de <matriz>. -->det(B) // determinante de B ans = 399. Se <matriz> for bem-condicionada ent˜o rcond a ´ pr´ximo de 1 e se ela for malcondicionada rcond ser´ pr´ximo de 0. Para a matriz B e o a o acima.2). Para A e B definidas previamente.16.2094488 -->1/r ans = 4. -->B = [5 3 0. cond(M) = κ2 (M) = M 2 M −1 2 = σmin Para a matrix.expoente] = det(A) expoente = 6.848103 // norma espectral N´ mero de condi¸˜o u ca A fun¸˜o cond(<matriz>) calcula o n´ mero de condi¸˜o de <matriz> quadrada definido ca u ca em termos da norma-2. 4 2 9]. ´ a raz˜o entre o maior e o menor valor singular.661D-16 // determinante de A em notacao cientifica .6641005 A fun¸˜o rcond(<matriz>) fornece uma estimativa do rec´ ca ıproco do n´ mero de condi¸˜o de u ca <matriz> definido em termos da norma-1. -->cond(B) // numero de condicao ans = 2. -->det(A) ans = 6. -->r = rcond(B) r = 0. norm(A) ans = 16.<expoente>] = det(<matriz>) o valor do determinante ´ apresentado e em nota¸˜o cient´ ca ıfica: <mantissa>×10<expoente> .881943 -->norm(A.

1. 4. . Se <toler^ncia> n˜o for a a a dada ent˜o ´ assumido o valor <toler^ncia> = max(m. n). Para a matriz A definida anteriormente.2. 1. isto ´. a e a Para as matrizes A e B.3. -->trace(A) ans = 15. a co Cholesky. tal que <matrizP> * <matriz> = <fatorL> * <fatorU>. Algebra linear 143 Posto O posto de uma matriz A (m × n) ´ o n´ mero m´ximo de vetores linhas ou de vetores e u a colunas de A que s˜o linearmente independentes. n) × n) e uma matriz de permuta¸˜es <matrizP> a co (dimens˜o n × n). QR e SVD.2.<fatorU>. a -->M = [2 -3 5. a soma dos elementos ca c e da sua diagonal principal. usando ca ca a o m´todo de elimina¸˜o de Gauss com pivota¸˜o parcial. Decomposi¸˜o LU ca A fun¸˜o lu(<matriz>) faz a decomposi¸˜o LU de <matriz>. // define a matriz M . uma matriz triangular a a superior <fatorU> (dimens˜o min(m.<toler^ncia>).2 Decomposi¸˜es co O SCILAB disponibiliza v´rios tipos de decomposi¸˜es de matrizes entre as quais.<matrizP>] = lu(<matriz>) gera uma matriz triangular inferior unit´ria <fatorL> (dimens˜o m × min(m. n)). Tra¸o c A fun¸˜o trace(<matriz>) determina o tra¸o de <matriz>. 1 8 6] M = 2.1e-20) // posto de A com tolerancia 1e-20 ans = 3. e ca ca O uso do comando [<fatorL>. -->rank(A. sendo posto(A) ≤ min(m. No SCILAB a o posto de <matriz> ´ obtido por rank(<matriz>. -->rank(A) // posto de A ans = 2. n) * norm(<matriz>) * %eps. 4 1 -1. -->rank(B) // posto de B ans = 3. LU. // traco de A 8. Por exemplo. de dimens˜o m × n.´ 8. 5. sendo igual ao n´ mero e a u de valores singulares de <matriz> maiores que <toler^ncia>. .

0. 0.144 Cap´ ıtulo 8. 0. 1.4516129 1. 7. 0. 0. 7.L * U // verificando que P * M = L * U R = 0. -->P * Tinf . 0. 0. 1. 0. Contudo. 0. 0.<matrizSup>] = lu(<matriz>) a ıda gera uma matriz triangular superior <matrizSup> = <fatorU> e uma matriz triangular inferior <matrizInf> tal que <matrizP> * <matrizInf> = <fatorL> de modo que <matriz> = <matrizInf> * <matrizSup>. 0.3225806 L = 1. 1. 8.L // verificando que P * Tinf = L . 0.Tinf * Tsup // verificando que M = Tinf * Tsup ans = 0. 1. 0.4516129 1.U // verificando que Tsup = U ans = 0. 0. 6.25 1.Tsup] = lu(M) // decomposicao LU de M com dois parametros Tsup = 4. -->[L. 1. 0. 0.3225806 Tinf = 0. .5 . 0. 0.25 0. -->R = P * M . 0.0. 1. -->Tsup . 8.25 1. 0.1. o uso de dois parˆmetros de sa´ [<matrizInf>. 0.1. Para as matrizes acima. 0. Computa¸˜o cient´ ca ıfica 1.P] = lu(M) // decomposicao LU de M P = 0.0. 0. 0. 0. -->M . 0. 0.5 . 0. 0. U = 4. 0. 0. 0. 0. 0.25 0.U. 0. 0. 0. -->[Tinf. 0. 0. 0. 0. . 8. 0.75 6.75 6.

0. 0. 0. 3 5. -->F = chol(B) // calcula o fator F !--error 29 Matrix is not positive definite. 0. -2 5 3. -->A . .2.2. 0. .2. 0. 10. 0. 3. . 0. 0. 2 -7 30] // define a matriz A A = 4. 3. -2 10 -7. 2. 0.´ 8. 8. 1. -->A = [4 -2 2. 0.m)) e uma matriz triangular superior <matrizR> com a mesma dimens˜o m×n de <matriz>. 5. . 4. O uso na forma ca ca a [<matrizQ>. . 8 6] // define a matriz A .7.2. 2. . -->U = chol(A) // calcula o fator U U = 2. 3. 0. de modo que <matriz>=<matrizQ>*<matrizR>. 4. 30. . 0. 0.7.1. . a Sejam. Algebra linear 145 ans = 0. 5. -->A = [2 -4. 4 3 8] // define a matriz B B = 1.2. a e Decomposi¸˜o QR ca A fun¸˜o qr faz a decomposi¸˜o QR de uma matriz de dimens˜o m × n. 1 -7. 0. 0. 0. Por exemplo. Decomposi¸˜o de Cholesky ca A fun¸˜o <fator> = chol(<matriz>) fatora <matriz> sim´trica definida positiva pelo ca e m´todo de Cholesky produzindo uma matriz <fator> triangular superior tal que <fator>’ e * <fator> = <matriz>. 0. 0. -->B = [1 -2 4. Houve um erro porque a matriz B n˜o ´ definida positiva.<matrizR>]=qr(<matriz>) produz uma matriz ortonormal <matrizQ> de ordem m (<matrizQ>’*<matrizQ>=eye(m.U’ * U // verificando que A = U’*U ans = 0.2.

146
A

Cap´ ıtulo 8. Computa¸˜o cient´ ca ıfica

= 2. - 4. 3. 5. 1. - 7. 8. 6. -->[Q,R] = qr(A) // calcula fatores Q e R R = - 8.8317609 - 5.4349298 0. - 9.8214835 0. 0. 0. 0. Q = - 0.2264554 0.5325844 - 0.5445505 - 0.6070721 - 0.3396831 - 0.3211171 0.5753910 - 0.6711366 - 0.1132277 0.7753803 0.5906262 0.1926801 - 0.9058216 - 0.1096497 - 0.1534623 0.3793593 -->round(Q’*Q) // verificando que Q e’ ortonormal ans = 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. -->round( A - Q * R ) // verificando que A = Q*R ans = 0. 0. 0. 0. 0. 0. 0. 0.

Quando os quatro caracteres (,’e’) forem colocados ap´s o nome de uma matriz de dimens˜o o a (m × n, m > n) o SCILAB produz uma decomposi¸˜o econˆmica, de modo que <matrizQ> ca o ter´ dimens˜o (m × n) e <matrizR> ser´ (n × n). Para a matriz A acima, a a a
-->[Qe,Re] = qr(A,’e’) // calcula fatores Q e R na forma economica Re = - 8.8317609 - 5.4349298 0. - 9.8214835 Qe = - 0.2264554 0.5325844 - 0.3396831 - 0.3211171 - 0.1132277 0.7753803 - 0.9058216 - 0.1096497 -->round(A - Qe * Re) // verificando que A = Qe * Re ans = 0. 0. 0. 0.

´ 8.2. Algebra linear

147

0. 0.

0. 0.

A fun¸˜o qr possui diversas formas de ser utilizada; para maiores informa¸˜es use help qr. ca co Decomposi¸˜o em valores singulares ca A fun¸˜o svd faz a decomposi¸˜o em valores singulares de uma matriz de dimens˜o m × ca ca a n. O comando [<matrizU>,<matrizS>,<matrizV>] = svd(<matriz>) produz uma matriz ortonormal <matrizU> de ordem m, uma matriz diagonal <matrizS> de dimens˜o m × n a contendo os valores singulares de <matriz> em ordem decrescente e uma matriz ortonormal <matrizV> de ordem n, de modo que <matriz> = <matrizU> * <matrizS> * <matrizV>’. Por exemplo,
-->A = [2 -4; 3 5; 1 -7; 8 6] // define a matriz A A = 2. - 4. 3. 5. 1. - 7. 8. 6. -->[U,S,V] = svd(A) // calcula os fatores U, S e V de A V = - 0.5257311 0.8506508 - 0.8506508 - 0.5257311 S = 12.476603 0. 0. 6.9522923 0. 0. 0. 0. U = 0.188444 0.5471902 - 0.5445505 - 0.6070721 - 0.4673105 - 0.0110328 0.5753910 - 0.6711366 0.4351204 0.6516942 0.5906262 0.1926801 - 0.7461769 0.5251246 - 0.1534623 0.3793593 -->round( U’*U ) // verificando que U e’ ortonormal ans = 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. 0. 0. 0. 0. 1. -->round( V’*V ) // verificando que V e’ ortonormal ans = 1. 0. 0. 1. -->round( A - U * S * V’) // verificando que A = U*S*V’

148
ans = 0. 0. 0. 0.

Cap´ ıtulo 8. Computa¸˜o cient´ ca ıfica

0. 0. 0. 0.

Se os quatro caracteres (,’e’) forem colocados ap´s o nome de uma matriz de dimens˜o o a (m × n, m > n) ser´ computada uma decomposi¸˜o econˆmica, de modo que <matrizU> a ca o ter´ dimens˜o (m × n), <matrizS> e <matrizR> ser˜o (n × n). Utilizando a mesma matriz a a a A,
-->[Ue,Se,Ve] = svd(A,’e’) // calcula os fatores U, S e V na forma economica Ve = - 0.5257311 0.8506508 - 0.8506508 - 0.5257311 Se = 12.476603 0. 0. 6.9522923 Ue = 0.188444 0.5471902 - 0.4673105 - 0.0110328 0.4351204 0.6516942 - 0.7461769 0.5251246 -->round( A - Ue * Se * Ve’) // verificando que A = Ue*Se*Ve’ ans = 0. 0. 0. 0. 0. 0. 0. 0.

Para se obter apenas os valores singulares de <matriz> em <vetor> basta <vetor> = svd(<matriz>),
-->s = svd(A) s = 12.476603 6.9522923 // calcula apenas os valores singulares de A

A fun¸˜o svd possui outras formas de ser utilizada; para maiores informa¸˜es use help svd. ca co

8.2.3

Solu¸˜o de sistemas ca

ca Dado um sistema Ax = b, a solu¸˜o x pode ser facilmente calculada pelo SCILAB pelo operador (\), por exemplo, para um sistema com matriz sim´trica, e
-->A = [4 -2 2; -2 10 -7; 2 -7 30] // matriz dos coeficientes

1.´ 8.n). -2 8 -1. tal que <matriz> * ca inv(<matriz>) = eye(n.4 Inversa A fun¸˜o inv(<matriz>) calcula a inversa de <matriz> de ordem n. .7.A * x )’ // verificando a exatidao da solucao r = 0.6. .2.3. 8. . A No caso de uma matriz n˜o sim´trica.2. .2.1. 30. 4 -6 5] // matriz dos coeficientes B = 1. a e -->B = [1 -3 2. Para a matriz M acima. 0. -->r = ( c .7. 11. -->r = ( b . -->b = [8 11 -31]’ // vetor dos termos independentes b = 8.1. 2. 5. . -->y = B \ c // solucao de By = c y = 2.B * y )’ // verificando a exatidao da solucao r = 0.15. . 2. . Algebra linear 149 = 4. -->x = A \ b // solucao de Ax = b x = 3. .1. 29.2.31. . 8. 4. . 2. -->E = inv(B) E = // inversa de B . . 3. .2. 0. 0. -->c = [11 -15 29]’ // vetor dos termos independentes c = 11. 0. 10.

25 . Por exemplo. 0. -->A = [4 -1 3. 2.25 0.125 0. -->p = poly(A. . 8.410402 0.150 Cap´ ıtulo 8. 0.5462817 0.0. 3.0. 5.3) ) // verificando que B * E = I ans = 0. A fun¸˜o poly constr´i ca o o polinˆmio caracter´ o ıstico de uma matriz.3)) // autovetores ortogonais de uma matriz simetrica . 9.0. 0.6161546 9.’x’) // constroi o polinomio caracteristico de A p = 2 3 . 3 2 8] // define a matriz A A = 4.4166667 .0. 0.9734434 Vetor = 0. 0. Se a matriz for sim´trica ent˜o os autovetores s˜o mutuamente e a a ortogonais (<AutoVetor>’ * <AutoVetor> = eye(n.125 0.1.2733656 . -->[Vetor.2.410402 5.0151370 0. 0. 5.7387367 0.8771698 -->round(Vetor’*Vetor-eye(3.<AutoValor>]=spec(<matriz>) produz uma matriz diagonal <AutoValor> contendo os autovalores e uma matriz <AutoVetor> com os correspondentes autovetores.0.4799416 0. 2.eye(3.5 Autovalores e autovetores Os autovalores s˜o os zeros do polinˆmio caracter´ a o ıstico da matriz.1.3947713 0. O uso de [<AutoVetor>.6161546 0.Valor] = spec(A) // calcula os autovalores e autovetores Valor = 1.4732062 . 0. -1 5 2.5416667 . . 0.0833333 -->round( B * E .1. Computa¸˜o cient´ ca ıfica .8333333 0. 3.8374647 0. 0.17x + x -->raizes = roots(p) // zeros do polinomio caracteristico raizes = 1. 0. Para a matriz A acima.n)).9734434 A fun¸˜o spec permite o c´lculo do autosistema (autovalores e autovetores) de uma maca a triz de ordem n por um m´todo mais eficiente do que construindo o polinˆmio carace o ter´ ıstico. 8. 0.125 0. 0.79 + 78x .

0. 2. 4. que a a pode assumir os valores ’r’ para linha. 0. -->d2 = diff(d1) // diferenca de ordem 1 de d1 d2 = 1.410402 5. Para um vetor. 8. -->xd2 = diff(x. . ’c’ para coluna ou ’*’ para as colunas da matriz <vari´vel> colocadas em um vetor. 3. 2. 0. 4. Para obter apenas os autovalores em <vetor> basta <vetor> = spec(<matriz>). Para a matriz sim´trica A definida acima. e -->lambda = spec(A) lambda = 1.3.2. 0. 0.3 Interpola¸˜o ca O SCILAB possui fun¸˜es para c´lculo das diferen¸as finitas ascendentes e interpola¸˜o co a c ca unidimensional. 3.6161546 9.1 C´lculo das diferen¸as finitas ascendentes a c A fun¸˜o diff(<vari´vel>.<dimens~o>) calcula a diferen¸a finita ascendente de ca a a c ordem dada por <ordem> entre dois elementos de <vari´vel> ao longo de <dimens~o>. respectivamente.2. 3. No caso de matriz.8. Os argumentos <ordem> e <dimens~o> s˜o opcionais e a a a seus valores pr´-definidos s˜o 1 e ’*’. 8. 0. 7. para maiores informa¸˜es use help ca co spec.9734434 // calcula apenas os autovalores de A A fun¸˜o spec possui diversas formas de ser utilizada. . 0. 0.2) // diferenca de ordem 2 de x xd2 = 1. .3.<ordem>. -->d1 = diff(x) // diferenca de ordem 1 de x d1 = 1. Interpola¸˜o ca 151 ans = 0. e a -->x = [1 2 4 4 7] // define o vetor x x = 1. 0.

column 13 to 15 5. 0.’*’)’//diferenca de ordem 1 assumindo A em um vetor (transposto) V1 = column 1 to 12 0. 1. 25. 100. 1. 1. 6. -->V1 = diff(A. 19.<interpolar>. ca u interpola¸˜o usando o vizinho mais pr´ximo. 12. 61.23.152 Cap´ ıtulo 8. 4. 18.1.59. 1. 25. 16.1. 27.<m´todo>) e onde a cadeia de caracteres <m´todo> especifica o m´todo a ser utilizado na interpola¸˜o. 9. e e ca sendo parˆmetro a ’linear’ ’spline’ ’nearest’ m´todo e interpola¸˜o linear. 2. 4. . yi ) especificados nos vetores <abscissas> e <ordenadas>. 1. 64. e a a ca 4 sejam cinco pontos da fun¸˜o y = x . 4.’r’) // diferenca de ordem 1 ao longo das linhas L1 = 0. 12.(1:5)^2. 125. ca . 100. 5. 16. 2.’c’) // diferenca de ordem 1 ao longo das colunas C1 = 1. 9. 3. ca interpola¸˜o por splines c´ bicos. 6. 4. column 13 to 14 20. Computa¸˜o cient´ ca ıfica -->A = [1:5.2 Interpola¸˜o unidimensional ca Dada uma tabela com pares (xi .1. 8. 1. para −1 ≤ x ≤ 1 definidos por.3. 20. . 48. -->C1 = diff(A. 9. 125. 64. 37.(1:5)^3] // define a matriz A A = 1.<ordenadas>. 7. 8. -->L1 = diff(A. 27. 1. cuja sintaxe ´ ca e <resultado> = interp1(<abscissas>. . 3. 18. 48. 3. -->A(:)’ // colunas da matriz A em um vetor (transposto) ans = column 1 to 12 1. 0. ent˜o os valores de z contidos no vetor <interpolar> podem ser interpoa lados usando a fun¸˜o interp1.5. 2. 4. respectivamente. 4. 8. 1. 5. 2. Por exemplo. 7. ca o Quando o m´todo n˜o for especificado ser´ assumida uma interpola¸˜o linear.

’spline’).2401.1.7].x. <vari´vel> c~ e ca a ´ uma cadeia de caracteres que especifica a vari´vel de integra¸˜o.[-0.y.6 0.’o’. Integra¸˜o num´rica ca e 153 -->x = linspace(-1.<lim sup>.25 0. // ordenadas Interpolando os valores z = −0.y.2695 -->interp1(x.’linear’.[-0.<erro abs>.’:’).50).spl.x1. Uma interpola¸˜o linear ´ feita implicitamente desde que o a ca e comando plot interliga os pontos por retas.144 0.^4. <lim inf> e <lim sup> e a ca .5). a aproxima¸˜o por polinˆmios com ’nearest’ por uma linha tracejada o ca o e os splines por uma linha pontilhada. Usualmente os splines produzem uma aproxima¸˜o ca mais suave da fun¸˜o como pode ser observado neste caso.4 Integra¸˜o num´rica ca e A fun¸˜o integrate calcula numericamente uma integral e sua sintaxe ´ ca e integrate(<fun¸ao>.1 mostra graficamente os resultados da fun¸˜o interp1.<vari´vel>.y1.x1. // ordenadas da curva real -->nea = interp1(x.1.x1.6 0.8. // interpolacao por splines -->plot(x.1296 e 0.3) // coloca legenda A partir dos 50 pontos em x1 foram criados os vetores nea e spl que contˆm as ordenadas e obtidas por interpola¸˜o usando os argumentos ’nearest’ e ’splines’. // abscissas para a interpolacao -->y1 = x1. // abscissas dos pontos -->y = x.’--’. usando os trˆs m´todos.[-0.y.y.<lim inf>. e e -->interp1(x.’nearest’.’-.x1. respectivamente. o m´todo de a e interpola¸˜o com splines c´ bicos produziu os melhores resultados para este caso.6)4 ≈ 0.6 0.<erro rel>) c~ a onde <fun¸ao> ´ uma cadeia de caracteres que define a fun¸˜o a ser integrada.’-’.’y’).4.y.7.’nearest’).4375 -->interp1(x.’linear’) ans = 0. Os cinco pontos iniciais ca est˜o representados por o.’splines’].’nearest’) ans = 0.y.^4. O gr´fico da fun¸˜o y = x4 est´ representado a ca a por uma linha s´lida.’x’.’y=x^4’.0625 // interpolacao linear // interpolacao com splines cubicos // interpolacao com vizinho mais proximo Considerando que os valores exatos s˜o (−0.’spline’) ans = 0.x1.74 ≈ 0. xgrid(1) -->xtitle(’M’+ascii(233)+’todos de interp1’. ca u As aproxima¸˜es da fun¸˜o y = x4 por trˆs fun¸˜es interpoladoras de interp1 podem ser co ca e co visualizadas pelos comandos. // gera graficos e grade -->legend([’pontos’.nea.0625 0.7]. // interpolacao vizinho mais proximo -->spl = interp1(x. -->x1 = linspace(-1. ca A Figura 8.y. ca 8.6 e z = 0.7].’.

5 100 80 60 40 y 20 0 −20 −40 −60 1 2 3 4 5 x 6 7 8 9 Figura 8.2 0.1: Aproxima¸˜o de y = x4 pela fun¸˜o interp1.6 0.5 . ca ca a s˜o os limites inferior e superior de integra¸˜o.2 0.0 Figura 8.0 −0.0 x 0.5 . s˜o assumidos a a a −8 os valores 0 e 10 . respectivamente. seja a fun¸˜o f (x) = cos(3x+1)x2 +x1. ca Para calcular 9 cos(3x + 1)x2 + x1.4 0.8 −0. Computa¸˜o cient´ ca ıfica Métodos de interp1 1.8 1. ca c e f(x) = cos(3x+1)x^2+x^1.2: Integra¸˜o de f (x) = cos(3x + 1)x2 + x1. No caso de n˜o serem fornecidos.6 y 0. cujo esbo¸o ´ mostrado na Figura 8.4 −0.6 −0. Por exemplo. Os argumentos <erro abs> e <erro rel> s˜o a ca os erros absoluto e relativo e s˜o opcionais.5 dx 1 faz-se .2 −1.0 0.154 Cap´ ıtulo 8.2 pontos linear y=x^4 nearest splines −0.4 0.0 0.8 0.2.

^1.*x.5.sci.sci’.5 Exerc´ ıcios Se¸˜o 8.6 8.9 8.^2+x.51064 8.’x’.9) // calcula a integral Integral = 102.2 8.4 8.sci -->Integral = integrate(’g’.7 8.3 8. Exerc´ ıcios 155 -->Integral = integrate(’cos(3*x+1)*x^2+x^1. u function y = g(x) y = cos(3*x+1).8.9) Integral = 102.5’.10 Se¸˜o 8.3 Interpola¸˜o ca ca .8 8.1 8.2 Algebra linear ca 8. endfunction Assim.1 Medidas de tempo ca 8.51064 // calcula a integral A fun¸˜o a ser integrada pode tamb´m estar definida em uma function. -->exec(’func.5.1.sci com o conte´ do. para calcular a integral acima usando a function g definida no arquivo func.-1) // carrega a function g do arquivo func. Seja o arquivo ca e func.5 ´ Se¸˜o 8.’x’.1.

12 8.17 8.4 Integra¸˜o num´rica ca ca e 8.20 .15 Cap´ ıtulo 8.19 8.156 8.16 8. Computa¸˜o cient´ ca ıfica Se¸˜o 8.14 8.18 8.11 8.13 8.

Dover. Abramowitz e I. Maia. Nova Iorque. 157 . G. 1972. Algorithms + Data Structures = Programs. 1999. Prentice-Hall. L. Handbook of Mathematical Functions. A. [2] F. F.Referˆncias Bibliogr´ficas e a [1] M. Becker. Stegun. LTC Editora. Pascal Estruturado. A. E. dos ca Santos. Campos. Farrer. F. 2a edi¸˜o. 3a edi¸˜o. filho. Rio de Janeiro. ca [5] N. dos Santos. e ca 2007. H. 1999. Rio de Janeiro. [4] H. Campos. F. M. e M. M. Algoritmos Num´ricos. Becker. Maia. E. 1976. Faria. F. C. F. e M. LTC Editora. L. C. de Matos. H. C. Wirth. 3a edi¸˜o. Algoritmos Estruturados. G. Farrer. LTC Editora. Faria. C. filho. A. de Matos. Rio de Janeiro. [3] H.

158 ˆ ´ REFERENCIAS BIBLIOGRAFICAS .

Sign up to vote on this title
UsefulNot useful