Tenho um trabalho em Matlab...
4 participantes
Página 1 de 1
Tenho um trabalho em Matlab...
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.
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
Re: Tenho um trabalho em Matlab...
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
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
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
Markoni- Xerife
- Mensagens : 63
Data de inscrição : 29/11/2007
Re: Tenho um trabalho em Matlab...
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
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!
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
Re: Tenho um trabalho em Matlab...
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
Markoni, thanks
Re: Tenho um trabalho em Matlab...
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.
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
Re: Tenho um trabalho em Matlab...
Eu faria assim:
onde x é o teu vector linha nog e y o vector v
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;
Markoni- Xerife
- Mensagens : 63
Data de inscrição : 29/11/2007
Re: Tenho um trabalho em Matlab...
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(); <-- 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.
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(); <-- 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
Re: Tenho um trabalho em Matlab...
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"
Se bem entendi queres que o programa vá ler os dados das variaveis automaticamente a um ficheiro e apresente o resultado, é isso?
final=exbarramento(vector1,vector2)
(onde vector1 e vector2 já tem de estar declarados) ele apresenta-te o resultado pretendido e guarda na variavel "final"
Se bem entendi queres que o programa vá ler os dados das variaveis automaticamente a um ficheiro e apresente o resultado, é isso?
Markoni- Xerife
- Mensagens : 63
Data de inscrição : 29/11/2007
Re: Tenho um trabalho em Matlab...
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
Portanto a função terá que ficar isolada mas o resto se calhar ficaria bem num so 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
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
Re: Tenho um trabalho em Matlab...
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. Agora depende do caminho que queres seguir...
Markoni- Xerife
- Mensagens : 63
Data de inscrição : 29/11/2007
Re: Tenho um trabalho em Matlab...
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
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
eddiemaniaco- Mensagens : 6
Data de inscrição : 05/03/2008
Analisar circuitos em Matlab
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
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
Re: Tenho um trabalho em Matlab...
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
Quanto ao 2ºponto esta é uma solução possivel
f=sym('(v1-v2)/2 + v1/2');
simplify(f)
Dispõe
Markoni- Xerife
- Mensagens : 63
Data de inscrição : 29/11/2007
Re: Tenho um trabalho em Matlab...
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....
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....
Re: Tenho um trabalho em Matlab...
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.
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
Tópicos semelhantes
» trabalho de matlab
» Ajuda urgente! trabalho matlab/simulink
» Trabalho nº2 turma 5
» Trabalho de Casa (P6)
» Sugestão de trabalho....
» Ajuda urgente! trabalho matlab/simulink
» Trabalho nº2 turma 5
» Trabalho de Casa (P6)
» Sugestão de trabalho....
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos