Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

fgmarquesc

Matlab_Nova_duvida

Mensagens Recomendadas

fgmarquesc

Bons dias a todos.

Gostaria que alguém me ajudasse no seguinte:

Eu pretendo criar uma matriz que apresente alternadamente o seguinte: m,0,0,m,0,0,m,0,0,m...,m,0,0,m, em que estes valores de m são todos iguais.

O que eu fiz foi:

K=diag([m,0,0])

Mas queria repetir este processo na diagonal inúmeras vezes, tantas quanto for o valor n.

Passo a explicar melhor:

Se tiver 7 elementos, quero que a diagonal que escrevi em cima se repita 7 vezes, ou seja: K=diag([m,0,0,m,0,0,m]). No entanto, se tiver por exemplo, 30 elementos como posso dizer ao programa para repetir 30 vezes??

O que eu fiz foi:

dim=30

K=diag([m,0,0],dim)

No entanto não tou a conseguir obter o que pretendo.

Obrigados

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pedrosorio

K = diag(m*(abs(sin((0:n-1)*pi/3))<0.01));

Código "à artista" para fazer isso  :D

sin((0:n-1)*pi/3) gera-te um vector com 'n' valores da função seno calculados começando em 0, com intervalos de pi/3. Isto vai gerar-te um vector em que tens zeros nas posições 3k+1, k inteiro (i.e. 1,4,7,10,etc.).

Como o matlab faz isto à la software numérico, na realidade ficas com valores próximos de zero mas que não são exactamente zero, portanto fazemos (abs(sin((0:n-1)*pi/3))<0.01) para obter um vector que tem 1's em todas as posições acima referidas, e zero nas restantes. Multiplicamos isso por 'm' e usas a função diag nesse vector, et voilà.


Não respondo a dúvidas por mensagem.

Partilhar esta mensagem


Ligação 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. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.