Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1608to1612
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

INDEX u.Kronecker-Produkt (3/4-Tensor - 3.Forts.)

INDEX u.Kronecker-Produkt (3/4-Tensor - 3.Forts.)
25.02.2018 23:59:54
Luc:-?
Hallo, Formelspezialisten;
hiermit liefere ich nach den ersten 3(4) Teilen mit Anwendungen eines 3Tensors (Qbus-Typ Tribus) für Tabellenobfuskation (in Gestalt eines Julklapp- bzw Weihnachtspäckchens) und eines 4Tensors (Qbus-Typ Quadus) als Zitate-Silbenrätsel¹ noch eine übli­chere praktische Anwendungs­möglichkeit nach. In Technik, bestimmten Natur­wissen­schaften, zB Chemie, Physik, Astronomie, und auch in der Infor­matik kommt dem Kronecker-Tensor-Pro­dukt eine große (und wach­sende) Bedeu­tung zu, um viele Aus­prä­gun­gen zahl­reicher Eigenschaften eines Objekts in Kombination über­sicht­lich² bzw komprimiert dar­stellen zu können.
Hierbei handelt es sich um die Multiplikation 2er Matrizen, wobei jedes Element der ersten mit der ganzen 2. Matrix multipliziert² wird. Eine solche Operation würde einen 4dimensionalen Tensor als Ergebnis erzeugen, der natür­lich nicht auf einen 2dimen­sio­na­len Zellbereich abge­bildet wdn könnte, weshalb man sich in der Mathematik mit in einer (größeren) Matrix posi­tio­nier­ten Matri­zen behilft, um alle Ergebnisse les­bar zeigen zu können. Das bereitet natürlich in einem einfachen Kalkulationspgm diverse Probleme, falls es dafür keine spezielle Fkt gibt (zB anderswo Kron) wie bspw für das Skalar- und das Matrizenprodukt, die beide aber auch noch Summationen beinhalten.
Abb 1: Userbild
Die Abbildung zeigt einen 3Tensor, dessen Struktur als hintereinanderliegende Matrizen aufgefasst wdn kann, und die räumliche Projektion (auf 3 Dimen­sionen) eines 4Tensors mit ebenfalls 2×2 primären Elementen (insgesamt ×4=16), wobei die 4 Sekundärmatrizen geo­me­trisch hinter- und inein­ander­liegend vorgestellt wdn müssen.
Trotzdem kann man in Xl³ nicht nur relativ fml-aufwendig eine 2dimensionale Darstellung aller Einzelprodukte erreichen (1.1 in Abb 3), sondern mit einem wohl kaum bekannten INDEX-Trick⁴ auch die positions­abhängige Berechnung der Teilmatrizen, wobei dann allerdings nur deren erste Werte (links oben) angezeigt wdn können (1.2 in Abb 3).
Abb 2: Userbild
Diese Abbildung macht den Grund für die Nicht-Darstellbarkeit solcher Tensoren deutlich → hier wird eine ganze Matrix einem Ele­ment einer über­ge­ord­neten Matrix zugewiesen. Xl hat nicht die Mittel, so etwas als Gesamt­matrix (2Tensor) abzubilden. Auch eine Matrix­kon­stante hat diese nicht, denn hierfür wäre ein weiteres Trenn­symbol (neben Spalten- und Zeilen­trenner) erfor­derlich. Mit einer geeigneten UDF (hier VJoin, unpublizierte Version 1.5) kann man dieses Problem aber umgehen, wie 2.0 in der folgenden Abbildung zeigt.
Abb 3: Userbild
Die verschiedenen Zellfarben folgen hier der Rechenmethode, wobei ganze so dargestellte Zellbereiche mit gestrichelten Linien in Einzel­zellen unter­teilt wurden, falls sie in den Ergebnismatrizen auch einzeln berechnet wdn. Wer die Berechnung von 2.0 nach­voll­ziehen will und nicht über die erforderliche Version 1.5 der UDF VJoin verfügt, kann auch die Version 1.4 benutzen und auf Grund­lage ihres Ergebnisses weiter­rechnen oder folgende Fml benutzen:
{="{"&WECHSELN(WECHSELN(VJoin(INDEX(INDEX(W2:X3;ZEILE(A1:A2);SPALTE(A1:B1))*INDEX(Z2:AA3;;;1^Z2:AA3);;;1^Z2:AA3);;-2);" ";";";2);" ";",")&"}"}
Diese UDF-Version ist ebenso wie TxEval im Archiv enthalten. Die UDF FlexArr nicht, aber die zeigt hier auch nur einen Nebeneffekt ihres eigent­lichen Zwecks → Expansion einer pluralen Matrix­formel von 2 markierten Zellen auf die angegebene Größe (in Markierungs­rich­tung und mit Zell­formaten inkl Rahmensetzungslogik).

__________
¹ Z.Z. noch unter diesem Link (ca 5 Tage) beantwortbar.
² Für eine rein 2dimensionale Vergrößerung einer Matrix wird dabei eine gleich­große Einheits­matrix verwendet.
³ In LO/OOcalc fktioniert die in Abb 3 benutzte Fml nicht auf gleiche Weise wie in Xl und liefert des­halb andere (ihrer) Ergeb­nis­werte, wobei unklar bleibt, ob das nur an der posi­tions­gesteu­erten Rück­gabe oder bereits an der Berech­nung liegt.
⁴ Ein anderer, aber vglbarer Trick wird auch verwendet, um die Einbeziehung aller Ausgangswerte und die Rück­gabe des richtigen Ergeb­nisses dualer Matrix­formeln auf INDEX-Basis zu ermög­lichen.

Bei Interesse sachdienliche Kommentare erbeten! Gruß, Luc :-?
PS: Eine kopierbare HTML-Darstellung der Abb 3 wird auf online-excel.de und ein Link hierher auch auf office-loesung.de erscheinen.
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Anmerkung zu Ol-Xl
26.02.2018 12:08:20
Luc:-?
Mein Beitrag mit Hinweis hierher wurde auf Online-Excel sofort wieder entfernt. Offensichtlich sind dort bestimmte Leute nicht an einer Wissenserweiterung interessiert, obwohl das Forum ohnehin nur noch auf Sparflamme läuft…
Bei Interesse würde ich die HTML-Version von Abb 3 dann hier einstellen.
Luc :-?
Archivkorrektur und Anmerkung
01.03.2018 15:07:37
Luc:-?
Die weiter unten stehende HTML-Tabelle (Abb3) ist hier auf Chrome optimiert und wird in Firefox und Internet-Explorer nicht genauso angezeigt, sondern schmaler und damit mit ungewollten Zeilenumbrüchen in Titelzeilen.
Luc :-?
Nur Archivkorrektur
01.03.2018 15:08:54
Luc:-?
Luc :-?
Nachtrag: Abb3 als HTML-Tabelle u.w.
01.03.2018 03:53:12
Luc:-?
Falls jemand die Fmln nachvollziehen möchte, ohne sie abschreiben zu müssen, hier nun noch die Abb3 als HTML-Tabelle mit einer kleinen Korrektur in Zelle AD19, in der die Anzahl der unterschiedlichen Fktt der Fml angegeben ist, wobei in [] die AnzahlTotale steht, die hier natürlich nicht =0 sein kann, sondern ≥ der 1.Zahl sein muss. Die Differenz resultiert dann aus den Wiederholungen bestimmter Fktt.
Die Tabelle kann auch ohne ihre Ränder kopiert wdn, sollte dann aber auf den durch sie bestimmten Zell­Bereich übertragen wdn, damit die dargestellten Fmln nicht angepasst wdn müssen (anschließend kann ja verschoben wdn). Verlaufsfarben (in 2 Zellen) wdn dabei von Xl nicht adäquat umgesetzt, da dafür in HTML mangels einheitlicher Norm redundante Angaben erforderlich sind, die Xl14/2010 nicht richtig inter­pretieren kann.
 WXYZAAABACAD
1
Kronecker-Tensor- Produkt   —   Berechnung mit Hilfe der Xl-Funktion INDEX562Tensor422TensorFormelnFunktionen78M₁31M₂Länge/MaxTiefegesamt/dar UDFSimulationsfml:{=FlexArr(FlexArr(FlexArr("#";"2.");"4.";;1)*FlexArr(FlexArr("#1";"2.");"4.");"4.")}82/31[5]/11.1 Abbildung des Ziel-Tensors auf eine rechteckige (größere) Matrix1.2 4Tensor im/aus Xl-Berechnungsraum20102412M₁M₂(so ist nur die 1.Subebene darstellbar)155186 2024 Formel ergibt nur 28143216©LSr2832 in Xl diese Werte! 217248 125/45[10]/0W6[:Z9]:=INDEX(INDEX($W$2:$X$3;GANZZAHL(ZEILE(A2)/2);GANZZAHL(SPALTE(B1)/2))*$Z$2:$AA$3;REST(ZEILE(A1)-1;2)+1;REST(SPALTE(A1)-1;2)+1)2.0 Ermittlung u. Abb aller (Sub-)Ebenen des Ziel-Tensors (sekundär m.Matrixkonstanten*)* US-Form wg Auswerten m.TxEval{20,10;15,5}{24,12;18,6} AB7[:AC8]: {=INDEX(INDEX($W$2:$X$3;ZEILE(A1:B2);SPALTE(A1:B2))*INDEX(Z2:AA3;;;1^Z2:AA3);0;0)}{28,14;21,7}{32,16;24,8} Äußeres INDEX dient nur der Kontrolle per Fml-Assi u. ist hier irrelevant.80/33[5]/0W12:X13: {=VJoin(INDEX(INDEX(W2:X3;ZEILE(A1:A2);SPALTE(A1:B1))*INDEX(Z2:AA3;;;1^Z2:AA3);;;1^Z2:AA3);",;";2)} ** VJoin, Version 1.597/44[6]/12.1 Abbildung des Ziel-Tensors auf eine rechteckige Matrix (aus 2.0)2.2 Sekundärmatrizenübernahme (aus 2.0)20102412M₁M₂(so ist nur die 1.Subebene sichtbar)155186 2024Quadus aus Daten-28143216 2832übernahme m.Fml217248AB17[:AC18]:=TxEval(W12)12/11[1]/1W16:X17[;Y16:Z17;W18:X19;Y18:Z19]: {=TxEval(INDEX($W$12:$X$13;GANZZAHL(ZEILE(B2)/2);GANZZAHL(SPALTE(B2)/2)))}72/45[6]/11.2 und 2.2 zeigen, dass in einem 4dimensionalen Tensorprodukt aus 2 Matrizen alle Ergebnismatrizen geometrisch hinter- und ineinander liegen, aber im virtu-ellen Xl-Rechenraum natürlich voneinander getrennt sind. Dass dabei alle Werte des Tensorprodukts normal berechnet werden, zeigt letztlich gerade 2.0 - qed!
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Inzwischen liegt auf Office-Loesung von snb sowohl eine klassische UDF- als auch eine plurale MatrixFml-Lösung (für die gesamte größere Matrix) vor. Letztere (für 1.1) lautet übersetzt so:
{=INDEX($A$1:$B$2;GANZZAHL((ZEILE(1:4)-1)/2)+1;GANZZAHL((SPALTE(1:4)-1)/2)+1)*INDEX($D$1:$E$2;REST(ZEILE(1:4)-1;2)+1;REST(SPALTE(1:4)-1;2)+1)}
Natürlich ist die geometrische Darstellung eines 4Tensors nur an eine bekannte geometrische Pro­jek­tion eines 4dimensionalen Würfels in den 3dimensionalen Raum angelehnt*. Ein 3dimensionaler Würfel kann ja bekanntlich auch als Abbildung seiner sechs 2dimensionalen Flächen dargestellt wdn, quasi als Faltvorlage. Ein 4dimensionaler Würfel würde dann wieder 6 Würfel statt dieser Flächen zeigen, wenn er räumlich projiziert wird. Zusammengeklappt würden diese Würfel alle ineinander­liegen, was Abb1 andeu­tet. Ein 4Tensor als Produkt 2er 2×2 Matrizen besteht hier demggüber aber nur aus 4 Subebenen, die durch die Anzahl der Ele­mente der Primär­matrix bestimmt wdn. Wie man sich diese ange­ordnet vor­stel­len könnte, zeigt die Abb2. Diese hätte auch so ange­legt wdn kön­nen, dass sie einen Wür­fel mit nur 4 Sei­ten (analog der 4 Subebenen) zeigt, aus denen die Ele­mente der Sub­ebe­nen her­aus­ragen. Das wäre aber nur bei diesem ein­fachen Modell so. Größere Sekundärmatrizen ließen sich so nicht mehr einer Primärmatrix zuordnen. Deshalb wurden die Subebenen zwischen Subebene 1.1 (auf der Primärmatrix) und Subebene 2.2 (die angedeutete „Rückwand“) in Abb2 nur ange­deutet. Für die Dimensionierung eines VBA-Arrays ist das ohnehin irrelevant, denn die Anzahl seiner Dimen­sionen ver­größert sich ja nicht mit stei­gender Elemente­Anzahl von Primär- u/o Sekundär­matrizen.
__________
* Die Einteilung in Ebenen, hier als Scheiben dargestellt, ist einschlägigen Artikeln ent­lehnt (aller­dings vor­nehmlich für 3Tensoren gebraucht).
Luc :-?
Anzeige
Nachbemerkung zu den Formeln
04.03.2018 01:33:56
Luc:-?
Die von snb verwendete Fml zur Erzeugung der klassischen Form des Kronecker-Produkts (plurale MatrixFml anstelle von Abb3/1.1) fktioniert auch in der üblicheren Form:
{=INDEX(A1:B2;GANZZAHL((ZEILE(1:4)-1)/2)+1;GANZZAHL((SPALTE(A:D)-1)/2)+1)*INDEX(D1:E2;REST(ZEILE(1:4)-1;2)+1;REST(SPALTE(A:D)-1;2)+1)}
Man kann sie aber auch kürzer mit Matrixkonstanten notieren:
{=INDEX(A1:B2;{1;1;2;2};{1.1.2.2})*INDEX(D1:E2;{1;2;1;2};{1.2.1.2})}
Trotz dieser Möglichkeiten ist aber die Fml unter Abb3/1.2 besonders interessant (sowohl ohne als auch mit dem äußeren INDEX), denn sie zeigt eine in Xl mögliche Methode auf, INDEX mit Unterstützung der Xl-Steuerung (speziell des FmlText-Interpreters) dazu zu ver­an­lassen, alle entstehenden Teil(/Sekundär)-Matrizen wenigstens mit ihrem führenden Wert abzubilden. Das hierbei auch so etwas wie in Abb3/2.0 erreichbar ist — die einzige Möglichkeit, den gesamten 4Tensor in hier 4 Zellen abzubilden — ist gerade der 2maligen Ver­wen­dung von INDEX mit 4.Argument als praktisch {1.1;1.1} zu verdanken. Wie ich feststellen konnte verhält sich dabei die vor­ge­schal­tete UDF VJoin ungewohnt und fasst nicht alles in einem Ausdruck zusammen, was eigentlich ihre Aufgabe wäre. Lässt man entweder das äußere INDEX ganz weg oder nur sein 4.Argument, wird die Zusammenfassung von Abb3/1.2 4× erzeugt, d.h., auch hierbei wird die UDF 4× aufgerufen, aber immer mit den gleichen Werten. Diese beziehen sich mit dem 4.INDEX-Argument aber stets auf eine ganze Teil-/Sekundärmatrix, die mit jeder Zelle variiert. Das ist eigentlich für plurale MatrixFmln ungewöhnlich und muss diesem letzten INDEX-Argument und seiner Interpretation durch Xl geschuldet sein. Außerdem erinnert das an die Wirkungsweise dualer MatrixFmln, nur wdn hier Werte variiert, weil eben mehrere (verschiedene) erzeugt wurden. Damit könnte auf diesem Verhalten ggf auch eine wei­tere Kategorie von MatrixFmln begründet wdn, bei der nicht nur die ermittelten Ergebniswerte auf die selektierten Zellen auf­ge­teilt wdn, sondern jede Zelle einzeln berechnet wird, um dann letztlich doch einen gemeinsamen Ergebnisraum zu bilden, der nicht getrennt wdn kann. Das wirkt sich dann auch auf die UDF aus, die hier nachweislich 4× aufgerufen wird, wobei die ihr als Argument1 übergebenen Werte variieren. Hier wäre interessant zu wissen, ob die neue Xl-Fkt TEXTVERKETTEN in ihrem Argument3 analog reagiert, also eben­falls 4× variierend aufgerufen wird (obwohl sie wohl kaum eine MatrixKonstante in Textform erzeugen wird).
Z.Z. arbeite ich an einer UDF, die derartige Ergebnisse in eine NormalMatrix (ggf in variierender Form, also auch als [Sub-]Ebenen) übertragen kann (bisher ist nur eine Zusammenstellung der Sekundärmatrizen möglich).
Obwohl snb (unter dem oben gesetzten Link auf das OL-Forum) ja schon eine UDF für die Erzeugung der klassischen Notation eines Kronecker-Produkts geliefert hatte (was auch fktioniert!), hat er noch eine UDF auf OL nachgeliefert, die mit 3dimensionalen Arrays arbeitet. Ich selber werde ggf noch versuchen, das Ergebnis aus Abb3/1.1 direkt in eine klassische Matrixform umzusetzen, wie es ja auch mit VJoin in Abb3/2.0 möglich war, aber wg der erforderlichen Expansion der Ergebnisse nicht so einfach ist. Erst wenn eine dieser UDFs fertiggestellt ist, gibt's wohl eine 4.Fortsetzung der Tensor-Serie*…
* Die INDEX-Abhandlung ist ja auch noch in Arbeit, obwohl das hier Vorliegende bereits als Ergänzung derselben aufgefasst wdn kann.
Luc :-?
Anzeige
Weiteres von snb & mir auf OL (Fmln & Pgmm)
06.03.2018 15:43:09
snb
Zum Anfang noch ein Link für mathematisch Interessierte, der im Zusammenhang mit der bereits anfäng­lich erwähnten Anwendungsmöglichkeit des Kronecker-Produkts bei großen, vielfach verknüpften Daten­mengen steht.
Ab hier haben snb und ich noch Weiteres zum Thema geschrieben, wobei snb noch folgd aus­wert­bare plurale MatrixFml (für Abb3/1.1) auf der Basis von WAHL vorgestellt hat:
{=WAHL(GANZZAHL((ZEILE(1:4)-1)/2)+2*GANZZAHL((SPALTE(A:D)-1)/2)+1;A1;A2;B1;B2)*WAHL(REST(ZEILE(1:4)-1;2)+2*REST(SPALTE(A:D)-1;2)+1;D1;D2;E1;E2)}
In mit VBA evaluierbarer Form (zB mit UDF TxEval) dann so:
CHOOSE(INT((ROW(1:4)-1)/2)+2*INT((COLUMN(A:D)-1)/2)+1,A1,A2,B1,B2)*CHOOSE(MOD(ROW(1:4)-1,2)+2*MOD(COLUMN(A:D)-1,2)+1,D1,D2,E1,E2)
Meine neue UDF zur Expansion von Matrixkonstanten in Textform wie in Abb3/2.0 habe ich inzwischen erfolgreich an den 3 Tensor-Bspp der ganzen Serie erfolgreich getestet, wobei das für das Xmas-Päckchen natürlich nur nach Isolation der Matrixkonstanten gilt, nicht für die verpackte VerbundZellen-Form. Hier ist es vorerst nur möglich, so dargestellte Sekundärmatrizen in die Form einer größeren Matrix zu expandieren, wie es auch mit dem Ergebnis des Kronecker-Produkts üblich ist. An der Darstellung in Form von (Sub-)Ebenen arbeite ich noch.
Luc :-?
Anzeige
1.Version der angekündigten UDF
09.03.2018 03:11:26
Luc:-?


Rem Wandelt MxKonstt in TxtForm (US-OrigNotat) bzw als Fml in echte Matrizen um
'   Sind diese in 1 Matrix or 1 Zellbereich lt Arg1 angeordnet, wdn sie, sofern
'   möglich, in Reihenfolge ihrer OriginPositionen in Analogie zur b.Kronecker-
'   Produkt 2er Matrizen üblich Methode in 1 größere gemeins Matrix expandiert.
'   Vs1.0 -LSr:CyWorXxl -cd:20180302 -1pub:20180309h -lupd:20180308n
Function TensEx(Bereich)    '(TensorExpand)
Const txVgl$ = "{*[,;]*}"
Dim cc As Long, cck As Long, ccs As Long, cct() As Long, cx As Long, cxt As Long, _
rc As Long, rck As Long, rcs As Long, rct() As Long, rx As Long, rxt As Long, _
ber, gBer, xBer, xErg, zwE, zwErg As Variant, _
zBer As Range, wf As WorksheetFunction
On Error Resume Next: Set wf = WorksheetFunction
If TypeName(Bereich) = "Range" Then Set zBer = Bereich
If IsArray(Bereich) Then
gBer = Bereich
If IsError(LBound(gBer, 2)) Then
rc = 1: cc = UBound(gBer) + 1 - LBound(gBer)
Else: rc = UBound(gBer, 1) + 1 - LBound(gBer, 1)
cc = UBound(gBer, 2) + 1 - LBound(gBer, 2)
End If
ReDim xBer(rc - 1, cc - 1), rct(rc - 1), cct(cc - 1)
For Each ber In gBer
zwErg = Empty: GoSub eb
If Not IsArray(zwErg) Then ReDim Preserve zwErg(0)
If IsError(LBound(zwErg, 2)) Then
rct(rx) = 1: cct(cx) = UBound(zwErg) + 1 - LBound(zwErg)
Else: rct(rx) = UBound(zwErg, 1) + 1 - LBound(zwErg, 1)
cct(cx) = UBound(zwErg, 2) + 1 - LBound(zwErg, 2)
End If
xBer(rx, cx) = zwErg: rx = (rx + 1) Mod rc: cx = cx - CInt(rx = 0)
Next ber
rcs = wf.Sum(rct): ccs = wf.Sum(cct): rx = 0: cx = 0
If CBool(rcs) And CBool(ccs) Then
ReDim xErg(rcs - 1, ccs - 1)
ElseIf CBool(rcs) Then
ReDim xErg(rcs - 1, ccs)
ElseIf CBool(ccs) Then
ReDim xErg(rcs, ccs - 1)
Else: ReDim xErg(rcs, ccs)
End If
For Each ber In xBer
rxt = 0: cxt = 0
If Not IsEmpty(ber) Then
For Each zwE In ber
xErg(rck + rxt, cck + cxt) = zwE
rxt = (rxt + 1) Mod rct(rx): cxt = cxt - CInt(rxt = 0)
Next zwE
rx = (rx + 1) Mod rc
If CBool(rx) Then
rck = rck + rct(rx - 1)
Else: cx = cx + 1: rck = 0: cck = cck + cct(cx - 1)
End If
End If
Next ber
TensEx = xErg
Else: ber = Bereich
eb:     If Not zBer Is Nothing Then
With zBer.Cells(rx + 1, cx + 1)
If .Value Like txVgl Then
ber = .Value
ElseIf .HasFormula Then
ber = Mid(.Formula, 2)
End If
End With
If Not ber Like txVgl Then
zwErg = ActiveSheet.Evaluate(ber)
If IsError(zwErg) Then TensEx = CVErr(Err.Number): GoTo ex
If IsArray(zwErg) Then
ElseIf zwErg Like txVgl Then
ber = zwErg: zwErg = Empty
End If
End If
End If
If IsEmpty(zwErg) And (ber Like txVgl Or ber Like "=" & txVgl) Then
zwErg = ActiveSheet.Evaluate(ber)
If IsError(zwErg) Then TensEx = CVErr(Err.Number): GoTo ex
ElseIf IsEmpty(zwErg) Then
TensEx = CVErr(xlErrRef): GoTo ex
End If
If Not IsEmpty(gBer) Then Return
TensEx = zwErg
End If
ex: gBer = Empty: xBer = Empty: xErg = Empty: zwErg = Empty
Set zBer = Nothing: Set wf = Nothing
End Function
Luc :-?
Anzeige
Möglichkeiten der UDF TensEx
13.03.2018 01:22:17
Luc:-?
Mit dieser UDF lassen sich ja als Matrixkonstanten auf nur eine Zelle (auch als Fml) fixierte Daten in ihrer Datenanzahl und -struktur entsprd ZellBereiche expandieren. Das gilt auch für ganze ZellBereiche, in deren Einzelzellen je eine solche Matrixkonstante (in Vek­tor-, Kovektor- oder MatrixForm) notiert wurde. Auf diese Weise lässt sich auch die Darstellung in Abb3/2.0 expandieren, was dann die übliche Darstellungs­form des Kronecker-Produkts ergibt:
 AEAFAGAHAIAJ
30
zu Abb3/2.0SekundärmatrizenDarstellung (Kronecker-Produkt)Formel-EMx120102412Analyse:EMx2155186 EMx328143216 EMx421724816/1 plurale MxFml in AF31:AI34: {=TensEx(W12:X13)}1[1]/1z=1…2SubEbenenDarstellung (auf z-Ebene) SubEbenen20241012Länge/MaxTiefez.128321416gesamt/dar UDFSubEbenen151856 z.221247818/1 plurale MxFml in AF37:AI40: {=TensEx(W12:X13;0)}1[1]/1
31
32
33
34
35
36
37
38
39
40
41
In der 2.Tabelle wurden die Subebenen des eigentlich hierbei in Xl entstehenden 4Tensors (vgl Abb3/1.1 & Abb1-2) expandiert. Dafür wird allerdings die Vs1.1 der zuvor publizierten UDF benötigt. Diese kann sich jeder selbst herstellen, indem der UDF-Kopf, die Deklaration und ein For Each-Konstrukt ergänzt wdn. Der Anfang sähe dann so aus:
Function TensEx(Bereich, Optional ByVal Ebene)
Const txVgl$ = "{*[,;]*}"
Dim cc As Long, cck As Long, ccs As Long, cct() As Long, cx As Long, cxt As Long, _
rc As Long, rck As Long, rcs As Long, rct() As Long, rx As Long, rxt As Long, _
isLevel As Boolean, ber, gBer, xBer, xErg, zwE, zwErg As Variant, _
zBer As Range, wf As WorksheetFunction
On Error Resume Next: Set wf = WorksheetFunction
isLevel = Not IsMissing(Ebene)
If TypeName(Bereich) = "Range" Then Set zBer = Bereich
Ab der letztgenannten Zeile geht's wie bisher weiter. Im For Each zwE In ber-Zyklus muss dann nur noch die 1.Anweisung durch folgd Konstrukt ersetzt wdn:
                    If isLevel Then
xErg(rx + rxt * rc, cx + cxt * cc) = zwE
Else: xErg(rck + rxt, cck + cxt) = zwE
End If
Die 2.Anweisung bleibt dann danach unverändert stehen.
Im Hinblick auf die vorausgegangen „Kapitel“ dieses Tensor-Exkurses kann ich mitteilen, dass es mit dieser UDF-Version auch mög­lich ist, beim im Startbeitrag verlinkten Zitate-Silben­rätsel (2.Tensor-Fortsetzung) aus Blatt1 der BspDatei nicht nur den Inhalt ihres Blatt2 zu erzeugen (25 Sekundärmatrizen 3×3, schon mit UDF-Vs1.0 möglich), sondern auch alle ihre 9 Subebenen (5×5). Die jeweiligen pluralen MatrixFmln (über einen Bereich aus 225 Zellen) lauten dann wie folgt …
• Sekundärmatrizen: {=TensEx(TabBlatt1!A1:E5)}
• Subebenen: {=TensEx(TabBlatt1!A1:E5;0)}
Letzteres dürfte die bisher im Forum ungelöste Aufgabe etwas erleichtern (es fehlen natürlich dann noch immer die nicht in die Sekundärmatrizen einbezogenen 3 Subebenen mit der Kennzeichnung der Silben­zuge­hörigkeit zu einem bestimmten Zitat ;-]).
Wenn man dem genannten Link und dann dort dem ebenfalls im Startbeitrag vorhandenen folgt, gelangt man zur 1.Fortsetzung und von dort zur allerersten Aufgabe in diesem Rahmen, deren Lösung im Thread der 1.Fortsetzung zu finden ist. In diesem Zusam­menhang soll aber nur der 3Tensor interessieren, dessen Inhalte (ohne die „weihnachtliche Verpackung“) genauso expan­diert wdn könnten. Aus der Originalform heraus aber nur einzeln für jeden der 4 Teile. Mit der zZ noch in Arbeit befindlichen Vs1.2 der UDF kann man dann die 4 Teile auch gleichzeitig (als diskontinuierlicher Bereich) verarbeiten und eine gemeinsame Matrix erzeugen.
Luc :-?
Anzeige
Ergänzende FormelAlternative(n)
15.03.2018 02:17:27
Luc:-?
1. snb hat sich auf OL nochmals zu Wort gemeldet und eine BspDatei mit universellerer Fml zum Thema hochgeladen.
2. Es gibt auch von mir noch eine Fml-Alternative, die statt der 1.Werte aller Subebenen (die 4 vorn aus der Dar­stel­lungs­ebene her­aus­ragenden blauen Dreiecke lt Abb2) alle äußeren Eckwerte (je ein vorn, oben, unten und hin­ten her­aus­ra­gen­des blaues Drei­eck lt Abb2) zeigt, also von jeder der 4 Subebenen den 1., 2., 3. oder 4.Wert. Das passiert auch, wenn die UDF TensEx direkt auf die Fml angewendet wird, die 2.0 in Abb3 zugrunde liegt. Das sind auch die Werte, die in beiden Dar­stel­lun­gen (Sekun­där­ma­tri­zen bzw Sub­ebe­nen) gleich posi­tio­niert sind.
Userbild
Auch in diesem Fall liefert die UDF VJoin (Vs1.5!) alle Sekundärmatrizen, die bei der Berechnung durch Xl entstehen, was hier eben­falls gezeigt wird. Xl trifft hier also nur eine andere Auswahl, denn es kann den entstandenen 4Tensor nicht automatisch in die übli­che Kronecker-Produkt-Form expandieren.
Mit Hilfe dieser Form könnte man - lt zuvor verlinkter Dissertation - komplexe Datenbeziehungen (bei sinn­voller KP-Bil­dung) ver­ein­facht dar­stellen (regulär wäre die nTensor-Form!). Dabei müssen aller­dings gewisse Genauigkeits­ver­luste in Kauf genommen wdn, wenn mit diesen großen Matrizen anstelle der nTensoren weiter­gerechnet wdn soll. Dafür nimmt die Performance zu und der Arbeits­speicher­Bedarf ab.
Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige