Aplicações Informáticas para Engenharia
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Tenho um trabalho em Matlab...

4 participantes

Ir para baixo

Tenho um trabalho em Matlab... Empty Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Qua 05 Mar 2008, 11:33

Olá viva!
Encontro-me a fazer um trabalho em MAtlab para uma disciplina e de vez em quando encravo em pormenores, uma vez que que comecei a trabalhar em Matlab recentemente.
De momento não consigo prgramar uma coisa (que deve ser simples :p) e é o seguinte.
Vou dar um exemplo que é mais fácil de explicar:

Tenho 8 nós que ligam 6 barramentos e as ligações saó as seguintes:
no = [1 2
1 3
2 3
2 4
2 5
3 4
4 5
5 6]
Cada barramento tem um valor (6 barramentos --> 6 valores):
v= [0.0 -0.038 -0.089 -0.092 -0.083 -0.080]

O que pretendo é:
para o nó 12 é obtido pela diferença entre o valor 1 menos o 2 (0 -(-0.038))=0.038
para o nó 13 = valor 1 menos o 3 (0-(-0.089))=0.089
nó 23 = valor 2 menos o 3 (-0.038-(-0.089))=0.051
e assim sucessivamente.
Deve haver uma maneira de programar isto para que, adicionando ou retirando barramento/nós, obtenha os resultados sem necessitar de reprogramar.

Cumprimentos,
Helder.

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Markoni Qua 05 Mar 2008, 15:30

vais precisar de pedir o X e o Y ao user por cada nó a inserir ou apagar se já se verificar a existencia deste;de um ciclo para percurrer todos os nós, é claro k antes tens de verificar o tamanho da matriz Surprised
E quanto ao :
no = [1 2 e v= [0.0 -0.038 -0.089 -0.092 -0.083 -0.080]
1 3....
vais ter de usar uma coisa do tipo no = [v(1) v(2)...para que o matlab substitu-a pelo respectivo valor declarado na matriz 'v';e penso que tenhas que criar uma variavel matriz para guardar os tais V(i,j+1)-v(i,j)
Hoje não tenho disponibilidade para te fazer o exercicio em inteiro mas deixo aqui umas dicas rabbit
Markoni
Markoni
Xerife
Xerife

Mensagens : 63
Data de inscrição : 29/11/2007

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Qui 06 Mar 2008, 09:14

Consegui desenrascar o meu problema desta maneira. Desconfio que haverá uma maneira de por isto mais simples mas já me sinto contente por ter passado esta etapa Very Happy
Obrigado amigo Markoni pelas dicas!

no = [1 2; 1 3; 2 3; 2 4; 2 5; 3 4; 4 5; 5 6];
v = [0.0 -0.038 -0.089 -0.092 -0.083 -0.080];

L=length(no);

for i = 1:L,
for j = 1,
tpaux(no(i,j),no(i,j+1)) = v(no(i,j)) - v(no(i,j+1));
end
end

for i = 1:L,
for j = 1,
tp(i) = tpaux(no(i,j),no(i,j+1));
end
end

Devo precisar de mais dicas para as próximas etapas, se não for incómodo, poderei "postar" aqui as minhas dúvidas?
Atenciosamente,
Helder!

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Administrador Sex 07 Mar 2008, 05:02

sim, coloca as dúvidas e, já agora, e se não for muito extenso, o código final que te permite resolver o problema. Para que depois nós possamos falar um pouco acerca da optimização do mesmo.

Markoni, thanks Laughing
Administrador
Administrador
Admin

Mensagens : 221
Data de inscrição : 23/11/2007

https://aipe-fctuc.forumeiros.com

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Sex 07 Mar 2008, 09:05

Olá,
este trabalho é composto por algumas etapas, por enquanto estou concentrado na parte do despacho onde através da função "linprog" do Matlab, determino quanto cada gerador deve produzir de modo a satisfazer uma determinada carga (identico à utilização do Solver no Excel).
Agora estou um bocado encravado...

Acontece que tenho 6 barramentos mas só 4 deles é que têm geradores que
são nos barramentos 1, 2, 5 e 6. Representei num vector os barramentos com geradores:
nog = [1 1 2 2 5 6]
em que os barramentos 1 e 2 têm ambos 2 geradores cada.

Já tenho o despecho efectuado e já sei quanto cada gerador vai produzir:
x = [40.0000 40.0000 0.0000 80.0000 10.0000 10.0000]

Agora queria organizar isto de modo a ter em cada barramento o valor do(s) gerador(es) a este ligado:
1 = 40000 + 40000
2 = 0 + 80000
3 = 0
4 = 0
5 = 10000
6 = 10000
obtendo o seguinte vector :
final = [80000 80000 0 0 10000 10000]

Implementei com ciclos "for" e com "if" mas ando sempre à volta. Claro, queria fazer isto para que resultasse para qualquer numero de barramentos e geradores que a estes estejam ligados.

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Markoni Sex 07 Mar 2008, 15:32

Eu faria assim:
onde x é o teu vector linha nog e y o vector v

  • function final=exbarramento(x,y)
  • clc;
  • [m,n]=size(x);
  • [a,b]=size(y);
  • Q=zeros(1,n);
  • if(m~=1 | a~=1 |n~=b)
  • disp(['ERRO']);
  • return;
  • end
  • for i=1:n
  • Q(1,x(i))=Q(1,x(i))+y(1,i);
  • end
  • final=Q;
bounce
Markoni
Markoni
Xerife
Xerife

Mensagens : 63
Data de inscrição : 29/11/2007

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Sáb 08 Mar 2008, 09:22

Correctíssimo, dá o resultado exactamente da forma que eu preciso.
Só fiz uma ligeira alteração no vector Q para este ter tantas colunas quanto o numero de barramentos e não quanto ao numero de geradores nos barramentos:
...
Q=zeros(1,max(x(Smile); <-- Q=zeros(1,max(x("dois pontos")))
...
Estou muito agradecido pela ajuda.

Como não estou muito familiarizado com funções, quando a chamo no Matlab, diz-me que não estão definidos argumentos "x" e "y". Eles já estão guardados como dados do problema num ficheiro dados.m à qual eu chamo antes de chamar a função.
Se introduzir novamente esses dados dentro da função (x=[.. ...] e y=[... ...]) já funciona mas a ideia era alterar qualquer dado que seja somente nesse ficheiro "dados.m" e tudo o resto ser automático.

Mais uma vez obrigado pela atenção.

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Markoni Sáb 08 Mar 2008, 10:10

Pegando no meu codigo.Se no "main" do matlab fizeres :
final=exbarramento(vector1,vector2)
(onde vector1 e vector2 já tem de estar declarados) ele apresenta-te o resultado pretendido e guarda na variavel "final" Wink
Se bem entendi queres que o programa vá ler os dados das variaveis automaticamente a um ficheiro e apresente o resultado, é isso?
Markoni
Markoni
Xerife
Xerife

Mensagens : 63
Data de inscrição : 29/11/2007

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Dom 09 Mar 2008, 04:51

Ainda não pensei bem na versão final... por enquanto tenho resolvido o problema por partes onde já tenho acumulado 4 ficheiros .m e esta ultima função já é o 5º ficheiro.
No final, vai funcionar como um algoritmo, em que terei de fazer um ciclo para que o programa corra tantas vezes quantas necessárias até que se verifique uma certa condição (XPTO - EMC^2 < "uma tolerância a definir")

Isso é mais para adiante mas há alguma sugestão para que possa já começar a estruturar o programa, por exemplo, pôr já tudo num ficheiro .m Question
Portanto a função terá que ficar isolada mas o resto se calhar ficaria bem num so ficheiro.

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Markoni Seg 10 Mar 2008, 11:29

O codigo que eu postei já deve estar inserido num ".m" proprio de preferencia com o nome "exbarramento.m" para não confundires...e para chamar por ele podes criar outro ficheiro ".m" (main.m) por exemplo que vai executar tudo o que quiseres..agora aconselho-te a ir ao matlab fazer "help importdata" que deve ajudar-te a "automatizar" as coisas. study Agora depende do caminho que queres seguir...
Markoni
Markoni
Xerife
Xerife

Mensagens : 63
Data de inscrição : 29/11/2007

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  eddiemaniaco Seg 10 Mar 2008, 15:13

Ok, vou ver a melhor maneira de organizar isto tudo.
Inscrevi-me num curso de Matlab que se vai realizar na quarta, já deve ajudar nalguma coisa.
Obrigado pelas ajudas, depois comunico a minha situação Smile
cheers

eddiemaniaco

Mensagens : 6
Data de inscrição : 05/03/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Analisar circuitos em Matlab

Mensagem  esteves Sex 09 maio 2008, 13:31

Boas,

Sou um novo utilizador de Matlab,e se pudem-se dar umas dicas se faz favor,eu agradecia:

Tenho os seguintes problemas;
1º-
Como por um programa a gerar um certo numero de variaveis
Ex:

input('Quntas variaveis deseja?\n ');
Imagine-se que o utilizador responde 3
Queria que o programa gera-se a variavel v1,v2,v3

2º-
Alguém sabe como resolver equaçoes na forma canónica?
Ex:
(v1-v2)/2 + v1/2 = 0
Será que é possivel fazer com que o programa resolva a equaçao em ordem a v1 e v2 e então ficava:
2v1 + v2=0

obrigado

esteves

Mensagens : 2
Data de inscrição : 09/05/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Markoni Dom 11 maio 2008, 10:34

Quanto ao 1ºponto não percebo bem o objectivo disso, até porque é muito complexa essa questão...Já pensas-te no factor declaração? de queres que as variaveis sejam STRINGS ou inteiros por exemplo??

Quanto ao 2ºponto esta é uma solução possivel

f=sym('(v1-v2)/2 + v1/2');
simplify(f)

Dispõe cat
Markoni
Markoni
Xerife
Xerife

Mensagens : 63
Data de inscrição : 29/11/2007

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Administrador Dom 11 maio 2008, 12:44

Também não percebi exactamente o que pretendes com o 1º Ponto. Mas vamos admitir que tu queres inicializar um conjunto de variáveis que pode variar. Por exemplo, queres criar um conjunto de variáveis com as idades dos alunos de uma dada turma.

Podes começar por pedir ao utilizador, com o comando input, o número de alunos dessa turma. Depois crias um vector cujo comprimento é igual ao número de alunos já introduzido. Deste modo as tuas variáveis serão os elementos do vector. De seguida, dentro de um "ciclo for", pedes ao utilizador a idade de cada aluno e colocas esse valor no elemento respectivo do vector.

Sempre que necessitares de ler ou modificar o valor de uma dessas idades basta manipulares o elemento respectivo do vector. E já está! Julgo que é a maneira mais simples....
Administrador
Administrador
Admin

Mensagens : 221
Data de inscrição : 23/11/2007

https://aipe-fctuc.forumeiros.com

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  esteves Qua 14 maio 2008, 07:01

Obrigado.....
Também agora já tenho a noçao que o meu primeiro ponto, nao é lá muito especifico além de ser algo que é melhor nao me meter por ali, apesar da resposta do vector me por a pensar.

Muito Obrigado pelas respostas.

esteves

Mensagens : 2
Data de inscrição : 09/05/2008

Ir para o topo Ir para baixo

Tenho um trabalho em Matlab... Empty Re: Tenho um trabalho em Matlab...

Mensagem  Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos