Variáveis locais e variáveis globais
Teoria
Iae ta tudo bem?
Hoje vamos conversar sobre variáveis locais e globais. No Matlab uma variável pode ser definida como global ou como local, mas o que é isso né?
Uma variável é dita local quando é definida dentro de uma função e toda variável local deixa de existir assim que a função executa seu trabalho.
Por exemplo vamos criar a seguinte função:
Ao executar a função simplesmente os valores de x e y não são armazenadas na workspace, pois essas variáveis são ditas como locais, ou seja, elas apenas existem dentro da função. A consequência disso é que não podemos criar uma saída de dados, pois não tem como chamar essas variáveis para o command window, como mostrado abaixo:
Logo, se desejamos ficar aproveitando valores das funções existentes dentro do código, precisamos de alguma ferramenta que pegue esses valores locais e os anexe na workspace, mas que função seria essa né?
Seeeem mais enrolações, essa função se chama global, ou seja, se eu desejo que uma variável local seja anexada na workspace preciso declará-la como variável global.
Você já deve estar se perguntando ‘E como eu declaro isso?’
Simples, vamos realizar o seguinte exemplo:
Vamos montar um programa que resolva a seguinte equação de segundo grau:
Pelo que sabemos de como resolver uma equação dessas, podemos montar o seguinte algoritmo:
Implementando o código no matlab na forma de função temos algo assim:
Primeiramente colocaríamos as entradas de dados indicando quem são as variáveis globais, que aqui no nosso caso será o delta, então temos:
Depois, vamos pedir a entrada de dados dos coeficientes da equação:
Uma vez que colocamos a entrada de dados, vamos colocar a saída de dados do código que no nosso caso é:
Uma vez que criamos a entrada e a saída de dados vamos criar a função. Aqui vamos utilizar o delta como teste lógico para caracterizar que tipo de solução temos, pois podemos ter 3 tipos de solução.
Sendo assim a função se torna:
function x=equacao_segundo_grau(a,b,c)
global delta
delta=b^2-4*a*c
if delta>0
x(1)=(-b+sqrt(delta))/(2*a)
x(2)=(-b-sqrt(delta))/(2*a)
elseif delta==0
x(1)=-b/(2*a)
x(1)=-b/(2*a)
else
fprintf('raiz complexa não calculamos')
end
end
Podemos perceber que também declaramos as variáveis globais dentro da própria função.
Logo, sempre que tivermos um caso em que se precise declarar a variável como global, precisamos inserir a variável global tanto dentro da função quanto fora dela, ok?
E o que aconteceria se não colocássemos isso?
Olhe a estrutura do código, se você olhar direitinho vai perceber que o delta está dentro da função, ou seja, após a finalização essa variável não ia para a workspace então não era possível criar uma saída de dados ou realizar qualquer operação com esses valores fora da função, entende?
Beeeeeem hoje iremos ficar por aqui, mas não fique tristeee.
Selecionamos diversos exercícios para você treinar, então vamos lá.
Exercícios Resolvidos
Exercício Resolvido #1
“Elaboração Própria”
Um aluno de engenharia precisava calcular as raízes de uma função a fim do seguinte código.
Function x=afim(a,b)
X=-b/a
End
Precisa-se definir a variável X como uma variável global? Se sim porquê.
Passo 1
A ideia da questão aqui é te fazer entender a estrutura por trás das variáveis locais e globais.
Uma variável local é um tipo de variável que está inserida dentro da function e que deixa de existir toda vez que a function executa a função.
Já uma variável global é uma variável que está dentro da function e que, após a execução da função, ela é armazenada na workspace, permitindo que seja utilizada por outras seções de código dentro da sua rotina.
Analisando a questão em si e olhando as definições, nós precisaríamos definir como global, porém a variável X é a saída da function, pois
Então mesmo se não definirmos como uma variável global, ela irá ser armazenada na workspace por ser uma saída da function.
Porém se eu quisesse utilizar o par (a,b) e se ele estivesse digitado dentro da function torna-se necessário definir o par como uma global.
Resposta
Sendo assim, não precisamos definir o x como uma variável global.
Exercício Resolvido #2
“Elaboração Própria”
Escreva uma função em Matlab que imprima os pontos do vértice de uma dada função de segundo grau definida por:
E a partir do valor do coeficiente a, imprima se o vértice corresponde a um ponto de máximo ou de mínimo.
Passo 1
A questão pede uma criação de uma function para se possa calcular os vértices e através da função global poder imprimir os valores dos vértices na saída de dados.
Para realização dos cálculos precisamos de algumas informações das funções de segundo grau. O delta da fórmula de Bhaskara
As coordenadas do vértice:
Além disso, se o valor do a for menor que 0, temos um ponto de máximo no vértice, pois a concavidade é pra baixo. E se o valor de a for positivo, a concavidade da parábola é pra cima e temos um ponto de mínimo no vértice.
Mas primeiramente vamos definir quais variáveis são globais e porquê. As variáveis globais são as variáveis delta e o x. Vamos defini-las como variáveis globais porque são as variáveis da function que desejamos armazenar na nossa workspace.
E mais um detalhe, lembre-se sempre disso: a function ela sempre vai ser o último componente do seu código. Primeiramente você escreve tudo e apenas no final que coloca a function, belezinha?
O Matlab segue essa sintaxe na hora que escrever a function no meio de um código.
Passo 2
Para implementar o código começaremos com uma entrada de dados onde informa-se os coeficientes da equação de segundo grau e informando quais são as variáveis globais
Após isso precisaremos incluir o teste lógico para informar se temos um ponto de máximo ou um ponto de mínimo:
Uma vez que já foi implementado o teste lógico precisaremos apenas implementar a saída de dados junto com a function.
Passo 3
Implementando tudo certinho no Matlab e executando o código podemos obter os seguintes resultados:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #3
“Elaboração Própria”
Um engenheiro estudando um sistema de leitos fluidizados se depara com um problema de calcular a velocidade de uma partícula se movimentando em um meio líquido, para esse problema ele quer utilizar de seguinte equação:
Onde o é chamado de coeficiente de arraste,e seu valor depende de um grupo adimensional chamado Reynolds que é definido por
E empiricamente existem diversas equações para o mas para o problema ele irá utilizar as seguintes equações:
A primeira equação é válida para Reynolds menores que 0,1 e a outra para Reynolds até 1000, seguindo essas informações na hora de montar o código para o cálculo dessas velocidades quais variáveis devem se tornar globais? (Justifique sua resposta)
Passo 1
A questão em si ela apresenta um problema altamente complexo de engenharia que é a estimativa de velocidade terminais, porém ela apenas pede das variáveis do problema quais devem se tornar globais e justificar a resposta.
Para saber quais variáveis devem se tornar globais devemos lembrar das definições, uma variável global é aquela variável que após a função ser executada ela é armazenada na workspace.
Já a variável local após a função ser executada ela não se armazena na workspace, logo o seu valor se perde.
Passo 2
Agora que as definições estão claras devemos lembrar do seguinte, para que eu preciso armazenar uma variável na workspace?
Devemos armazenar na workspace para que a variável possa ser utilizada dentro do código em diversas etapas, como podemos ver teremos testes lógicos a depender das velocidades do fluido pois o Cd depende dessas velocidades.
Ao mesmo tempo, a depender do Dp, viscosidade e massa específica o teste lógico pode dar um valor diferente, além do mais a saída de dados seria conveniente explicitar quais condições que geram aquelas velocidades.
Então as variáveis que deveriam se tornar globais seriam:
Pois elas são utilizadas com bastante frequência nas equações que irão compor os códigos.
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #4
“Elaboração Própria”
Uma grande área da matemática denominada de cálculo numérico se esforça cada vez mais para a obtenção de equações simplificadas que melhor aproxima o cálculo de derivadas e integrais.
Um engenheiro estava com dúvida para a estimativa do erro da aproximação de uma certa técnica denominada técnica do trapézio que é dada por:
Para isso ele queria utilizar a regra do trapézio para calcular a área abaixo da seguinte curva:
Cuja a integral analítica corresponde a
E a Área analítica é dada por
Passo 1
Em essência questão ela pede para montar um programa que calcule a área abaixo da seguinte curva:
Tanto pelo método aproximado do trapézio quanto pelo método analítico. Para o método analítico precisamos avaliar a seguinte curva entre os intervalos a e b.
Logo, precisaremos criar duas funções: uma para calcular a área analítica e outra para criar a área aproximada pela regra do trapézio e assim se possa comparar o erro entre elas.
Como nos queremos a diferença entre as áreas, ou seja o erro, então a variável da function que precisa ser armazenada na workpsace é a variável erro.
Logo, definiremos ela como uma variável global.
E lembrando novamente, a function no Matlab ela é o último componente do código, ou seja, você só a escreve no finalzinho, beleza?
Passo 2
Uma vez que a ideia da questão está esclarecida precisamos criar o código e como em qualquer linguagem de programação iremos começar o código com a entrada de dados:
Após inserir a entrada de dados iremos programar a saída de dados:
uma vez que programamos a entrada de dados e a saída de dados, iremos programar a função do problema:
Passo 3
Uma vez implementando a rotina acima no Matlab e executando poderemos obter respostas do tipo:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #5
“Elaboração Própria”
No estudo de mecânica dos materiais comumente deixamos de trabalhar com sistema de forças e começamos a trabalhar com tensões, que em essência a tensão é um instrumento matemático que dita como a força se distribui ao longo de uma superfície.
No estudo dos círculos de Mohr para o cálculo de tensões em uma região podemos chegar nos seguintes conjuntos de equações:
Onde a partir de um estado plano de tensão a primeira equação nos permite calcular a maior e a menor tensão que esse corpo irá sofrer e a segunda equação indicará em qual direção essa tensão se tornará a máxima possível.
Utilizando essas equações gere uma função no Matlab que calcule as tensões máximas e mínimas que o corpo está sofrendo a partir de um estado de tensão e além disso calcule a tangente que indica a direção pelo qual essa tensão é máxima.
Passo 1
A questão em si tem um enunciado enorme, mas ela quer que elaboramos um programa em Matlab para calcular as tensões máximas e mínimas que o corpo sofre, esse tipo de conta é altamente importante em resistência das materiais pois com esses cálculos poderemos falar se o material irá suportar alguma força sobre ele sem se romper.
Logo a ideia é criar uma função com as equações das tensões máximas e mínimas e incluir a tangente como iremos mostrar logo abaixo.
Passo 2
Uma vez que a ideia da questão está esclarecida precisamos criar o código e como em qualquer linguagem de programação iremos começar o código com a entrada de dados:
Após inserir a entrada de dados iremos programar a saída de dados:
uma vez que programamos a entrada de dados e a saída de dados, iremos programar a função do problema:
Passo 3
Uma vez implementando a rotina acima deve ficar algo assim:
Executando a rotina poderemos ter respostas do tipo:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #6
Adaptada da Questão 03 - Matlab com aplicações em Engenharia – Amos Gilat – página 119
A população de um determinado país é de 50 milhões e a expectativa é de que ela duplique em 20 anos. Determine a população em 5 anos, partindo da população inicial.
O crescimento populacional segue a equação:
Onde é a população no tempo , é a população inicial e d é tempo necessário para a população duplicar.
Passo 1
Opa pessoal aqui é uma questão que podemos resolver de diversas formas, porém vamos resolver com a criação de uma função. Para otimizar nossos cálculos, vamos utilizar uma function para realizar essa operação e automatizar as coisas.
Passo 2
Para criar a precisamos primeiro lembrar da sua sintaxe.
A sintaxe da é a seguinte:
Primeiramente vamos anexar ela a alguma variável, pode ser qualquer letra ou nome, desde que não detenha caracteres especiais.
E depois vamos dar um nome para ela, nessa questão eu vou chamar a variável de P e dar o nome de .
Então minha fica:
Agora precisamos inserir a variável que vai alimentar nossa função, a questão nos informa que a variável que vamos alimentar a função é o tempo.
E chamei essa variável tempo de t de uma forma arbitrária, belezinha?
Vamos lá, agora que já iniciamos a function vamos criar seus elementos, a função informada precisa de dois elementos.
O primeiro elemento é a população inicial e o segundo é o parâmetro e ambos são dados na questão, logo nossa function fica:
Agora vamos inserir a função que foi informada no problema.
Para imprimir uma saída de dados mais organizada vamos criar um para imprimir o valor organizado na nossa aba do command window.
A sintaxe da função é a seguinte:
Onde devemos chamar a função, abrir um parêntese e escrever o texto que desejamos entre aspas simples.
No lugar que queremos imprimir os valores devemos colocar pois nossa variável geralmente é flutuante pois nem sempre toda raiz sai um número de uma exponencial.
Após realizar essa operação, antes de fechar os parênteses da função devemos linkar os a cada variável.
O primeiro é correspondente ao tempo por isso coloquei o primeiro e o segundo é correspondente a população, linkando com o p depois disso fechamos os parênteses da .
E finalizamos a função com um end no final, digitando tudo certinho sua função deve ficar algo assim:
Agora precisamos salvar essa função com o nome populacao.
Isso é uma restrição do Matlab, o arquivo precisa ser salvo com o nome da função.
Passo 3
Agora que já criamos a função vamos resolver o problema.
No command Windows vamos colocar as seguintes linhas de códigos:
Após isso vamos adicionar a seguinte linha de código
Digitando tudo certinho deve mostrar a seguinte informação:
Resposta
Ei, a resposta está no passo a passo :)
Exercício Resolvido #7
Questão 01 - Matlab com aplicações em Engenharia – Amos Gilat – página 118
Um cone de papel foi construído de modo a possuir um volume de 250 cm³.
Determine o raio R da base e a área da superfície (S) do cone, considerando as seguintes alturas h do cone: 5,6 e 7 cm.
O volume V e a área da superfície do cone são dados por:
Passo 1
Opa pessoal aqui é uma questão que podemos resolver de diversas formas porém vamos resolver com a criação de função.
Como temos diversos valores de h a ideia aqui é gerar uma função para irmos variando os valores de h e encontrarmos o que a questão pede.
A ideia de criar essa função é aumentar o leque do Matlab para otimizar nossos cálculos para resolução do problema.
Sendo assim vamos utilizar a função do Matlab para criar essa função e assim resolver nosso problema.
E as funções que devemos programar são as seguintes:
Passo 2
Para criar a precisamos primeiro lembrar da sua sintaxe.
A sintaxe da é a seguinte:
Primeiramente vamos anexar ela a alguma variável, pode ser qualquer letra ou nome, desde que não detenha caracteres especiais.
E depois vamos dar um nome para ela, nessa questão eu vou chamar de forma arbitrária a variável de e dar o nome de .
Então minha fica:
Agora precisamos inserir as variáveis que vai alimentar nossa função, a questão nos dá o volume e a altura, sendo assim a function é:
Chamei de forma arbitrária o volume de e a altura de , beleza?
Vamos lá, agora que já iniciamos a function vamos criar seus elementos, lembre-se que precisamos que a função imprima o valor da área e do raio.
Logo a saída da função deve ser um vetor e devemos escrever a variável como uma entidade vetorial da seguinte forma:
Como podemos ver o elemento da variável F equivale ao raio, então a variável área deve trocar o raio por ficando:
Para imprimir uma saída de dados mais organizada vamos criar um para imprimir o valor organizado na nossa aba do cammand window.
A sintaxe da função é a seguinte:
Onde devemos chamar a função, abrir um parêntese e escrever o texto que desejamos entre aspas simples.
No lugar que queremos imprimir os valores devemos colocar pois nossa variável geralmente é flutuante pois nem sempre toda raiz sai um número inteiro.
Após realizar essa operação, antes de fechar os parênteses da função devemos linkar os a cada variável.
O primeiro é correspondente ao raio por isso coloquei o primeiro e o segundo é correspondente a área, linkando com o depois disso fechamos os parênteses da .
E finalizamos a função com um end no final, digitando tudo certinho sua função deve ficar algo assim:
Agora precisamos salvar essa função com o nome cone.
Isso é uma restrição do Matlab, o arquivo precisa ser salvo com o nome da função.
Passo 3
Agora que já criamos a função vamos resolver o problema.
No command Windows vamos colocar as seguintes linhas de códigos:
Após isso vamos adicionar a seguinte linha de código
Digitando tudo certinho deve mostrar a seguinte informação:
Realizando a operação para as alturas de 6 e 7 temos:
Resposta
Para uma altura de 5 cm temos:
Para uma altura de 6 cm, temos:
E finalmente para uma altura de 7 cm, temos:
Exercício Resolvido #8
Adaptada da Questão 08 - Matlab com aplicações em Engenharia – Amos Gilat – página 119
Um banhista precisa cruzar uma certa faixa de areia na praia, partindo do ponto A em direção ao acampamento no ponto B. Ele pode fazer isso atravessando perpendicularmente a faixa de areia e andando o restante ao longo de uma trilha ou cruzando-a em um ângulo , até um certo ponto, e andando o restante ao longo da trilha:
Considerando-se que o banhista caminha a na areia e a na trilha, determine o tempo para que ele chegue ao acampamento para diversos valores de
As distâncias do ponto A até a trilha perpendicularmente (w) é e a distância do inicio da trilha até o ponto B(u) é
Escreva um programa em uma rotina para resolver o problema.
Passo 1
Opa pessoal esse exercício é uma combinação de 2 conteúdos.
Que é o conteúdo de funções para otimizar o nosso procedimento de cálculo, mas também é um conteúdo que envolve testes lógicos pois temos duas condições.
Qual condição aplicar depende de onde o banhista chega, por exemplo se ele for em um ângulo onde seu ponto final é antes do ponto , ele será obrigado a andar pela trilha modificando assim sua velocidade.
Mas primeiramente vamos equacionar o problema, como o ângulo e é fixo vamos utilizar a equação da tangente.
Logo:
Analisando a figura
Agora podemos calcular o valor de a partir dos dados do problema e se ele for menor do que os 14 km o nosso banhista precisa andar a diferença na trilha, sacou?
Agora que já equacionamos o problema vamos montar nossa
Passo 2
Para criar a precisamos primeiro lembrar da sua sintaxe.
A sintaxe da é a seguinte:
Primeiramente vamos anexar ela a alguma variável, pode ser qualquer letra ou nome, desde que não detenha caracteres especiais.
E depois vamos dar um nome para ela, nessa questão eu vou chamar de forma arbitrária a variável de e dar o nome de
Então minha fica:
Agora precisamos inserir as variáveis que vai alimentar nossa função, a questão nos dá o ângulo em graus e vou chamar esse valor de , sendo assim a function é:
Vamos lá, agora que já iniciamos a function vamos criar seus elementos, lembre-se que queremos que a saída dessa função seja apenas o tempo de caminhada.
Primeiramente, vamos inserir a função para converter os graus em radianos junto com nosso valor de w.
Após isso vamos inserir a equação para calcular o valor de u, resultando:
Agora que temos como calcular o vamos inserir nosso teste lógico, que corresponde ao seguinte:
Se o valor de for menor que 14 é maior do que 0 temos que o tampo do percurso é a soma do tempo da areia mais o tempo da trilha resultando em:
Caso contrário é apenas:
Pois todo o trajeto foi pela areia e a menor distância é dada por uma reta que liga os dois pontos, por teorema de Pitágoras a distância é dada por:
Implementado no Matlab temos:
E para finalizar vamos colocar uma saída de dados para imprimir o tempo mais organizado:
A sintaxe da função é a seguinte:
Onde devemos chamar a função, abrir um parêntese e escrever o texto que desejamos entre aspas simples.
No lugar que queremos imprimir os valores devemos colocar pois nossa variável geralmente é flutuante pois nem sempre toda raiz sai um número inteiro.
Após realizar essa operação, antes de fechar os parênteses da função devemos linkar os a cada variável.
No caso vamos linkar o a variável f que é o tempo.
Sendo assim, o código se torna:
Passo 3
Indo no janela de command Windows e executando a seguinte linha de código:
Irá mostrar a seguinte informação:
Mostrando que conseguimos finalizar o problema.
Resposta
Ei, a resposta está no passo a passo :)