Forum: PC-Programmierung matlab statt for schleife Doppelpunkt


von Erik (Gast)


Lesenswert?

Wenn ich statt diese Zeile in Matlab zu schreiben, sie in C# schreibe:
Matlab:
1
erwMatrix(i,k:n_erw) = erwMatrix(i,k:n_erw) - factor*erwMatrix(k,k:n_erw);

erhalte ich dann das hier:

C#:
1
for (int j = k; j < n_erw; j++)
2
{
3
   //Change Items in List:
4
   double newValue = matrix.ElementAt(i).ElementAt(j) - faktor * matrix.ElementAt(j).ElementAt(j);
5
   matrix.ElementAt(i).RemoveAt(j);
6
   matrix.ElementAt(i).Insert(j, newValue);
7
}

Habe ich das richtig gemacht=

von Arc N. (arc)


Lesenswert?

Erik schrieb:
> Habe ich das richtig gemacht=

Es sieht so aus als ob es funktionieren könnte, nur wird das u.U. extrem 
langsam, da RemoveAt und Insert O(n)-Operationen und hier überflüssig 
sind:
1
Statt
2
matrix.ElementAt(i).RemoveAt(j);
3
matrix.ElementAt(i).Insert(j, newValue);
4
5
einfach direkt den neuen Wert setzen
6
matrix[i][j] = matrix[i][j] - faktor * matrix[j][j]

von Vlad T. (vlad_tepesch)


Lesenswert?

Erik schrieb:
> Habe ich das richtig gemacht=

warum vergleichst du nicht die ausgaben?

und ich denke: nee

M(y,2:3)
heißt Zeile y, Spalte 2 bis 3

müsste also  j <= n_erw heißen

Was das remove und insert angeht: verstehe nicht, warum man das nicht 
einfach überschreiben kann.

Und was macht deine Matrixklasse bei remove und insert?
hört sich nicht nach einer sehr effizienten Matrix-Implementierung an.

von Arc N. (arc)


Lesenswert?

Vlad Tepesch schrieb:
> Und was macht deine Matrixklasse bei remove und insert?
> hört sich nicht nach einer sehr effizienten Matrix-Implementierung an.

Das dürfte die List<List<double>> aus dem anderen Thread sein, da aus 
irgendeinem Grund normale zweidimensionale oder jagged Arrays nicht 
gehen...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.