Parte ii programa o b sica no matlab
Download
1 / 55

PARTE II PROGRAMAÇÃO BÁSICA NO MATLAB - PowerPoint PPT Presentation


  • 41 Views
  • Uploaded on

PARTE II PROGRAMAÇÃO BÁSICA NO MATLAB. OPERAÇÕES RELACIONAIS E LÓGICAS.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' PARTE II PROGRAMAÇÃO BÁSICA NO MATLAB' - july


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Parte ii programa o b sica no matlab
PARTE IIPROGRAMAÇÃO BÁSICA NO MATLAB

OPERAÇÕES RELACIONAIS E LÓGICAS

Além das operações matemáticas “usuais”, o MATLAB possibilita o uso de operações relacionais e lógicas. A função destes operadores é fornecer respostas do tipo falso e verdadeiro e ajudar no controle de fluxo em ambientes de programação. A saída de todas as expressões lógicas podruz 1 para verdadeiro e 0 para falso.

Os operadores relacionais do MATLAB são:



CARACTERES DE STRINGS

Os caracteres de strings são colocados entre apóstrofos.


Programa o b sica no matlab
PROGRAMAÇÃO BÁSICA NO MATLAB

Laços: São construções que possibilitam executar uma sequência de declarações mais de uma vez. Veremos duas formas básicas de construção de laços: laços for e laços while. No laço while a sequência é repetida até que uma condição seja atingida e no laço for , a sequência é repetida um número determinado de vezes.


Laço While: A forma geral do laço while é:

O exemplo que se segue é extraído do livro Programação em MATLAB para Engenheiros:


% PROGRAMA PARA CALCULO DE DESVIO PADRAO

% DE UM CONJUNTO DE DADOS COM NUMERO ARBITRARIO DE VALORES DE ENTRADA

% DEFINICAO DAS VARIAVEIS

% N NUMERO DE DADOS DE ENTRADA

%STD_DEV DESVIO PADRAO

% SUMX SOMATORIO DOS VALORES DE ENTRADA

%SUMX2 SOMA DOS QUADRADOS DOS VALORES DE ENTRADA

% X UM VALOR DE ENTRADA

% X BAR MEDIA DOS VALORES DE ENTRADA

% INICIALIZAÇAO DAS SOMAS

n=0; sumx=0; sumx2=0;


% LEITURA DO PRIMEIRO VALOR

x=input('entre primeiro valor');

% vamos assumir que todas as medidas sao positivas ou zero

while x>=0

n=n+1;

sumx=sumx+x;

sumx2=sumx2+x^2;

% LEITURA DO PROXIMO VALOR

x=input('entre com o proximo valor');

end


% VERIFICAÇAO DE EXISTEM NUMERO DE DADOS SUFICIENTES

if n<2 % INFORMAÇOES INSUFICIENTES

disp('no minimo dois dados devem ser fornecidos');

else

xbar=sumx/n;

stddev=sqrt((n*sumx2-sumx^2)/(n*(n-1)));

fprintf('A MEDIA DESTES DADOS VALE : %f\n',xbar);

fprintf('O DESVIO PADRAO VALE: %f\n',stddev);

fprintf('O NUMERO DE PONTOS VALE: %f\n',n);

end



Onde índice representa a variável do laço e expr é a expressão de controle do laço.

 Para ilustrar vejamos o programa para o cálculo de um fatorial:

% PROGRAMA PARA CALCULO DO FATORIAL DE UM NUMERO LIDO VIA TECLADO

% N REPRESENTA O NUMERO

clc;

fat=1;

n=input('entre com o numero');

for i=1:n

fat=fat*i;

end

fprintf('o fatorial de %d vale %d\n',n,fat);


Express es break e continue
EXPRESSÕES break e continue expressão de controle do laço.

Duas declarações adicionais podem ser utilizadas para contorlar a operação dos laços while e for: as declarações break e continue.

A declaração break encerra a execução de um laço e passa o controle para a próxima declaração logo após o fim do laço e a declaração continue termina a passagem corrente pelo laço e retorna o controle para o início do laço.


Um exemplo da declaração break em um laço for é: expressão de controle do laço.

for i=1:5

if i==3

break;

end

fprintf('i =%d\n',i);

end

disp('fim do laço');


A execução deste programa produz: expressão de controle do laço.

>> teste

i =1

i =2

fim do laço


A declaração continue executada dentro de um laço induz que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

for i=1:5

if i==3

continue;

end

fprintf('i =%d\n',i);

end

disp('fim do laço');


>> teste que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

i =1

i =2

i =4

i =5

fim do laço


La os aninhados
LAÇOS ANINHADOS que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

Um laço pode estar completamente dentro de outro laço e são denominados aninhados.

Exemplo:


% METODO NUMERICO que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

%FACULDADE DE ENGENHARIA QUIMICA DE LORENA

%PROFESSOR OSWALDO LUIZ COBRA GUIMARAES

% [email protected]

% [email protected]

% PROGRAMA PARA METODO DE NR

function newton

xo=input('entre com o valor do de xo');

% ENTRADA DA TOLERANCIA

eps=input('entre com o valor da precisao');

% ENTRADA DA FUNÇAO COMO STRING

y=input('entre com a funçao','s');

der=input('entre com a derivada','s');

fprintf('iteraçao x(n) x(n+1) erro\n');

i=1;


erro=1; que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

x=xo;

n=input('entre com o numero de termos');

for i=1:n

while erro >eps

f=eval(y);

d=eval(der);

x=xo-f/d;

erro=abs((x-xo)/xo);

fprintf('%4d %13.5f %9.5f %9.2e \n',i,xo,x,erro);

i=i+1;

xo=x;

end

end


EXEMPLO que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

val1 = input('Entre um número : ');%permite a entrada de valores

%via teclado em modo interativo

val2 = input('Entre outro número : ');

if val1<val2    

disp('O primeiro valor é menor que o segundo');

elseif val1>val2

disp('O segundo valor é maior que o primeiro'); else    disp('Os valores são iguais');

end


Estrutura switch-case-otherwise-end que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:


% Conversão entre unidades centímetros, polegas e pés que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

fprintf('\n\n');%pula duas linhas

disp('Conversão entre unidades: centímetros, polegadas e pés');

fprintf('\n');

x=input('Entre valor numérico a converter : ');

fprintf('\n\n');

disp('Os seguintes são sistemas válidos de conversão:');

disp('cen-pol ; pol-cen; cen-pes; pes-cen; pol-pes; pes-pol');

fprintf('\n');

sistema = input('Entre sistema de conversão (ex:pol-pes): ','s');


switch sistema que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

case 'cen-pol'

y=0.393701*x;

disp([num2str(x),' centímetros = ',num2str(y),' polegadas']);

case 'pol-cen'

y=2.54*x;

disp([num2str(x),' polegadas = ',num2str(y),' centímetros']);

case 'cen-pes'

y=0.0328084*x;

disp([num2str(x),' centímetros = ',num2str(y),' pés']);


case 'pes-cen' que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

y=30.48*x;

disp([num2str(x),' pés = ',num2str(y),' centimetros']);

case 'pol-pes'

y=x/12;

disp([num2str(x),' polegadas = ',num2str(y),' pés']);

case 'pes-pol'

y=12*x;

disp([num2str(x),' pés = ',num2str(y),' polegadas']);

otherwise disp('Unidade desconhecida');

end


ANÁLISE NUMÉRICA que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:


CÁLCULO COM POLINÔMIOS que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

Encontrar raízes de um polinômio é um problema usual em Engenharia. Seja o polinômio dado por x5-x4+x-3. No MATLAB o polinômio é criado:

>> p=[1 -1 0 0 1 -3];

Observer que os coeficientes nulos devem ser incluídos no vetor p.

A determinação das raízes é realizada utilizando-se a função roots( ).


>> r=roots(p) que a execução da passagem corrente pelo laço seja interrompida e que o controle retorne ao início do laço, sendo que a variável do laço for assumirá o seu próximo valor, e o laço será executado novamente:

r = 

-0.8751 + 0.7925i

-0.8751 - 0.7925i

0.6718 + 1.0386i

0.6718 - 1.0386i

1.4068


A multiplicação entre dois vetores é realizada pela função conv.

Consideremos os polinômios x5-x4+x-3 e x-1.

>> p=[1 -1 0 0 1 -3];

>> w=[0 0 0 0 1 -1];

>> conv(p,w)

ans = 0 0 0 0 1 -2 1 0 1 -4 3

O resultado é x6-2x5+x4+x2-4x+3.


Em muitas situações, é necessário dividir um polinômio por outro.

Isto pode ser feito utilizando-se a função deconv.

>> a=[1 -1 +3];

>> b=[1 1];

>> [q,r]=deconv(a,b)

q = 1 -2

r = 0 0 5

Nos dá o polinômio quociente q e o resto r.


Para a determinação de derivadas de polinômios o MATLAB apresenta a função polyder.

Seja o polinômio x5-x4+x-3

>> p=[1 -1 0 0 1 -3];

>> polyder(p)

ans = 5 -4 0 0 1

Isto representaria os coeficientes do polinômio 5x4-4x3+1.


AJUSTE DE CURVAS E INTERPOLAÇÃO apresenta a função polyder.

Descrever dados experimentais é de suma importância na Engenharia. Na verdade, após um experimento, em geral, desejamos descrever por meio de funções matemáticas o comportamento do fenômeno, de modo a predizer dados que não constem de nossos experimentos.

A teoria de ajuste de curvas é vista na disciplina Métodos Numéricos e neste curso focaremos nossa atenção na aplicação do Método dentro do ambiente MATLAB. No MATLAB a função polyfit resolve o problema do ajuste polinimial de curvas. Vejamos um exemplo:


>> x=0:.1:1; apresenta a função polyder.

>> y=[0 0.11 0.199 0.31 0.4 0.55 0.6 0.7 0.82 0.9 1];

>> n=1; %grau do polinomio interpolador

>> p=polyfit(x,y,n)

p =

1.030.0080

A saída da função polyfit é um vetor linha com os coeficientes do polinômio, do maior grau para o menor grau, e, desta forma o polinômio de aproximação é dado por y=1,03x+0,0080.


Agora, façamos uma comparação gráfica entre os dados reais e o polinômio de aproximação:

>> xi=linspace(0,1,100);

>> z=polyval(p,xi);

>> plot(x,y,xi,z,':')

>> xlabel('x'),ylabel('y=f(x)')

>> title('Ajuste de Curvas de Primeira Ordem')


INTERPOLAÇÃO UNIDIMENSIONAL reais e o polinômio de aproximação:

A interpolação polinomial é utilizada frequentemente, quando estamos interessados em um dado que não conste da tabela, e não especificamente na função geradora dos dados tabelados.

 A situação gráfica abaixo, ilustra o que acontece quando dados são interpolados linearmente:


O MATLAB possui diversas funções de interpolação. reais e o polinômio de aproximação:

interp1

interpola dados unidimensionais

interp2

interpola dados bidimensionais

interpn

interpola dados de dimensões maiores


Vejamos um exemplo: Os dados abaixo mostram o limiar da audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

>> hz=[20:10:100 200:100:1000 1500 2000:1000:10000]; %frequencia em hertz

>> nps=[76 66 59 54 49 46 43 40 38 22 ...

14 9 6 3.5 2.5 1.4 0.7 0 -1 -3 ...

-8 -7 -2 2 7 9 11 12]; %em decibeis;>> semilogx(hz,nps,'-o');>> xlabel('Frequencia, hz')

>> ylabel('Nivel de press~ao, dB')

>> grid on

>> s=interp1(hz,nps,2.5e3) %iterpolaçao linear


>> s=interp1(hz,nps,2.5e3,'cubic') %iterpolaçao linear audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

s = -6.0488

>> s=interp1(hz,nps,2.5e3,'spline')

s = -5.8690

>>


INTERPOLAÇÃO BIDIMENSIONAL audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

A interpolação bidmensional é utilizada quando temos z=f(x,y). Vamos ilustrar co a seguinte situação: uma empresa está mapeando o solo oceânico e utiliza um radar para isso. Mapeia uma área com espaçamento de 0,5 km, numa malha retangular.

DIGITE.

>> x=0:.5:4;

>> y=0:.5:6;


>> z=[99 87 99 86 66 88 99 89 99 audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

88 88 99 96 78 88 87 88 100

88 88 99 96 66 88 87 88 85

88 88 84 94 66 88 87 88 56

99 66 84 94 66 88 87 99 95

88 88 99 96 78 88 87 88 100

99 66 84 94 66 88 87 99 95

88 88 99 96 78 88 87 88 100

88 88 99 96 78 88 87 88 100

99 66 84 94 66 88 87 99 95

88 88 99 96 78 88 87 88 100

99 66 84 94 66 88 87 99 77

99 55 84 94 66 88 87 99 77]


>> zi=interp2(x,y,z,3.5,5.1) audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

zi = 90.2000

>> zi=interp2(x,y,z,3.5,5.1,'spline')

zi = 88.2251

>> zi=interp2(x,y,z,3.5,5.1,'cubic')

zi = 88.9680


MINIMIZAÇÃO audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

Em muitas aplicações é de interesse encontrar o mínimo ou o máximo de uma função em um dado intervalo.

Como exemplo, vamos utilizar a função f(x)=2e-xsin(x), no intervalo [0,8].

>> f='2*exp(-x).*sin(x)'; %entrada da funçao como uma string;

>> fplot(f,[0,8])

>> title(f), xlabel('x')


De acordo com a figura,existe audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

um máximo próximo a x=0,7

e um mínimo próximo a 4.


Para determinar o ponto de mínimo da função utilizamos: audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

>> f='2*exp(-x).*sin(x)'; %entrada da funçao como uma string;

>> xmin=fminbnd(f,2,5)


xmin=fminbnd(f,2,5) audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

xmin = 3.9270

>> x=xmin;

>> ymin=eval(f)

ymin = -0.0279

>> fx='-2*exp(-x).*sin(x)'; %entrada da funçao como uma string;>> xmax=fminbnd(f,0,3);

xmax = 0.7854

>> ymax=-eval(f)

ymax = 0.6448

Uma vez que o máximo de f(x) é o mínimo de –f(x), efetuamos a troca de sinais na definição das funções.


Determinação das raízes audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

Para a determinação dos zeros de uma função pode ser utillizada a função fzero, que procura o zero de uma função unidimensional.


INTEGRAÇÃO audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

O MATLAB possui a função trapz( ) que aproxima a curva por trapézios e a função quad( ) que aproxima a função a ser integrada pro segmentos de parábola, equivalendo ao Método de Simpson.

a)Utilizando o Método dos Trapézios

 >> x=0:.1:1;

>> y=exp(x);

>> area=trapz(x,y)

area =1.7197


a) audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:Utilizando o Método de Simpson

 Dedemos primeiro criar um arquivo m com a função a ser integrada. Desta forma, camos criar um arquivo denominado, por exemplo, int.m.

function y=f(x)

y=exp(x)

Na área de comando do MATLAB, digitamos:

area=quad(‘int’,0,1), para uma integração de x=0 a x=1.

Além da integração unidimensional, o MATLAB possibilita a integração bidimensional com a utilização da função dblquad. Para usar dblquad é necessário primeiro criar uma função que calcule f(x).


Vamos a um exemplo: audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

Inicialmente vamos criar um arquivo m e nomeá-lo como intdupla.m:

function z=fun(x,y)

z=exp(x+y);


A função pode ser representada graficamente: audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

>> x=linspace(0,1,30);

>> y=linspace(0,2,40);

>> [X,Y]=meshgrid(x,y);

>> Z=intdupla(X,Y);

>> mesh(X,Y,Z)


O valor aproximado da integral é: audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

integral=dblquad('intdupla',0,1,0,2)

integral =10.9782

A sintaxe da função dblquad é DBLQUAD(FUN,XMIN,XMAX,YMIN,YMAX)


ANIMAÇÃO BIDIMENSIONAL audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

Crie um

arquivo m

x = -pi/2:.1:pi/2; for c=1:20,      

y = sin(2*x+c*pi/10);      plot(x,y);

 axis([-pi/2 pi/2 -1 1]);      M(c) = getframe;   end; movie(M,20,10);

% A última linha de comando significa que os gráficos armazenados em são mostrados 10 vezes a uma taxa de repetição de 20 figuras por segundo.


ANIMAÇÃO TRIDIMENSIONAL audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

Crie um

arquivo m

x = -pi/2:.1:pi/2;

y = -pi/2:.1:pi/2;

[X,Y] = meshgrid(x,y);

for c=1:20,

Z = sin(2*X+c*pi/10)+1.5*cos(2*Y+c*pi/10);

surf(X,Y,Z);

M(c) = getframe;

end;

movie(M,20);


FIM audição humana, ou seja, o nível mínimo de som perceptível pela audição humana e que varia com a frequência do som emitida:

DA

PARTE II


ad