Fórum de Matemática | DÚVIDAS? Nós respondemos! https://forumdematematica.org/ |
|
Erro ao usar equationsToMatrix() para matrizes grandes no MatLab https://forumdematematica.org/viewtopic.php?f=30&t=11459 |
Página 1 de 1 |
Autor: | ascenso.eduardo [ 28 jun 2016, 23:55 ] |
Título da Pergunta: | Erro ao usar equationsToMatrix() para matrizes grandes no MatLab |
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! |
Autor: | ascenso.eduardo [ 29 jun 2016, 04:19 ] |
Título da Pergunta: | Re: Erro ao usar equationsToMatrix() para matrizes grandes no MatLab |
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. |
Página 1 de 1 | Os Horários são TMG [ DST ] |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |