AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

1+1=0 definieren?

Ein Thema von Ari · begonnen am 7. Mai 2008 · letzter Beitrag vom 9. Mai 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
grenzgaenger
(Gast)

n/a Beiträge
 
#31

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 17:13
denke, du solltest erst mal gucken, dass deine hilfe wieder geht... hier 'n link

zur apptype console ... guckste hier:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}

uses
  SysUtils;
das :3 in der write anweisung heisst nur, dass die ausgabe 3 zeichen lang sein soll
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#32

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 17:24
Zitat von Ari:
edit2: noch ne Frage: was bedeutet das high(v1)?
das da es sich um ein dynamisches array handelt, ist die anzahl der elememente nicht bekannt. die funktion high(array) ermitelt das höchste element, so dass das array mit einer schleife durchlaufen werden kann.

Zitat von Ari:
kann ich damit auch bestimmte Unbekannte eliminieren?
ja, indem du einer zeile eine andere hinzuaddierst, die so gewählt ist, dass dein zielelement zu null wird...

Delphi-Quellcode:
function AddVektor(const fromVektor, toVektor: tVektor; Skalar: integer): tVektor;
var
  i: integer;
begin
 setlength(result, high(toVektor)+1);
  for i := low(fromVektor) to high(fromVektor) do
   result[i] := fromVektor[i]*Skalar + toVektor[i];
end;

Zitat von Ari:
wie kann ich das jetzt für 730 Unbekannte und 320 Gleichungen machen und dazu noch Modul 2 einbauen?
hier solltest du erst mal schauen, dass du deine 320 gleichungen mmit den 730 unbekannten einlesen kannst. mein vorschlag wäre über ein kleines flatfile . wie liegen denn die gleichungen vor?

Zitat von Ari:
Die generelle Lösung des Problems erhalte ich ja mit SCIP (also Simplex-Verfahren, falls es das ist). Nur wie das Gleichungssystem nach dem Eliminationsverfahren aussieht, brauche ich noch
dieses vorgehen, musst für jede deiner zeilen, deines gleichungssystems wiederholen...

Zitat von Ari:
Da das so viele Gleichungen sind wird wohl ein Memo, Liste oder so notwendig sein, oder?
zum beispiel, oder ausgabe in ein logfile, oder in eine textdatei ...

<HTH>

hier noch 'n beispiel, zum eleminieren des ersten elements der zweiten zeile
Angehängte Dateien
Dateityp: zip beispiel_189.zip (1,7 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#33

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 17:39
Hier noch 'n kleines Beispiel, bei dem statt zwei einzelne Vektoren in einer Matrix M integriert sind.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Spin;

type
  TVektor = array of Integer;
  TMatrix = array of TVektor;
    
type
  TForm1 = class(TForm)
    sV1: TEdit;
    SV2: TEdit;
    EV2: TEdit;
    Ev1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    se: TSpinEdit;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
    m: tMatrix;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}


procedure VOut(v: tVektor; e: tEdit);
var
 i: integer;
begin
 e.Text := '{';
 for i := 0 to high(v) do
 begin
  e.text := e.text + inttostr(v[i]);
  if i < high(v) then
   e.text := e.text + '; ';
 end;
 e.Text := e.text + '}';
end;
function AddVektor(const fromVektor, toVektor: tVektor; Skalar: integer): tVektor;
var
  i: integer;
begin
 setlength(result, high(toVektor)+1);
  for i := low(fromVektor) to high(fromVektor) do
   result[i] := fromVektor[i]*Skalar + toVektor[i];
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
 
 VOut(M[0], EV1);
 VOut(AddVektor(M[0], M[1], se.Value), EV2);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
  //2 Zeilen mit 3 Spalten
  setlength(M, 2, 3);
  
  M[0, 0] := 1; M[1, 0] := 2;
  M[0, 1] := 2; M[1, 1] := -1;
  M[0, 2] := 1; M[1, 2] := 1;

 VOut(M[0], sV1);
 VOut(M[1], sV2);
end;

end.
PS: der Code läuft mit der Form aus dem vorherigen Post


//Edit: anbei noch 'n beispiel mit 'ner 3x3 matrix und ausgabe in ein memo.
Angehängte Dateien
Dateityp: zip beispiel_136.zip (12,7 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#34

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 19:15
Häng mal 'ne lösungsroutine hinten an...

Delphi-Quellcode:
function AddVektor(const fromVektor, toVektor: tVektor; Skalar: double): tVektor;
var
  i: integer;
begin
 setlength(result, high(toVektor)+1);
  for i := low(fromVektor) to high(fromVektor) do
   result[i] := trunc(fromVektor[i]*Skalar) + toVektor[i];
end;
procedure TForm1.autosolveClick(Sender: TObject);
var
 Zeile1,Zeile2: integer;
begin
 for Zeile1 := 0 to high(m)-1 do
 begin
  for Zeile2 := Zeile1+1 to high(m) do
   M[Zeile2] := AddVektor(M[Zeile1],
                          M[Zeile2],
                          M[Zeile2, Zeile1] / M[Zeile1, Zeile1] * -1);
  MatrixOut(m, memo);
 end;
end;
vorausgesetzt wird hierbei, dass die zeile 0 keinen "0" wert aufweist, da ansonsten eine exeption ausgelöst würde. beispiel im anhang.
Angehängte Dateien
Dateityp: zip beispiel_200.zip (12,2 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#35

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 20:28
Zunächst vielen vielen Dank für die Mühe, grenzgaenger!

Wo binde ich denn program Project1; ein? Vor der unit funktioniert auch nicht..

Also zu dem geposteten zweiten Beispiel erst. Ausgabe in eine Textdatei wäre glaub ich super! Tut mir leid, wenn ich nochmal nachfrage - aber wofür stehen die Vektoren genau? Ist das sowas wie
A * x = b und alles drei sind dann Vektoren? A die Koeffizienten, x die Unbekannten und b das Ergebnis der Gleichungen?
Also mit diesen zwei Vektoren ist V1 dann der Koeffizientenvektor und V2..? Sorry, versteh das Ganze grad nicht so..

Also die Gleichungen ergeben sich aus Schleifen, so wie
Delphi-Quellcode:
set Z := { 1 to 9 };
set A := Z*Z;
var x[A*Z] binary;
subto jedesFeldEineZahl: forall <i,j> in A do
   sum <k> in Z do x[i,j,k] == 1;
subto quadrate1: forall <k> in Z do
   sum <i,j> in {1,2,3}*{1,2,3} do x[i,j,k] == 1;
...
Direkt auf Delphi übertragen kann man das fürchte ich aber nicht, oder? Demnach sind das dann auch sehr viele Gleichungen..
Was ist denn ein flatfile?

Bei dem 3. Beispiel erhalte ich wieder Fehler..sEdit kennt mein Delphi nicht, sowas wie "Class TsSpinEdit" findet er auch nicht

Zitat:
//2 Zeilen mit 3 Spalten
setlength(M, 2, 3);

M[0, 0] := 1; M[1, 0] := 2;
M[0, 1] := 2; M[1, 1] := -1;
M[0, 2] := 1; M[1, 2] := 1;
Das bedeutet, dass die Zeilen die Unbekannten und die Spalten die Gleichungen sind?

Bei beispiel 4 leider ein Error,Property Memo.ExplicitWidth does not exist? Also die beiden Scrollfelder unter Zeile 1 und Zeile 2 fehlen bei mir
Ariane
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#36

Re: 1+1=0 definieren?

  Alt 8. Mai 2008, 22:20
Zitat von Ari:
Wo binde ich denn program Project1; ein? Vor der unit funktioniert auch nicht..
das programm statement, ersetzt das unit statement. du musst es stattdessen einfügen.

Zitat von Ari:
Bei dem 3. Beispiel erhalte ich wieder Fehler..sEdit kennt mein Delphi nicht, sowas wie "Class TsSpinEdit" findet er auch nicht

Zitat:
//2 Zeilen mit 3 Spalten
setlength(M, 2, 3);

M[0, 0] := 1; M[1, 0] := 2;
M[0, 1] := 2; M[1, 1] := -1;
M[0, 2] := 1; M[1, 2] := 1;
Das bedeutet, dass die Zeilen die Unbekannten und die Spalten die Gleichungen sind?

Bei beispiel 4 leider ein Error,Property Memo.ExplicitWidth does not exist? Also die beiden Scrollfelder unter Zeile 1 und Zeile 2 fehlen bei mir
die TSSpinedits, hatte ich vergessen auszutauschen... einfch gegen das TSpinEdit tauschen oder stattdessen 'n TEDIT einfügen. anbei 'ne aktualisierte version. im notfall wie gesagt, die komponente austauschen und die units rausschmeissen.

im obigen codeabschnitt ist die initialisierung ... da dies eine matrix ist (mit 2 coordinaten) müssen beide versorgt werden... die erste ziffer M[Zeile, Spalte] wird mit einem entsprechenden wert versorgt. Diese initialiserung müsste bei dir wohl via flatfile erfolgen . flatfile = einfache textdatei ohne formatierungsinformationen.

Zitat von Ari:
Also zu dem geposteten zweiten Beispiel erst. Ausgabe in eine Textdatei wäre glaub ich super! Tut mir leid, wenn ich nochmal nachfrage - aber wofür stehen die Vektoren genau?
ein Vektor bildet eine zeile oder eine spalte der matrix ab. in matrix notation werden die vektoren und die matrixen zumeist mit einem grossbuchstaben abgekürzt.

im übigen codesegment hast du eine matrix im folgenden aufbau

1; 2; 1
2; -1; 1

diese kann man entweder als zwei zeilenvektoren oder drei spaltenvektoren angeben. Über die spalten-/zeilennummer werden diese dann innerhalb einer matrix addressiert.


Zitat von Ari:
Also zu dem geposteten zweiten Beispiel erst. Ausgabe in eine Textdatei wäre glaub ich super! Tut mir leid, wenn ich nochmal nachfrage - aber wofür stehen die Vektoren genau? Ist das sowas wie A * x = b und alles drei sind dann Vektoren? A die Koeffizienten, x die Unbekannten und b das Ergebnis der Gleichungen?
ja, das ist genau das. im neuesten beispiel, wirst du eine 3x4 matrix sehen. da ist der letzte spaltenvektor b

[quote="Ari"]Also die Gleichungen ergeben sich aus Schleifen, so wie
Delphi-Quellcode:
set Z := { 1 to 9 };
set A := Z*Z;
var x[A*Z] binary;
subto jedesFeldEineZahl: forall <i,j> in A do
   sum <k> in Z do x[i,j,k] == 1;
subto quadrate1: forall <k> in Z do
   sum <i,j> in {1,2,3}*{1,2,3} do x[i,j,k] == 1;
...
Direkt auf Delphi übertragen kann man das fürchte ich aber nicht, oder? Demnach sind das dann auch sehr viele Gleichungen../quote]

warum sollte das nicht gehen? nur müsste man wissen was hier alles gemeint ist... mir sagen die kontrollkonstrukte nix... aber den algo. kannst sicher in pascal abbilden. der vater hat zwar vergessen matrix operationen mit zu integrieren (wie in fortran) aber die kann man sich ja leicht selber bauen ... . beispiele im code und in der libary, wo ich früher schon dran hängte.

noch einen schönen abend und noch viel erfolg.

GG
Angehängte Dateien
Dateityp: zip beispiel_143.zip (12,1 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
Ari

Registriert seit: 7. Jan 2007
Ort: Wilhelmshaven
37 Beiträge
 
#37

Re: 1+1=0 definieren?

  Alt 9. Mai 2008, 01:54
Super, für ein kleines Beispiel mit 8 Unbekannten funktioniert das schonmal Tausend Dank!!
Ariane
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#38

Re: 1+1=0 definieren?

  Alt 9. Mai 2008, 10:23
Zitat von Ari:
Super, für ein kleines Beispiel mit 8 Unbekannten funktioniert das schonmal Tausend Dank!!
die lösung ist auf eine AxB matrix ausgelegt (keine beschränkung). in der aktuellen impl. ist noch b mit aufgenommen. musst aber selber schaun, dass das LGS lösbar ist ...

wie gesagt, musst erst mal schaun wie du die daten reinbekommst...

noch viel erfolg.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz