Zum Inhalt springen

Pseudocode Für Bairstow-Verfahren In C++ Umschreiben


Empfohlene Beiträge

Geschrieben

weisst denn einer wie ich diese Pseudocode programm mit c++ besser gesagt in microsoft visual studio programieren kann, welche die nullstelle einer polynom mit Bairstow-Verfahren erechnet?

j=n
b0 = f(n)
b1 = 0
q0 = 0
q1 = 0

For j = n - 1 To 0 Step -1
b2 = b1
b1 = b0
b0 = f(j) - a1 * b1 - a0 * b2

q2 = q1
q1 = q0
q0 = b2 - a1 * q1 - a0 * q2
Next j

M = -a0 * q1 - a1 * q0
D = q0 * q0 - M * q1
da1 = (b0 * q1 - b1 * q0) / D
da0 = (b1 * M - b0 * q0) / D

a1 = a1 - da1
a0 = a0 - da0[/PHP]

danke vorraus

Geschrieben

Wurde dir nicht schon in deinem ersten Thread gesagt, dass das Abladen von Aufgabenstellungen ohne erkennbare Eigeninitiative wenig Aussicht auf Erfolg hat?

Wo genau liegt denn das Problem? Wenn du hinter jede Zuweisung ein Semikolon packst, bist du doch fast fertig. Das einzig "schwierige" daran ist doch die Schleife.

Geschrieben
Wurde dir nicht schon in deinem ersten Thread gesagt, dass das Abladen von Aufgabenstellungen ohne erkennbare Eigeninitiative wenig Aussicht auf Erfolg hat?

Wo genau liegt denn das Problem? Wenn du hinter jede Zuweisung ein Semikolon packst, bist du doch fast fertig. Das einzig "schwierige" daran ist doch die Schleife.

also erstmal danke für die antwort, aber mit der programierung habe gar kein erfahrung sonst hätte ich auch die frage nicht gestellt bzw. um die hilfe nicht gebeten.

Geschrieben
aber mit der programierung habe gar kein erfahrung
Dann ist diese Aufgabe nichts für dich.

Der Sinn dieses Forums ist nicht, anderen die Lösung für Aufgaben vorzusagen, die sie selbst nicht lösen können. Sinn solcher Aufgaben ist nämlich meistens, dass du lernst, wie man solche Probleme löst, wie man also genau diese Erfahrung bekommt, die dir fehlt. Darum bringt es nichts, wenn man fertige Lösungen hinklatscht.

Bei konkreten Fragen wird hier immer gern geholfen. Es sollte nur erkennbar sein, dass du etwas lernen willst, und nicht nur auf einfachem Wege an eine Komplettlösung kommen willst.

Geschrieben
Es sollte nur erkennbar sein, dass du etwas lernen willst, und nicht nur auf einfachem Wege an eine Komplettlösung kommen willst.

natürlich will ich lernen will ok,

j=n;
b0 = f(n);
b1 = 0;
q0 = 0;
q1 = 0;

For j = n - 1 To 0 Step -1
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
Next j;

M = -a0 * q1 - a1 * q0;
D = q0 * q0 - M * q1;
da1 = (b0 * q1 - b1 * q0) / D;
da0 = (b1 * M - b0 * q0) / D;

a1 = a1 - da1;
a0 = a0 - da0;
[/PHP]

hab über all simikolen geschrieben, bei c sollte auch typ von variablen festgelegt werden, da es sich um komplexe nullstellen handel muss typ float sein oder double. also die variablen müssen definiert werden etwa so

[PHP]
int j=n; // hier muss int sein, weil n nehme ich an das es für anzahl der koeffizienten ist
float b0 = f(n); // definition von variablen für Integrationen
float b1 = 0;
float q0 = 0;
float q1 = 0;
float M, D,da1,da2; // Diese Variable sollen auch vor erst definiert werden

For j = n - 1 To 0 Step -1
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
Next j;

M = -a0 * q1 - a1 * q0;
D = q0 * q0 - M * q1;
da1 = (b0 * q1 - b1 * q0) / D;
da0 = (b1 * M - b0 * q0) / D;

//Ab hier soll es ausgabe sein und mit c sieht so aus
cout << a1 = a1 - da1;
cout << a0 = a0 - da0;

wie würde mit schleife gehen, eventuell so was


for(j = n - 1;j=0;i--)
{
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
return j;
[/PHP]

für fehler bzw. hilfreiche ansätze wäre ich froh.

Geschrieben

for(j = n - 1;j=0;i--)
{
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
return j;
[/PHP]

Der Schleifenkopf sollte so aussehen:

for( j=n-1; j>=0; --i )

Die return-Anweisung ist hier falsch, die muss weg. Ein explizites Next brauchst du in C++ nicht, das geschieht automatisch durch den Scope der Schleife.

Außerdem muss der gesamte Code noch in eine Funktion gepackt werden - wenn das Programm sonst nichts tun soll, bietet sich main an.

Und eine Funktion f brauchst du natürlich auch noch.

Geschrieben

ok habs so versucht, aber irgend wie klappt noch nicht

#include <iostream>
using namespace std;

int main()
{

int n;
int j=n;
int i;
char f;
float b0 = f(n);
float b1 = 0;
float q0 = 0;
float q1 = 0;
float a0,a1,b2,q2,da0;
float M, D,da1,da2;

for( j=n-1; j>=0; --i )
{
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
}

M = -a0 * q1 - a1 * q0;
D = q0 * q0 - M * q1;
da1 = (b0 * q1 - b1 * q0) / D;
da0 = (b1 * M - b0 * q0) / D;


a1 = a1 - da1;
a0 = a0 - da0;

}[/PHP]

Geschrieben
irgend wie klappt noch nicht

...ist keine ausreichende Fehlerbeschreibung.

Ich sagte, du brauchst eine Funktion f. Irgendwie muss dein Programm doch auch wissen, zu welcher Funktion es die Nullstellen ermitteln soll, oder?

Außerdem musst du n (die Iterationstiefe) mit irgendeinem Wert vorbelegen.

Geschrieben

#include <iostream>
using namespace std;

int main()
{
// Variablen Definition bzw. Intialisierung
int n=100;
int j=n;
int i;
char f;//=x^3-13*x^2+65*x-125;
float b0 = f(n);
float b1 = 0;
float q0 = 0;
float q1 = 0;
float a0,a1,b2,q2,da0;
float M, D,da1,da2;

for( j=n-1; j>=0; --i )
{
b2 = b1;
b1 = b0;
b0 = f(j) - a1 * b1 - a0 * b2;

q2 = q1;
q1 = q0;
q0 = b2 - a1 * q1 - a0 * q2;
}

M = -a0 * q1 - a1 * q0;
D = q0 * q0 - M * q1;
da1 = (b0 * q1 - b1 * q0) / D;
da0 = (b1 * M - b0 * q0) / D;


a1 = a1 - da1;
a0 = a0 - da0;

cout << a1 <<"\t\t" << a0;

}[/PHP]

wie übergebe ich den funktion direkt an variable f, als quasi als vordefinierter funktion ohne eingabe aufforderun.

mit der fehler dass ich meinte war, das programm wie es bis jetzt aussieht nicht macht.

Edit: f habe ich char defienirt, weil die funktion ja auch zeichen beinhaltet, ist denn so richtig?

Geschrieben
Edit: f habe ich char defienirt, weil die funktion ja auch zeichen beinhaltet, ist denn so richtig?
Nein, das ist Unsinn. Mit Texten kannst du nicht rechnen. Und versuch erst gar nicht, den Benutzer die Funktion eingeben zu lassen. Dazu brauchst du einen Parser, und davon bist du sehr, sehr weit entfernt.

Deine Funktion f muss in etwa so aussehen:

float f(float x)
{
return x*x*x-13*x*x+65*x-125;
}[/code]

Die Funktion muss vor der main-Funktion stehen.

^ ist in C und C++ kein Potenzoperator, sondern steht für bitweise-exklusiv-oder.

a1 und a0 musst du übrigens auch initialisieren, ich vermute, mit den Koeffizienten des Polynoms. Ich glaube außerdem, dass das nur ein Teil des Algorithmus ist.

Ehrlich gesagt, dir fehlen die elementarsten Grundlagen, um diese Aufgabe zu lösen. Du solltest dir für den Anfang eine einfachere Aufgabe suchen.

Man könnte dir jetzt in vielen einzelnen Schritten erklären, was du tun musst, aber das wäre in etwa so, als wollte man jemandem, der nicht weiß, an welchem Ende man einen Hammer anfasst, oder was ein Ziegelstein ist, erklären, wie man ein Haus baut.

Geschrieben
a1 und a0 sind variablen für nullstellen ausgabe, also für reele und komplexe nullstellen ausgabe

a1 und a0 sind nicht die Nullstellen:

Das Programmbeispiel in Pseudocode beschreibt einen einzelnen Iterationsschritt, bei dem die Koeffizienten a0 und a1 des quadratischen Polynoms durch zwei Korrekturen da0 und da1 verbessert werden

ob ein teil der algorithmus fehl mag sein

Auch das steht da:

Das Programmbeispiel in Pseudocode beschreibt einen einzelnen Iterationsschritt, bei dem die Koeffizienten a0 und a1 des quadratischen Polynoms durch zwei Korrekturen da0 und da1 verbessert werden

Auf jeden Fall musst du in deinem Code a1 und a0 initialisieren, sonst kann das nicht funktionieren.

Geschrieben

also er kommt immer der fehler dass der Ausdruck ergibt kein funktion, die argumente übernimmt.

und zwar bei zeile der zeilen


.
.
.
float b0 = f(n);
.
.
.
b0 = f(j) - a1 * b1 - a0 * b2;
[/PHP]

hast du eventuell vorschlag wie es lösen kann.

Geschrieben

Ich habe mich bezüglich der Bedeutung von f und n geirrt:

Das Feld (Array) f() enthält das Polynom, wobei in f(n) der Koeffizient von xn steht.

Du brauchst also keine Funktion f, sondern ein Array:

float f[] = { -125.0f, 65.0f, -13.0f, 1.0f };

Und statt der runden Klammern benutzt du einfach eckige.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...