programação em matlab · 2017. 3. 17. · o matlab permite escrever várias linhas de comandos em...
TRANSCRIPT
Programação em MATLAB
Computação – 2º Semestre 2016/2017
Ficheiros-M
O MATLAB permite escrever várias linhas de comandos
em ficheiros de texto denominados ficheiros-M
Os ficheiros-M têm esse nome porque a sua extensão é
sempre ‘.m’
Existem dois tipos de ficheiros-M
Ficheiros de script
Ficheiros de funções
Programação em MATLAB 220 Março 2017
Ficheiros de Script
Um ficheiro de script é simplesmente uma sequência de
comandos gravada num ficheiro
Quando é executado um ficheiro de script é como se a
sequência de comandos fosse escrita na janela de comandos
Os scripts são executados quando se escreve o nome do
ficheiro (sem a extensão .m) na janela de comandos
Programação em MATLAB 320 Março 2017
Ficheiros de Script
Exemplo: calcular a velocidade do bungee jumper
Seleccionar: File → New → M-File
Escrever no editor:
g=9.81; m=68.1; t=12; cd=0.25;
v=sqrt(g*m/cd)*tanh(sqrt(g*cd/m)*t)
Gravar o ficheiro com o nome scriptdemo.m
Escrever na janela de comandos:
>> scriptdemo
v =
50.6175
As variáveis criadas no script são visíveis na janela de comandos:
>> g
g =
9.8100
Programação em MATLAB 420 Março 2017
Ficheiros de Funções
Os ficheiros de funções são diferentes do ficheiros de script.
Implementam funções que aceitam argumentos (inputs) da
janela de comandos e retornam valores (outputs) para a janela
de comandos
As variáveis criadas e manipuladas no contexto de uma função
não são visíveis na janela de comandos
Programação em MATLAB 520 Março 2017
Ficheiros de Funções
Uma função deve escrever-se na forma:
function outvar = funcname(arglist)
% helpcomments
statements
outvar = value;
end;
em que:outvar: nome da variável de output
funcname: nome da função
arglist: lista de argumentos de input (separados por vírgulas)
helpcomments: texto que é mostrado com >> help funcname
statements: comandos da função
A função deve ser gravada num ficheiro denominado funcname.m
Programação em MATLAB 620 Março 2017
Ficheiros de Funções
Exemplo: calcular a velocidade do bungee jumper
Seleccionar: File → New → Function (só versão 2010)
Escrever no editor:function v = freefall(t, m, cd)
% freefall: bungee velocity with second-order drag
% v=freefall(t,m,cd) computes the free-fall velocity
% of an object with second-order drag
% input:
% t = time (s)
% m = mass (kg)
% cd = second-order drag coefficient (kg/m)
% output:
% v = downward velocity (m/s)
g = 9.81; % acceleration of gravity
v = sqrt(g * m / cd)*tanh(sqrt(g * cd / m) * t);
end
Programação em MATLAB 720 Março 2017
Ficheiros de Funções
Exemplo: calcular a velocidade do bungee jumper
Gravar o ficheiro com o nome freefall.m
Escrever na janela de comandos:>> freefall(12,68.1,0.25)
ans =
50.6175
Se quisermos calcular a velocidade de um saltador de 100kg ao
fim de 8 segundos:>> freefall(8,100,0.25)
ans =
53.1878
As variáveis da função não são visíveis na janela de comandos:>> g
??? Undefined function or variable 'g'.
Programação em MATLAB 820 Março 2017
Ficheiros de Funções
Exemplo: calcular a velocidade do bungee jumper
Para visualizar os comentários de ajuda:>> help freefall
freefall: bungee velocity with second-order drag
v=freefall(t,m,cd) computes the free-fall velocity
of an object with second-order drag
input:
t = time (s)
m = mass (kg)
cd = second-order drag coefficient (kg/m)
output:
v = downward velocity (m/s)
Se nos esquecermos do nome da função:>> lookfor bungee
freefall.m: bungee velocity with second-order drag
Programação em MATLAB 920 Março 2017
Ficheiros de Funções
As funções podem retornar mais que um resultado
Exemplo: calcular a média e o desvio padrão de um vector
Criar o ficheiro stats.m:function [mean, stdev] = stats(x)
n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/(n-1)));
end
Chamar na janela de comandos:>> y = [8 5 10 12 6 7.5 4];
>> [m,s] = stats(y)
m =
7.5000
s =
2.8137
Programação em MATLAB 1020 Março 2017
Ficheiros de Funções
Um ficheiro de funções pode conter um única função, ou uma função primária e uma ou mais subfunções.
A função primária é a primeira das funções, cujo nome corresponde ao nome do ficheiro.
As subfunções são as que vêm a seguir à função primária.
As subfunções são apenas acessíveis pela função primária e pelas outras subfunções escritas no mesmo ficheiro.
são invisíveis da janela de comandos e outras funções ou scripts
Programação em MATLAB 1120 Março 2017
Ficheiros de Funções
Exemplo: calcular a velocidade do bungee jumper
Criar o ficheiro freefallsubfunc.m:
function v = freefallsubfunc(t, m, cd)
v = vel(t, m, cd);
end
function v = vel(t, m, cd)
g = 9.81;
v = sqrt(g * m / cd)*tanh(sqrt(g * cd / m) * t);
end
Chamar na janela de comandos:>> freefallsubfunc(12,68.1,0.25)
ans =
50.6175
>> vel(12,68.1,.25)
??? Undefined function or method 'vel' for input arguments
of type 'double'.
Programação em MATLAB 1220 Março 2017
Input e Output
A função input permite ao utilizador a entrada de valores directamente da janela de comandos: n = input('promptstring')
mostra o texto 'promptstring' e espera que o utilizador escreva um número que será guardado na variável n
n = input('promptstring','s')
mostra o texto 'promptstring' e espera que o utilizador escreva um string que será guardada na variável n
A função disp permite ao utilizador a visualização de valores na janela de comandos: disp(valor)
mostra no ecrã o valor (pode ser uma constante numérica, uma variável numérica ou uma string)
Programação em MATLAB 1320 Março 2017
Input e Output
Exemplo: calcular a velocidade do bungee jumper
Criar o ficheiro freefalli.m:function freefalli
% freefalli: interactive bungee velocity
% freefalli interactive computation of the
% free-fall velocity of an object
% with second-order drag.
g = 9.81; % acceleration of gravity
m = input('Mass (kg): ');
cd = input('Drag coefficient (kg/m): ');
t = input('Time (s): ');
disp(' ')
disp('Velocity (m/s):')
disp(sqrt(g * m / cd)*tanh(sqrt(g * cd / m) * t))
end
Programação em MATLAB 1420 Março 2017
Input e Output
Exemplo: calcular a velocidade do bungee jumper
Chamar na janela de comandos:
>> freefalli
Mass (kg): 68.1
Drag coefficient (kg/m): 0.25
Time (s): 12
Velocity (m/s):
50.6175
Programação em MATLAB 1520 Março 2017
Input e Output
A função fprintf permite ao utilizador a visualização formatada de valores de variáveis juntamente com texto: fprintf('format', x, y,...)
em que format é uma string que especifica o formato com que se quer apresentar os valores das variáveis x, y,... e como estes devem ser integrados no resto do texto.
Ex: mostrar, integrado num texto, o valor da velocidade com 7 dígitos sendo 4 decimais
>> velocity = 50.61751452;
>> fprintf('The velocity is %7.4f m/s\n', velocity)
The velocity is 50.6175 m/s
Programação em MATLAB 1620 Março 2017
Input e Output
Os códigos de formato definem como os valores numéricos devem ser visualizados:%d – inteiro %e – notação científica (com ‘e’)%E – notação científica (com ‘E’) %f – decimal
Os códigos seguintes produzem resultados especiais:\n – muda de linha\t – tabulação \\ – escreve \
Programação em MATLAB 1720 Março 2017
Input e Output
O MATLAB permite a escrita e a leitura dos valores das variáveis para ficheiros com um formato especial (.mat) save filename var1 var2 ... varn
grava as variáveis num ficheiro denominado filename.mat.
se não for indicada nenhuma variável, são gravadas todas.
load filename var1 var2 ... varn
lê as variáveis de um ficheiro denominado filename.mat.
se não for indicada nenhuma variável, são lidas todas.
Os ficheiros .mat não são ficheiros de texto e por isso só são legíveis no ambiente MATLAB.
Programação em MATLAB 1820 Março 2017
Input e Output
Ex: gravar vectores de velocidades e coeficientes de resistência criam-se as variáveis:>> g=9.81;m=80;t=5;
>> cd=[.25 .267 .245 .28 .273]';
>> v=sqrt(g*m ./cd).*tanh(sqrt(g*cd/m)*t);
gravam-se as variáveis:>> save veldrag v cd
>> clear
agora não existem variáveis:>> v
??? Undefined function or variable 'v'.
obtêm-se de novo as variáveis:>> load veldrag
>> who
Your variables are:
cd v
Programação em MATLAB 1920 Março 2017
Input e Output
Para criar ficheiros de texto legíveis acrescentar -ascii save -ascii filename V
grava o valor da variável V num ficheiro denominado filename.
os valores são gravados como seriam visualizados com disp(V)
tem que se indicar a extensão (normalmente .txt ou .dat)
load filename
lê para a variável filename (sem extensão) os valores gravados
V = load(filename)
lê para a variável V os valores gravados
Programação em MATLAB 2020 Março 2017
Input e Output
Ex: gravar os valores de uma matriz 24
cria-se a matriz:
>> A=[5 7 9 2;3 6 3 9];
grava-se a matriz num ficheiro de texto:
>> save -ascii simpmatrix.txt A
>> clear
lê-se o ficheiro e cria-se uma nova variável com o nome do ficheiro:
>> load simpmatrix.txt
>> simpmatrix
simpmatrix =
5 7 9 2
3 6 3 9
lê-se o ficheiro para a variável A:
>> A = load('simpmatrix.txt')
Programação em MATLAB 2120 Março 2017
Programação Estruturada
Um programa pode ser simplesmente uma sequência de instruções ou pode ser estruturado não sequencialmente
Existem dois tipos de instruções que permitem o encadeamento de comandos de uma forma não sequencial:
Decisões (if, if…else, if…elseif) e Selecções (switch)
permitem instruções alternativas baseadas na satisfação de condições
Ciclos (for, while) permitem o encadeamento repetitivo de instruções
Programação em MATLAB 2220 Março 2017
Decisões
Decisões são implementadas com instruções if que podem incluir alternativas elseif ou else.
A decisão de qual das alternativas deve ser seguida depende do resultado de condições que podem ser verdadeiras ou falsas.
Se nenhuma das condições é verdadeira então deverá ser seguida a alternativa associada ao else.
Programação em MATLAB 23
if condição
instruções
end
if condição
instruções
else
instruçõeselseend
if condição1instruções1
elseif condição2instruções2
...elseif condiçãon
instruçõesnelse
instruçõeselseend
20 Março 2017
Condições
A condição mais simples é uma expressão relacional: valor1 relação valor2
os valores podem ser constantes ou expressões
a relação é um dos operadores relacionais da tabela seguinte
Programação em MATLAB 24
Exemplo Operador Relação
x == 0 == Igual
unit ~= 'm' ~= Diferente
a < 0 < Menor
s > t > Maior
3.9 <= a/3 <= Menor ou igual
r >= 0 >= Maior ou igual
20 Março 2017
Condições
É possível combinar várias expressões relacionais usando operadores lógicos: ~expressão (Negação)
verdadeiro se a expressão é falsa; falso se a expressão é verdadeira
expressão1 & expressão2 (Conjunção)
verdadeiro se ambas expressão1 e expressão2 são verdadeiras
expressão1 | expressão2 (Disjunção):
verdadeiro se expressão1 ou expressão2 é verdadeira
Prioridade: ~, &, |
Ex:>> x = 0;
>> -1<x & x<1
ans =
1
>> -1<x<1
ans =
0 (porquê?)
Programação em MATLAB 2520 Março 2017
Condições
Exemplo de avaliação de uma condição:
Programação em MATLAB 2620 Março 2017
Instrução if
Exemplo: verificar se uma nota é suficiente para passar (60%)
Criar o ficheiro grader.m:
function grader(grade)
% grader(grade):
% determines whether grade is passing
% input:
% grade = numerical value of grade (0-100)
% output:
% displayed message
if grade >= 60
disp('passing grade')
end
end
Testar na janela de comandos:>> grader(95.6)
passing grade
Programação em MATLAB 2720 Março 2017
Instrução if
Exemplo: utilização da função error num if de uma única linha
Criar o ficheiro errortest.m:
function f = errortest(x)
if x == 0, error('zero value encountered'), end
f = 1/x;
end
Testar na janela de comandos:>> errortest(10)
ans =
0.1000
>> errortest(0)
??? Error using ==> errortest at 2
zero value encountered
Programação em MATLAB 2820 Março 2017
Instrução if
Exemplo: implementar a função pré-definida sign
Criar o ficheiro mysign.m:function sgn = mysign(x)
% mysign(x) returns 1 if x is greater than zero.
% -1 if x is less than zero.
% 0 if x is equal to zero.
if x > 0
sgn = 1;
elseif x < 0
sgn = -1;
else
sgn = 0;
end
end
Testar na janela de comandos:>> mysign(0)
ans =
0
Programação em MATLAB 2920 Março 2017
Selecções
As selecções são implementadas com instruções switch
A decisão da alternativa a executar é baseada na comparação do valor de uma expressão com valores associados a vários casos
Se o valor da expressão corresponder a um dos casos, será esse o caso escolhido
Caso contrário, será escolhida a alternativa reservada para essa situação
Programação em MATLAB 30
switch expressão
case valor1instruções1
case valor2instruções2
...otherwise
instruçõesotherwiseend
20 Março 2017
Instrução switch Exemplo: implementar uma função que diga a nota por extenso
function grade(S)
switch S
case 'A'
disp('Excellent')
case 'B'
disp('Good')
case 'C'
disp('Mediocre')
case 'D'
disp('Whoops')
case 'F'
disp('Would like fries with your order?')
otherwise
disp('Huh!')
end
end
>> grade('B')
Good
Programação em MATLAB 3120 Março 2017
Instrução switch
O MATLAB permite que seja passado um número variável de
argumentos na chamada de uma função
Isto permite a definição de valores por omissão que poderá
ser acompanhada de detecção de erros
Para se saber o número de argumentos que foram passados na
chamada da função usa-se a função pré-definida nargin
Para se seleccionar a alternativa a executar de acordo com o
número de argumentos passado usa-se a instrução switch
Programação em MATLAB 3220 Março 2017
Instrução switch Exemplo: calcular a velocidade do bungee jumper
function v = freefall2(t, m, cd)
% freefall2: bungee velocity with second-order drag
% v=freefall2(t,m,cd) computes the free-fall velocity
% of an object with second-order drag.
% input:
% t = time (s)
% m = mass (kg)
% cd = drag coefficient (default = 0.27 kg/m)
% output:
% v = downward velocity (m/s)
switch nargin
case 0
error('Must enter time and mass')
case 1
error('Must enter mass')
case 2
cd = 0.27;
end
g = 9.81; % acceleration of gravity
v = sqrt(g * m / cd)*tanh(sqrt(g * cd / m) * t);
Programação em MATLAB 3320 Março 2017
Instrução switch
Exemplo: calcular a velocidade do bungee jumper
>> freefall2(12,68.1,0.25)
ans =
50.6175
>> freefall2(12,68.1)
ans =
48.8747
>> freefall2(12)
??? Error using ==> freefall2 at 15
Must enter mass
>> freefall2()
??? Error using ==> freefall2 at 13
Must enter time and mass
Programação em MATLAB 3420 Março 2017
Ciclos
Nos ciclos as mesmas linhas de código são executadas
múltiplas vezes.
Existem dois tipos de ciclos:
Os ciclos for repetem o código um número pré-determinado de
vezes.
Os ciclos while repetem o código enquanto uma condição for
satisfeita.
Programação em MATLAB 3520 Março 2017
Instrução for
Os ciclos em que sabemos previamente o número de vezes que as instruções devem ser repetidas são implementados com instruções for:
início:passo:fim é um vector linha
O código instruções é repetido um número de vezes correspondente ao número de elementos do vector
Para cada uma das vezes a variável índice toma o valor do respectivo elemento do vector
Programação em MATLAB 36
for índice = início:passo:fim
instruções
end
20 Março 2017
Instrução for
Exemplo: mostrar o valor dos índices
Criar o ficheiro de script teste.mfor i = 1:5
disp(i)
end
for j = 10:-1:1
disp(j)
end
Testar com:>> teste
Programação em MATLAB 3720 Março 2017
Instrução for Exemplo: implementar uma função para calcular o factorial
Criar o ficheiro factor.mfunction fout = factor(n)
% factor(n):
% Computes the product of all the integers from 1 to n.
x = 1;
for i = 1:n
x = x * i;
end
fout = x;
end
Testar com:>> factor(5)
ans =
120
Programação em MATLAB 3820 Março 2017
Instrução for vs Vectorização
O MATLAB permite passar vectores e matrizes como argumentos para funções pré-definidas.
Este processo, denominado vectorização, aplica eficientemente a função a cada um dos elementos do vector ou matriz.
Se for possível, é preferível usar a vectorização do MATLAB do que aplicar a função elemento a elemento num ciclo for
Programação em MATLAB 39
Ciclo for Vectorização
i = 0;
for t = 0:0.02:50
i = i + 1;
y(i) = cos(t);
end
t = 0:0.02:50;
y = cos(t);
20 Março 2017
Instrução while
Os ciclos em que se pretende executar repetidamente instruções enquanto uma condição for satisfeita são implementados com instruções while:
A condição é uma expressão lógica. Se for verdadeira as instruções são executadas e no fim a condição será avaliada novamente para eventual repetição do ciclo.
Mesmo que a condição fique falsa enquanto as instruções são executadas, apenas a avaliação no fim determinará a repetição ou interrupção do ciclo.
Programação em MATLAB 40
while condição
instruções
end
20 Março 2017
Instrução while
Exemplo: mostrar o valor de uma variável no ciclo
Criar o ficheiro de script teste.mx = 8
while x > 0
x = x - 3;
disp(x)
end
Testar com:>> teste
x =
8
5
2
-1
Programação em MATLAB 4120 Março 2017
Instrução while
Existe outra forma de usar a instrução while:
A condição (1) é sempre verdadeira, logo o ciclo não terminará no fim por esta passar a ser falsa.
O ciclo será interrompido (instrução break) quando a avaliação da condição na instrução if for verdadeira.
Programação em MATLAB 42
while (1)
instruções1if condição, break, end
instruções2end
20 Março 2017
Instrução while Exemplo: mostrar o valor de uma variável no ciclo
Criar o ficheiro de script teste.mx = 12
while (1)
if x < 0, break, end
x = x - 5;
disp(x)
end
y = 12
while (1)
y = y - 5;
if y < 0, break, end
disp(y)
end
Testar com:>> teste
x = y =
12 12
7 7
2 2
-3
Programação em MATLAB 4320 Março 2017
Animações
Existem duas formas de criar animações em MATLAB.
Usando repetidamente a instrução plot dentro de um ciclo
O gráfico é assim refeito repetidamente
É importante usar o comando axis para fixar as escalas dos eixos.
Usando funções especiais: getframe e movie
Permitem guardar a sequência de plots (getframe) e posteriormente mostrar todos de uma vez (movie).
Programação em MATLAB 4420 Março 2017
Animações
Exemplo: as coordenadas (x,y) de um projéctil podem ser calculadas em função do tempo:
onde v0 = velocidade inicial (m/s)
q0 = ângulo inicial (radianos)
g = constante gravitacional (9.81 m/s2)
Programação em MATLAB 45
tvx 00 cos
2
00 5.0sin gttvy
20 Março 2017
Animações Exemplo: mostrar a trajectória do projéctil
Criar o ficheiro de script teste.mclf,clear
g=9.81; theta0=45*pi/180; v0=5;
t(1)=0;x=0;y=0;
plot(x,y,'o','MarkerFaceColor','b','MarkerSize',8)
axis([0 3 0 0.8])
M(1)=getframe;
dt=1/128;
for j = 2:1000
t(j)=t(j-1)+dt;
x=v0*cos(theta0)*t(j);
y=v0*sin(theta0)*t(j)-0.5*g*t(j)^2;
plot(x,y,'o','MarkerFaceColor','b','MarkerSize',8)
axis([0 3 0 0.8])
M(j)=getframe;
if y<=0, break, end
end
pause
movie(M,1)
Programação em MATLAB 4620 Março 2017
Animações
Exemplo: mostrar a trajectória do projéctil
Programação em MATLAB 4720 Março 2017
Indentação
Em programação estruturada, onde puder ser colocada uma instrução, também pode ser colocado um conjunto de instruções
As instruções podem ser colocadas umas dentro das outras
Para clareza do código é muito importante usar indentação para mostrar o contexto de cada conjunto de instruções.
Programação em MATLAB 4820 Março 2017
Indentação
Exemplo: calcular as raízes de um polinómio de segundo grau
Criar o ficheiro quadroots.mfunction quadroots(a, b, c)
% quadroots: roots of quadratic equation
% quadroots(a,b,c): real and complex roots
% of quadratic equation
% input:
% a = second-order coefficient
% b = first-order coefficient
% c = zero-order coefficient
% output:
% r1 = real part of first root
% i1 = imaginary part of first root
% r2 = real part of second root
% i2 = imaginary part of second root
Programação em MATLAB 4920 Março 2017
Indentaçãoif a == 0 %special cases
if b ~= 0 %single root
r1 = -c / b
else %trivial solution
disp('Trivial solution. Try again')
end
else %quadratic formula
d = b ^ 2 - 4 * a * c; %discriminant
if d >= 0 %real roots
r1 = (-b + sqrt(d)) / (2 * a)
r2 = (-b - sqrt(d)) / (2 * a)
else %complex roots
r1 = -b / (2 * a)
i1 = sqrt(abs(d)) / (2 * a)
r2 = r1
i2 = -i1
end
end
Programação em MATLAB 5020 Março 2017
Funções Anónimas Funções anónimas são funções simples criadas sem a utilização de um ficheiro-M
fhandle = @(arg1, arg2, ...) expression
Exemplos:
>> f1=@(x,y) x^2 + y^2;
>> f1(3,4)
ans =
25
>> a = 4; b = 2;
>> f2=@(x) a*x^b;
>> f2(3)
ans =
36
>> a = 3;
>> f2(3)
ans =
36
>> f2=@(x) a*x^b;
>> f2(3)
ans =
27
Programação em MATLAB 5120 Março 2017
Funções de Funções
São funções que usam outras funções que lhe são passadas por parâmetro no momento da chamada da função
O argumento pode ser:
A identificação de uma função anónima;
O nome de uma função pré-definida;
O nome de uma função definida num ficheiro-M.
O uso de funções de funções permite uma programação mais dinâmica.
Programação em MATLAB 5220 Março 2017
Funções de Funções
Exemplo: passagem de uma função anónima para fplot
>> vel=@(t) sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);
>> fplot(vel,[0 12])
Programação em MATLAB 5320 Março 2017
Funções de Funções
Exemplo: uma função que calcule a média das velocidadesfunction favg = funcavg1(a,b,n)
% funcavg: average function height
% favg=funcavg1(a,b,n): computes average value
% of function over a range
% input:
% a = lower bound of range
% b = upper bound of range
% n = number of intervals
% output:
% favg = average value of function
x = linspace(a,b,n);
y = func(x);
favg = mean(y);
end
function f = func(t)
f=sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);
end
Programação em MATLAB 5420 Março 2017
Funções de Funções
Exemplo: uma função que calcule a média de uma funçãofunction favg = funcavg(f,a,b,n)
% funcavg: average function height
% favg=funcavg(f,a,b,n): computes average value
% of function over a range
% input:
% f = function to be evaluated
% a = lower bound of range
% b = upper bound of range
% n = number of intervals
% output:
% favg = average value of function
x = linspace(a,b,n);
y = f(x);
favg = mean(y);
end
Programação em MATLAB 5520 Março 2017
Funções de Funções
Testes:>> funcavg1(0,12,60)
ans =
36.01727
>> vel=@(t) sqrt(9.81*68.1/0.25)*tanh(sqrt(9.81*0.25/68.1)*t);
>> funcavg(vel,0,12,60)
ans =
36.01727
>> funcavg(@sin,0,2*pi,180)
ans =
-6.3001e-017
Programação em MATLAB 5620 Março 2017
Funções de Funções
Exemplo: uma função que calcule a média de uma função com passagem de parâmetros
function favg = funcavg(f,a,b,n,varargin)
x = linspace(a,b,n);
y = f(x,varargin{:});
favg = mean(y);
end
>> vel=@(t,m,cd) sqrt(9.81*m/cd)*tanh(sqrt(9.81*cd/m)*t);
>> funcavg(vel,0,12,60,68.1,0.25)
ans =
36.0127
>> funcavg(vel,0,12,60,100,0.28)
ans =
38.9345
Programação em MATLAB 5720 Março 2017
Caso de Estudo
Bungee Jumper
20 Março 2017 Programação em MATLAB 58
Bungee Jumper Exemplo: usar o modelo diferencial para calcular a velocidade do bungee jumperfunction vend = velocity1(dt, ti, tf, vi)
% velocity1: Euler solution for bungee velocity
% vend = velocity1(dt, ti, tf, vi)
% Euler method solution of bungee jumper velocity
% input:
% dt = time step (s)
% ti = initial time (s)
% tf = final time (s)
% vi = initial value of dependent variable (m/s)
% output:
% vend = velocity at tf (m/s)
t = ti;
v = vi;
n = (tf - ti) / dt;
for i = 1:n
dvdt = deriv(v);
v = v + dvdt * dt;
t = t + dt;
end
vend = v;
end
function dv = deriv(v)
dv = 9.81 - (0.25 / 68.1) * v*abs(v);
end
Programação em MATLAB 5920 Março 2017
Bungee Jumper Teste: >> velocity1(0.5,0,12,0)
ans =
50.9259
>> velocity1(0.001,0,12,0)
ans =
50.6181
Programação em MATLAB 6020 Março 2017
Bungee Jumper Exemplo: usar o modelo diferencial para calcular a velocidade do bungee jumper
function vend = velocity2(dt, ti, tf, vi)
t = ti;
v = vi;
h = dt;
while(1)
if t + dt > tf, h = tf - t; end
dvdt = deriv(v);
v = v + dvdt * h;
t = t + h;
if t >= tf, break, end
end
vend = v;
end
function dv = deriv(v)
dv = 9.81 - (0.25 / 68.1) * v*abs(v);
end
Programação em MATLAB 6120 Março 2017
Bungee Jumper Teste: >> velocity2(0.5,0,12,0)
ans =
50.9259
>> velocity2(0.35,0,12,0)
ans =
50.8348
Programação em MATLAB 6220 Março 2017
Bungee Jumper Exemplo: usar o modelo diferencial para calcular a velocidade do bungee jumper
function yend = odesimp(dydt, dt, ti, tf, yi)
t = ti; y = yi; h = dt;
while (1)
if t + dt > tf, h = tf - t; end
y = y + dydt(y) * h;
t = t + h;
if t >= tf, break, end
end
yend = y;
end
>> dvdt=@(v) 9.81-(0.25/68.1)*v*abs(v);
>> odesimp(dvdt,0.5,0,12,0)
ans =
50.9259
>> odesimp(@(y) -0.1*y,0.005,0,5,10)
ans =
6.0645
Programação em MATLAB 6320 Março 2017