20
---~-_.,-,~.------ ,-jj ...•. ;! . .:,~> ~i~i($, ', ..•. ~-~~;r ~}~~ '~r , ~ li', 11 r '~I.:-: .~-'-----.;~ _ Capítulo 3 Programação com MATlAS 49 Considerando tal raciocínio, este capítulo apresentará uma introdução de como programas desenvolvidos no MATL~B podem ser usados para obter determinadas soluções. 3.1.1 Programas comuns (script files) Um scriptlile (ou script ou simplesmente "programa" ou "rotina") trata-se de uma série de comandos do MATLAB que são salvos em um arquivo e podem ser execu- tados em mais de uma ocasião. Para usar o script, digite o nome do arquivo na com- mand window ou selecione a opção Run no menu Debug da janela edit window. 50.6175 9.8100 Desenvolva um programa para calcular a velocidade do saltador de bungee jumping em queda livre para o caso de a velocidade inicial ser zero. Solução .. Abra o editor com a seleção do menu: File, New, M-file e digite as seguintes linhas de comando para calcular a velocidade do saltador de bungee jumping em queda li- vre em um ~'nstante de tempo específico [lembre-se da Equação (1.9)]: '-j g "" 9.81;~m = 68.1; t = 12; cd = 0.25; v"" sqrt(g * m / cd) * tanh(sqrt{g * cd / m) * t) Salve o arquivo como scriptdem.o.ffi. Retorne para a command window e digite » scriptdemo O resultado será exibido como .V 3.1 ARQUIVOS-M Uma maneira comum de operar o MATLAB é inserir um comando por vez na com- mand window. Os programas de MATLAB ou arquivos-M- (M-files), no entanto, fornecem uma maneira alternativa - e mais dinâmica - de efetuar operações: um programa de MATLAB consiste em uma série de instruções ou comandos que po- dem ser executados todos de uma vez. Observe que a nomenclatura "arquivo-M" ou "M~file" vem do fato de os programas desenvolvidos no MATLAB serem salvos com a extensão .m. Tais arquivos podem ser de dois tipos: programas comuns (script files) ou funções (function files). , Assim, o cálculo é exibido como se cada uma das linhas de comando tive~se sido digitada .• individualmente na commarid window. Por fim, determine o valor de g digitando: »g 9 EXEMPLO 3.1 Scriptfile (ou proglomo) . , , " c. r .'~: , '1; , .~;. .: ••• Di+] = dD Cd -~ g- -vivi dI m Aprendemos também que essa equação poderia ser resolvida com o método de Euler: dOi Di + dfó.t Essa equação pode ser usada repetidamente para calcular a velocidade como uma função do tempo; porém, para que o resultado seja o mais acurado possível. vários pequenos passos devem ser tomados, o que pode ser trabalhoso quando feito à mão, mas se torna muito mais fácil quando operado com o MATLAB. .- .- .- o obJetivo principal deste capitulo é aprender como escrever programos no MATLAS (arquivos.MJ paro implementor métodos numéricos. Após esta leitura completo, você seró capaz de: ./ Aprender como crior orquivos-M bem documentados no janela edit window e como chamá-Iol o partir da command window . Entender os diferenças entre seripls e funções. Saber como inserir comentários de ajuda nos funções . Definir orquiyas-M de modo que eJes solicitem informações oos usuários de forma interativa e exibam resultados na command window . oi' Entender o papel das subfunções e como elos são acessados. ../ Apr~nder como criar arquivos de dados e recuperé.los. oi' Aprender como escrever um orquivo-M cloro e bem documentado empregando progrcmação estruturado paro implemente r lógico e repetição . Reconhecer o diferença entre os construções if elseif e switch. Reconhecer a diferença entre os construções for end e vlhile. ../ Aprender como enimar gráficos do MATLAB. oi' Compreender o que é vetorizeçõo e quais os vantagens dele. oi' Saber como usar funções anônimos poro passar funções o arquivos_Mo do tipo "funções-funções" .. .- .- Programação com MATLAB ~ OBJETIVOS DO CAPíTULO VOCÊ TEM UM PROBLEMA No Capítulo 1, usamos um balanço de forças para desenvolver um modelo matemá- tico a fim de prever a velocidade de queda de um saltador de bungee jumping. Esse modelo resultou na seguinte equação diferencial: " i ! " I; ~ ,l r, rl,1 . ,' •i ,li .1 'I' ~I'I " I" . '/ ,I " ,1 ' li! ' li I' j :'~ ,1 l, h I~ I , .I r I r. " ;::1 '" I, 'li I" I J I ~ I ) ,"I ii ~Ji!l l,~,1r,.: 1 w.U ~,

I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

  • Upload
    lamdat

  • View
    213

  • Download
    0

Embed Size (px)

Citation preview

Page 1: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

---~-_.,-,~.------,-jj...•.;!

. .:,~>~i~i($,',..•.~-~~;r~}~~

'~r,~

li',11 r '~I.:-:.~-'-----.;~_ Capítulo 3 Programação com MATlAS 49

Considerando tal raciocínio, este capítulo apresentará uma introdução de comoprogramas desenvolvidos no MATL~B podem ser usados para obter determinadassoluções.

3.1.1 Programas comuns (script files)Um scriptlile (ou script ou simplesmente "programa" ou "rotina") trata-se de umasérie de comandos do MATLAB que são salvos em um arquivo e podem ser execu-tados em mais de uma ocasião. Para usar o script, digite o nome do arquivo na com-mand window ou selecione a opção Run no menu Debug da janela edit window.

50.6175

9.8100

Desenvolva um programa para calcular a velocidade do saltador de bungee jumping emqueda livre para o caso de a velocidade inicial ser zero.

Solução .. Abra o editor com a seleção do menu: File, New, M-file e digite as seguinteslinhas de comando para calcular a velocidade do saltador de bungee jumping em queda li-vre em um ~'nstante de tempo específico [lembre-se da Equação (1.9)]:

'-j

g "" 9.81;~m = 68.1; t = 12; cd = 0.25;v"" sqrt(g * m / cd) * tanh(sqrt{g * cd / m) * t)

Salve o arquivo como scriptdem.o.ffi. Retorne para a command window e digite

» scriptdemo

O resultado será exibido como

.V

3.1 ARQUIVOS-M

Uma maneira comum de operar o MATLAB é inserir um comando por vez na com-mand window. Os programas de MATLAB ou arquivos-M- (M-files), no entanto,fornecem uma maneira alternativa - e mais dinâmica - de efetuar operações: umprograma de MATLAB consiste em uma série de instruções ou comandos que po-dem ser executados todos de uma vez. Observe que a nomenclatura "arquivo-M"ou "M~file" vem do fato de os programas desenvolvidos no MATLAB serem salvoscom a extensão .m. Tais arquivos podem ser de dois tipos: programas comuns (scriptfiles) ou funções (function files).

,Assim, o cálculo é exibido como se cada uma das linhas de comando tive~se sido digitada

.• individualmente na commarid window.Por fim, determine o valor de g digitando:»g9

EXEMPLO 3.1 Scriptfile (ou proglomo)

. ,,

"

c .

r

.'~:

,

•'1;

,.~;..:

•••

Di+] =

dD Cd-~ g- -vividI m

Aprendemos também que essa equação poderia ser resolvida com o método deEuler:

dOiDi + dfó.t

Essa equação pode ser usada repetidamente para calcular a velocidade comouma função do tempo; porém, para que o resultado seja o mais acurado possível.vários pequenos passos devem ser tomados, o que pode ser trabalhoso quando feitoà mão, mas se torna muito mais fácil quando operado com o MATLAB.

.-.-.-

o obJetivo principal deste capitulo é aprender como escrever programos no MATLAS (arquivos.MJparo implementor métodos numéricos. Após esta leitura completo, você seró capaz de:

./ Aprender como crior orquivos-M bem documentados no janela edit window e como chamá-Iolo partir da command window .

Entender os diferenças entre seripls e funções.

Saber como inserir comentários de ajuda nos funções .

Definir orquiyas-M de modo que eJes solicitem informações oos usuários de forma interativa eexibam resultados na command window .

oi' Entender o papel das subfunções e como elos são acessados.

../ Apr~nder como criar arquivos de dados e recuperé.los.

oi' Aprender como escrever um orquivo-M cloro e bem documentado empregando progrcmaçãoestruturado paro implemente r lógico e repetição .

Reconhecer o diferença entre os construções if elseif e switch.Reconhecer a diferença entre os construções for end e vlhile.

../ Aprender como enimar gráficos do MATLAB.

oi' Compreender o que é vetorizeçõo e quais os vantagens dele.

oi' Saber como usar funções anônimos poro passar funções o arquivos_Mo do tipo "funções-funções" ..

.-.-

Programação com MATLAB

~ OBJETIVOS DO CAPíTULO

VOCÊ TEM UM PROBLEMA

No Capítulo 1, usamos um balanço de forças para desenvolver um modelo matemá-tico a fim de prever a velocidade de queda de um saltador de bungee jumping. Essemodelo resultou na seguinte equação diferencial:

"

i

!

"I;~

,lr,rl,1

. ,'•i

,li.1'I'

~I'I" I". '/,I ",1 '

li! 'liI 'j :'~,1l,hI~I,

. I

rI

r.";::1

'" I ,'li I"IJI

~ I)

,"Iii

~Ji!l

l,~,1r,.:1w.U

~,

Page 2: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

51Capítulo 3 Programaçõo com MATlAS

livre.m. Para chamar a função, retorne à command win-

de arraste de segunda ordem (kg/m)

Undefined function ar '.;ariable -g???

li7re - velocidade do saltador com arraste de segunda ordem

Observe que, no fim do exemplo anterior, se tivéssemos digitado

»g

a seguinte mensagem teria sido exibida

queda

v = velocidade para baixo (m/s)Caso você esquecesse o nome dessa função, mas lembrasse que ela envolvia um saltador debungeejumping, você poderia digitar

» lookfor saltador

e a seguinte informação seria exibida

(s)

m = massa (kg)cd = coeficiente

saida:

queda _ livre: velocidade do saltador com arraste de segur,da ordemv=queda _ livre (t, m, cd) calcula a velocidade de queda li7re

~ de um corpo com arraste de segunda ordementrada: t

t = tempo

53.1878Para acessar os comentários de ajuda da função, digite:

» help queda _ livre

que resulta nos comentários a seguir:

50.6175

Uma vantagem da função é que ela pode ser chamada' repetidamente para diferentes valores deargumentos. Suponha que se queira calcular a velocidade de um saltador de 100kg após 8 s:

» queda _livre(B,lOO, O. 25)aDS :=

ans =

» queda_livre(l2,68.l,O.25)

O resultado será exibido como

% cd = coeficiente de arraste de segunda ordem (kg Im)% saida:i; v = velocidade para baixo (m/s)9 := 9.81; % aceleração da gravidadev := sqrt(g * m/cd) * tanh(sqrt(g * cd / m) * t};

Salve o arquivo como quedadow e digite

!'1

J:t

1I ,

1

;;;

>.

fup.ction var _ saida ~ nome funcao(lista argu",entos)

%Comentários _ de _ ajudadeclaraçõesvar _ saida = va lar;

onde var saida é o nome da variável de saída. nome funcao é O nome dafunção, li-;ta _ argumentos é a lista de argume~tos (de entrada) da função (istoé, valores separados por vírgulas que são passados para a função), Comentários -de _ ajuda é um pequeno texto que fornece ao usuário informações sobre a função(esse texto pode ser acessado digitando-se ~elp nome _ funcao na command win-dow) e declarações são as declarações do MATLAB (linhas de comando) quecalculam o '"alor atribuído à variável var saida_

Além de descrever a função, a primeira linha do Comentários _ de _ ajuda,chamada linha HI, é a linha recuperada pelo comando busca lookfor (lembre-se daSeção 2.6); assim, é importante incluir nesta linha palavras-chave relacionadas à

função.O arquivo-M deve ser salvo como nome funcao.m, para que a função possa

ser executada digitando-se nome funcao ;a command window, como ilustradono exemplo a seguir. Observe queapesar de o MATLAB ser case sensitive, o siste-ma operacional do seu computador pode não ser; portanto, considere que seu sistemapode não diferenciar nomes de função como queda livre e Queda livre,

distinguidos pelo MATLAB.

3.1.2 Funções (function files)As funções ou fimction files são arquivos-M que começam com a palavra func-~ion. Ao contrário dos scripts, as funções podem aceitar argumentos de entrada eretornar saídas, portanto, elas são análogas às funções definidas em linguagens deprogramação tais como Fortran, Visual Basic ou C.

A sintaxe para a função pode ser representada genericamente como

Parte 1 Modelagem, computadores e anólise de erros

function v = queda _ livre (t, m, c d)% queda _livre: -.;elocidade do saltador coro arraste de segunda ordem% v=queda _ li'.;re( t, m, c d) calcula a velocidade de queda livre~ de um corpo com arraste de segunda ordem

% entrada;% t = tempo (5)

% m '" massa (kg)

EXEMPLO 3.2 Function file ou funçãoI Como no Exemplo 3.1, calcule a velocidade do saltador de bungee jumping em queda livre,

mas agora use uma função para essa tarefa.Solução. Digite os seguintes comandos no file editor:

Note que, apesar de a variável 9 ter sido definida dentro do programa, ela mantém seu valorna área de trabalho (workspace) do MATLAB. Como veremos na próxima seção, isso éuma importante distinção entre os scripts e as funções.

50

:i

-11 '. 'I

"IhI.

;1 : li :'.::J~:;;rl

:;-- <_+ i.-' .,.r:'-@j (,tO:1' ., A .:J.: ,,: ': 'o ; ".;' ~=:~_...:.':.:. '", d-. ':' '. "t' .\;; : i;, ,..... .----------<-' ;.~~~-'.'.'''.,-."~ "-~_>~;J_fr~- III"L . 1

: ',,\(',

,\I ~\.'1

l"1',1"'.1''I \1'1.'1

1,11':

I "I \,I .15 ,:

\..... \

"":\';'.,.,.\."...~i"~;'!\ ~1",'I '

',L

Il:f':.'

Page 3: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

r~""~~k"

.,

,,'

i~\t\

t~

53Capítulo 3 Programação com MATLAB

acessível para a command window e para outras funções e scripts. Todas as outrasfunções (nesse caso, vel) são chamadas de sub/unções.

Uma subfunção é acessível apenas na função principal e em outras subfunçôesno arquivo-M em que ela reside. Se executarmos a função queda _ livre_subfunc.m na command window, Oresultado será idêntico ao do Exemplo 3.2:

» queda _livre _ subfünc( 12,68.1, 0.25)

ans =50.6175

No entanto, se tentarmos executar a subfunção vel, uma mensagem de erroaparecerá:

Como visto na Seção 3.1, a informação é passada para a função por meio da lista deargumentos de entrada e a informação de saída é obtida chamando a função por seunome. Duas outras funções nativas do MATLAB fornecem maneiras de inserir eexibir informações diretamente utilizando a command window.A função input. Esta função solicita valores ao usuário diretamente da COID-

mand window. Sua sintaxe é\

n.i.= input( '.ll1ensagem ~ de _ solicitacao')

A:lunção exibe a mensagenl de solicitacao, espera pelos dados digita-dos e, éntão, retoma o valor do teclado. Por exemplo,

m = input('t1assa (kg): ')

Quando essa linha é executada, a seguinte mensagem aparece:

Massa (kg):

Se o usuário insere um valor, o numero é atribuído à variável ro.A função inpu t também pode responder a entrada do usuário como uma string.

Para fazer isso, um 's' é acrescentado à lista de argumentos da função. Por exemplo,

nome = input{'Entre com seu nome: " 's')~'

A função dispo Esta'função, que fornece uma maneira útil de exibir um valor, tema seguinte sintaxe:

disp( valor)

onde valor é o valor a ser exibido. Ele pode ser uma constante numérica ou umavariável, ou ainda uma mensagem de texto delimitada por aspas simples; sua aplica-ção é ilustrada no exemplo a seguir.

» vel(12,68.1,O.25)??? Undefioed £unc~ion ar method 'vel' for input arguments of

type 'double'.

3.2 ENTRADA E SAíDA

ü;.,i

t

,

'\l•: j

vel(t, ro, cd)

2.8137

fuoctioo v9 = 9.81iV = sqrt(g >: ro 1 cd)*taoh(sqrt(g .,..cd / ro) * t);

end

fuoction v = queda _ li7::::e _ subfunc( t, m, cd}

v = vel(t, m, cal;eod

Esse arquivo-M seria salvo como queda _ livre _ subfuoc.ro. Em tais ca-sos, a primeira função é chamada/unção principal ou primária, e é a única funçãO

fuoctioo [media, desvio] '" stats(x)

o = leogth(x) i

media = sum(x)/Oidesvio = sqrt(sum( (x-media) ."2/(0-1)))i

Um exemplo de como essa função pode ser aplicada é:

» y = [8 5 10 12 6 7.5 4] i

» [m, d] = stats(y)

3.1.3 SubfunçõesFunções podem chamar outras funções, e embora tais funções possam existir comoarquivos-M separados, elas também podem estar contidas em um único arquivo.M,por exemplo, a função no Exemplo 3.2 (sem os comentários) poderia ser dividida em

duas funções e salva como um único arquivo-M:\

Embora também façamos uso de scripts, as funções serão nossa ferramenta de

programação principal para o restante deste livro.

d

7.5000

Então,. mesmo que g tenha um valor de 9,81 no arquivo-M da função, essavariável não tem um valor na área de trabalho do MATLAB. Como observado nofim do Exemplo 3.1, essa é uma diferença importante entre funções e scripts: en-quanto as variáveis de urna função são ditas locais e são apagadas depois de execu.tada a função, as variáveis em um serip! se mantêm mesmo depois de o programa

ser executado.Para casos em que as funções retornam mais que um resultado, as variáveiscom os resultados são separadas por vírgulas e delimitadas por colchetes. por exem-plo, a função a seguir, stats.m, calcula a média e o desvio-padrão de um vetor:

m

Observe que, embora as declarações end não sejam utilizadas para encerrar arquivos-M de uma única função, das

são incluídas quando subfunções demarcam as fronteiras entre a função principal e as subfunções.

52 Parte 1 Modelagem, computadores e on6lise de erroS

.l'I'.',!':

<lI 1:r-,I

"",

\!ri;1'

-",.,ili,'r~,

t,'\,~:\\! :

11"~ht"I'

I~;!

;1\

~,

:.l.'

',.

I' 1q'" 11\,.,1

1 ,,." \

I,J,'

" 1',\. '-',, "

•,~I

"~I-t': i:',',i ':\'"__I ','~'

'f" .,,'f li'i "i'.! I!

i'IIi",

Page 4: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

::,[' , " ,""::'-:>:L{, ,,' ': :<,,1" ~, c,,:' fi' "1>,,;111, ', I

I:

\\I

I r:"t !

;fn11\

''''~I':> "j,' ',"

.H'

» fprintfdemo

Capítulo 3 Programaçõo com MATLAB 55

Descrição

uescriçáo

Ir,icio uma nove linha

Tabulação noriron:ol

Formcto inteiro

Formo:o científico com e minúsculo

;:ormat~ cieniílico com E maiúsculo

Formato de ponto fixo

O 'formato mais compacto de %e ou %:%f'g

Código de controle\n

\t

Código de formato%d

'e"

x Y1 20.4002 12,.6003 Ú:8004 88.7005 120.400

3.2.1 Criando e acessando arquivosO MATLAB tem a capacidade de ler e escrever arquivos de dados. A abordagemmais simples envolve um tipo especial de arquivo binário, chamado MAT-file ouarquivo-MAT, expressamente projetado para implementação no MATLAB. Tais ar-quivos são criados com o comando save e acessados por meio do comando load.

» fprintf{'%5d %10.3£ %3.5e\n',100,2*pi,pi);100 6.283 3.1415ge+000

Ela também pode ser utilizada para exibir vetores e matrizes. O arquivo-M aseguir' define dois conjuntos de valores como vetores, que são combinados em umamatriz~;exibida como uma tabela com cabeçalhos:

,~ . f'~~nct1on pr1ntfdemox=[12345];y = (20.4 12.6 17.8 88.7 1204);Z = [x; yl;fprintf(' x y\n');fprintf('%5d UO.3f\n',z)i

O resultado ao executar essa função é:

A função fprintf também pode ser usada para exibir diversos valores por li-nha com diferentes formatos. Por exemplo,

TABELA 3,1 Alguns códigos de formato e de controle empregados com o funçõofprintf.

até detectar o símbolo \, 'que informa ao MATLAB que o texto a seguir é um códigode controle. Por meio dos códigos de controle (Tabela 3.1) é possível executar deter-minadas ações, como passar para a próxima linha. Se tivéssemos omitido o código\n no exemplo anterior, o prompt de comando apareceria no fim dos caracteres m/sem vez de na linha seguinte, como desejado.

'}

A função fprintf. Com esta função é possível controlar melhor a exibição deinformações. Uma representação simples de sua sintaxe é

» fprintf('A velocidade é %8.4f m/s\n', velocidade)J!.. velocidade é 50.5175 m/s

Esse exemplo ilustra bem o funcionamento de uma string de formato. O MAT~LAB inicia da extremidade esquerda da string e exibe as palavras até detectar umdos símbolos: % ou \; em nosso exemplo, ele encontra primeiro o símbolo % e reco~nhece que o texto a seguir é um código de formato. Como na Tabela 3.1, os códigosde formato permitem especificar se os valores numéricos são exibidos no formatointeiro, decimal ou científico. Depois de exibir o valor da variável velocidade, oMATLAB mostra as informações de caracteres (em nosso caso, as unídades: m/s)

VE-locidade (m I s) :

50.6175

» queda _ livre _ i!1assa (kg): 68.1Coeficiente de arraste (kg/m): 0.25Instante de tempo (s): 12

fprint.f{'formato', x, ... )onde formato é uma string que especifica como você deseja que o valor da variávelx seja exibido. Vejamos alguns exemplos do uso dessa função.

Um exemplo simples seria exibir um valor com uma mensagem de texto. Porexemplo, considere que a variável veloci.dade tenha um valor de 50,6175. Paraexibir o valor de oito dígitos com quatro dígitos à direita da vírgula decimal e, ainda,uma mensagem, a declaração - bem como a saída resultante - seria

% queda _livre _ i cálcl.:.lo interativo da velocidade de queda livre% de um corpo com arraste de segunda ordemg '" 9.81; % aceleraçào da gravidadem = in?ut('Massa (kg): ');cd = input('Coeficiente de a:,raste (kg/m): ')i

t = input('Instante de tempo (5): ');disp(' ')j.is?<'Velocidade (m/s) :')disp(sqrt(g .•.m / cd)*tanh{sqrt{g .•• cd /!<l.) ,. t));

Salve o arquivo como queda livre L;;,.Para chamar a função, retorne à commandwindow e digite

54 Parte 1 Modelagem, computadores e anólise de erros

EXEMPLO 3.3 Uma função interativa de MATLABI Como no Exemplo 3.2, calcule a velocidade do saltador de bungeejumping em queda livre,

mas agora use as funções input e àisp para entrada/saída.

Solução. Digite 05 seguintes comandos no file editor:function queda _ livre _ i% queda livre i: velocidade do saltador interativa

,"

i,j' ,, ,

\\ '

, '

ii

i

Page 5: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

Nesse caso, o comando save armazena os valores em A no formato ASCII de' d,'O'itos.Caso deseje armazenar os números com dupla precisão, acrescente _Olro t> .•

ascii -double. Vale ressaltar que o arqUIvopode ser acessado por outros progra.mas, tais como processadores de planilhas e textos; por exemplo, se o arquivo salvoforaberto com um editor de textos, será visto desta forma:

5.0000000e+000 7.00000008+000 9.0000000e+OOO 2.0000000e+000

3.0000000e+000 6.00000008+000 3.0000000e+000 9.0000000e+000

É também possível ler os valores de volta para o MATLAB com o comandoload

n~d:. IQ'1

r 11

f IJ(,

rI! I I .. - ..•.....,"'~ e Onólise de erros

Capítulo 3 Programaçõo Com MArIAS 57

~I

li~1\"~l',,'"li

'"» load simpmatrix.txt

,:',

Como simprnatrix.txt não é um arquivo-MAT, o MATLAS cria um arranjode dupla precisão nomeado conforme o nome _ arquivo:

9

3

» simprnatrixsimpmatrix

5 73 6

2

9

'J

Pode-se também utilizar o comando load como uma função e atribuir seusvalores a uma variável, como em

r'~:" ",:, ; ,::," .'< ~<::.,....,,'- , ~- :'?T .Lv m

if condiçãodeclarações

end

»A"" load('simpmatrix.txt')

o que foi apresentado até aqui representa apenas urna pequena parte dos recur-sos de gerenciamento de arquivos do MATLAB. Outro importante assistente podeser chamado por meio do menu do MATLAS: File, Import Data, Teste também oassistente de importação utilizando-o para abrir o arquivo simpmatrix. txt; alémdisso, consulte sempre o help para aprender mais sobre ~stes e outros recursos,

Os programas mais simples executam instruções sequencialmente, isto é, linha porlinha, iniciando do topo da função e descendo até o fim. Como algumas sequênciaspodem ser um tanto complicadas, todas as linguagens computacionais de alto nívelincluem declarações que permitem aos programas tomar caminhos não sequenciais.Essas declarações podem ser classificadas como:

.,/ Decisões (ou Seleção). A ramificação de fluxo com base em uma decisão,-/' Laços (ou Repetição). O looping (ou enlaçamento) do fluxo para permitir que

declarações sejam repetidas.

3.3.1 Decisões

A estrutura if. Esta estrutura permite executar um conjunto de declarações seuma condição lógica for verdadeira. Sua sintaxe genérica é,

3.3 PROGRAMAÇÃO ESTRUTURADA

:1, ,

Neste POnto, se tentássemos exibir as velocidades, obteriamos o seguinte resultado:» '.T

??? Undeflned function ar variable 'v'

No entanto, é possível recUperá~las digitando:» load velo a~raste

Agora as velocidades estão disponiveis, como pode Ser verificado ao digitar» ;.;ho

YCur variables 2=e:cd 'I

Embora os arquivos-MAT sejam úteis quando se trabalha exclusivamente noambiente do MA TLAB, para realizar uma interface entre o MATLAB e Outros pro-gramas torna-se necessário criar arquivos de texto escritos no formato ASCII _ umaabordagem comum em tais casos.

Arquivos ASCII podem ser gerados no MATLAB acrescentando_se -ascli aocomando save. Ao Contrário dos arquivos-MAT, nos quais VOcé poderia salvar to-das as variáveis da área de trabalho, na forma aqui apresentada VOcé salvaria umaúnica matriz retangular de valores. Por exemplo,

» 1>.=[5 7 9 2; 3 5 3 9];

» save simpmatrix.txt -ascii

Page 6: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

Condições lógicas. A forma mais simples da condição é uma expressão rela-cional única que compara dois valores, como em

expressão1 I expressão.

Se uma das expressões for verdadeira ou se ambas forem verdadeiras, o re-sultado será verdadeiro.

A Tabela 3.3 resume todos os resultados possíveis para cada um desses opera-dores. Assim como para os operadores aritméticos, há uma ordem de prioridadepara avaliação de operações lógicas; da mais alta para a mais baixa essa ordem é: _,& e I. Na escolha entre operadores de mesma prioridade, o MATLAS avalia os daesquerda para a direita, e, assim como com operadores aritméticos, parênteses po-dem ser usados para alterar a ordem de prioridade.

;tr;T~lii,'tfil'~":~.,>, ",'",r}l",r,! it

]1 <'j. 't-T'. ;j~.ti.••, .u',! -I

,';,.;

:f"

'~i;:(,1

J" J' V ,-,

; "'i,,1!r '("'.í~";1í .

I

59

RelaçãoIgual

DiferenteMenor que

Maior que

Menor ou igual a

Maior ou iguc! c

>

,

>.,.

Capítulo 3 Programação com MATlAS

'!n'

, >3.9 <= a/3

r >= O

unidadea , O

TABELA 3.2 Resumo de operadores relacionais no MATlAB.

Exemplo OperadorX==O ""=

valor1 relação '.Ia lar.

onde.valorl e t.lalor1 são constantes, variáveis ou expressões e a relação é umdos operadores relacionais listados na Tabela 3.2.

O MATLAS também permite o teste de mais de uma condição lógica com ouso de operadores lógicos, como os seguintes:

./ .....(Not ou Negação). Efetua negação lógica em uma expressão.-expressão

Se a expressão for verdadeira, o resultado será falso; de forma análoga, se aexpressão for falsa, o resultado será verdadeiro.& (And ou E). Efetua uma combinação lógica de duas expressões.expressão1 & expressão

2

Se ambas as expressão: e expressão. avaliadas forem verdadeiras, o resul-tado será verdadeiro. Se uma das expressões for falsa ou se ambas foremfalsas, o resultado será falso.I (Or ou Ou). Efetua uma separação lógica de duas expressões .

./

./

l

f,1I

ItI"jJ .;•.'

para passar')

% mensa~em exibidaif nota >"" 60

disp('Nota suficienteEnd

• -I""""'"~'J' _

'.,1'OndeCOndiÇão é uma expressão lógica que pode ser verdadeira ou falsa. Pore . ."pio, a seguir tem-se uma função simples que determina se uma nota esColar é "~mo

o - SLlfi_Ciente ou nao para a aprovação:

function classificador (n ota)-% classificador (nota) :

% determina se a nota é SU[kiente ou Mo para Passar.% -=ntrada;

% nota '= ',ralor numérica dà nota (O-100)% saída:

ans =

A linha de comando a seguir mostra o resultado:» classificador(95.6)Nota SUficiente para passar

Para casos em que apenas uma declaração é executada, torna-se convenienteimplementar a estrutura, chamada if de lÍnica linha, :;

,if nota >'60, disp('Nota suficiente para pa'ssar'J, eM

Para casos em que mais de uma declaração é implementada, a estrutura if emmúltiplas linhas é preferível, pois ela é mais fácil de ler.

A funçõo Erro. O i f de única linha pode ser muito útil em uma detecção de errosrudimentar, o que envolve a utilização da função errar, com a seguinte sintaxe:

erro::::-(mensagem)

Quando essa função é enContrada, ela exibe a mensagem de texto ,TIensagem.indica onde o mo ocorreu, encerra o programa e retorna para a command window,Ela poderia ser usada, por exemplo, para encerrar um programa a fim de evitar umadivisão por zero. A seguinte função ilustra Como isso pode ser feito:

function f = errortest(X)

if x " 0, errqr('valor igual a zero e,ocOntrado'), codf =l/x;

Se um argumento diferente de zero fosse usado, a divisão seria implementadacom Sucesso, como em

» errortest{lO)

I"

'.~

'IH II

iI

'O'.

,',':

l~

,

III

, y -, x&yT T f TT f f ff T T ff f T f

TABELA 3.3 Tabelo verdadeiro/falso resumindo os resultados possíveis porooperadores lógicos empregados no MATLAB.A ordem de prioridadedos operadores é mostrado no topo do tabelo.

Mais oito • Mois baixo

.!..liTTTf

~"

J0.1000

No entanto, para um argumento igual a zero, a função seria encerrada antes dadivisão e a mensagem de texto seria exibida em letras vermelhas:

» er.::-ortest(O)??? Errar using ==> errortest at 2valer igual a zero encontrado

rr :;•. :;.:,;;. ',=:;=:,,:;':::=~.~.7~'~==;;:~::;;;;,;;;;;;,;=•••••__~--..__ JII. ~." , "'>' .." • ••• ._~, •. ; lO u,' ..,.-;

,

Page 7: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

j

Ij7~-u {,:;::;;r:'f ' .. <I-.: :::.=-~:;...

.'

, .

l~jt'

/!i,hl::I

I. '.;)lf ~',.11::;'~' 'U~

IHj "ih

I. ",~

J'.'.l:

';

II,

t.....'.."'."

":' r

elsedeclarações "lo<~

eod

elsedeclarações"

end

A estrutura if ... elseif. Muitas vezes acontece de a opção falsa de uma estru-tura if ... else ser outra decisão. Esse tipo de estrutura geralmente Ocorre quandotemos mais de duas opções para resolver determinado problema. Para tais casos,uma forma especial de estrutura de decisão, a if ... elseif, foi desenvolvida, e tema seguinte sintaxe genérica:

if condiçã01

declarações1

elseif condiçã02

declarações2

elseif condição,declarações

3

1

-1

» sign(-O.776)ans =

» sign(O)ans =

oDesenvolva uma função no MATLAB para efetuar a mesma função.

Solução. Primeiro, uma estrutura if pode ser usada para retornar 1 se o argumento épositivo:

EXEMPLO 3.4 Estruturas ifI

Para um escalar, a função nativa sign do MATLAB retorna o sinal de seu argumento(-1,0, I). Veja a seguir um exemplo de seu funcionamento:» sigr,(25. 6)ans =

!ií

;\

{

--v.'( , Capítulo 3 Programação com MATlAS 61- -----,

IA estrutura if ... else. Esta estrutura permite executar um conjunto de declara~

Substitu. . '. ões se uma expressão lógica for verdadeira e executar outro conjunto se a condiçãoa os ~Ol1stal1;es " .' ior falsa. Sua sintaxe genérica é

. if condição, declarações,

I

Avalie as eXpressõesmatemáticas

Avalie as expressõesre/ocionais

Avolie os expressõescompostas

J

J

-F-TT

~

> 7 / - ( Y > 'd')

J> 7 I - ('b' > 'd')

x

JF

JF

J1

1> 7 I -('b' > 'd')

Parte 1 Modelagem, computadores e análise de erros

a*b>O & b =:: 2 &

J J J-1 .,2 :> O& 2 ""'= 2 &

J-2 > O & 2 '== 2 li

J.J

F & T &

~F

&

T -4FIGURA 3.1 AVO/loçõo POSSoo POSSa de uma deô,õo complexo,

ou

Vamos analisar Como o computador emprega as prioridades para avaliar uma"pressão iógica, Se a " -1. b " 2, x " 1 e y " .b " avalie se a seguinteexpressão é verdadeira ou falsa:

a ., b > O & b ""'== 2 & l{ > 7 I ~(y :> 'd')

Para facilitar, substitua os valores pelas variáveis:

-1 ., 2 > O & 2 """" 2 & 1 > 7 I -('b' > 'd')

A primeira coisa que o MATLAB faz é avaliar qualquer expreSSãomatemática,Nesse exemplo há apenas uma: -1 ., 2, POrtanto

-2 > O & 2 "''''' 2 & 1 > 7 I _ ( 'b' > 'd')

Em seguida, ava}iam-se as expreSSões relacionais

-2 > O & 2 ~"" 2 & 1 > 7 I _ ( 'b' > 'd')F & T & F 1_ F

Neste POnto, os operadores lógicos são avaliados por ordem de prioridade,Como o operador - tem prioridade. a última expressão (-F) é avaliada primeiro parafornecer

F & T & F I T

O operador & é avaliado em seguida, Como há dois, a regra "da esquerda paradireita" é aplicada e a primeira expreSSão (F & T) é avaliada:F & F I T

E o operador & novamente tem prioridade.F I T

Por fim, o operador I é avaliado COmoverdadeiro, O processo completo é des_crito na Figura 3.L

I, .,., w,'ir

rf

J~/1/1I '

Page 8: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

- ., ~~- - "'"-"--> ~ -q'::,z~- '..:!;;-o £;Z:;{ .re;_f" ..'-:t}:ii:~>-5>i:J;i" ",.~:;,:,""'i''''':'',''::~.'.2-:'\wI' .... '1.

~J1

q

"

" I,1,,I

I I,;1 'i~'~~i!

Capítulo 3 Programação com N\ATLAB 63

~eh~r",ü••

othenlisedeclarações

end

Como um exemplo, o código a seguir exibe uma mensagem que depende dovalor da variável conceito (uma string).

end

switch expressão testecase valor

1

declarações,case valor.

declarações]

Quando esse código for executado, a mensagem "Bom" será exibida.Listode argumentos variável. O MATLAB permite que um número variável deargumentos seja passado para uma função, o que pode ser útil para a incorporação devalores-padrão em suas funções. Um valor-padrão ou default é um número automati-camente atribuído quando o usuário não °passa para a função.

Para ilustrar, lembre que no Exemplo 3.2 foi desenvolvida a função queda _livre, que tinha três argumentos;

A estruture switch. A estrutura Sí~itCh.é ,?~ito ~imilar ~ estrutura if ....el-seif; no entanto, em vez de testar condIções mdlvlduals, a ramIficaçào se baseia novalor de uma única expressão de teste. Dependendo de seu valor, diferentes blocosde código podem ser implementados; além disso, um bloco opcional será implemen-tado se a expressão não assumir nenhum dos valores prescritos. A estrutura switchtem a seguinte sintaxe genérica:

conceito = '3';switch conceito

case 'A'

disp( 'Excelente')case 'B'

disp('Bom')case 'C'

disp ( 'Regular')case 'O'

disp('Ruim')case 'E'

disp(' Reprmtado')othen'i'ise

disp( 'Péssimo!'}

v = queda_livre(t, m, cd)

Embora um usuário obviamente tenha de especificar a massa e o instante etempo, ele poderia não ter ideia de um coeficiente de arraste adequado. Seria inte-ressante, portanto, que o programa fornecesse um valor, caso ele fosse omitido dalista de argumentos.

íIj,

j

I

,I

"

~:cr~l +.' .•.

r

'1

"~'-::;l""", computadores e análise de erros

fU;;ction sinal ""meu _ sinal (X)

'meu Sinal (X) retorna 1 Se z é maior que zeroif x > O

sinal = -1;

€nd

A função pode ser executada Como

» meu _ sinal (25. 6)ans ""

1

Embora a função manipule numeros positivos corretamente, se ela for exeCutada com umargumento negativo ou igual a zero, nada é exibido. Para corrigir parcialmente eSSa deficiên.cia, uma estrutura if ... else pode ser usada para exibir -1 se a condição for falsa:function sinal"" meu_ sinal{x)

% meu sinal (X) retorna 1 se x é maior que zero.

' -1 se x é menor ou igU';' a Zero.itx>O

siual ""1;else

end

O

A função pode ser executada Como

»meu sinal(-O.776)ans =

-1

sinal"" 1;

Embora agora os casos de numeros positivos e negativos sejam adequadamente tratados, -1é retornado de forma inCorreta se um argumento igual a zero for utilizado. Uma estruturaif ...elseif pode ser usada para incorporar esse caso final:function sinal. = meu_ sinal(x)

% meu sinallx) retorna I se x é maior que zero.

% -1 se x é menor ou iquel a zero.% O se x é igual a zero.if x :> O

sinal. = 1;elseif x < O

sinal ""-1;else

sinal"" O;end

A função agora manipula todos os casos Possíveis. Por exemplo,»meu sin~l(O)ans

(,

"Ii~ 1I1I1".1111

"t';dt: I,.~tllUdI'I,

ti

Page 9: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

,II•1

i

I',

ij

,iiL: (

for i :::-1:5disp(i}

end

Quando esse código é executado, o MATLAB exibe, em sequência. 1, 2, 3,4, 5, o que caracteriza o passo padrão (default) como 1.

O tamanho do passo pode ser alterado do padrão de 1 para qualquer outrovalor numérico, que não precisa ser um inteiro, nem.tem que ser positivo. Por exem-plo, tamanhos de passo de 0.2, -1 ou -5 são todos ac~táveis.

Se um passo negativo for usado, o laço funcionará em uma "contagem regres-siva", no sentido inverso, o que inverte a lógica do laço. Assim, o valor de fim émenor que o de início e o laço é encerrado quando o índice é menor que o fim.Por exemplo,

for j = 10:-1:1disp(j)

end

Quando esse código é executado, o MATLAB exibe a clássica sequência decontagem regressiva: 10, 9, 8, 7, 6, 5, 4, 3, 2, 1.

EXEMPLO 3.5 Usando um roÇo for para calcular o fatorialDesenvolva uma funçào no MATLAB para calcular o fatoriaL!O! ~ II!~I

2! ~ I x 2 ~ 2

",

'I

errar(' Deve-secase 2

cd == 0.27;

--- 00 "eco, ,"'fr "" ' Capitula 3 Programação com MATlAS 65OMATLAB tem umafun ã ,"cf ',~_------- -------------- _

me~t~s mseridos na função PO~u:cham~~a nargin que fornece o núme _:~ecIsao - COmo as construções i~ usu.ano. Ela Pode ser usada COm e tro de argu.,:;, . 3 3.2 Laços

;~: Como mensagens de erro na,s fu~çS;~~~~ -: ~ara incor~o~ar valores~p:~t~rasd~ _,"', . C~moo próprio nome indica, os laços real.izam operações repetidamente. Há do~spara a função qUeda li "/rc," codlgo a St:gulr IlUstra como' fao, as_ .~- _' . as de Jaços, dependendo de como as repetições são encerradas: um laço for terml-

- _. ISSO P d ' tlp . 'l"; d . Õ I .function ~J"" <:. o e .' - a depois de um numero eSpeCl1lCO e repeuç es, enquanto um aço elhile terminac qU_da 1i7re(' ,fi d' _ I' .~ qUeda livr 2 .. - : - c, ro, Cd) 'combaseemumacon Iça0 oglca.- e . 1eloc~d .

gUoda ordem aae da saltador COm ' A estruturo for ... end. Um laço for repete declarações um número especifica.a. - ~ arraste d '/'.... '., ,• 'I=queda livre (t e s",_ . ~ de vezes e sua smtaxe genenca e% - ~, m, c d) calcula _. .,., ' ,

% •. de um Corpo a veloc~dade de queda l' ... for índice = início:passo:fim€-fh ..rada" com arraste d lVre"* t . e segUnda o J: .- declarações" = tempo (s) rdem ~ end% m ~ maSSa (k p. . , '''.

% cd ~ COeI' ' g I Ic O laço for funCIOnada segulOte forma: o índice e uma vanavel defintda com% saída: 1Clente de arraste de Segund '"', um valor inicial, inicio; O programa, então, compara a variável índice com o"- a ordem (kg/ ) ~ I d . d . ..., - . ç . I' "I "- , v ~ velocidade, m I valor "na :seJa o,úm.,"oLndLce,ormeooroulgua avanave 'lm,oprogra-s;'"tch nargin para baLxO (mls) 'ma executara as declaraçães. Quando ele chega a !Ioha ena. que caractenza o

case O } fim do laço, a variável índice é incrementada pelo valor da variável passo e oerror(' Dev<>-se 1- programa retoma à declaração for. O processO continua até o índice tornar-se~ entra'" com . .. t.. I di' d I

case I - • a Lnstante de temoa ' maior que o va ar e fim; neste ponto, o aço e encerra o e o programa sa ta para a". • e a massa 'J ; linha imediatamente após a declaração end.

entrar Com a mas"k' I Caso você deseje um inctemeoto de 1 (como muitas vezes é o caso), o passopode ser omitido. Por exemplo,

eM

3

g == 9.81; % aceleraç~o da gravidadev" sgrt(g • m / cdl'tanh(sqrt(g , cd / ml • ti;

Observe que foi utilizada uma estrutura switch para exibir mensagens de erroou para definir a valor-padrão, dependendo do número de argumentos fnrnecidospelo Usuário. Confira os resultados nesta sessão do MATLAB;

» QUeda_livre2(l2, 68.1, 0.25}ans =

50.6175

» qUeda _livre2( 12, 68.1)ans =

48.8747

» qUeda _'livre2( 12')

??? Errar Using ""==> qUeda _ 1ivre2 at 15

Deve-se entrar com a massa» qUeda _livre20

??? Errar USing ====> qUeda _ 1iv

re2 at 13

Deve-se entrar com a instante de tempo e a massa

Observe que a função nargin se comporta de modo um pouco diferente quan_dn ela é chamada na command window, onde deve-se incluir uma string Como argu_mento especificando o oome da fuoÇãopara que ela retome o número de argumentosna função. Por exemplo,

» nargin('QUeda_livre2')ans =

Ij,''.

f

'~'II!I I.d',II

i1ii/ II' I

,i! !I

I1I

Observe que o MATLAB tem uma função nativa factorial que efetua esse cálculo.

(3;J,~i~..r:'." -;~ .~ ,::~~~?'.i;C:':"'-' .• ":: i;~~;f'.7,:;.-,::::T:'ii:~~.:,.--;-.'!a, ,.-eb."

III

Page 10: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

'i,

i"

, !i!

" f~;

f!~f:"i"l,li." ',~

ri::

Capítulo 3 Programação com MATLAR 67

x

while condição

declaraçõesend

As declarações entre o while e o endserão repetidas enquanto a condiçãofor verdadeira, Um exemplo simples é

x = 8while x > O

x = x - 3;disp [x)

end

Quando esse código é executado, o resultado é

50 demorado quando são realizadas ações tais como a adição de novos valoresprdo.c~sdualmentedentro de um laço. O código a seguir, por exemplo, define valores deIn IVI

elementos de y dependendo se os valores de t são ou não maiores que L

t = 0:.01:5;for i = 1:1ength(t)

if t(i»ly(i) = l/t(i);

else1'(i) = 1;

end

end

Para esse caso, o MATLAB deve redimensionar y toda vez que um novo valoré determinado. O código a seguir pré-aloca a quantidade adequada de memória uti-lizando uma declaração vetori~ada para atribuir l's a y antes da entrada no laço.

t = 0:.01:5;y = ones(size{t);for i = l:length(t)

if t(i»ly(i) = l/t(i);

endend

Assim, além de o arranjo ser dimensionado apenas uma vez, a pré-alocaçãoajuda a reduzir a fragmentação de memória - o que também aumenta a eficiência.

A estruturo while. Um laço while repete enquanto uma condição lógica forverdadeira, e apresenta a seguinte sintaxe genérica:

852

-1

A estruturo while ... break. Embora a estrutura while seja extremamente útil,o fato de que ela sempre se repete a menos que a condição testada no início seja falsarepresenta uma limitação. Por essa razão, algumas linguagens tais como Fortran 90

.<,

'"e-----

I\I

I

i

'.

II

,!

~F'" ..!. ;

, --"'eU'UOO'e, e onáli,e de erro, . '1... ;

~Ll'"c.'.!11

II,J"I

1:0x * i;

i = i + 1;

i ::= O;fOr t = 0:0.02:50

3! = 1 X 2 X 3 =6

4! = I X 2 X 3 X 4 = 24

S! = 1 X 2 X 3 X 4 X 5 = 120

Veforizoção. Embora seja de fácil implementação e compreensão para o MAT_LAB, talvez o laca for não seja a maneira mais eficiente de repetir declarações umnúmero especifico de vezes, Por Conta da capacidade do MATLAB de operar dire-tamente com arra'\ios, a velorizaçàa fornece, em muitos casos, uma Opção muitomais eficiente, Por exemplo, a seguinte estrutura de laço for

Solução, Uma função 'imples que implementa esse cálculo pode Ser desenvolvida coma emfUDction fsaída "" fatorial(n)% fatorial(nJ.:

% CalcUla o produto de tOdo, o, inteiros de 1 a n,z ::= 1;for i

xendfsalda = x;eM

que pode ser exeCutado como

» fatorial (5)ans =

Y(i) = COS(t);end

pode ser repreSentada na forma vetorizada COmo

t = 0;0.02:50;Y = COS(t);

É importante observar que, para códigos mais Complexos, a forma Como vetori_zar o código Pode não ser tão óbvia, Dito isso, a Vetorizacão é reComendada sempreque possível.

Pré-olocOÇão de memório, O MATLAB aumenta automaticamente o tama_nho de arranjos toda vez que um novo elemento é adicionado, o que pode tornar o

120

O laço executará 5 vezes (de I a 5), No fim do processo, a variável x terá o valor de 5! (ouseja, o fatorial de 5 ou 1 X2 x 3 x4 x 5 = 120).

Observe o que acontece se n ~ O; neSSe caso, o laço for não executaria e obteriamos Ore,sultado desejado, OI= 1.

iI I I

ij-'

.(

II!í

1111

1,Ir

r,1j i

'~f." ./,/" li!

,

: ::-;;=~W.H':'<=j'Z::::E~iI:;~;~,;?~:/'> ,' ;::,::.",;;::::, I,

Page 11: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

11::Lsfl,••',.'" .•.•. ~.:--:"'.:-:;.5\:~<h':~',;(.',~~":~~','

movie(m, n, fps)

,/,Ii,rI:

'.~~

1"..

1•......•..1.' , !

I /;t.•'

69Capítulo 3 Programação com MATlAS

Quando esse código é executado, o computador emite um sinal sonoro; cincosegundos depois, ele emite outro sinal Sonoro e exibe a seguinte mensagem:

Elapsed time is 5.004661 seconds.Caso o usuário tenha a necessidade de usar o comando pause( i nf), o MAT-

LAB entrará em um laço infinito. Em tais casos, pode-se retornar ao prompt de co-mando digitando-se Ctrl+c ou Ctrl+Break.

Embora os exemplos anteriores possam parecer pouco significantes, os coman-dos são bastante úteis: por exemplo, tic e toe podem ser empregados para identifi-car as partes de um algoritmo que consomem a maior parte do tempo de execução.Além disso, as combinações de teclas Ctrl+c ou CtrI+Break podem ser valiosasnos casos em que, acidentalmente, foi criado um faço infinito em algum programa.

3.3.3 Anima~ão

Há duas maneiras simples de animar um gráfico no MATLAB. Primeiro, se os cál-culos forem suficientemente rápidos, a função plot padrão pode ser usada para quea animação pareça mais suave. O fragmento de código a seguir indica como um laçofor e funções gráficas padrão podem ser empregadas para animar um gráfico:

% cria uma animação Com funçOes gráficas padrãofor j =1: o

plot comandosend

Assim, como não foi incluído o comando hold 00, o gráfico será atualizadoem cada iteração do laço, o que pode resultar em uma mudança suave da imagemcaso os comandos de formatação dos eixos sejam usados de forma criteriosa.

Segundo, há funções especiais, getframe e movie, que permitem capturaruma sequência de gráficos e, depois, reproduzi-los. Como o nome indica, a funçãogetframe captura um instantâneo (pixmap) dos eixos ou figuras correntes, e éutilizada em um laço for para reunir quadros de filme reproduzidos posteriormentecom a função movie, que tem a seguinte sintaxe:

I!(

I

/1

'~

end

end

if x « o, break," "" x - 5;

end

d

"<f'..- ......•e unO!lse e erros . .

.... . ~

. O -u<o(n), caso em q- . . "1" - • oe"O - """ " "::::-:::0;';;0;.;0; ." ••,~":e Visual Bas" tem estruturas espeCiaIS que perm"em encerrar o laço sob uma - :'. O coman ra' ,"nierrompldo por n segu do boop que faz o computa

. . ~. . •• 000.. ",~ ~"-" ~ - •••• '"~ '~roOO ~"'~~.o."-,~ '. ' " '"","'_'''''0~,"",._ "~.'.'"'_.=rem mais disponiveis no MATLAB. suas funcionalidades podem Ser "imi'adas,;Sta~ I ,ado com outras. U I sonoro ou as funções t.lC e toe, qatual que o toe emprega

'. . . . , "., ..•. .Uma versao espeCIaldo laço while. A sintaxe dessa versão, chamada estru""a ~r.,.. dor em1C!r um d orrido (o comando t.lC salva o ~ t co'digo confirma, então,

. '". . . _" ".) O seguIU e ç ."..""',.~'''- ••_" , , ~"",' ,-~o •.•,,~om.. 'm_"oo.oo •••~

• . ,eriormente par f iona como descnto. comp ewhile (J) '1 . pos ando pause (n) une

' '-' e o com

deClarações . ". qu

. . . ',. noros:" "M,,,., .,,"", 00. \ .•. '"

*~~= ..t .. ~ t.lCe"" beep

t ause(5)

onde o Comando break encerra a execução do laço. Assim, uma única linha if i i pusada para sair do laço Se a Condição de teste for verdadeira. Observe que, cOmo ..' beepmostrado, o break pode ser colocado no meio do laço (isto é, Com declarações antes ; tace depois dele), o que caracteriza o laço COmteste no meio. I

Se o Problema exigir, pode-se colocar o break logo no inicio para criar um ~laço Compré-teste, como no exemplo; •.whih (1) .~

Observe como 5 é subtraido de x em cada itetação. Isso representa um meCa.nismo que finaliza o laço em algum momento. Todo laço de decisão deve ter talmecanismo, Caso COntrário, ele se tornaria um laço ilifinito.

Como alternativa, pode-se colocar a deClaração if ... break no fim e criar umlaço com PÓS-teste.

while (1)

x = x - 5;if x < 0, break,

end

Deve ficar claro que, na realidade, as trés estrutUtas são a mesma coisa, isto é,dependendo do local onde a saida é colocada (inicio, meio ou fim), temos um laçoCom pré-teste, teste no meio ou PÓS-teste. Foi essa simplicidade que levou os cien-tistas da computação que desenvolveram o Forttan 90 e o Visual Basic a favorecereSSa estrutura Sobre outtas fotmas de laços de deciSão, tais como a estrutura whileconvencional.

O comando pause. Há vezes em que se deseja intetrompet um programa tempo_tariamente. O comando pause gera um recurso para parar e esperar até que algumatecla seja pressionada, como no caso de um usuário que queira examinar com calmauma Sequéncia de gráficos. O código a Seguir emprega um laço for para criar umasequencia de gráficos que podem set vistos desta maneira;

for n = 3;10

meSi1(ma.qic(n) }pause

end

/ I

r~1i:!I'!!

': ;,li'rj

f

Page 12: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

I

",: ...'t; •

J

;',;;e"i.':

I,,1

Ij,',

~':

,

l'"

I'''-~

71

ee•

Capítulo 3 Progromoçoo com MATlAS

I)$

x=

•f)

••

Estruturas aninhadas

As estruturas podem ser "aninhadas" - ou colocadas - umas dentro das Outras. Veja oexemplo a seguir, que ilustra o conceito.

0,3eoJ •

o~~ tiI

o 0,51,5 2 2,5 3

FIGURA 3.2 Grófico da trajetória de um proiéfiJ.

Quando esse script é executado, duas animações são exibidas (foi colocado um pause entreelas): a primeira corresponde à geração sequencial dos quadros no laço e a segunda Corres-pende ao filme propriamente dito. Embora os resultados não possam ser mostrados nestelivro, a trajetória para ambos os casos será semelhante à apresentada na Figura 3.2. Para vera animação real, execute e código anterior no MATLAB.

As raízes de uma equação quadrática

f(x) = ax1 + bx + cpodem ser determinadas Com a fórmula quadrática

-b=~20

Desenvolva uma função para implementar essa fórmula dados os valores dos coeficientes.

Solução. O projeto de cima para baixo (top-down design) fornece uma boa abordagempara projetar um algoritmo que calcule raízes; o processo envolve o desenvolvimento da

3.4 ANINHAMENTO E INDENTAÇÃO

EXEMPLO 3,7

f

'-.""

1

..,

r~t",~,.• """'e Oee"o, " " .

, , - •• ,~. ~~""'""re",,- , .0 do fo=. o que faz a anJm ç. do quando a altura' • '. ada Iteraça la o 'or e encerra

-., ..m. '" re~"o" '.,. ,,-_., "".~ """' ••~, .. ,."'~ ,re' ."'"-'l'•.•.,,.me, n é uma variável opcional que especifica quantas vezes o filme deve serrep

o fJl.. J. . ../ rt'tfJm

edoS

ax~S e veja ~ era(se ela for Omitida, o filme será reproduzido uma vez) e fps é uma variável op/f1dQ ~f'" . ~ comanétll v cal abaixo e z

. c. "'d lOna,. 11- 'd pro) _que especIfica a taxo de quadros do filme (se ela 'Or omlt,. a, o padrào será 12 qUadro f.. o

~ -"".) O "--. ~~ "'.", ~'re"_ ~ ". ". ~ ' !.'""- ''''''"' , "''' .•• ,~ ~-... - "'co. "., '/" : .,% Cria uma animaç,o Comgetframe e mOvie ,',,, ..; 0,7

for j"l i n;'''-::r. > 0,6Plot comandos " .

l1(j) "getframe;'l . 0,5

end' ',.mO

V

ie(l1) J O,,

Cada Vez que o laço é exeCUtado,a linha Plot Comandos cria uma versáoatua. ,"o"" ~~' ••• '.• ""._ •• ,"' _. O,., o"" "","" ;rado, as n imagens são reproduZidas pela função movie. ,

~.!j

EXEMPLO 3,6 Animoçõo do movimento de um proiétil

r,-...;;:••'".-0, ",.__ 0!6••• ~''''''' ~redo Comuma velocidade inicial (o,) e ángulo (O,) podem ser calculadas Com

x == DO COS(Bo)tY == DO sen(&o)t - O,5gt2

onde g = 9,81 mls'. Desenvolva um ScriN para gerar um gráfico animado da trajetória doProjétil dado que Vo = 5 m/s e 80

'= 450.

SoluÇão. Um script para gerar a animação pode ser escrito desta form"ele, Clt, clsar

g""9.Bl; thetao""45*piIIBO; VO""5;tCl) ""O; x""O;Y""O;

Plot(x, y, 'o', 'l1arkerFacecolor', 'b', 'l1ackerSize', 8)aXis([O 3 O 0.8])M(1) ""getframe;dt""11128 ;

for j ""2:1ÔOOt (j ) =t (j -} ) +dt.;

X""VO*COS(thetaOJ*t(j):Y""vO*sin (thetaO) *t (j) -O. 5*g*t (j ) "2 ;

Plot(x, y, 'o', 'NarkerFacecolor', 'b', 'l1arkerSize', 8)aXis([O 3 O 0.81)M(jj""getframe:

if Y<""O, break, endendpausemOVie(M,l)

Várias caracteristicas desse script merecem ser mencionadas. Primeiro, ohserve que osintervalos dos eixos x ey foram fixados; se isso não for feito, as escalas dos eixos serão

I I I

I

!

IIfif j

liliI

I

II,

f~1S~I&.",,~=: , ;; $.' _.~~ . ,'1:.:?:,:~j:;,.<': ..... " . '~~:, ';,(7--:.,S~:... , •

1".'1'"

. fI' ~'i'

li;,i

! ,J:iJ

Page 13: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

-rEiifFW_$I~,¥_-~, &

I'r:tl, ,jl

1

i;,

1.-

,("~i..i{'I"f

F,Ii

I

r

73Capitulo 3 Programoç60 com tv\ATlAB

c)equação quadrá~ica

raizes reais e complexasuma equação quadrática

é'rs'~%raízes complexasrl .= -b I (2 '" a).i1 = sqrt(abs(d» I (2 * a)r2 .= rl

f' i2.=-il~.er:t_cl_":' ",.end

Observe, na área destacada pelo sombreamento, como a indentação torna clara a estruturalógica básica; note também como as estruturas são modulares. Veja a seguir uma sessão doMATLAB ilustrando como a função opera:

quadrada(l, 1, 1)» raizrI

-0.5000il

0.8660r2

-0.5000i2

-0.8660

Tente novamente.')

-"'~"', '-umpUtodores e on6/jse de erros

I (2 '" a)I (2 '" a)

I (2 * a)

~::~~L -j.,',.'

\1' _ ,_ ~ ",'"~;_.".'" _ ,_",',",""":~.f?~:;t>!;~~." ( o,..':~: .~~-tt!'>f:~:~\,\lic':"",,,:>",,, drada a,"'"'"."., - '""'""','m """~,. ""-~"'oo,'"'".'~'"',. '];, '~~,"é".." """,..," ,.,

~'--.".""'••""'·e- .•.Um •• O", __ ~:"';' 'O' ,., ~"~;;" """':~:,; ", " ':.(por exemplo, raizes umcas ou valores trmalS) ou casos convencIOnaIS, que Utilizam,a fÓ~I'". ',:._,'I<'~',~',',:t,~'"',~",\.~,,',':',"'~,.'.L't, " _~~__", ':'r-

a.iZ

_ qu"'"''"'- ""~"'. -,," - ~', "'". ~~"""~. ~" 1lc',,"Av" • •••••

'i .f;H~;!~,\;:;~'''iiada' .' te de segun a em"""'" ''''" ~'''''" "', " " • .", ".f"" "~o"., , ''''''";" " ."""" ."%raiz quadrad" raizes de uma equação quadrática." f-O}r;"'t'"-",:.,:.~.),, _ % b '="' coefJc~e,' de arde", zero% raiz quadrada(a, b, ci, raizes reais e Complexas . "... '}",;, t. ~ coeficiente

" . . '<, .' . . •••h% de uma equação quadrarrc. , •..._, . . 'da' I da pr~me~r . _~z

. ",- %58" te rea 'meHa rOL

• "''''''', , •• ,,- ,.. . 'O '"."... ",' •. "_"." -•• " .•"" '"'' ".,>:.,. ',,, .'" '., da segunda ra~z .

" '"o 'L te r€a~ -da ruz' ,- ''''''' •• " -, '''",," 00'" i.. .' .••, ag' nária da segu ••

t .'" % rte ~m ..•.

' ......••,,"'"" '0"", "'. , " ' •• . "_

'"". . " .- . -- "". ,% rI '= parte real da primeira raiz }'---s'espeCiai";; i. ". . . '. '%caso ...% H ~ Par.e ,mag,narra da prrme'ra ra2, I\(" "-"f b _= O

" ""1.,' , 'ca' ,,- ,•• " "" " "O ''". """ ,".. .,." ••••• '"'

~,•~..'. '"." "'0'.'''" ." """'" ••,. , I "I"'" ''c rl,~,~cf b " ';

• . eIs e . . . ". "%casos espeCiaiS. I ;~"I .%solução. trlvJ:.a , . 1, Te'nte novamente. ) j. f _. . "I ção tr~v~a "

,,,. " ., <> •• , "" , --•••••0" "",'c,".. , .;~, .- __~ _''', ."- --'-,fu '~ro',"~ •.~ •.,,'""~~"~~. ""'""'- ".~,. "'", ',""h.'" ~_ .fu, '"., '

%fOrm,Ula q. ' "" C' % 'd.1se. I-d."=b"'Z-4.*a,if.d. >"" O •

'haizes rea2S' d}} f (2 • a) 1rl='(-b + sqrt( 2 * a)'r2 = (-b - sqrt(d,)) I (

%casos especiaisif b .•"" O

%raiz real únicarI = -c I belse%solução trivialdiSp('SOluÇão trivial.end

Após isso, desenvolve_se o código refinado para tratar os casos convencionais que utilizama fórmula quadrática:

%-fóri7lUla quadrática"c = b ~ 2 - 4 * a '"c;if d >"'" O

%raizes reaisrI =: (-h + sqrt(d»r2"" (-b - sqrt(d»else%raizes complexasrI =: -b I (2 '" a)il = sqrt(abs(d»)r2 = =1i2 = -ir

end

Por fim, pode-se simplesmente retornar eSSes blocos ao esboço geral da função para Obtero resultado final:

I

II I

I,

II,

(J~1

!,!-'

>:

Page 14: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

:-'-;"~--"~' "",.~.". ~- ". - .,-r~.:.':r;,..~)t"~,,, ':' ,. ,,ih '.. o. 'r,);'~ "."~;,:' ~..:{:.~:t';~;:~;;~~ r._ .. _" "_'.

J:~liII1 ~

Ii I

~' 'ir ,! I

I

I I1,' II ,;!,~, 1: '1.

j'/" .j;_.....J,

75Capítulo 3 Programação com MATlAS

fplot{func,lims)

onde fur,c é a função sendo traçada entre os limites do eixo x especificados porli:ils = [xmir, xmax] - para esse caso, func é a função importada. Esta funçãoé "inteligente", pois analisa automaticamente a função e decide quantos valores usar,de modo que o gráfico exiba todas as características importantes da função.

A linha de comando a seguir é um exemplo de como a função fp10t pode serusada para traçar um gráfico da velocidade do saltador de bungeejumping em quedalivre. A função pode ser criada com uma função anônima:

,» vel=@{t) ... _"

sqrt( 9 .81*68.1/0.25) * tanh{ s qrt{ 9 .81"-0.25/68.1) * t) ;

Pode-se, em seguida, gerar um gráfico de t ""Oa 12 s Como»fplot{vel,[O 12J)

3.5.2 Funções.funções

Asjunções-/unções (functionjllnctions) são funções que operam em outras funçõesas quais são passadas para elas como argumentos de entrada. A função passada paraa função-função é chamada dejimção passadaoujimção importada, como a funçãonativa fplot, que traça o gráfico de funções. Uma representação simples de suasintaxe é

ans =

27

Deve-se notar que antes do MATLAB 7, as funções inline desempenhavamum papel similar ao das funções anônimas. Por exemplo, a função anterior, fI, po-deria ser escrita como

» fl'=inline('xA2 + yA2', 'x', 'y');

Embora as funções inline estejam caindo em desuso em favor das funçõesanônimas, achamos que seria útil mencioná-las, pois alguns leitores podem ainda

,) utilizar versões mais antigas. Para aprender mais sobre o uso e as limitações dasfunções in1ine, consulte a Ajuda do MATLAB.

Observe que se, posteriormente, forem definidos novos valores para a e b, a, no"nimanão será alterada:funçao a» a = 3;» f2'(3)ans = 36

Assim, o identificador da função contém um "instantâneo" da função no mo-mentoem que ela foi criada. Caso se queira que as variáveis assumam novos valores,é necessário recriar a função - por exemplo, tendo alterado a para 3,

»f2=@(x) a*x"o;

com o resultado

» f2(3)

. <.<

- .'-~,

.:',

~

,

j'"

.1' ~

. ,

I

".f

I

Grande parte deste livro aborda o desenvolvimento de funções para avaliar numeri.camente Outras funções. Embora uma função personalizada POSSaser desenvOlvidapara cada nova equação analisada, talvez seja melh9r projetar uma função genéricae passar a equação que se deseja analisar como um argumento _ no jargão do MAT.LAB, essas funções recebem um nome especial:fimçõ~s:/Únções (funCtionfitnCliOflS).Antes de descrever como elas funcionam, apresentaremos as funções anônimas, ummeio prático para definir funçôes personalizadas pelo ~sUário sem a necessidade dedesenvolver um arquivo~M completo.

3.5.1 Funções anônimas

Asfitnções anônimas permitem criar funçôes simples sem desenvolver um arquivo_Me podem ser definidas na command window com a seguinte sintaxe:

-4.791]

» raiz _ QUadrada(o, 5, 1)rI ~

r2

-0.2000

»raiz qUad:ada(o, O, O)

SOluÇão tr~vial. Tsnts novaments.

» a "" 4,.

» b ""2;» f2::@(x) a*X"b;» f2( 3)

3.5 PASSANDO FUNÇÕES PARA ARQUIVOS'M

-0.2027

fhandle

~ @Ilista_ de _ argumentas) expreSSão

onde fhandle é o fitnclion handle ou identificador da função, que pode Ser usadopara chamar a função, lista _ de _ argumentos é uma lista de argumentos deentrada separados por virgula a serem passados para a função e expreSSão é qual.quer expressão válida do MATLAB. Por exemplo,

» fl==@(x,y) x:"'2 + y"'2,.

Uma Vez definidas na command window, tais funções podem ser Usadas comoqualquer Outra função:

» fl(J,4)a.1S '"

25

Além dos argumentos em SUa lista, uma função anônima pode incluir variáveisque existem na área de trabalho (workspace) onde ela foi criada. Por exemplo, pode-secriar uma função anônimaf(x) == 4."'" corno

»raiz QU3.drada(l, 5, I)~l ",

ans == 36

-'-1:1""", COfl1putndores e análise de errosII

1,,"

J

r

Page 15: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

~~;~:.~':;."/~»':::?:l. ',. '.•><' ,:5'+::V1::':"'" " _4 1

lfl'J" .)'I.\~O.1",

"in:, '-L~I't:~...'. '~llj.'1".'r l'l.

;; ;i~"•., " ..

I, ,I',.'1

[

1

I

!II,k,

77

função

função

Capítulo 3 Progromaçóo com MATlAS

a ser avaliadainferior do intervalosuperior do intervalode subintervalos

media (0,12, 6° )

function f = fune (t)f=sqrt( 9.81..••.68.1/0.25) -;,tanh( s qrt( 9 .81*0.25/68.1) *t);enó

Primeiroa função utiliza o comando 1inspace para gerar valores de x igualmente espaça-dos ao longo do intervalo; esses valores são, então, passados para uma subfunção funepara gerar os valores de y correspondentes, e em seguida o valor médio é calculado. Afunçãopode ser executada da command window como

» funeans =

36.0127

Vamosagora reescrever o arquivo-M de modo que, em vez de ser específico para fune, eleavalieuma função qualquer chamada f, passada como um argumento de entrada:

function f media = fune _ media( f, a, b, n)% fune media: altura média da função% f media=fune _ media( f, a, b, n): calcula o va.lo=-médio de uma% ao longo de um inte=valo% entrada:% f = função% a '" limite% b = limite% n = número% saída:% f media = valor médio da funçãox = linspaee(a,b,n);y '" f(x);f _ media = mean{y);end

Como removemos a subfunção fune, essa versão é genérica e pode ser executada da com-mand window como

» vel=@(t) ...sqrt( 9 .81*68.1/0. 25) *tanh( s qrt( 9 .81*0.25/68.1) ..••.t) ;»fune media(vel,O,12,60)

,.

"I

J2

~_._uv,.s. anó!;se de .nas '.-'f: .., ~ ...' ...,.~

J' .' .'. t" "". ' "',: ..... ver um arquivo~M para efetuar os mesmos cálculos:

o,' podemoS eScre...•, . f media'" fune _ media( ô-, b, n)

. J' -",'. {Uflct].on media: altu.=-a média da função::~.'.. ., fUncm-;dia=func _ media (a I b, n): calcula o Velar médio de umat 'l', t f ao longo de um intervalo" .... i" ;,t ".%

:/" % 'entrada: . ,'..

- . '" limite inferlor do lntervaloI • . d .

~ - % b '" limite superlor o lntervalo• ; . % fi := número de subintervalosj % saída:S _ % f -,media '" valor médio da funçao;f': .x:". linspace(a,b,n);j. Y'" func{x);,t f __media = mean(y);

r end•III,

I I .<-

2 4 6 8 _;. 10.,Gc6fica da 'elacidade 'ecsus o tempo com a lynçãa fplot

60

50

'O

30

OO

FIGURA, 3.3

o resultado é exibido na FIgura 3.3.

Observe que no restante deste livro, teremos muitas ocasiões para Usar fun_ções-funções nativas doMATLAB e desenvolver nossas próprias funçõeS-funçõesComono próximo exemplo.

EXEMPLO 3.8 COnstruindo e implementando uma função-função

I Desenvolva uma função. função para determinar o valor médio de uma função ao longo deum intervalo. Ilustre seu uso para a velocidade do saltador de bungee jumping ao longo dointervalo de t"" Oa 12s,

I U(I) ~ ft tanh ( fi!!r)ondeg= 9,81mfsl, m = 68,1 kg e c

d= 0,25 kg/

m

Solução. O valor médio da função pode ser calculado Com comandos-padrão do MATLAB,como

» t""linspace (O, 12) ;

» v'sqrC(9. 81'58 .1/0.25) * taoh (s qrt (9.81 '0.25/68.1) • t) ;» mean(v)aos ""

36.0870

A inspeção de um gráfico da função (Figura 3.3) mostra que eSSe resultado é uma estima_tiva plausível da altura média da curva.

I.'

fI.,

UI I} 11l•

Page 16: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

l~., II,

/.l:i I" f

!I!•

IilI•, I,

79Capítulo 3 ProÇJromoção com MATLAB

ans '"

38.9345

functiO:1 f _media'" fu"e _ media( f, a, b 1!1, varargin)x'" linspace(a,b,n);y'" f(x,'''-õ.rargin{:});f _media=mean(y};

Quando a função importada é definida, os parâmetros da equação devem seradicionados ao fim da lista de argumentos, como no exemplo seguinte, que utilizauma função anônima

» vel=@(t,m, e d) sqrt( 9 .81*r.l/cdl *tann( s qrt( 9 .81"'cd/m) * t),

Quando todas essas mudanças são feitas, a análise de diferentes parâmetrostorna.se fáciL Para implementar o caso em que m =68,1 kg e c

d= 0,25 kg/m, pode-se

entrar com o seguinte comando

» fune _media(vel, 0, 12, 60, 68 .1,0.25)ans =

36.0127

Um caso alternativo, por exemplo, m = 100 kg e cd= 0,28 kg/m, pode ser rapi-

damente gerado apenas alterando-se os argumentos:

.::.> func _ media (v e 1 , 0,12 I 6 O, 10 OTO. 28)

':

~~..~~ ..•. "- '"'

~3.6 ESTUDO OE CASO VELOCIDADEDO SALTADORDEBUNGEEJUMPlNG

Con"textualização. Nesta seção, usaremos o MATLAB para resolver o problema do ,saltador de bungeejumping em queda livre colocado no início deste capítulo, o que envol-ve ~ resolução de

f

':.

-".'" "~ erros

ans ""35.0127

Para demonstrar su~ natureza genér;ca, a !UnÇão-função rUnc _ mOdi. POde Ser apl;c'd .a outro caso Com a ,"serção de uma funçao dJferente. Por exemplo, ela POde"a ser u •para determinar O valor médio da função nativa sin entre O e br como s'da» fu

nc_ media(@sin,0,2*Pi,120)ôns '"

3.5.3 Passando parâmetros

Vimos no Capitulo I que os termos em um modelo ll1atematico podem ser divididosem variaveis dependentes e independentes, parâmeiros e funções forçantes. Para omodelo do saltador de bungee jumping, a velocidad1: (o) é a variavel dependente, otempo (f) é a variavel independente, a massa (m) e o coeficiente de arraste (c,) sãoparãmetros e a constante da gravidade (g) é a função forçante. E comum investigaco comportamento de tais modelos realizando uma análise de sensibilidade, o queenvolve a observação de como as variaveis dependentes mudam quando os paráme_tros e as funções forçantes são variados.

No Exemplo 3.8, desenvolvemos uma função-função, fune _ media, que foi em-pregada paca determinar o valor médio da velocidade do saltador de bungee jumpingpara o caso em que os parâmetros foram definidos Como m~ 68,1 kg e c,~ 0,25 kg/

m

.Talvez alguém quisesse analisar a mesma função com parâmetros diferentes; poderia_mos redigit., a função Com novos Parâmetros em cada caso, porém seria melhor apenasalterar os parâmetros,

Como deScrito na Seção 3.5.1, é possivel incorporar parâmetros em funçõesanônimas; em vez de digitar os valores numéricos, poderiamos fazer o seguinte:» m"'68.1.;cd"'0.25;

» vsl'@(t) sqrt (9 .81'm/co) 'tanh (s qrt (9.51 'ed/m) 't) ;.::..::.fune _ meCia(vel, 0, 12, 60)

ans '"

-6.3001e_017

Esse resultado faz sentido?

Pode-se perc<!ber que a função-função fune _ media esta agora projetada para av,liarqualquer expressão válida do MA TLAB - você podera vê-la em ação neste livro em váriosCOntextos: desde a solução de equações não lineares até a solução de equações diferenci'is .

•!

j1/

J

I' r

"

36.0127

No entanto, se quisermos que os parâmetros assumam novos valores, deve-serecriar a função anónima.

OMATLAB oferece uma alternativa mais interessante, Com a adição do termovarargin como último argumento de entrada da funçãO-função. Além disso, cadavez que a função impOrtada é chamada na função-função, o termo varaegin!:}deve ser adicionado ao fim de SUa lista de argumentos (observe as chaves). As linhasa seguir mostram como ambas as modificações podem ser implementadas para a fun_ÇãO-função fune - media (omitindo os comentarios para fins de concisão):

,

:1.. i

i

iII

'J ;

J,:.i.'".t.,:

Page 17: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

,... - - ---:-~"-~-~~7.;;:,,i~':iS-'J~:Z7:~:;?~.~..t.t'7:>( ..=:}P:tt'% #~l~',~~'r-:.,:<':./7;:;, . :. <'!"';;., <- '

..•

fi

:Irirj ~1 '..

'I !1',1

il: 'li'~.'.'I

riIf~

iI'I

W"

i.,~~\i

81

'li)tf,

Capitulo 3 Programação com MAnAS

'.~ ."tf - ti énd

velocidaàe2{d t, ti,

break, andtf,

dt :> ti, :hderiv( v) ;dvdt .••..h;

hi

Vi

t' '" t +

~;:'I

50.9259

50;8348

e"nd."Y

»ve.iocidade2(O.5, 0, 12, O)ans =

Além disso, pode-se usar um dt que não é (exatamente) divisível por tf - ti;

aos» velocidade2(0.35, O, 12, O)

~_, if t >=, end

~.

,•function~dv = deriv(v)dv 981 - (0.25 I 68.1)'" v*abs{v);

-;. :e~d::.. '.

~ .,'" ;'L~go que se entra no laço while, é utilizada uma estrutura if de Única linha paratestàr se a adição t + clt nos levaria para. for~ do intervalo~ Se não (o'que seria o caso noinício),nada é feito; se sim, encurta~se o intervalo ~ isto é, define-se o passo variável h

, .parao restante do intervalo; ti - t, o que garante que o último passo caía exatamente em;..ti. Após implementar esse passo final, o laço será encerrado, pois a condição t>= tiserá verdadeira.

Observe que antes de entrar no laço, atribuiu-se o valor do passo de tempo dt a outra. variá~el h: essa variável dummy (variável fictícia) foi criada de modó que o código nãoalter~o-yalor dado de clt,se e quando o passo de tempo for'encurtado. Isso é feito ante'ci.pandõ que poderia ser necessário usar:ó valor original de dt em outro lugat'no caso de, porexemplo, ess'e código estar integrado a uni programa ,maior. . .

. Se executarmos essa nova versão, o resultado será o mesmo obtido com a versão ba-seada na estrutura de laço for;

I .I Deve-se n?tar que o algoritmo ainda não 'é infalível. O usuário poderia, por engano,entrar com um passo maior que o intervalo de cálculo (por exemplo, tf: -, ti = 5 e

i dt = 20), entào seria interessante incluir na função um trecho (ou trechos) de código~e.~tinad~ ~.~ete~ção de erros e per~mitir.que 2.~suário ~orrig,isse o e~í:oco ...'-,-' ' .

i

!"

I

,'.I

II,,

Ii

"'"..••.. ......•...

~"'!

- ~ ••• ""'lOS

'* ',-*aOS(V);

dV=deri:.r(v)

- (0.25 I 68.1)

v

vi;

%

t

v

.'r~.

~:\ .'0 .. _-.' .~

. -~. .-~--- " • •• y' ••

onde n é o número de iterações do laço. Como esse número é exato (isto é, a ;;;'ão é ; •...•, " .". ~~-'-C[iOn v _ ,1m

. "~ , "".'cn--, '"~" ~-"' ,~'"" -,~ •• " """"'-" ''''"''c '""",,,, ";.,,"WM _ ••• , _. '"~'".""""""_ , • ." •• ""." ."'-"" '. "

lJ ~".•. \I~-:"'''''-..",.""""""".".".'" 'L .."f• • c., ""'"'"'" •• , '.0 • ."., "0," ••"'''''' ", ••,'o'., 1f"••'"~.• ."", '''0",.""". ". " .•" . I I".,% - ResOluç.,O P~lb mét?do de EUler da velocidade. .,i;. J

1-:l_:~ ~d;~t'l~+% do saltador de bungee ]Umping ..<. " J ,

'. ,

'% entrada,. • .,% dt ~'passo de tempo Is) .

% ti" instante de tempo inicial (s)t£ = instante de tempo flnal (5)

% vi" valor inicial da var;,hel dependente ("'/S)% saída:

i v um = v~locidadE em tf (m/s)ti;

n = (t f ,...ti) / dt;for ,i = 1:n

. d'vdt"='deriv(v);v =.v + dVdt * dt;t = t + dt;

end

V .Íimeod

50.6131

functiondv = 9.::11end

Essa função pode ser chamada da command window com.o resultado:.» veloCid2del(O. 5, 0,12, O)ans =.

50.9259

Observe que o valor obtido da solução analitica é 50,6175 (Exemplo 3.1); POde-se,então, aplicar um valor bem menor a dt para obter um resultado numérico mais acurado:

» ~~lOcidadel(O.oo!, O, 12. O)dns ""

I Embora essa função seja simplesde Programar, ela não é infalivel; ela nãofunclonará,por exemplo, se o intervalo de cáfculo não for divisive( pelo passo de tempo. Para abranger

I tais casos, um laço .while ... break pode substituido no local da área destacada (Observeque Oscomentários foram omitidos para fins de concisão):t,. ..,

I I I

Ii

II,

r

I't

1111,

" 11ILi

Page 18: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

I

Ir'.1

W

I,':1,1

\

Ili!;!;','!, ~~i :,'1)'"

rr:~"l

I

,r 't ..

~.jJ-,

Tm.I"c)28,333,622,1

17,6

22,9

x'

T",..,. (&C)

22,1

23,15,210,610,7

senx ,: X - 3Tx3

senx= x- 3T+ 5!

Cidade

Miami, FL

Yumo, AI..Bismarck, NOSeottJe, 'NABoslon, N\A

Desenvolva uma função no MATLAB que calculea temperatura média entre dois dias do ano parauma cidade particular. Teste a função para (a) ja-neiro-fevereiro em Yuma, AZ (t : O a 59) e (b)julho-agosto em Seattle, WA (f: 180 a 242).3.5 A função seno pode ser calculada pela se-guinte série infinita:

anual (= 2;r/36S) e 1 são os dias de temperaturamáxima (= 205 d). V:ja os parâmetros para algu-mas cidades dos Estados Unidos na tabela a seguir:

Capítulo 3 Programação com /lMTLAB 83

x3 x5senx : X - - + _ - .3! 5!

Desenvolva uma função no MATLAB para im-plementar essa fórmula de modo a calcular e exi-bir os valores de sen x assim que cada termo dasérie for acrescentado. Em outras palavras, calculee imprima a sequência de valores para

senx: X

x3

até o termo de ordem n escolhido. Para cada valorespecificado, calcule e mostre o erro relativo per-centual como

valor real - aproximação%erro : -------- X 100%

valor realComo um teste. utilize o programa para calcularsen(0,9) empregando oito termos - isto é, até otermo x'~/15!.

3.6 Para especificar a localização de um pontocom relação à origem do espaço bidimenslonal(Figura P3.6) são necessárias duas distâncias:./ As distâncias horizontal e vertical (x,y) em

coordenadas cartesianas../' O raio e o ângulo (r, B) em coordenadas

polares.

2R

R

raio do tanque é R.

FIGURA P3.1

U anl,.dade de dinheiro P é investida emJ.2. ma quuma conta cujosjuros são computado~ no final do

. d O valor de retorno F fornecido por umapeno o. . .taxa.dejuros i, depOISde n penados, pode ser de-tc.rrpinadopela seguinte fórmula;

F"'" P(l + i)1l

Escreva uma função no MATLAB (arquivo-M)para calcular o valor de retomo do investimentopara cada ano de 1 a n. Os argumentos de entradada função devem incluir o investimento inicial P, ataxa de juros i (um valor decimal) e o número deanos n para o qual o valor de retomo deve ser cal-culado. A saida deve consistir em uma tabela comcabeçalhos e colunas para n e F. Execute o progra-ma para p"", R$ 100.000,00; i"'" 0,05 e n: 10 anos.3.3 Há fórmulas econômicas disponiveis paracalcular pagamentos anuais de empréstimos.Considere que você tenha emprestado uma quan-tidade de dinheiro P e tenha concordado em pagarem li pagamentos anuais com uma taxa de juros i.A fórmula para calcular o pagamento anual A é

A: P i(! + i)1l(J+i)1l-1

Escreva uma função no MATLAB para calcularA. Teste-a com P = RS 100.000.00 e uma taxa dejuros de 3,3% (i' = 0,033). Calcule os resultadospara 11: 1, 2, 3, 4 e 5 anos e mostre o resultado emuma tabela com cabeçalhos e colunas para n e A.3.4 A temperatura média por dia para uma deter-minada área pode ser calculada aproximadamentecom a seguinte função

T: T."IlelÍ + (Tmax ~ Tmed)coS(cu(t - tmax»

onde ~-neflé a temperatura média anual. T",ox é a tem~peratura máxima, C) é a frequência de variação

,i

.T~

-;-.•~>:j)A.

'f"

1,34,0

1,3

3,8

1,51,25

eM

0,91

R

d

uma funÇão dos valores dados de R.e d Desenvol_va a função de modo que ela retorne o volumepara todos os casos em que a profundidade é me-nOr que 3R.. Retorne uma mensagem de erro("TranSbordo") Se Você transbordou o tanque, istoé, d> 3R.. Teste a função COm os seguintes dados:

lj "'tf. -:''''t;

hi

t >"" tf, break, end

=: y;

.if

50.92.59

'2nd

Y fim

" ""_ ',i'i}Como "ma observação final, deve.se reconhecer que o código anterior não é g; ~;i

co, isto é, ele foi projetado para resolver o prOblema especifico da velocidade do sal,~~~,'de bungee jumping Uma versão mais genérica pode ser desenvolvida comoA~;l'l

'4'fUDCtion Y- fim < Odesimp(dYdt, dt, ti, tf, Yi) ';'iI: "" ti; y =:: yi; h '" dt;i-!hilE(l)

if t + dt > ti,'Y '"Y t dYdt(y)t "" t .;. h;

6.9645

»dVdt<@(V) 9,81-l0,25/68.1) 'v'abslv),'

»OdeSimp(dVdt, 0.5, o, 12, D)2n,,, =

dn,s =

"--''''> '" analise de erros

Observe como foram retiradas as partes do algoritmo específicas para o exemplo do,bungee jumping (incluindo a subfunção que define a eq"ação diferencial), mantendo." ,

'-,."-"'"~-~._~"~"""",.~-_" m'para ~ ;,-_o "~"'""~".", "o,".OW~,"'"""'_" __ ""co.,,, "com Unta f""Ção anônima e passando se" identificador (hanri}e)para que a função'fúnção; •odeSimp gere a solução ", , , I

;

Pode. se, agora, anahsar uma função dIferente sem a neceSSidade de entrar no arqul' '. ,vo.M e mod,fica.lo Por exemplo, se y ~ 10 em I ~ O, a equação diferenCIal dy/dt ~ -O,ly Item a solução analítIca y ~ lOe'

o", POrtanto, a solução em t ~ 5 sena Y(5) ~ lOe'" '(>' ~

6.0653 A função.função odes~mp Pode ser Usada pala obter o mesmo resultado numen."-",-~ I»Odes"mpl@(Yi -o 1'y,O 005,0,5,10) I

)

j11> • PROBLEMAS

3.1 A Figura P3.1 mOstra um tanque cilíndrico debase Cônica. Se o nível do líquido for muito baixona parte cônica, o volume será simplesmente o vo~lume cônico de líquido; Se o nível de líquido esti~ver no tTleioda parte cilíndrica, o volume total delíquido incluirá a parte cônica preenchida e a par-te parcialmente oCupada do cilindro.

Use estrutur" de decisãopala escreverum arqui.vo-M a fim de calcular o volume do tanque como

I I I

I'

l"I

IH

11'71f jI:,lI]'Ir11

Page 19: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

'-----5'------ 2'--.-1'-:-2'--.

.,~

";~

,.:u

.'. ;

~-!I.,.-.f'":.'

, "

nl,:Ji..

l'"

!

,,

I!II

15 kips

••150 kip-ph

3.11 O volume V de líquido em um cilindro hori.zontal oco de raio r e comprimento L é relaciona-do à profundidade do líquido h por

v~ [,2co,-, ('~h)-V-h)v'2'h-h2]LDesenvolva uma função no MATLAB para criarum gráfico do volume versus a profundidade.Aqui estão as primeiras linhas:

function cilindro (r I L, tit.ulo_gráfico)VOliliT<ede ~~ cilindro horizontal

'! entradas:r = raioL = cO!:'lprimento

% titulo_gráfico '" string contendo otitulo do gráfico

Teste seu programa com

ta:-,que.

» cilindro ( 3 , 5'.'Voluffie versus profundidade para um

çil~ndrico horizontal')

3.12 Desenvolva uma versão vetorizada do se-guinte código:

Capítulo 3 Programação com Mt\TLAB 85

t_1:11cio=0; t_fim=20; n1=8:t (1) =::_inicio;y(i}=12+6*cos(2*pi'"t(i}/(t fim-tinicio} } ;for i""2:oi+1

t( i} "'t (i-I) +( t_fim-t_inicio) loi;y(i}""10 + 5*cos(Z*pi*t(i) I.

(t_fim-t_inicio) )ono

3.13 O método babilônico, um antigo sistema paraaproximação da raiz quadrada de qualquer núme-ro positivo a, pode ser formulado como

156{x - 8)3

20 kipslpés

FIGURA P3.10

.~.

" S B H

0,036 0,0001 10 2

0,020 0,0002 8 1

0,01'5 0,0012 20 1,50,030 0,0007 25 30,022 0,0003 15 2,6

onde li é a velocidade (m1s), S é a inclinação docanal,n ê o coeficiente de rugosidade, B é a largu-r;l (m)"eH é a profundidade (m). Os seguintes da-doseslão disponíveis para cinco canais:

Escreva uma função no MATLAB que calcule avelocidadepara cada um desses canais. Insira es-ses valores em uma matriz em que cada colunarepresente um parâmetro e cada linha representeum canal. O arquivo-M deve exibir os dados deentrada com a velocidade calculada na forma detabela, onde a velocidade é a quinta coluna. Incluacabeçalhos na tabela para identificar as colunas.J.to Uma viga de suporte simples está carregadacomo ilustrado na Figura P3.1O. Usando funçõesde singularidade, o deslocamento ao longo da vigapode ser expresso pela equação:

-5IIv(X) == -[(x - 0)4 - (x - 5)4J +. 6

, 57.+ 75{x - 7)- + 6x~- 238,25x

Por definição, a função de singularidade pode serexpressa como segue:

(x-an= l(x-a)n quando x > aI) ° quando x :5 a

Desenvolva uma função no MATLAB que trace umgráfico do deslocamento (linha tracejada) versus adistância ao longo da viga, x. Observe que x == O naextremidade esquerda da viga,

,I

~:

---".-

"1"- .,--000"0' •..•.. \ .... __

" .. ~

=x y ~ ..I2 O~ .~1 .-3 1 :

-2 O . . ..-1 -2 :1.O O IO ~ .

3.. 2 4

i,

~~(~)Y3U n B+ 2H

= l.t,c C'itécic _-

A 90 $ valor numérico :$ J 00

8 80 s valor num~rico < 90

C 70 $ valOr num~rico < 80

O 60 $ Yolor numérico < 70

F volor numérico < 60

A prin,elra IJnha da função deve ser

function nota", conceito (valor JH.:mérico J

Desenvolva a função de modo que ela exiba umamensagem de erro e seja encerrada no caso emque o usuário entra com um v-a1or_."1u;néricomenor que O ou maior que 100. Teste sua funçãoCom 89,9999; 90; 45 e 120.

3.9 A Equaçâo de Manning pode ser usada paracalcular a velocidade da água em um canal abertoretangular,

xy

8<O>0

ton-I(Yl.rj + ;r<O <Olon~I(vlx) - lt<O ~O ,~O

>0lt/2~O <O

-;r/2~O ~OO

É relativamente simples caloul" as coo'denadasCartesianas (x, y) Com base nas COordenadas pola_res (r, 8), mas o inverso não é tão simples. O raiopode ser calculado peja seguinte fórmula:

ro: v9+?Se as Coordenadas estiverem no primeiro e noquarto que.d.â..iJ.tes (isto é. x > O), então Urna fór-

mula simples pode ser utilizada para calcular ():

8 ~ tan-'(;)A dificuldade surge para os demais casos. A tabe_la a seguir sintetiza as Possibilidades:

EScreva um arquivo_M bem estrUturado utilizan_do a estrutura if ... elseif para calcular r e (}cOmo uma função de x ey e expresse Osresultadosfinais para (J em graus. Teste seu programa paraavaliar os seguintes casos:

J.. ,

I

II

I

-!ijj~;"4"t:.' ~r~;l:~.~._.;<:; •• ''':' •

Page 20: I ,1 '' li', '~I.:-:.~-'-----.;~ ~, Programação com ... · Aprendemos também que essa equação poderia ser resolvida com o método de ... ta _ argumentos é a lista de argume~tos

_.,~,,~t:ue erros

"•

,I

if I ,;>;:f

[, ~, i"r~

t..".i~:tt~:'.,

i

II ",I!I ,

I

3.22 Desenvolva uma função para produzH aanimação de 'uma partícula se movendo em umcirculo em coordenadas cartesianas com base emcoordenadas radiais. Assuma um raio constante,r, e permita o ângulo.. fi, aumentar de O a 211: emincrementos iguais. As primeiras linhas da fun-ção devem ser

funct.ior, fasor( r, nt, nrn}

~ função p3.ra =s;:.rar a 6rbi~a de 1.1.,"11fasor% r "" raio\ nt ••n~~ero de incrementos para the~a% nro = número de filmes (~ovies)Teste sua função com

fasor(l, 25E, 10)

3.23 Desenvolva um script para produzir um fil-me para o gráfico da borboleta do Problema 2.22.Use uma partícula localizada nas coordenadas x-ypara visualizar como o gráfico evolui no tempo.

Capítulo 3 Programaçõo com fv\ATLAB 87

~','~'

'. .,'. Td para {el e teste sua função para<:uina:hn/ulsO I. ~o' l'.15(l5 II s~gUlr. .." ';"~!6 4 2J; b" [2 64],

..:(II!....il.;;. 32 -6J; b", (4 -31);Ih} 'i! ,"" "\', ' .;.,.' .... ",. ,[2 -2 1J; b"" [4 2, -4J,

.'(êl ,~'a'':':';").. '_.[_10 O]; b" [O -10];[d d- .'

.. , 21 Com base no Exemplo. 3.6. desenvolva um.~'. ,_ produzir uma aOlmação de uma bola:;crzpl' p '" - o

'quic'!ouo,s.endo que DO ::= 5 m/s e {Jo ::= )0 . Parafazcr isso, você deve ser capaz de prever exata-m~Jltc,quando a bola atinge o chão. Nesse ponto, osentido muda (o novo àngulo será igual ao negati-

. Vil' do ângulo no impacto), e a velocidade decres-'tdÓ em módulo para renecir as perdas de energiacausadas pela colisão da bola com o chão. A altera-~iío'navelocidade pode ser quantificada pelo coefi-

'âenle de restituição CR, que é igual à razão entre a\'~Icicldadedepois e a velocidade antes do impacto.Para o presente caso, use um valor de CR = 0,8.

:;; L •• \" 'ót1 .,

;.•,

, \

~onde mes é o mês (1-12), -jia é o dia (l-JIJeS8;.;to deve ser ° para ano não bisseXto e l!;j~-

ano bissexto. Teste sua função para I de jan . Para'd O elttl(j~1997,29 de [evoe",o , e 20 4, I de "'''co d, 2QrJ' .~

21 de juoho de 2004 e JI de deze"'b,o de20

0;" :"; :'DIca: uma boa maneIra para fazer ISSO é Comb'. f ' '

)n~r .. .as estruturas for e switch. '. "

; 3,17 Deseovolv~ u",. fu"ç,o 00 MATLAB P', :1,deteemmar os dias decorndos e", U'" '00, A PÓ, "1meira linha da função deve ser definida COl7lo

function nd = dias(mês, dia, anO)

,IJ

Onde mês é o mês (1-12), dia é o dia (1-31) e anO,é o ano. Teste SUa função para I de janeiro de 199]29 de fevereiro de 2004, I de março de 2001, 2J d~

junho de 2004 e 31 de dezembro de 2008.

3.18 Desenvolva uma funçãO-função no MATLAB ~que retorne a diferença entre o valor máximo e imínimo da função, importada, dado um intervalo (da variável indep~.ndente. A funçãO-função devegerar um gráfico é(a função importada para o in_tervalo. Teste seu programa para os seguintes casos;(a) 1(1) "'O 8e-o..l5tsen(1 _ 2) para 1 ""° a 6lr.(b) f(x) = e .•.•.sen(lIx) para x "'O0,01 a 0,2.

(c) A função nativa humps para;c = ° a 2..3.19 MOdifique a função odesimp desenvolvidano fim da Seção 3.6 de modo que se passa passaros argumentos da função importada. Teste-a parao seguinte caso:

»d,tdt"O@('r,rn,Cd) 9.81-{cd/m) *V"2;

» OdeSimp(dVdt,O.S,O'12,_lO,70,O'23)3.20 Um vetar em coordenadas Cartesianas podeser pensado Como uma repreSentação de valoresao longo dos eixos x, y e z multiplicados por umvetor unitário (i, j, k). Para tais casos, o produtoescalar de dois desses vetores {a} e {b} COrres_ponde ao produto de seus módulos e do cossenodo ângulo entre eles, COmo em

0:51:588 S 1:5 1616:5/:526

1> 26caso contrário

x + a/xx""_2

e ~ IXnoYQ - Xvelhol

~xnovo

Escreva uma função bem estruturada no MAT-LAB com base na estrutura de laço ~Ihile...b='lak para implementar esse algoritmo. Use in-denração adequada, de modo que a estrutura docódigo fique clara. Em cada passo, estime o erroem sua aproximação COmo

f101'- 5/624 - 3t

0(1) "'O 361 + 12(/ _ 16)22136e-O.1(t -25}

O

Repita o laço até que e seja menor ou igual a umvalor específico e projete seu programa de modoque ele retorne o resultado e o Crro. Certifique_sede que ele Possa avaliar a raiz quadrada de nÚme_ros iguais Ou menores que zero. Para o tiltimocaso, eXiba o resultado como um número imagi_nário, por exemplo, a raiz quadrada de -4 seriaretornada Como 2i. Teste seu programa avaliandoa '='0, 2, lOe-4parae"'O 1 x 10-4.

3.J4 Funções definidas pOr partes às vezes são!iteis Quando a relação entre uma variável depen_dente e uma variável independen'te não pode seradequadamente repreSentada por uma única equa_Ção. Por exemplo, a velocidade de um foguete po-deria ser descrita por

Desenvolva Urna função no MATLAB para calcu_lar D corno uma função de I. Em seguida, desen.volva um script que utilize essa função para gerarum gráfico de 1) versus t para t "':-5 a 50.

3.15 Desenvolva uma função no MA TLAB cha.mada arredonda para arredondar um número;cpara um número especificado de n dígitos deci_mais. A primeira linha da função deve ser defini.dacamo

1',,',1

"

J

•Ii ,

/,;['I",:)~,H!~'j:/::'1

'.'f 1

",>

'f" '\i,I:: :1I ~ •..' ,I: ..,1'.,

)lr1:/

,J" I' I

II, ,

~.'f

1

II

{a}'{b} <==abcos8

O prOduto vetorial produz outro vetor, {e} "'O{a} X

{b}, que é perpendicular ao plano definido por {a}e {b} tal que seu sentido é especificado pela regra.da mão direita. Desenvolva uma função no MAT_LAB que tenha como argumentos de entrada doisVetores em coordenadas cartesianas e retorne 8,{e} e o módulo de {e}, e gere um gráfico tridimen_

sional dos tres Vetores {a}, {b} e {e} Com suas Ori-gens no zero. Use linhas tracejadas para {a} e {b}

'.';'- ':'}':".

,~

fw.::.ction xr '" arredonda (x, r;)

Teste sua função arredondando cada um dos núme.ros a seguir para dois dígitos decimais: x "'O477,9587; ,-477,9587; 0,125; 0,135; -0,125 e -0,135.

3.16 Desenvolva uma função no MATLAB paradeterminar os dias decorridos em um ano. A pri.meira linha da função deve ser definida como,

functi:JZ'; nd •• dias(mês, dia, bissextO)