Ir para o conteúdo
biohazard999

Dúvidas em Matlab

Mensagens Recomendadas

biohazard999    0
biohazard999

entao as minhas duvidas sao as seguintes tou a tentar implementar um script e uma função,

a função deve ser uma sucessão que é a seguinte a(n+1)= p*a(n)* (1-a(n)).

o problema o k me pede é k implemente uma função recursiva a partir da sucessão.

O script já o defini, mas ainda faltam umas coisas k e por o grafico e mais umas coisas, ai é k eu tenho a duvida e tambem como se faz a função e k e um pouco complicado.

Aki ta o script

%Script file: sucessão.m
%Este script testa a sucessão a(n+1)=p*a(n) * [1-a(n)]

clc;
clear all;
close all;

disp('Este script testa a sucessão a(n+1)=p*a(n) * [1-a(n)]')

%Pede ao utilizador o termo a(0),i.e., o valor inicial da sequência

ainicial_incorrecto=true
while (ainicial_incorrecto)
    ainicial = input('Introduza o termo ou valor inicial (a(0)), pretendido: ')
   ainicial_incorrecto=( ainicial<1)
end


p = input('Introduz o valor de p pretendido: ')


n = input ('Introduza o valor de n pretendido: ')

O enunciado é este

Escreva um programa (denominada problema_A.m) em MATLAB que calcule os N

primeiros termos da sucessão:

a(n+1) = p × a(n) × [1-a(n)]

A .m file problema_A.m deve pedir ao utilizador os valores de N, p e a(0), i.e. o valor

inicial da sequência, e apresentar um gráfico com o resultado. Deve ser implementada

uma função recursiva (denominada sucessao.m), a qual deve ser chamada pela .m file

problema_A.m.

O programa só deve terminar após opção do utilizador, caso contrário deve pedir

novos dados para cálculo.

Apresente dois gráficos com os seguintes valores:

Gráfico 1) N= 100, p=2.9 e a(0) = 0.5

Gráfico 2) N= 100, p=3.1 e a(0) = 0.5

Comente os resultados.

Se alguem me poder ajudar. :thumbsup:

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

lol... Não... "Escreva um programa (denominada problema_A.m) em MATLAB que calcule os N primeiros termos da sucessão:"...

Agora não te vou poder ajudar porque estou com pressa. Mas se sabes o que é programação recursiva, e se leste o enunciado, a função recursiva tem que estar em sucessao.m, ou seja, esta função deve calcular o valor da sucessão em função do valor anterior... Algo como isto:

%Função recursiva sucessão
function [an] = sucessao(n)
if n>0
  an1=p*sucessao(n-1)*(1-sucessao(n-1));
else
  an=a0;
end

Isto em princípio bastaria... Depois no problema_A.m é que deves pedir os valores ao utilizador e chamar a sucessão...

Mas pela tua dúvida acho que não percebeste muito bem o que é programação recursiva...

Se tiveres dúvidas pergunta.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

obrigado, pela vossa atenção.

Já agora o k e isso da programação recursiva.

Mais uma duvida com e k se faz esta parte do programa.

O programa só deve terminar após opção do utilizador, caso contrário deve pedir

novos dados para cálculo.

sim o programa so deve terminar apos opcao do utilizador.

Como se faz isso de chamar a função sucessão para o script.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

Ja modifiquei um pouco o problema:

%Script file: sucessão.m
%Este script testa a sucessão a(n+1)=p*a(n) * [1-a(n)]

clc;
clear all;
close all;

disp('Este script testa a sucessão a(n+1)=p*a(n) * [1-a(n)]')


a0 = input ('Introduza o termo ou valor inicial (a(0)), pretendido: ')    %Pede ao utilizador o termo a(0),i.e., o valor inicial da sequência

n_incorrecto=true;
while (n_incorrecto)
    n = input('Introduza o valor n pretendido: ')
   n_incorrecto=( n<0)
end


p = input('Introduz o valor de p pretendido: ')

stem(,'r*')
title (['Sucessão até ao termo ' (n)]);
grid on;

O k devo por para aparecer o grafico, o problema e k este n aparece.

Ja agora se alguem me poder ajudar como e k devo começar a implementar as funções e scripts pa estes problemas

Um número primo é um número natural, maior do que 1, que é divisível por apenas

dois números naturais, o 1 e ele mesmo. Logo, os primeiros números primos são: 2, 3,

5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,

etc.

Eratóstenes (um matemático, geógrafo e astrónomo grego), viveu no século III a.C, e

entre suas contribuições (além de provar que a Terra era esférica!), apresentou um

algoritmo para calcular os números primos até um determinado valor limite.

Algoritmo esse, que é conhecido como o crivo de Eratóstenes, o qual se descreve de

seguida:

Seja N (inteiro >=2), o valor limite a testar.

1) Criar uma lista com todos os naturais de 2 até N;

2) Se N=2 ir para o passo 8), caso contrário ir para o passo 3)

3) Determinar a raiz quadrada de N;

4) Arredondar o valor obtido em 3) para o inteiro inferior mais próximo;

2

5) Atribuir a k o valor 1;

6) Ciclo:

a. Remover da lista todos os elementos que sejam múltiplos do k

elemento da lista (excepto o elemento k);

b. Incrementar k de uma unidade;

c. Se o k elemento da lista for maior do que o valor obtido em 4) ir para o

passo 7), caso contrário ir para o passo 6.a)

7) Fim de ciclo

8) Apresentar lista

Exemplo: N=23

Arredondamento da raiz quadrada de 23: 4;

Lista: 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23;

k=1 (eliminar múltiplos de 2);

Lista: 2 3 5 7 9 11 13 15 17 19 21 23;

k=2 (eliminar múltiplos de 3); Como 3 <= 4:

Lista: 2 3 5 7 11 13 17 19 23;

k=3 (eliminar múltiplos de 5); Como 5 > 4:

Lista final: 2 3 5 7 11 13 17 19 23.

Escreva um programa (denominada problema_B.m) em MATLAB que calcule e

apresente no monitor os números primos menores ou iguais a N. Deve ser

implementada uma função (denominada primo.m), a qual deve ser chamada pela .m

file problema_B.m.O programa só deve terminar após opção do utilizador, caso

contrário deve pedir novos dados para cálculo.

Escreva um programa em MATLAB que leia dados do ficheiro fornecido alunos.mat,

manipula-os e processa-os através de ordenação. O ficheiro alunos.mat contém a

estrutura aluno com os seguintes campos: numero (inteiro correspondente ao número

do aluno), nome (cadeia de caracteres correspondente ao nome do aluno), apelido

(cadeia de caracteres correspondente ao apelido do aluno), naturalidade (cadeia de

caracteres correspondente à naturalidade do aluno), nota (real correspondente à nota

de ingresso do aluno) e curso (cadeia de caracteres correspondente ao curso em que o

aluno está inscrito).

Pretende-se que o programa ordene os alunos por ordem crescente do número. O

resultado deve ser visualizado no monitor pela seguinte ordem:

numero | curso | nome | apelido | naturalidade | nota

a) Implemente um algoritmo de ordenação à sua escolha, para obter a ordenação

pretendida. A .m file deve ser denominada problema_C_a.m. (Comente devidamente

o código e explicite que método de ordenação utilizou.)

(4 valores)

b) Utilize a função do MATLAB denominada sort para obter uma ordenação

alfabética por apelido. O resultado deve ser visualizado no monitor pela seguinte

ordem:

apelido | nome | numero | curso | naturalidade | nota

A .m file deve ser denominada problema_C_b.m.

(3 valores)

NOTA: Por facilidade de visualização considere que a string nome e apelido têm 10

caracteres, a string naturalidade 15 e a string curso 20 caracteres.

A ver se alguem me diz como devo começar pa depois tirar aki mais alguma duvida.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Directamente do teu enunciado:

"Deve ser implementada

uma função recursiva (denominada sucessao.m), a qual deve ser chamada pela .m file

problema_A.m."

Se te estão a pedir para fazeres isto... e não sabes o que é programação recursiva então algo está muito errado... :S

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

Oh rapaz... Isto não e a sala de aula  :P Nós podemos tentar ajudar-te... mas devias ter profs que te esclarecessem essas dúvidas... Esse algoritmo de Eratóstenes implementei-o na TI-83 quando andava no 10º ano  :D

Tenta fazer essas coisas e depois vem cá esclarecer dúvidas particulares... Se não consegues perceber nada de nada disso... Então o melhor mesmo é falares com o teu prof.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

este serve para função do problema b

% Eratostenes - Calcula numeros primos mediante
% el metodo de la "Criba de Eratostenes"
% Solicitamos al usuario el maximo numero
ult = input('Maximo numero: ');
numeros = 1:ult; % Lista de todos los numeros
% Eliminamos los multiplos de cada numero
for n = 2:ult
if numeros(n) ~= 0
numeros(2*n:n:ult) = 0;
end
end
% Presentamos los que sean distintos de cero
disp(numeros(numeros~=0));

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

O problema A já te resolvi. A função recursiva é tudo o que precisas. Se não sabes fazer o .m que chama a função recursiva com um número fornecido pelo utilizador até que este decida que já n quer, então nem vale a pena tentares fazer mais nada.

E quanto aos outros, sim são relativamente fáceis, mas como já te expliquei, este fórum não serve para resolver problemas de programação passados na escola/faculdade. Se tiveres alguma dúvida específica tudo bem, se queres que eu te faça os exercícios para passares na disciplina/cadeira sem tu perceberes nada disso, então obviamente não.

EDIT: LOOOOOOL ya essa função escrita por alguém que fala castelhano resolve o problema, tens é que mudar os comentários para português

P.S.: Detesto cábulas e chicos-espertos.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

por lo menos no necessita ningun tradutor, que me traduzca lo que esta en el puto texto, pero bueno entiendo la situacion, creo que proximamente metere mis dudas e no algo copiado ya lo cogi.

entao está bem, quanto ao problema A, eu não sei é como é que ei-de por o programa a dar a hipótese ao utilizador, já ouvi falara em "quit" ou algo assim, mas ainda não sei bem, se me poderes ajudar.

Quanto ao problema B, eu já tive a ver tenho que definir uma função, que me de uma lista que faça um floor sqrt do valor que eu meta la, dps ja e mais facil so keria saber como havia de começar k dps eu já fazia.

Mais uma coisa, eu tentei por o stem a funcionar no problema A, pus la o nome da função mas não da, por que razao.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

e pa pedrosorio n fikes xateado isto e so no gozo, e pa me ajudares, pois tenho alguns problemas em computação e programação, e k o prof vamos la tirar duvidas e o gajo diz, exemplo:

Ha isso, vai pa casa e procura no google, dps vem ca mostrar pa eu ver como ta e ja te comento isso, e manda-nos nitidamente dar uma volta

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999
7.º - Lembrem-se também que ninguém deve fazer os trabalhos de casa a ninguém, como tal, se querem ajuda em algo para a escola, faculdade ou cursos de formação, devem apresentar propostas ou código já feito para o problema em questão, demonstrando as dúvidas precisas que têm.

Regras do forum, embora em tenha sido parvo em meter ai os problemas, o k eu pretendia era k me dessem uma ideia geral de como havia de começar não era precisso dar-me  o codigo ou fazer-me o problema, bastava dizer, epa usa esta função ou akela e novas duvidas k me surgissem, ja perguntava.

Quanto ao problema A, eu pus uma duvida sobre a parte de como havia de por o grafico e k tava a dar erro.

Dps sou eu é k n sei as regras do forum.

Conclusou a pessoa k tava a responder e k tem uma distorção do sentido da palavra e deve tar abituado a k lhe peçam os trabalhos já feitos, o k eu pretendia não era nada disso.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

Tem calma. Se ninguém respondeu ainda é porque ninguém que saiba a resposta viu a pergunta.

Estás a utilizar o stem de forma incorrecta. Não te está a dar erro nem nada? No código que puseste aí ainda não calculaste os termos da sucessão. Precisas de ter este resultado antes de chamar a função stem. depois de teres os termos por exemplo num array y, chamas stem do seguinte modo:

stem(y, 'r*');

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrosorio    5
pedrosorio

TheDark... O problema dele não é com a parte gráfica. Ele não sabe o que é programação recursiva e estão a pedir-lhe para implementar um função recursiva. Eu pus-lhe um exemplo de função recursiva que resolveria o problema mas ele insiste em usar programação imperativa... Não há milagres

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
TheDark    0
TheDark

lol. "Programação Imperativa" não exclui "funções recursivas" :)

Uma função recursiva é uma função que em vez de utilizar ciclos internos, pega nos argumentos que lhe foram passados, altera-os (por exemplo, decrementa [dica!!!]) e se chama a si própria com os argumentos alterados, até que esses argumentos cheguem a um certo valor (por exemplo, zero [dica!!!]), para os quais retorna um valor pré-definido (por exemplo, sabes o valor de a(0) [dica!!!]).

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
biohazard999    0
biohazard999

Ok, mas  o problema é k eu n sou um programador, nem ando em nenhuma engenharia informatica ou do genero, o k eles me ensinam é o basico, n e nada do resto.

Normalmente, as pessoas kando kerem ajudar as outras não se põe com papaias, perguntam às pessoas o que pretendem de modo a ajudar, não ta aki ninguèm para fazer os trabalhos, aos outros, mas se eu soubesse algo ajudava os outros de modo a conseguir.

Pelo menos o The Dark, deu uma resposta decente.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
tinoni    0
tinoni

lol... Não... "Escreva um programa (denominada problema_A.m) em MATLAB que calcule os N primeiros termos da sucessão:"...

Agora não te vou poder ajudar porque estou com pressa. Mas se sabes o que é programação recursiva, e se leste o enunciado, a função recursiva tem que estar em sucessao.m, ou seja, esta função deve calcular o valor da sucessão em função do valor anterior... Algo como isto:

%Função recursiva sucessão
function [an] = sucessao(n)
if n>0
  an1=p*sucessao(n-1)*(1-sucessao(n-1));
else
  an=a0;
end

Isto em princípio bastaria... Depois no problema_A.m é que deves pedir os valores ao utilizador e chamar a sucessão...

Mas pela tua dúvida acho que não percebeste muito bem o que é programação recursiva...

Se tiveres dúvidas pergunta.

so uma questao, a funcao sucessao nao deveria ter mais 2 argumentos de entrada, o p e o a(0)?

obg

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade