Fourier berekening

Status
Niet open voor verdere reacties.

wizsardt

Gebruiker
Lid geworden
20 apr 2019
Berichten
9
Hallo, mijn naam is Roland Parijs. Dank u voor uw acceptatie.

Ik heb de volgende vraag:
Ik heb een code die een Fourier reeks berekent en tekent, één handmatig en één in een loop.
De eerste werkt wel, maar de tweede niet, en ik weet niet precies waarom, beide zouden het zelfde
resultaat moeten geven.


Code:
 For j = -720 To 730 Step 1
  [ATTACH]336885.vB[/ATTACH]
            y1 = r * Sin(j * q * 1) / 1 + r * Sin(j * q * 3) / 3 + r * Sin(j * q * 5) / 5 + r * Sin(j * q * 7) / 7 + r * Sin(j * q * 9) / 9
            y2 = r * Sin((j + 1) * q * 1) / 1 + r * Sin((j + 1) * q * 3) / 3 + r * Sin((j + 1) * q * 5) / 5 + r * Sin((j + 1) * q * 7) / 7 + r * Sin((j + 1) * q * 9) / 9

           
            For p = 1 To 5
                z1 = z1 + r * Sin((2 * p - 1) * j * q) / (2 * p - 1)
                z2 = z2 + r * Sin((2 * p - 1) * (j + 1) * q) / (2 * p - 1)

            Next p
          
            g.DrawLine(clr3, Yas + j, Xas - y1, Yas + j + 1, Xas - y2)
            g.DrawLine(clr3, Yas + j, Xas - z1, Yas + j + 1, Xas - z2)
        Next j
 

Bijlagen

  • vbf.PNG
    vbf.PNG
    6,1 KB · Weergaven: 38
De waarde voor r en q worden niet gevuld.
Plaats de volledige code.
 
Misschien wat meer haakjes:
(2 * p - 1) zou dan ((2 * p) - 1) worden.
 
Dank voor de snelle reactie, hier de volledige code

Code:
Imports System.Drawing.Graphics
Imports System.Math

Public Class Form1
    Dim Pw, Ph As Integer
    Dim clr1, clr2, clr3 As Pen
    Dim q As Double

    Dim Xas, Yas As Integer
    Dim x1, x2, y1, y2, r, c, s, i, j, a, t, p, zz1, zz2 As Integer
    Dim z1, z2 As Double
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim Fw, Fh, Pm As Integer

        Me.Width = 810
        Me.Height = 505

        Fw = Me.Width
        Fh = Me.Height

        Pm = 20

        Pw = Fw - 3 * Pm
        Ph = Fh - 4 * Pm

        PC_Domain.Height = Ph
        PC_Domain.Width = Pw
        PC_Domain.Top = Pm
        PC_Domain.Left = Pm
        PC_Domain.BackColor = Color.Black

    End Sub


    Private Sub Pc_Domain_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PC_Domain.Paint
        Dim g As Graphics = e.Graphics
       
        Xas = Ph / 2


        Yas = Pw / 2

        q = Math.PI / 180
        r = 68

        x1 = r * Cos(a * q)
        y1 = r * Sin(a * q)
        t = r * Tan(a * q)

        clr1 = Pens.Black
        clr2 = Pens.Black
        clr3 = Pens.White

        g.DrawLine(clr1, 0, Xas, Pw, Xas)
        g.DrawLine(clr1, Yas, 0, Yas, Ph)

        For i = -Pw To Pw Step Pw / 75
            g.DrawLine(clr2, 0, i, Pw, i)
            g.DrawLine(clr2, i, 0, i, Ph)
        Next i

        z1 = 0
        z2 = 0

        For j = -720 To 730 Step 1

         y1 = r * Sin(j * q * 1) / 1 + r * Sin(j * q * 3) / 3 + r * Sin(j * q * 5) / 5 + r * Sin(j * q * 7) / 7 + r * Sin(j * q * 9) / 9
         y2 = r * Sin((j + 1) * q * 1) / 1 + r * Sin((j + 1) * q * 3) / 3 + r * Sin((j + 1) * q * 5) / 5 + r * Sin((j + 1) * q * 7) / 7 + r * Sin((j + 1) * q * 9) / 9
    


            For p = 1 To 5
                z1 = z1 + r * Sin((2 * p - 1) * j * q) / (2 * p - 1)
                z2 = z2 + r * Sin((2 * p - 1) * (j + 1) * q) / (2 * p - 1)

            Next p
            zz1 = Int(z1)
            zz2 = Int(z2)

            g.DrawLine(clr3, Yas + j, Xas - y1, Yas + j + 1, Xas - y2)
            g.DrawLine(clr3, Yas + j, Xas - z1, Yas + j + 1, Xas - zz2)
        Next j

    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        z1 = 0
        Dim g2 As Double
        r = 1
        q = Math.PI / 6
        For p = 1 To 5
            z1 = z1 + (2 * p - 1)
            g2 = Math.PI / 6
            MsgBox(g2)
            My.Computer.FileSystem.WriteAllText("C:\Testje.txt", Convert.ToString(z2) + vbCrLf, True)
        Next p
    End Sub
End Class
 
Double versud integer

Ik denk dat het te maken heeft met double en integer, de draw methode accepteert alleen integers. Als ik z1 en z2 als double demensioneer dan krijg ik een foutmelding, niet z1, z2 integer zijn. Y1 en Y2 heb ik ook als integer gedimd, die geven wel de juist grafiek, maar z1, z2 niet, ik kan de fout niet vinden ...
 
Je moet z1 en z2 op 0 zetten, binnen de loop.

Code:
y2 = r * Sin((j + 1) * q * 1) / 1 + r * Sin((j + 1) * q * 3) / 3 + r * Sin((j + 1) * q * 5) / 5 + r * Sin((j + 1) * q * 7) / 7 + r * Sin((j + 1) * q * 9) / 9

      [COLOR="#FF0000"]  z1 = 0
        z2 = 0[/COLOR]

        For P = 1 To 5
 
OPGELOST DOOR alphamax

Beste alphamax,

Geweldig, het werkt! Had dit al gedaan maar op de verkeerde plek!

four1fin.png
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan