结论:切5s 切7s
结论:切9s
结论:切9s 切5s
59s大概率都要切,考虑危险牌先走
结论:切5p
结论:切9m
结论:切2p
结论:切4s
结论:切4s 切5p
结论:切1m 切2m
结论:切7p
结论:切3p 切7p
结论:切5m
结论:切3p
虽然只差一枚,但是考虑到碰听四倍速,这一枚也不能轻视
结论:切2s
结论:切2p
结论:切4p
结论:切7m
结论:切3p
中膨形的横向靠张必定是两面,因此有两个中膨形就固定雀头
结论:切6s
迷茫的时候拆亚两面多半是正解
结论:切4m 切8p
结论:切4m 切2s
结论:切6p 切5m
迷茫的时候拆亚两面多半是正解
结论:切6s
结论:切3m 切6s
结论:切8s
结论:切1p
结论:切6s 切8m
结论:切2s
结论:切2s 切1p
结论:切1p
迷茫的时候拆亚两面多半是正解
可以引用 xeCJKfntef
宏包,使用 \CJKunderdot
命令。
不过,xeCJKfntef
默认使用英文句点 .
作为着重号,显得特别小,看上去不太协调,stone-zeng[1] 提供了一种解决办法,可以用间隔号 ·
替代:
1 | \usepackage{xeCJKfntef} |
开始,在中文资料中没有找到对应的资料。后来,想到在日文中,经常见到上标的振假名[2],可能会有相关的解决办法,于是顺势找到了 luatexja-ruby
宏包,可以处理上下标。
我们可以定义:
1 | \usepackage{luatexja-ruby} |
这样就可以使用 \dotemph
给中文加着重号了。
对于一个全序集 ,若非空有上界的 ,则 中存在 的上确界(最小上界).
这里面的一个关键就是,我们要证明:
有理数集不满足确界原理.
我们考虑集合 ,我们要证明 在 中不存在上确界.
需要注意的是,因为 并不是有理数,所以这个地方不能直接用有理数稠密性来证明.
我们不妨假设 是 的上确界,则我们只需要:
(1)证明 不成立.
因为 ,不妨设 ,其中 , 且 .于是
显然这与 矛盾.因此 不可能等于 .
(2)证明 不成立.
证明的关键点在于,我们要找到一个 ,满足 且 ,这样 就也是 的一个上界,从而与 为 的上确界矛盾.
构造1:.
首先,,于是 .
其次,根据均值不等式,.
因此 满足条件.
构造2: .
我们假设 满足条件,只需要找到满足条件的 即可.
根据有理数的稠密性,满足条件的 一定存在.
构造3:取 ,则 .
显然 .
,于是 .
因此 满足条件.
(3)证明 不成立.
和上面类似,我们要找到一个 ,满足 且 ,这样 ,与 是 的上界矛盾.
显然 ,.利用上面给出的 ,我们构造 ,则 ,,满足条件.
就可以知道,不存在 为 的上确界.也就是说, 不满足确界原理.
参考资料:
但是, 在高中课本里又无处不在.特别是到了后面导数部分,不弄清楚 的定义,就没有办法弄清楚为什么 和 的导数为什么那么特殊.
我们假设有一家银行,这家银行的活期存款利率是 (当然,现实中这是不可能的).如果我们有 块钱,存入银行里,那么一年之后,我可以取出 块钱.
但是如果我们勤快一些,半年的时候把钱先取出来一次,这时可以取出 块钱.这时我们在把这 块钱都存入到银行里,半年之后再取出,那么就可以取出 块钱.这样,我们仅仅时多跑了一次银行,赚到的利息就比原来多了 .
如果我们再勤快一些,每个月都进行一次这样的操作,那么一年之后,我们一共能取出 块钱.这样我们就可以获得更高的收益了.
假如你不甘心,还想再获取更高的收益,你还可以每天进行一次这样的操作,这样在一年之后,你将获得 块钱.我们的收益又多了.
自然地,我们就有一个想法:如果我存取钱的次数足够多,那我的收益是多少?会是无穷多么?
这个问题用数学的语言来描述,就是要求在 时,的极限.
从前面的例子中,我们其实可以看出,当 从 变到 的时候, 的增长比 从 变到 的时候还要小.可以预见,当 越来越大的时候, 的增长会越来越小.因此我们可以猜测, 的增长并不是无限的.
事实上,要想严格的证明这个极限是存在的,需要用到下面的定理:
单调收敛定理:单调有界实数列必有极限.
因此,我们只需要证明两个条件:数列 单调,且有界.
单调性的证明
由上面的计算可以知道,.
当 时,我们把 展开:
比较 和 的展开式的第 项(),注意到 对 恒成立,因此
而且 比 还多了一项
因此 ,故数列 单调递增.
有界性的证明
我们只需要证明数列 有上界.
根据上面 展开式 ,
所以可以得到 恒成立,即数列 有上界.
在完成了上面两个证明之后,我们知道,数列 的极限是 和 之间的某一个数,于是我们就把它定义为 :
回到前面的情景,这个结论告诉我们,即使我们每时每刻不停的存取,一年之后我们能取出的钱也不会超过三块钱.也就是说,在年增长率不变的情况下,即使是复利,增长也是有极限的.
利用夹逼定理,还可以证明:对于函数的极限,也有 .
先考虑 的情况;
我们令 ,注意到,,于是有
因此
因此,.
再考虑 的情况.
令 ,则
上面对于 的定义,比较容易理解,但是有一个缺点,就是计算比较麻烦,收敛速度非常慢.
我们知道,,但是 ,,,也就是说,算到第一亿项的时候,才精确到小数点后第7位.
显然,我们需要一个能够更快收敛到 的数列.
为了书写方便,这里我们引入无穷和的记号:
考虑数列 ,可以证明:.
先证明数列 收敛,且 ;
对任意的 ,根据上面的 式,
两边同时令 ,可得
根据单调收敛定理, 一定存在.
因此再令 ,可得
再证明 .
注意上面的 式,在对 进行放缩的时候,我们得到了
两边同时对 取极限,可以得到
这样,我们就得到了 的展开式:
用它来计算 的话,收敛速度比前面要快的多:
我们知道, 的一个重要性质就是 ,特别的,.我们也可以利用这一条性质来定义 :
若函数 ( 且 )在 处的切线斜率为 ,即 ,则 .
需要注意是,证明的过程用到了 的连续性.
证明 .
令 ,则 .
因此,.
这个定义的一个好处是,可以很容易地求出 的导数:
可以看到,上面我们用了三种不同的方法来定义 .虽然这些定义表面上看起来不一样,但它们是定义出来的 都是一样的.也就是说,这三种方法实质上是等价的.第一种方法有实际的解释,相对比较自然;第二种方法计算简便,而且易于拓展;而第三种方法则方便证明指数函数的分析性质.
参考资料:
而这个结论,我们可以推广到更一般的情况:
设 是一个有理系数多项式,、、 均为有理数, 且 为无理数,若 是方程 的根,则 也是方程 的根.
证明1:
设 , ,考虑
则 是一个有理系数多项式.我们对 和 应用大除法,可得
其中 且也是有理系数多项式,故可设 ,其中 、 都是有理数.代入 可得
即
因为 、、、 均为有理数, 为无理数,所以
又因为 ,可解得
因此 ,.所以
命题得证.
证明2:
考虑集合
其中 且 .显然,.
可以验证, 对于四则运算是封闭的.
我们可以在集合 中定义共轭运算:
可以验证,共轭运算具有如下性质:设 、,,则
设 ,其中 ,,则
因此,若 是 的根,则
即 也是方程 的根,命题得证.
注:证明 2 中,如果把 换成 , 换成 ,就是实系数方程的虚根成对定理的证明.
其中递推关系为 .这里的 是我们要考虑的数域,一般来说就是实数域 .这样的数列,我们称之为 阶递推数列.
对于 阶递推数列,我们需要 个初始值,才能够将数列完全确定下来.
我们最熟悉的等差数列和等比数列,都可以看成递推数列.
等差数列的递推关系为
等比数列的递推关系为
另外,还有一个可以看成递推数列的,就是已知数列的部分和.例如数列 的部分和为 ,则数列 的递推关系为
还有一个我们都知道的数列,就是斐波那契数列,
这是一个典型的二阶线性递推数列,在后面第五节,我们会讲如何来求数列 的通项公式.
实际上,我们可以对等差数列和等比数列进行推广.当相邻两项的差值或者比值不是定值,而是一个关于 的函数时,我们也可以仿照等差或等比的方法进行处理.例如数列 满足
则
或者,如果数列 满足
则
对于不是这两种形式的数列,我们也可以尝试通过换元等方法,把它们转换成上面两种形式.
在下一节中,我们将重点来看一下一阶常系数线性递推关系,看看如何把一个数列“变”成等差或者等比数列.
]]>.tex
文件,然后在主文件中使用 \include
命令来加载这些文档。为了保持根文件夹的干净,通常我会将这些文件放在若干个子文件夹中。这样在本地编译的时候,没有发现任何问题(我使用的是 VS Code + LaTeX Workshop,配置了 latexmk),但是当我进行远程编译测试的时候,却发现始终无法通过。
关于这个问题,网上众说纷纭,不过大致可以确定是写入权限的问题。在 LaTeX won’t include from other directories | The TeX FAQ 中,其中明确指出对于 对于父文件夹是没有写入权限的,但根据其中的描述,对于子文件夹,应该是没有问题的,这和我遇到的情况不符。
最终,我在 Common Mistakes that cause Automated Processing to Fail | arXiv e-print repository 中找到了和我一样的问题,在里面它明确提到,在它的编译设置下,使用 \include
加载子文件夹中的文件会报错,并给出了明确的例子:
1 | \input{file} %OK, does not create separate .aux file |
当我把 \include
改成 \input
之后,编译的确通过了,但是这并不能完全解决我的问题,因为我平时需要用到 \includeonly
功能,\include
命令对我来说时不可替代的。
为了找到问题的所在,接下来对我几种不同的编译设置进行了测试。
测试文件:
1 | \documentclass{article} |
1 | aaa |
测试结果如下:
latexmk -xelatex -interaction=nonstopmode -file-line-error main.tex
编译,成功;latexmk -xelatex -interaction=nonstopmode -output-directory=out main.tex
编译,成功(如果有其它错误也不会报错,但无法生成 pdf 文件);latexmk -xelatex -interaction=nonstopmode -file-line-error -output-directory=out main.tex
编译,失败;out/chaps
文件夹之后,使用 latexmk -xelatex -interaction=nonstopmode -file-line-error -output-directory=out main.tex
编译,成功。可以看出,自动编译失败的主要原因是,在第一遍编译的时候,可以创建 out
文件夹,但是无法创建 out/chaps
这个子文件夹,但是第二遍编译的时候就可以了。这应该是一个 bug 吧。
而在本地使用 LaTeX Workshop 编译时,应该是打上了补丁,就像我上面第4个测试一样,提前创建了文件夹,因此编译可以正常通过。
因此,最终的解决方法是,继续使用 \include
,在远程测试的时候,提前创建好所需的文件夹就可以了。
中易字库+微软雅黑
。这些字体在 Windows 系统上都默认安装好了,不需要额外安装字体就可以使用。但如果想要使用方正字体,即指定 fontset=founder
,则需要手动下载并安装方正字体在可以正常运行。在 中,预定义的方正字库设置如下:
字体族 | 标准字体 | 粗体 | 斜体/意大利体 |
---|---|---|---|
罗马 | 方正书宋_GBK | 方正小标宋_GBK | 方正楷体_GBK |
无衬线 | 方正细黑一_GBK | 方正黑体_GBK | |
打字机 | 方正仿宋_GBK |
同时,在 中还预定义了六种常用的中文字体:
字体命令 | 标准字体 | 粗体 |
---|---|---|
宋体 \songti | 方正书宋_GBK | 方正小标宋_GBK |
黑体 \heiti | 方正黑体_GBK | |
仿宋 \fangsong | 方正仿宋_GBK | |
楷书 \kaiti | 方正楷体_GBK | |
隶书 \lishu | 方正隶书_GBK | |
圆体 \youyuan | 方正细圆_GBK | 方正准圆_GBK |
所有这些字体都可以从方正字库官网中下载,需要注意的是,在下载时必须手动选择 简繁扩展 GBK
编码,否则则会默认选择 大陆简体 GB2312-80
编码。
这里面需要注意的是,方正字体中能够免费商用的只有方正书宋、方正黑体、方正仿宋、方正楷体这四种基本字体,其余的字体仅供个人非商业使用,否则需要购买商业授权。
所有可能用到的方正字体的下载链接如下:
之前尝试安装过 rsshub,不过后来转移到 Vercel 了。这次就想尝试安装一下 Nextcloud。
虽然我知道,直接用 docker 会更简单,不过既然 Nextcloud 以及在官方的源(我的系统是 Arch Linux)里了,就忍不住折腾一番。
需要用到的安装包:
1 | pacman -S mariadb php nextcloud php-intl php-fpm redis php-redis |
由于之前已经安装并配置了 nginx,这个就不用重新在安装了。
由于我用的文件系统是 btrfs,所以需要先禁用写时复制(CoW):
1 | btrfs subvolume create /var/lib/mysql |
然后运行数据库:
1 | mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql |
增强安全性:
1 | mysql_secure_installation |
限制只能本地访问:
1 | [mysqld] |
自动补全功能:
1 | [mysql] |
配置 Nextcloud 的数据库:
1 | CREATE DATABASE nextcloud DEFAULT CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci'; |
启用所需要的模块:
1 | [php] |
启用 redis:
1 | systemctl enable redis |
配置 php 扩展:
1 | extension=redis |
1 | [igbinary] |
在 nextcloud 的配置文件中启用 redis:
1 | 'memcache.distributed' => 'OCMemcacheRedis', |
在 php-fpm 添加 nextcloud 配置:
1 | [nextcloud] |
运行
1 | systemctl edit php-fpm.service |
编辑 php-fpm 服务:
1 | [Service] |
启用 php-fpm 服务:
1 | systemctl enable php-fpm.service |
我的域名是托管在阿里云,在 dns 解析中添加三级域名 nextcloud 解析,并申请 ssl 证书。
证书下载之后,上传到 /etc/nginx/ssl/
。
在 nginx 添加配置,基本是按照官方参考文件来的,只修改了 php-handler
、server_name
、ssl_certificate
和 root
:
1 | upstream php-handler { |
然后启用该配置:
1 | ln -s /etc/nginx/site-available/nextcloud.conf /etc/nginx/site-enabled/nextcloud.conf |
原来的 nginx 中已有配置:
1 | http { |
之后重启 nginx 服务:
1 | systemctl restart nginx |
在 nextcloud 的配置文件中添加:
1 | 'trusted_domains' => [ |
然后安装 nextcloud:
1 | occ maintenance:install --database mysql --database-name nextcloud --database-host localhost --database-user nextcloud --database-pass='<password>' --data-dir /var/lib/nextcloud/data |
然后就可以登录了!
在 nextcloud 软件包更新后,自动更新 nextcloud 数据库:
1 | mkdir -vp /etc/pacman.d/hooks |
参考:
2021年11月2日更新:
Notability 转为订阅制,每年80元,老用户仅获赠一年订阅期。
看来以后新的笔记,都要使用 GoodNotes 了。
2021年11月3日更新:
一天之后,Notability 顶不出压力了,改为承诺老用户已购买的功能始终可用。
在去年春季的时候,我写下了Notability 与 GoodNotes 在网课教学中的对比(2020版),比较了 Notability 和 GoodNotes 两个软件在使用投屏功能进行教学中各自有优点和缺点。
本以为上完暑假课时候,就不需要再上网课了,结果经历了今年年初疫情的反复,直到现在也还没有恢复线下上课。因此又不得不继续上网课。
目前一年过去了,两个软件都进行了大量的更新,例如,Notability 先后增加了投屏功能、工具收藏功能、复制背景功能,GoodNotes 更新了长按自动修正功能等,二者都已经把基本的功能补齐了。从开始各自都有一些不能容忍的问题,到基本上都能够胜任所有的教学内容,目前来看,两者只有一些细节的差异,以及个人喜好的影响。
因此,如果有新人想要尝试的话,只需要任意选择其中一个就可以了。
最近 Notability 大幅降价,我购买的时候是 「本体(含手写识别)」68元,后来又买了「数学识别」18元,一共86元;而现在只需要「本体」25元,「手写识别」6元,「数学识别」6元,一共37元。这样算下来比「GoodNotes」40元还要划算!
这可能是近几年最大幅度的一次降价了。
但是,毕竟还是两个相互竞争的软件,因此两者还是有一些差异性的功能。这里面在比较的时候,「优点」是指该软件有这个功能,而另外一个没有,而且是属于锦上添花的功能,即使没有也可以使用;而「痛点」则是指因为该功能的缺失导致软件使用起来很不方便,甚至会导致直接弃用该软件。
注意:两款软件都在不断更新,并且不断添加新的功能,因此后面所说的可能与您现在所用到的功能并不完全相同。请注意本文的更新日期。
Notability 现在新增了虚线和点线的功能,这个在讲几何画辅助线的时候非常好用。
从这个功能,可以看出,Notability 的官方是看到了疫情所导致的学生和老师对于电子化教学及学习的需求。
这点结合坚果云网盘,实现了可用的网络备份和导出的功能。
再结合坚果云的电脑端,可以方便地将写好的笔记同步到电脑中。
否则,就只有 Onedrive 可用了。
之前在没有添加这个功能的时候,Notability 切换笔的颜色的时候是比较麻烦的,每次切换颜色都至少要点2下才可以。而现在可以通过收藏功能,保存常用的笔的粗细、形状和颜色,方便切换。
而且,收藏的数量,也从最开始的8个,增加到了现在的12个,基本上满足了我的需要,90%的时间我都不需要再点进去切换颜色了。
Notability 能画的图形包括直线段、抛物线、多边形和椭圆,而 GoodNotes 还能画折线段。
这点在几何作图中非常有用,其中最为常见的一个场景就是标记直角。
在 GoodNotes 中,钢笔工具的压力敏感度和笔尖粗细都是可以调的,这大大增加了钢笔功能的可用性。
经过多次试验比较,我选择「压力敏感度」最小、「笔尖」25%的钢笔作为日常使用的笔画工具。
作为对比,Notability 只能使用粗细不变的笔画作为主要工具。
GoodNotes 支持在画完一个封闭图形之后,自动填充阴影。而且在擦掉图形之后,阴影还是会保留。这样就可以省去使用荧光笔涂满整个区域的麻烦,而且比荧光笔涂地要标准很多。
不过可惜的是,默认的阴影颜色太浅了,投屏之后几乎看不清,所以还是太实用。
这点对于上课来说其实没有什么影响,但是在备课的时候,可以用激光笔随便写画,就不用担心写乱了还得擦的麻烦。
如果导入的 PDF 是带目录的,则会转换为 GoodNotes 文件中的大纲,这在比较长的文件中跳转起来比较方便。
不过由于使用 GoodNotes 的时候都得做成 PPT,每讲一个 PPT 的话,其实也就不需要目录的。所以这个功能目前对于上课来说意义不大。
主要是可以批量删除页面。而在 Notability 中,只能一页一页的删。
最近,Notability 在投屏的时候有一个奇怪的 bug,就是直接打开一个文件投屏的时候,电脑上显示是黑的;但是如果我开分屏的话,就是同时打开两个文件,却可以正常地显示其中一个文件。
好在这对我来说影响不大,因为我一般是同时开两个文件,左边是提前备课用的教师版,右边是投屏书写的学生版。
Notability 的文件分级只有三层:分割栏-主题-文件。这个在我看来有些不够用。
因为我的 Notablility 里还有很多别的笔记,因此上课用的讲义我都放在同一个分割栏,这样实际能用的就只有两层了。因此我基本上是一期课占一个主题,然后里面放对应的讲义。但如果由一个课里有很多讲义(例如需要分讲次)那就麻烦了,这个时候我就得单独地把这个课列为一个主题。
好在,使用 Notability 不需要像 GoodNotes 那样,必须得做成 PPT 的格式,这样对于大部分的课程,每个课就只需要两个文件就足够了。因此即使把一期课中所有的讲义放到一起,也不会乱的分不清。
目前来看还没有什么问题,因为毕竟用的时间还比较短。如果时间长了的话,肯定会显得比较乱。
最近,不知道是因为适配最新的 iPadOS 有问题,还是笔记太多导致的问题,GoodNotes 在使用的时候经常卡死。 具体表现为还能够写字,但是橡皮不能使用。如果一段时间不管的话会闪退。而且再进来后会发现,最后写的那些其实并没有保存。
这个 bug 最近触发的频率非常高,几乎到了一天一次的地步。希望能够尽快修复。
如果直接把讲义投屏的话,会发现屏幕显示的和 iPad 上显示的不一样,因此会出现在 iPad 上写的正常,但是屏幕上已经超出边界,导致学生看不到的情况。
因此,使用 GoodNotes 如果用原始的学生版讲义不调格式的话,用起来就非常不方便。所以我在使用的 GoodNotes 的时候,都是提前调整好讲义的格式,一页只放一道题,做成类似 PPT 的形式。
具体的调整参数在上一篇文章中已经写了,这里就不再赘述了。
GoodNotes 只能同时显示3种不同的颜色,这个在实际使用时并不够。
我在讲几何题的时候一般至少会用到4种颜色,这就导致我需要经常切换颜色,非常的麻烦,操作起来也显得手忙脚乱。经常会出现刚切换了一个颜色结果又要切换回去的情况。
橡皮只有三种固定的大小,因此才擦除一些比较紧凑的图形的时候,经常会误擦掉其它的图形。这点 Notability 做的就比较好,使用最小的橡皮就可以解决这个问题了。
不过 GoodNotes 也不是没有解决问题的方法,主要的原理是当页面放大的时候,橡皮并不会跟着放大。因此如果需要擦一个小东西的话,可以先将整个屏幕放大,然后再擦掉。这点结合 GoodNotes 的投屏不显示缩放功能可以解决这个问题。
可以看出,GoodNotes 优点多,痛点也多,因此具体使用那个软件,主要是看 GoodNotes 的优点是否足够吸引人,以及能否容忍它的痛点。
上面说了这么多,其实对我上课影响最大的就是有两个,一个是 GoodNotes 的折线功能,另外一个是 GoodNotes 的投屏Bug。
因此,如果在课程里有涉及到初中平面几何的部分,我就使用 GoodNotes,然后提前做好 PPT。具体的调整参数在前一篇文章中有写出,这里就不再赘述。
如果整个一期课都没有上述内容的话,比如讲初中开始的代数部分,以及中后期的函数部分,以及高中的内容,我都用 Notability,这样一方面可以省去调整讲义的麻烦,另一方面 Notability 的工具用起来比 GoodNotes 要方便。
]]>要么是没有把数据文件和主题分离,还在修改主题中的文件(而且是旧版的文件,新版的主题结构和内容都有变化);要么是给出的代码还依赖 jQuery。
而新版的 NexT 主题除了 Fancybox 外,其它功能都已经不再依赖 jQuery 了。由于 Fancybox 和我的 WebP 检测代码冲突,所以我切换到了 medium-zoom,这样就不再引入 jQuery 了。
因此,网上找到的代码就不能拿过来直接用了。
这里主要需要修改的是 link.js
文件。
1 | . |
运行
1 | hexo new page links |
这会创建 source/links/index.md
文件。
文件示例:
1 | --- |
注意在 Front-Matter 里一定要有 type: links
。
这里我还关闭了侧边栏的目录。
所有友链的数据都放在 source/links/linklist.json
里,其格式为:
1 | [ |
其中 name
为网站的名字,site
为网址,avatar
为头像。
头像可以使用 Gravatar,这样可以保证始终可用的。
在 source/_data/body-end.njk
中,引入 link.js
:
1 | {% if page.type === 'links' %} |
其中 source/js/link.js
的内容为
1 | // 随机排列 |
创建 source/css/link.css
,其内容为(这个文件完全来自于网络):
1 | .links-content { |
在主题的配置文件(目前默认为 _config.next.yml
)中,添加
1 | menu: |
大功告成!
参考:
这里我们整理几种常见证明方法.
几何方法的好处是与初中锐角三角函数的内容联系紧密,但是缺点只对锐角(甚至是两角和为锐角)的情况成立,而且不好推广.
如图1
,
由矩形的对边相等可得
在 中, 于 , ,,如图2
,
有
即
于是
另外,也可以直接由张角定理得到同样的形式.
在上面的图2
中,根据正弦定理,有
即
注意
又有
于是有
在半径为 的圆的一个内接四边形 中,,如图3
,
根据托勒密定理,有
结合正弦定理可得
化简得
我们可以用弦图来证明勾股定理.在原始的弦图中,四个小三角形是全等的.我们可以对它做一下变形,把四个全等的三角形改成两组全等的三角形,这样形成的弦图就不是两个正方形了,而是矩形和菱形.
如图4
,计算面积可得
化简即可得到两角和的正弦公式.
如图5
,计算面积可得
化简即可得到两角和的正弦公式.
坐标方法的好处是容易推广到一般角.
如图6
,在平面直角坐标系 中,角 和角 的终边分别与单位圆交于点 、,则 ,
根据距离公式,
根据余弦定理,
于是有
如图7
,我们把上图中的 旋转到 ,则 ,
因此 , 点的坐标为 ,所以
得到了上一种方法同样的式子.
这种方法对比上一种方法的好处是避开了余弦定理.
在平面直角坐标系 中,角 和角 的终边分别与单位圆交于点 、,则 等于 或 ,或者和其中一个相差 .因此
我们看到,向量法的好处是不需要讨论 和 的情况,而且证明的过程非常简洁.
利用复数的指数形式和欧拉公式也可以很容易推出和角公式:
对比两边的实部和虚部就可以得到两角和的正弦和余弦公式.
参考资料:
当且仅当 时(当某 时,认为 )等号成立.
这个不等式称为柯西不等式.
柯西不等式由很多证明方法,这里我们介绍几种有代表性的方法.
在旧版的高中选修课本 4-5《不等式选讲》中,介绍的就是这种方法.
我们引入一个二次函数
配方可得
因此,考虑它的判别式,有
因此
这种方法的好处是,过程中只用到了配方法和二次函数的判别式,中学的学生对这两种技巧都比较熟悉.
证明一个和自然数 有关的命题 ,考虑数学归纳法是一种比较自然的想法.
我们考虑证明一个更强的结论:
这样可以避免负数的讨论.
当 时,
因此
不等式成立.
假设当 时,不等式成立,即
当 时,则要证
于是
不等式成立.这里第一个不等号用的是 的情形,第二个不等号用的是 的情形.
于是
实际上,归纳法的处理方法有很多种,这只是其中一种.
所谓正规化(Normalization),就是让 .
如果有 ,注意到
于是
对于不满足条件的 和 ,则可以对其进行正规化,令
则
由上面的推导可知
去掉分母就可以得到
事实上,正规化方法给了我们一个把加法不等式变成乘法不等式的方法.
由拉格朗日恒等式,
显然可得柯西不等式成立.
拉格朗日恒等式的证明:
我们借助含有参数的平均值不等式:
则
取 ,则
命题得证.
这是一个技巧性比较强的方法.
由于
第一行的对应是
这是顺序和;
第二行的对应是
这是乱序和.
由排序不等式可知,
考虑 中的向量 ,,两个向量的内积定义为点积:
则向量 的范数为
则柯西不等式等价于
这就是柯西不等式的向量形式.
柯西不等式的向量形式的证明有很多,有的和前面的方法本质上是一致的.
比如,可以构造
则 ,这个实际上和方法1是一样的.
又或者,由
可得
对其进行正规化,可以得到
这个实际上和方法3是一样的.
但是很明显,用内积的表述会简洁很多,而且还可以推广到其它内积的定义.
对于柯西不等式的内积形式,除了上面两种证明方法,还有一种完全不同的证明方法.这种证明方法和 Gram-Schmidt 正交化的思想有关.
向量 在 上的投影为 ,则向量 与向量 正交,即 .因此
所以
等号成立的条件为 ,即 与 共线.
柯西不等式作为数学中最重要的不等式之一,在很多领域都有应用.在上面这几种证明方法中,个人认为方法1是最容易理解的,而方法3是最简洁的,而方法8则是更一般化.
在给学生讲解的时候,应以方法1为主,有条件的话可以讲一下方法3.
参考资料:
这个公式的证明有很多,所需要的预备知识也不尽相同.
下面按照所用到的知识的难度,有浅到深,给出几种不同的证明方法.
本质上,这种方法就是割补法.
若 轴,如图1
,
则 ,直线 与 轴的交点为 ,所以
若 轴,如图2
,
设直线 与 轴的交点为 ,则
设直线 的解析式为 ,则
解得
所以
当 点不在线段 上的时候, 式依然是成立的,所以结论不变.
这种方法是利用向量的投影,来求出三角形的高.
如图3
,
向量 是由 逆时针旋转 得到的向量,所以 边上的高为 ,
所以
直接利用向量的点积,求出三角形的角.
将坐标带入,可得
利用向量的叉积或者混合积的几何意义,可以很容易地得到我们所需要的公式.
考虑空间坐标系 ,,,则
我们把三个点都放到平面 上,设 ,,,则
对于一般的 ,设点 ,,,则
所以
这种方法相当于把 沿向量 平移到了原点.
或者考虑空间坐标系 ,把三个点都放到平面 上,设点 ,,,则
由行列式的性质可知,这两个式子是等价的.
]]>在讲平面向量的时候,遇到了一个经典的题目:
已知点 为 内一点,求证:.
证明如下:如图,延长 交 于 点 ,则 ,
故 .
另外,因为 ,所以 ,
故 ,移项后命题得证.
这个结论因为它的图形长得像奔驰的标志,被称为“奔驰定理”.
这个名字最早的出处不详,但实际上,这对应的就是三角形的“重心坐标”.
对 所在平面内任意一点 ,如果存在不全为零的实数 ,,,使得
对平面内任意一点 成立,则称 为点 相对于 的重心坐标.
显然,重心坐标并不是唯一的, 也是点 相对于 的重心坐标.
为了保证唯一性,我们可以进行对其正规化,取 ,则 ,此时称 为其正规化(重心)坐标.
对 所在平面内任意一点 ,根据平面向量基本定理,存在唯一的实数对 ,使得 .因此
取 即可.注意这已经是正规化坐标.
当点 位于 内部的时候,,故 ,也就是三项均是正数.
对于 外的情况,可以参考下图:
在平面直角坐标系 中,设 ,,,,点 相对于 的重心坐标为 ,其中 .
根据定义,,
因此
根据 Cramer 法则,
这里的面积指的是三角形的有向面积,正负与三个点的位置关系有关.
所以, 就是点 相对于 的重心坐标,这对应的就是“奔驰定理”中的三个系数.
实际上,根据“奔驰定理”,
移项得
也可以直接得到,当点 在 内部的时候,它相对于 的重心坐标为 .
由于三角形的重心坐标和面积有关系,因此也被称为面积坐标.
考虑平面内三个质点 、、,它们的质量分别为 、、,则该质心系的质心相对于 的重心坐标恰好为 .
下表列出了几个常见的三角形中心的重心坐标.
名称 | 重心坐标 |
---|---|
重心 | |
内心 | |
外心 | |
垂心 | |
旁心 |
其它特殊点的重心坐标,可以查看 ETC,里面每个点下面列出的 Barycentrics
就是该点的重心坐标.
事实上,重心坐标的定义可以推广到 维向量空间,甚至是仿射空间.
考虑 维仿射空间 中的仿射无关的 个点 ,即 是一个 维单形的顶点,则对于任意一点 ,存在不全为零的实数 ,使得
对于任意一点 成立,则称 为点 相对于 的重心坐标.
重心坐标是一种齐次坐标,在仿射变换下保持不变.
和 都是点 相对于 的重心坐标的充要条件是,存在非零常数 ,使得对于任意的 ,有 .
类似的,也可以对其进行正规化,取 即可.
]]>我做这个练习的主要目的是为了熟悉 Mathematica 的编程和函数,而不是练习算法,因此会充分利用 Mathematica 的内置函数和特性,尽量少造轮子.
判断一个数是否是 3 的倍数或者是 5 的倍数.
1 | Select[Range[999], Mod[#, 3] == 0 || Mod[#, 5] == 0 &] // Total |
后来发现,Mathematica 有内置的 Divisible
函数,比使用 Mod
函数要快 20%~30%.
1 | Select[Range[999], Divisible[#, 3] || Divisible[#, 5] &] // Total//Timing |
四百万以下的偶 Fibonacci 数相加.
第一种方法是选一个适当的上界:
1 | Select[Fibonacci /@ Range[3, 50, 3], # <= 4000000 &] // Total |
第二种是常规的累加:
1 | Module[{n = 3, res = 0, t = Fibonacci[3]}, |
第三种是先找到满足条件的最大的 Fibonacci 数的指针,再相加:
1 | Sum[Fibonacci[i], {i, 3, NestWhile[(# + 1) &, 1, Fibonacci[#] <= 4*^6 &], 3}] |
时间上,第一种 < 第二种 < 第三种.
但是,如果第一种方法的上界取 100,则变为 第二种 < 第一种 < 第三种.
在网上见到的一种做法,时间介于第二种和第三种之间:
1 | Last[{1, 2, 3, 0} //. |
这种方法利用了 //.
(重复替换)来进行迭代,/;
(条件)表示终止条件.
受此启发,我重写了一个更快的算法.
实际上,我们可以稍微对 Fibonacci 的递推公式做一下推导:
于是上面的做法可以改写成:
1 | Last[{0, 2, 0} //. |
这个算法的速度比第二种稍快一些.
类似的想法,也可以用 NestWhile
函数实现:
1 | NestWhile[{#[[1]] + 3, Fibonacci[#[[1]]], #[[3]] + #[[2]]} &, |
但是这种方法比上面一种方面慢了一倍,甚至比第三种还要慢,感觉是被 Part
函数拖慢了速度.
找最大的素因子.
1 | First /@ FactorInteger[600851475143] // Max |
两个三位数相乘得到的最大回文数.
1 | Table[i*j, {i, 100, 999}, {j, 100, i}] // Flatten // ReverseSort // |
前面的列表也可以用 Tuples
生成,不过速度慢了近一倍:
1 | Times @@@ Tuples[Range[100, 999], 2] // ReverseSort // |
最小公倍数.
1 | LCM @@ Range[20] |
平方和与和平方的差.
1 | Sum[i, {i, 100}]^2 - Sum[i^2, {i, 100}] |
如果先把求和公式展开,再带入数值,则会快一些:
1 | Expand[Sum[n, {n, N}]^2 - Sum[n^2, {n, N}]] /. N -> 100 |
不用 Expand
函数会更快一些,时间能缩减到第一种算法的一半:
1 | Sum[n, {n, N}]^2 - Sum[n^2, {n, N}] /. N -> 100 |
第 10001 个素数.
1 | Prime[10001] |
连续 13 位数字乘积的最大值.
1 | t = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450; |
如果先把含有 0
的部分删除,速度会快一倍以上:
1 | Times @@@ ToExpression /@ Select[! MemberQ[#, "0", 2] &] @ |
勾股方程.
1 | sol = Solve[{a^2 + b^2 == c^2, a + b + c == 1000, 0 < a < b < c}, {a, b, c}, Integers]; |
素数求和.
1 | Sum[Prime[i],{i,PrimePi[2*^6]}] |
直接用 Prime
函数的话,耗时 14 秒.
改用 PrimeQ
函数进行筛选的话,则只需要 0.8 秒:
1 | Range[2*^6] // Select[PrimeQ] // Total |
方阵中横、竖、斜连续四个数字乘积的最大值.
1 | t = "08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 \n |
三角数的因数个数.
1 | Module[{n = 1, t}, |
受第2题启发,也可以用 NestWhile
函数来写,不过速度稍微慢一点。
1 | NestWhile[(# + 1) &, 1, DivisorSigma[0, # (# + 1)/2] <= 500 &] // |
一百个整数相乘.
1 | t = "37107287533902102798797998220837590246510135740250 \n 46376937677490009712648124896970078050417018260538 \n 74324986199524741059474233309513058123726617309629 \n 91942213363574161572522430563301811072406154908250 \n 23067588207539346171171980310421047513778063246676 \n 89261670696623633820136378418383684178734361726757 \n 28112879812849979408065481931592621691275889832738 \n 44274228917432520321923589422876796487670272189318 \n 47451445736001306439091167216856844588711603153276 \n 70386486105843025439939619828917593665686757934951 \n 62176457141856560629502157223196586755079324193331 \n 64906352462741904929101432445813822663347944758178 \n 92575867718337217661963751590579239728245598838407 \n 58203565325359399008402633568948830189458628227828 \n 80181199384826282014278194139940567587151170094390 \n 35398664372827112653829987240784473053190104293586 \n 86515506006295864861532075273371959191420517255829 \n 71693888707715466499115593487603532921714970056938 \n 54370070576826684624621495650076471787294438377604 \n 53282654108756828443191190634694037855217779295145 \n 36123272525000296071075082563815656710885258350721 \n 45876576172410976447339110607218265236877223636045 \n 17423706905851860660448207621209813287860733969412 \n 81142660418086830619328460811191061556940512689692 \n 51934325451728388641918047049293215058642563049483 \n 62467221648435076201727918039944693004732956340691 \n 15732444386908125794514089057706229429197107928209 \n 55037687525678773091862540744969844508330393682126 \n 18336384825330154686196124348767681297534375946515 \n 80386287592878490201521685554828717201219257766954 \n 78182833757993103614740356856449095527097864797581 \n 16726320100436897842553539920931837441497806860984 \n 48403098129077791799088218795327364475675590848030 \n 87086987551392711854517078544161852424320693150332 \n 59959406895756536782107074926966537676326235447210 \n 69793950679652694742597709739166693763042633987085 \n 41052684708299085211399427365734116182760315001271 \n 65378607361501080857009149939512557028198746004375 \n 35829035317434717326932123578154982629742552737307 \n 94953759765105305946966067683156574377167401875275 \n 88902802571733229619176668713819931811048770190271 \n 25267680276078003013678680992525463401061632866526 \n 36270218540497705585629946580636237993140746255962 \n 24074486908231174977792365466257246923322810917141 \n 91430288197103288597806669760892938638285025333403 \n 34413065578016127815921815005561868836468420090470 \n 23053081172816430487623791969842487255036638784583 \n 11487696932154902810424020138335124462181441773470 \n 63783299490636259666498587618221225225512486764533 \n 67720186971698544312419572409913959008952310058822 \n 95548255300263520781532296796249481641953868218774 \n 76085327132285723110424803456124867697064507995236 \n 37774242535411291684276865538926205024910326572967 \n 23701913275725675285653248258265463092207058596522 \n 29798860272258331913126375147341994889534765745501 \n 18495701454879288984856827726077713721403798879715 \n 38298203783031473527721580348144513491373226651381 \n 34829543829199918180278916522431027392251122869539 \n 40957953066405232632538044100059654939159879593635 \n 29746152185502371307642255121183693803580388584903 \n 41698116222072977186158236678424689157993532961922 \n 62467957194401269043877107275048102390895523597457 \n 23189706772547915061505504953922979530901129967519 \n 86188088225875314529584099251203829009407770775672 \n 11306739708304724483816533873502340845647058077308 \n 82959174767140363198008187129011875491310547126581 \n 97623331044818386269515456334926366572897563400500 \n 42846280183517070527831839425882145521227251250327 \n 55121603546981200581762165212827652751691296897789 \n 32238195734329339946437501907836945765883352399886 \n 75506164965184775180738168837861091527357929701337 \n 62177842752192623401942399639168044983993173312731 \n 32924185707147349566916674687634660915035914677504 \n 99518671430235219628894890102423325116913619626622 \n 73267460800591547471830798392868535206946944540724 \n 76841822524674417161514036427982273348055556214818 \n 97142617910342598647204516893989422179826088076852 \n 87783646182799346313767754307809363333018982642090 \n 10848802521674670883215120185883543223812876952786 \n 71329612474782464538636993009049310363619763878039 \n 62184073572399794223406235393808339651327408011116 \n 66627891981488087797941876876144230030984490851411 \n 60661826293682836764744779239180335110989069790714 \n 85786944089552990653640447425576083659976645795096 \n 66024396409905389607120198219976047599490197230297 \n 64913982680032973156037120041377903785566085089252 \n 16730939319872750275468906903707539413042652315011 \n 94809377245048795150954100921645863754710598436791 \n 78639167021187492431995700641917969777599028300699 \n 15368713711936614952811305876380278410754449733078 \n 40789923115535562561142322423255033685442488917353 \n 44889911501440648020369068063960672322193204149535 \n 41503128880339536053299340368006977710650566631954 \n 81234880673210146739058568557934581403627822703280 \n 82616570773948327592232845941706525094512325230608 \n 22918802058777319719839450180888072429661980811197 \n 77158542502016545090413245809786882778948721859617 \n 72107838435069186155435662884062257473692284509516 \n 20849603980134001723930671666823555245252804609722 \n 53503534226472524250874054075591789781264330331690"; |
Collatz 猜想(3n+1猜想),找到一百万以下步骤最多的数字.
1 | Table[NestWhileList[If[EvenQ[#], #/2, 3 # + 1] &, n, # != 1 &] // |
未经优化,计算耗时3分半.
格点路径.
1 | Binomial[20 + 20, 20] |
计算各位数字和.
1 | DigitCount[2^1000]*{1, 2, 3, 4, 5, 6, 7, 8, 9, 0} // Total |
直接使用 IntegerDigits
函数会更快一些.
1 | Total@IntegerDigits[2^1000] |
数字转换为英文,计算单词总长度.
1 | (** 获取对应数字的英文 **) |
Mathematica 有 IntegerName
函数可以用,但是没有 and
连接词.
最大路径和.
1 | t = "75\n |
计算每月1日星期日的个数.
1 | (** 获得该月的天数 **) |
开始手写了判断星期的矩阵,后来发现有内置的 DayName
函数可以用:
1 | (** 直接使用内置 DayName 函数 **) |
阶乘的数字和.
1 | IntegerDigits@Factorial[100] // Total |
相亲数.
1 | d[n_] := DivisorSigma[1, n] - n; |
姓名得分.
1 | names = Import["attachments/p022_names.txt", "CSV"] // Flatten // Sort; |
不能写成两个盈数之和的数.
1 | AbundantQ[n_] := DivisorSigma[1, n] > n + n; |
用时1分钟.
字典序排列.
1 | Permutations@{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}~Part~1000000 // FromDigits |
一千位的 Fibonacci 数.
1 | Module[{n=1}, |
1 | NestWhile[(# + 1) &, 1, IntegerLength@Fibonacci@# < 1000 &] |
两者用时相同.
]]>所以在这里我们对一些常用的符号做一些总结。
20211014 更新:关于 Mathematica 的系统的介绍,可以看清华大学刘思齐教授在 B 站的视频 北京某高校《Mathematica及其应用》 (共八讲) (已完结)
我们知道,在数学中,我们很多时候习惯使用中置运算符,而计算机科学一般都是使用前置运算符,因此在 Mathematica 中,对于各种运算符都给了不同的符号。
1 | f @ x |
需要注意的是,后置运算符 //
的运算优先级较低,例如 1+x//f
表示的是 f[1+x]
,而不是 1+f[x]
,这点在使用的时候需要注意,必要的时候可以加小括号。
对于有多个参数的函数,可以使用中置运算符:
1 | x~f~y~f~z |
这种形式在连接列表(~Join~
)、连接字符串(<>
)等时候比较常见。
注意:仅当函数 f 有 Flat 属性时才可以这么用。
在函数式编程中,Map
、Apply
是两个非常重要的函数,因此 Mathematica 专门规定了简写的符号。
Map
函数:
1 | f /@ {a, b, c} |
注意,Map
函数不仅仅可以作用在列表上,还可以作用在表达式上
1 | Map[f, a + b + c] |
还有一个不太常用的符号 //@
,表示的是 MapAll
函数:
1 | f //@ {{a, b}, {c, d}, {x, y}} |
Apply
函数:
1 | f @@ {a, b, c} |
另外,Apply
函数还有一种简写形式 @@@
,表示在第 1 层应用函数(@@
默认是在最外层,也就是第 0 层)。
注意下面三个符号的不同点:
1 | f @@ {{a, b}, {c, d}, {x, y}} |
在使用 Map
和 Apply
函数的时候,一定要注意列表的层数,必要时需要指定层数来使用。
Mathematica 中没有 Reduce
函数,可以视情况分别使用 FoldList
、ComposeList
、NestList
等函数。
Mathematica 中也没有 Zip
函数,可以视情况分别使用 Thread
、MapThread
、MapIndexed
等函数。
1 | (x ⟼ x^2) /@ Range[10] |
&
结尾表示一个匿名函数,其中 #1
(Slot[1]
)、#2
(Slot[2]
)等表示参数。#1
可简写为 #
,#0
(Slot[0]
) 则表示函数本身。
##
(即##1
、SlotSequence[]
)表示所有参数,##k
(SlotSequence[k]
) 表示从第 k 个开始后面的参数。
常见的用法比如定义谓词函数:
1 | Select[{1, -1, 2, -2, 3, -3}, # >= -1 &] |
传递函数参数:
1 | (* 牛顿法 *) |
等等。
下面是函数复合的不同表示方法,其中 @*
表示左复合,/*
表示右复合。特别要注意其中的小括号。
1 | f@*g@*h @@ {x, y, z} |
这部分和其它语言类似,&&
(或 ∧
)表示且,||
(或 ∨
)表示或,!
(或 ¬
)表示非(否定)。
%
表示上一个结果,%%
表示倒数第二个结果,%%...%
(k 次)表示倒数第 k 次结果,%n
表示第 n 次计算的结果。
这部分我用的不多,主要是方程的解会以这种形式给出。->
表示转换规则,使用 /.
可以应用规则。
1 | Solve[{x^2 + y == 5, x - y == 1}, {x, y}] |
其它的还有字符串的模式匹配等等。
参考资料:
命令:\tkzDefLine[<options>](A,B) or (A,B,C) \tkzGetPoints{P}{Q} or \tkzGetPoint{P}
描述 | 默认长度 | 选项 |
---|---|---|
的垂直平分线 | 正、 | 默认,或者 mediator |
过 的垂线 | perpendicular=through M 或 orthogonal=through M | |
过 的平行线 | . | parallel=through M |
的角平分线 | 很长,建议 使用 normed | bisector |
的邻补角 的平分线 | 很长,建议 使用 normed | bisector out |
选项:变换系数 | K=1 | |
选项:正交化 | normed |
描述 | 命令 |
---|---|
过 上点 的切线 | \tkzDefTangent[at=A](O) \tkzGetPoint{P} |
过 外点 的切线 、 | \tkzDefTangent[from=A](O, K) \tkzGetPoints{P}{Q} 或 \tkzDefTangent[from with R=A](O, r cm)\tkzGetPoints{P}{Q} |
命令:\tkzDefTriangle[<options>](A,B) \tkzGetPoint{C}
种类 | 选项 |
---|---|
已知两个角(,) | two angles=α and β |
等边三角形 | equilateral |
特殊直角三角形(,) | half |
等腰直角三角形(,) | isosceles right |
勾股三角形() | pythagore 或 pythagoras 或 egyptian |
含有 的直角三角形(,) | school |
黄金三角形(,) | gold |
黄金三角形(,) | euclid |
黄金矩形的一半(,) | golden |
胡夫三角形() | cheops |
选项:给出关于 的对称点 | swap |
命令:\tkzDefSpcTriangle[<options>, name=M_](A,B,C){A,B,C}
,新三角形的三个顶点依次为 、、,
描述 | 对应的「心」 | 选项 |
---|---|---|
内心 | in 或 incentral | |
旁心三角形 | ex 或 excentral | |
内切点三角形 | Gergonne 点 | intouch 或 contact |
旁切点三角形 | Nagel 点 | extouch |
中点三角形 | 重心 | centroid 或 medial |
垂足三角形 | 垂心 | orthic |
九点圆和旁切圆切点三角形 | feuerbach | |
欧拉三角形(由顶点与垂心的中点构成) | euler | |
外接圆外切三角形 | tangential | |
类似中线的交点三角形 | 类似重心 | symmedial |
选项:名称 | name=... |
图形 | 命令 |
---|---|
正方形( 为边) | \tkzDefSquare(A,B) \tkzGetPoints{C}{D} |
矩形( 为对角线) | \tkzDefRectangle(A,C) \tkzGetPoints{B}{D} |
平行四边形 | \tkzDefParallelogram(A,B,C) \tkzGetPoint{D} |
黄金矩形() | \tkzDefGoldRectangle(A,B) \tkzGetPoints{C}{D} |
命令:\tkzDefRegPolygon[<options>](A,B)
描述 | 选项 |
---|---|
第一个字母为中心(默认) | center |
两个字母为相邻顶点 | side |
边数 | sides=5 |
顶点命名(、、…) | name=P |
绘制一条直线:\tkzDrawLine[<options>](A,B)
绘制多条直线:\tkzDrawLines[<options>](A,B C,D ...)
自定义直线的样式:\tkzSetUpLine[<options>]
样式 | 默认选项 |
---|---|
样式 | style=solid (或 dashed 、densely dashed 、dotted 、densely dotted ) |
粗细 | line width=0.4pt |
颜色 | color=black |
延长 | add= .2 and .2 |
绘制一条线段:\tkzDrawSegment[<options>](A,B)
(相当于 \draw (A)--(B)
)
绘制多条线段:\tkzDrawSegments[<options>](A,B C,D ...)
命令:\tkzDrawTriangle[<options>](A,B) \tkzGetPoint{C}
命令:\tkzDrawSquare[<options>](A,B) \tkzGetPoints{C}{D}
命令:\tkzDrawGoldRectangle[<options>](A,B) \tkzGetPoints{C}{D}
命令:\tkzDrawPolygon[<options>](A,B,C,...)
命令:\tkzDrawPolySeg[<options>](A,B,C,...)
命令:\tkzFillPolygon[<options>](A,B,C,...)
命令:\tkzLabelLine[<options>](A,B){<text support tex>}
描述 | 选项 |
---|---|
相对位置 | pos=.5 |
位置 | above/below + left/right |
颜色 | black |
标记一条线段:\tkzLabelSegment[<options>](A,B)
标记多条线段:\tkzLabelSegments[<options>](A,B C,D ...)
选项和直线相同.
标记一条线段:\tkzMarkSegment[mark=<mark option>, <other options>](A,B)
标记多条线段:\tkzMarkSegments[mark=<mark option>, <other options>](A,B C,D ...)
符号 | 标记选项 |
---|---|
部分字母 | o 、s 、x 、z |
oo | |
直竖线 | ` |
斜竖线 | `s |
描述 | 其它选项 |
---|---|
相对位置 | pos=.5 |
大小 | size=4pt |
颜色 | black |
2021年11月2日更新:
Notability 转为订阅制,每年80元,老用户仅获赠一年订阅期。
看来以后新的笔记,都要使用 GoodNotes 了。
2021年11月3日更新:
一天之后,Notability 顶不出压力了,改为承诺老用户已购买的功能始终可用。
由于新冠疫情的原因,从寒假后半段、到整个春季,以及预计暑假所有的课程,都采取线上教学的模式。
由于我已经有了 iPad Pro,因此我直接使用苹果投屏来代替手写板,进行网上教学。
对比教学软件(ClassIn)所提供的黑板,iPad 上的软件所提供的手写功能更好用,也可以直接在讲义或者 PPT上进行书写,比直接在软件里写要舒服得多。
当然,投屏不是没有限制。由于长宽比的原因,投屏的时候,投屏无法占满教学窗口的所有内容,两边会有很大的黑框,造成了很大的浪费。
这带来的一个后果就是,如果要把题目做成 PPT 的形式(我一般是使用 PDF 格式,因为不需要做动画),需要设计好纸张尺寸的大小。
经过多次试验,在 Word 中,把纸张大小设为 18cm×10cm,页边距上下各 0.2cm,左右各 0.5cm,这样直接把讲义里的题目复制进去(5号字),再转换成 PDF,大小是比较合适的。
每页一道题,在可以保证学生看得清楚题目的同时,也有足够的空间来写板书。
在选择笔记软件的时候,我同时试用了两款经典的笔记软件:Notability 和 GoodNotes。(也因为我只买了这两个软件。)这两个软件有各自独特的优点,也有各自的痛点。
我这里只考虑在网课教学这一个用途下的对比,因此一些强大但是无用的功能(比如录音)在这里不做考虑。
注意:两款软件都在不断更新,并且不断添加新的功能,因此后面所说的可能与您现在所用到的功能并不完全相同。请注意本文的更新日期。
例如,就在我使用它们上课的这几个月间,Notability 添加了投屏区域和激光笔功能,导致我从完全使用 GoodNotes 转换到目前以使用 Notability 为主。(毕竟从一开始,我就是 Notability 党)
在最开始上课的时候,由于 Notability 还不支持投屏区域功能,因此只能使用 GoodNotes,恰巧这个时候有好几个班都在讲几何,因此体会最深的就是每次画辅助线的时候都要切换工具,画完之后还要切换回来,非常麻烦。而且它的自动校正并不准确,而且在画完之后不支持调整,导致一条线有时需要画好几遍才能画得比较准确。
因此在暑假开课的时候,我终于可以切换到了 Notability,但是也带了各种不方便,上面列举的所有痛点,都是我在讲课的时候遇到的。这里面影响最大的就是添加同类型页面非常麻烦。因为几何题目的过程较长,一页的板书写不下,所以我得提前复制好新的页面,否则在讲解题目的时候再复制,就会非常影响讲课的节奏。(但我又经常忘了。。。)
不得不说,习惯了 GoodNotes 添加页面的快捷之后,再回到 Notability,我到现在都没法适应。
上面说的「比较麻烦」和「非常麻烦」,都是已经到了影响教学节奏的程度。
当我的学生看到我讲题的中间突然停止了一下,基本上就是出了这些问题。
而讲代数部分的话,两者区别不大,唯一 Notability 比 GoodNotes 强的地方大概就是可以画比较直的长分数线吧。
关于颜色切换部分,我补充一点。如果仅仅使用 3 个颜色就够的话,GoodNotes 的切换方式要快的多;但是,如果使用的颜色更多的话,反而是 Notability 的切换方式更加顺畅。在讲比较复杂的几何题的时候,这点体现得尤为明显。
因此,仅从书写体验来看,Notability 要比 GoodNotes 强太多,特别是讲几何题的时候。
而从综合体验上来看,则是 GoodNotes 完胜。
只要有几何内容,那么一定使用 Notability。 讲初中几何的话还是用 GoodNotes 比较方便。
如果只讲代数内容,那就看当时的心情吧。不过我更喜欢 Notability 里面书写的感觉,因此继续用 Notability 的几率会更大一点吧。
]]>