Komplex számok a programozásban

Innen: HamWiki
A lap korábbi változatát látod, amilyen HG2ECZ (vitalap | közreműködések) 2014. november 30., 09:26-kor történt szerkesztése után volt. (Complex néhány programnyelvben)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)
Ugrás a navigációhoz Ugrás a kereséshez

Láttuk, hogy a komplex számok RLC körök váltakozóáramú viselkedésének leírásánál fontos szerephez jutnak. Jelen szócikk azt vizsgálja, mely programnyelveken hogyan lehet komplex számokkal számításokat csinálni.

C

Nyelvi szinten támogatva van.

<source lang="C">

  1. include <stdio.h>
  2. include <complex.h>

void kiir(const char *s, float complex a) {

   printf("%s: %f + %fj\n", s, creal(a), cimag(a) );

}

int main() {

   float complex a, b;
   a = 5 + 3i; // de akár 5 + 3j vagy 5 + 3*I alakban is megadható.
   b = 3 + 2i;
   // creal(a), cimag(a) - lásd kiír függvényben.
   kiir("a: ", a);
   kiir("b: ", b);
   // vektorhossz; cabs: double, cabsf: float, cabsl: long double
   printf("cabs(a): %f\n", cabs(a) );
   // fázis; carg: double, cargf: float, cargl: long double
   printf("carg(a): %f\n", carg(a) ); // radiánban
   kiir("a+b: ", a + b);
   kiir("a*b: ", a * b);
   kiir("a/b: ", a / b);
   return 0;

} </source>

C#

Java

Javascript

Octave

Az Octave egy matematikai program, jól szkriptelhető, egyszerű a nyelvezete. Műszaki számításokra kifejezetten alkalmas. Amennyiben ;-vel zárjuk a sort, akkor annak a sornak az eredménye nem kerül ki a képernyőre.

A komplex számok nyelvi szinten vannak támogatva.


<source lang="octave">

  1. !/usr/bin/octave

a = 5 + 3i b = 3 + 2i

disp "a: Real, imag:" re = real(a) im = imag(a)

disp "a: magnit, phase:" magnit = abs(a) phase = arg(a)

disp "a+b, a*b, a/b:" plusz = a+b szor = a*b per = a/b </source>

PHP

Alapból nincs támogatva, azonban a feltelepíthető a Complex csomag (jelenleg béta). Sajnos ezzel sem olyan kényelmes a komplex számokkal való számolás. Szerencsés lenne itt is nyelvi elemként beintegrálni.

pear install Math_Complex
# illetve ha nem települ fel, akkor:
pear install Math_Complex channel://pear.php.net/Math_Complex-0.8.6

Példa: https://github.com/pear/Math_Complex/blob/master/docs/examples/using_complexop.php

Próbáim során a ComplexOp problémás volt, így a Complex lett csak behívva, amiben még nincs összeadás, szorzás, osztás.

<source lang="php"> <?php require_once 'Math/Complex.php';

$a = new Math_Complex(5, 3); // a = 5 + 3j $b = new Math_Complex(3, 2); // b = 3 + 2j

echo "a: ", $a->toString(), "\n"; echo "b: ", $b->toString(), "\n";

echo "real(a): ", $a->getReal(), "\n"; echo "imag(a): ", $a->getIm(), "\n";

echo "magnit: ", $a->abs(), "\n"; echo "phase: ", $a->angle(), "\n";


// alábbi nekem a ComplexOp modul hibájával elszállt require_once 'Math/ComplexOp.php';

$r = Math_ComplexOp::add($a. $b); echo "a+b: ", $r->toString(), "\n";

$r = Math_ComplexOp::mult($a. $b); echo "a*b: ", $r->toString(), "\n";

$r = Math_ComplexOp::div($a. $b); echo "a/b: ", $r->toString(), "\n"; ?> </source>


Python

A komplex számok nyelvi szinten támogatva vannak.

<source lang="python">

  1. !/usr/bin/python

import cmath

a = 5 + 3j b = 3 + 2j

print "real(a): ", a.real print "imag(a): ", a.imag

print "a:", a print "b:", b

print "abs:", abs(a) print "phase:", cmath.phase(a) print "polar:", cmath.polar(a)

print "a+b:", a+b print "a*b:", a*b print "a/b:", a/b </source>

Ruby