Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Mathematik ?? (https://www.delphipraxis.net/19049-mathematik.html)

GLaforge 28. Mär 2004 11:55


Mathematik ??
 
Hi,
hab da ein Problem :cry: . Muss für die Schule ein Programm schreiben ,welches für eine kubische Gleichung d.h y=ax^3+bx^2+cx+d die Nullstellen ausgibt. Das Problem ist, dass die Normalform für Nullstellenberechnung nur für quadratische Gleichungen gilt. Normalerweise bedient man sich bei kubischen Gleichungen der Polynomdivision, da muss man aber eine Nullstelle erraten um mit dieser dann die Polynomdivision durchzuführen. :wall:
Ein Beispiel:

f(x)=y=x^3+x^2-x-1 / die erratene Nst ist 1

(x^3+x^2-x-1)/(x-1) / hiermit Polynomdivision

Ergebnis: x^2+2x+1 / nun weiter mit Normalform


Problem nun,wie findet das Programm die erste Nst um Polynomdivision durchzuführen (wie Polynomdivision realisieren??). Ab der quadratischen Gleichung ist es ganz easy, aber bis dorthin kommen. Eine Idee von mir war eventuell das Bisektions- bzw. Iterationsverfahren. Hierfür benötige ich jedoch zwei Grenzen indenen die Nullstelle höchstwahrscheinlich liegt.Wie ihr merkt ist hier schon etwas höhere Mathematik am Werke :warn: , also bitte nur Antworten von Leuten die wissen wovon ich spreche( ist nicht bös gemeint aber einfach zu wichtig). Ich benötige keinen kompletten Quelltext, sondern nur eine math.-infor. Hilfe die mir einen Ansatz gibt, wie ich dieses Problem im Programm realisieren kann. Bitte bedenkt,dass ich nur Schüler bin. Behandle Delphi gerad erst im 2 HJ, beschäftige mich aber auch in der Freizeit viel damit.
Schonmal vielen Dank

cu :hi:

Jörn 28. Mär 2004 13:10

Re: Mathematik ??
 
Na für quadratische Gleichungen gibt es die pq-Formel. Und für kubische Gleichungen gibts auch eine solche Formel. Ich weiss nur leider nicht wie die geht. Google ma!

yankee 28. Mär 2004 13:24

Re: Mathematik ??
 
Mein Mathelehrer hat mal sowas geschrieben
Da kann man die Progs download

Wenn es egal ist, dass du die Progs nicht selbst geschrieben hast...

GLaforge 28. Mär 2004 13:31

Re: Mathematik ??
 
danke @yankee, brauch aber schon ein wenig Quelltext. Diese Problemstellung ist nur ein kleiner Punkt in meinem Gesamtprogramm.Trotzdem danke für deine Mühe.

yankee 28. Mär 2004 13:39

Re: Mathematik ??
 
Da ist auch 'ne e-mailAdresse drin. Du lannst den ja mal fragen, ober er dir einen Teil des Quelltextes gibt. Seine Progs sind alle in Delphi.

Seniman 28. Mär 2004 13:40

Re: Mathematik ??
 
Hallo GLaforge,

wie Jörn schon richtig gesagt hat, gibt es auch soetwas wie eine pq-Formel nur eben für Gleichungen dritten Grades. Die Formel ist allerdings ziemlich häßlich, sprich ziemlich lang und unübersichtlich. Wie genau du dein Problem jetzt löst, hängt ganz davon ab, wie genau die Lösung aussehen soll. Wenn du die exakte Lösung haben willst, dann brauchst du unbedingt, diese Lösungsformel (Such mal im Internet). Wenn du nur Näherungswerte brauchst, dann kannst du das ja so, wie du beschrieben hast, annähern (Bisektionsverfahren). Ein Polynom dritten Grades hat ja bekanntlich immer mindestens eine Nullstelle, deswegen sollte das klappen.
Wenn du das so machst, kannst du danach mit gerundeten Werten die Polynomdivision machen, dass ist dann zwar nicht exakt und die Division wird nicht ohne Rest klappen (den mussst du dann unter den Tisch fallen lassen), aber als Näherungslösung sollte es auf jeden Falls ausreichen.

Grüße
Seniman

dummer_info_schüler 28. Mär 2004 13:47

Re: Mathematik ??
 
Also ich würde ´ne Inputbox einbauen und der Anwender muss raten. :-)
In Mathe haben wir aber mal gelernt, dass die Nullstelle bei den kubischen Funktionen häufig ein Teiler des Absolutgliedes, also von <d> ist. Dementsprechend wären deine Grenzen zwischen d und -d.

Muss aber nicht immer ein (ganzzahliger) Teiler sein. Beispiel:
Die Funktion
-4x^3 -2x^2 -6= 0 hat nur eine Lösung und zwar (ungefähr) bei
x= -1,337944335.
Dann wünsch ich dir noch viel Spaß beim NST finden! :-)
(Hoffe, ich habe dir ´n bisschen geholfen)

GLaforge 28. Mär 2004 13:48

Re: Mathematik ??
 
@ Seniman:
Mir würde ja ein gerundeter Wert reichen, muss nur zwei Stellen nach dem Komma korrekt sein. Das Problem nun bei Bisektion sind die Grenzen, die das Programm kennen muss. Wie ermittelt das Prog diese Grenzen ohne das Zutun vom Benutzer? Die kubische Lösungsgleichung hab ich mir gerade zu Gemüte geführt, muss sagen obwohl ich Ma-Leistungskurs belege schon ein wenig undurchsichtig und ein zu großer Programmieraufwand. Also wenn du mir mit den Bisektionsgrenzen behilflich sein könntest wäre ich dir sehr dankbar.

cu

Seniman 28. Mär 2004 20:57

Re: Mathematik ??
 
Hallo GLaforge,

der dumme-info-schüler hat recht:
Du kannst das Polynom in die sog. linearfaktoren zerlegen. Heißt das Polynom z.B. x^3+ax^2+bx+c, und die Nullstellen sind e,f und g (tschuldige mir fallen keine besseren Buchstaben ein), dann gilt:
x^3+ax^2+bx+c=(x-e)(x-f)(x-g) (Vielleicht hast du das schon in der Schule gemacht, sonst frag nochmal nach, warum das so ist).
Jedenfalls, wenn man die rechte seite Ausmultipliziert bekommt man
(x-e)(x-f)(x-g)
=x^3-(e+f+g)x^2+(ef+fg+ge)x-efg
Vergleicht man wieder mit dem Ursprungspolynom ergibt sich: c=-efg, d.h. wenn bei dem gegebenen Polynom der Koeffizient vor dem x^3 eins ist, dann ist das absolute Glied c das Produkt aus den Nullstellen.

Daraus folgt, dass mindestens eine Nullstelle zwischen c und -c liegt (denn nicht alle drei Nullstellen können größer als c sein, denn dann wäre efg auch größer als c)

Als Startinterval würde ich deswegen [-c,c] vorschlagen, bzw [c,-c], wenn c negativ ist.
Es gibt allerdings noch ausnahmen, in denen das oben genannte nicht gilt, nämlich dann, wenn das Polynom nur eine Nullstelle hat. In dem Fall kann ich dir nicht weiterhelfen.

Grüße
Seniman

runger 29. Mär 2004 05:54

Re: Mathematik ??
 
hallo lieber Schüler,

mal ein ganz unmathematischer Ansatz:
Du rechnest den Wert für f(0) aus.
Dann steppst du die x-Achse sowohl positiv als auch negativ entlang.
Meinetwegen in 10er Schritten bis das Ergebnis das Vorzeichen wechselt und schon hast du dein Interval.

So würde ich das ansetzen.
Rainer

MaOfDe 29. Mär 2004 17:38

Re: Mathematik ??
 
Hilfe, wo hattet ihr Mathemathik?!
Es ist supi einfach! Schlagt alle mal das Tafelwerk/Formelsammlung auf; da steht alles drin:

Die magischen Zauberwörter heißen "Newtonsches Verfahren" und "Regula Falsi".
Man brauch nur ein Intervall, in dem man eine Nullstelle sucht und muss dann nur mithilfe einer Schleife sich der Nullstelle nähern.

Beim Newtonschen Verfahren brauch man zusätzlich die erste Ableitung der gegebenen Funktion:
{deine Funktion} f(x)=y=ax^3+bx^2+cx+d
{erste Ableitung} f'(x)=3ax^2+2bx+c

WIr im Profilkurs haben och grad sone Zusatzaufgabe mit Regula Falsi... Alle die schon ein ausreichend großes Wissen im Gebiet Informatik haben und sich im Unterricht zu Tode langweilen, können bei uns sowat machen... Unser Regula-Falsi-Programm ist aba ein Hauch anspruchsvoller als deins: Es soll für alle ganzrationalen Funktionen ein Ergebnis ausspucken ^^. Das macht erst fun

dummer_info_schüler 29. Mär 2004 18:14

Re: Mathematik ??
 
Dabei sollte man aber auch erst einen ungefähren Rahmen haben, weil (wenn du dir das im TW mal genau ansiehst), das die Rechendauer erheblich einschränkt!
Nur mal so aus Interesse, aus welchem Bundesland bist du denn (nur mal so für Rückschlüsse über das Bildungssystem, weil Brandenburg ist da ja wirklich nicht der Hit -> vorletzter bei PISA)

d3g 30. Mär 2004 11:04

Re: Mathematik ??
 
Cardanische Formeln

MaOfDe 4. Apr 2004 11:15

Re: Mathematik ??
 
@dummer_info_schüler: *sichumguck* Meinste mich? Wat heißt hier Rahmen? Das mit dem Intervall hab ick doch erwähnt!!! And what the fuck means "TW"??

GLaforge 12. Apr 2004 19:37

Re: Mathematik ??
 
Hi,

vielen Dank für die rege Rückmeldung :) .Würde aber vielleicht bitten mir einen Quelltextausschnitt zu posten. Jedoch keinen Ansatz nach der Cardano-Formel. Die Nullstelle benötigt lediglich eine Genauigkeit für drei Stellen nach den Komma. Ich bitte auch um leicht verständliche Programmieransätze :!:

cu

GLaforge 18. Apr 2004 14:31

Re: Mathematik ??
 
Ich bitte euch nochmals mir zu helfen, ist wirklich wichtig. Also bitte Quelltext(Ansatz) zum lösen der kubische Gleichung oder mir würde auch ein Ansatz zum lösen der polynomdivision genügen-da ich schon das Problem mit der Bisektion gelöst bekommen habe.

Delphi-Quellcode:
x1:=-100;x2:=100;
             repeat
              x3:=(x1+x2)/2;
              y1:=a*x1*x1*x1+b*x1*x1+c*x1+d;
              y2:=a*x2*x2*x2+b*x2*x2+c*x2+d;
              y3:=a*x3*x3*x3+b*x3*x3+c*x3+d;
               if (y1<0) and (y3>0) and (y2>0) then
                 begin x1:=x1;x2:=x3;
                 end;
               if (y1<0) and (y3<0) and (y2>0) then
                 begin x1:=x3;x2:=x2;
                 end;
               if (y1>0) and (y3>0) and (y2<0) then
                 begin x1:=x2;x2:=x3;
                 end;
               if (y1>0) and (y3<0) and (y2<0) then
                 begin x1:=x3;x2:=x1;
                 end;
             until abs(y3)<0.000000001;
Aus diesem bekomme ich nun eine Nullstellen,hiermit könnt ich dann Polynomdivison durchführen- nur wie?

cu

dummer_info_schüler 18. Apr 2004 16:31

Re: Mathematik ??
 
Wenn du die Polynomdivision (ohne Delphi) mit Variablen machst, also mit

(ax^3+bx^2+cx+d)/(x-y)=... (y ist deine erste NST)

dann erhälst du mit
y= kx^2+lx+m

für
k=a;
l=b+y*a
m=c+b*y+y^2*a

am Beispiel y=3x^3-10x^2+7x-12:

a=3
b=-10
c=7
d=-12
y=3 (deine erste NST)

-> demnach ist deine quadratische Formel dann
y=3x^2-x+4

-> der Quellcode ist jetzt nicht mehr schwer.

GLaforge 18. Apr 2004 17:39

Re: Mathematik ??
 
@dummer_info_schüler
vielen Dank, dass war genau das was ich gesucht habe-jetzt ist es sehr einfach dies in den Quellcode zu übernehmen :coder: . Noch mal recht vielen Dank!
:bounce2: :bounce1: :bouncing4:

:hi:

dummer_info_schüler 18. Apr 2004 18:11

Re: Mathematik ??
 
gern geschehen! :spin:


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz