Skip to content

Commit b68e0d1

Browse files
committed
0102
1 parent 18e4b1b commit b68e0d1

File tree

47 files changed

+226
-226
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+226
-226
lines changed

public/categories/程序/index.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
33
<channel>
44
<title>程序 on A Hugo website</title>
5-
<link>//localhost:6958/categories/%E7%A8%8B%E5%BA%8F/</link>
5+
<link>/categories/%E7%A8%8B%E5%BA%8F/</link>
66
<description>Recent content in 程序 on A Hugo website</description>
77
<generator>Hugo</generator>
88
<language>en-US</language>
99
<lastBuildDate>Fri, 17 Mar 2023 18:34:35 +0800</lastBuildDate>
10-
<atom:link href="//localhost:6958/categories/%E7%A8%8B%E5%BA%8F/index.xml" rel="self" type="application/rss+xml" />
10+
<atom:link href="/categories/%E7%A8%8B%E5%BA%8F/index.xml" rel="self" type="application/rss+xml" />
1111
<item>
12-
<title>Mathematica踩坑-矩阵符号计算 | 陈星宇</title>
13-
<link>//localhost:6958/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97-%E9%99%88%E6%98%9F%E5%AE%87/</link>
12+
<title>Mathematica踩坑-矩阵符号计算</title>
13+
<link>/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97/</link>
1414
<pubDate>Fri, 17 Mar 2023 18:34:35 +0800</pubDate>
15-
<guid>//localhost:6958/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97-%E9%99%88%E6%98%9F%E5%AE%87/</guid>
15+
<guid>/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97/</guid>
1616
<description>&lt;h2 id=&#34;问题由来&#34;&gt;问题由来&lt;/h2&gt;&#xA;&lt;p&gt;最近为了推导公式,需要验证一些(20多个)高维矩阵的内积结果(手算1-8h不等),而且需要一个靠谱的帮助我检验计算结果的工具。所以想到了Mathematica。&lt;/p&gt;&#xA;&lt;p&gt;我的计算大概是:$k^2\times k^5$的两个矩阵$A,B$做内积:$Tr(A \cdot B^T)$。通过$Tr$的可交换性质可以转化为$1 \times k^2$的行向量与$k^2\times k^5$的矩阵与$k^5\times 1$的列向量一个&amp;quot;内积&amp;quot;,所以就是一堆($k^2\times k^5$)数相加,不过矩阵$A,B$都不是标量矩阵,元素都是符号,维数也还会随公式的阶数增高。&lt;/p&gt;&#xA;&lt;p&gt;下面是矩阵大概的形式(还有更长的),其中$Dimensions[\eta_2^{-1}]=k\times k,Dimensions[\eta_1]=k\times 1$。$I_k$是$k$阶单位阵,$K_{k,k}$是$k^2\times k^2$矩阵,学名叫作交换矩阵(Commutation Matrix),在矩阵向量化操作和矩阵张量积里是一个重要的工具,可以简单看&lt;a href=&#34;https://blog.csdn.net/weixin_39274659/article/details/113747158&#34;&gt;交换矩阵 commutation matrix:理论与matlab仿真_B417科研笔记的博客-CSDN博客&lt;/a&gt;来了解,要了解更多Commutation Matrix可以搜英文。&lt;/p&gt;&#xA;&lt;p&gt;$$vec^{T}(\eta_{2}^{-1}\eta_{1}\eta_{1}^{T}\eta_{2}^{-1})\otimes\eta_{2}^{-1}\otimes\eta_{2}^{-1}\cdot I_{k}\otimes K_{k,k}\otimes I_{k}$$&lt;/p&gt;&#xA;&lt;p&gt;还有这个$vec^T \eta_2^{-1}$中的$vec():\mathbb{R}^{p\times q} \rightarrow \mathbb{R}^{pq\times1}$算子,就是把矩阵重新排序成为列向量,&amp;ldquo;拉直&amp;rdquo;,这个是定义矩阵导数的工具。&lt;/p&gt;&#xA;&lt;p&gt;(关于矩阵对矩阵求导数:考虑矩阵函数对矩阵变元求导,得到的导数的元素如何排列?一个想法就是把矩阵都拉成向量,这样就化为了向量函数对向量变元求导,这是微积分都很熟悉的,有一些好的排布规则,并且可以证明,这种形式的矩阵导数有比较好的性质,比如简便的链式法则,以及$X$对自己求导时得到的是一个单位阵。另一个想法就是直接像矩阵张量积一样的排布导数,首先你可以想象一下$X$对自己求导的结果,它甚至不是一个单位阵,不过这只是槽点之一,我还没有了解更多。更多信息可以看这本书的$\S1.4$节:&lt;a href=&#34;https://link.springer.com/book/10.1007/1-4020-3419-9&#34;&gt;Advanced Multivariate Statistics with Matrices | SpringerLink&lt;/a&gt;,本书也介绍了vec和Commutation Matrix的性质,比较全面。)&lt;/p&gt;&#xA;&lt;p&gt;具体地,$vec(A)=vec([a_1,a_2,…,a_n])=[a_1^T,a_2^T,…,a_n^T]^T$。&lt;/p&gt;&#xA;&lt;p&gt;矩阵张量积(Tensor Product)是$A\otimes B=[a_{i,j}B]_{(i,j)}$。也叫克罗内克积(Kronecker product),外积,直积。&lt;/p&gt;&#xA;&lt;p&gt;总之我的矩阵里充斥着矩阵张量积,vec操作和交换矩阵$K_{p,q}$。同时我预测出了这些矩阵内积的结果,我希望比较一下他们是否相等,检验我的预测。&lt;/p&gt;&#xA;&lt;h3 id=&#34;mathematica&#34;&gt;Mathematica&lt;/h3&gt;&#xA;&lt;p&gt;我在大一寒假时看过一些Mathematica的文章和视频,之后用它做了一些大学物理实验的一些公式的计算?但是似乎纯粹当计算器用的,没有太多复杂的操作,等于熟悉了一下基本的文档操作吧。(不小心全给删除清空了,所以记不得到底干过啥了。)但是我也看过许多他的例子,精美的例子之类的,对他友好的帮助文档印象很深,还有就是清华大学数学科学学院&lt;a href=&#34;http://blog.siqiliu.com/cn/index.html&#34;&gt;刘思齐老师&lt;/a&gt;的&lt;a href=&#34;https://www.bilibili.com/video/BV1av411N7Xi/?spm_id_from=333.999.0.0&amp;amp;vd_source=d604f008cde1c2b512c49f045d95e4cd&#34;&gt;Mathematica网课&lt;/a&gt;很好。&lt;/p&gt;&#xA;&lt;p&gt;之前我下载了Mathematica 13.0的中文破解版,然后现在要用它的时候发现我需要的内置函数在13.1版本才出现了,这时候再去搜索一圈,已经找不到免费的资源了,全是加微信公众号关注,xx币购买链接云云,一直就很反感这些东西。&lt;/p&gt;&#xA;&lt;p&gt;所以我找到了官网,发现新用户可以免费试用15天,但是直接下载电脑版还需要一些操作,就没有下载pc版,发现Mathematica有云系统,可以在线编译,存储云文件,网站:&lt;a href=&#34;https://mathematica.wolframcloud.com/&#34;&gt;Wolfram Mathematica (wolframcloud.com)&lt;/a&gt;。在线编译已经完全可以满足我的需要了。而且我的运算量也不太大,跑代码基本都是秒出。但是可以帮我省去几十个小时的计算了!&lt;/p&gt;&#xA;&lt;h2 id=&#34;写代码时碰到的问题&#34;&gt;写代码时碰到的问题&lt;/h2&gt;&#xA;&lt;h3 id=&#34;mathematica中的矩阵和行向量列向量&#34;&gt;Mathematica中的矩阵和行向量、列向量&lt;/h3&gt;&#xA;&lt;p&gt;Mathematica帮助文档里有&lt;a href=&#34;https://reference.wolfram.com/language/guide/MatricesAndLinearAlgebra.html&#34;&gt;矩阵和线性代数—Wolfram 语言参考资料&lt;/a&gt;。&lt;/p&gt;&#xA;&lt;p&gt;Mathematica中定义向量和矩阵的内置函数有Table[],Array[],也可以用来构造向量。但是我一开始却始终搞不清楚他们的维数怎么回事。现在我明白了,&lt;strong&gt;两个花括号&lt;code&gt;{{}}&lt;/code&gt;包住的就是矩阵&lt;/strong&gt;,&lt;strong&gt;一个花括号&lt;code&gt;{}&lt;/code&gt;就是Mathematica里的向量&lt;/strong&gt;,Mathematica里的向量&lt;strong&gt;既不是行向量,也不是列向量&lt;/strong&gt;,如果向量在运算中放在右边就是列向量,放在左边就是行向量,你使用转置函数Transpose[]也没用。所以这个问题让我一开始搞得一头雾水。算矩阵乘法时不知道哪里出了错。&lt;/p&gt;&#xA;&lt;p&gt;如果你需要定义列向量,请这样定义:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;T=Array[b,{2,1}]&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;这样他就是两个花括号包裹了,将其视为$2\times 1$的矩阵,即列向量。&lt;/p&gt;&#xA;&lt;p&gt;另一个问题是,在&lt;strong&gt;定义矩阵时不要在后面加上//MartixForm&lt;/strong&gt;,一般在后面加上这个语句可以让你的输出变成好看的矩阵形式(否则会输出&lt;code&gt;{{}}&lt;/code&gt;的列表形式,看起来不方便),但是如果你在定义里加上了这个,后面的矩阵计算会出现各种问题,这是我一开始矩阵运算失败的第二个问题,然后绝望之下在听清华数院的刘思齐老师的一个Mathematica网课中,他提到了这一句:&lt;a href=&#34;https://www.bilibili.com/video/BV1av411N7Xi?p=9&amp;amp;vd_source=d604f008cde1c2b512c49f045d95e4cd&#34;&gt;lecture-2-4_哔哩哔哩_bilibili&lt;/a&gt;,在我心里救了Mathematica一命。&lt;/p&gt;&#xA;&lt;p&gt;另外用Dimensions[]函数可以查看矩阵(多少个花括号都行)的维数。&lt;/p&gt;&#xA;&lt;p&gt;比如$p\times q$的矩阵被Dimensions[]作用之后结果是 &lt;code&gt;{p,q}&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h3 id=&#34;矩阵张量积&#34;&gt;矩阵张量积&lt;/h3&gt;&#xA;&lt;p&gt;矩阵张量积(外积,直积)这个在Mathematica里直接有函数KroneckerProduct[]。&lt;/p&gt;&#xA;&lt;p&gt;但是一开始我竟然没有搜索到KroneckerProduct[],先是搜索到了Outer 外积,这个东西是张量外积,两个向量(1个花括号的)可以用这个得到矩阵,但是矩阵和矩阵用这个做外积,虽然形式上是一样的,但是它会出现4个花括号,用Dimensions[]看其维数,会得到类似这样的结果 &lt;code&gt;{2,2,2,2}&lt;/code&gt;这已经不是矩阵的维数了。这个是我在计算中遇到的第三个问题,好在最后发现了他有正经的矩阵外积函数KroneckerProduct[]&lt;/p&gt;&#xA;&lt;p&gt;所以矩阵张量积积直接用函数KroneckerProduct[]。&lt;/p&gt;&#xA;&lt;h3 id=&#34;vec算子的定义和交换矩阵k_pq的定义&#34;&gt;vec算子的定义和交换矩阵$K_{p,q}$的定义&lt;/h3&gt;&#xA;&lt;p&gt;这两个函数的定义,我在一通搜索之后,置换矩阵PermutationMatrix[]的&lt;strong&gt;应用举例&lt;/strong&gt;中:&lt;a href=&#34;https://reference.wolfram.com/language/ref/PermutationMatrix.html&#34;&gt;PermutationMatrix—Wolfram 语言参考资料&lt;/a&gt;发现了。&lt;/p&gt;</description>
1717
</item>
1818
</channel>

public/post/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!DOCTYPE html>
22
<html lang="en-US">
3-
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=6958&amp;path=livereload" data-no-instant defer></script>
3+
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
66
<meta name="generator" content="Hugo 0.136.5">
@@ -10,7 +10,7 @@
1010
<meta property="og:title" content="Posts - A Hugo website">
1111

1212

13-
<link href='//localhost:6958/favicon.ico' rel='icon' type='image/x-icon'/>
13+
<link href='/favicon.ico' rel='icon' type='image/x-icon'/>
1414

1515

1616

@@ -75,7 +75,7 @@ <h2 class="archive-title">2024</h2>
7575
<h2 class="archive-title">2023</h2>
7676

7777
<article class="archive-item">
78-
<a href="/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97-%E9%99%88%E6%98%9F%E5%AE%87/" class="archive-item-link">Mathematica踩坑-矩阵符号计算 | 陈星宇</a>
78+
<a href="/2023/03/17/mathematica%E8%B8%A9%E5%9D%91-%E7%9F%A9%E9%98%B5%E7%AC%A6%E5%8F%B7%E8%AE%A1%E7%AE%97/" class="archive-item-link">Mathematica踩坑-矩阵符号计算</a>
7979
<span class="archive-item-date">
8080
2023-03-17
8181
</span>

public/post/index.xml

Lines changed: 12 additions & 12 deletions
Large diffs are not rendered by default.

public/tags/2024/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<!DOCTYPE html>
22
<html lang="en-US">
3-
<head><script src="/livereload.js?mindelay=10&amp;v=2&amp;port=6958&amp;path=livereload" data-no-instant defer></script>
3+
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
66
<meta name="generator" content="Hugo 0.136.5">
@@ -10,7 +10,7 @@
1010
<meta property="og:title" content="2024 - A Hugo website">
1111

1212

13-
<link href='//localhost:6958/favicon.ico' rel='icon' type='image/x-icon'/>
13+
<link href='/favicon.ico' rel='icon' type='image/x-icon'/>
1414

1515

1616

0 commit comments

Comments
 (0)