apostila_LMC scilab

Embed Size (px)

Citation preview

LABORATORIODE MATEM ATICA COMPUTACIONAL SCILABLuiza Amalia Pinto Cant [email protected] ario1 Introduc ao ao Ambiente Scilab 21.1 O Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21.2 Vari aveis Especiais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31.3 Arquivos *.sce de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52Algebra Linear Num erica 72.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.2.1 Matrizes Padr ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92.3 Acesso aos elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112.4 Matem atica Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.5 Uso de Scilabna Soluc ao de Sistemas Lineares: M etodos Diretos . . . . . . . . . . . . . . . . . 142.6 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Projeto de Programac ao 173.1 Operadores Relacionais e L ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.1.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173.1.2 Operadores L ogicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.2 O Loop for e while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.3 Estrutura if. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.4 Denic ao de Func oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Gr acos no Scilab 274.1 A Janela Gr aca do Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2 Gr acos Bi-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274.2.1 Outros Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Ajuste de Curvas em Ambiente Scilab 355.1 Denindo a Func ao de Ajuste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2 Spline C ubicas em Ambiente Scilab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Gr acos Tri-Dimensionais 436.1 Gr acos Tri-dimensionais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436.1.1 Gr acos 3-D Especiais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436.2 Detalhes da Func ao plot3d . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456.2.1 Func ao eval3d e eval3dp. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466.2.2 Exemplo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466.2.3 Outro Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Exerccios Adicionais 49Refer encias Bibliogr acas 521CAPITULO 1Introduc ao ao Ambiente Scilab1.1 OAmbienteScilabOScilab e umambiente utilizado no desenvolvimento de programas para a resoluc ao de problemas num ericos.Vamos conhecer um pouco mais sobre o seu ambiente de trabalho.Tendo iniciado o programa (isto depende do sistema operacional), voc e ver a mensagens do fabricante e umpequeno prompt de comando aguardando alguma ac ao sua:-----------------------------------------------scilab-5.3.0Consortium Scilab (DIGITEO)Copyright (c) 1989-2010 (INRIA)Copyright (c) 1989-2007 (ENPC)------------------------------------------------Startup execution:loading initial environment-->A echa --> indica que o Scilabest a pronto para receber comandos e o cursor e o prompt inicial. Na janelado Scilabh a um menu horizontal com seis opc oes: File, Edit, Preferences, Control, Applications e ?. Utilizandoo mouse escolha uma das opc oes.File possui oito sub-opc oes (apresentaremos as quatro mais importantes):Execute: executa o conte udo de arquivos (roda o programa implementado).Open a le: Abre o arquivo do seu programa no editor de texto do Scilab.Change current directory: Muda o diret orio em que oScilabfoi aberto para o diret orio do arquivo(programa).Quit: permite sair do ambiente Scilabde forma natural.Vari aveis Especiais CAPITULO 1. INTRODUCAO AO AMBIENTE SCILABEditcomandossemelhantesaoeditordetextodoMicrosoftOfceouOpenOfce(cut, copy, paste,select all);Preferences o comando mais importante desta opc ao e o Clear Console que limpa a janela de execuc aodo ambiente Scilab.Control possui tr es sub-opc oes cuja utilidade dos dois primeiros itens pode ser observada na seq u enciade comandos abaixo:--> // pressione Ctrl-c e -1-> // leva ao prompt de 1o. nivel-1-> // pressione Ctrl-c e -2-> // leva ao prompt de 2o. nivel-2->resume // retorna ao prompt de 1o. nivel-1->resume // retorna ao prompt inicial--> // Ctrl-c e -1-> // Ctrl-c e -2->abort // retorna ao prompt inicial-->Interrupt interrompe a execuc ao de um programa.Applications aplicativos do ambiente Scilab:SciNotes abre um editor de texto pr oprio para programac ao em ambiente Scilab.? informac oes e ajuda sobre o ambiente Scilab. Esta possui quatro sub-opc oes:ScilabHelp: informac oes sobre os comandos do ambiente Scilab.ScilabDemonstration: Demonstrac ao de alguns comandos deste ambiente de trabalho.Web Links: sites relacionados ao Scilab.About Scilab: mostra a licenca de uso do programa.Ainda na janela do Scilabh a alguns icones abaixo do menu descrito acima. Estes icones s ao atalhos paraas func oes mais usadas no menu acima.1.2 VariaveisEspeciaisAlgumas vari aveis assumem valores pr e-denidos no Scilabe podem ser vistas usando o comando who.--> whoYour variables are:home modules_managerlib helptoolslib scinoteslibxcoslib matiolib atomsguilib atomslibparameterslib simulated_annealinglib genetic_algorithmslib umfpacklibfft scicos_autolib scicos_utilslib spreadsheetlibdemo_toolslib development_toolslib soundlib texmacslibtclscilib m2scilib maple2scilablib compatibility_functilibstatisticslib timelib stringlib special_functionslib3Vari aveis Especiais CAPITULO 1. INTRODUCAO AO AMBIENTE SCILABsparselib signal_processinglib %z %spolynomialslib overloadinglib optimsimplexlib optimbaselibneldermeadlib optimizationlib linear_algebralib jvmliboutput_streamlib iolib interpolationlib integerlibdynamic_linklib uitreelib guilib data_structureslibcacsdlib graphic_exportlib datatipslib graphicslibfileiolib functionslib elementary_functionslib differential_equationlibcorelib PWD %tk %pvmMSDOS %F %T %nan%inf SCI SCIHOME TMPDIR%gui %fftw $ %t%f %eps %io %i%e %piusing 7845 elements out of 5000000.and 78 variables out of 9231.Your global variables are:%modalWarning demolist %driverName %exportFileName%toolboxes %toolboxes_dirusing 623 elements out of 180001.and 6 variables out of 767.-->Vejamos o signicado das vari avies mais recorrentes:Vari avel O que signica Vari avel O que signica%i Valor dep(1) %pi = 3, 1415926...%e Constante de Euler e = 2, 7182818... %eps precis ao da m aquina no qual o Scilabest a instalado.%inf Innito %nan Not a numberParasaberemqual diret oriooScilabfoi instalado, useavari avel SCIeparasaberemqual diret oriooScilabfoi aberto, use PWD. O resultado depende do sistema operacional em que o Scilabfoi instalado.-->SCI // Diretorio onde o Scilab foi instaladoSCI =/home/luiza/scilab-5.0.3/share/scilab-->PWD // Diretorio onde o Scilab foi lancadoPWD =/home/luiza-->home // Mesmo valor da variavel PWDhome =4Arquivos *.sce de Comandos CAPITULO 1. INTRODUCAO AO AMBIENTE SCILAB/home/luiza-->1.3 Arquivos*.scedeComandosPara problemas simples, e mais r apido e eciente introduzir seus comandos no prompt doScilab. Mas,se o n umero de comandos e grande, ou se voc e deseja mudar o valor de uma ou mais vari aveis e re-executaralguns comandos, pode ser trabalhoso e/ou tedioso introduzir os comandos no prompt. OScilabapresentauma soluc ao simples para esse problema: voc e pode colocar os comandos do Scilabem um arquivo de textosimples (pode-se fazer uso do Editor do Scilab) e depois abrir este arquivo e execut a-lo no Scilab.Atenc ao: noScilab, ponto-e-vrgulanonal deumcomandoinibeaapresentac aodeseuresultadoe,qualquer caracter ap os o uso de // e ignorado pelo Scilabpois este e interpretado como coment ario. Tamb em eimportantesalientarqueoscoment arios(eosnomesdasvari aveisefunc oesutilizadosnoScilab)NAOdevem ter qualquer tipo de acentuac ao.Abra o Editor de texto SciPad atrav es do menu do Scilabe digite os comandos abaixo.// Erro e Estabilidade// LMC -- 1o. programax = input(Entre com o valor de x); // Entrada do valor de x via teclado!S = 0; // Variavel que recebera o valor somatorio.format(v, 25); S // no. de elementos na representacao de S// v: formato padrao de uma variaval numericafor (i = 1:30000) // somatorio de 1 ate 30000S = S + x;end // Final do forSSalve este arquivo no diret orio LMC que foi criado. Para isso, clique com o mouse no menu File e selecioneSave as. Atribua o nome soma ex4.sce e volte ao ambiente Scilabexecutando os passos abaixo:-->pwd // verifique se esta no diretorio onde gravou o 1oTeste.sce-->exec(soma.sce) // executa o programa 1oTeste.sceO comando exec(nome-do-arquivo.sce) executa o programa gerado.Execute o programa acima para x = 0.5 e x = 0.11 !Tarefa:Desenvolva um programa em Scilabpara calcular (3 3) usando o comando format com 100dgitos.Um outro programinha para se testar com uma estrutura diferente da apresentada abaixo, e para calcular on umero de faltas possveis no semestre (faltas.sce)!// Primeiro teste de LMC -- Controle de presenca// Uso de uma Regra de Tres Simples para este calculo5Arquivos *.sce de Comandos CAPITULO 1. INTRODUCAO AO AMBIENTE SCILABa = 2; // a = aulas por semanab = 15; // b = semanas de aulas no semestrec = a*b; // c = horas-aulas do semestrex = (30*c)/100 // 30 --- porcentagem de faltas permitidas// 100 -- porcentagem total de aulas// x ---- no. de aulas que o aluno pode faltary = int(x/2) // y ---- no. de dias que o aluno pode faltar// int(.) no. inteiro de dias (em cada dia de aula sao dadas duas aulas)Teste o programa acima para diferentes valores dea (outras disciplinas) !!!! Por exemplo, para a disciplinade C alculo Num erico e Computacional.6CAPITULO 2Algebra Linear Num ericaVamos comecar com as estruturas sobre as quais toda a losoaScilab(e linguagens num ericas) est abaseada.2.1 VetoresPara criar um vetor no Scilab e muito simples. Apenas deve ser tomado cuidado com a diferenciac ao entrevetores linha e vetores coluna. Experimente:--->v = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]v1. 2. 3. 4. 5. 6. 7. 8. 9. 10.Voc e acaba de criar um vetor linha! Neste caso, as vrgulas s ao desnecess arias; poderamos simplesmenteusar--->v = [1 2 3 4 5 6 7 8 9 10]v1. 2. 3. 4. 5. 6. 7. 8. 9. 10.que o resultado seria o mesmo.Para os vetores coluna temos tr es opc oes: cri a-los diretamente, usar o operador de transposic ao, (ap ostrofo)ou simplesmente pular uma linha para cada elemento. Acompanhe:--->v = [1; 2; 3]v1.2.3.ou ainda-->v = [1 2 3]v1.2.3.Vetores CAPITULO 2.ALGEBRA LINEAR NUMERICAe nalmente-->v = [1-->2-->3]v1.2.3.Note que neste ultimo caso, o Scilabcou esperando que se completasse o vetor com ] .Um jeito pr atico de criar vetores igualmente espacados e usando o operador : . Observe:-->u =1:10u1. 2. 3. 4. 5. 6. 7. 8. 9. 10.ou ainda-->u = 0:0.1:1ucolumn 1 to 100. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9column 111.onde podemos especicar umincremento (no caso, 0.1). Observe que, neste caso temos: u = inicio:incremento:finalou u = inicio:decremento:final (teste u = 1:-0.1:0).Uma outra maneira de construir um vetor linha e usando a func ao linspace cujos elementos desta func aos ao:linspace( primeiro_valor, ultimo_valor, numero_de_elementos )Se o numerodeelementos e omitido, a func ao gera automanticamente 100 elementos.--> x = linspace( 0, %pi)--> x = linspace( 0, %pi, 11)Veja que, a notac ao :permite especicar o intervalo entre os pontos, mas n ao o n umero de pontos. Poroutro lado, a func ao linspace permite especicar o n umero de elementos mas n ao o intervalo entre os pontos.Comandos Descric aox = inicio:fim Cria um vetor linha comecando em inicio, incrementa em ume p ara em fim (ou antes).x = inicio:incremento:fim Cria um vetor linha comecando em inicio, incrementa em incrementoe p ara em fim (ou antes).x = linspace(inicio,fim,n) Cria um vetor linha, com espacamento linear, comecando em inicioe terminando em fim com n elementos.x = linspace(inicio,fim) Cria um vetor linha, com espacamento linear, comecando em inicioe terminando em fim com cem (100) elementos.Tabela 2.1: Comandos b asicos para a construc ao de vetores.8Matrizes CAPITULO 2.ALGEBRA LINEAR NUMERICA2.2 MatrizesO caso matricial e igualmente simples. Siga o exemplo:-->A = [1 2 3 4-->5 6 7 8-->9 10 11 12]A1. 2. 3. 4.5. 6. 7. 8.9. 10. 11. 12.-->size(A)ans3. 4.-->onde acabamos de criar uma matriz 3 4. A func ao size(.) mostra o tamanho da sua matriz ou vetor.Note que podemos utilizar o operador : em combinac ao com o que foi visto at e agora. Tente o comando--> A = [1:5, 9:-1:5; 0:0.25:1, 1:-0.25:0]Interprete o que aconteceu!2.2.1 MatrizesPadraoDada a utilidade deste tipo de matrizes, o Scilabcont em func oes para a criac ao de matrizes padr ao. Essetipo de matriz inclui aqueles cujos elementos s ao todos iguais a zero ou a um, matriz identidade, matrizes den umeros aleat orios, matrizes diagonais e cujos elementos s ao uma constante dada.-->A = ones(3,2) // ones(.) gera uma matriz com todos os elementos iguais a 1A1. 1.1. 1.1. 1.-->B = zeros(2,6) // zeros (.) gera matrizes com todos os elementos iguais a 0B0. 0. 0. 0. 0. 0.0. 0. 0. 0. 0. 0.-->C = eye(3,3) // eye(.) gera uma matriz identidadeC1. 0. 0.0. 1. 0.0. 0. 1.-->D = eye(2,4)D1. 0. 0. 0.9Matrizes CAPITULO 2.ALGEBRA LINEAR NUMERICA0. 1. 0. 0.-->E = eye(4,2)E1. 0.0. 1.0. 0.0. 0.-->A = rand(5,5)A0.2113249 0.6283918 0.5608486 0.2320748 0.30760910.7560439 0.8497452 0.6623569 0.2312237 0.93296160.0002211 0.6857310 0.7263507 0.2164633 0.21460080.3303271 0.8782165 0.1985144 0.8833888 0.3126420.6653811 0.0683740 0.5442573 0.6525135 0.3616361Ocomandorand(m, n)criaumamatrizm ncomentradasaleat oriasnointervalo [0, 1).-->a = 1:4 // Comece com um vetor simplesa1. 2. 3. 4.-->diag(a) // diag(.) coloca os elementos na diagonal principalans1. 0. 0. 0.0. 2. 0. 0.0. 0. 3. 0.0. 0. 0. 4.-->diag(a,1) // Coloca os elementos uma posicao acima da diagonalans0. 1. 0. 0. 0.0. 0. 2. 0. 0.0. 0. 0. 3. 0.0. 0. 0. 0. 4.0. 0. 0. 0. 0.-->diag(a,-2) // Coloca os elementos duas posicoes abaixo da diagonalans0. 0. 0. 0. 0. 0.0. 0. 0. 0. 0. 0.1. 0. 0. 0. 0. 0.0. 2. 0. 0. 0. 0.0. 0. 3. 0. 0. 0.0. 0. 0. 4. 0. 0.10Acesso aos elementos CAPITULO 2.ALGEBRA LINEAR NUMERICAAfunc aodiag(.) criamatrizesdiagonaisemqueumvetordeterminadopodesercolocadoemqualquerposic ao paralela` a diagonal principal ou na pr opria diagonal principal.Com essas matrizes padr ao, h a v arias formas de se criar uma matriz em que todos os elementos apresentamo mesmo valor. Execute os pr oximos comandos e verique o que acontece!--> d = %e; // Escolha do numero e para este exemplo--> d*ones(3,4) // Metodo mais lento (multiplicacao de vetor por escalar)--> d+zeros(3,4) // Metodo mais lento (adicao de escalar a vetor)--> d(ones(3,4)) // Metodo mais rapido (enderecamento vetorial)Func ao Prop ositozeros(n) Gera uma matriz n n com elementos iguais a zero.zeros(n,m) Gera uma matriz n m com elementos iguais a zero.one(n) Gera uma matriz n n com elementos iguais a um.one(n,m) Gera uma matriz n m com elementos iguais a um.eye(n) Gera uma matriz identidade n n.eye(n,m) Gera uma matriz identidade n m.diag(v) Gera uma matriz cujos elementos do vetor v cam na diagonal principal.rand(n,m) Gera uma matriz n m com valores aleat orios em (0, 1);size(.) Retorna dois valores, especicando o n umero de linhas e o de colunas de uma matriz ou vetor em (.).Tabela 2.2: Func oes Scilabpara gerar matrizes padr ao.2.3 AcessoaoselementosOScilabd aaousu ariov ariosmodosdeacessoaosvetoresematrizes. Omaissimplesdeles esim-plesmente digitando o nome do vetor/matriz criado. Caso voc e n ao se lembre do que criou,use o comandowhos.H a duas formas de usar o comando whos:whos(): Lista todas as func oes doScilab, apresentando o nome da func ao, o tipo (constante, vari avel,booleana, e assim por diante), o tamanho e os bytes usado para a func ao apresentada.whos: Neste caso e preciso especicar o tipo de func ao que voc e deseja vericar (veremos um exemplono nal desta sec ao).--> AA1. 2. 3. 4.5. 6. 7. 8.9. 10. 11. 12.Para acessar a matriz um elemento por vez, use par enteses:--> v = [7; 19; 21];-->v(2)ans19.-->A(2,3)ans7.-->A(3,2)11Matem atica Matricial CAPITULO 2.ALGEBRA LINEAR NUMERICAans10.-->A(5,7)!--error 21invalid index--> whos -type constantName Type Size Bytesans constant 1 by 1 24v constant 3 by 1 40A constant 3 by 4 112%scicos_display_mode constant 1 by 1 24%scicos_contrib constant 0 by 0 16%nan constant 1 by 1 24%inf constant 1 by 1 24%eps constant 1 by 1 24%io constant 1 by 2 32%i constant 1 by 1 32-->Note que se voc e tenta acessar elementos que n ao existem, o programa reclama.Por em, aformamaispoderosadeacesso(emaisr apida) eusandooconceitodesub-matrizes. Parausarmos partes de matrizes em operac oes, usamos novamente o operador : . Suponha que criamos umamatriz do tipo:-->A = rand(6,6)A0.0437334 0.7783129 0.8415518 0.5618661 0.3873779 0.26157610.4818509 0.2119030 0.4062025 0.5896177 0.9222899 0.49934940.2639556 0.1121355 0.4094825 0.6853980 0.9488184 0.26385780.4148104 0.6856896 0.8784126 0.8906225 0.3435337 0.52535630.2806498 0.1531217 0.1138360 0.5042213 0.3760119 0.53762300.1280058 0.6970851 0.1998338 0.3493615 0.7340941 0.1199926Podemos trabalhar em partes isoladas da matriz. Experimente:-->A(2:4, 3:5)Descreva o que ocorreu.Naturalmenteesteprocessopodeserusadoparaatribuic aodematrizes(ouvetores). Por em, antesdeexecutar, tente prever o resultado.-->A(3, 3:5) = [1 2 3]2.4 MatematicaMatricialPara executar operac oes alg ebricas matriciais, seguiremos os seguintes exemplos:12Matem atica Matricial CAPITULO 2.ALGEBRA LINEAR NUMERICAComandos Descric aoA (r,c) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetorde ndice r e cujas colunas s ao denidas pelo vetor c.A (r,:) Fornece a sub-matriz A cujas linhas s ao denidas pelo vetorde ndice r e inclui todas as colunas.A (:,c) Fornece a sub-matriz A cujas colunas s ao denidas pelo vetorde ndice c e inclui todas as linhas.A (:) Fornece todos os elementos de A em um vetor coluna, coluna a coluna.Tabela 2.3: Refer encia a sub-matrizes de uma matriz.--> A = rand(5, 3); //Exemplos de operacoes vetoriais/matriciais--> B = rand(3, 5);--> v1 = rand(5, 1);--> v2 = rand(1, 5);// soma, subtracao, multiplicacao e transposicao--> C = A*A+B*B--> D = A*A*v1(1:3)--> E = v1 * v2// operacoes elemento a elemento--> v3 = v1 + v2--> v4 = v1 .* v2--> v5 = v2 .^ 2--> F = A .* B// sub-matrizes!--> G = C(2:4, 2:4) * v2(2:4)--> C(1:3, 2) = GAnaliseosresultadosecertique-sequeentendeuoenderecamentodasmatrizesevetores! Isto emuitoimportante!!!Observe a tabela 2.4.Operac oes com elementos Dados representativosde vetores e matrizes A = [a1a2. . . an]dados B= [b1b2. . . bn], c RAdic ao a escalar A + c = [a1 + c a2 + c . . . an + c]Subtrac ao por escalar Ac = [a1 c a2 c . . . an c]Multiplicac ao por escalar A c = [a1 c a2 c . . . an c]Divisc ao por escalar A/c = [a1/c a2/c . . . an/c]Soma de vetores A + B= [a1 + b1a2 + b2. . . an + bn]Multiplicac ao de vetores A. B= [a1. b1a2. b2. . . an. bn]Divis ao de vetores pela direita A./B= [a1./b1a2./b2. . . an./bn]Divis ao de vetores pela esquerda B.\A = [a1./b1a2./b2. . . an./bn]Potenciac ao de vetores A.c = [a1c a2c . . . anc]c.A = [ca1ca2. . . can]A.B= [a1b1a2b2. . . anbn]Tabela 2.4: Operac oes b asicas aplicadas a elementos de vetores e matrizes.TomandoA =_1 2 33 2 1_, B =_4 5 66 5 4_, e c = 213Uso de Scilabna Soluc ao de Sistemas Lineares: M etodos Diretos CAPITULO 2.ALGEBRA LINEAR NUMERICAexecute as operac oes apresentadas na Tabela 2.4.2.5 Uso de Scilab na Solucao de Sistemas Lineares: MetodosDiretosConsidere o sistema Ax = b, associado` a matriz A e ao vetor b, denidos como segue:--> A = [ 3 -2 2; 1 1 1; 2 1 -1 ];--> b = [ -3 -4 -3 ]Apresentamos a seguir algumas func oes denidas no Scilabrelacionados ` a Soluc ao de Sistemas Lineares M etodos Diretos. Mais informac oes podem ser obtidas pelo recurso help seguido da func ao de interesse (porexemplo, help lu mostra detalhes sobre o c alculo da decomposic ao LUde uma matriz quadrada).Para resolver o sistema acima, temos algumas maneiras:1. Usando o operador \ : Este operador e interno ao Scilabe funciona de forma muito simples:--> x = A \ b // Calcula a solucao do sistema Ax = b (se existir!).2. Outra forma e usando a Decomposic ao LU. Para obter a decomposic ao A = LU, e resolver o sistema apartir dela use:-->[ L, U ] = lu(A)--> y = L \ b--> x = U \ yNote que o Scilabn ao confundiu U com u, o que indica que o programa e sensvel ao caso (mai usculase min usculas). Repare tamb em na forma como oScilabretornou dois argumentos (L eU) da func ao,oque eumacaractersticaincomumemlinguagensdeprogramac ao, por emcorriqueiraemlinguagemnum erica, como o Scilab. Tamb em poderamos ter feito a operac ao de forma direta:--> x = U \ ( L \ b )Ou ainda:--> [ L, U, P ] = lu(A) // Calcula a decomposicao LU de ANeste caso P e a matriz de permutac ao do pivoteamento usado no c alculo dos fatores L e U. A matriz Pmultiplicada por A tem o efeito das trocas de linhas efetuadas quando o pivoteamento e realizado.3. C alculo da func ao inversa da matriz A: Um Sistema Linear tem soluc ao unica se a matriz A for inversvel.Uma maneira de testar esta condic ao e usando a func ao inv(.) do Scilab:--> IA = inv(A)--> IA * A--> x = IA * b4. Uma outra func ao do Scilabinteressante e a que calcula o valor do determinante de uma matriz (det(.)):-->d = det(A)Pergunta: Qual a relac ao existente entre det(A) e det(U) ?14Exerccios CAPITULO 2.ALGEBRA LINEAR NUMERICA2.6 Exerccios1. Digite as seguintes matrizes no ambienteScilab:A =__4 32 10 6__, B =__1 2 42 4 10 1 5__, C =__587__(a) Mostre somente a segunda coluna de A;(b) Mostre o elemento (3, 2) de A;(c) Mostre somente a terceira coluna de B;(d) Mostre as duas primeiras colunas de B;(e) Mostre as duas ultimas linhas de A;2. Considereas matrizes A, Beovetor Cdoexerccioanterior. DenaumanovamatrizDcom o mesmo conte udo de A. Faca a mudancaou execute a operac ao - solicitada:(a) Atribua ao elemento (1, 1) de D o valor 12;(b) Atribua ao elemento (3, 2) de D o valor 8;(c) Execute o comando E = [D C]. Descreva oconte udo de E em termos de D e C;(d) Execute o comando F = [D B]. Descreva oconte udo de F em termos de D e B;(e) Execute o comando G = [E; B]. Descrevao conte udo de G em termos de E e B;3. ParacriarumvetorcolunanoScilabdigita-seda seguinte maneira:[1; 2; 3]. Execute os co-mandos abaixo no Scilab:(a) Construa um vetor coluna c1 com elemen-tos: 0, 1, 3, 5;(b) Construa um vetor coluna c2 com elemen-tos: 4, 2, 0, 7;(c) Construa uma matrizH cujas colunas s aoc1 e c2 sem repetir a entrada dos elemen-tos;(d) ConstruaumamatrizKondeasduaspri-meirascolunass aocompostaspelosele-mentos de c1 e a terceira coluna com ele-mentos de c2. Novamente, execute o solici-tado sem repetir a entrada de dados.4. Para criar um vetor linha fazemos: [1 2 3]. Exe-cute no Scilabos comandos abaixo:(a) Construa um vetor linha r1 com elementos2, 1, 5.(b) Construa um vetor linha r2 com elementos7, 9, 3 .(c) Construa uma matriz Mcujas linhas s ao r1er2semrepetiraentradadedadosfeitaanteiormente.(d) Descreva o resultado de: 3 r1.(e) Descreva o resultado de: r1 +r2.(f) Descreva o resultado de: [r1; r1 r2; r2].5. Responda ` as quest oes seguintes considerando amatriz abaixo.c =__1.1 3.2 3.4 0.60.6 1.1 0.6 3.11.3 0.6 5.5 0.0__(a) Qual o tamanho de c ?(b) Qual o valor de (2, 3) ?(c) Apresentetodosos ndicescujovalorseja0.6.6. Determineotamanhodasseguintesmatrizes.Verique suas respostas criando as matrizes noScilab.(a) u = [10 20*(%i) 10+20];(b) v = [-1; 20; 3];(c) w = [1 0 -9; 2 -2 1; 1 2 3];(d) x = [u v];(e) y(3,3) = -7;(f) z = [zeros(4,1) ones(4,1) zeros(1,4)];(g) v(4) = x(2,1);7. Qual o valor de w(2,1) ?8. Qual o valor de x(2,1) ?9. Qual o valor de y(2,1) ?10. Qual ovalor dev(3)ap osaexecuc aodaex-press ao (g)?11. Considere a matriz do exerccio (1). Determine oconte udo das seguintes submatrizes:(a) c(2,:)(b) c(6)(c) c(1:2, 2:4)(d) c([1,3],2)(e) c([2 2], [3 3])15Exerccios CAPITULO 2.ALGEBRA LINEAR NUMERICA(f) c([2 2 2], [3 3 3])(g) c([1 2 2], [3 3])12. Determineoconte udodamatrizaap osaexe-cuc ao das seguintes declarac oes:(a) a = [1 2 3; 4 5 6; 7 8 9];a([3 1], :) = a([1 3],:);(b) a = [1 2 3; 4 5 6; 7 8 9];a([1 3], :) = a([2 2],:);(c) a = [1 2 3; 4 5 6; 7 8 9];a([2 2],:);13. Determine o conte udo da matriz a ap os aexecuc ao das seguintes declarac oes:(a) a = eye(3,3);b = [1 2 3];a(2,:) = b;(b) a = eye(3,3);b = [4 5 6];a(:,3) = b;(c) a = eye(3,3);b = [7 8 9];a(3,:) = b([3 1 2]);14. Resolva o seguinte sistema linear Ax = b, onde:aij =1i + j 1, bi =1i, i, j = 1 : nuse n = 5, 10e15. Voc epodeexplicar osresultados? Observequeasoluc aoexata e(1, 0, 0, . . . , 0)t15. Duas quantias de dinheiro x1e x2somam$600, 00. A quantia x1 e o dobro de x2. Resolvao sistema usando a func ao LU do Scilab.16. S ao investidos $8000, 00. Parte a 6% de taxa dejuros e parte a 11% de taxa de juros. Quanto de-veria ser investido em cada modalidade se um to-tal de 9% e desejado ? Resolva o sistema usandoa func ao LU do Scilab.Resposta: x1= $3200, 00para6%e x2=$4800, 00 para 9%.17. Encontre a, b e c tais que o gr aco do crculo comequac ao x2+ y2+ ax + bx + c = 0 passe pelospontos(1, 5), (4, 4)e(3.1). Resolvaosistemausando a func ao LU do Scilab.Resposta:a = 4, b = 6 e c = 5.18. A quantia de $16500, 00 foi investida em tr es con-tas, resultando um lucro anual de 5%, 8% e 10%,respectivamente. Aquantiainvestidaa5%eraigual aquantiainvestidaa8%maisodobrodaquantiainvestidaa10%. Quantofoi investidoemcadacontaseototal dosjurossobreoin-vestimento foi de $1085, 00 ?Resolva o sistemausando a func ao LU do Scilab.Resposta: $9500, 00a5%, $4500, 00a8%e$2500, 00 a 10%.19. Encontre a, b e c tais que a equac ao da par abolay = ax2+bx+c passe pelos pontos (1, 4), (1, 6)e (2, 12). Resolva o sistema usando a func ao LUdo Scilab.Resposta:a = 3, b = 1 e c = 2.16CAPITULO 3Projeto de Programac aoProgramar e f acil. Saber o que programar e difcil.aaCitac ao de [3].Uma das caractersticas da linguagem num erica e a facilidade com que o usu ario cria seus pr oprios progra-mas.Apesar de simples, a linguagemnum erica disponibiliza a maioria das estruturas das linguagens de programac aoconvencionais.A diferenca principal e que, na programac ao Scilab, n ao h a necessidade da declarac ao pr eviados tipos das vari aveis que ser ao utilizadas ao longo do programa.Aslinguagensnum ericas, como eocasodoScilab, euminterpretadordecomandos. Osprogramasescritosemlinguagemnum ericas aoexecutadosemumtempomaiorqueosprogramassemelhantesescri-tos em linguagens compil aveis. Por outro lado, a vantagem de linguagens num ericas adv em da facilidade deprototipac ao de programas e da disponibilidade de uma poderosa biblioteca de func oes gr acas.Nesteprop osito, abordaremosaqui aestruturadeprogramac aoemambientenum erico, emespecial, noambiente Scilab. Na sec ao 3.1 ser ao abordados os operadores relacionais e l ogicos, na sec ao 3.2 a estruturade Loop, na sec ao 3.3 a estrutura if (condicional) e na sec ao 3.4 a denic ao de manipulac ao de func oes emambiente Scilab.3.1 OperadoresRelacionaiseLogicosAl em das operac oes matem aticas convencionais, o Scilabtamb em inclui operac oes relacionais e l ogicas,cuja nalidade e o de fornecer respostas do tipo verdadeiro ou falso a perguntas, usadas em estruturas de Loopse condicionais.No ambiente Scilab, a resposta para express oes l ogicas produzem T se a resposta e verdadeira (true) e Fse a resposta for falsa (false)1.3.1.1 OperadoresRelacionaisOs operadores relacionais do Scilabincluem todas as comparac oes habituais e s ao listados na Tabela 3.1.Atenc ao: Os smbolo = e == t em signicados diferentes! O smbolo == compara duas vari avies e retorna Tse forem iguais e F se forem diferentes; o smbolo = e usado para atribuir o resultado de uma operac ao a umavari avel.Os operadores relacionais do Scilabpodem ser usados para comparar dois vetores de mesmo tamanho oupara comparar vetores com escalar (ou ainda, escalar com escalar). Interprete os comandos abaixo:1Em outros ambientes de programac ao a reposta para uma sentenca verdadeira e 1 e 0 para uma resposta falsa.Operadores Relacionais e L ogicos CAPITULO 3. PROJETO DE PROGRAMACAOOperador Descric ao< Menor que Maior que>= Maior ou igual a== Igual a ou ~= Diferente deTabela 3.1: Operadores relacionais.--> A = 1:9--> B = 10 - A--> vf = (A==B)--> vf = (A~=B)--> vf = A >= 4--> vf = A < 4Observe tamb em que o teste de igualdade` as vezes produz resultados confusos para operac oes em pontoutuante. Execute as operac oes abaixo.-->vf = (-0.08 + 0.5 - 0.42) == (0.5 - 0.42 -0.08)-->vf = (-0.08 + 0.5 - 0.42) ~= (0.5 - 0.42 -0.08)-->vf = (-0.08 + 0.5 - 0.42) - (0.5 - 0.42 -0.08)E possvel combinar express oes relacionais com express oes matem aticas:--> B = 9 - A;--> B = B + (B==0)*(%eps) e uma maneira de substituir os elementos iguais a zero em um vetor pelo n umero %eps2. Essa express ao emparticular e, algumas vezes, util para evitar a divis ao por zero, como segue no exemplo abaixo.--> x = (-3:3)/3--> y = ones( x )--> vf = x ~= 0 // encontra posicoes com valores nao-nulos--> y(vf) = sin( x(vf) )./x( vf ) // trabalha apenas com valores nao-nulos3.1.2 OperadoresL ogicosOs operadores l ogicos permitem que se combinem ou se neguem express oes relacionais. Os operadoresl ogicos do Scilabs ao dados na Tabela 3.2.Operador Descric ao& E| OU~ NAOTabela 3.2: Operadores l ogicos.--> A = 1:9;--> vf = A > 4 // Encontra o que e maior que 4--> vf = ~(A>4) // Nega o resultado anterior--> vf = (A > 2) & (A < 6) // Retorna T para valores maior que 2 e menor que 6--> vf = (A < 3) | (A > 5) // Retorna T para valores menor que 3 ou para valores maior que 52O n umero %eps, em Scilab, e a menor diferenca entre dois n umeros que e possvel representar.18O Loop for e while CAPITULO 3. PROJETO DE PROGRAMACAO3.2 OLoopforewhileOloopforpossibilitaqueumas eriedecomandossejarepetidapor umn umerodevezesxoepr e-determinados. A forma geral do loop for e:for x = vetorcomandos ...endOscomandos entre as instruc oesfor eend s ao executados uma vez para cada coluna devetor. A cadaiterac ao, atribui-seaxapr oximacolunadevetor, isto e, duranteon- esimociclodolooptemosquex =vetor(:,n).--> for n = 1:10--> x(n) = cos( n*(%pi)/10 );--> end--> xTraduzindo, a primeira instruc ao diz: para n igual a 1 at e 10, calcule todas as instruc oes at a a pr oxima instruc aode end. No primeiro ciclo de for, n = 1, no segundo, n = 2, e assim por diante, at e n = 10. Depois do ciclopara n = 10, o loop for termina e os comandos ap os a instruc ao end s ao executados e as componentes de xs ao apresentados, conforme o exemplo acima.Naturalmente, pode-se inserir um loop for dentro do outro, sucessivamente, tantos quantos desejados:--> for n = 1:5--> for m = 5:-1:1--> A(n,m) = n^2 + m^2;--> end--> disp(n)--> end--> AUma maneira de tornar um programa mais eciente e atrav es da pr e-alocac ao de mem oria. Ou seja,osvetores devem ser pr e-alocados antes de um loop for (ou while) seja executado. Por exemplo:--> x = zeros(1,10); // memoria pre-alocacao para x--> for n = 1:10--> x(n) = cos( n*(%pi)/10 );--> end--> xNo primeiro caso, todas as vezes que os comandos dentro do loop for s ao executados, o tamanho da vari avelx e incrementada de 1. Isso forca oScilaba gastar tempo para alocar mais mem oria parax todas as vezesque o loop e percorrido.Aocontr ariodoloopfor, queexecutaumgrupodecomandosumn umeroxodevezes, oloopwhileexecuta um grupo de comandos um n umero indenido de vezes, at e que uma certa condic ao seja satisfeita. Aforma geral do loop while e:while CONDICAOcomandos ...endOs comandos ... entre as instruc oes while e end s ao executados enquanto TODOS os elementos de CONDICAOforem verdadeiros.19Estrutura if CAPITULO 3. PROJETO DE PROGRAMACAO--> num = 0; EPS = 1;--> while (1+EPS) > 1--> EPS = EPS/2;--> num = num + 1;--> end--> num--> EPS = EPS*2Nesse exemplo, EPS comeca em 1. Enquanto (1+EPS) > 1 for verdadeiro, os comandos dentro do loop whiles ao executados. Uma vez queEPS e continuamente divivido em dois, em algum momento ele se tornar a t aopequeno que, somando-se EPS a 1, esse resultado ser a menor (ou igual) que 1. Nesse momento, (1+EPS) > 1torna-se falso e o loop while termina. Finalmente, multiplica-se EPS por 2 porque a ultima divis ao por 2 o tornoupequeno demais.3.3 EstruturaifEm diversas situac oes, as seq u encias de comandos t em de ser executadas condicionalmente, com base emum teste relacional. Nas linguagens de programac ao, essa l ogica e implementada por meio de uma das diversasformas de estrutura if-else-end, cuja estrutura mais simples e:if expressaocomandos ...endOscomandos ... entreasfunc oesifeends aoexecutadossetodososelementosnaexpressaoforemverdadeiros.Nos casos em queexpressao envolve muitas subexpress oes l ogicas, apenas as subexpress oesnecess arias para determinar o valor l ogico da expressao s ao executadas. Por exemplo,se expressao e (expressao1 | expressao2), ent ao expressao2 e executada somente seexpressao1 for falsa. Da mesma maneira, seexpressao e(expressao1 & expressao2), ent aoexpressao2 s o e executada se expressao1 for verdadeira.Considere o seguinte exemplo:--> peras = 10; // numero de peras--> custo = peras*25 // custo de peras--> if peras > 5 // fonece 20% de desconto em compras maiores--> custo = (1 - 20/100)*custo;--> end--> custoNos casos em que h a duas alternativas, a estrutura if-else-end passa a ser:if expressaocomandos executados se verdadeiraelsecomandos executados se falsaendAqui, o primeiro grupo de comandos e executado se expressao for verdadeira; o segundo grupo e executado seexpressao for falsa.Quando houver tr es ou mais alternativas, a estrutura if-else-end toma a forma:20Denic ao de Func oes CAPITULO 3. PROJETO DE PROGRAMACAOif expressao1comandos executados se expressao1 for verdadeiraelseif expressao2comandos executados se expressao2 for verdadeiraelseif expressao3comandos executados se expressao3 for verdadeira...elsecomandos executados se nenhuma outra expressao for verdadeiraendNessa ultima forma, somente os comandos associados` a primeira express ao verdadeira encontradas s ao exe-cutados; as express oes relacionais seguintes n ao s ao testadas e o resto da extrutura if-else-end e ignorada.Al em disso, n~ao e necess ario que o comando nal else esteja presente.Por m, vamos ver uma maneira possvel de interromper ou sair de loops for e while.--> num = 0; EPS = 1;--> for num = 1:1000--> EPS = EPS/2;--> if (1+EPS) EPS = EPS*2--> break--> end // if--> end // for--> numNote que, o loop for executaria um grande n umero de vezes. A estrutura if-else-end testa; quando EPS casuciente pequeno, o comando break forca o loop for a terminar prematuramente.Desenvolva um programa em Scilabpara encontrar as razes de uma equac ao do tipo ax2+bx+c =0.3.4 DenicaodeFunc oesUma func ao obedece a uma estrutura da forma:function [y1, y2, ..., yn] = foo(x1, x2, ..., xm)instrucao_1instrucao_2...instrucao_pendfunctiononde foo e o nome da func ao, xi, para i = 1, 2, ..., m, s ao os seus argumentos de entrada, yj, para j =1, 2, ..., n s ao argumentos de sada einstrucaoi, parai = 1, 2, ..., p, representa a seq u encia deinstruc oes que devem ser executados pela func ao.Todafunc aonoScilab eexecutadachamandoseunomeseguidodeseusargumentos. Noexemplo, afunc ao foo e executada atrav es do comando:--> foo(x1, x2, ..., xm)Como pode ser observado, uma func ao possui uma estrutura pr e-determinada. As principais caractersticas deuma func ao s ao:21Denic ao de Func oes CAPITULO 3. PROJETO DE PROGRAMACAOAs vari aveis denidas na func ao,chamadas de vari aveis locais,n ao permanecem no ambienteScilabap os a execuc ao da func ao;As entradas e sadas do programa s ao claramente denidas, eUma func ao, ap os ser denida, pode ser chamada a qualquer tempo.Uma func ao pode ser criada usando um dos seguintes procedimentos:1. Digitando no pr oprio ambiente,--> Digitando uma funcao no ambiente Scilab--> function[y1, y2] = exemplo(x1, x2)--> // Entrada: x1, x2--> // Saida: y1, y2--> y1 = x1 + x2--> y2 = x1 * x2--> endfunction--> [a, b] = exemplo(2, 3)2. Usando o comando deff,--> Usando deff--> deff([y1, y2] = exemplo(x1, x2), y1 = x1 + x2, y2 = x1 * x2)--> [a, b] = exemplo(3, 4)3. Digitando o texto da func ao em um arquivo e, em seguida, carregando esse arquivo no ambiente Scilab.Por convenc ao, as func oes denidas pelo usu ario possuem extens ao sci e s ao carregadas no ambienteScilabatrav es do comando:--> exec(nome_do_arquivo_de_comandos.sce)22Exerccios CAPITULO 3. PROJETO DE PROGRAMACAO3.5 Exerccios1. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes express oes a seguir.a = 20; b = -2; c = 0; d = 1;(a) a > b;(b) b > d;(c) a > b & c > d;(d) a == b;(e) a & b > c;(f) ~~b.2. Assuma que a, b, c e d sejam conforme dado, e avalie as seguintes express oes a seguir.a = 2; b = [1 -2; 0 10]; c = [0 1; 2 0];d = [-2 1 2; 0 1 0];(a) ~(a > b); (b) a > c & b > c; (c) c a*c; (b) d | b > a.4. Ocusto de enviar umpacote por Sedex e de $10,00 para o primeiro quilo e $3,75 para cada quilo acima. Seo pacote pesar mais de 35 quilos, uma taxa de peso adicional de $10,00 e adicionada ao custo.Nenhumpacote com mais de 50 quilos e aceito. Escreva um programa que aceite o peso do pacote em quilos ecalcule o custo de enviar o pacote. Inclua o caso dos pacotes acima do peso.5. Escreva um programa para calcular a func ao f(x, y) para quaisquer dois valores reais, dado pelo usu ariopara x e y, como segue:f(x, y) =___x + y x 0 e y 0x + y2x 0 e y< 0x2+ y x < 0 e y 0x2+ y2x < 0 e y< 06. Examine os lacos for a seguir e determine quantas vezes cada laco ser a executado.(a) for index = 7:10(b) for jj = 7:-1:10(c) for index = -10:3:-7(d) for kk = [0 5; 3 3]7. Examine os lacos a seguir e determine o valor em ires no nal de cada um.(a) ires = 0;for index = 1:10ires = ires + 1;end(b) ires = 0;for index = 1:10ires = ires + index;end(c) ires = 0;for index1 = 1:10for index2 = index1:10if index2 == 6break;end23Exerccios CAPITULO 3. PROJETO DE PROGRAMACAOires = ires + 1;endend(d) Calcule os valores da func ao:f(t) =_sen(t) t tal quesen(t) > 00 caso contr ariopara 6< t < com intervalos de /10.8. O n- esimo n umero de Fibonacci e denido pelas equac oes recursivas abaixo:f(1) = 1f(2) = 2f(n) = f(n 1) + f(n 2)Portanto, f(3) = f(2) +f(1) = 2+1 = 3 e assim por diante, para n umeros maiores. Escreva um programafib.sci para calcular e imprimir on- esimo n umero de Fibonacciparan>2,onden e fornecido pelousu ario.9. Uma matriz Ann e dita diagonalmente dominante se|aii| >n

j=i|aij|, i = 1 : nEscreva uma func ao que, dada uma matriz qualquer n n, retorne T se a matriz for diagonalmente domi-nante e F caso contr ario.P.S.: Ocomando read, como mostra o exemplo que segue, AB = read(nomedoarquivo.txt, nodelinhas,nodecolunas)), l e um arquivo de dados para execuc ao no ambiente Scilab, onde AB e a vari avel quecont em a matriz.10. Alocalizac aodeumpontoemumplanocartesianopodeserexpressaporcoordenadasretangulares(x, y) ou coordenadas polares (r, ). A relac ao entre esses dois conjuntos de coordenadas e dada porestas equac oes:x = r cos y = r sin r = _x2+ y2 = tg1_yx_Escreva duas func oes, rect2polar epolar2rect,que convertam coordenadas de retangular para po-lar e vice-versa, com o angulo expresso em graus.xyrxy11. O m etodo da bissecc ao serve para o c alculo apropriado de razes de equac oes do tipof(x)=0,comf: R R.O m etodo e bastante simples: dado um intervalo inicial [a, b] contendo uma raiz, divide-se este intervaloao meio. Por exemplo, m = (a + b)/2. Temos agora dois intervalos:[a, m] e [m, b]. Da basta continuar oprocesso at e a precis ao desejada.Assim:(a) Encontre as razes de f(x) = x32x 5 = 0.24Exerccios CAPITULO 3. PROJETO DE PROGRAMACAO(b) Calcule as razes negativas de P(x) = x33x26x + 8 = 0, com 0.05 (erro absoluto) que est ano intervalo [3.83, 0.62].12. Um sistema linear pode ser dado por:___a11x1+ a12x2+ . . . + a1nxn= b1a21x1+ a22x2+ . . . + a2nxn= b2...............an1x1+ an2x2+ . . . + annxn= bnna forma matricial como Ax = b, ou ainda:x1=__b1 n

j=2a1jxj__/a11...xi=__bi n

j=iaijxj__/aii...xn=__bn n1

j=1anjxj__/ann(3.1)O m etodo de Gauss-Seidel e um processo que usa a forma (3.1), a partir de uma soluc ao inicial e atualizaos valores de x at e obter uma precis ao requerida. Esta atualizac ao usa as componentes que est a sendocalculada. Assim, o valor rec em calculado parax(k+1)1ser a usado no c alculo dex(k+1)2. O Algoritmo 1mostra os passos deste m etodo.Dadon, Ann, bn1 e x(0)n1, max, 1: Para k= 0 at e k= max fac a2: Para i = 1 at e i = n fac a3: x(k+1)i=1aii

bi i1Xj=1aijx(k+1)jnXj=i+1aijx(k)j!4: Se max1inx(k+1)ix(k)i scf(1) // Acesso a janela grafica 14.2 GracosBi-dimensionaisGr acos bi-dimensionais podemser gerados atrav es da utilizac ao da func ao plot2d(). A forma mais simplesdesta func ao e:Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILAB--> plot2d( [ x ], y )onde x e y podem ser matrizes ou vetores reais. Os colchetes [ e ], envolvendo x indicam que este par ametro e opcional. Vejamos algumas considerac oes sobre este par ametros:1. Sexeys aovetores, afunc aoplot2d()permitetracarogr acodeyemfunc aodex.Eimportanteobservar que os dois vetores devem ter a mesma dimens ao, isto e, os dois vetores devem ter o mesmon umero de elementos.2. Se x e um vetor e y e uma matriz, a func ao plot2d() permite tracar o gr aco de cada coluna da matriz yem func ao de x. Neste caso, o n umero de elementos das colunas da matriz deve ser igual ao n umerode elementos do vetor x.3. Se x e y s ao matrizes, a func ao plot2d permite tracar o gr aco de cada coluna da matriz y em func ao decada coluna da matriz x. Neste caso, as matizes devem ter as mesmas dimens oes.4. Se y e um vetor, a func ao plot2d() permite tracar o gr aco do vetor y em func ao do vetor [1:size(y)].5. Se y e uma matriz, a func ao plot2d() permite tracar o gr aco da matriz y emfunc ao do vetor [1:size(y)].Vamos apresentar exemplos de gr acos gerados para cada uma das opc oes de entrada x, y apresentadosanteriormente. Os gr acos ser ao gerados no intervalo [0, 2], com incremento 0.1. As atividades abaixo podemser feitas no Scipad ou diretamente no ambiente Scilab.--> // Item 1: x = vetor, y = vetor--> x = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, x--> y = sin( x );--> // x e y devem ter a mesma dimensao!!!!!!!!--> size( x )--> size( y )--> plot2d( x, y )--> // Item 2: x = vetor, y = matriz--> clf() // Limpa a tela grafica - evitar sobreposicao--> Y = [ sin( x ) cos( x ) ]; // Definindo a matriz Y--> size (Y) // Observar que a matriz Y possui 63 elementos em cada coluna--> plot2d( x, Y )--> // Item 3: x = y = matrizes--> clf()--> clear--> t = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliar--> X = [ t t ] // Criando a matriz X--> size( X ) // A matriz X possui 63 elementos em cada coluna--> Y = [ cos( t ) sin( t ) ];--> size( Y ) // A matriz Y possui 63 elementos em cada coluna--> plot2d( X, Y )--> // Item 4: y = vetor (sem x explicito)--> clf()--> x = [ 0:0.1:2*%pi ];--> plot2d( sin( x ) )28Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILAB--> // Item 5: Y = matriz (sem x explicito)--> clf()--> plot2d( Y )Verique que, ap os a execuc ao de cada gr aco, limpamos a tela atrav es do comando clf(), para evitar queo pr oximo gr aco se sobreponha ao anterior.Vejamos agora alguns comandos para melhorar a sua janela gr aca:xtitle( titulo ): acrescenta o ttulo em cada um dos gr acos gerados, cujo argumento e uma string.xsetech( [ x, y, largura, altura] ): Sub-divide a janela gr aca do Scilab.A janela gr aca e denida com largura e altura iguais a 1 e com o seu sistema de refer encias com origem(0, 0) no canto superior esquerdo da janela. O eixo x possui valores crescentes para a direita e o eixo ypossui valores crescentes para baixo. Ambos os eixos possuem valores m aximos iguais a 1.Vamos re-escrever os comandos acima dentro do Scipad (graf2d.sci) usando os comandos xtitle() exsetech().clear // Limpar a memoria do Scilabclf() // Limpar a janela grafica// Item 1: x = vetor, y = vetorx = [ 0:0.1:2*%pi ]; // Definindo o vetor das abcissas, xy = sin( x );// xsetech( [abcissa, ordenada, largura, altura] ) do graficoxsetech( [0, 0, 0.3, 0.5] );xtitle(Item 1);plot2d( x, y )// Item 2: x = vetor, y = matrizY = [ sin( x ) cos( x ) ]; // Definindo a matriz Yxsetech( [0.35, 0, 0.3, 0.5] );xtitle(Item 2);plot2d( x, Y )// Item 3: x = y = matrizescleart = [ 0:0.1:2*%pi ] // Definindo uma variavel auxiliarX = [ t t ] // Criando a matriz XY = [ cos( t ) sin( t ) ];xsetech( [0.7, 0, 0.3, 0.5] );xtitle(Item 3);29Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILABplot2d( X, Y )// Item 4: y = vetor (sem x explicito)x = [ 0:0.1:2*%pi ];xsetech( [0, 0.5, 0.5, 0.5] );xtitle(Item 4);plot2d( sin( x ) )// Item 5: Y = matriz (sem x explicito)xsetech( [0.5, 0.5, 0.5, 0.5] );xtitle(Item 5);plot2d( Y )Aformageral dafunc aoplot2d()inclui umterceiroargumento: plot2d( [x], y, ), onde e uma seq u encia de opc oes que determinam as caractersticas do gr aco bi-dimensional:< optargs >:=opcao1 = valor1, opcao2=valor2,. . . ,opcaon=valornAs opc oes podem ser:style: eutilizadaparaespecicaropadr aodacurva(oucurvas)queest aosendotracadas. Ovalorassociado` a essa opc ao dever ser um vetor com valores inteiros positivos ou negativos. Se o valor forpositivo, a curva e contnua e dena-se a cor da curva tracada. Se o valor for negativo ou zero, a curvaser a desenhada usando marcadores.logflag: deneaescala, logartmicaoulinear, aserutilizadanoseixosxeydogr aco. Osvaloresassociados ` a essa opc ao s ao strings, nn, nl, ln ou ll, onde l indica a escala logartmica, n a escalanormal, na seq u encia xy. O valor padr ao desta opc ao e nn, isto e, escala normal com graduac ao normaldos eixos (omite-se esta opc ao).rect: e utilizada para estabelecer os limites do gr aco. O valor associado ` a essa opc ao um vetor real comquatro entradas [xmin, ymin, xmax, ymax], onde xmin, xmax, ymin e ymax indicam os valores mnimose m aximos para os eixos x e y, respectivamente.frameflag: e utilizada para controlar a escala dos eixos coordenados. O valor associado` a essa opc ao eum n umero inteiro entre 0 e 8, inclusive.axesflag: especica como os eixos ser ao tracados. O valor associado ` a essa opc ao e um n umero inteiroentre 0 e 5, inclusive;leg: permite dener as legendas das curvas. O valor associado` a esse par ametro e uma string de carac-teres para cada gr aco tracado.Um exemplo com estas opc oes e apresentado a seguir (optplot.sci).--> x = [ -%pi:0.1:%pi ]--> y = [ sin(x) cos(x) ]--> plot2d( x, y, style = [2, -1], rect = [-%pi, -1.5, %pi, 1.5], ...--> axesflag = 5, leg = sen( x )@cos( x ) )Uma maneira de tracar gr acos bidimensionais polares e usando a func ao polarplot(rho, theta, ),como segue no exemplo a seguir (cardeoide.sce).30Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILABclearclf()xsetech([0, 0, 0.5, 0.5])t = linspace(0, 2*%pi);a = 2;r = a*(1 + cos(t));polarplot(t,r, 5)xtitle(Cardeoide)xsetech([0.5, 0, 0.5, 0.5])a = 0.25;t = linspace(-(%pi)/4, (%pi)/4, 80);r1 = a*sqrt( cos(2*t) );r2 = -( a* sqrt( cos(2*t) ) );polarplot([t, t], [r1, r2], 22)xtitle(Lemniscata de Bernoulli)xsetech([0, 0.5, 0.325, 0.5])t = linspace(-2*%pi, 2*%pi);a = 1;x = a*(t - sin(t));y = a*(1 - cos(t));plot2d(x, y, 2, frameflag = 3, rect = [-6.2, -0.1, 6.2, 2.1])xtitle(Cicloide)xgrid(3)xsetech([0.325, 0.5, 0.325, 0.5])t = linspace(0, 2*%pi);a = 2;x = a*( cos(t) + t.*sin(t) );y = a*( sin(t) - t.*cos(t) );plot2d(x, y, 5, frameflag = 3, rect = [-10, -15, 4, 10])xgrid(2)xtitle(Evolvente da circunferencia)xsetech([0.65, 0.5, 0.35, 0.5])31Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILABa = 2;t = linspace(-4*%pi, 4*%pi);x = (3*a*t)./(1 + t^3);y = (3*a*(t^2))./(1 + t^3);plot2d(x, y, 2)xgrid(3)xtitle(Folio de Descartes)O comando plot2d() apresenta algumas variac oes, como apresentado na Tabela 4.1.Comando Tipo de Gr acoplot2d2() gr acos 2-D linearizados.plot2d3() gr acos 2-D com barras verticais.plot2d4() gr acos 2-D com setas.Tabela 4.1: Variac oes do comando plot2d.Uma outra maneira de gerar gr acos bi-dimensionais e usando o comandofplot2d() (graffplot.sci).Consulte o help do Scilabpara maiores detalhes.--> clear--> clf()--> deff( y = f(x), y = sin(x) )--> x = linspace( -%pi, %pi )--> fplot2d( x, f )--> xgrid(2)4.2.1 OutrosComandosExistemcomandos que podemser utilizados para melhorar a apresentac ao de umgr aco (demsubplot.sci).Dentre eles, destacamos:xgrid(): coloca uma grade em um gr aco bi-dimensional;titlepage: coloca um ttulo no meio de uma janela gr aca.subplot(m,n,p): divide a janela gr aca doScilabem uma matrizm n (m linhas en colunas). Emcada um dos elementos da matriz, especicado por p, pode ser colocado num gr aco.// Demonstracao do comando subplotclf()subplot(2,2,1)champ // Chamada do demo da funcao champsubplot(2,2,2)histplot // Chamada do demo da funcao histplotsubplot(2,2,3)errbar // Chamada do demo da funcao barr32Gr acos Bi-dimensionais CAPITULO 4. GRAFICOS NO SCILABsubplot(2,2,4)grayplot // Chamada do demo da funcao grayplotObservem que, no menu horizontal da janela gr aca temos a opc ao File e sub-opc ao Export. Esta sub-opc aopermite exportar a gura gerada no formato:*.gif, entre outros !Executem o programa (plot2dopt.sce) que segue abaixo e compare com os comandos listados na Tabela4.1.clearclf()subplot(2,2,1)x = [-2.9:0.1:2.9];y = exp(-x.*x);plot2d(t, x);errbar(t,x, 0.02*ones(x), 0.1*ones(x))xtitle("Barra de erros: variacao inferior e Superior")subplot(2,2,2)plot2d2(x, y, style = 2)xtitle("Funcao escada: visualizacao discreta dos dados")subplot(2,2,3)plot2d3(x, y, style = 3)xtitle("Barras verticais: analise de frequencia")subplot(2,2,4)x = linspace(1, 1000);y = log(x);plot2d(x, y, logflag = "ln") // l == escala logaritmica// n == escala normalxgrid(3);xtitle("logflag: escala logaritmica")33Exerccios CAPITULO 4. GRAFICOS NO SCILAB4.3 Exerccios1. Acompanheoquefoi feito, parafunc oes po-lares(plot2dopt), efacaum(oumais) pro-grama(s)paraasfunc oesquesegue. Nemto-dasasfunc oeslistadasabaixoprecisamusarpolarplot! Atenc aoaodenirosdomniosdecada func ao.(a) Ciss oide de Diocles:y2=x3a xou___x =at21 + t2y =at31 + t2(b) Estrof oide:y2= x2a + xa x(c) Hipocicl oide (atr oide):x23+ y23= a23ou_x=a cos3(t)y=a sen3(t)(d) Espiral de Arquimedes:r=a , r 0.(e) Espirial hiperb olica:r=a, r 0.(f) Espiral logaritmica:r = ea .(g) Rosa de tr es p etalas:r=a sen(3), r 0.(h) Rosa de quatro p etalas:r=a | sen(2)|2. Trace o gr aco das func oes abaixo (cuidado como domnio de cada func ao !!!!).(a) f(x) = x3;(b) f(x) = x 1;(c) f(x) = |x|;(d) f(x) =1x;(e) f(x) = 4 x2;(f) f(x) = |x 4|;(g) f(x) = x +|x|;(h) f(x) = x24;(i) f(x) =1(x4)2;(j) f(x) = (4 + x2);(k) f(x) =x|x|;(l) f(x) = 2 x;(m) f(x) = ln(x) (mude o tipo de escala);(n) f(x) = ex(mude o tipo de escala).3. Atrav es da estrutura function, escreva cadauma das func oes abaixo e escreva um programa(para cada uma ou para todas) e que chame asfunc oes (usando a func ao exec()) e faca os seusrespectivos gr acos:(a)f(x) =_ 1 se x < 01 se x 0(b)f(x) =___5 se x < 5x se 5 x 55 se x > 5(c)f(x) =___x2se x 1x3se |x| < 12x se x 1(d)f(x) =_1 se x e inteiro0 se x n ao e inteiro(e)f(x) =___x se x < 02 se 0 x < 1x2se x 1(f)f(x) =___x se x 1x2se 1 x < 2x se x 234CAPITULO 5Ajuste de Curvas em Ambiente ScilabManipulacaodeArquivosComandoreadPara a leitura de um arquivo no formato de matriz, o Scilabusa o comando read:--> A = read(nome_do_arquivo.txt, numero_de_linhas, numero_de_colunas)Oarquivocontendoamatrizaserlidadeveconterapenasoselementosdamatrizdispostodemaneirausual.ManipulacaodeArquivosComandossaveeloadAsvari aveis, vetoresoumatrizescriadasnoambienteScilabpodemserarmazenadasemumarquivo.Considere os vetores:--> x = [0:0.1:2];--> y = [5.8955 3.5639 ... 0.1704 0.2636];--> dd = [x; y];ondey = [ 5.8955 3.5639 2.5173 1.979 1.899 1.3938 1.13591.0096 1.0343 0.8435 0.6856 0.61 0.5392 0.39460.3903 0.5474 0.3459 0.137 0.2211 0.1704 0.2636 ]Para salvar x e y em um arquivo chamado valores.dat, usamos o comando save com a sintaxe:--> save(valores.dat, dd)O comando save cria o arquivo valores.dat no diret orio de trabalho. O arquivo valores.dat e um arquivobin ario. Para recuperar os valores x e y, usamos o comando load:--> clear--> x--> y--> load(valores.dat, dd)--> ddDenindo a Func ao de Ajuste CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB5.1 DenindoaFuncaodeAjusteA func ao de ajuste desenvolvida para ambiente Scilabbasea-se no m etodo dos Quadrados Mnimos. Lem-brando que, quando aplicamos este m etodo minimizamos o resduo ao quadrado (ou seja, a diferenca entre ovalor ajustado e o valor real ao quadrado), que pode ser escrito da seguinte forma:< r, r >=m

i=1(yi g(xi))2(5.1)ondeyis aoelementosdovetoryquefornecemosvaloresreaisaseremajustadoseg(x)afunc aoaseraproximada para estes valores. O nosso objetivo e o de encontrar os coecientes da func aog(x) de maneiraque r seja o menor valor possvel (minimizac ao do resduo).Para os dados do exemplo da Sec ao 5, uma func ao que pode fornecer um bom ajuste e do tipo:g(x) = c1 ec2x+c3(5.2)A func ao (5.1), para o ambiente Scilab, retorna dois tipos de informac ao (como veremos abaixo): um vetorcom os coecientes de (5.2) e o resduo. Assim (curvas.sce):// Exemplo de ajuste de dados usando Scilab.clearload(valores.dat, dd)// Definindo a funcao residuo. Supondo que a funcao a ser ajustada// tenha parametros c_1, c_2, ... c_n, definimos a funcao residuo como://// erro = x_n+1 - g( x, c_1, c_2, ..., c_n )deff( erro = g(c,dd), erro = dd(2) - c(1)*exp( c(2)*dd(1) ) - c(3) )Nesta func ao r, os elementos dd(1) e dd(2) correspondem a primeira e segunda linha da matriz armaze-nada em valores.dat, ou seja, aos valores de x e y do exemplo da Sec ao 5. O m etodo de Quadrados Mnimosno Scilabsempre segue este padr ao: a ultima componente do vetor sempre corresponde a y.AFuncaodatafitOambiente Scilabpossui a func ao datafit que ajusta qualquer tipo de func ao pelo m etodo dos QuadradosMinmos. Esta precisa de tr es informac oes: a func ao a ser ajustadag(c,dd) (denida nos padr oes da sec aoanterior), os elementos do arquivo valores.dat, que foram armazenados em dd e um chute inicial para o c alculodos coecientes de (5.2). No nosso caso:c0 = [ 1; -1; 0 ]; // Chute inicial para os parametros.// Calculando o ajuste. A variavel "c" corresponde aos parametros// ajustados e a variavel "e" ao erro quadratico de ajuste.[c,e] = datafit(g, dd, c0);onde c e um vetor coluna contendo os coecientes da func ao G(x) e e e o resduo nal.Ap os a execuc ao deste passo, j a e possvel denir a func ao G(x) com os coecientes calculados por datafit(note que o Scilabn ao confunde g com G):36Spline C ubicas em Ambiente Scilab CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB// Definindo a funcao de ajuste.deff( y1 = G(x), y1 = c(1) * exp( c(2) * x ) + c(3) );// Fazendo os graficos dos dados e da funcao obtida!x = dd(1, :);y = dd(2, :);xsetech([0, 0, 0.48, 0.48])xtitle("Pontos para ajuste")plot2d(x, y, style = [-1])xsetech([0.5, 0, 0.48, 0.48])xtitle("Curva ajustada")fplot2d(x, G, 2)xsetech([0, 0.5, 1, 0.48])xtitle("Ajuste x pontos")plot2d(x, y, style = [-1])fplot2d(x, G, 2)5.2 SplineC ubicasemAmbienteScilabA interpolac ao utilizando polin omios de ordem elevada muitas vezes produz resultados mal comportados.Existem v arios m etodos para eleminar esse problema. Dentre eles, as Splines C ubicas s ao muito populares. NoScilab, a interpolac ao por splines c ubicas e executada pelas func oes splin e interp. No help do Scilab, osdetalhes para o uso destas func oes est ao disponveis.AFuncaosplinA func aosplin toma os dadosx eye os valores desejadosxi(normalmentexi [x0, xn]), encontra opolin omio da interpolac ao por spline c ubica que se adequa a x e y, e ent ao calcula os polin omios para encontraros valores de yi correspondente a cada valor xi.Notac ao:d = splin( x, y, tipodespline ), onde:x: vetor (linha ou coluna) com, no mnimo, 2 elementos;y: vetor (linha ou coluna) no mesmo formato de x;tipodespline: selec ao do tipo de spline a ser calculada;d: vetor no mesmo formato de x (di e a derivada da spline em xi).Descric ao: a func aosplin calcula a spline c ubica (ou sub-spline)s que interpola os pontos (xi, yi), isto e, temos s(xi) =yi, i = 0 :n. A spline resultante s e completamente denida pelos pontos (x, y, d),onde d e um vetor com as derivadas de xi:s

(xi) = di (conhecida como forma de Hermite).O c alculo das splines em alguns pontos tem de ser feitos pela func ao interp.Tipos de Splines: podemos calcular diferentes tipos de splines c ubicas,aqui vamos ver as sintaxe dassplines c ubicas natural e restrita:37Spline C ubicas em Ambiente Scilab CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILABnatural: a spline c ubida e calculada supondo s

(x0) = s

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

(x0) =f

(x0) es

(xn) =f

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

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

(x0) = s

(xn));38Spline C ubicas em Ambiente Scilab CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILABxi0.1 0.2 0.3 0.4yi-0.62049958 -0.28398668 0.00660095 0.24842442. Restrita, com f

(0.1) = 3.58502082 e f

(0.4) = 2.16529366.// Spline (spline_aula.sce)clearclf()x = [0.1 0.2 0.3 0.4];y = [-0.62049958 -0.28398668 0.00660095 0.2484244];xx = linspace(0.1, 0.4);subplot(1,2,1)xtitle(Interpolacao Natural)plot2d(x, y, -5, rect = [0.08, -0.7, 0.45, 0.3])dnat = splin(x, y, "natural");ynat = interp(xx, x, y, dnat);plot2d(xx, ynat, 2)subplot(1,2,2)xtitle(Interpolacao Restrita)plot2d(x, y, -4, rect = [0.08, -0.7, 0.45, 0.3])t = [3.58502082 2.16529366];drest = splin(x, y, "clamped", t);deff(yrest = frest(xx), yrest = interp(xx, x, y, drest));fplot2d(xx, frest, 2)39Exerccios CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB5.3 Exerccios1. Seja a tabela:i 1 2 3 4 5 6 7 8 9 10xi5 6 7 8 9 10 11 12 13 14yi0.01 0.05 0.08 0.14 0.18 0.26 0.44 0.51 0.79 1.02(a) Salve os dados da tabela acima usando o comando save e carregue-o no ambiente Scilabusandoload.(b) Faca o gr aco da dispers ao dos dados da tabela acima.(c) Use a func ao datafit para obter os seguintes polin omios:i. p1(x) = a + bx;ii. p2(x) = a + bx + cx2;iii. p3(x) = a + bx + cx2+ dx3;iv. y = axb;v. y = abx.(d) Use a func ao splin - natural para ajustar os dados da tabela acima.(e) Qual dos casos e o melhor ? Por qu e ?2. Seja a tabela contendo o tempo de germinac ao de sementes (dias) em func ao da temperatura m edia dosolo (C) para doze locais de plantio:Temperatura (C) 14 6 3 6 7 6 7 4 8 7 6 4Germinac ao (dias) 10 26 41 29 27 27 19 28 19 31 29 33(a) Faca o diagrama da dispers ao dos dados;(b) Use a func ao datafit para determinar uma relac ao entre temperatura e o tempo de germinac ao dassementes;(c) Faca o gr aco com a func ao encontrada e o diagrama de dispers ao.3. Um autom ovel, viajando por uma estrada reta, e cronometrado em diversos pontos. Os dados dessasobservac oes s ao apresentados na tabela a seguir:Tempo (s) 0 3 5 8 13Dist ancia (ft) 0 225 383 623 993Velocidade (ft/s) 75 77 80 74 72Use um spline c ubico restrito para prever a posic ao do autom ovel e sua velocidade quanto t = 10s.4. Suspeita-se que o alto conte udo de tanino existente nas folhas maduras do carvalho inibe o crescimentodas larvas da mariposa de inverno, que danicam severamente essas arvores em certos anos. A tabela aseguir relaciona o peso m edio de duas amostras de larvas em v arios momentos durante o perodo de 28dias ap os o nascimento. A primeira amostra foi cultivada em folhas de carvalho novas e a segunda, emfolhas maduras da mesma arvore.(a) Faca o gr aco de dispers ao dos dados;40Exerccios CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILABDia 0 6 10 13 17 20 28Peso m edio da amostra 1 (mg) 6.67 17.33 42.67 37.33 30.1 29.31 28.74Peso m edio da amostra 2 (mg) 6.67 16.11 18.89 15 10.56 9.44 8.89(b) Use um spline c ubico natural para aproximar a curva de peso m edio de cada amostra;(c) Encontre uma aproximac ao do peso m edio m aximo para cada amostra determinando o ponto m aximodo spline;(d) Faca um gr aco com as duas curvas, em cores diferentes e com legenda para cada curva, juntamentecom a dispers ao dos dados.5. O custo do seguro sa ude nos Estados Unidos para os anos de 19942001, em bilh oes de d olares, e dadopela tabela:Ano 1994 1995 1996 1997 1998 1999 2000 2001Seguro Sa ude 55.8 58.0 56.6 59.3 63.6 65.7 70.6 75.0(a) Faca o gr aco de dispers ao dos dados;(b) Use a func ao datafit para ajustar uma curva que melhor modelo o custo do seguro sa ude ao longodos anos;(c) Gere um gr aco com a func ao encontrada e a dispers ao dos dados.6. O Consumer Price Index (CPI) e uma medida da m edia de precos, num determinado perodo, de servicose produtos. Para estabelecer uma base para comparac ao, a m edia anual de precos mensais nos anos de198284 e usada para gerar os dados que segue na tabela abaixo para produtos derivados do tabaco.Atabela representa a porcentagem de consumo deste produto.Ano 1970 1975 1980 1985 1990 1995 1999 2000 2001Tabaco (CPI) 43.1 54.7 72.0 116.7 181.5 225.7 355.8 374.9 425.2(a) Faca o gr aco da dispers ao destes dados;(b) Usando a func ao datafit ajuste a melhor curva para estes dados;(c) A curva pode ser uma reta ? Por qu e ?(d) Acrescente no gr aco do item (a) a curva obtida;(e) Usando a curva obtida, qual ser a o CPI do tabaco em 2010 ?7. Anualmente, ogovernodosEstadosUnidosgastaboapartedoseudinheirocomadvidainterna. Atabela que segue mostra a porcentagem destinada para o pagamento da dvida interna para os anos de19912002.Ano 1991 1993 1995 1997 1999 2001 2002% gasta 21.6 20.8 22.0 22.2 20.7 19.3 16.4(a) Faca o gr aco da dispers ao destes dados;(b) Usando a func ao datafit ajuste a melhor curva para estes dados;41Exerccios CAPITULO 5. AJUSTE DE CURVAS EM AMBIENTE SCILAB(c) Acrescente no gr aco do item (a) a curva obtida;(d) Usando a curva obtida, qual ser a o gasto com a dvida interna em 2010 ?8. O census nos Estados Unidos e realizado a cada 10 anos. A tabela abaixo mostra o census realizadodesde 1940 at e 2000 (em milh ao).Ano 1940 1950 1960 1970 1980 1990 2000Populac ao U.S. 132 151 179 203 227 249 281(a) Faca o gr aco da dispers ao destes dados;(b) Usando a func ao datafit ajuste para uma curva linear;(c) Acrescente no gr aco do item (a) a curva obtida;(d) Usando a curva obtida, estime a populac ao em 2010 e 2020;(e) Usando a curva obtida, estime o ano que a populac ao atingir a 320 milh oes.9. A empresa Delta Airlines publicou uma tabela mostrando a temperatura (em F) fora do avi ao quando estetroca de altitude (em 1000 p es).x (Altitude em 1000 p es) 1 5 10 15 20 30 36.087y (Temperatura) 56 41 23 5 -15 -47 -69(a) Faca o gr aco da dispers ao destes dados;(b) Usando a func ao datafit ajuste para uma curva linear;(c) Acrescente no gr aco do item (a) a curva obtida;(d) Usando a curva obtida, determine a temperatura a 40000 p es.42CAPITULO 6Gr acos Tri-Dimensionais6.1 GracosTri-dimensionaisO comando plot3d() permite tracar gr acos de superfcies z = f(x, y).Na notac aoScilab, as vari aveis independentesx ey s ao vetores de dimens aon1 en2, respectivamente,e a vari avelz e uma matriz de dimenc ao n1 x n2. Ent ao, por essa denic ao, o elemento z(i,j) e o valor dasuperfcie no ponto ( x(i), y(j) ).Para exemplicar o uso de plot3d(), vamos considerar a func ao f(x, y) = cos(x) sen(y) no intervalo [0, 2],com incremento 0.1 (graftri.sci).x = [0:0.1:2*%pi];y = x;z = cos(x)*sin(y);plot3d(x, y, z)Al em da func ao plot3d(), e de suas variac oes, o Scilabimplementa outras func oes que permitem tracargr acos tri-dimensionais. Dentre elas, destacamos:fplot3d: permite tracar gr acos de superfcies por func oes, como no exemplo abaixo (graffplot3d.sci):clearclf()deff( z = f(x, y), z = x.^4 - y.^4 )x = linspace(-3,3, 30);y = x;fplot3d( x, y, f, alpha = 5, theta = 31 )fplot3d1: permite tracar gr acos de superfcies denidas por func oes, como no caso anterior. Neste caso,as superfcies s ao apresentadas em uma graduac ao de cores diferente do comando acima.6.1.1 Gracos3-DEspeciaisAs seguintes func oes permitem tracar gr acos tri-dimensionais especiais:param3d: permite tracar curvas param etricas.hist3d: permite tracar histogramas 3-D.Gr acos Tri-dimensionais CAPITULO 6. GRAFICOS TRI-DIMENSIONAIScontour: permite tracar curvas de nvel para uma func ao 3-D.// Exemplos de graficos 3-D especiais (graf_3dEsp.sci)subplot(1,2,1)param3dsubplot(1,2,2)hist3dDevo ressaltar que a sintaxe de todos os comandos pode ser vericada usando o help do Scilab.Acompanhe mais este exemplo (param.sci) com algumas func oes especiais para gr acos 3-D.clearclf()subplot(2,2,1)x = linspace(0, 10*%pi);param3d(sin(x), cos(x), x)subplot(2,2,2)clearx = linspace(0,3*%pi);z1 = sin(x);z2 = sin(2*x);z3 = sin(3*x);y1 = zeros(x);y3 = ones(x);y2 = y3/2;param3d1([x, x, x], [y1, y2, y3], list([z1, z2, z3], [2 3 4]))// list([z1, z2, ..., zn], [colors]): o segundo elemento serve para// atribuir cores para cada curva.subplot(2,2,3)clearx = %pi*[-10:10]/10;y = x;deff(z = f(x, y), z = sin(x)*cos(y))fcontour(x, y, f, 8) // ultimo elemento: no. de curvas de nivelsubplot(2,2,4)cleart = linspace(-2,2);44Detalhes da Func ao plot3d CAPITULO 6. GRAFICOS TRI-DIMENSIONAISdeff(z = f(x, y), z = 3*x - x^3 - 3*x*(y - 5)^2)z = feval(t, t, f);contour(t, t, z, 15)Qual a diferenca entre param3d e param3d1 ? E entre contour e fcontour ?6.2 DetalhesdaFuncaoplot3dApresentamos aqui algumas ferramentas adicionais para a execuc ao de gr acos 3D em ambienteScilab,uma vez que a func ao plot3d inclui os seguintes formatos:plot3d( x, y, z, [theta, alpha, leg, flag, ebox] );plot3d( x, y, z, ) (neste caso, possui as mesmas opc oes da func ao plot2d);plot3d( xf, yf, zf, [theta, alpha, leg, flag, ebox] );plot3d( xf, yf, zf, );plot3d( xf, yf, list(zf, colors), [theta, alpha, leg, flag, ebox] );plot3d( xf, yf, list(zf, colors), ).onde:x, y, z s ao as coordenadas dos eixos x, y e z, respectivamente;theta e alpha s ao valores dados para a visualizac ao da janela gr aca 3D(o angulo usado para visualizac aoda gura);leg e usado para denir uma legenda para cada eixo, separado por @, por exemplo:X@Y@Z;Atenc ao:Na func ao plot2d, leg e usado para atribuir uma legenda em cada curva disposta na mesmajanela gr aca.xf, yf e zf s ao matrizes de tamanho (nf, n), onde dene-se as faces usadas para desenhar a superfcie.No caso, existem n faces, e cada face e denida por uma malha com nf n os.flag e um vetor com tr es n umeros:flag = [mode, type, box], sendo:mode usa um valor inteiro para colorir a superfcie desenhada (veja o help para explorar a escala decores surfaceproperties);type ajusta automaticamente a escala da gura, usando valores inteiros de 0 a 6;box modela o tipo de escala da gura (veja axesproperties).ebox estabelece os limites do gr aco.O valor associado` a essa opc ao e um vetor real com seis entradas[xmin, xmax, ymin, ymax, zmin, zmax], onde xmin, xmax, ymin, ymax, zmin e zmax indicam os valoresmnimos e m aximos para os eixos x, y e z, respectivamente.45Detalhes da Func ao plot3d CAPITULO 6. GRAFICOS TRI-DIMENSIONAIS6.2.1 Funcaoeval3deeval3dpAs func oes eval3d e eval3dp criam uma malha para fazer o gr aco de uma func ao em tr es dimens oes.z = eval3d(funcao, x, y):funcao: uma func ao que aceita vetores como argumento;x, y; vetores de tamanhos (1, n1) e (1, n2), mas e aconselh avel que os argumentos x e y tenhamo mesmo tamanho;z: matriz de tamanho (n1, n2) (malha de n os pela intersecc ao dos vetores x e y).Exemplo (exeval3d.sce):x=-5:5;y=x;deff(z = f(x,y), z = x.*y);z=eval3d(f,x,y);plot3d(x,y,z);[xf, yf, zf] = eval3dp(funcao, p1, p2), calcula as faces de uma superfcie param etrica 3D, onde:[xf, yf, zf]: matrizesdetamanho( 4, (n-1)*(m-1) ). Oelementosxf(:, i), yf(:, j)ezf(:, i) s ao as coordenadas dos eixos x, y e z, respectivamente, de 4 pontos dos 4 lados de cadaface;funcao: uma func ao implementada em ambiente Scilab;p1: um vetor de tamanho n;p2: um vetor de tamanho m;Exemplo (exeval3dp.sce):p1=linspace(0,2*%pi,20);p2=linspace(0,2*%pi,20);deff("[x,y,z] = sp(p1,p2)", ["x=p1.*sin(p1).*cos(p2)";.."y=p1.*cos(p1).*cos(p2)";.."z=p1.*sin(p2)"])[xf,yf,zf]=eval3dp(sp,p1,p2);plot3d(xf,yf,zf)6.2.2 Exemplo// spline_solido.sceclearclf()x = [0:0.2:4];y = sqrt( 4 - (x - 2)^2 );subplot(2,2,1)plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])b = splin(x, y, natural);xx = linspace(0,4);yy = interp(xx, x, y, b);46Detalhes da Func ao plot3d CAPITULO 6. GRAFICOS TRI-DIMENSIONAISplot2d(xx, yy, 2)xtitle(Grafico da Interpolacao por vetores)subplot(2,2,2)deff(ys = fs(xs), ys = interp(xs, x, y, b));plot2d(x, y, -1, rect = [-0.1 -0.1 4.1 2.1])fplot2d(xx, fs, 3)xtitle(Grafico da Interpolacao por funcao)subplot(2,2,3)deff( [xa,ya,za] = revol(zp, theta), [xa = fs( zp ) .* cos( theta ),...ya = fs( zp ) .* sin( theta ),...za = zp] );// A nova discretizacaozp = linspace( min( x ), max( x ), 30 );theta = linspace( 0, 2*%pi, 30 );// Faces do poligono (coisa de computacao grafica...)[xf, yf, zf] = eval3dp( revol, zp, theta );// O grafico, finalmente!plot3d( xf, yf, zf, alpha = 88, theta = 35 );xtitle(Solido de revolucao)subplot(2,2,4)plot3d( xf, yf, zf, alpha = 85, theta = 30, flag = [30, 2, 3] )xtitle(Solido de revolucao com outra cor!)6.2.3 OutroExemplo// solido_ex.sceclearclf()subplot(1,2,1)deff(y = f(x), y = exp(-x.^2))x = linspace( -2, 2 );fplot2d( x, f, 2, rect = [-2, 0, 2, 1.2] )subplot(1,2,2)deff([xs, ys, zs] = rev(r, t), [xs = f(r) .* cos(t), ...ys = f(r) .* sin(t), zs = r])r = linspace( -2, 2, 30 );t = linspace( 0, 2*%pi, 30 );47[xf, yf, zf] = eval3dp( rev, r, t );plot3d( xf, yf, zf, alpha = 82, theta = 50, flag = [17, 2, 3] )6.3 Exerccios1. Faca o gr aco das func oes abaixo:(a) f(x, y) = x2+ y2;(b) f(x, y) = xy + 3x;(c) f(x, y) = x2+ y21;(d) f(x, y) = 5;(e) f(x, y) = y2+ 3x;(f) f(x, y) = xy3+ 4x22;(g) f(x, y) =_1 x2y2;(h) f(x, y) =_x2+ y2;(i) f(x, y) = y sen(x);(j) f(x, y) = x2y;(k) f(x, y) = 4x2+ y2.2. Esboce gracamente as curvas de nvel associadas a f:(a) f(x, y) = y2x2;(b) f(x, y) = xy;(c) f(x, y) = 3x 2y;(d) f(x, y) = x2+ y2.3. Facaos olidoderevoluc aodasseguintesfunc oes(escolhaointervaloeoeixoderotac aoadequada-mente):(a) f(x) = x3;(b) f(x) = x 1;(c) f(x) = |x|;(d) f(x) =1x;(e) f(x) = 4 x2;(f) f(x) = x24;(g) f(x) =1(x4)2;(h) f(x) = (4 + x2);(i) f(x) = 2 x;(j) f(x) = ln(x);(k) f(x) = ex.48CAPITULO 7Exerccios Adicionais1. Podemos denir as func oes seno, cosseno e tangente hiperb olicos como:sinh (x) =exex2, cosh (x) =ex+ex2, tanh (x) =exexex+exEscreva tr es func oesno Scilabque implementem o seno, o cosseno e a tangente hiperb olicos;Escreva um programa que utilize suas func oes para desenhar a forma das func oes seno, cosseno etangente hiperb olicos numa mesma janela gr aca.2. O produto vetorial entre dois vetores V1 e V2 e denido como:V1 V2=(Vy1Vz2 Vy2Vz1) i+(Vz1Vx2 Vz2Vx1) j+(Vx1Vy2 Vx2Vy1) konde V1=Vx1i+Vy1j+Vz1keV2=Vx2i+Vy2j+Vz2k.Escreva uma func ao para calcular o produto vetorial de dois vetores V1 e V2. Note que essa func aoretorna um vetor real como resultado;Utilize a func ao para calcular o produto vetorial dos vetores V1 = [2, 4, 0.5] e V2 = [0.5, 3, 2].3. Escreva uma func ao chamada minmax que tente localizar os valores m aximos e mnimos de uma func aoreal f(x) arbitr aria dentro de um intervalo xo [a, b]. Os argumentos de entrada de minmax devem ser:func O nome da func ao;primval O primeiro valor de x (a, no intervalo de busca);ultval O ultimo valor de x (b, no intervalo de busca);passos O n umero de passos de busca.Os seguintes argumentos de sada devem ser:xmin O valor de x no qual o mnimo foi encontrado;minvalue O mnimo encontrado de f(x);xmax O valor de x no qual o m aximo foi encontrado;maxvalue O m aximo encontrado de f(x).4. Escrevaumprogramadetesteparaafunc aominmaxcriadanoexerccioanterior. Oprogramadevepassar para minmax uma func ao denida pelo usu ario f(x) = x35x2+ 5x 2, e encontrar o mnimo eo m aximo com 200 passos no intervalo 1 x 3. Os valores resultantes de mnimo e m aximo devemser impressos.5. A derivada de uma func ao contnua f(x) e denida pela equac ao:ddxf(x) = limx0f(x + x) f(x)xEm uma func ao amostrada, a denic ao se torna:f

(xi) =f(xi+1) f(xi)x(7.1)onde x = xi+1xi. Suponha que um vetor vect cont em nsamp amostras de uma func ao espacadas dedx.Escreva uma func ao que calcule a derivada desse vetor usando a aproximac ao em (7.1). A func aodeve vericar se dx e maior que zero para previnir erros de divis ao por zero na func ao.Paravericarsuafunc ao, voc edevegerarumconjuntodedadoscujaderivadasejaconhecidaecomparar o resultado da func ao com a resposta correta. Uma boa escolha para uma func ao de teste e f(x) = sen(x). Do c alculo elementar, sabemos que f

(x) = cos(x). Gere um vetor com 100 valoresda func ao f(x) = sen(x), iniciando com x = 0 e utilizando um passo x = 0.05. Calcule a derivadado vetor com a sua func ao e compare os resultados com a resposta correta.Faca um gr aco com os valores calculados pela equac ao (7.1) de maneira discretizada e um gr acoda func ao f(x) = cos(x) contnua.Qu ao pr oximo cou a sua func ao do c alculo da resposta correta para a derivada ?6. A forca gravitacional Fentre dois corpos com massas m1 e m2 e dada pela equac ao:F=Gm1 m2r2ondeG e a constante gravitacional _6.672 1011Nm2/kg2_, m1em2s ao as massas dos corpos emquilogramas e r e a dist ancia entre os dois corpos. Escreva uma func ao para calcular a forca gravitacionalentre dois corpos dadas as suas massas e a dist ancia entre eles. Teste a sua func ao determinando aforca sobre um sat elite de 800 kgem orbita a 38000 km da superfcie da Terra. (A massa da Terra e de5.98 1024kg.)7. Suponha que voc e tenha uma quantidade de dinheiro Pem um investimento no banco (usamos Ppara in-dicar valor presente). Se o banco pagar os juros com taxa de i% ao ano e compuser os juros mensalmente,a quantidade de dinheiro que voc e ter a no banco depois de n meses ser a dada pela equac ao:F= P_1 +i1200_nondeF e o valor futuro da conta ei12 e a taxa de juros mensal(o fator extra de 100 no denominadorconverte a taxa de interesse de porcentagens para frac oes). Escreva um programa para ler uma quantiainicialPe uma taxa de juros anuali, calcular e gerar uma matriz do valor futuro do investimento a cadam es dos pr oximos cinco anos.50CAPITULO 7. EXERCICIOS ADICIONAIS8. Os antigos babil onios usavam a seguinte aproximac ao (baseada no M etodo de Newton) para calculara:xk+1 =12_xk +axk_Escreva uma func ao para calcular a usando a aproximac ao acima:A sua func ao deve receber um chute inicial para a raiz;Execute o c alculo acima at e que |xk+1 xk| < , onde e um valor sucientemente pequeno;Use a sua func ao para calcular 25, 21 e 5000, e compare com os valores fornecidos pela calcu-ladora e/ou pelo Scilab.9. Usando o m etodo de Newton, podemos calcular a raizpa, a 0 atrav es da seguinte f ormula de recorr ecia:xx+1 =1p_(p 1)xk +axp1k_, com x0> 0.Escreva uma func ao para calcularpa usando a aproximac ao acima:A sua func ao deve receber um chute inicial para a raiz e a sua pot encia (p);Execute o c alculo acima at e que |xk+1 xk| < , onde e um valor sucientemente pequeno;Use a sua func ao para calcular3125,414641 e314,e compare com os valores fornecidos pelacalculadora e/ou pelo Scilab.10. O M etodo de Newton pode ser aplicado a qualquer equac ao contendo func oes cujas derivadas possamser calculadas. Por exemplo, ache uma aproximac ao para o recproco de um n umero positivo C, denindoa func ao f(x) =1x C e aplicando o M etodo de Newton.Observac ao: O M etodo de Newton aplicado a essa func ao nos permite calcular o inverso de um n umerosem efetuar nenhuma divis ao! Este m etodo e util porque, na maioria dos computadores de alta velocidade,a operac ao de divis ao consume mais tempo do que v arias multiplicac oes e adic oes juntas.Escreva uma func ao (noinverso.sci)para este problema onde devemos fornecer apenas o n umeroC.Escreva um programa que leia a func ao noinverso.sci e execute a func ao para um dado C.Dadox0, f(x), f

(x), max e 1: Para k = 0 at e k = max fac a2: xx+1 = xk f(xk)f

(xk)3: Se |f(xk+1)| ou |xk+1 xk| ent ao4: PARE, x = xk+15: Fim do condicional6: Se k = max ent ao7: PARE, o m etodo n ao converge para a soluc ao.8: Fim do condicional9: Fim do lac oAlgoritmo 2: M etodo de Newton-Raphson51Refer encias Bibliogr acas[1] R. L. Burden, J. D. Faires. An alise Num erica. Pioneira Thomson Learning, 2003.[2] F. F. Campos Fo. Algoritmos Num ericos. LTC Editora, 2001.[3] S. J. Chapman. Programac ao em Matlabpara Engenheiros. Pioneira Thomson Learnin, 2003.[4] D. Hanselman, B. Littleeld. Matlab6 Curso Completo, Pearson Prentice Hall, 2003.[5] D. R. Hill, D. E. Zitarelli. Linear Algebra Labs with Matlab. Third Edition, Pearson Prentice Hall, 2004.[6] E. Y. Matsumoto. Matlab7: Fundamentos. EditoraErica, 2004.[7] P. S. M. Pires. Introduc ao ao Scilab: vers ao 3.0. http://www.dca.ufrn.br/~pmotta[8] www.rau-tu.unicamp.br/scilab/[9] http://www.scilab.org52