Ir para conteúdo
Fórum Script Brasil
  • 0

Erro com plot() e laço infinito (menu)


rmslobato

Pergunta

Olá.

Eu estudei programação em C na faculdade.

Nesse semestre preciso fazer um programa para resolver

alguns casos de simples equações diferenciais.

Resolvi fazer em python, por sugestão de um amigo,

já que precisaria fazer gráficos com as soluções

numéricas das equações e ele comentou que havia feito algo semelhante

de maneira muito simples com o python.

Aceitei a dica aproveitando para estudar outra linguagem de programação.

O Código abaixo é basicamente o programa inteiro.

Simplifiquei o código comentando algumas linhas para não precisar prostar na integra o

programa.

O problema:

Importando o programa e chamando a função 'teste1(0)' uma janela é aberta

com o gráfico gerado pelos pontos das sequencias t e y sem nenhum problema.

Como não descobri uma maneira de abrir exibir mais de um gráfico simultaneamente

(abrindo-os em outras janelas), resolvi fazer um menu - um laço infinito (terminando com

opcao sair) - e então de acordo com a opção, iria ser exibido o gráfico correspondente.

No entanto, quando é escolhido uma opção e o gráfico é exibido, ocorre um erro.

Se você clica na janela do gráfico, ela fica branca e é encerrada pelo

sistema operacional, contudo, o laço roda normalmente no programa, pedindo nova opção.

Isso me parece um erro de sobrecarga de memório. Mas eu não entendo, porque

a funcao teste1(0) é chamada uma vez só.

Então acredito que o erro esteja relacionado com o plot() e o laço.

Porém, não sei como manter o menu, e tirar o erro quanto a exibição dos gráficos.

Obs.:

Estou usando o PyLab(IPython) para windows.

#------------------------------------------------------
from pylab import plot, close
#------------------------------------------------------
def euler(a, h, n):
    if n == 1:
        f = open("tabela.txt", "a")
        f.write("\n-- Metodo de Euler --\n")
    y = []
    t = []
    yk = 1.0
    tk = 0.0
    t_max = 2.0
    yk1 = yk
    tk1 = tk
    while tk1 < t_max:
        y.append(yk1)
        t.append(tk1)
        if n == 1:
            f.write("%.3s %.6s\n" % (tk1, yk1))
        yk1 = yk + h*a*yk
        yk = yk1
        tk1 = tk1 + h
    if n == 0:
        plot(t, y, color='green')
    if n == 1:
        f.close()
#------------------------------------------------------

def teste1(n):
    if n == 1:
        f = open("tabela.txt", "a")
        f.write("TESTE 1: y'= -3y, h = 0.1\n")
        f.close()
    #exata(-3, 0.1, n)
    euler(-3, 0.1, n)
    #eulermod(-3, 0.1, n)
    #rk4(-3, 0.1, n)

#------------------------------------------------------

def menu():
    texte_menu = """
1 - teste 1
2 - ...
.
.
.
6 - sair
"""
    texto_grafico = """
bla bla
"""

    while 1:
        print texto_menu
        print("Opcao:")
        op = raw_input()
        opcao = int(op)

        if opcao == 1:
            close(1)
            print("Opcao escolhida: 1\n")
            print texto_grafico
            teste1(0)

        elif opcao == 2:

            # codigos...

        elif opcao == 6:
            close(1)
            break
        else:
            print("Opcao invalida.\n")

#------------------------------------------------------

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...