Hallo Th69,
vielen Dank für die Lösung.
Ich habe den Code Root-Methode (Zeile 88) noch ein wenig erweitert.
Die Abfrage y = gerade oder ungerade habe ich noch eingefügt, da sonst gerade Wurzeln aus negativen Zahlen berechnet wurden.
MfG VolkPt
static double Root(double x, double y)
{
if ((x < 0) & (y % 2 != 0))
return -Math.Pow(-x, (double) 1 / y);
else
return Math.Pow(x, (double) 1 / y);
}
Hallo Th69,
vielen Dank für die schnelle Antwort.
Alles richtig, was du schreibst.
Aber ich suche für mein Mathe-Graph eine Lösung für den Sonderfall „ungerade Wurzel aus negativer Zahl“
f(x) = x^(1/3) für X = -10 ... X = +10 Beispiel: i x = -8 f(x) = -8^(1/3) = -2
Da jeder Taschenrechner heute diese Aufgabe lösen kann,
hoffte ich, dass ein Math Parser solche Funktionen auch erkennt.
(siehe: GeoGebra Grafikrechner)
Die Idee für mein Mathe-Graph entspringt deinem Graph-Programm (Graph.zip).
Da ich keine Programmiererfahrung habe, ist mein C#-Programm eine Sammlung aus Fachbüchern, deinem Graph.zip-Programm und aus verschiedenen Internet-Beispielen.
Da dieser Code zum Teil im Netz veröffentlicht wurde, hoffe ich kein Copyright verletzt zu haben.
Code für Kurve berechnen und zeichnen:
void CanvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
SKSurface surface = e.Surface;
SKCanvas canvas = surface.Canvas;
if (z >= 1)
{
eingabe.Text = " ";
canvas.Clear();
canvas.DrawColor(SKColors.Transparent);
}
int width = e.Info.Width;
int height = e.Info.Height;
try
{
sFct = eingabe.Text;
string sOptFct = eval.ToString();
eval.Parse(fp, sFct);
}
catch (Exception)
{
return;
}
x0 = (int)(Xmin * width / (Xmin - Xmax));
y0 = height - (int)(Ymin * height / (Ymin - Ymax));
xx = (Xmax - Xmin) / width / tb;
x1 = (float)x0;
y1 = (float)y0;
SKPoint p = new SKPoint(x1, y1);
canvas.DrawPoint(p, FillPaint3);
for (x = Xmax; x >= Xmin; x -= xx)
{
if (eingabe.Text == " ")
{ Loeschen_Clicked(sender, e); }
try
{
y = eval.Evaluate(x);
if (!Double.IsNaN(y)) { y = (float)y; }
}
catch (Exception)
{
DisplayAlert("Achtung!", "Eingabefehler", "OK");
return;
}
{
if (y > 0.0 | y < 0.0)
{
x1 = x0 + (int)(x * width / (Xmax - Xmin));
y1 = y0 - (int)(y * height / (Ymax - Ymin));
}
SKPoint p1 = new SKPoint(x1, y1);
canvas.DrawPoint(p1, FillPaint3);
}
canvas.Save();
}
}
Hallo Th69,
ich bin kein Programmierer, nur ein Großvater (82), der für seine Enkel einen einfachen Math Graph in C# geschrieben hat.
Läuft auch alles sehr gut.
Nur bei Eingabe der Funktion f(x) = x^(1/3) oder f(x) = x#3 berechnet er nur die positiven
x-Werte und zeichnet auch nur die Kurve für die positiven x-Werte.
Kann an dem Math Parser noch etwas geändert werden oder lieg das Problem bei C# und dem
Pow-Befehl?
MfG Volker