Pergunta

aplicativo My DotNET tem uma construção limitada linguagem de script em (modelado frouxamente em VBScript) principalmente para pós-processamento números, pontos e vetores. Acabei de suporte adicional para números complexos, mas estou lutando com a notação.

Eu não quero usar a notação A + Bi, uma vez que não é uma divisão clara se A ou B são definidos como equações já:

31 * 5 + 6 + -5

Esta poderia ser interpretado como:

= 31 * 5 + 6 B = -5

e

A = 31 * 5 B = 6 + -5a

Nenhuma das linguagens de programação que eu conheço tem suporte nativo para números complexos. Estou pensando em algo parecido com o seguinte trabalho poder, mas eu apreciaria qualquer entrada sobre isso:

{31 * 5} + {6 + -5} i

complexo (31 * 5, 6 + -5)

r {31 * 5} {i 6 +} -5

Foi útil?

Solução

Parece que você está usando a multiplicação explícita em seus exemplos (ou seja, você precisa A * B, em vez de um B).

Nesse caso, por que não simplesmente usar o sufixo i logo após o valor como no

 myComplex = 12 + 6i
   or
 myOtherComplex = 12/7 + (6 * pi)i

Em seguida, você pode precisar para decidir sobre i ou j, eu vi tanto ...

Este truque i-sufixo não é diferente da notication científica e é e (3.1415e7 por exemplo)

Editar (seguindo comentários de David)

O formato acima pode se tornar confuso, dependendo do público, uma maneira de esclarecer esta pode ser a de só permitem para imaginário literais , e para incluir estes em a notação complexa derivada de sua já existente vector notação . Quando números imaginários ou número complexo requer uma expressão para designá-los, a sintaxe exigiria a "função de aparência" explícito sintaxe como o Imaginário (i) e Complexo (r, i).

Análise governa :

    (. Com ou sem sinal, inteiros ou decimais, ou mesmo exp número notação)
  • Qualquer número directamente seguido pelo sufixo i é um número imaginário: -7i ou 1.23i ou 5.76e4i mas não 12 i (sem espaço permitido entre o número eo sufixo)
  • um vector dois valores com o primeiro uma real e o segundo imaginário é um complexo de: (1, 7i) ou até mesmo (7, 0i)
  • (i) formato imaginário é usado quando "i" valor é uma expressão. i é expressa sem o sufixo i que está implícito na sintaxe de chamada de método.
  • Complex (r, i) formato é usado quando um "r" ou "I" params é / são uma expressão, e também sempre que desejar ambigüidade evitar.

Em suma :

  • (7, 1-I), (0, -3.1415i), (13, 0i), complexo (13, 0) ou Complexo (7x + 3, sen (y) 2) são todos os números complexos
  • 6i, -1.234e5i, Imaginário (1,234) ou imaginário (sqrt (19x + 5y)) são todos números imaginários
  • (12, 23, 34) é um vector em R ^ 3
  • (12i, -2i) em um vetor em I ^ 2 (não é um número complexo, uma vez que o primeiro elemento não é real)
  • ((0,0i), (1, -9.2i), (12, 0i)) ou ((0, 21i), complexo (12,3), (44, -55i)) são vectores em C ^ 3

Isso é parece bastante consistente e simples, mas, novamente, apenas os verdadeiros usuários finais podem contar.

Outras dicas

Se o seu desejo é simplesmente diferenciar o real do componente imaginário de um número complexo, eu faria um dos seguintes.

  • Coloque o número com algum tipo de parênteses para garantir que ele é tratado como uma unidade. Por exemplo, 6 + 5i torna-se {6,5} ou {6,5i} para facilitar a leitura extra.
  • Introduzir um marcador para separar as partes, semelhantes ao expoente em 6.022e23. Por exemplo, 6 + 5i torna-se 6i5. Você ainda precisa de parênteses para especificar fórmulas para um presente, tal como 6 + (b / 2) i se tornando 6i (b / 2), não o confundindo 6ib / 2 (que também pode ser lido como (6ib) / 2) e, infelizmente, você perde o uso de i como uma variável.

De qualquer daqueles seria simples para processar mesmo com um analisador simples e eles estão perto o suficiente para a notação matemática de modo a não confundir. Eu prefiro o primeiro, já que parece mais explícito para mim e usa símbolos que não são susceptíveis de confundir.

Os seus usuários têm uma específica notação eles usam? você poderia escolher um tão perto deles quanto possível? No meu caso eu usaria a + bi então eu diria {31 * 5} + {6 + -5} i no entanto, se acostumar com a forma funcional, então eu sugiro complexo (31 * 5, 6 + -5 ).

Uma vez que você estiver usando .net você pode querer usar o DLR para dar o seu script python ou rubi sintaxe?

A maioria das línguas que posso encontrar que têm um número complexo embutido tipo (como Python e Lisp) usar algo como:

c{r, i}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top