Sinusfunktion mit Laufvariable

teser

Grünschnabel
Hallo,

ich habe ein Problem mit einer Sinusfunktion: f(x)=a1*sin(b1*x) + a2*sin(b2*x)

a1, b1, a2 und b2 sind variabel vom benutzer einzugeben. jetzt kann der benutzer noch die laufvariable x eingeben. z.b. Xmin (txtXmin.Text) = -5 ; Xmax (txtXmax.Text) = 5, als auch die schrittweite (txtSchrittweite.Text) z.b. 0,5; 1; 2; 2,2, ...

das ganze soll in ein array geschrieben werden.

folgendes habe ich mal probiert, aber es will einfach nicht wirklich funktionieren:

Dim f() As Double
Dim x As Double

m = (txtXmax.Text - txtXmin.Text) / txtSchrittweite.Text

ReDim f(m)

For n = txtXmin.Text To txtXmax.Text Step txtSchrittweite.Text
f(n) = txtA1.Text * Sin(txtB1.Text * x) + txtA0.Text * Sin(txtB0.Text * x)
x = x + txtSchrittweite.Text
Next

lstWertetabelle.Clear

For n = 0 To m
lstWertetabelle.AddItem f(n)
Next


Wäre echt toll wenn mir jemand helfen könnte.
Vielen Dank
Teser
 
Was funktioniert denn genau nicht ?
Ich würd nicht direkt die Texte aus den Eingabefelder verwenden, dabei wird dann jedesmal implizit ein Konvertierung vorgenommen.

Code:
  Dim Min As Double
  Dim Max As Double
  Dim Schritt As Double

  Min = CDbl( txtXmin.Text)
  Max = CDbl(txtXmax.Text)
  Schritt = CDbl(txtSchrittweite.Text)

  For n=Min To Max Step Schritt
 ...
next n

Möglicherweise kann die For Schleife auch nur ganzzahlig zählen lassen.
Also solltest du die Schleife in eine While oder Do While umbauen und dort selbst hochzählen.
 
leider hat es so auch nicht funktioniert. habe auch die schleife umgebaut, jetzt dimensioniert er das array auch entsprechend bei schrittweite < 1. jedoch zeigt er mir jetzt leider nur entsprechend oft die "0" als ergebnis an.
also scheint er das X nicht von Min nach Max laufen zu lassen.

Code:
Dim f() As Double

Dim n As Double
Dim x As Double
Dim m As Double

Dim min As Double
Dim max As Double
Dim schritt As Double

min = CDbl(txtXmin.Text)
max = CDbl(txtXmax.Text)
schritt = CDbl(txtSchrittweite.Text)

m = (txtXmax.Text - txtXmin.Text) / txtSchrittweite.Text

x = txtXmin.Text

ReDim f(m)

Do While min >= max
    f(n) = txtA1.Text * Sin(txtB1.Text * x) + txtA0.Text * Sin(txtB0.Text * x)
    x = x + schritt
    min = min + schritt
Loop

lstWertetabelle.Clear

For n = 0 To m
    lstWertetabelle.AddItem f(n)
Next
 
Also es reicht wenn du das x hochzählst.
Deine anderen Eingabefelder solltest du auch nach Double konvertieren und damit rechnen.

Grundsätzlich würde ich dir aber raten den Debugger zu benutzen, dann weisst du bei jeder Iteration, was dort rauskommt und wann nicht das erwartete Ergebnis rauskommt. :)

Code:
Dim A0 As Double 
Dim A1 As Double
Dim B0 As Double
Dim B1 As Double
..

A0 =CDbl(txtA0.Text)
..
B1 = cDbl(txtB1.Text)

x = CDbl(txtXmin.Text)

ReDim f( m-1) ' Array geht von 0 bis m-1 , damit der Count = m

Do While x >= max
    f(n) = A1 * Sin(B1 * x) + A0 * Sin(B0 * x)
    x = x + schritt
Loop
 
Zuletzt bearbeitet:
Zurück