Wie lautet der LaTeX-Befehl für den Operator "Plus mit Punkt drüber"?

Wie kann man in LaTeX ein Plus mit einem Punkt obendrüber darstellen?
Das funktioniert mit dem Befehl




```
\dotplus
```

Das Ergebnis sieht folgendermaßen aus (geht auch in MathJax):


\(\dotplus\)
<p>row\_number () ist eine ranking-fensterfunktion, und ranking-fensterfunktionen erfordern eine obligatorische order by-klausel. wenn sie versuchen, es ohne order by zu schreiben, wird ein syntaxfehler angezeigt.</p><pre><code>select row\_number() over() from (values ('a'), ('b'), ('c')) as x(y); -- msg 4112, level 15, state 1, line 1 -- the function 'row\_number' must have an over clause with order by. </code></pre><p>der trick mit der unterabfrage wurde von jemandem entdeckt, der darüber als leistungsoptimierung gebloggt hat. sql server führt immer eine sortieroperation aus, da konstanten für die order by-klausel nicht zulässig sind:</p><pre><code>select row\_number() over(order by null) from (values ('a'), ('b'), ('c')) as x(y); -- msg 5309, level 16, state 1, line 1 -- windowed functions, aggregates and next value for functions -- do not support constants as order by clause expressions. </code></pre><p>und ganzzahlen, die als indizes behandelt werden, sind es auch nicht:</p><pre><code>select row\_number() over(order by 1) from (values ('a'), ('b'), ('c')) as x(y); -- msg 5308, level 16, state 1, line 1 -- windowed functions, aggregates and next value for functions -- do not support integer indices as order by clause expressions. </code></pre><p>es stellt sich heraus, dass sie diese einschränkung aufgrund eines fehlers im code umgehen können, indem sie eine unterabfrage verwenden, die aus irgendeinem grund zulässig ist, und den sortieroperator entfernen.</p><pre><code>select row\_number() over(order by (select 1)) from (values ('a'), ('b'), ('c')) as x(y); </code></pre><p> <a href="https://i.stack.imgur.com/i76qa.png">(<img src="https://i.stack.imgur.com/i76qa.png" alt="no sort operator"></a> </p><p>sie können eine beliebige konstante in der unterabfrage verwenden. null erinnert wahrscheinlich an die gewohnheit, select null in exists-prädikaten zu verwenden, die in der frühen geschichte von sql server einen leistungseinfluss im gegensatz zu * oder einem anderen spaltenausdruck hatten der optimierer war nicht klug genug, um ihn zu ignorieren.</p><p>hth</p><p><strong> [~ # ~] update [~ # ~] </strong> @ erik-darling kommentierte, dass sie es auch umgehen können, indem sie berechnete ausdrücke verwenden:</p><pre><code>you can do select row\_number() over (order by 1/0); </code></pre> <p>einfach. hier ist das beispiel aus meinem kopf:</p><h1>die oberste ebene <code>cmakelists.txt</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) # you can tweak some common (for all subprojects) stuff here. for example: set(cmake\_disable\_in\_source\_build on) set(cmake\_disable\_source\_changes on) if ("${cmake\_source\_dir}" strequal "${cmake\_binary\_dir}") message(send\_error "in-source builds are not allowed.") endif () set(cmake\_verbose\_makefile on) set(cmake\_color\_makefile on) # remove 'lib' prefix for shared libraries on windows if (win32) set(cmake\_shared\_library\_prefix "") endif () # when done tweaking common stuff, configure the components (subprojects). # note: the order matters! the most independent ones should go first. add\_subdirectory(components/b) # b is a static library (depends on boost) add\_subdirectory(components/c) # c is a shared library (depends on b and external xxx) add\_subdirectory(components/a) # a is a shared library (depends on c and b) add\_subdirectory(components/executable) # executable (depends on a and c) </code></pre><h1><code>cmakelists.txt</code> in <code>components/b</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(b c cxx) find\_package(boost 1.50.0 required) file(glob cpp\_files source/*.cpp) include\_directories(${boost\_include\_dirs}) add\_library(${project\_name} static ${cpp\_files}) # required on unix os family to be able to be linked into shared libraries. set\_target\_properties(${project\_name} properties position\_independent\_code on) target\_link\_libraries(${project\_name}) # expose b's public includes (including boost transitively) to other # subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${boost\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/c</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(c c cxx) find\_package(xxx required) file(glob cpp\_files source/*.cpp) add\_definitions(${xxx\_definitions}) # note: boost's includes are transitively added through b\_include\_dirs. include\_directories(${b\_include\_dirs} ${xxx\_include\_dirs}) add\_library(${project\_name} shared ${cpp\_files}) target\_link\_libraries(${project\_name} b ${xxx\_libraries}) # expose c's definitions (in this case only the ones of xxx transitively) # to other subprojects through cache variable. set(${project\_name}\_definitions ${xxx\_definitions} cache internal "${project\_name}: definitions" force) # expose c's public includes (including the ones of c's dependencies transitively) # to other subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${b\_include\_dirs} ${xxx\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/a</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(a c cxx) file(glob cpp\_files source/*.cpp) # xxx's definitions are transitively added through c\_definitions. add\_definitions(${c\_definitions}) # note: b's and boost's includes are transitively added through c\_include\_dirs. include\_directories(${c\_include\_dirs}) add\_library(${project\_name} shared ${cpp\_files}) # you could need `${xxx\_libraries}` here too, in case if the dependency # of a on c is not purely transitive in terms of xxx, but a explicitly requires # some additional symbols from xxx. however, in this example, i assumed that # this is not the case, therefore a is only linked against b and c. target\_link\_libraries(${project\_name} b c) # expose a's definitions (in this case only the ones of c transitively) # to other subprojects through cache variable. set(${project\_name}\_definitions ${c\_definitions} cache internal "${project\_name}: definitions" force) # expose a's public includes (including the ones of a's dependencies # transitively) to other subprojects through cache variable. set(${project\_name}\_include\_dirs ${project\_source\_dir}/include ${c\_include\_dirs} cache internal "${project\_name}: include directories" force) </code></pre><h1><code>cmakelists.txt</code> in <code>components/executable</code>:</h1><pre><code>cmake\_minimum\_required(version 2.8.10) project(executable c cxx) file(glob cpp\_files source/*.cpp) add\_definitions(${a\_definitions}) include\_directories(${a\_include\_dirs}) add\_executable(${project\_name} ${cpp\_files}) target\_link\_libraries(${project\_name} a c) </code></pre><hr><p>um es klar zu machen, hier ist die entsprechende quellbaumstruktur:</p><pre><code>root of the project ├───components │ ├───executable │ │ ├───resource │ │ │ └───icons │ │ ├───source | | └───cmakelists.txt │ ├───a │ │ ├───include │ │ │ └───a │ │ ├───source | | └───cmakelists.txt │ ├───b │ │ ├───include │ │ │ └───b │ │ ├───source | | └───cmakelists.txt │ └───c │ ├───include │ │ └───c │ ├───source | └───cmakelists.txt └───cmakelists.txt </code></pre><p>es gibt viele punkte, an denen dies angepasst/angepasst oder geändert werden kann, um bestimmte anforderungen zu erfüllen. dies sollte jedoch zumindest den einstieg erleichtern.</p><p><strong> hinweis: </strong>ich habe diese struktur in mehreren mittelgroßen und großen projekten erfolgreich eingesetzt.</p> <h1><code>sudo su postgres</code></h1><p>nachdem ich diese <a href="https://stackoverflow.com/q/7765269/642706">geschlossene frage zum stapelüberlauf</a> und <a href="https://stackoverflow.com/q/23982282/642706">sein duplikat</a> gefunden habe, werde ich hier die gefundenen lösungen veröffentlichen <a href="https://stackoverflow.com/a/7765367/642706">dort</a> und <a href="https://stackoverflow.com/a/23982810/642706">dort</a> .</p><p>➥ sie müssen den befehl <code>sudo</code> <em> kombiniert</em> mit dem befehl <code>su</code> verwenden.</p><pre class="lang-bash prettyprint-override"><code>sudo su postgres </code></pre><p>wenn sie dazu aufgefordert werden, geben sie ihr <strong> macos-administratorbenutzerkennwort </strong> anstelle des kennworts <code>postgres</code> ein. zu diesem zeitpunkt ist ihr mac-administrator derjenige, der den befehl <code>sudo</code> ausführt, nicht der benutzer <code>postgres</code>.</p><p>ich verstehe zwar nicht, warum wir das <code>sudo</code> mit dem <code>su</code> kombinieren müssen, aber es funktioniert tatsächlich für mich in <a href="https://en.wikipedia.org/wiki/macos\_mojave">macos mojave</a> . ich habe diesen tipp bei meinen verschiedenen suchanstrengungen im zusammenhang mit bsd und linux nicht gefunden. vielleicht handelt es sich also nur um einen mac apple, möglicherweise um eine zusätzliche sicherheitsmaßnahme. oder unter betriebssystemen im unix-stil muss der befehl <code>su</code> vom benutzer <code>root</code> ausgeführt werden, und unter macos ist das konto <code>root</code> aus sicherheitsgründen standardmäßig deaktiviert - unser das mac-administrator-benutzerkonto ist weniger leistungsfähig als <code>root</code> und möglicherweise nicht standardmäßig zum ausführen von <code>su</code> autorisiert. keine ahnung, egal, die problemumgehung funktioniert.</p><h2>moderne alternative: <code>sudo -u</code></h2><p>nach <a href="https://stackoverflow.com/a/23988605/642706">zu craig ringer</a> und <a href="https://stackoverflow.com/a/23982810/642706">zu erwin brandstetter</a> ist die modernere form:</p><pre class="lang-bash prettyprint-override"><code>sudo -u postgres -i </code></pre><p>laut <a href="https://www.sudo.ws/man/1.8.3/sudo.man.html">diese seite</a> :</p><ul> <li><code>-u</code> bedeutet "einen angegebenen befehl als diesen angegebenen benutzer ausführen".</li> <li><code>postgres</code> gibt den benutzernamen an, unter dem der befehl ausgeführt werden soll.</li> <li><code>-i</code> simuliert eine anfängliche anmeldung, dh die shell wird mit den startskripten des benutzers initialisiert.</li> <li>da kein befehl bereitgestellt wird, wird eine interaktive shell ausgeführt.</li> </ul><p>weitere informationen zu älteren und neueren ansätzen finden sie in dieser frage auf der schwesterseite <a href="https://serverfault.com/q/601140/142214"><em> was ist der unterschied zwischen sudo su - postgres und sudo -u postgres ?</em></a> . die antwort von craig ringer lautet: (a) vergessen sie <code>sudo su</code> und (b) verwenden sie stattdessen <code>sudo -u</code>.</p><h3>führen sie apps als <code>postgres</code> benutzer aus</h3><p>so führen sie eine <a href="https://en.wikipedia.org/wiki/postgresql#psql"><code>psql</code></a> sitzung als <code>postgres</code> benutzer aus:</p><pre class="lang-bash prettyprint-override"><code>sudo -u postgres psql </code></pre><p>so führen sie die <a href="https://en.wikipedia.org/wiki/gnu\_nano"><code>nano</code></a> <a href="https://en.wikipedia.org/wiki/text\_editor">texteditor</a> app als <code>postgres</code> benutzer aus:</p><pre class="lang-bash prettyprint-override"><code>sudo -u postgres nano </code></pre> <h2>es kommt darauf an ™</h2><p>die fähigkeit, einen oder mehrere cursor zu umgehen, hängt davon ab, was in diesem cursor ausgeführt wird. ohne zu wissen, was darin vor sich geht, gibt es keine möglichkeit zu sagen. es kann sein, dass es keine problemumgehung gibt und sie eine zeilenweise verarbeitung durchführen müssen.</p><p>nachfolgend einige beispiele.</p><h2>funktioniert nicht in sets</h2><p>dieses beispiel ist das grundlegendste und ist einfach die tatsache, dass sie ihr gesamtes dataset oder teile ihres datasets auf einmal abfragen können, aber der cursor wurde erstellt und fragt die daten zeilenweise ab. übliche, durch die dies ersetzt werden kann, sind <code>join</code>, <code>cross apply</code>/<code>outer apply</code> und andere.</p><p><strong> betrachten sie den folgenden datensatz: </strong></p><pre><code>create table dbo.lotr(lotrid int, charactername varchar(255), val varchar(255)); create table dbo.lotrattributes(lotrattributeid int, lotrid int, attrval varchar(255)); insert into dbo.lotr(lotrid,charactername,val) values(1,'frodo','ring') ,(2,'gandalf','staff'); insert into dbo.lotrattributes(lotrid,lotrattributeid,attrval) values(1,1,'ringattribute1') ,(1,2,'ringattribute2') ,(1,3,'ringattribute3') ,(2,4,'staffattribute1') ,(2,5,'staffattribute2'); </code></pre><p>man könnte versuchen, jeden datensatz zu finden, und er stimmt separat überein, indem man die tabelle <code>lotr</code> durchläuft.</p><p><strong> cursor: </strong></p><pre><code>declare @lotrid int declare c cursor for select lotrid from dbo.lotr; open c fetch next from c into @lotrid; while @@fetch\_status = 0 begin select lotrattributeid from dbo.lotrattributes where lotrid = @lotrid; fetch next from c into @lotrid; end close c deallocate c </code></pre><p><strong> das ergebnis sind zwei ergebnismengen </strong></p><pre><code>lotrattributeid 1 2 3 lotrattributeid 4 5 </code></pre><p><strong> wenn dieses <code>inner join</code> verwendet wird, erhalten wir das gleiche ergebnis wie eine ergebnismenge. </strong></p><pre><code>select lotrattributeid from dbo.lotr l inner join dbo.lotrattributes la on l.lotrid = la.lotrid; lotrattributeid 1 2 3 4 5 </code></pre><hr><h2>string-manipulation</h2><p>häufig wird <code>for xml path('')</code> verwendet, um zeichenfolgenmanipulationen innerhalb von cursorn zu ersetzen.</p><p><strong> datensatz </strong></p><pre><code>create table dbo.lotr(lotrid int, charactername varchar(255), val varchar(255)); create table dbo.lotrattributes(lotrattributeid int, lotrid int, attrval varchar(255)); insert into dbo.lotr(lotrid,charactername,val) values(1,'frodo','ring'); insert into dbo.lotrattributes(lotrid,lotrattributeid,attrval) values(1,1,'ringattribute1') ,(1,2,'ringattribute2') ,(1,3,'ringattribute3'); </code></pre><p><strong> doppelcursor mit string-manipulation </strong></p><pre><code>declare @lotrid int, @charactername varchar(255), @val varchar(255) declare @lotrattributeid int, @attrval varchar(255) declare c cursor for select lotrid,charactername, val from dbo.lotr open c fetch next from c into @lotrid,@charactername,@val while @@fetch\_status = 0 begin set @charactername +='|'+ @val declare d cursor for select lotrattributeid, attrval from dbo.lotrattributes where lotrid = @lotrid open d fetch next from d into @lotrattributeid,@attrval while @@fetch\_status = 0 begin set @charactername +='['+@attrval+ '],' fetch next from d into @lotrattributeid,@attrval end close d deallocate d fetch next from c into @lotrid,@charactername,@val end close c deallocate c select left(@charactername,len(@charactername)-1); </code></pre><p><strong> ergebnis </strong></p><pre><code>(no column name) frodo|ring[ringattribute1],[ringattribute2],[ringattribute3], </code></pre><p><strong> entfernen der cursor mit for xml path ('') </strong></p><pre><code>select l.charactername +'|'+ l.val + (select stuff((select ','+quotename(attrval) from dbo.lotrattributes la where la.lotrid = l.lotrid for xml path('')), 1, 1, '')) from dbo.lotr l; </code></pre><h2>* *</h2><p>die eigentliche problemumgehung besteht darin, herauszufinden, warum die daten auf diese weise dargestellt werden, und die anwendung zu ändern, um sie nicht in diesem format zu benötigen, und sie irgendwo zu speichern.</p><p>wenn ihre hände gebunden sind, wäre dies das nächstbeste.</p><hr><h2>fügen sie die top-10-werte in eine temporäre tabelle ein, basierend auf den ids in einer anderen tabelle</h2><p><strong> daten </strong></p><p>create table dbo.sometable (inserttableid int, val varchar (255)); create table dbo.top10table (top10tableid int, inserttableid int, val varchar (255));</p><pre><code>insert into dbo.sometable(inserttableid,val) values(1,'bla') ,(2,'blabla'); insert into dbo.top10table(top10tableid,inserttableid,val) values(1,1,'wuw') ,(2,1,'wuw') ,(3,1,'wuw'); </code></pre><p><strong> cursor </strong></p><pre><code>create table #top10values(top10tableid int, inserttableid int, val varchar(255)) declare @inserttableid int; declare c cursor for select inserttableid from dbo.sometable; open c fetch next from c into @inserttableid; while @@fetch\_status =0 begin insert into #top10values(top10tableid,inserttableid,val) select top(10) top10tableid,inserttableid,val from dbo.top10table where inserttableid = @inserttableid order by top10tableid fetch next from c into @inserttableid; end close c deallocate c select * from #top10values; drop table #top10values; </code></pre><p><strong> ergebnis </strong></p><pre><code>top10tableid inserttableid val 1 1 wuw 2 1 wuw 3 1 wuw </code></pre><p><strong> ersetzen des cursors durch <code>cross apply</code> und ein <code>cte</code> </strong></p><pre><code>create table #top10values(top10tableid int, inserttableid int, val varchar(255)); ;with cte as ( select inserttableid from dbo.sometable ) insert into #top10values(top10tableid,inserttableid,val) select t1t.top10tableid,t1t.inserttableid,t1t.val from cte cross apply (select top (10) top10tableid,inserttableid,val from dbo.top10table t1t where t1t.inserttableid = cte.inserttableid ) t1t ; select * from #top10values; drop table #top10values; </code></pre><hr><h2>andere beispiele</h2><ul> <li>ein beispiel zum ersetzen eines cursors zur auswahl eines dynamischen satzes von artikeln pro lieferant mithilfe von <code>cross apply</code> <a href="https://dba.stackexchange.com/questions/100761/replacing-a-cursor-with-a-single-query-possible">hier</a> .</li> <li>ein beispiel für die verwendung von fensterfunktionen zum ersetzen eines cursors <a href="https://dba.stackexchange.com/questions/127083/improve-a-query-using-cursor-to-set-based-approach">hier</a> .</li> </ul><hr><p><strong> manchmal gibt es keine andere wahl </strong></p><p>wenn sie nicht in sätzen arbeiten können und zeilenweise arbeiten müssen, können sie den cursor trotzdem optimieren.</p><p>eine der größten änderungen bei der beschleunigung des cursors ist das hinzufügen von <code>local fast\_forward</code>.</p><pre><code>declare c cursor local fast\_forward for select lotrid from dbo.lotr </code></pre><p>schauen sie sich <a href="https://sqlperformance.com/2012/09/t-sql-queries/cursor-options">diesen blogpost</a> von @aaronbertrand an, wo er die möglichen leistungsunterschiede erklärt, wenn cursoreinstellungen wie <code>local</code> &amp; <code>fast\_forward</code> verwenden oder nicht.</p> <p>sie müssten einen <code>user-defined function</code> erstellen, wenn sie eine syntax haben möchten, die ihrem beispiel ähnlich ist, aber könnten sie das tun, was sie tun möchten, inline relativ leicht mit einer <code>case</code>-anweisung, wie die anderen gesagt haben.</p><p>die <code>udf</code> könnte ungefähr so ​​aussehen:</p><pre><code>create function dbo.inlinemax(@val1 int, @val2 int) returns int as begin if @val1 &gt; @val2 return @val1 return isnull(@val2,@val1) end </code></pre><p>... und du würdest es gerne so nennen ...</p><pre><code>select o.orderid, dbo.inlinemax(o.negotiatedprice, o.suggestedprice) from order o </code></pre> <pre><code>select coalesce(max(post\_id),0) as max\_id from my\_table where org\_id = 3 </code></pre><p>oder</p><pre><code>select case count(*) when 0 then 0 else max(post\_id) end as max\_id from my\_table where org\_id = 3; </code></pre><p>wenn sie möchten, dass max (post\_id) <code>null</code> ist, wenn 1 zeile vorhanden ist, post\_id jedoch null ist</p><p><em><sub> <a href="http://dbfiddle.uk/?rdbms=oracle\_11.2&amp;fiddle=63aad1acfcbdaf661b8264a3beea57df">dbfiddle</a> </sub></em></p> Klicke aufs Register ***Einfügen***, dann in der Gruppe ***Illustrationen*** auf den Befehl ***Formen***.


Hier wählst Du die Linie aus (siehe Grafik Linie)


Nun klickst Du ins WORD-Dokument, hältst die linke Maustaste gedrückt und ziehst eine waagrechte Linie. Diese kannst Du beliebig bearbeiten (Dicke, Länge, Farbe, Schattierung u.s.w.) und natürlich auch verschieben.


Viel Spass <p>in diesem speziellen fall kann es ratsam sein, dem <a href="https://en.wikipedia.org/wiki/law\_of\_demeter">gesetz von demeter</a> zu folgen, d.h.</p><pre><code>public class team { public bool ismanagervietnamvet =&gt; manager?.isvietnamvet ?? false; } </code></pre><p>wenn ein boolescher ausdruck komplex oder hässlich ist, gibt es nichts zu sagen, dass sie ihn (oder einen teil davon) nicht in eine separate anweisung aufteilen können:</p><pre><code>bool isvietnamvet = manager?.isvietnamvet ?? false; if (team.category == "a team" &amp;&amp; isvietnamvet) </code></pre><p>wenn sie den code im debugger durchgehen, ist es oft besser, ausgefeilte bedingungen in einem einzigen <code>bool</code> zu packen, um ein wenig mouseover-hovering zu sparen. in der tat könnte es einfacher sein, das ganze in eine <code>bool</code> -variable zu setzen.</p><pre><code>bool isvietnamvetandcategorya = (team.category == "a team" &amp;&amp; manager?.isvietnamvet ?? false); if (isvietnamvetandcategorya) </code></pre><p>oder mit linq:</p><pre><code>var wibble = from flight in airport from passenger in flight.manifest let isonplane = (flight.finishedboarding &amp;&amp; passenger.flight == flight.flightnumber) where !isonplane select passenger; </code></pre> es heißt alles außerdem.. es gibt ja im deutschen auch mehrere wörter um noch eine aussage hinzuzufügen... du könntest auch moreover sagen Aloha :)


Ich hoffe, dass ich den Aufbau der Determinante richtig verstanden habe. Um die Idee zu verdeutlichen, schreibe ich die ersten 4 Fälle einfach mal auf:


Bei \(n=1\) ist nicht viel zu tun:$$D\_1=\left|\begin{array}{c}1\end{array}\right|=1$$


Bei \(n=2\) addiere ich Zeile 1 zu Zeile 2 und ziehe danach aus Zeile 2 den Faktor vor die Determinante:$$D\_2=\left|\begin{array}{c}1 & 1\\-1 & 1\end{array}\right|=\left|\begin{array}{c}1 & 1\\0 & 2\end{array}\right|=2\cdot\left|\begin{array}{c}1 & 1\\0 & 1\end{array}\right|=2$$
  



Bei \(n=3\) addiere ich Zeile 1 zu Zeile 2 und ziehe danach aus Zeile 2 den Faktor vor die Determinante:$$D\_3=\left|\begin{array}{c}1 & 1 & 0\\-1 & 1 & 4\\0 & -1 & 1\end{array}\right|=\left|\begin{array}{c}1 & 1 & 0\\0 & 2 & 4\\0 & -1 & 1\end{array}\right|=2\cdot\left|\begin{array}{c}1 & 1 & 0\\0 & 1 & 2\\0 & -1 & 1\end{array}\right|$$Jetzt addiere ich weiter Zeile 2 zu Zeile 3 und ziehe aus Zeile 3 den Faktor vor:$$\phantom{D\_3}=2\cdot\left|\begin{array}{c}1 & 1 & 0\\0 & 1 & 2\\0 & 0 & 3\end{array}\right|=2\cdot3\cdot\left|\begin{array}{c}1 & 1 & 0\\0 & 1 & 2\\0 & 0 & 1\end{array}\right|=6$$


Bei \(n=4\) wiederhole ich zunächst alle Schritte vom Fall \(n=3\):


$$D\_4=\left|\begin{array}{c}1 & 1 & 0 & 0\\-1 & 1 & 4 & 0\\0 & -1 & 1 & 9\\0 & 0 & -1 & 1\end{array}\right|=\left|\begin{array}{c}1 & 1 & 0 & 0\\0 & 2 & 4 & 0\\0 & -1 & 1 & 9\\0 & 0 & -1 & 1\end{array}\right|=2\cdot\left|\begin{array}{c}1 & 1 & 0 & 0\\0 & 1 & 2 & 0\\0 & -1 & 1 & 9\\0 & 0 & -1 & 1\end{array}\right|$$$$\phantom{D\_4}=2\cdot\left|\begin{array}{c}1 & 1 & 0 & 0\\0 & 1 & 2 & 0\\0 & 0 & 3 & 9\\0 & 0 & -1 & 1\end{array}\right|=2\cdot3\cdot\left|\begin{array}{c}\underline1 & \underline1 & \underline0 & 0\\\underline0 & \underline1 & \underline2 & 0\\\underline0 & \underline0 & \underline1 & 3\\0 & 0 & -1 & 1\end{array}\right|$$Man erkennt die letzte Determinante aus der Berechnung von \(D\_3\) wieder (unterstrichene Einträge), nur sind jetzt noch die 3 Elemente in der rechten unteren Ecke dazu gekommen, alle anderen zusätzlichen Einträge sind 0. Wir können daher noch einen weiteren Schritt (Addition der vorletzten Zeile zur letzten und Faktor herausziehen) durchführen:$$\phantom{D\_4}=2\cdot3\cdot\left|\begin{array}{c}1 & 1 & 0 & 0\\0 & 1 & 2 & 0\\0 & 0 & 1 & 3\\0 & 0 & 0 & 4\end{array}\right|=2\cdot3\cdot4\cdot\left|\begin{array}{c}1 & 1 & 0 & 0\\0 & 1 & 2 & 0\\0 & 0 & 1 & 3\\0 & 0 & 0 & 1\end{array}\right|=24$$


Damit ist klar, dass: \(D\_n=n!\)


Dieses Vorgehen kannst du, wenn verlangt, noch in einen sauberen Induktionsbeweis packen. Die Beweisidee sollte zumindest jetzt klar sein ;)