Fórum de Matemática
DÚVIDAS? Nós respondemos!

Um Fórum em Português dedicado à Matemática
Data/Hora: 29 mar 2024, 07:13

Os Horários são TMG [ DST ]




Fazer Nova Pergunta Responder a este Tópico  [ 2 mensagens ] 
Autor Mensagem
MensagemEnviado: 28 jun 2016, 23:55 
Offline

Registado: 11 mar 2016, 05:12
Mensagens: 4
Localização: São Paulo
Agradeceu: 1 vez(es)
Foi agradecido: 0 vez(es)
Eu estou criando uma rotina para resolver a equação de Poisson pelo Método das Diferenças Finitas. Basicamente, eu tive de criar uma malha e aplicar uma equação conhecida em cada ponto da malha, obtendo N equações e N variáveis. Então, eu usei "equationsToMatrix()", para dispôr o sistema no formato Ax = b, e "linsolve(A,b)" para encontrar as N variáveis. A matriz A deve ter tamanho NxN. A rotina funciona perfeitamente para N <= 100. Para N > 100, no entanto, algumas colunas da matriz A simplesmente desaparecem.

Aqui tem um exemplo mais simples, mas que leva a mesma lógica da minha rotina:

*******
m = 11;
n = 11;
f=sym('f%d%d',[m-1,n-1])

for j = 1:n-1
for i = 1:m-1
eqns(i+(j-1)*(m-1),1) = f(i,j) + 1000 == 0;
end
end

[A,b] = equationsToMatrix([eqns]);
seqns = size(eqns)
sA = size(A)
*******

Se m = n = 11 (i.e. N = 100), o tamanho de A é 100x100, exatamente como deveria ser. Se m = n = 12 (i.e. N = 121), o tamanho de A passa a ser 121x120. Uma coluna simplesmente desapareceu. Se eu definir valores maiores para m,n, o número de colunas faltantes crescerá até o sistema se tornar inconsistente.

Alguém poderia me ajudar a resolver este problema?
Obrigado!


Topo
 Perfil  
 
MensagemEnviado: 29 jun 2016, 04:19 
Offline

Registado: 11 mar 2016, 05:12
Mensagens: 4
Localização: São Paulo
Agradeceu: 1 vez(es)
Foi agradecido: 0 vez(es)
Então, como eu encontrei a solução, decidi escrevê-la, para a caso de alguém ter o mesmo problema no futuro. Basicamente, meu erro foi definir minha matriz simbólica f assim:

f = sym('f%d%d',[m-1,n-1])

E não assim:

f = sym('f',[m-1,n-1])

No primeiro caso, obtém-se f(1,1) = f11 , f(1,2) = f12 etc. O problema é que, fazendo assim, tem-se, por exemplo, f(1,11) = f(11,1), já que ambos dão f11. O MatLab vê isso como uma duplicata de variáveis e ignora uma das colunas. É por isso que o problema ocorre com matrizes maiores.

No segundo caso, MatLab enumera os temos da matriz por conta própria e o problema é resolvido.


Topo
 Perfil  
 
Mostrar mensagens anteriores:  Ordenar por  
Fazer Nova Pergunta Responder a este Tópico  [ 2 mensagens ] 

Os Horários são TMG [ DST ]


Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 8 visitantes


Criar perguntas: Proibído
Responder a perguntas: Proibído
Editar Mensagens: Proibído
Apagar Mensagens: Proibído
Enviar anexos: Proibído

Pesquisar por:
Ir para:  
cron