Toon posts:

[Fortran] Het getal i in fortran95 (of een andere taal?)

Pagina: 1
Acties:

Verwijderd

Topicstarter
-edit: ik dacht toch echt dat ik in Programming poste :( Wil iemand even lief zijn?

===Wiskundig verhaal===
Ik had het geweldige plan om de prestatiewinst te gaan bekijken tussen sinusoiden bereken via
- de reele weg: reeksen van Taylor
- de Complexe-getallen route: sinusoide omvormen naar e-machten met behulp van de formule van Euler en dan de e-machten omzetten naar Taylorreeksen.

In princiepe zou een computer de laatste methode veel sneller moeten doen omdat een benadering voor een e-macht-Taylorreeks minder berekeningen nodig heeft.

Dit dacht ik te doen door een computer bij elke methode een 10^x keer te doen en ondertussen de tijd te meten.Ik ben dan ook nu bezig met het script voor de Complexe methode, en daar kom ik hetvolgende probleem tegen. Ineens blijkt dat de ondersteuning van Complexe Getallen in Fortran alleen maar bestaat uit een klein beetje vectorberekening. Klopt dit?

Kortom: kan ik met het getal i rekenen in Fortran95 of in een andere taal?
Sterker nog: is er een taal die het getal i ondersteunt?

http://nl.wikipedia.org/wiki/Complex_getal
http://nl.wikipedia.org/wiki/Taylor-reeks

-edit: opgelost
Ik word oud ofzo, want:
code:
1
2
Complex ::i
i = (0, 1)


ofwel als resultaat
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
! This programma is gebaseerd op:
!   * http://www.fortran.com/F/
!   * http://gcc.gnu.org/

program complexLoop
    ! Declareren variabelen !
    integer :: howMuch, loopCount
    real*16 :: start, finish, x
    complex :: i, ineg
    complex*16 uitkomst

    ! Constanten !
    i = (0, 1)
    ineg = (0, -1)

    ! Welkomsttekst + vragen hoeveel hij moet loopen !
    print *, "Hallo, welkom bij dit test-programma."
    print *, "    Loop: Met complexe getallen"
    print *, "Hoevaak moet ik de berekening doen?: "
    read *, howMuch
    print *, "------------------------------------------------------"

    ! Begintijd opvragen !
    call cpu_time(start)

    ! Herhalingsloop !
    loopCount = 0
    do while (howMuch > 0)
        ! Standaard !
        loopCount = loopCount + 1
        x = loopCount * .023857718
        
        ! Complexe berekening: !
        uitkomst = (exp(i*x) - exp(ineg*x)) / (2 * i)
        
        ! Loop printen: !
        print *, "Loop: ", loopCount, " - uitkomst ~ ", uitkomst
        howMuch = howMuch - 1
    end do

    ! Eindtijd opvragen + Tijd printen !
    call cpu_time(finish)
    print *,'(gebruikte tijd = ',finish-start,')'

    ! Einde programma !
    stop
end program complexLoop


Alleen moet ik nu zelf nog de benaderingsformules van Taylor gaan programmeren om het antwoord enigssinds acceptabel te krijgen... Reele methode is nu namelijk iets van 10x sneller. (Voor de test de print line in de loop even commenten)

Gaat lukken!

[ Voor 47% gewijzigd door Verwijderd op 12-05-2006 17:18 ]


  • pasta
  • Registratie: September 2002
  • Laatst online: 12-01-2025

pasta

Ondertitel

Signature


  • Henk007
  • Registratie: December 2003
  • Laatst online: 06-04-2025
offtopic:
Moderne (al ruimschoots 10 jaar) CPUs hebben trigonometrische funkties in hardware ingebakken in de FPU. Uiteindelijk zal om het even welke zelf geschreven methode trager zijn. Er bestaat een zeer kleine kans dat een sterk geöptimaliseerd assembler programma (MMX, SSE, SSE2) sneller is.
Lees als voorbeel dit topic maar eens.

Ontopic:
Bijvoorbeeld C++ kent een complexe library

[ Voor 32% gewijzigd door Henk007 op 12-05-2006 17:44 ]


  • PommeFritz
  • Registratie: Augustus 2001
  • Laatst online: 24-11-2025

PommeFritz

...geen friet

Python kan rekenen met complexe getallen:

Python:
1
2
3
4
5
6
7
8
9
>>> import cmath
>>> cmath.sqrt(-1)
1j
>>> i=cmath.sqrt(-1)
>>> i*i
(-1+0j)
>>> (i*i).real
-1.0
>>>


Complexe getallen is een built-in type in Python.

FireFox - neem het web in eigen hand


Verwijderd

Topicstarter
Henk007 schreef op vrijdag 12 mei 2006 @ 17:38:
offtopic:
Moderne (al ruimschoots 10 jaar) CPUs hebben trigonometrische funkties in hardware ingebakken in de FPU. Uiteindelijk zal om het even welke zelf geschreven methode trager zijn. Er bestaat een zeer kleine kans dat een sterk geöptimaliseerd assembler programma (MMX, SSE, SSE2) sneller is.
Lees als voorbeel dit topic maar eens.

Ontopic:
Bijvoorbeeld C++ kent een complexe library
Weet je toevallig ook of er in de CPU een functie zit ingebakken voor e-machten?

Het programma deed overigens ongeveer 8 keer zo lang over de loop over de complexe-methode, als over de reele methode. Zelf de Taylorreeksen programmeren dan maar; maar dat doe ik toch echt liever in C++

Bedankt!