From b2fb901612451632583937114bbe74ae473456f3 Mon Sep 17 00:00:00 2001 From: 423A35C7 <609514299@qq.com> Date: Mon, 2 Sep 2024 17:47:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=89=80=E6=9C=89LaTeX?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 操作系统/作业/mypreamble.tex | 25 + 操作系统/作业/mysubpreamble.tex | 10 + 操作系统/作业/全部作业.tex | 10 + 操作系统/作业/第三章作业.tex | 204 ++++++++ 操作系统/作业/第二章作业.tex | 283 +++++++++++ 操作系统/作业/第五六章作业.tex | 106 +++++ 操作系统/作业/第四章作业.tex | 83 ++++ 操作系统/实验报告/Lab1.tex | 65 +++ 操作系统/实验报告/Lab2.tex | 156 +++++++ 操作系统/实验报告/Lab3.tex | 113 +++++ 操作系统/实验报告/Lab4.tex | 295 ++++++++++++ 操作系统/实验报告/Lab5.tex | 130 ++++++ 操作系统/实验报告/Lab67.tex | 298 ++++++++++++ 操作系统/实验报告/mypreamble.tex | 115 +++++ 数字逻辑及实验/作业/mypreamble.tex | 101 ++++ 数字逻辑及实验/作业/全部作业.tex | 18 + 数字逻辑及实验/作业/实验报告/mypreamble.tex | 95 ++++ 数字逻辑及实验/作业/实验报告/实验2.tex | 178 +++++++ 数字逻辑及实验/作业/实验报告/实验3.tex | 110 +++++ 数字逻辑及实验/作业/实验报告/实验4.tex | 86 ++++ 数字逻辑及实验/作业/实验报告/实验5.tex | 191 ++++++++ 数字逻辑及实验/作业/实验报告/实验6.tex | 59 +++ 数字逻辑及实验/作业/实验报告/实验7.tex | 78 ++++ 数字逻辑及实验/作业/实验报告/实验报告模板.tex | 87 ++++ 数字逻辑及实验/作业/第一章作业-订正.tex | 274 +++++++++++ 数字逻辑及实验/作业/第一章作业.tex | 274 +++++++++++ 数字逻辑及实验/作业/第三章作业.tex | 31 ++ 数字逻辑及实验/作业/第五章作业.tex | 263 +++++++++++ 数字逻辑及实验/作业/第四章作业.tex | 330 +++++++++++++ 数据结构/作业/10213903403第一章作业.tex | 57 +++ 数据结构/作业/10213903403第七章作业.tex | 58 +++ 数据结构/作业/10213903403第三章作业.tex | 107 +++++ 数据结构/作业/10213903403第二章作业.tex | 56 +++ 数据结构/作业/10213903403第五章作业.tex | 89 ++++ 数据结构/作业/10213903403第八章作业.tex | 63 +++ 数据结构/作业/10213903403第六章作业.tex | 78 ++++ 数据结构/作业/10213903403第四章作业.tex | 65 +++ 数据结构/作业/mypreamble.tex | 75 +++ 数据结构/作业/使用示例.tex | 14 + 数据结构/作业/实验报告模板.tex | 87 ++++ 数理统计/作业/mypreamble.tex | 53 +++ 数理统计/作业/mysubpreamble.tex | 6 + 数理统计/作业/全部作业.tex | 22 + 数理统计/作业/期中考试.tex | 264 +++++++++++ 数理统计/作业/第一周作业.tex | 175 +++++++ 数理统计/作业/第七周作业.tex | 136 ++++++ 数理统计/作业/第三周作业.tex | 92 ++++ 数理统计/作业/第九周作业.tex | 297 ++++++++++++ 数理统计/作业/第二周作业.tex | 299 ++++++++++++ 数理统计/作业/第五六周作业.tex | 6 + 数理统计/作业/第五周作业.tex | 216 +++++++++ 数理统计/作业/第六周作业.tex | 268 +++++++++++ 数理统计/作业/第十三周作业.tex | 231 +++++++++ 数理统计/作业/第十二周作业.tex | 300 ++++++++++++ 数理统计/作业/第十五周作业.tex | 168 +++++++ 数理统计/作业/第十四周作业.tex | 189 ++++++++ 数理统计/作业/第四周作业.tex | 183 ++++++++ 概率论/mypreamble.tex | 55 +++ 概率论/全部作业.tex | 18 + 概率论/单元作业1.tex | 159 +++++++ 概率论/单元作业2.tex | 198 ++++++++ 概率论/单元作业3.tex | 168 +++++++ 概率论/单元作业4.tex | 228 +++++++++ 概率论/单元作业5.tex | 239 ++++++++++ 概率论/单元作业6.tex | 156 +++++++ 深度学习/实验/Retrieval_task/实验报告.tex | 110 +++++ 深度学习/实验讲解/lab4.tex | 441 ++++++++++++++++++ 离散数学/作业/mypreamble.tex | 40 ++ 离散数学/作业/全部作业.tex | 24 + 离散数学/作业/第一周作业.tex | 204 ++++++++ 离散数学/作业/第七周作业.tex | 79 ++++ 离散数学/作业/第三周作业.tex | 206 ++++++++ 离散数学/作业/第二周作业.tex | 201 ++++++++ 离散数学/作业/第五周作业.tex | 125 +++++ 离散数学/作业/第八周作业.tex | 211 +++++++++ 离散数学/作业/第十三周作业.tex | 119 +++++ 离散数学/作业/第十二周作业.tex | 101 ++++ 离散数学/作业/第十五周作业.tex | 192 ++++++++ 离散数学/作业/第十六周作业.tex | 67 +++ 离散数学/作业/第十周作业.tex | 205 ++++++++ 离散数学/作业/第十四周作业.tex | 93 ++++ 离散数学/作业/第四周作业.tex | 80 ++++ 离散数学/作业/课程项目.tex | 316 +++++++++++++ 离散数学/废稿.tex | 191 ++++++++ 网络安全基础/实验报告/mypreamble.tex | 109 +++++ 网络安全基础/实验报告/实验一.tex | 38 ++ 网络安全基础/实验报告/实验七.tex | 55 +++ 网络安全基础/实验报告/实验三.tex | 49 ++ 网络安全基础/实验报告/实验九.tex | 51 ++ 网络安全基础/实验报告/实验二.tex | 37 ++ 网络安全基础/实验报告/实验五.tex | 58 +++ 网络安全基础/实验报告/实验八.tex | 67 +++ 网络安全基础/实验报告/实验六.tex | 52 +++ 网络安全基础/实验报告/实验十.tex | 64 +++ 网络安全基础/实验报告/实验十一.tex | 76 +++ 网络安全基础/实验报告/实验十二.tex | 86 ++++ 网络安全基础/实验报告/实验四.tex | 78 ++++ 计算机系统结构/作业/mypreamble.tex | 68 +++ 计算机系统结构/作业/mysubpreamble.tex | 5 + 计算机系统结构/作业/全部作业.tex | 12 + 计算机系统结构/作业/第一章作业.tex | 178 +++++++ 计算机系统结构/作业/第三章作业.tex | 46 ++ 计算机系统结构/作业/第二章作业.tex | 249 ++++++++++ 计算机系统结构/作业/第五章作业1.tex | 363 ++++++++++++++ 计算机系统结构/作业/第五章作业2.tex | 245 ++++++++++ 计算机系统结构/作业/第四章作业.tex | 288 ++++++++++++ 计算机网络/Chapter_1_HW.tex | 164 +++++++ 计算机网络/Chapter_2_HW.tex | 194 ++++++++ 计算机网络/Chapter_3_HW.tex | 229 +++++++++ 计算机网络/Chapter_4_HW.tex | 234 ++++++++++ 计算机网络/Chapter_5_HW.tex | 233 +++++++++ 计算机网络/mypreamble.tex | 144 ++++++ 计算机网络/mysubpreamble.tex | 6 + 计算机网络/全部作业.tex | 15 + 随机过程/作业/mypreamble.tex | 34 ++ 随机过程/作业/mysubpreamble.tex | 6 + 随机过程/作业/全部作业.tex | 26 ++ 随机过程/作业/第一周作业.tex | 161 +++++++ 随机过程/作业/第七周作业.tex | 132 ++++++ 随机过程/作业/第三周作业.tex | 63 +++ 随机过程/作业/第九周作业.tex | 290 ++++++++++++ 随机过程/作业/第二周作业.tex | 187 ++++++++ 随机过程/作业/第五周作业.tex | 113 +++++ 随机过程/作业/第六周作业.tex | 268 +++++++++++ 随机过程/作业/第十一周作业.tex | 144 ++++++ 随机过程/作业/第十三周作业.tex | 102 ++++ 随机过程/作业/第十二周作业.tex | 175 +++++++ 随机过程/作业/第十五周作业.tex | 81 ++++ 随机过程/作业/第十周作业.tex | 248 ++++++++++ 随机过程/作业/第十四周作业.tex | 258 ++++++++++ 随机过程/作业/第四周作业.tex | 192 ++++++++ 131 files changed, 17921 insertions(+) create mode 100644 操作系统/作业/mypreamble.tex create mode 100644 操作系统/作业/mysubpreamble.tex create mode 100644 操作系统/作业/全部作业.tex create mode 100644 操作系统/作业/第三章作业.tex create mode 100644 操作系统/作业/第二章作业.tex create mode 100644 操作系统/作业/第五六章作业.tex create mode 100644 操作系统/作业/第四章作业.tex create mode 100644 操作系统/实验报告/Lab1.tex create mode 100644 操作系统/实验报告/Lab2.tex create mode 100644 操作系统/实验报告/Lab3.tex create mode 100644 操作系统/实验报告/Lab4.tex create mode 100644 操作系统/实验报告/Lab5.tex create mode 100644 操作系统/实验报告/Lab67.tex create mode 100644 操作系统/实验报告/mypreamble.tex create mode 100644 数字逻辑及实验/作业/mypreamble.tex create mode 100644 数字逻辑及实验/作业/全部作业.tex create mode 100644 数字逻辑及实验/作业/实验报告/mypreamble.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验2.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验3.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验4.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验5.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验6.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验7.tex create mode 100644 数字逻辑及实验/作业/实验报告/实验报告模板.tex create mode 100644 数字逻辑及实验/作业/第一章作业-订正.tex create mode 100644 数字逻辑及实验/作业/第一章作业.tex create mode 100644 数字逻辑及实验/作业/第三章作业.tex create mode 100644 数字逻辑及实验/作业/第五章作业.tex create mode 100644 数字逻辑及实验/作业/第四章作业.tex create mode 100644 数据结构/作业/10213903403第一章作业.tex create mode 100644 数据结构/作业/10213903403第七章作业.tex create mode 100644 数据结构/作业/10213903403第三章作业.tex create mode 100644 数据结构/作业/10213903403第二章作业.tex create mode 100644 数据结构/作业/10213903403第五章作业.tex create mode 100644 数据结构/作业/10213903403第八章作业.tex create mode 100644 数据结构/作业/10213903403第六章作业.tex create mode 100644 数据结构/作业/10213903403第四章作业.tex create mode 100644 数据结构/作业/mypreamble.tex create mode 100644 数据结构/作业/使用示例.tex create mode 100644 数据结构/作业/实验报告模板.tex create mode 100644 数理统计/作业/mypreamble.tex create mode 100644 数理统计/作业/mysubpreamble.tex create mode 100644 数理统计/作业/全部作业.tex create mode 100644 数理统计/作业/期中考试.tex create mode 100644 数理统计/作业/第一周作业.tex create mode 100644 数理统计/作业/第七周作业.tex create mode 100644 数理统计/作业/第三周作业.tex create mode 100644 数理统计/作业/第九周作业.tex create mode 100644 数理统计/作业/第二周作业.tex create mode 100644 数理统计/作业/第五六周作业.tex create mode 100644 数理统计/作业/第五周作业.tex create mode 100644 数理统计/作业/第六周作业.tex create mode 100644 数理统计/作业/第十三周作业.tex create mode 100644 数理统计/作业/第十二周作业.tex create mode 100644 数理统计/作业/第十五周作业.tex create mode 100644 数理统计/作业/第十四周作业.tex create mode 100644 数理统计/作业/第四周作业.tex create mode 100644 概率论/mypreamble.tex create mode 100644 概率论/全部作业.tex create mode 100644 概率论/单元作业1.tex create mode 100644 概率论/单元作业2.tex create mode 100644 概率论/单元作业3.tex create mode 100644 概率论/单元作业4.tex create mode 100644 概率论/单元作业5.tex create mode 100644 概率论/单元作业6.tex create mode 100644 深度学习/实验/Retrieval_task/实验报告.tex create mode 100644 深度学习/实验讲解/lab4.tex create mode 100644 离散数学/作业/mypreamble.tex create mode 100644 离散数学/作业/全部作业.tex create mode 100644 离散数学/作业/第一周作业.tex create mode 100644 离散数学/作业/第七周作业.tex create mode 100644 离散数学/作业/第三周作业.tex create mode 100644 离散数学/作业/第二周作业.tex create mode 100644 离散数学/作业/第五周作业.tex create mode 100644 离散数学/作业/第八周作业.tex create mode 100644 离散数学/作业/第十三周作业.tex create mode 100644 离散数学/作业/第十二周作业.tex create mode 100644 离散数学/作业/第十五周作业.tex create mode 100644 离散数学/作业/第十六周作业.tex create mode 100644 离散数学/作业/第十周作业.tex create mode 100644 离散数学/作业/第十四周作业.tex create mode 100644 离散数学/作业/第四周作业.tex create mode 100644 离散数学/作业/课程项目.tex create mode 100644 离散数学/废稿.tex create mode 100644 网络安全基础/实验报告/mypreamble.tex create mode 100644 网络安全基础/实验报告/实验一.tex create mode 100644 网络安全基础/实验报告/实验七.tex create mode 100644 网络安全基础/实验报告/实验三.tex create mode 100644 网络安全基础/实验报告/实验九.tex create mode 100644 网络安全基础/实验报告/实验二.tex create mode 100644 网络安全基础/实验报告/实验五.tex create mode 100644 网络安全基础/实验报告/实验八.tex create mode 100644 网络安全基础/实验报告/实验六.tex create mode 100644 网络安全基础/实验报告/实验十.tex create mode 100644 网络安全基础/实验报告/实验十一.tex create mode 100644 网络安全基础/实验报告/实验十二.tex create mode 100644 网络安全基础/实验报告/实验四.tex create mode 100644 计算机系统结构/作业/mypreamble.tex create mode 100644 计算机系统结构/作业/mysubpreamble.tex create mode 100644 计算机系统结构/作业/全部作业.tex create mode 100644 计算机系统结构/作业/第一章作业.tex create mode 100644 计算机系统结构/作业/第三章作业.tex create mode 100644 计算机系统结构/作业/第二章作业.tex create mode 100644 计算机系统结构/作业/第五章作业1.tex create mode 100644 计算机系统结构/作业/第五章作业2.tex create mode 100644 计算机系统结构/作业/第四章作业.tex create mode 100644 计算机网络/Chapter_1_HW.tex create mode 100644 计算机网络/Chapter_2_HW.tex create mode 100644 计算机网络/Chapter_3_HW.tex create mode 100644 计算机网络/Chapter_4_HW.tex create mode 100644 计算机网络/Chapter_5_HW.tex create mode 100644 计算机网络/mypreamble.tex create mode 100644 计算机网络/mysubpreamble.tex create mode 100644 计算机网络/全部作业.tex create mode 100644 随机过程/作业/mypreamble.tex create mode 100644 随机过程/作业/mysubpreamble.tex create mode 100644 随机过程/作业/全部作业.tex create mode 100644 随机过程/作业/第一周作业.tex create mode 100644 随机过程/作业/第七周作业.tex create mode 100644 随机过程/作业/第三周作业.tex create mode 100644 随机过程/作业/第九周作业.tex create mode 100644 随机过程/作业/第二周作业.tex create mode 100644 随机过程/作业/第五周作业.tex create mode 100644 随机过程/作业/第六周作业.tex create mode 100644 随机过程/作业/第十一周作业.tex create mode 100644 随机过程/作业/第十三周作业.tex create mode 100644 随机过程/作业/第十二周作业.tex create mode 100644 随机过程/作业/第十五周作业.tex create mode 100644 随机过程/作业/第十周作业.tex create mode 100644 随机过程/作业/第十四周作业.tex create mode 100644 随机过程/作业/第四周作业.tex diff --git a/操作系统/作业/mypreamble.tex b/操作系统/作业/mypreamble.tex new file mode 100644 index 0000000..d159611 --- /dev/null +++ b/操作系统/作业/mypreamble.tex @@ -0,0 +1,25 @@ +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{booktabs} +\usepackage{multicol} +\usepackage{multirow} +\usepackage{bm} +\usepackage{hyperref} + +\usepackage{fancyhdr} +\usepackage{enumitem} +\usepackage{totpages} +\usepackage{mylatex} +\usepackage{subfiles} + +\title{《操作系统》作业} +\author{岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2024年3月29日——2024年6月18日} +\setlist[1]{listparindent=\parindent} +\setlist[2]{label=(\arabic{enumii}),listparindent=\parindent} +\definecolor{shadecolor}{RGB}{204,232,207} +\setminted{fontsize=\zihao{6}, baselinestretch=1} + +\let\kaishu\relax % 清除旧定义 +\newCJKfontfamily\kaishu{KaiTi}[AutoFakeBold] % 重定义 \kaishu +\newcommand{\boldkai}[1]{{\bfseries\kaishu #1}} diff --git a/操作系统/作业/mysubpreamble.tex b/操作系统/作业/mysubpreamble.tex new file mode 100644 index 0000000..cd7f5f5 --- /dev/null +++ b/操作系统/作业/mysubpreamble.tex @@ -0,0 +1,10 @@ +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +% \definecolor{shadecolor}{named}{white} +\makeatletter +\ctexset{ + chapter/break = \addpenalty{\@secpenalty} +} +\makeatother \ No newline at end of file diff --git a/操作系统/作业/全部作业.tex b/操作系统/作业/全部作业.tex new file mode 100644 index 0000000..4732986 --- /dev/null +++ b/操作系统/作业/全部作业.tex @@ -0,0 +1,10 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\begin{document} + \maketitle + \tableofcontents + \subfile{第二章作业} + \subfile{第三章作业} + \subfile{第四章作业} + \subfile{第五六章作业} +\end{document} \ No newline at end of file diff --git a/操作系统/作业/第三章作业.tex b/操作系统/作业/第三章作业.tex new file mode 100644 index 0000000..a4eb08d --- /dev/null +++ b/操作系统/作业/第三章作业.tex @@ -0,0 +1,204 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{2} +\chapter{存储管理} +\begin{enumerate} + \questionandanswer[]{ + 一个 32 位的系统支持的逻辑空间最大为$2^{32}$字节,假如一个分页系统的页面大小为 4KB(即 $2^{12}$),一个页表项 4 个字节。请问:一个进程页表最多可有多少个表项?此时该进程的页表需要占多大的内存? + }{ + 按照题意来看,页表需要放到内存中,因此$2^{32}$字节的逻辑空间不能全部用来放分页页面。那么一个页面对应一个页表项,它们需要$2^{12}+4$字节,所以一个进程页表最多可有$$\dfrac{2^{32}}{2^{12}+4} = \dfrac{1073741824}{1025} \approx 1047552.99902439 \xrightarrow{\text{向下取整}} 1047552$$个表项。此时该进程的页表需要占$1047552\times 4 = 4190208$个字节的内存。 + } + \questionandanswer[]{ + 在分页式系统中,其页表存放在内存中 + }{} + \begin{enumerate} + \questionandanswer[]{ + 如果对内存的一次存取需要 $100 \mathrm{\mu s}$,试问实现一次页面访问至少需要存取时间是多少? + }{ + 先访问一次页表,得到页面的地址以及是否缺页,此时如果没有缺页异常,直接从内存中就能访问到页面,所以实现一次页面访问至少需要存取时间为$100+100=200 \mathrm{\mu s}$。 + } + \questionandanswer[]{ + 如果系统有快表,快表的命中率为 80\%,当页表项在快表中时,其查询快表的时间可忽略不计,试问此时平均存取时间为多少? + }{ + 当页表项在快表中时(并且没有缺页),此时可以认为一次页面访问只需要一次内存访问的时间,即$100 \mathrm{\mu s}$;所以此时平均存取时间(不考虑缺页)为 + $$ + \begin{aligned} + EX &= 100 \mu \mathrm{s}\times P(快表命中) + 200 \mu \mathrm{s} \times P(快表未命中) \\ + &=100 \mu \mathrm{s} \times 0.8 + 200 \mu \mathrm{s} \times 0.2 = 120 \mu\mathrm{s} \\ + \end{aligned} + $$ + } + \questionandanswer[]{ + 采用快表后的平均存取时间比没有采用快表时下降了百分之几? + }{ + $$ + 1 - \frac{120}{200} = \frac{2}{5} = 0.4 = 40 \% + $$ + 下降了$40 \%$。 + } + \end{enumerate} + \questionandanswer[]{ + 某虚拟存储器的用户编程空间共 32 个页面,每页1KB,主存为16KB。假定某时刻用户表中已调入主存的页面的虚拟页号和物理块号对照表为表一,则与逻辑地址相对应的物理地址为表二。\\ + \begin{minipage}{0.5\linewidth} + \begin{center} + \begin{tabular}{cc} + \toprule + 虚拟页号 & 物理块号 \\ + \midrule + 0 & 5 \\ + 1 & 10 \\ + 2 & 4 \\ + 8 & 7 \\ + \bottomrule + \end{tabular} + + 表一 + \end{center} + \end{minipage} + \begin{minipage}{0.5\linewidth} + \begin{center} + \begin{tabular}{cc} + \toprule + 逻辑地址 & 物理地址 \\ + \midrule + 0A5CH & A(\quad) \\ + 1A5CH & B(\quad) \\ + 925DH & C(\quad) \\ + \bottomrule + \end{tabular} + + 表二 + \end{center} + \end{minipage} + + 可供选择的答案: + A,B,C:(1)缺页 (2)1E5DH (3)2A5CH (4)115CH (5)125CH(6)165CH (7)越界 (8)以上答案都不对 + }{ + + 页面大小1KB,也就是$2^{10}$字节(其实准确说1KiB才是$2^{10}$字节,1KB是$10^{3}$字节),也就是逻辑地址的后10位代表页内偏移。 + + 由于一共$32=2^{5}$个页面,所以(序号从右数0开始)第10到14位是页号,题目中的逻辑地址是4位十六进制数(最后的H表示这是十六进制数),也就是16位二进制数,因此第15位(最高位)必定为0,否则就是虚拟页号越界。以0A5CH为例: + $$ + 0|\underbrace{000\ 10}_{\text{虚拟页号}}|\underbrace{10\ 0101\ 1100}_{页内偏移} + $$ + 从逻辑地址转换到物理地址,只需要把虚拟页号换成对应的物理块号即可,这里虚拟页号为二进制的 00010 也就是十进制的2,对应的物理块号为4,也就是二进制的00100,转换后为 + $$ + 0|\underbrace{001\ 00}_{\text{物理块号}}|\underbrace{10\ 0101\ 1100}_{页内偏移} + $$ + 转换成十六进制也就是125CH,所以A(5)。 + + 同理,对于1A5CH, + $$ + 0|\underbrace{001\ 10}_{\text{虚拟页号}}|\underbrace{10\ 0101\ 1100}_{页内偏移} + $$ + 虚拟页号00110,即十进制的6,在表一中没有,所以是缺页,从而B(1)。 + + 对于925DH + $$ + 1|\underbrace{001\ 00}_{\text{虚拟页号}}|\underbrace{10\ 0101\ 1101}_{页内偏移} + $$ + 最高位为1,根据前面的分析,虚拟页号越界,所以C(7)。 + + 综上所述,A(5), B(1), C(7)。 + } + \questionandanswer[]{ + 分页存储管理系统中,逻辑地址长度为 16,页面大小为4K。一个进程有 6 个页面,且页号为 1、2、3 的页面依次存放在物理块5、10、11 中,试问: + }{ + + 4K看作是$2^{12}$,也就是12位逻辑地址,也就是右起3位十六进制。逻辑地址长度为16,$16-12=4$位表示页号,所以左起1位十六进制表示页号。有6个页面,所以页号从0到5有效,否则越界。 + } + \begin{enumerate} + \questionandanswer[]{ + 逻辑地址 4010、8500 和 25000 所对应的物理地址分别为多少? + }{ + 这里的数字没有字母后缀,应该是十进制,需要先转化成十六进制。\\ + \begin{center} + \begin{tabular}{ccc} + \toprule + 十进制逻辑地址 & 十六进制逻辑地址 & 物理地址 \\ + \midrule + 4010 & 0|FAA & 缺页 \\ + 8500 & 2|134 & A134 \\ + 25000 & 6|1A8 & 越界 \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[]{ + 逻辑地址 2F6AH、0578H 和 6ACDH 所对应的物理地址分别为多少? + }{ + \begin{center} + \begin{tabular}{cc} + \toprule + 逻辑地址 & 物理地址 \\ + \midrule + 2|F6A\ H & AF6A\ H \\ + 0|578\ H & 缺页 \\ + 6|ACD\ H & 越界 \\ + \bottomrule + \end{tabular} + \end{center} + } + \end{enumerate} + \questionandanswer[]{ + 假定某采用页式存储管理的系统中,主存容量为1M,被分成256 块,块号为 0、1、2、…、255。现有一个共 4 页(页号为0、1、2、3)的作业被依次装入到主存的块 2、4、1、5 中。请回答: + }{} + + % 啊?为什么这里如果不加空行,后面就没有parindent了?加了一个空行就重新出现parindent了? + \begin{enumerate} + \questionandanswer[]{ + 主存地址应该用多少位来表示? + }{ + 1M省略了单位,应该是指1MB,看作是$2^{20}$字节,由于寻址的单位为字节,所以主存地址应该用20位来表示。 + } + \questionandanswer[]{ + 作业每一页的长度为多少字节?逻辑地址中的页内地址部分应占用多少位? + }{ + 1MB $=2^{20}$字节,分成$256=2^{8}$块,所以每块的大小为$\frac{2^{20}}{2^{8}}=2^{12}$字节,块大小和页大小一样,因此作业每一页的长度为$2^{12}$字节,逻辑地址中的页内地址部分应占用12位。 + } + \questionandanswer[]{ + 把作业中每一页占用的主存块起始地址填入下表。 + }{ + \begin{center} + \begin{tabular}{cc} + \toprule + 页号 & 起始地址 \\ + \midrule + 0 & 02\ 000\ H \\ + 1 & 04\ 000\ H \\ + 2 & 01\ 000\ H \\ + 3 & 05\ 000\ H \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[]{ + 若作业执行中要从第 0 页的第 75 单元和第 3 页的第 548 单元读信息,那么,实际应从主存的哪两个单元读信息?请把应访问的主存绝对地址用二进制编码的十六进制数表示。 + }{ + + 这里“二进制编码的十六进制数”表述不清,直接描述成“十六进制”或许更好。 + 第 0 页的第 75 单元为 0x02\,048,第 3 页的第 548 单元为 0x05\,224。 + } + \end{enumerate} + \questionandanswer[]{ + 在请求式分页系统中,运行一个共有 8 页的作业,且作业在主存中分配到 4 块主存块,作业执行时访问页面顺序为 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,假如最初四个页面通过缺页中断装入,请问用最佳置换算法、先入先出(FIFO)算法和最近最久未使用(LRU)算法时,它们的页面缺页和置换次数分别为多少?(要求画出页面置换图) + }{ + \begin{center} + \includexopp{3.6.1} + (图中标了$\times $的是发生置换的) + \vspace{1em} + + \begin{tabular}{ccc} + \toprule + 页面置换算法 & 页面缺页次数 & 置换次数 \\ + \midrule + 最佳置换(Opt) & 8 & 4 \\ + 先入先出(FIFO) & 10 & 6 \\ + 最近最久未使用(LRU) & 8 & 4 \\ + \bottomrule + \end{tabular} + \end{center} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/作业/第二章作业.tex b/操作系统/作业/第二章作业.tex new file mode 100644 index 0000000..0d92056 --- /dev/null +++ b/操作系统/作业/第二章作业.tex @@ -0,0 +1,283 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{1} +\chapter{进程与线程} +\begin{enumerate} + \questionandanswer[]{ + 设有一台计算机,有两条 I/O 通道,分别挂一台输入机和一台打印机。若要把输入机上的数据逐一地输入到缓冲区 B1 中,然后处理,并把结果搬到缓冲区B2中,最后在打印机上输出。请问: + }{} + \begin{enumerate} + \questionandanswer[]{ + 系统可设置哪些进程完成这一任务?这些进程间有什么具体制约关系? + }{ + \noindent + 进程一:把输入机上的数据逐一地输入到缓冲区 B1 中;\\ + 进程二:从缓冲区 B1 中取数据,处理后把结果放到缓冲区B2中;\\ + 进程三:从缓冲区 B2 中取数据,在打印机上输出。 + + 这里的“逐一地”“缓冲区”等关键词表明是单个缓冲区而不是缓冲队列。那么进程一和进程二之间关于缓冲区B1存在同步的制约关系,进程二和进程三之间关于缓冲区B2存在同步的制约关系。(这里不需要互斥) + } + \questionandanswer[]{ + 用 P-V 操作写出这些进程的同步算法。 + }{} + {\kaishu\noindent + \begin{minipage}{0.4\linewidth} + \begin{minted}{C} +struct semaphore B1_empty = 1, B1_full = 0, B2_empty = 1, B2_full = 0; +number temp1, temp2, temp3; +buffer B1, B2; +cobegin +void process1() { + while(1) { + temp1 = input(); + P(B1_empty); + B1 = temp1; + V(B1_full); + } +} +void process2() { + while(1) { + P(B1_full); + temp2 = B1_full; + V(B1_empty); + temp2 = processing(temp2); + P(B2_empty); + B2_full = temp2; + V(B2_full); + } +} +void process3() { + while(1) { + P(B2_full); + temp3 = B2_full; + V(B2_empty); + output(temp3); + } +} +coend + \end{minted} + \end{minipage} + % \columnbreak + \begin{minipage}{0.6\linewidth} + \includexopp{2.1.2.1} + \end{minipage} + } + \questionandanswer[]{ + 用Send和Receive原语写出这些进程的同步算法。 + }{} + {\kaishu\noindent + \begin{minipage}{0.4\linewidth} + \begin{minted}{C} +cobegin +void process1() { + number item; + message m; + while (1) { + item = input(); + m = build_message(item); + Send(process2, &m); + } +} +void process2() { + number item; + message m; + while (1) { + Receive(process1, &m); + item = extract_item(&m); + item = processing(item); + m = build_message(item); + Send(process3, &m); + } +} +void process3() { + number item; + message m; + while (1) { + Receive(process2, &m); + item = extract_item(&m); + output(item); + } +} +coend + \end{minted} + \end{minipage} + % \columnbreak + \begin{minipage}{0.6\linewidth} + \includexopp{2.1.3.1} + \end{minipage} + } + \end{enumerate} + + \questionandanswer[]{ + “哲学家就餐问题”除课堂上介绍的方案外,有没有其他解决方案?有的话,请 +写出相应的解决方案。 + }{} + {\kaishu + 有,比较容易想到的一种最简单的方案是,每次只允许一个哲学家就餐,也就是将所有的叉子视为一个整体的临界资源,但是缺点也很明显,会导致性能低下,因为五个叉子可以满足两个哲学家同时就餐。因此下面使用另一种方案。 + + 大致方案是偶数序号的哲学家先拿左边的叉子,奇数序号哲学家先拿右边的叉子(释放的时候就不需要讲究先放左边还是先放后边了)。 + % \begin{multicols}{2} + \begin{minted}{C} +struct semaphore forks[5] = {1, 1, 1, 1, 1}; +void philosopher(i) { + while (1) { + think; + if (i % 2) { + P(forks[(i + 1) % 5]); + P(forks[i]) + } else { + P(forks[i]); + P(forks[(i + 1) % 5]); + } + eat; + V(forks[i]); + V(forks[(i + 1) % 5]); + } +} + \end{minted} + % \end{multicols} + } + \questionandanswer[]{ + a,b两点之间是一段东西向的单行车道,现要设计一个自动管理系统,管理的 +规则如下:当a,b之间有车辆在行驶时同方向的车可以同时驶入a,b段,但另一个 +方向的车必须在a,b段以外等待;当a,b之间无车辆在行驶时,到达a点(或b点) +的车辆可以进入a,b段,但不能同时驶入;当某方向在a,b段行驶的车辆驶出了a, +b 段且暂无车辆进入a,b段时,应让另一方向等待的车辆进入a,b段行驶。请用PV +操作作为工具,对a,b段实现正确管理以确保行驶安全。 + }{} + {\kaishu + 可能会存在一个问题,就是一个方向一直有车辆,导致另一个方向无法进入车道,从而产生很长的排队。 + + 还有个问题,是否要考虑车辆排队的过程,即先入先出,或先排队先进入。 + + 这里先不考虑这两个问题。 + + 这种问题大多数做法都是使用两个互斥量和两个计数值,这里尝试使用一个互斥量和一个计数值,计数值为正表示从a到b有车辆,计数值为负表示从b到a有车辆。但是缺点是发生任何一个事件(a或b方向进入或离开车辆)都需要访问临界资源(使用同一个 \mintinline{C}{mutex} 信号量),可能会导致性能较低。 + + \begin{multicols}{2} + \begin{minted}{C} +struct semaphore mutex = 1, s = 1; +// 车道内的车辆数 +int count = 0; // 正数为从a到b,负数为从b到a +cobegin +void a_to_b() { + P(mutex); + if (count <= 0) { + P(s); + } + count++; + V(mutex); + 通过 a -> b; + P(mutex); + count--; + assert(count >= 0); + if (count == 0) { + V(s); + } + V(mutex); +} + + +void b_to_a() { + P(mutex); + if (count >= 0) { + P(s); + } + count--; + V(mutex); + 通过 b -> a; + P(mutex); + count++; + assert(count <= 0); + if (count == 0) { + V(s); + } + V(mutex); +} +coend + \end{minted} + \end{multicols} + } + \questionandanswer[]{ + 假定有三个进程R、W1、W2共享一个缓冲区B,B中每次只能存放一个整数。 +进程R每次启动输入设备读一个整数且把它存放在缓冲区B中,若存放到缓冲区B中 +的是奇数,则由进程W1将其取出打印,否则由进程W2将其取出打印。要求用PV操 +作管理这3个并发进程,使它们能够正确同步工作。 + }{} + {\kaishu + 这里使用了三个信号量实现R与W1的同步、R与W2的同步,一个信号量实现了打印的互斥。 + + \begin{minipage}{0.4\linewidth} + \begin{minted}{C} +struct semaphore odd = 0, even = 0, empty = 1; +struct semaphore output_mutex; +buffer B; +cobegin +void R() { + int temp; + while (1) { + temp = input(); + P(empty); + B = temp; + if (temp % 2) { + V(odd); + } else { + V(even); + } + } +} +void W1() { + int temp; + while (1) { + P(odd); + temp = B; + V(empty); + P(output_mutex); + output(temp); + V(output_mutex); + } +} +void W2() { + int temp; + while (1) { + P(even); + temp = B; + V(empty); + P(output_mutex); + output(temp); + V(output_mutex); + } +} +coend + \end{minted} + \end{minipage} + \begin{minipage}{0.6\linewidth} + \includexopp{2.4.1} + \end{minipage} + } + \questionandanswer[]{ + 假定在一个CPU上执行以下5个作业:(优先数小者优先级高) + + \begin{center} + \begin{tabular}{|c|c|c|c|c|c|} + \hline + 作业号 & 1 & 2 & 3 & 4 & 5 \\ + \hline + 到达时间 & 0 & 2 & 4 & 6 & 8 \\ + \hline + 优先数 & 4 & 3 & 5 & 2 & 1 \\ + \hline + 运行时间 & 3 & 6 & 4 & 5 & 2 \\ + \hline + \end{tabular} + \end{center} + + 当分别采用FCFS、RR(时间片为1)、非抢占式SJF、抢占式SJF、优先级调度5 +种调度算法时,试(1)画出调度图(2)计算每个作业的周转时间(3)计算平均周转 +时间。 + }{ + \includexopp{2.5.1} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/作业/第五六章作业.tex b/操作系统/作业/第五六章作业.tex new file mode 100644 index 0000000..c5c1d1e --- /dev/null +++ b/操作系统/作业/第五六章作业.tex @@ -0,0 +1,106 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{4} +\chapter{I/O设备管理} +\begin{enumerate} + \questionandanswer[]{ + 假定某磁盘共有 200 个柱面(编号为 0$\sim $199),如果在为访问80 号柱面的请求者服务后,当前正在为访问 108 号柱面的请求者服务,同时有若干个请求者在等待服务,它们依次要访问的柱面号为: + + 187,64,169,48,171,118,120,84 + \begin{enumerate} + \item 分别用先来先服务(FCFS)、最短寻道时间优先(SSTF)、扫描(SCAN)和循环扫描(CSCAN)算法进行磁盘调度时,试确定实际的服务次序。 + \item 按实际服务次序计算(1)中四种算法下磁臂移动的距离。 + \end{enumerate} + }{ + \includexopp{5.1.1} + + 每次磁臂移动的距离已经用蓝色字标在两次访问的柱面号之间,要注意循环扫描的返回是瞬间完成,不应算到磁臂移动的距离中。 + } +\end{enumerate} +\chapter{死锁} +\begin{enumerate} + \questionandanswer[]{ + 在某系统中,有 N 个进程共享 R 台同类设备资源,每个进程最多需要M台设备资源,试问:N 最多为几时才能保证系统不会发生死锁?请简略说明原因。 + }{ + % N最多为 $\bm{\left\lfloor R / M \right\rfloor}$ 时才能保证系统不会发生死锁。因为当N达到这个值时,如果此时所有进程都按照最大资源数量申请,那么总申请的资源数量为$\left\lfloor R / M \right\rfloor \times M \leqslant R$,所以不会发生死锁,但如果N多一个,那么总申请的资源数量为$\left( \left\lfloor R / M \right\rfloor+1 \right) \times M$这就可能大于R,那么就可能发生死锁。 + + (这里的N、R、M应该均为正整数) + + 当N固定时,根据抽屉原理,每个进程都恰好分到最大资源数量少一个资源,并且都申请一个资源,这时如果没有资源可以分配,那么就死锁了;如果有至少一个资源可以分配,那么就不会死锁。所以R最少应取$N\times (M-1) + 1$才能保证不会发生死锁,那么 + $$ + R\geqslant N\times (M-1)+1 \implies N \leqslant \frac{R-1}{M-1} + $$ + 因为N为整数,所以N最多为$\displaystyle \left\lfloor \frac{R-1}{M-1} \right\rfloor$。 + } + \questionandanswer[]{ + 考虑有 3 个进程共享 9 个资源,当前资源分配情况如下: + \begin{center} + \begin{tabular}{ccc} + \toprule + 进程 & 已占资源数 & 最大需求量 \\ + \midrule + P1 & 2 & 6 \\ + P2 & 3 & 6 \\ + P3 & 1 & 5 \\ + \bottomrule + \end{tabular} + \end{center} + 请回答以下问题: + }{} + \begin{enumerate} + \questionandanswer[]{ + 目前系统是否处于安全状态?为什么? + }{ + 目前已占资源总数为6,那么还有3个资源,这时如果分配给P2,P2就达到了最大需求量,那么P2运行结束后就有6个空闲资源,这时可以分配给P1 4个资源,P1就达到了最大需求量,P1运行结束后分配给P3 4个资源,P3就达到了最大需求量,P3运行完后就结束了。\boldkai{所以可以找到资源分配安全序列 P2、P1、P3,所以目前系统处于安全状态。}示意图如下: + \bigskip + \includexopp[1.2]{6.2.1.1} + } + \questionandanswer[]{ + 如果接着 3 个进程均再申请 2 个资源,可以先分配资源给哪个进程? + }{ + 在未实际分配资源时,安全序列不变,仍然为P2、P1、P3,所以可以先分配资源给\boldkai{P2}。 + } + \end{enumerate} + \questionandanswer[]{ + 假如系统中有 5 个进程{P0,P1,P2,P3,P4}和4 种类型资源{A,B,C,D},T0 时刻系统的资源分配情况如下所示: + \begin{center} + \begin{tabular}{c|cccc|cccc|cccc} + \toprule + 进程 & \multicolumn{4}{c}{Al} \vline& \multicolumn{4}{c}{Need} \vline & \multicolumn{4}{c}{Av} \\ + \midrule + P0 & 0 & 2 & 3 & 2 & 0 & 0 & 1 & 2 & 1 & 6 & 2 & 2 \\ + P1 & 1 & 0 & 0 & 0 & 1 & 7 & 5 & 0 & & & & \\ + P2 & 1 & 3 & 5 & 4 & 2 & 3 & 5 & 6 & & & & \\ + P3 & 0 & 3 & 3 & 2 & 0 & 6 & 5 & 2 & & & & \\ + P4 & 1 & 0 & 1 & 4 & 0 & 6 & 5 & 6 & & & & \\ + \bottomrule + \end{tabular} + \end{center} + 试问: + }{} + \begin{enumerate} + \questionandanswer[]{ + T0 时刻该系统是否安全? + }{ + 尝试寻找安全序列如下图所示: + \includexopp[1.3]{6.4.1.1} + 成功找到安全序列P0、P1、P3、P2、P4,所以T0 时刻系统\boldkai{安全}。 + } + \questionandanswer[]{ + T1 时刻进程 P2 提出资源请求 Re2(1,2, 0,0),能否将资源分配给它? + }{ + Re2 < Av,进行试探性分配,尝试寻找安全序列如下图所示: + \includexopp[1.3]{6.4.2.1} + 与T0 时刻相比有不同的地方已用红色标出,所以成功找到安全序列P0、P3、P4、P1、P2,所以\boldkai{能}将资源分配给它。 + } + \questionandanswer[]{ + T2 时刻进程 P3 提出资源请求 Re3(0, 0,2,2),能否将资源分配给它? + }{ + Re3 < Av,进行试探性分配,尝试寻找安全序列如下图所示: + \includexopp[1.2]{6.4.3.1} + 发现找不到安全序列,所以\boldkai{不能}将资源分配给它。 + } + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/作业/第四章作业.tex b/操作系统/作业/第四章作业.tex new file mode 100644 index 0000000..a774af9 --- /dev/null +++ b/操作系统/作业/第四章作业.tex @@ -0,0 +1,83 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{3} +\chapter{文件系统} +\begin{enumerate} + \questionandanswer[]{ + 一个文件系统的盘块大小为1KB,每块地址用4B表示,当分别采用连 +续、链接、二级索引和UNIX S V 分配方案时,试确定各方案能管理的最大文件, +管理一个10MB的大文件和一个10KB的小文件时所需的管理专用块数,以及要 +访问大文件的第9M+3.5KB单元时需要的磁盘I/O操作次数。 + +A$\sim $D:(1)不受限制 (2)1KB (3)256KB (4)64MB +(5)16GB (6)1KB+256KB+64MB+16GB +(7)10KB+256KB+64MB+16GB + }{ + 二级索引管理的最大文件: + $$ + 256\times 256\times 1 \mathrm{KB} = 2^{8}\times 2^{8}\times 1 \mathrm{KB} = 2^{16}\mathrm{KB} = 2^{6} \mathrm{MB} = 64 \mathrm{MB} + $$ + 二级索引专用块数: + $$ + 10\text{KB}/1\text{KB} =10 \text{个存储块} + $$ + $$ + \left\lceil 10/256 \right\rceil = 1 \text{个二级索引块}, \quad \left\lceil 1/256 \right\rceil =1 \text{个一级索引块} + $$ + $$ + 10\text{MB}/1\text{KB}=10\times 2^{10}\text{个存储块} + $$ + $$ + 10\times 2^{10}/256 = 10\times 2^{2} = 40 \text{个二级索引块}, \quad \left\lceil 1/256 \right\rceil =1 \text{个一级索引块} + $$ + UNIX专用块数: + $$ + 10\text{MB}-10\text{KB}-256\text{KB} = (10\times 2^{20} - 10\times 2^{10} - 256\times 2^{10}) = 10213376\text{B} = 9974\text{KB} + $$ + $$ + \left\lceil 9974/256 \right\rceil = 39 \text{个二级索引块}, \quad \left\lceil 39/256 \right\rceil =1 \text{个一级索引块} + $$ + $$ + 1+39+1=41 \text{个管理专用块} + $$ + 大文件的某处信息需要的IO次数: + $$ + \left\lceil 9\times 2^{10} +3.5 \right\rceil + 1 = 9221 + $$ + \begin{center} + \begin{tabular}{cccccc} + \toprule + & & 连续分配 & 链接分配 & 二级索引 & UNIX \\ + \midrule + \multicolumn{2}{c}{管理的最大文件} & A(1) & B(1) & C(4) & D(7) \\ + \hline + \multirow{2}{*}{管理用的专用块数} & 10KB 文件 & 0 & 0 & 2 & 0 \\ + & 10MB 文件 & 0 & 0 & 41 & 41 \\ + \hline + 大文件的某处信息 & 9M+3.5KB & 1 & 9221 & 3 & 3 \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[]{ + 在 Unix 文件系统中,文件的物理组织为 Unix 直接间接混合寻址方式,假设一个进程要在第 4200 字节、第 210000 字节和第800000 字节三个偏移处读文件,请问分别要访问多少次磁盘?并以必要的图示说明访问之过程。假设该文件的 FCB(即文件说明或文件控制块)已读入内存,每个磁盘块大小为1K,块号用 32 位的指针表示。 + }{ + 32位即4B,所以一个索引块能存储 $1\text{KB}/4\text{B}=256\text{个块指针}$。 + + \includexopp[1.1]{4.2.1} + + 图中用不同颜色写出了不同偏移处的计算步骤以及访问过程。访问磁盘次数即不同颜色的箭头数量,在第 4200 字节、第 210000 字节和第800000 字节三个偏移处读文件,分别要访问1、2、3次磁盘。 + } + \questionandanswer[]{ + 假设文件系统的盘块大小为 4KB, 某文件的物理结构采用连续文件方式,假设该文件的首个盘块的盘块号为 85,那么该文件的第8292 字节单元在第几个盘块上?其盘块号为多少?该字节单元是盘块内的第几字节? + }{ + $$ + 8292\text{B}/4\text{KB} = 8292 \div (4\times 2^{10}) = 2 \cdots\cdots 100 + $$ + \includexopp[1]{4.3.1} + + 所以该文件的第8292字节单元在第3个盘块上,其盘块号为87,该字节单元是盘块内的第101字节。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab1.tex b/操作系统/实验报告/Lab1.tex new file mode 100644 index 0000000..e426dac --- /dev/null +++ b/操作系统/实验报告/Lab1.tex @@ -0,0 +1,65 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mylabname}{系统软件启动过程} +\renewcommand{\mydate}{2024年3月26日} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{完成相关实验内容后,回答以下问题:}{ + \questionandanswer[]{ + 为何要开启A20? uCore OS是如何开启A20的? + }{ + 如果不开启A20会导致地址线第21位永远为0,无法完整进行内存寻址。uCore OS通过向8042键盘控制器的命令端口和数据端口发送命令和数据来开启A20。 + } + \questionandanswer[]{ + 试分析段描述符表(GDT )的结构,说明段描述符中每个字段的含义以及作用。uCore OS是如何初始化GDT表的? + }{ + % 段选择子的每个元素为16位,前13位是INDEX,表示这个段选择子在GDT数组或LDT数组的索引号;第14位是Table Indicator,这个值为0表示查找GDT,1则查找LDT;最后两位是Request Privilege Level,表示以什么样的权限去访问段。 + \begin{center} + \includegraphics[width=1\linewidth]{imgs/2024-03-26-21-17-25.png} + \end{center} + uCore OS初始化了一个空的表项、一个内核代码段、一个内核数据段。 + } + \questionandanswer[]{ + 实模式和保护模式有何不同?uCore OS是如何使能和进入保护模式的? + }{ + 实模式的寻址范围不超过1M,并且没有分段机制等,而保护模式的寻址范围则没有1M的限制,并且可以实现分段机制等。uCore OS通过把控制寄存器的0位设置成1来使能和进入保护模式。 + } + \questionandanswer[]{ + Bootloader是如何利用ELF文件头的相关属性加载和运行uCore OS Kernel的? + }{ + 首先判断文件头的e\_magic是否等于ELF\_MAGIC,之后根据e\_phoff找到程序头表的位置,在程序头表中找到分段数和各个分段的偏移位置、大小,接着把各个分段加载到内存中,最后跳转到e\_entry入口开始执行。 + } + \questionandanswer[]{ + 分析中断描述符表(IDT)的结构,说明中断描述符中每个字段的含义以及作用。 uCore OS是如何实现中断机制的? + }{ + 中断描述符表中的每个表项称为中断描述符,它可以确定相应的中断处理程序的位置,中断描述符的结构和每个字段的含义以及作用如下: + \begin{center} + \includegraphics[width=1\linewidth]{imgs/IDT1.png} + \includegraphics[width=1\linewidth]{imgs/IDT2.png} + \end{center} + 它确定了段选择子、段内偏移、该段是否已调入内存、该中断的特权级、中断类型(中断门或者陷阱门)等。 + + uCore OS将每个中断门都初始化为带中断号参数的调用(最后调用trap.c中的内容),之后把系统调用的中断门的特权级设置为用户态,最后加载中断描述符表寄存器。 + } + } + \myitem{程序设计与实现的基本思路}{ + \item 大部分实现的功能在trap.c文件中,首先从实验视频中可以得知,在触发中断后会进入trap.c的执行流程,之后根据不同的中断号执行不同的流程,由于题目要求通过键盘中断实现计时器,因此主要关注键盘中断和时钟中断; + \item 根据题意,在键盘按下S时开始,P暂停,E停止,C继续,A正计时,B倒计时。那么首先考虑键盘中断,这里很明显很适合用switch语句,根据键盘中断后得到的字符不同,执行不同的流程; + \item 这里还需要注意整个功能是存在不同的状态的(其实是因为单线程才会有这么多状态,如果多线程都不需要考虑状态,事件驱动就行),首先很明显可以知道有正在计时状态和停止状态。然后我们考虑这两个状态会在什么时候互相转化,从停止状态转到开始状态可以是按下S或者C,从开始状态转到停止状态可以是按下P或E,或者是倒计时到0了。而且题目需要实现正计时和倒计时,这是两种不同的模式,因此还需要一个状态变量记录当前的模式,通过按A和B切换; + \item 还要注意,当按了B后进入倒计时,此时要输入时间,但是这时候还没有gets等函数的实现,需要自己通过键盘中断进行输入,那么在键盘中断的时候就不仅需要捕获字母,也需要捕获数字,但我们不希望在输入数字的时候不小心输入了字母就打断了数字输入,这时候就需要增加状态了,需要一个状态表示正在输入数字,在按下B后切换到这个状态,当按下Enter后切换到计时状态或停止状态; + \item 当倒计时到0的时候,应该切换到停止状态,并且还需要输出一条信息表示当前计时到0了,但是这里就要注意,从计时状态切换到停止状态时不应该输出这条信息,因此这里需要多加一个中间状态,用来表示倒计时结束的准备输出,这个状态在下一次时钟中断(可以类比数字逻辑电路中,同步时序电路,在时钟有效边沿到来时)转换到停止状态,并且输出这条信息; + \item 关于检测频率,原先的计时器在每次时钟中断时执行ticks++,而时钟中断频率在clock.c文件中设置的是时钟频率除以100,也就是每0.01秒触发一次,尝试过改成除以1000,但会导致走时变慢,应该是因为触发中断太频繁了时间开销太大,也尝试过改成除以10,又会导致走时过快,看来还是原始的除以100最准时; + \item 既然每0.01秒触发一次中断,那么如果是每TICK\_NUM次中断打印一次时间,直观感受就是精度为 TICK\_NUM * 0.01 秒,按照题目要求那么TICK\_NUM应该取10,当然为了提升精度也可以取更小,比如1; + \item 当键入退格时字符为$\backslash$b,用于在输入数字时进行退格;当键入回车时字符为$\backslash$n,用于确定倒计时的时间;循环打印时间时需要使用$\backslash$r,表示将光标回到当前行的开头,这样再打印时间就会把之前的时间覆盖掉; + \item 当然还存在一些bug,比如从10.000倒计时到9.990时就会无法覆盖最后一个0,导致看起来是9.9900;还有时间精度还是不准的问题;欢迎给出修复建议(可以通过Issue的方式,下面会给出网址)。 + } + \myitem{代码}{ + \item \url{https://gitea.shuishan.net.cn/10213903403/os_kernel_lab} + \item 也可以看上传的附件。 + } + 注:\mycircle{1} 要求实验报告以及代码以附件形式提交。 + \mycircle{2} 实验报告提交的截止期为4月1日。 + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab2.tex b/操作系统/实验报告/Lab2.tex new file mode 100644 index 0000000..3733f78 --- /dev/null +++ b/操作系统/实验报告/Lab2.tex @@ -0,0 +1,156 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{2} +\renewcommand{\mylabname}{物理内存管理} +\renewcommand{\mydate}{2024年4月16日} + +\begin{document} + \mytitle + \begin{enumerate} + \item{\textbf{研读理解相关代码后,回答以下问题:}} + \begin{enumerate} + \questionandanswer[]{ + uCore如何探测物理内存布局,其返回结果e820映射结构是什么样的?分别表示什么? + }{} + {\kaishu + 首先探测物理内存布局可以通过BIOS中断或直接探测,其中BIOS中断调用方法通常只能在实模式下完成,直接探测的方法必须在保护模式下完成,这里$\mu$Core 是在实模式下通过BIOS中断调用完成的。具体可以分为以下三步骤: + \begin{enumerate} + \item 设置一个存放内存映射地址描述符的物理地址(在此为0x8000); + \item 将e820作为参数传递给INT 15h中断; + \item 通过检测eflags的CF位来判断探测是否结束。如果CF位为0,则表示探测没有结束,那么就需要设置存放下一个内存映射地址描述符的物理地址,返回步骤2继续进行;否则物理内存检测就此结束。 + \end{enumerate} + + 其返回结果e820的结构为: + \begin{minted}[fontsize=\zihao{-5}]{C} +struct e820map { + int nr_map; + struct { + uint64_t addr; + uint64_t size; + uint32_t type; + } __attribute__((packed)) map[E820MAX]; +}; + \end{minted} + 其中\mintinline{C}{nr_map}表示内存映射地址描述符的数量,\mintinline{C}{addr}表示系统内存块基地址,\mintinline{C}{size}表示系统内存块大小,\mintinline{C}{type}表示内存类型。 + } + \questionandanswer[]{ + uCore中的物理内存空间管理采用什么样的方案?跟我们理论课中的哪个方案相似?有何不同之处? + }{ + $\mu$Core 中的物理内存管理采用段页式系统,但是简化了分段机制,将逻辑地址直接恒等映射到线性地址,之后使用分页机制将线性地址通过分页映射到物理地址。由于使用了分页机制,因此需要对空闲物理块管理,对空闲物理块的管理使用了链表来管理,链表按照地址排序。 + + 跟我们理论课中的“段页式存储管理”和“使用链表管理存储空间”的方案相似,不同之处在于分段机制简化了,并且只使用链表管理了空闲物理块(已分配的物理块在页表中有记录,所以不需要管理)。 + } + \questionandanswer[]{ + Page数据结构中每个字段含义与作用是什么?如何表示某物理块分配与否?字段property的作用是什么?如何表示 property是否有效? + }{} + {\kaishu + \begin{minted}[fontsize=\zihao{-5}]{C} +struct Page { + int ref; // page frame's reference counter + uint32_t flags; // array of flags that describe the status of the page frame + unsigned int property; // the num of free block, used in first fit pm manager + list_entry_t page_link; // free list link +}; + \end{minted} + + \mintinline{C}{ref}字段表示此物理块被引用的个数,如果大于1代表这个物理块对应的可能是共享内存;\mintinline{C}{flags}的0位表示此物理块是否已被分配,0位为1代表已被分配;1位代表此描述符的\mintinline{C}{property}字段是否有效,1位为1代表有效。\mintinline{C}{property}只有在此物理块是空闲块时才有效,表示从此物理块开始连续的空闲物理块的数量。 + + 用\mintinline{C}{flags}的0位表示此物理块是否已被分配,0位为1代表已被分配。 + + \mintinline{C}{property}的作用是表示从此物理块开始连续的空闲物理块的数量。 + + 用\mintinline{C}{flags}的1位表示\mintinline{C}{property}是否有效,1位为1代表有效。 + } + \questionandanswer[]{ + uCore现有代码已实现的物理块分配首次适应算法以及物理块回收算法有没有问题或者错误?如有的话,请简述相关的问题或者错误,并修改相应的代码。 + }{ + \mintinline{C}{default_init_memmap}函数中的\mintinline{C}{p->flags = 0;},这里应该是把\mintinline{C}{flags}的0位设置成0,而不是把整个\mintinline{C}{flags}都设置成0。所以应该修改成\mintinline{C}{p->flags &= ~1;}。 + } + \questionandanswer[]{ + 你认为在uCore的四个物理块基本分配方案基础上有没有进一步优化的可能?如有的话,请简要说明你的相关优化方案。 + }{ + 四个物理块基本分配方案难道是FF(first fit,首次适应)、BF(best fit,最佳首次适应)、WF(worst fit,最坏首次适应)、NF(next fit,循环首次适应)?有进一步优化的可能,比如合并空闲的内存块:在系统空闲时可以检测所有已分配的物理块,将已分配但最近未使用的物理块合并到相邻的位置(最近使用的物理块不能乱动,不然会影响性能还可能出现问题)。 + } + \questionandanswer[]{ + \mintinline{C}{get_pte}、\mintinline{C}{get_page}函数的作用是什么?它们的输入与返回分别是什么? + }{ + \mint{C}|pte_t *get_pte(pde_t *pgdir, uintptr_t la, bool create)| + \mintinline{C}{get_pte}的作用是根据逻辑地址返回页表指针,它的输入为页目录的起始地址、逻辑地址、页表是否已被调入内存,返回为页表指针。 + \mint{C}|struct Page *get_page(pde_t *pgdir, uintptr_t la, pte_t **ptep_store)| + \mintinline{C}{get_page}的作用是根据逻辑地址返回对应的物理块描述符,它的输入为页目录的起始地址、逻辑地址、以及可能需要存储的页表指针的地址,返回为物理块描述符。 + } + \end{enumerate} + \item \textbf{程序设计与实现的基本思路} + \begin{enumerate} + {\kaishu + \item 关于物理内存管理的部分是在kern/mm/中(这里的mm应该是memory map 内存映射的意思?),循环首次适应算法是分配物理块的算法,所以观察到分配物理块的部分在\mintinline{C}{default_pmm.c}中实现,那么只需要关注这个文件的内容。 + \item 原先的代码中实现的是首次适应算法(first fit),这里要改成循环首次适应算法(next fit),只需要记录下每次分配的指针,每次从该指针的位置开始继续查找下一个空闲块。这里使用了\mintinline{C}{list_entry_t *alloc_le = &free_list;}作为全局变量来记录每次分配的指针。(为什么不用静态局部变量?是因为它的测试函数的问题,后面会提到)这里的\mintinline{C}{alloc_le}和\mintinline{C}{default_alloc_pages}中的\mintinline{C}{le}是同样的作用,只是全局变量名字不能和已有的一样所以改了个名。 + \item 这里新建的物理块分配函数使用\mintinline{C}{next_fit_alloc_pages}命名和原来的区分,在这个函数中首先需要初始化\mintinline{C}{alloc_le}指向链表头结点,但这个初始化又必须执行且只执行一次,所以这里使用了分支语句, + \begin{minted}{C} + if (alloc_le == &free_list) + alloc_le = list_next(&free_list); + \end{minted} + + \item 接下来就开始从\mintinline{C}{default_alloc_pages}中的循环着手,原先的循环条件是\\ \mintinline{C}{while((le=list_next(le)) != &free_list)},表示每次查看下一个链表表项,直到到达末尾(由于是循环链表,所以末尾就是头结点即\mintinline{C}{&free_list})。那么这里就需要修改成循环到下一次遇到\mintinline{C}{alloc_le}。假设链表共有$n$项,那么最多需要执行$n+1$次循环,并且最后一次循环不满足条件退出。那能不能直接固定循环$n$次呢?这里是不行的,还是它的测试函数的问题,也在后面提到。因此首次循环和最后一次循环,循环变量指向的都是同一个位置,但是首次循环需要满足条件,最后一次循环需要不满足条件,这应该怎么实现呢?这就是下面要介绍的中途改变循环结束指针的方式。 + + \begin{minted}[fontsize=\zihao{-5}]{C} +static struct Page * +next_fit_alloc_pages(size_t n) { + list_entry_t *start = alloc_le; + list_entry_t *end = &free_list; + while(1) { + if (alloc_le == end) { // 最多两次触发此条件 + if (end != start) { // 第二次触发le == end的时候这里就不满足了 + end = start; // 如果循环到链表末尾了就把结束的指针改成循环开始的位置 + alloc_le = list_next(alloc_le); // 并且这个&free_list不应该被分配 + continue; + } + break; // 这时候就是真正的循环完了也没有剩余空间 + } + ... + alloc_le = list_next(alloc_le); + } + return NULL; +} + \end{minted} + + 首先,用\mintinline{C}{start}记录循环指针开始的位置,用\mintinline{C}{end}记录头结点的位置,之后进入循环,在首次循环到末尾的时候(即\mintinline{C}{if (alloc_le == end)},把\mintinline{C}{end}修改到\mintinline{C}{start}的位置,之后第二次触发\mintinline{C}{if (alloc_le == end)}的时候,就可以退出循环了。也就是把循环遍历分成了两段,假设循环指针当前位置为$k$,共有$n$个链表节点,这就是分成了$k \cdots n$的前一段和$1 \cdots k$的后一段。 + + \item 上文多次提到原先的测试代码的问题,这里它的测试代码在\mintinline{C}{default_check}和\\ \mintinline{C}{basic_check}这两个函数中,这两个函数的目的是检测内存的分配与回收的方案是否正确,具体方法是多次分配回收,例如先分配3个物理块,之后把空闲物理块链表清空,这时候空闲物理块是多少?已经清空了所以是0个对不对?那么这时候要再分配一个物理块呢?应该是无法分配的是吧,但这里就出现问题了,循环首次适应的指针这时候在哪呢?还在之前分配了的位置,所以实际上这时候还是能分配到空闲物理块的,这就出现问题了,它的\mintinline{C}{assert(alloc_page() == NULL);}就不通过了。 + + 分配了3个物理块后的情况如下图所示,红色矩形代表已经被分配的物理块,蓝色矩形代表未被分配的物理块,左侧的圆形代表链表头结点,prev和next表示头结点的前驱和后继节点。此时已经分配了3个物理块,所以\mintinline{C}{alloc_le}记录的位置在第三个物理块后。 + + \includexopp[1.2]{2.2.1} + + 但是之后出现了\mintinline{C}{list_init(&free_list);}这一行,这个函数的定义如下 + \begin{minted}[fontsize=\zihao{-5}]{C} +/* * + * list_init - initialize a new entry + * @elm: new entry to be initialized + * */ +static inline void +list_init(list_entry_t *elm) { + elm->prev = elm->next = elm; +} + \end{minted} + + 可见此函数只是把链表的前驱节点和后继节点都指向了自己,也就变成了下图: + + \includexopp[1.2]{2.2.2} + + 这时候似乎没什么问题,但注意它的清空不彻底,再分配物理空间的时候,\mintinline{C}{alloc_le}还在原先的位置,所以仍然能分配成功,这就导致\mintinline{C}{assert(alloc_page() == NULL);}不通过了。所以解决方案也很简单,只需要把\mintinline{C}{alloc_le}也指向头结点就行了,如下图所示: + + \includexopp[1.2]{2.2.3} + + 还要注意它在清空链表之后还有个恢复的操作,所以这个\mintinline{C}{alloc_le}也需要恢复,而且在\mintinline{C}{default_check}和\mintinline{C}{basic_check}中都有这样的操作,因此两个函数,每个函数一次保存一次恢复,所以需要添加四行\mintinline{C}{alloc_le = &free_list;}。 + + % 为什么楷体的仓会变成仑啊?????? + \item 时间仓促,如有错误敬请指出(在下方的链接中)。 + } + \end{enumerate} + \myitem{代码}{ + \item \url{https://gitea.shuishan.net.cn/10213903403/os_kernel_lab} + \item 也可以看上传的附件。 + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab3.tex b/操作系统/实验报告/Lab3.tex new file mode 100644 index 0000000..a6753f6 --- /dev/null +++ b/操作系统/实验报告/Lab3.tex @@ -0,0 +1,113 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{3} +\renewcommand{\mylabname}{虚拟内存管理} +\renewcommand{\mydate}{2024年5月7日} + +\begin{document} + \mytitle + \begin{enumerate} + \item{\textbf{研读理解相关代码后,回答以下问题:}} + \begin{enumerate} + \questionandanswer[]{ + uCore 中的段页式存储管理方案与理论课中讲述的方案有何不同? + }{ + $\mu$Core 中简化了分段机制,将逻辑地址直接恒等映射到线性地址,之后使用分页机制将线性地址通过分页映射到物理地址。由于使用了分页机制,因此需要对空闲物理块管理,对空闲物理块的管理使用了链表来管理,链表按照地址排序。 + + 跟我们理论课中的“段页式存储管理”和“使用链表管理存储空间”的方案相似,不同之处在于分段机制简化了,并且只使用链表管理了空闲物理块(已分配的物理块在页表中有记录,所以不需要管理)。 + } + \questionandanswer[]{ + 试简述uCore中缺页异常的处理过程,它与理论课中讲述的过程有何不同? + }{ + 在vmm.c的注释中有这样一行: + \mint{C}| * CALL GRAPH: trap--> trap_dispatch-->pgfault_handler-->do_pgfault| + 显然,在$\mu$Core中,缺页异常从\mintinline{C}{trap}触发,之后通过\mintinline{C}{trap_dispatch}根据中断号(\mintinline{C}{tf->tf_trapno}分发给不同的处理程序,这里是缺页中断(\mintinline{C}{T_PGFLT}),所以分发给\mintinline{C}{pgfault_handler},再调用\mintinline{C}{do_pgfault},之后在\mintinline{C}{do_pgfault}中找到一个pte,并且分配内存或者从交换分区换入一个页面,或者由于访问权限不正确而直接返回失败。 + + 与理论课中讲述的过程的不同是进行了简化,取消了快表,也就是只有一级索引而没有二级索引。 + } + \questionandanswer[]{ + 为了支持页面置换,在数据结构Page中添加了哪些字段,其作用是什么? + }{} + {\kaishu + \begin{minted}[fontsize=\zihao{-5}]{C} +struct Page { + int ref; // page frame's reference counter + uint32_t flags; // array of flags that describe the status of the page frame + unsigned int property; // the num of free block, used in first fit pm manager + list_entry_t page_link; // free list link + list_entry_t pra_page_link; // used for pra (page replace algorithm) + uintptr_t pra_vaddr; // used for pra (page replace algorithm) +}; + \end{minted} + + 添加了\mintinline{C}{pra_page_link}和\mintinline{C}{pra_vaddr}这两个字段,\mintinline{C}{pra_page_link}是用来将物理块组织成FIFO队列(使用链表实现)用来进行页面置换的,\mintinline{C}{pra_vaddr}是物理块对应的虚拟地址,用来记录访问哪个虚拟地址的时候产生的缺页,以便进行页面置换。 + } + \questionandanswer[]{ + 请描述页目录项页(PDE)和页表目录项(PTE)的组成部分对uCore实现页面置换算法的潜在用处。请问如何区分未映射的页表表项与被换出页的页表表项?请描述被换出页的页表表项的组成结构。 + }{ + 用处在于记录某个页面在内存中还是在外存对换区中,以及对应物理地址(在内存中)或者offset(在外存对换区中),在下次页面换入或换出时确保页面被放到正确的位置上。 + + 由于未映射的页表表项全是0,所以被换出的页的offset从1开始以区分。这样如果页表表项全是0就说明是未映射,如果在offset(高24位)中存在1,那么就是被换出的。 + + 被换出页的页表表项复用了pte的结构,在\mintinline{C}{memlayout.h}中有这样一行: + \mint{C}|typedef pte_t swap_entry_t; //the pte can also be a swap entry| + + 再根据示意图: + \begin{center} + \includegraphics[width=0.5\linewidth]{imgs/2024-05-10-08-49-47.png} + \end{center} + + 可以看到其高24位为offset,代表在外存对换区里的位置;存在位(最低位)为0,表示此页面不存在对应的物理块;中间的7位都保留暂不使用。 + } + \end{enumerate} + \item \textbf{程序设计与实现的基本思路} + \begin{enumerate} + {\kaishu + \item 在$\mu$Core中原先实现的是FIFO页面置换算法,这里要改成第二次机会页面置换算法,可以发现页面的组织方式不需要更改,仍然使用链表,每次插入页面时仍然是添加到链表头部不需要更改,只需要更改换出页面的算法即可。 + + \begin{center} + \includegraphics[width=0.9\linewidth]{imgs/2024-05-10-09-00-25.png} + \end{center} + + \item 课上讲的这张示意图,右侧是链表的头部,左侧是链表的尾部,每次插入的页面在最右侧即链表的头部。当需要换出页面时,从左侧(链表尾部)取出一个页面,如果这个页面的访问位是1,那么将其访问位改为0,并放到右侧(链表头部)。接着再从左侧(链表尾部)检测下一个页面,直到找到一个访问位为0页面的作为换出的页面。所以可以写出代码如下: + + \begin{minted}{C} +// 从后往前,最后面的是最早访问的 +list_entry_t *current = head->prev; +list_entry_t *le = NULL; +for (; current != head; current = current->prev) { + pte_t *ptep = get_pte(mm->pgdir, le2vma(current, vm_start), 0); + if (*ptep & PTE_A) { // 访问位为1 + *ptep &= !PTE_A; // 清除访问位 + list_del(current); // 从链表中移除 + list_add(head, current); // 添加到链表头部 + } else { + le = current; + break; + } +} + \end{minted} + + \mintinline{C}{le}即为最终的找到的用来换出的页面。 + + \item 当然,还需要完善一些问题。当页面只有一个并且访问位为1时,从链表中移除此页面再放入后链表结构并未改变,所以下一次的\mintinline{C}{current}指向链表头结点,循环退出了,但此时\mintinline{C}{le}还是空的!但期望的返回结果应该是这一个页面,所以需要对这种情况进行处理: + + \begin{minted}{C} +if (le == NULL) { + le = head->prev; // 循环一遍找不到就最后一个 +} + \end{minted} + + 当循环一遍仍然找不到可以换出的页面的时候就选择最后一个页面(和FIFO一样)作为换出的页面。当然,其实使用第二次机会页面置换算法的话,页面大于一个的时候必定能找到一个换出的页面的(请自行验证),而且也不会出现页面为0个情况(总不能页表数量为0吧),所以其实这样就只是解决了页面只有一个时的异常。 + + \item 测试代码\mintinline{C}{_fifo_check_swap}仍然需要修改,因为使用第二次机会页面置换算法,缺页次数肯定与FIFO算法不尽相同。测试代码中的\mintinline{C}{pgfault_num}即为缺页次数。 + + \item 由于时间紧迫,一些细节可能没有考虑周到,如有发现错误欢迎在下方的链接中提Issue。 + } + \end{enumerate} + \myitem{代码}{ + \item \url{https://gitea.shuishan.net.cn/10213903403/os_kernel_lab} + \item 也可以看上传的附件。 + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab4.tex b/操作系统/实验报告/Lab4.tex new file mode 100644 index 0000000..4f95977 --- /dev/null +++ b/操作系统/实验报告/Lab4.tex @@ -0,0 +1,295 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{4} +\renewcommand{\mylabname}{内核线程管理} +\renewcommand{\mydate}{2024年5月17日} + +\begin{document} + \mytitle + \begin{enumerate} + \item{\textbf{研读理解相关代码后,回答以下问题:}} + \begin{enumerate} + \questionandanswer[]{ + 请简单说明\mintinline{C}{proc_struct}中各个成员变量含义以及作用。它与理论课中讲述的PCB结构有何不同之处? + }{} + {\kaishu + \setlength{\parskip}{2em} + \begin{minted}[]{C} +struct proc_struct { + enum proc_state state; // Process state + int pid; // Process ID + int runs; // the running times of Proces + uintptr_t kstack; // Process kernel stack + volatile bool need_resched; // bool value: need to be rescheduled to release CPU? + struct proc_struct *parent; // the parent process + struct mm_struct *mm; // Process's memory management field + struct context context; // Switch here to run process + struct trapframe *tf; // Trap frame for current interrupt + uintptr_t cr3; // CR3 register: the base addr of Page Directroy Table(PDT) + uint32_t flags; // Process flag + char name[PROC_NAME_LEN + 1]; // Process name + list_entry_t list_link; // Process link list + list_entry_t hash_link; // Process hash list +}; + \end{minted} + + \mintinline{C}{state}是进程的状态,\mintinline{C}{pid}是进程的ID,\mintinline{C}{runs}是进程的被调度到的次数,\mintinline{C}{kstack}是进程的堆栈,\mintinline{C}{need_resched}用于非抢占式调度,表示进程是否运行结束可以把CPU重新调度给其他进程,\mintinline{C}{parent}是进程的父进程,\mintinline{C}{mm}是进程的内存管理的部分的指针,\mintinline{C}{context}是进程的上下文,即 + \begin{minted}{C} +struct context { + uint32_t eip; + uint32_t esp; + uint32_t ebx; + uint32_t ecx; + uint32_t edx; + uint32_t esi; + uint32_t edi; + uint32_t ebp; +}; + \end{minted} + \mintinline{C}{tf}是进程的中断帧,记录了中断的相关信息,\mintinline{C}{cr3}是进程的页目录表的指针,\mintinline{C}{flags}是进程的各种标志位,\mintinline{C}{name}是进程的名称,\mintinline{C}{list_link}是所有进程的链表表项,\mintinline{C}{hash_link}是具有同一个哈希值的进程的链表表项。 + + 它与理论课中讲述的PCB结构的不同之处在于没有优先级、进程组、进程运行时间、进程使用的CPU时间、进程的子进程的CPU时间、文件管理(因为还没实现文件系统?)。 + } + \questionandanswer[]{ + 试简单分析 uCore中 内核线程的创建过程。(要求说明处理流程,相关的主要函数、它们的功能以及调用关系。) + }{} + {\kaishu + \setlength{\parskip}{2em} + \begin{center} + \includegraphics[width=1\linewidth]{imgs/2024-05-17-19-18-00.png} + \end{center} + \begin{minted}{C} +// proc_init - set up the first kernel thread idleproc "idle" by itself and +// - create the second kernel thread init_main +void +proc_init(void) { + int i; + + list_init(&proc_list); + for (i = 0; i < HASH_LIST_SIZE; i ++) { + list_init(hash_list + i); + } + + if ((idleproc = alloc_proc()) == NULL) { + panic("cannot alloc idleproc.\n"); + } + + idleproc->pid = 0; + idleproc->state = PROC_RUNNABLE; + idleproc->kstack = (uintptr_t)bootstack; + idleproc->need_resched = 1; + set_proc_name(idleproc, "idle"); + nr_process ++; + + current = idleproc; + + int pid = kernel_thread(init_main, "Hello world!!", 0); + if (pid <= 0) { + panic("create init_main failed.\n"); + } + + initproc = find_proc(pid); + set_proc_name(initproc, "init"); + + assert(idleproc != NULL && idleproc->pid == 0); + assert(initproc != NULL && initproc->pid == 1); +} + \end{minted} + + 主要的内核线程创建过程在\mintinline{C}{proc_init}中,首先调用\mintinline{C}{list_init}初始化全部进程的链表和相同哈希的进程列表,然后调用 \mintinline{C}{alloc_proc}给当前进程分配一个进程控制块,并且设置相关属性,其中调用\mintinline{C}{set_proc_name}设置当前进程的名称为\mintinline{C}{"idle"},之后调用\mintinline{C}{kernel_thread}创建一个\mintinline{C}{init_main}进程,并调用\mintinline{C}{find_proc},再调用\mintinline{C}{set_proc_name}将其名称设置为\mintinline{C}{init}。 + + \begin{minted}{C} +// kernel_thread - create a kernel thread using "fn" function +// NOTE: the contents of temp trapframe tf will be copied to +// proc->tf in do_fork-->copy_thread function +int +kernel_thread(int (*fn)(void *), void *arg, uint32_t clone_flags) { + struct trapframe tf; + memset(&tf, 0, sizeof(struct trapframe)); + tf.tf_cs = KERNEL_CS; + tf.tf_ds = tf.tf_es = tf.tf_ss = KERNEL_DS; + tf.tf_regs.reg_ebx = (uint32_t)fn; + tf.tf_regs.reg_edx = (uint32_t)arg; + tf.tf_eip = (uint32_t)kernel_thread_entry; + return do_fork(clone_flags | CLONE_VM, 0, &tf); +} + \end{minted} + + \mintinline{C}{kernel_thread}的功能是通过调用一个函数创建一个新的线程,由于新的线程是由当前线程创建的,这里就调用了\mintinline{C}{do_fork}函数。 + + \begin{minted}{C} +/* do_fork - parent process for a new child process + * @clone_flags: used to guide how to clone the child process + * @stack: the parent's user stack pointer. if stack==0, It means to fork a kernel thread. + * @tf: the trapframe info, which will be copied to child process's proc->tf + */ +int +do_fork(uint32_t clone_flags, uintptr_t stack, struct trapframe *tf) { + int ret = -E_NO_FREE_PROC; + struct proc_struct *proc; + if (nr_process >= MAX_PROCESS) { + goto fork_out; + } + ret = -E_NO_MEM; + //LAB4:EXERCISE2 YOUR CODE + /* + * Some Useful MACROs, Functions and DEFINEs, you can use them in below implementation. + * MACROs or Functions: + * alloc_proc: create a proc struct and init fields (lab4:exercise1) + * setup_kstack: alloc pages with size KSTACKPAGE as process kernel stack + * copy_mm: process "proc" duplicate OR share process "current"'s mm according clone_flags + * if clone_flags & CLONE_VM, then "share" ; else "duplicate" + * copy_thread: setup the trapframe on the process's kernel stack top and + * setup the kernel entry point and stack of process + * hash_proc: add proc into proc hash_list + * get_pid: alloc a unique pid for process + * wakeup_proc: set proc->state = PROC_RUNNABLE + * VARIABLES: + * proc_list: the process set's list + * nr_process: the number of process set + */ + + // 1. call alloc_proc to allocate a proc_struct + // 2. call setup_kstack to allocate a kernel stack for child process + // 3. call copy_mm to dup OR share mm according clone_flag + // 4. call copy_thread to setup tf & context in proc_struct + // 5. insert proc_struct into hash_list && proc_list + // 6. call wakeup_proc to make the new child process RUNNABLE + // 7. set ret vaule using child proc's pid + if ((proc = alloc_proc()) == NULL) { + goto fork_out; + } + + proc->parent = current; + + if (setup_kstack(proc) != 0) { + goto bad_fork_cleanup_proc; + } + if (copy_mm(clone_flags, proc) != 0) { + goto bad_fork_cleanup_kstack; + } + copy_thread(proc, stack, tf); + + bool intr_flag; + local_intr_save(intr_flag); + { + proc->pid = get_pid(); + hash_proc(proc); + list_add(&proc_list, &(proc->list_link)); + nr_process ++; + } + local_intr_restore(intr_flag); + + wakeup_proc(proc); + + ret = proc->pid; +fork_out: + return ret; + +bad_fork_cleanup_kstack: + put_kstack(proc); +bad_fork_cleanup_proc: + kfree(proc); + goto fork_out; +} + \end{minted} + + \mintinline{C}{do_fork}函数中,先调用\mintinline{C}{alloc_proc}分配一个进程控制块,再调用\mintinline{C}{setup_kstack}分配一个内核堆栈,再调用\mintinline{C}{copy_mm}将父进程的内存空间复制或者共享给子进程,再调用\mintinline{C}{copy_thread}设置子进程的中断处理,并设置上下文的变量。之后关中断,将新的进程控制块插入到全部进程链表与相同哈希链表中,再开中断。然后把子进程设置成状态为\mintinline{C}{RUNNABLE},返回子进程的\mintinline{C}{pid}。 + } + \questionandanswer[]{ + 试简单分析 uCore中 内核线程的切换过程。(要求说明处理流程,相关的主要函数、它们的功能以及调用关系。) + }{} + {\kaishu + \setlength{\parskip}{2em} + 切换线程主要使用的是\mintinline{C}{schedule}函数。 + + \begin{minted}{C} +void +schedule(void) { + bool intr_flag; + list_entry_t *le, *last; + struct proc_struct *next = NULL; + local_intr_save(intr_flag); + { + current->need_resched = 0; + last = (current == idleproc) ? &proc_list : &(current->list_link); + le = last; + do { + if ((le = list_next(le)) != &proc_list) { + next = le2proc(le, list_link); + if (next->state == PROC_RUNNABLE) { + break; + } + } + } while (le != last); + if (next == NULL || next->state != PROC_RUNNABLE) { + next = idleproc; + } + next->runs ++; + if (next != current) { + proc_run(next); + } + } + local_intr_restore(intr_flag); +} + \end{minted} + + 在\mintinline{C}{schedule}中,我们要找到下一次调度的线程,即找到状态为\mintinline{C}{RUNNABLE}的线程,如果当前的线程为\mintinline{C}{idleproc}即CPU空闲的线程则从线进程链表头开始找(因为\mintinline{C}{idleproc}线程不在线程链表中),否则从当前线程的下一个线程开始找。找到需要调度的\mintinline{C}{RUNNABLE}线程后,如果新的线程和老的线程不是同一个线程,则需要调用\mintinline{C}{proc_run}进行切换。 + + \begin{minted}{C} +// proc_run - make process "proc" running on cpu +// NOTE: before call switch_to, should load base addr of "proc"'s new PDT +void +proc_run(struct proc_struct *proc) { + if (proc != current) { + bool intr_flag; + struct proc_struct *prev = current, *next = proc; + local_intr_save(intr_flag); + { + current = proc; + load_esp0(next->kstack + KSTACKSIZE); + lcr3(next->cr3); + switch_to(&(prev->context), &(next->context)); + } + local_intr_restore(intr_flag); + } +} + \end{minted} + + 在\mintinline{C}{proc_run}中,调用\mintinline{C}{load_esp0}设置任务状态段,调用\mintinline{C}{lcr3}加载新的进程的页表,之后调用\mintinline{C}{switch_to}保存老的进程的上下文,恢复新的进程的上下文。 + + \begin{minted}{asm} +switch_to: # switch_to(from, to) + + # save from's registers + movl 4(%esp), %eax # eax points to from + popl 0(%eax) # save eip !popl + movl %esp, 4(%eax) + movl %ebx, 8(%eax) + movl %ecx, 12(%eax) + movl %edx, 16(%eax) + movl %esi, 20(%eax) + movl %edi, 24(%eax) + movl %ebp, 28(%eax) + + # restore to's registers + movl 4(%esp), %eax # not 8(%esp): popped return address already + # eax now points to to + movl 28(%eax), %ebp + movl 24(%eax), %edi + movl 20(%eax), %esi + movl 16(%eax), %edx + movl 12(%eax), %ecx + movl 8(%eax), %ebx + movl 4(%eax), %esp + + pushl 0(%eax) # push eip + + ret + \end{minted} + + 在\mintinline{C}{switch_to}中,从\mintinline{C}{esp+4}的位置加载\mintinline{C}{eax}指针(即\mintinline{C}{&(prev->context)}),并把老的线程中当前的寄存器中的值都放到这个指针所在的\mintinline{C}{context}结构体中,再从\mintinline{C}{esp+8}的位置加载\mintinline{C}{eax}指针(即\mintinline{C}{&(next->context)}),并从这个指针的位置加载新的线程中的上下文寄存器的值,其中\mintinline{C}{eip}需要用\mintinline{C}{popl}和\mintinline{C}{pushl}来设置,不能使用\mintinline{C}{movl}来设置。 + } + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab5.tex b/操作系统/实验报告/Lab5.tex new file mode 100644 index 0000000..fcbb116 --- /dev/null +++ b/操作系统/实验报告/Lab5.tex @@ -0,0 +1,130 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{5} +\renewcommand{\mylabname}{用户进程管理} +\renewcommand{\mydate}{2024年5月26日} + +\begin{document} + \mytitle + \begin{enumerate} + \item{\textbf{研读理解相关代码后,回答以下问题:}} + \begin{enumerate} + \questionandanswer[]{ + 用户进程与内核线程有何不同?为何要引入用户进程? + }{ + 用户进程所在的段的特权级是3,而内核进程所在的段的特权级是0。 + + 引入用户进程是为了确保安全。一些代码和数据只能在内核态访问而不能在用户态访问,例如操作系统进行页面管理和进程管理的代码。如果用户的代码出错,错误地修改了操作系统的代码段或数据段,会造成严重的错误。而引入用户进程后,用户进程在特权级3下运行,无法修改内核进程所在段,只要操作系统不崩溃,用户进程出现错误仍不影响操作系统正常运行。 + } + \questionandanswer[]{ + uCore是如何实现系统调用的?这样的设计有何优点? + }{ + \begin{center} + \includegraphics[width=0.5\linewidth]{imgs/Interrupt_Procedure_Call.jpg} + \end{center} + + 在用户态(特权级3)通过 \mintinline{asm}{int 0x80} 指令,根据中断描述符表找到中断处理程序的段选择子以及偏移量,根据段选择子在段描述符表中找到对应的段描述符,再把段描述符的地址加上偏移量即可找到最终需要执行的代码,并且以特权级0执行。其中参数(即中断号)和返回值的传递通过 \mintinline{asm}{eax} 寄存器实现。 + + 这样设计的优点是在用户进程处于用户态的情况下能以内核态执行系统调用,也就是说操作系统可以在切换到内核态之前先进行检查用户是否有权限执行此系统调用,如果没有权限可以提前拦截,避免用户进程错误地或恶意地切换到内核态。 + } + \questionandanswer[]{ + 分析 uCore中 用户进程的创建、调度以及执行的过程。( 要求说明处理流程,相关的主要函数、它们的功能以及调用关系。) + }{} + {\kaishu\setlength{\parskip}{2em} + 在 \mintinline{C}{init_main} 中加入了一行 \mintinline{C}{int pid = kernel_thread(user_main, NULL, 0);} , \mintinline{C}{user_main} 的定义如下: + \begin{minted}{C} + // user_main - kernel thread used to exec a user program + static int + user_main(void *arg) { + #ifdef TEST + KERNEL_EXECVE2(TEST, TESTSTART, TESTSIZE); + #else + KERNEL_EXECVE(exit); + #endif + panic("user_main execve failed.\n"); + } + \end{minted} + 可以看到这个进程是用来创建用户进程的,其中调用了 \mintinline{C}{kernel_execve} : + \begin{minted}{C} + // kernel_execve - do SYS_exec syscall to exec a user program called by user_main kernel_thread + static int + kernel_execve(const char *name, unsigned char *binary, size_t size) { + int ret, len = strlen(name); + asm volatile ( + "int %1;" + : "=a" (ret) + : "i" (T_SYSCALL), "0" (SYS_exec), "d" (name), "c" (len), "b" (binary), "D" (size) + : "memory"); + return ret; + } + \end{minted} + 其中又调用了系统调用子功能 \mintinline{C}{SYS_exec} ,它对应的函数为 + \begin{minted}{C} + static int + sys_exec(uint32_t arg[]) { + const char *name = (const char *)arg[0]; + size_t len = (size_t)arg[1]; + unsigned char *binary = (unsigned char *)arg[2]; + size_t size = (size_t)arg[3]; + return do_execve(name, len, binary, size); + } + \end{minted} + 其中又调用了 \mintinline{C}{do_execve} + \begin{minted}{C} + // do_execve - call exit_mmap(mm)&put_pgdir(mm) to reclaim memory space of current process + // - call load_icode to setup new memory space accroding binary prog. + int + do_execve(const char *name, size_t len, unsigned char *binary, size_t size) { + struct mm_struct *mm = current->mm; + if (!user_mem_check(mm, (uintptr_t)name, len, 0)) { + return -E_INVAL; + } + if (len > PROC_NAME_LEN) { + len = PROC_NAME_LEN; + } + + char local_name[PROC_NAME_LEN + 1]; + memset(local_name, 0, sizeof(local_name)); + memcpy(local_name, name, len); + + if (mm != NULL) { + lcr3(boot_cr3); + if (mm_count_dec(mm) == 0) { + exit_mmap(mm); + put_pgdir(mm); + mm_destroy(mm); + } + current->mm = NULL; + } + int ret; + if ((ret = load_icode(binary, size)) != 0) { + goto execve_exit; + } + set_proc_name(current, local_name); + return 0; + + execve_exit: + do_exit(ret); + panic("already exit: %e.\n", ret); + } + \end{minted} + + 这里的 \mintinline{C}{do_execve} 就释放了当前内核进程的内存空间,并且调用了 \mintinline{C}{load_icode} + \begin{minted}{C} + /* load_icode - load the content of binary program(ELF format) as the new content of current process + * @binary: the memory addr of the content of binary program + * @size: the size of the content of binary program + */ + static int + load_icode(unsigned char *binary, size_t size) { + ... + } + \end{minted} + + 这里 \mintinline{C}{load_icode} 就会创建一个新的页目录,把内核空间中共用的部分复制过去,之后从程序文件(ELF格式)中读取程序头,根据各个段的地址在内存中分配空间,并相应设置权限,然后从程序文件中的内容复制到内存中,之后将当前进程的页目录设置为新创建的这个页目录。 + + 最后设置当前中断帧的代码段,由于这里的代码段的特权级为3,所以(通过 \mintinline{asm}{eax} )返回之后继续执行代码就是以用户的特权级执行了。 + } + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/操作系统/实验报告/Lab67.tex b/操作系统/实验报告/Lab67.tex new file mode 100644 index 0000000..574be12 --- /dev/null +++ b/操作系统/实验报告/Lab67.tex @@ -0,0 +1,298 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{6、7} +\renewcommand{\mylabname}{调度器、同步互斥} +\renewcommand{\mydate}{2024年6月10日} + +\begin{document} + \mytitle + \begin{enumerate} + \item \textbf{完成相关实验内容后,回答以下问题:} + + \textbf{Lab6:} + \begin{enumerate} + \questionandanswer[]{ + 分析sched\_class中各个函数指针的用法,并结合Round Robin 调度算法描述ucore的调度执行过程。 + }{} + {\kaishu\setlength{\parskip}{2em} + 先看代码: + \begin{minted}{C} +// The introduction of scheduling classes is borrrowed from Linux, and makes the +// core scheduler quite extensible. These classes (the scheduler modules) encapsulate +// the scheduling policies. +struct sched_class { + // the name of sched_class + const char *name; + // Init the run queue + void (*init)(struct run_queue *rq); + // put the proc into runqueue, and this function must be called with rq_lock + void (*enqueue)(struct run_queue *rq, struct proc_struct *proc); + // get the proc out runqueue, and this function must be called with rq_lock + void (*dequeue)(struct run_queue *rq, struct proc_struct *proc); + // choose the next runnable task + struct proc_struct *(*pick_next)(struct run_queue *rq); + // dealer of the time-tick + void (*proc_tick)(struct run_queue *rq, struct proc_struct *proc); + /* for SMP support in the future + * load_balance + * void (*load_balance)(struct rq* rq); + * get some proc from this rq, used in load_balance, + * return value is the num of gotten proc + * int (*get_proc)(struct rq* rq, struct proc* procs_moved[]); + */ +}; + \end{minted} + + \mintinline{C}{name} 即为调度类的名称, \mintinline{C}{init} 用来初始化运行队列(数据结构不一定是链表,可以是任何数据结构), \mintinline{C}{enqueue} 是(创建新的进程的时候)进程入队的函数; \mintinline{C}{dequeue} 是(进程结束的时候)进程出队的函数; \mintinline{C}{pick_next} 用来在就绪(RUNNABLE)状态的进程中选出下一个将要调度的进程; \mintinline{C}{proc_tick} 是在时钟中断时需要执行的函数。 + + \mintinline{C}{labcodes_answer/lab6_result} 中实现的是stride调度算法,而Round Robin调度算法可以在 \mintinline{C}{labcodes/lab6} 中找到: + \begin{minted}{C} +struct sched_class default_sched_class = { + .name = "RR_scheduler", + .init = RR_init, + .enqueue = RR_enqueue, + .dequeue = RR_dequeue, + .pick_next = RR_pick_next, + .proc_tick = RR_proc_tick, +}; + \end{minted} + + 对于Round Robin(时间片轮转),$\mu$Core 的调度执行过程如下: + 调用 \mintinline{C}{RR_init} 初始化一个队列。之后每次触发时钟中断时,进入 \mintinline{C}{trap_dispatch} ,根据 \mintinline{C}{labcodes_answer/lab7_result/kern/trap/trap.c} : + \begin{minted}{C} +/* LAB6 YOUR CODE */ +/* IMPORTANT FUNCTIONS: + * run_timer_list + *---------------------- + * you should update your lab5 code (just add ONE or TWO lines of code): + * Every tick, you should update the system time, iterate the timers, and trigger the timers which are end to call scheduler. + * You can use one funcitons to finish all these things. + */ + \end{minted} + + 应该更新系统计时器,并且调用调度器的中断处理函数 \mintinline{C}{RR_proc_tick} : + \begin{minted}{C} +static void +RR_proc_tick(struct run_queue *rq, struct proc_struct *proc) { + if (proc->time_slice > 0) { + proc->time_slice --; + } + if (proc->time_slice == 0) { + proc->need_resched = 1; + } +} + \end{minted} + + 在中断处理函数中更新进程还剩余的时间片( \mintinline{C}{proc->time_slice} ,如果时间片用完了就把进程标记为需要重新调度。执行完 \mintinline{C}{trap_dispatch} 之后,在 \mintinline{C}{trap} 函数中有这样几行: + \begin{minted}{C} +if (current->need_resched) { + schedule(); +} + \end{minted} + + 这就是在当前进程需要重新调度时再次执行 \mintinline{C}{schedule} ,再看 \mintinline{C}{schedule} 的代码: + \begin{minted}{C} +void +schedule(void) { + bool intr_flag; + struct proc_struct *next; + local_intr_save(intr_flag); + { + current->need_resched = 0; + if (current->state == PROC_RUNNABLE) { + sched_class_enqueue(current); + } + if ((next = sched_class_pick_next()) != NULL) { + sched_class_dequeue(next); + } + if (next == NULL) { + next = idleproc; + } + next->runs ++; + if (next != current) { + proc_run(next); + } + } + local_intr_restore(intr_flag); +} + \end{minted} + + 这里当前进程是 \mintinline{C}{PROC_RUNNABLE} 状态,所以会把当前进程放入队列(末尾),之后把下一个进程(从队首)取出,如果下一个进程不是idle进程,就执行下一个进程。下一个进程继续执行直到时间片用完(或提前结束或进入等待状态),这样就实现了时间片轮转。 + } + \questionandanswer[]{ + 如何在uCore OS中设计实现“多级反馈队列调度算法”?请给出概要设计,鼓励给出详细设计。 + }{ + \begin{itemize} + \item 初始化函数:初始化所有的多级队列,每个队列有不同的时间片大小; + \item 入队函数:新的进程应该进入最高优先级的队列; + \item 出队函数:进程在哪个队列就从哪个队列里出队; + \item 选出下一个调度的进程:按照优先级从高到低遍历每个队列,找到一个不为空的队列后,选出队首的进程; + \item 时钟中断时执行:如果当前进程的时间片用完,这时候就需要把这个进程从当前队列中取出,放到更低的优先级队列中;如果已经是最低优先级队列,就按照时间片轮转的方式,从队首取出放到队尾; + \item 时钟中断时,如果比当前进程更高的优先级队列中存在进程,那么将当前进程的状态改为 \mintinline{C}{PROC_RUNNABLE} 并调用 \mintinline{C}{schedule} 进行重新调度,这是为了实现高优先级对低优先级的抢占式调度; + \item IO中断时,将当前进程标记为等待IO;等到调用 \mintinline{C}{wakeup_proc} 唤醒进程时,如果此进程被标记了等待IO,那么此时将进程放到最高优先级队列,此时该进程会被优先调度,这是为了确保IO密集型的进程优先得到调度。 + \end{itemize} + } + \end{enumerate} + \textbf{Lab7:} + \begin{enumerate} + \questionandanswer[]{ + uCore OS与理论课的信号量机制的实现方案有何不同?请给出 理论课中的信号量机制的实现方案 的概要设计。 + }{} + {\kaishu\setlength{\parskip}{2em} + 理论课中的信号量机制的实现方案直接简单地关闭中断,修改信号量的值,再开中断。但是在$\mu$Core中在进入临界区之后要进行进程的等待和唤醒。也就是在 \mintinline{C}{__down} 函数中,关闭中断后,访问 \mintinline{C}{sem->value} ,如果此信号量的值大于0那么正常修改后开中断。否则,说明进程需要等待,这时重新开启中断后会将进程放入等待队列,并且触发一次进程调度。 + \begin{minted}{C} + bool intr_flag; + local_intr_save(intr_flag); + if (sem->value > 0) { + sem->value --; + local_intr_restore(intr_flag); + return 0; + } + wait_t __wait, *wait = &__wait; + wait_current_set(&(sem->wait_queue), wait, wait_state); + local_intr_restore(intr_flag); + + schedule(); + \end{minted} + + 当该进程被唤醒,并且被再次调度到时,就将其移出等待队列: + \begin{minted}{C} + local_intr_save(intr_flag); + wait_current_del(&(sem->wait_queue), wait); + local_intr_restore(intr_flag); + + if (wait->wakeup_flags != wait_state) { + return wait->wakeup_flags; + } + \end{minted} + + 在 \mintinline{C}{__up} 中,关闭中断后,如果当前的等待队列中有进程,那么需要唤醒队首的一个进程,并且将信号量的值加一,之后再开中断。 + \begin{minted}{C} + if ((wait = wait_queue_first(&(sem->wait_queue))) == NULL) { + sem->value ++; + } + \end{minted} + + 理论课中的信号量机制的实现方案只需要在 \mintinline{C}{up} 里关中断,修改信号量的值,开中断,在 \mintinline{C}{down} 里关中断,修改信号量的值,开中断。 + } + \questionandanswer[]{ + 用户级信号量与内核级信号量有何不同?请给出在现有的内核级信号量基础上实现用户级信号量的概要设计。 + }{} + {\kaishu\setlength{\parskip}{2em} + 用户级信号量的创建、访问、修改都是在用户态完成的,而内核级信号量的创建、访问、修改都是在内核态完成的。 + + 在现有的内核级信号量基础上实现用户级信号量,最简单的方式是使用内核级信号量对一个用户空间中的变量当作临界资源访问,比如可以在用户空间中这样实现PV操作(以下P用acquire表示,V用release表示) + + \begin{minted}{C} +#define SLEEP_TIME 10 // 检测间隔 + +typedef struct { + int value; // 用户级信号量的值 + semaphore_t sem; // 内核级信号量 +} user_semaphore; + +void acquire(*user_semaphore) { + while (1) { // 不断检测用户级信号量的值 + down(user_semaphore->sem); // 进入临界区 + if (user_semaphore->value > 0) { + user_semaphore->value--; // 修改用户级信号量 + up(user_semaphore->); // 退出临界区 + return; + } + up(user_semaphore->sem); // 退出临界区 + do_sleep(SLEEP_TIME); // 用户进程将自己挂起 + } +} + +void release(*user_semaphore) { + down(user_semaphore->sem); // 进入临界区 + user_semaphore->value++; // 修改用户级信号量 + up(user_semaphore->sem); // 退出临界区 +} + \end{minted} + + 这里不需要init函数,因为创建变量的时候可以直接给value赋初值。 + + 可以作个类比,由于不能一直处于关中断的状态(万一因为故障没有开中断),所以用关中断实现内核级信号量用来实现内核线程的同步互斥;由于不能一直处于内核态(权限过高不安全),所以用内核级信号量实现用户级信号量用来实现用户进程或线程的同步互斥。 + + 当然也可以使用系统调用来实现用户级信号量,这里就不详述了。 + } + \end{enumerate} + \item \textbf{程序设计与实现的基本思路} + + {\kaishu + 虽然是任选一题完成,但是写完一个后顺手就把另一个写了。 + + \textbf{Lab6:} + \begin{enumerate} + \item 彩票进程调度算法,还是比较容易的,每个进程设置了一个新的属性: \mintinline{C}{uint32_t lab6_ticket_start;} + 用来表示进程的第一个彩票的位置,并且使用原先就有的 \mintinline{C}{uint32_t lab6_priority;} 来表示进程的彩票个数(优先级越高彩票越多)。也就是 \mintinline{C}{lab6_ticket_start} 到 \mintinline{C}{lab6_ticket_start + lab6_priority} 这一部分都是进程拥有的彩票。 + \item 但是后来发现这样的话在进程退出时很麻烦,彩票中间空了一段的话就很难随机抽取彩票了,所以不用 \mintinline{C}{uint32_t lab6_ticket_start;} 了,而是在选择下一个进程时把队列中的进程彩票数量(优先级)加起来和随机到的彩票比较; + \item 在运行队列中加了一个 \mintinline{C}{uint32_t lab6_total_num;} 属性,用来记录目前所有的进程总共有多少彩票; + \item init函数没什么改的,enqueue函数里需要每次把 \mintinline{C}{lab6_total_num} 加上当前进程的优先级,dequeue函数也是每次把 \mintinline{C}{lab6_total_num} 减去当前进程的优先级。这里要注意优先级可能为0,但是如果一个进程有0张彩票的话那这个进程永远不会被调度到了,所以这里优先级加了1。但在 \mintinline{C}{lab6_set_priority} 这个函数中已经有类似的操作了: + \begin{minted}{C} +//FOR LAB6, set the process's priority (bigger value will get more CPU time) +void +lab6_set_priority(uint32_t priority) +{ + if (priority == 0) + current->lab6_priority = 1; + else current->lab6_priority = priority; +} + \end{minted} + + 不过如果创建进程时没有调用 \mintinline{C}{lab6_set_priority} 那么默认的优先级好像就是0,所以自己计算的时候加一还是有必要的。 + \item proc\_tick函数也不需要改,彩票调度也是每过一个时间片发一次彩票; + \item 最重要的就是 \mintinline{C}{ticket_pick_next} 函数了,每次调用时先随机抽取一张彩票 \mintinline{C}{target_index} : + \mint{C}|uint32_t target_index = rand() % rq->lab6_total_num;| + 然后遍历队列,每次把 \mintinline{C}{temp_ticket_num} 加上当前进程的优先级(加一),如果加上之后达到了 \mintinline{C}{target_index} ,那么也就说明这个彩票在这个进程拥有的彩票范围之间,那么就选择这个进程: + \begin{minted}{C} +struct proc_struct *p; +int32_t temp_ticket_sum = 0; +while (le != &rq->run_list) +{ + p = le2proc(le, run_link); + temp_ticket_sum += p->lab6_priority + 1; + if (temp_ticket_sum >= target_index) + break; + le = list_next(le); +} + \end{minted} + \item 之后就是要检验这个调度是否有问题了,只需要在 \mintinline{C}{proc.c} 中创建多个优先级不同的进程即可,会自动完成调度。(这里优先级为了看起来方便就使用了 \mintinline{C}{(rand() % 100) * 100} ,也可以设置其他的优先级) + \begin{minted}{C} +static int +my_test_user_main(void *arg) { + int num = (int)arg; + int priority = (rand() % 100) * 100; + cprintf("process %d, priority %d\n", num, priority); + lab6_set_priority(priority); + cprintf("process %d end\n", num); +} +\end{minted} +\begin{minted}{C} +int i = 0; +for (; i < 10; i++) { + int pid = kernel_thread(my_test_user_main, (void *)i, 0); + struct proc_strucht *proc = find_proc(pid); +} + \end{minted} + \end{enumerate} +\textbf{Lab7:} + \begin{enumerate} + \item 读者写者问题的同步关系,更简单了,课件中已经给了代码,只需要稍微改改就能用: + \begin{center} + \includegraphics[width=0.8\linewidth]{imgs/2024-06-10-22-08-03.png} + \end{center} + + \item 原先的代码在 \mintinline{C}{lab7_result/kern/sync/check_sync.c} 实现了哲学家就餐问题,这里就新建了一个 \mintinline{C}{read_write_sync.c} 实现读者写者问题,并在 \mintinline{C}{proc.c} 中将原先的 \mintinline{C}{check_sync} 改为 \mintinline{C}{read_write_sync} 。 + \item 这里的读者写者问题只有一个缓冲区,信号量定义了两个, \mintinline{C}{semaphore_t mutex} 用来互斥,与课件中的 \mintinline{C}{mutex} 一样, \mintinline{C}{semaphore_t synchronization} 用来同步,相当于课件中的 \mintinline{C}{wrt} , \mintinline{C}{read_pos_write_neg} 相当于课件中的 \mintinline{C}{readcount} 。 + \item 但是对于信号量的初始化的操作要在主进程里做而不能在定义时赋初值,这里的主进程就是 \mintinline{C}{read_write_sync} ,在主进程中随机创建读者进程和写者进程(直到达到目标数量),并随机延迟,这样就能体现出读者和写者在不同情况下的互斥与同步是否正确; + \item 读者和写者的读操作和写操作也用 \mintinline{C}{do_sleep} 来模拟延迟,并且在每个读者或写者完成所有操作后打印读取的结果或写入的结果便于观察。 + \end{enumerate} + } + \myitem{代码}{ + \item \url{https://gitea.shuishan.net.cn/10213903403/os_kernel_lab} + \item 也可以看上传的附件。 + } + \end{enumerate} +\end{document} diff --git a/操作系统/实验报告/mypreamble.tex b/操作系统/实验报告/mypreamble.tex new file mode 100644 index 0000000..af36957 --- /dev/null +++ b/操作系统/实验报告/mypreamble.tex @@ -0,0 +1,115 @@ +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{zhnumber} % change section number to chinese +% \usepackage{enumerate} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{fancyhdr} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +% \usepackage[outputdir=./latex-output]{minted} +\usepackage{float} % https://blog.csdn.net/qq_32623363/article/details/101095168 +\usepackage{fp} +\usepackage{graphicx} % 原来includegraphics要使用参数要用graphicx,只是用graphics是没法带参数的 +\usepackage{tabularx} +\usepackage{array} +\usepackage{ragged2e} +\usepackage{multirow} +\usepackage{url} +\usepackage{color} +\usepackage{mylatex} +\usepackage{totpages} % 不加这个会导致总页数出错 +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{华东师范大学计算机科学与技术学院上机实践报告} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\zhnum{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\setlist[1]{label=\zhnum{enumi}、} +\setlist[2]{listparindent=2em, labelindent=-1em, leftmargin=*, label=\arabic{enumii}、\ } +\setlist[3]{listparindent=2em, leftmargin=*, label=(\arabic{enumiii})\ } +\definecolor{shadecolor}{RGB}{204,232,207} +\definecolor{bg}{rgb}{0.95,0.95,0.95} +\setminted{breaklines=true, frame=single} % , bgcolor=bg +\setmintedinline{bgcolor={}} +\setitemize[1]{label=\textbullet} + +\newcommand{\mydate}{ + 2023年11月3日 +} + +\newcommand{\mychapternum}{ + 1 +} + +\newcommand{\mylabname}{ + 实验名称 +} + +\newcommand{\myname}{ + 姓名 +} + +\newcommand{\mystudentnum}{ + e.g. 12345678902 +} + +\input{myprivatepreamble} + +\newcommand{\mytitle}{ + \title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} + \date{} + \maketitle + + \begin{center} + \begin{tabularx}{\textwidth}{XXl} + \toprule + \textbf{课程名称}:操作系统 & \textbf{年级}:2022级 & \textbf{上机实践日期}:\mydate \\ + \textbf{指导教师}:李东 & \textbf{姓名}:\myname & \textbf{学号}:\mystudentnum \\ + \multicolumn{3}{l}{\textbf{实验名称}:实验\zhnumber{\mychapternum}\quad\mylabname} \\ + \bottomrule + \end{tabularx} + \end{center} + \addtocounter{table}{-1} + \vspace{1em} +} + +\newcommand{\myitemx}[3][]{ + \item \textbf{#2} + \begin{enumerate}[#1] + #3 + \end{enumerate} +} + +% https://blog.csdn.net/u010801696/article/details/79477226 +\def\UrlBreaks{\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J +\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z\do\[\do\\\do\]\do\^\do\_\do\`\do\a\do\b +\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n +\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z +\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\, +\do\?\do\'\do+\do\=\do\#} + +\renewcommand{\thefigure}{\mychapternum-\arabic{figure}} +\renewcommand{\thetable}{\mychapternum-\arabic{table}} + + +% https://mirrors.pku.edu.cn/ctan/info/svg-inkscape/InkscapePDFLaTeX.pdf +% 这个只有PDFLaTeX才能用,filemod也是 +% \newcommand{\executeiffilenewer}[3]{% +% \ifnum\pdfstrcmp{\pdffilemoddate{#1}}% +% {\pdffilemoddate{#2}}>0% +% {\immediate\write18{#3}}\fi% +% } + + +% 该命令用于控制 p{} 的情况 +\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}} % 使用过程中,将p{4cm}换成P{4cm},小写改成大写即可! +% 该命令用于控制 X 的情况 +\newcolumntype{Z}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X} % 使用过程中,将Z 换成 X,即可! + +% 可利用 RaggedLeft Centering替换RaggedRight,实现靠右和居中 [代码对大小写敏感!!!!!!!!!!!!!!!!!!!!!!!!!!!!] + +% 原文链接:https://blog.csdn.net/wanjiac/article/details/107494424 + +\setminted{fontsize=\zihao{6}, baselinestretch=1} diff --git a/数字逻辑及实验/作业/mypreamble.tex b/数字逻辑及实验/作业/mypreamble.tex new file mode 100644 index 0000000..145e5bc --- /dev/null +++ b/数字逻辑及实验/作业/mypreamble.tex @@ -0,0 +1,101 @@ +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{array} +\usepackage{zhnumber} % change section number to chinese +% \usepackage{enumerate} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{fancyhdr} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +\usepackage[outputdir=./latex-output]{minted} +\usepackage{extarrows} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{multirow} +\usepackage{fp} +\usepackage{multicol} +\usepackage{pdfpages} +\usepackage{hyperref} +\usepackage{mylatex} +\usepackage{subfiles} +\usepackage{totpages} % 不加这个会导致总页数出错 +% \usepackage{pgfplots} +% \pgfmathsetmacro{\totalpages}{\totalpages+1} +% \setcounter{totalpages}{1} +\pagestyle{fancyplain} +\title{\heiti\zihao{2} 《数字逻辑及实验》作业} +\author{\songti 岳锦鹏} +\date{2023年9月18日} +\fancyhead{} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\zhnum{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\setlist[1]{label=\arabic{enumi}.,listparindent=\parindent} +\setlist[2]{label=(\arabic{enumii}),listparindent=\parindent} + +% 就为了加个\noindent,但是没有装饰器,也没有继承,只能把原来的函数复制一份 +% TODO: 试试expl3中有没有类似装饰器和继承的写法 +\renewcommand{\includexopp}[2][1]{ + \executeiffilenewer{./xournalpp/#2.xopp}{./latex-output/xournalpp-output/#2.pdf}% + {xournalpp -p ./latex-output/xournalpp-output/#2.pdf ./xournalpp/#2.xopp && pdfcrop ./latex-output/xournalpp-output/#2.pdf ./latex-output/xournalpp-output/#2.pdf} + + \FPset\originwidth{#1} + \FPset\one{1} + + \FPifgt\originwidth\one + \FPdiv\targetwidth\one\originwidth + \begin{center} + \noindent\includegraphics[width=\FPprint\targetwidth\linewidth]{./latex-output/xournalpp-output/#2.pdf} + \end{center} + \else + \noindent\includegraphics[width=#1\linewidth]{./latex-output/xournalpp-output/#2.pdf} + \fi +} + + +\newcommand{\mydate}{ + 2023/09/23 +} + +\newcommand{\mytitle}{ + \title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} + \date{} + \maketitle + + \begin{longtable}[]{lll} + \toprule\noalign{} + \endhead + \bottomrule\noalign{} + \endlastfoot + \textbf{课程名称}:数据结构 & \textbf{年级}:2022级 & + \textbf{上机实践成绩}: \\ + \textbf{指导教师}:金健 & \textbf{姓名}:岳锦鹏 & + \textbf{上机实践时间}:2学时 \\ + \textbf{上机实践名称}:第一章作业 & \textbf{学号}:10213903403 & + \textbf{上机实践日期}:\mydate \\ + \end{longtable} +} + + +\def\getenum{% + \ifnum\EnumitemId=1% + enumi% + \else + \ifnum\EnumitemId=2% + enumii% + \else + \ifnum\EnumitemId=3% + enumiii% + \else% + enumiv% + \fi + \fi + \fi% +} + +\newcommand{\cnitem}[1][]{ + \IfBlankF{#1}{ + \setcounter{\getenum}{#1-1} + } + \item +} diff --git a/数字逻辑及实验/作业/全部作业.tex b/数字逻辑及实验/作业/全部作业.tex new file mode 100644 index 0000000..502fc65 --- /dev/null +++ b/数字逻辑及实验/作业/全部作业.tex @@ -0,0 +1,18 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\title{\heiti\zihao{2} 《数字逻辑及实验》作业} +\author{\songti 岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2023年9月18日 —— 2023年12月28日} +\begin{document} +% \renewcommand{\bar}{\xoverline} % 这一行在编译时可以取消注释,注意一定要放在\begin{document}下面才有用 +% \renewcommand{\overline}{\xoverline} % 这样会导致递归展开错误,暂时未解决 +\maketitle +\tableofcontents +\subfile{第一章作业-订正.tex} +\chapter{组合逻辑电路} +\includepdf[pages={1-12}]{第二章作业.pdf} +\subfile{第三章作业.tex} +\subfile{第四章作业.tex} +\subfile{第五章作业.tex} +\end{document} \ No newline at end of file diff --git a/数字逻辑及实验/作业/实验报告/mypreamble.tex b/数字逻辑及实验/作业/实验报告/mypreamble.tex new file mode 100644 index 0000000..636fe04 --- /dev/null +++ b/数字逻辑及实验/作业/实验报告/mypreamble.tex @@ -0,0 +1,95 @@ +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{array} +\usepackage{zhnumber} % change section number to chinese +% \usepackage{enumerate} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{fancyhdr} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +\usepackage[outputdir=./latex-output]{minted} +\usepackage{subfiles} +\usepackage{xcolor} +\usepackage{booktabs} +% \usepackage{tabularx} +\usepackage{multirow} +\usepackage{amsmath} +\usepackage{caption} +\usepackage{subcaption} +\usepackage{graphics} +\usepackage{mylatex} +\usepackage{fp} +% \usepackage{floatrow} % TODO: 出现未解决的报错,可能和别的包冲突 +\usepackage{totpages} % 不加这个会导致总页数出错 +\usepackage{flowchart} +\usetikzlibrary{arrows} +% \usepackage{pgfplots} +% \pgfmathsetmacro{\totalpages}{\totalpages+1} +% \setcounter{totalpages}{1} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{华东师范大学计算机科学与技术学院上机实践报告} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\zhnum{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\setlist[1]{label=\zhnum{enumi}、, listparindent=\parindent} +\setlist[2]{labelindent=-1em, leftmargin=*, label=\arabic{enumii}.\quad, listparindent=\parindent} + +\newcommand{\mydate}{ + 2023/09/23 +} + +\newcommand{\mychapternum}{ + 1 +} + +\newcommand{\mytitle}{ + \title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} + \date{} + \maketitle + \setlength{\tabcolsep}{2em} + + \begin{longtable}[]{lll} + \toprule\noalign{} + \endhead + \bottomrule\noalign{} + \endlastfoot + \textbf{课程名称}:数字逻辑及实验 & \textbf{年级}:2022级 & + \textbf{上机实践成绩}: \\ + \textbf{指导教师}:施维良 & \textbf{姓名}:岳锦鹏 & + \textbf{上机实践日期}:\mydate \\ + \textbf{实践编号}:实验\zhnumber{\mychapternum} & \textbf{学号}:10213903403 & + \textbf{上机实践时间}:2学时 \\ + \end{longtable} + \setcounter{table}{0} % 这个表格不应算,最好改成当前序号减一(TODO) +} + +% \def\myitem#1#2{ +% \item \textbf{#1} +% \begin{enumerate} +% #2 +% \end{enumerate} +% } + +\renewcommand{\thefigure}{\mychapternum.\arabic{figure}} +\renewcommand{\thetable}{\mychapternum.\arabic{table}} + +% 就为了加个\noindent,但是没有装饰器,也没有继承,只能把原来的函数复制一份 +% TODO: 试试expl3中有没有类似装饰器和继承的写法 +\renewcommand{\includexopp}[2][1]{ + \executeiffilenewer{./xournalpp/#2.xopp}{./latex-output/xournalpp-output/#2.pdf}% + {xournalpp -p ./latex-output/xournalpp-output/#2.pdf ./xournalpp/#2.xopp && pdfcrop ./latex-output/xournalpp-output/#2.pdf ./latex-output/xournalpp-output/#2.pdf} + + \FPset\originwidth{#1} + \FPset\one{1} + + \FPifgt\originwidth\one + \FPdiv\targetwidth\one\originwidth + \begin{center} + \noindent\includegraphics[width=\FPprint\targetwidth\linewidth]{./latex-output/xournalpp-output/#2.pdf} + \end{center} + \else + \noindent\includegraphics[width=#1\linewidth]{./latex-output/xournalpp-output/#2.pdf} + \fi +} diff --git a/数字逻辑及实验/作业/实验报告/实验2.tex b/数字逻辑及实验/作业/实验报告/实验2.tex new file mode 100644 index 0000000..d63b176 --- /dev/null +++ b/数字逻辑及实验/作业/实验报告/实验2.tex @@ -0,0 +1,178 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{2023/10/19} +\renewcommand{\mychapternum}{2} + +\captionsetup{labelformat=empty,labelsep=space} + + +\begin{document} + \renewcommand{\bar}{\xoverline} % 这一行在编译时可以取消注释,注意一定要放在\begin + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 掌握利用基本门电路设计组合逻辑电路的方法。 + \item 验证所设计的电路的逻辑功能。 + } + \myitem{实验内容及步骤}{ + \item 试使用与非门设计一个表决电路,其中 A、B、C、D 四个各自投票时,其分数 + 分别为 3 分、2 分、1 分、1 分,只有得票总分大于 4 分时该提案通过。绿灯亮 + 表示提案通过,红灯亮表示提案未通过。 + \item 试用门电路实现表 2.2 的逻辑功能。 + % \vspace{1em}\\ + % \includesvg{table.2-2} + % \renewcommand {\thetable} {\thechapter{}.\arabic{table}} + \begin{table}[h] + \centering + \caption{表2-2} + \setlength{\tabcolsep}{2em} + % \resizebox{\textwidth}{1.0in}{ + % \begin{tabularx}{\textwidth}{cp{5cm}c|cc} + \begin{tabular}{ccc|cc} + \toprule + \multicolumn{3}{c}{输入} \vline& \multicolumn{2}{c}{输出}\\ + % \hline + A & B & C & S1 & S2\\ + \midrule + % \cline{1-3}\noalign{\bigskip} + % \cline{4-5} + 0 & 0 & 0 & 0 & 0 \\ + 0 & 0 & 1 & 1 & 0 \\ + 0 & 1 & 0 & 1 & 0 \\ + 0 & 1 & 1 & 0 & 1 \\ + 1 & 0 & 0 & 1 & 0 \\ + 1 & 0 & 1 & 0 & 1 \\ + 1 & 1 & 0 & 0 & 1 \\ + 1 & 1 & 1 & 1 & 1 \\ + \bottomrule + \end{tabular} + \end{table} + \item 试设计一个两位数的比较器。输入分别是 $A_0A_1$,和 $B_0B_1$,当 $A_0A_1 > B_0B_1$,时,输出 + 为 $01$;当 $A_0A_1left\_child \&\& this->left\_child->postorder\_traversal(output),因为逻辑与操作中的函数调用会返回void,而void无法转换为bool类型; + \item C++中的模板自动类型推断,还有解包参数,和Python、JavaScript中有相似之处,但又不完全一样,仍需深入了解。 + } + \myitem{附件}{ + \itemsep 5em + \item 第七章作业1.cpp + \inputminted[]{cpp}{../C++/第七章作业/第七章作业1.cpp} + \item 第七章作业2.cpp + \inputminted[]{cpp}{../C++/第七章作业/第七章作业2.cpp} + \item CMakeLists.txt + \inputminted[]{cmake}{../C++/第七章作业/CMakeLists.txt} + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第三章作业.tex b/数据结构/作业/10213903403第三章作业.tex new file mode 100644 index 0000000..654f424 --- /dev/null +++ b/数据结构/作业/10213903403第三章作业.tex @@ -0,0 +1,107 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/10/20 +} +\renewcommand{\mychapternum}{3} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第三章知识解决链表队列问题。 + } + \myitem{实验内容}{ + \item 使用链队列模拟银行窗口业务。假设每位客户有 2 项信息:序号、金 + 额。早上开张后,按随机时间有客户上门办理业务,假设携带的现金是 + 1-20 万之间的随机数。来一位客户,就将其加入队列,等待办理业务。 + 假设办理业务所需要消耗的时间和金额成正比(可设置一个系数),位 + 于队头的客户办理完业务后,就从队列中移走。请编写程序动态模拟这 + 个过程。 + \item (选做)在第一题的基础上,如果银行有多个窗口。 + \begin{enumerate} + \item 客户过来时挑队列最短的排队,后面不会换队列。 + \item 如果排队过程中,出现相邻队列比自己所排队列短,则可以重新 + 选择队列。 + \end{enumerate} + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item C++采用面向对象的方式设计复杂程序时,要处理非常多的类型,因此可能会比较复杂; + \item 传参数有引用传递、指针传递、值传递; + \item 类的模板是静态多态,类的继承是动态多态; + \item 子类对父类函数的重写、重载、覆盖; + \item 私有、保护、公共、友元的成员访问权限; + \item 比起Python和JavaScript,C++的各种类型、各种限制、各种访问权限非常复杂,由于初次调试这种复杂的程序,出现各种错误时也需要查资料解决,导致花费大约三天时间才完成这次作业; + \item 但也许这就是C++这种强类型语言的特点,编写代码时需要对类型进行非常确定的定义(模板可能是例外),但这也保证了运行效率和安全性; + \item 此次作业没有尝试使用异步、多线程、多进程等并发执行方式来提升执行效率并改善图形(命令行)界面体验,之后可以尝试加入; + \item 也是初次使用cmake进行程序的构建、测试、打包,cmake用来管理这种多文件的复杂程序时确实比较方便。 + } + \myitem{总结}{ + \item 对于这种较为复杂的程序,首先考虑它的架构,由于此程序需要使用到链队列的模型,而且还需要进行图形化或命令行的展示,因此考虑采用MVC架构,但又由于程序功能较少,因此不想使用多线程或异步的事件循环,因此尝试是否能在单线程同步的架构下实现MVC架构; + \item 事实证明是可以在单线程同步的架构下实现MVC架构的,但是可能一些细节会有所更改,例如: + \begin{enumerate} + \item MVC中的Controller接受用户事件并通知Model,这种行为在没有事件循环的情况下采用了View直接调用Model来实现; + \item Model通知View进行修改的行为,改为View直接依赖Model,之后更改View的时候只需调用View::refresh的方法,View就会从自己已经绑定的Model中获取数据并进行刷新。 + \end{enumerate} + 但是这样造成了View依赖Model,Controller依赖View和Model,也许可能不太符合MVC。 + \item 之后就需要考虑如何拆分各个模块,这里采用了面向对象的思想: + \begin{enumerate} + \item Model: 链队列的实现、客户对象; + \item View: 背景界面、排队的显示、客户的显示、走路过程中的客户的显示; + \item Controller:实现主循环,单个Controller绑定Model和View,调度Model和View的更新; + \item MVC: 调用主循环,综合多个Controller,统一调度所有Controller的更新,之后所有View一起更新; + \item main: 实现根据用户输入进行调整调用参数,是入口文件。 + \end{enumerate} + 每个文件中也有类之间的继承关系: + \begin{enumerate} + \item SingleQueueModel继承了Model; + \item SimpleQueueView继承了QueueView,QueueView继承了View; + \item SingleQueueController继承了Controller,DriftingController也继承了Controller。 + \end{enumerate} + \item 虽然采用面向对象,总体是成功实现了,但各个模块之间的职责划分仍不是特别清晰,并且产生了很多依赖关系,因此仍需改进。 + \item 由于时间有限,暂未实现相邻队列换位的模拟。 + } + \item \textbf{附件}\\ + 运行时截图:\\ + \includegraphics[width=1\linewidth]{imgs/2023-10-29-10-52-02.png} + \begin{enumerate} + \item 单个队列\\ + \includegraphics[width=1\linewidth]{imgs/2023-10-29-10-38-47.png} + \item 多个队列\\ + \includegraphics[width=1\linewidth]{imgs/2023-10-29-10-40-00.png} + \item 自定义\\ + \includegraphics[width=1\linewidth]{imgs/2023-10-29-10-53-57.png}\\ + \vspace{1em}\\ + \includegraphics[width=1\linewidth]{imgs/2023-10-29-10-45-41.png} + 代码:\\ + \begin{enumerate} + \itemsep 5em + \item constants.h + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/include/constants.h} + \item model.hpp + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/include/model.hpp} + \item view.hpp + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/include/view.hpp} + \item controller.hpp + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/include/controller.hpp} + \item MVC.h + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/include/MVC.h} + \item MVC.cpp + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/src/MVC.cpp} + \item main.cpp + \inputminted[linenos=true,breaklines=true]{cpp}{../C++/第三章作业/src/main.cpp} + \item CMakeLists.txt + \inputminted[linenos=true,breaklines=true]{cmake}{../C++/第三章作业/CMakeLists.txt} + \end{enumerate} + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第二章作业.tex b/数据结构/作业/10213903403第二章作业.tex new file mode 100644 index 0000000..e0b6bd3 --- /dev/null +++ b/数据结构/作业/10213903403第二章作业.tex @@ -0,0 +1,56 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/10/10 +} +\renewcommand{\mychapternum}{2} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第二章知识解决约瑟夫环问题(复杂版)。 + } + \myitem{实验内容}{ + \item 在原有约瑟夫环的基础上,输入参与这场游戏的人数 n 与自杀报数 m, + 输出为最后两个幸存者的位置序号。 + \item 在第一题的基础上,输入参与这场游戏的人数 n 与两个自杀报数 a 和 + b,按照一次 a 一次 b 的顺序自杀(a,b 可以为负数,正数代表正向, + 负数代表反向),输出为最后两个幸存者的位置序号。 + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item 简单考虑,暂时不考虑输入错误或者输入为0的情况; + \item JavaScript没有指针的概念,所以使用对象的引用代替; + \item JavaScript在严格模式下暂时无法直接删除对象,因此移除结点时无法完全销毁一个节点; + \item 最后只留下两个,而不是$\min(\mathrm{abs}(a), \mathrm{abs}(b))-1$个; + \item 删除的结点应该作为第0个,此时往前a个或往后b个,一开始如果a是正数那么应该按照$1, 2, 3, \ldots $的顺序遍历,如果a是负数那么应该按照$n, n-1, n-2, \ldots $的顺序遍历; + \item 由于此问题中只涉及到初始化链表、删除单个结点两个操作,因此链表的添加结点、清空、销毁等操作暂不需要实现。 + } + \myitem{总结}{ + \item 由于JavaScript的异步性质,需要进行连续多个输入时,可以将回调过程封装成Promise对象后,使用async创建异步函数,在其中使用await可以方便使用Promise对象,避免大量回调,同时也可以结合循环、分支等结构,实现更复杂的控制; + \item 抽象出了结点对象和链表对象,并且实现了从当前节点开始寻找第n个结点(可以为负数)的方法; + \item 整个文件中只有input和main\_函数与Node.js环境耦合,即使用了readline模块,而主要功能放在main函数中,因此在浏览器环境中可以直接调用main函数,方便代码复用。 + } + \myitem{附件}{ + \itemsep 3em + \item 在原有约瑟夫环的基础上,输入参与这场游戏的人数 n 与自杀报数 m, + 输出为最后两个幸存者的位置序号。\\ + (JavaScript,Node.js环境) + \inputminted[linenos=true,breaklines=true]{javascript}{../JavaScript/第二章作业1.js} + \item 在第一题的基础上,输入参与这场游戏的人数 n 与两个自杀报数 a 和 + b,按照一次 a 一次 b 的顺序自杀(a,b 可以为负数,正数代表正向, + 负数代表反向),输出为最后两个幸存者的位置序号。\\ + (JavaScript,Node.js环境) + \inputminted[linenos=true,breaklines=true]{javascript}{../JavaScript/第二章作业2.js} + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第五章作业.tex b/数据结构/作业/10213903403第五章作业.tex new file mode 100644 index 0000000..b75c4c8 --- /dev/null +++ b/数据结构/作业/10213903403第五章作业.tex @@ -0,0 +1,89 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/11/10 +} +\renewcommand{\mychapternum}{5} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第五章的知识解决树的综合问 + 题。 + } + \myitem{实验内容}{ + \item 用顺序表或链表形式实现一棵树,树中节点存放 2 个内容:整数编号, + 和字符串的文本。每个节点的编号,是整棵树自上而下,自左而右依次 + 编号的。构造这棵树的方式:一行代表 1 个节点对应的儿子节点,第 1 + 个数据是编号,后续字符串以空白字符分隔,依次作为该节点的儿子, + 并自动编号。如果新录入的编号,在已有树中不存在,则发出错误提 + 示;如果新录入节点后,对原有的编号有影响,则更新原有编号,使满 + 足编号自上而下、自左而右依次编号的规则。假设树根为 0 号节点,一 + 开始就存在。(注:允许在节点上,增加层次字段,比如,0 号节点的 + 层次为 1;1 号节点“张三”的层次为 2)\\ + 输入案例:\\ + 0\ 张三\ 李四\ 王五\qquad + :表示,3 个人都是 0 号节点的儿子\\ + 2\ 师大\ 统计\ 计算机\qquad + :表示,3 个院系是李四儿子\\ + 0\ 赵六\qquad + :表示,0 号节点下增加 1 个儿子,此时, + 2 号节点的儿子编号将需要更新 + \item 在第 1 题的基础上,将树转换成二叉树,遵循左孩子右兄弟的原则。 + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item VSCode调试很方便,但用了CLion后发现CLion调试的手感更好,仔细思考后发现可能原因之一是有时候CLion启动调试和重启调试更快,虽然可能只有一秒甚至不到一秒的时间,但在注意力高度集中找bug时不到一秒的间断也可能造成分心; + \item 还有可能的原因是CLion的变量监视窗口可以步入步过时保持展开的层级; + \item 而且CLion的自动补全更加完善,比如输入一个带参数的函数名会自动加好括号并将光标移动到括号内,输入一个无参数的函数名会自动加括号并将光标移动到括号右侧,删除左括号会自动删除相邻的右括号等等; + } + \myitem{总结}{ + \item 虽然C++的智能指针可以自动管理对象的生命周期,但也许在这种不需要长期维护,也不需要安全性的项目上使用原始指针更方便,只是要自己实现析构函数罢了; + \item 为了简化代码便于从一个入口文件直接编译,直接使用了include cpp源文件的方法,可以从main.cpp入口直接编译; + \item 将此题中的树转化成二叉树后,此题中的遍历方式不是先序中序后序层序中的任何一种,非常有创新点! + \includegraphics[width=1em]{imgs/028E9BA6.pdf} + 受到广度优先搜索的启发,代码中采用了标准库中的队列实现,遍历每个节点时将它的左节点入队,每个节点出队时将它扩展到所有的右节点依次遍历; + \item 虽然代码中也维护了线索化的标志域,不过好像没有用到线索化二叉树; + \item 在命令行输出时要计算每个节点的宽度,防止子节点相互遮挡; + \item 还能做的更好,但由于时间原因,就暂时这样了,以后可以完善一下,比如可以在命令行输出得更美观一些,使用多线程等。 + } + \item \textbf{附件} + + \textbf{说明:} + \begin{enumerate} + \item 由于多叉树实现的复杂度太高,此题直接使用二叉树完成。 + \item 为了便于阅读,使用CodeGeeX生成了部分代码的注释,注释不一定正确或有用,仅供参考。 + \end{enumerate} + \textbf{运行时截图:}\\ + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-09-15.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-09-45.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-10-00.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-10-48.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-11-06.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-11-36.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-11-50.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-12-13.png} + \includegraphics[width=1\linewidth]{imgs/2023-11-12-21-12-26.png} + \textbf{代码:} + \begin{enumerate} + \itemsep 5em + \item bitree.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第五章作业/bitree.cpp} + \item view.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第五章作业/view.cpp} + \item main.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第五章作业/main.cpp} + \item CMakeLists.txt + \inputminted[linenos=true, breaklines=true]{cmake}{../C++/第五章作业/CMakeLists.txt} + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第八章作业.tex b/数据结构/作业/10213903403第八章作业.tex new file mode 100644 index 0000000..e818db5 --- /dev/null +++ b/数据结构/作业/10213903403第八章作业.tex @@ -0,0 +1,63 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/12/29 +} +\renewcommand{\mychapternum}{8} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第八章的知识解决排序的综合 + 问题。 + } + \myitem{实验内容}{ + \item 给定一个序列,使用快速排序将其从小到大进行排列。 + \item 给定一个序列,构造一个大根堆。 + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item 两道题分别对应了快速排序和堆排序。 + \item 快速排序要注意好起点和终点的位置选取,作为比较标准的元素放在最前面,开始位置为数组的开始,开始元素为这个元素后面的一个元素,结束元素为数组末尾的元素。需要维护两个指针,分别从开始往后移动和从末尾往前移动,用来标记下一个要交换的位置。最后这两个指针交汇时的位置就是比较标准的元素需要放置的位置了。 + \item 堆排序要注意不同的操作,构造堆时从最后一个非叶子节点开始往前逐个下沉,当然也可以看做向一个空的堆中不断插入来完成构造;插入操作是先插入到末尾然后上浮;弹出操作是将堆顶的元素弹出,之后把末尾的元素放到对顶再下沉。 + \item 下沉操作比上浮操作更复杂一点,因为要比较父节点和左右两个子节点,把最大的子节点换上了,而上浮操作只需要和父节点比较就行。 + \item 快速排序的 + 输入:\\ + 20\\ + 41 40 19 8 5 5 17 32 39 32 98 95 68 56 60 59 67 94 77 98 + + 输出:\\ + 5 5 8 17 19 32 32 39 40 41 56 59 60 67 68 77 94 95 98 98 + + \item 大根堆的 + 输入:\\ + 20\\ + 41 40 19 8 5 5 17 32 39 32 98 95 68 56 60 59 67 94 77 98 + + 输出:\\ + 逐个插入后,逐个弹出输出的结果为:\\ + 98 98 95 94 77 68 67 60 59 56 41 40 39 32 32 19 17 8 5 5\\ + 一次性初始化后,逐个弹出输出的结果为:\\ + 98 98 95 94 77 68 67 60 59 56 41 40 39 32 32 19 17 8 5 5 + } + \myitem{总结}{ + \item 在大根堆排序时,如果不使用弹出,而是每次把堆顶的元素和堆末尾的元素交换,之后将堆的长度减一,这样操作完成后就会形成升序排列。如果每次把堆顶的元素弹出,并且输出,这样操作完成后就会形成降序排列。这里使用的是弹出方式。 + } + \myitem{附件}{ + \itemsep 5em + \item 第八章作业1.cpp + \inputminted[]{cpp}{../C++/第八章作业/第八章作业1.cpp} + \item 第八章作业2.cpp + \inputminted[]{cpp}{../C++/第八章作业/第八章作业2.cpp} + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第六章作业.tex b/数据结构/作业/10213903403第六章作业.tex new file mode 100644 index 0000000..82e206b --- /dev/null +++ b/数据结构/作业/10213903403第六章作业.tex @@ -0,0 +1,78 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/11/24 +} +\renewcommand{\mychapternum}{6} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第六章的知识解决图的综合问 + 题。 + } + \myitem{实验内容}{ + \item 某国有 n 个城市,他们之间没有路连通,因此交通十分不便,现决定修 + 建公路,任务由各个城市共同完成。修建分为 n 轮,在每一轮,每个城 + 市选择一个与它最近的城市,申请修往该城市的公路,政府负责审批这 + 些申请决定是否同意修建。 + + 政府审批规则如下: + + I.如果两个城市申请修建同一条公路,则让后申请修建的城市重新选择 + 未申请修建的公路。 + + II.如果三个或以上城市申请修建的公路成环,即 A 申请修建 AB,B 申 + 请修建 BC,C 申请修建 CA,则政府将否决其中最短的一条公路的修建申 + 请。 + + III.其他情况一律同意。 + + 一轮修建后,若干城市将会直接或间接相连,连通的城市被看作一个 + league,下一轮修建中,league 被看作为一个城市。当所有的城市都连 + 通时,则修建完毕。根据上述规则计算需要修建的公路的总长度。 + + \item 每个城市的规模大小是不同的(在初始需要赋值),在每个城市申请修 + 建通往其他城市的道路时,需要查看城市规模系数$\alpha $,若规模小于目标 + 城市,则政府拒绝修建,若两个城市规模相等,则修建过后两座城市形 + 成的 league 城市规模系数$\alpha $增一,若大于目标城市,则同意修建,规 + 模系数不变。当城市规模系数$\alpha $到达限定系数$\beta $后,我们认为该 league + 已经到达“稳定”,不再与任何其他城市修建公路。根据上述规则计算 + 需要修建的公路的总长度。 + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item 子类继承父类的时候应该不需要手动调用父类的析构函数,因为编译器会自动调用; + \item 调试带有随机性质的程序要先把随机数种子固定下来,调试完再用时间戳作为随机种子; + \item 类的保护属性在类外能直接访问? + } + \myitem{总结}{ + \item 采用何种设计架构要综合考虑项目周期、系统复杂度、掌握熟练度等一系列因素,比如虽然这次的题可能有在时间复杂度或空间复杂度上更优的算法来解决,但是考虑到时间有限,还是使用了比较容易实现的思路; + \item CLion的自动补全确实更加顺手,而且还能自动生成构造函数、析构函数等; + \item 此次也没有进行非常复杂的对象设计,只实现了并查集的类、图的类、复杂图的类; + \item 由于需要多次合并城市为一个联盟,所以使用了并查集; + \item 做题之前可以先考虑是否可以简化问题,比如这次的题的第二条规则就是无效的; + \item 输出的方式不一定要像图形界面,可以用文字表示,比如图可以用邻接矩阵、关系矩阵表示。 + } + \myitem{附件}{ + \itemsep 5em + \item graph.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第六章作业/graph.hpp} + \item 第六章作业1.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第六章作业/第六章作业1.cpp} + \item 第六章作业2.cpp + \inputminted[linenos=true, breaklines=true]{cpp}{../C++/第六章作业/第六章作业2.cpp} + \item CMakeLists.txt + \inputminted[linenos=true, breaklines=true]{cmake}{../C++/第六章作业/CMakeLists.txt} + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/10213903403第四章作业.tex b/数据结构/作业/10213903403第四章作业.tex new file mode 100644 index 0000000..df7df54 --- /dev/null +++ b/数据结构/作业/10213903403第四章作业.tex @@ -0,0 +1,65 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/10/27 +} +\renewcommand{\mychapternum}{4} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{实验目的}{ + \item 使用第四章知识解决数组和字符串 + 的问题。 + } + \myitem{实验内容}{ + \item 给你一个 m 行 n 列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩 + 阵中的所有元素。 + \item 给定一个字符串,输出所有长度至少为 2 的回文子串。回文子串即从左 + 往右输出和从右往左输出结果是一样的字符串,比如:abba, + cccdeedccc 都是回文字符串。 + } + \myitem{实验原理}{ + \item 程序设计原理。 + } + \myitem{实验步骤}{ + \item 问题抽象 + \item 编写程序 + \item 调试程序 + \item 完善总结 + } + \myitem{调试过程、结果和分析}{ + \item Python的切片取反时要注意stop的参数可能会小于0,就变成负向索引了。例如正向切片时使用a[i:j + 1]可以取出[i,j + 1)区间,即[i,j]闭区间内的元素,但要是反向切片的话,因为切片的区间包含start但不包含stop,所以应该为(i - 1, j],也就是start为j,stop为i - 1,即a[j:i - 1:-1],但是如果i = 0的时候,正向切片是取出[0, j + 1)区间内的元素,但反向取就变成了(-1, j],而-1在切片中是负向索引,而每个元素的位置肯定小于等于最后一个元素所在的位置,因此不管j怎么取,最终的结果都是空的序列。因此最终的代码采用了先赋值再切片防止出现这样的情况。 + } + \item \textbf{总结} + \begin{enumerate} + \itemsep 1.6em + \item 在不考虑复杂度的情况下,Python实现功能真的特别方便; + \item Python的and和or有短路规则,即:and连接的前后两个操作数,如果前一个操作数的逻辑取值为假,则会直接返回前一个操作数(注意是返回原操作数而不是False也不是0,这和C/C++中不一样);如果前一个操作数的逻辑取值为真,则会返回后一个操作数(注意也是返回原操作数)。同理,or连接的前后两个操作,如果前一个操作数的逻辑取值为真,则会返回前一个操作数;如果前一个操作数的逻辑取值为假,则会返回后一个操作数; + \item 空列表、空字典、空元组、空集合、空字符串、0的逻辑取值为假; + \item 列表可以直接使用加号拼接; + \item 单个星号“*”表示按位置参数解包操作符,即把星号后面的操作数按顺序依次取出作为位置参数; + \item zip函数的功能是依次把传递给它的每个位置参数同时取出一个元素并进行组合,(不好描述,建议看官方文档)可以理解为矩阵转置,以下是官方文档中的解释:\\ + \url{https://docs.python.org/zh-cn/3/library/functions.html#zip} + \item 如果将二维列表看成是矩阵的话,zip函数和*操作符一起使用是真正的矩阵转置,之后[::-1]这样的切片操作表示将外层列表反向,一个二维矩阵转置再反向后就相当于这个二维矩阵逆时针旋转了90度; + \item matrix[0]表示这个矩阵的第一行,matrix[1:]表示这个矩阵去掉第一行后的部分,所以将矩阵去掉第一行的部分逆时针旋转90度,再去掉第一行,再逆时针旋转90度,不断重复这样的操作就可以顺时针遍历矩阵中的元素; + \item \_\_import\_\_可以导入模块并返回模块,sys.stdin是标准输入,sys.stdin.readlines()是读取标准输入并按行存储,之后使用列表解析式,对每一行line.split()表示按空白字符分割,之后返回的就是一个二维列表; + \item “:=”是赋值表达式,会将表达式右端赋值给左端并返回表达式右端的值,相当于C/C++中的“=”; + \item f"..."是格式化字符串字面值,参考官方文档:\\ + \url{https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#formatted-string-literals} + \item “\_”存储最后一次求值的结果,也可以用来命名无需使用的变量,参考官方文档:\\ + \url{https://docs.python.org/zh-cn/3/reference/lexical_analysis.html#reserved-classes-of-identifiers}\\ + 这里使用是为了防止在Jupyter等交互式解释器中运行此段代码时Jupyter自动返回最后一次求值的结果。 + \end{enumerate} + \myitem{附件}{ + \itemsep 5em + \item 给你一个 m 行 n 列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩 + 阵中的所有元素。 + \inputminted[linenos=true, breaklines=true]{python3}{../Python/第四章作业4.1.py} + \item 给定一个字符串,输出所有长度至少为 2 的回文子串。回文子串即从左 + 往右输出和从右往左输出结果是一样的字符串,比如:abba, + cccdeedccc 都是回文字符串。 + \inputminted[linenos=true, breaklines=true]{python3}{../Python/第四章作业4.2.py} + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/mypreamble.tex b/数据结构/作业/mypreamble.tex new file mode 100644 index 0000000..9deaa41 --- /dev/null +++ b/数据结构/作业/mypreamble.tex @@ -0,0 +1,75 @@ +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{array} +\usepackage{zhnumber} % change section number to chinese +% \usepackage{enumerate} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{fancyhdr} +\usepackage{graphicx} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +\usepackage{hyperref} +\usepackage{mylatex} +% \usepackage{url} +% \PassOptionsToPackage{hyphens}{url} +% \usepackage{breakurl} // 这个包总是会报错,可能是和别的什么包冲突了,所以只能用传统的一大段文字的办法实现网址换行 +\usepackage[outputdir=./latex-output]{minted} +\usepackage{subfiles} +\usepackage{totpages} % 不加这个会导致总页数出错 +% \usepackage{pgfplots} +% \pgfmathsetmacro{\totalpages}{\totalpages+1} +% \setcounter{totalpages}{1} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{华东师范大学计算机科学与技术学院上机实践报告} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\zhnum{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\setlist[1]{label=\zhnum{enumi}、} +\setlist[2]{labelindent=-1em, leftmargin=*, label=\arabic{enumii}.\quad} +\setlist[3]{labelindent=1em, leftmargin=*, label=(\arabic{enumiii})} +\setminted{linenos=true, breaklines=true} + +\newcommand{\mydate}{ + 2023/09/23 +} + +\newcommand{\mychapternum}{ + 1 +} + +\newcommand{\mytitle}{ + \title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} + \date{} + \maketitle + + \begin{longtable}[]{lll} + \toprule\noalign{} + \endhead + \bottomrule\noalign{} + \endlastfoot + \textbf{课程名称}:数据结构 & \textbf{年级}:2022级 & + \textbf{上机实践成绩}: \\ + \textbf{指导教师}:金健 & \textbf{姓名}:岳锦鹏 & + \textbf{上机实践时间}:2学时 \\ + \textbf{上机实践名称}:第\zhnumber{\mychapternum}章作业 & \textbf{学号}:10213903403 & + \textbf{上机实践日期}:\mydate \\ + \end{longtable} +} + +% \def\myitem#1#2{ +% \item \textbf{#1} +% \begin{enumerate} +% #2 +% \end{enumerate} +% } + +% https://blog.csdn.net/u010801696/article/details/79477226 +\def\UrlBreaks{\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J +\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z\do\[\do\\\do\]\do\^\do\_\do\`\do\a\do\b +\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n +\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z +\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\, +\do\?\do\'\do+\do\=\do\#} diff --git a/数据结构/作业/使用示例.tex b/数据结构/作业/使用示例.tex new file mode 100644 index 0000000..f9a187d --- /dev/null +++ b/数据结构/作业/使用示例.tex @@ -0,0 +1,14 @@ +\documentclass[实验报告模板]{subfiles} + +\renewcommand{\mydate}{ + 2023/09/25 +} + +\begin{document} + \mytitle + \begin{enumerate} + \myitem{列表标题}{ + \item 列表内容 + } + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/数据结构/作业/实验报告模板.tex b/数据结构/作业/实验报告模板.tex new file mode 100644 index 0000000..e5022f2 --- /dev/null +++ b/数据结构/作业/实验报告模板.tex @@ -0,0 +1,87 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} + +\begin{document} + +\title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} +\date{} +\maketitle + +\begin{longtable}[]{lll} +\toprule\noalign{} +\endhead +\bottomrule\noalign{} +\endlastfoot +\textbf{课程名称}:数据结构 & \textbf{年级}:2022级 & +\textbf{上机实践成绩}: \\ +\textbf{指导教师}:金健 & \textbf{姓名}:金小健 & +\textbf{上机实践时间}:2学时 \\ +\textbf{上机实践名称}:第一章作业 & \textbf{学号}:xxxxxxxxxx & +\textbf{上机实践日期}:2023/09/23 \\ +\end{longtable} + +\begin{enumerate} +\item \textbf{实验目的} + + \begin{enumerate} + \item + 从第1条起填写基本目的。 + \end{enumerate} +\item \textbf{实验内容} + + \begin{enumerate} + \item + 结合实验目的填写。 + \item + 在预习时,对程序或过程中出现的问题,都写在这里,以便真正上机实践时有针对性的查找答案,并填充相应的实验步骤、过程、结果和分析,以及总结。 + \end{enumerate} +\item \textbf{实验原理} + + \begin{enumerate} + \item + 参考实验教材 + \end{enumerate} +\item \textbf{实验步骤} + + \begin{enumerate} + \item + 参考实验教材 + \end{enumerate} +\item \textbf{调试}\textbf{过程、结果和分析} + + \begin{enumerate} + \item + 参考教材,结合自己实际,对调试过程进行记录和分析。 + \end{enumerate} +\item \textbf{总结} + + \begin{enumerate} + \item + 预习时提出的问题有没有解决,实验目的有没有达到 + \item + 如果实现了,作一下评价 + \item + 如果未实现,总结一下原因(并不一定每次都必定要完全实现预定目标的,只要原因分析得恰当,同样是好的) + \item + 有没有新的疑问或想法 + \end{enumerate} +\item \textbf{附件} + + \begin{enumerate} + \item + 程序代码。 + \end{enumerate} +\end{enumerate} + + +\noindent \textbf{说明:} + +文件命名格式:学号+第一章作业.doc + +\noindent 例如: + +52051201004第一章作业.doc + +52051201004第二章作业.doc + +\end{document} diff --git a/数理统计/作业/mypreamble.tex b/数理统计/作业/mypreamble.tex new file mode 100644 index 0000000..d295f9c --- /dev/null +++ b/数理统计/作业/mypreamble.tex @@ -0,0 +1,53 @@ +\usepackage{fancyhdr} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{booktabs} +\usepackage{bm} +\usepackage{pgfplots} +\usepackage{hyperref} + +\usepackage{totpages} +\usepackage{mylatex} +\usepackage{subfiles} + +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\thechapter.\arabic{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\renewcommand{\labelenumii}{(\arabic{enumii})} +\title{《数理统计》作业} +\author{岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2024年2月27日——2024年6月18日} +\setlist[1]{listparindent=\parindent} +\setlist[2]{listparindent=\parindent} + +\definecolor{shadecolor}{RGB}{204,232,207} + +\def\myitem#1#2{ + \item \text{#1} + \begin{enumerate} + #2 + \end{enumerate} +} + +\makeatletter +\newcommand*\xwidehat[2][0.75]{% +\sbox{\myboxA}{$\m@th#2$}% +\setbox\myboxB\null% Phantom box +\ht\myboxB=\ht\myboxA% +\dp\myboxB=\dp\myboxA% +\wd\myboxB=#1\wd\myboxA% Scale phantom +\sbox\myboxB{$\m@th\,\widehat{\copy\myboxB}\,$}% Overlined phantom +\setlength\mylenA{\the\wd\myboxA}% calc width diff +\addtolength\mylenA{-\the\wd\myboxB}% +\ifdim\wd\myboxB<\wd\myboxA% +\rlap{\hskip 0.5\mylenA\usebox\myboxB}{\usebox\myboxA}% +\else +\hskip -0.5\mylenA\rlap{\usebox\myboxA}{\hskip 0.5\mylenA\usebox\myboxB}% +\fi} +\makeatother + +\let\kaishu\relax % 清除旧定义 +\newCJKfontfamily\kaishu{KaiTi}[AutoFakeBold] % 重定义 \kaishu +\newcommand{\boldkai}[1]{{\bfseries\kaishu #1}} diff --git a/数理统计/作业/mysubpreamble.tex b/数理统计/作业/mysubpreamble.tex new file mode 100644 index 0000000..bec6221 --- /dev/null +++ b/数理统计/作业/mysubpreamble.tex @@ -0,0 +1,6 @@ + +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\definecolor{shadecolor}{named}{white} diff --git a/数理统计/作业/全部作业.tex b/数理统计/作业/全部作业.tex new file mode 100644 index 0000000..144872f --- /dev/null +++ b/数理统计/作业/全部作业.tex @@ -0,0 +1,22 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\begin{document} + \maketitle + \tableofcontents + \setcounter{chapter}{4} + \chapter{统计量及其分布} + \subfile{第一周作业} + \subfile{第二周作业} + \subfile{第三周作业} + \subfile{第四周作业} + \chapter{参数估计} + \subfile{第五周作业} + \subfile{第六周作业} + \subfile{第七周作业} + \subfile{第九周作业} + \subfile{第十二周作业} + \chapter{假设检验} + \subfile{第十三周作业} + \subfile{第十四周作业} + \subfile{第十五周作业} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/期中考试.tex b/数理统计/作业/期中考试.tex new file mode 100644 index 0000000..7c561d0 --- /dev/null +++ b/数理统计/作业/期中考试.tex @@ -0,0 +1,264 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\renewcommand{\labelenumii}{(\alph{enumii})} +\setcounter{chapter}{6} +\setcounter{section}{5} +\section*{期中考试} +\begin{enumerate} + \questionandanswer[]{ + (10') 设$X_1, \cdots ,X_n (n>6)$是来自指数分布$p(x,\lambda)=\lambda e^{-\lambda x} I(x\geqslant 0)$的样本,其中$\lambda>0$。用$X_{(i)}$表示样本的第$i$个次序统计量。求解: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + $\lambda$的充分统计量$T$; + }{ + 样本联合密度为 + $$ + p(x_1,x_2, \cdots ;\lambda)=\lambda^{n} e^{-n \bar{x} \lambda} I(x_{(1)}\geqslant 0) + $$ + 由由因子分解定理知,$T=\bar{x}$为$\lambda$的充分统计量。 + } + \questionandanswerSolution[]{ + $\operatorname{Cov}(X_{(3)}, X_{(6)})$。 + }{ + 设$Y=\lambda X$,则$Y_1,Y_2, \cdots ,Y_n$为来自$\operatorname{Exp}(1)$的样本,所以$\operatorname{Cov}(X_{(3)},X_{(6)})=\frac{1}{\lambda^{2}}\operatorname{Cov}(Y_{(3)},Y_{(6)})$,下面只需求三个量:$E(Y_{(3)}Y_{(6)}),\ E(Y_{(3)}),\ E(Y_{(6)})$。 + $$ + \begin{aligned} + \because p_{3}(u)&=\frac{n!}{2!(n-3)!} F^{2}(u) [1-F(u)]^{n-3} p(u) \\ + &=\frac{n!}{2!(n-3)!} (1-e^{-u})^{2} e^{-(n-2)u} I(u\geqslant 0) \\ + \therefore E(Y_{(3)}) &= \int_{0}^{+\infty} u p_3(u) \mathrm{d}u=\int_{0}^{+\infty} \frac{n!}{2!(n-3)!} u(1-e^{-u})^{2} e^{-(n-2)u} \mathrm{d}u \\ + &= \frac{n^{4} -3n^{2}+6n -2}{n(n-1)(n-2)} \\ + \end{aligned} + $$ + 同理算出$E(Y_{(6)})$与$E(Y_{(3)}Y_{(6)})$后可计算出 + $$ + \operatorname{Cov}(X_{(3)},X_{(6)})=\frac{1}{\lambda^{2}} \operatorname{Cov}(Y_{(3)},Y_{6})=\frac{1}{\lambda^{2}}\left[ E(Y_{(3)}Y_{(6)}) - E(Y_{(3)})E(Y_{(6)}) \right] + $$ + } + \end{enumerate} + \questionandanswer[]{ + (15') 设$X_i, \ i=1,2,3$独立且都分别服从$N(i, i^{2})$,利用$X_i$构造下面分布的统计量: + }{} + \begin{enumerate} + \questionandanswer[]{ + 自由度为3的$\chi^{2}$分布; + }{ + $$ + \left( \frac{X_1-1}{1} \right) ^{2}+\left( \frac{X_2-2}{2} \right) ^{2}+\left( \frac{X_3-3}{3} \right) ^{2} = \chi^{2}(3) + $$ + } + \questionandanswer[]{ + 自由度为2的$t$分布; + }{ + $$ + \frac{(X_1-1)\sqrt{2}}{\sqrt{\left( \frac{X_2-2}{2} \right) ^{2}+\left( \frac{X_3-3}{3} \right) ^{2}}} \sim t(2) + $$ + } + \questionandanswer[]{ + 自由度为1, 2的$F$分布。 + }{ + $$ + \frac{\left( \frac{X_1-1}{1} \right) ^{2}}{\left( \frac{X_2-2}{2} \right) ^{2}+\left( \frac{X_3-3}{3} \right) ^{2}} \sim F(1,2) + $$ + } + \end{enumerate} + \questionandanswer[3]{ + (10') 设$X_1, \cdots ,X_n$是来自均值为$\mu$,方差为$\sigma^{2}$的总体的简单样本。 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明:如果$\sum_{i=1}^{n} a_i=1$,则估计量$\sum_{i=1}^{n} a_i X_i$是$\mu$的一个无偏估计量; + }{ + $$ + E\left( \sum_{i=1}^{n} a_i X_i \right) =\sum_{i=1}^{n} a_i (EX_{i})=\left( \sum_{i=1}^{n} a_i \right) \mu = 1 \cdot \mu = \mu + $$ + 所以估计量$\sum_{i=1}^{n} a_i X_i$是$\mu$的一个无偏估计量。 + } + \questionandanswerSolution[]{ + 在所有这类形式的估计量中求一个最小方差者,并计算其方差。 + }{ + $$ + \operatorname{Var}\left( \sum_{i=1}^{n} a_i X_i \right) =\left( \sum_{i=1}^{n} a_i^{2} \right) \sigma^{2} = \left( \sum_{i=1}^{n} a_i^{2} \cdot \sum_{i=1}^{n} 1^{2} \right) \sigma^{2} \frac{1}{n} \geqslant \left( \sum_{i=1}^{n} a_i \right) ^{2} \sigma^{2} + $$ + 所以当$\sum_{i=1}^{n} a_i=1$时方差最小,为$\sigma^{2}$。 + } + \end{enumerate} + \questionandanswer[4]{ + (15') 设简单样本$X_1, \cdots ,X_n \sim F$。对给定常数$x_0$,令$F_n(x_0)=\frac{1}{n} \sum_{i=1}^{n} I(X_i \leqslant x_0)$。回答以下问题: + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明$F_n(x_0)$是$F(x_0)$的无偏估计; + }{ + $$ + \begin{aligned} + &\because \sum_{i=1}^{n} I(x_i \leqslant x_0)\text{为} n \text{重伯努利的独立和形式} \\ + &\therefore E\left( \sum_{i=1}^{n} I(x_i \leqslant x_0) \right) =n E(I (x_1\leqslant x_0)) = nF(x_0) \\ + \end{aligned} + $$ + } + \questionandanswerProof[]{ + 证明$F_n(x_0)$是$F(x_0)$的相合估计; + }{ + 由于$E(F_n(x_0))=F(x_0)$, $\operatorname{Var}(F_n(x_0))=\frac{1}{n} F_n(x_0) (1\cdot F(x_0)) \to 0$ $(n \to \infty)$,因此$F_n(x_0)$是$F(x_0)$的相合估计。 + } + \questionandanswerProof[]{ + 证明$F_n(x_0)$的渐近正态性。 + }{ + $$ + \begin{aligned} + &\because F_n(x_0) \text{为独立和} \\ + &\therefore \text{由中心极限定理知} \sqrt{n} (F_n(x_0)-F(x_0)) \xrightarrow{L} N(0, F(x_0) (1-F(x_0))) \\ + \end{aligned} + $$ + } + \end{enumerate} + \questionandanswer[5]{ + (15') 设随机变量$Y_1, \cdots ,Y_n$满足 + $$ + Y_i = x_i \beta + \varepsilon_i, \ i=1, \cdots ,n, + $$ + 其中$x_1, \cdots ,x_n$是固定常数,$\varepsilon_1, \cdots , \varepsilon_n$独立同分布于$N(0, \sigma^{2})$,其中$\sigma^{2}$未知。回答以下问题: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求关于$(\beta,\sigma^{2})$的一个2维充分统计量。 + }{ + 由于$Y_1,Y_2, \cdots ,Y_n$的联合密度函数为$Y_1 \sim N(x_i\beta, \alpha^{2})$, + $$ + \begin{aligned} + &L= \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{1}{2\sigma^{2}}(Y_i-x_i \beta)^{2}} \\ + &=\left( \frac{1}{\sqrt{2\pi} \sigma} \right) ^{n} \exp \left\{ -\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} (Y_i-x_i\beta)^{2} \right\} \\ + &=\left( \frac{1}{\sqrt{2\pi} \sigma} \right) ^{n} \cdot e^{-\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} Y_i^{2}} \cdot e^{\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} 2 x_i Y_i \beta} e^{-\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} x_i^{2} \beta^{2}} \\ + \end{aligned} + $$ + 设$T_1=\sum_{i=1}^{n} Y_i^{2}$, $T_2=\sum_{i=1}^{n} x_i Y_i$,有因子分解定理知$(T_1, T_2)$为$(\beta, \alpha^{2})$的二维充分统计量。 + } + \questionandanswer[]{ + 求$\beta$的MLE并证明它是$\beta$的一个无偏估计; + }{ + 令$\frac{\mathrm{d}L}{\mathrm{d}\beta}=0$,得$-\frac{1}{\sigma^{2}} \sum_{i=1}^{n} (Y_i - x_i \beta) x_i = 0 \implies \hat{\beta}_{ML}=\frac{\sum_{i=1}^{n} Y_i x_i}{\sum_{i=1}^{x} x_i^{2}}=\frac{\overline{Y x}}{ \overline{x ^{2}}}$。 + + $$ + \begin{aligned} + E\left( \hat{\beta}_{ML} \right) &=E\left( \frac{1}{\sum_{i=1}^{n} x_i^{2}} \sum_{i=1}^{n} x_i Y_i \right) =\frac{1}{\sum_{i=1}^{n} x_i^{2}} \sum_{i=1}^{n} E(x_i Y_i) = \frac{1}{\sum_{i=1}^{n} x_i^{2}} \sum_{i=1}^{n} x_i (EY_{i}) \\ + &=\frac{1}{\sum_{i=1}^{n} x_i^{2}} \sum_{i=1}^{n} x_i(x_i \beta) = \beta \\ + \end{aligned} + $$ + } + \questionandanswerSolution[]{ + 求$\beta$的MLE的分布。 + }{ + $$ + \hat{\beta}_{ML} = \frac{\sum_{i=1}^{n} x_i Y_i}{\sum_{i=1}^{n} x_i^{2}} + $$ + } + \end{enumerate} + \questionandanswer[6]{ + (15') 设$X_1, X_2, \cdots , X_n$是来自$N(\mu,1)$的简单随机样本,其中$\mu$未知。用$\bar{X}$表示样本均值。令$p=P(X_1\geqslant 0)$,回答以下问题: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$p$的极大似然估计$\hat{p}$; + }{ + 因为$\mu$的MLE为$\bar{x}$,而$p = P(X_1\geqslant 0)=P\left( \frac{x_1-\mu}{1} \geqslant -\mu \right) =1-\Phi(-\mu)=\Phi(\mu)$, + 所以由MLE的不变性知 $\hat{P}_{MLE} = \Phi(\bar{x})$ + } + \questionandanswerSolution[]{ + 求$\sqrt{n}(\hat{p}-p)$的极限分布; + }{ + 因为$\hat{\mu} = \bar{x} \sim N(\mu, \frac{1}{n})$,设$g(x)= \Phi(x)$,由Delta方法知 + $$ + \sqrt{n} \left( \hat{p} - p \right) =\sqrt{n} \left( \Phi(\bar{x}) -\Phi(\mu) \right) = \xrightarrow{L} N(0, \phi^{2}(\mu) \frac{1}{n}) + $$ + 其中$\phi$为标准正态分布的概率密度函数。 + } + \questionandanswerSolution[]{ + 求$p$的UMVUE。 + }{ + $\Phi\left( \sqrt{\frac{n}{n-1}} \cdot \bar{x} \right) $为$p$的UMVME。 + } + \end{enumerate} + \questionandanswerSolution[]{ + (10') 已知总体密度为$p(x;\theta) = \theta^{2} x^{\theta^{2}-1} (\theta>0, 00$)的一个样本。参数$\lambda$的先验分布是$\phi(\lambda)=e^{-\lambda}$(其中$\lambda>0$),求$\lambda$的后验密度和贝叶斯估计。 + }{ + 后验分布为 + $$ + \begin{aligned} + h(\theta |X_1, \cdots ,X_n) &= c \prod_{i=1}^{n} f(x_i |\lambda) \cdot \pi(\lambda) \\ + &=\frac{\lambda^{X_1+X_2+ \cdots +X_n}}{x_1! x_2!\cdots X_n!} e^{-n\lambda} e^{-\lambda} \\ + &=c \lambda^{\sum_{i=1}^{n} x_i} e^{-(n+1) \lambda} \sim \operatorname{Ga}\left( \sum_{i=1}^{n} x_i +1, n+1 \right) \\ + \end{aligned} + $$ + 后验均值为贝叶斯估计 $\displaystyle \hat{\lambda} = \frac{\sum_{i=1}^{n} x_i + 1}{n+1}$。 + } +\end{enumerate} +\subsection*{附加题} +\begin{enumerate} + \questionandanswer[]{ + (10') 设$X_1, \cdots X_n, X_{n+1}$是来自$N(\mu,\sigma^{2})$的样本,记$\bar{X}_n = \frac{1}{n} \sum_{i=1}^{n} X_i, \ S_n^{2} = \frac{1}{n-1} \sum_{i=1}^{n} (X_i-\bar{X}_n)^{2}$。求解: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 常数$a$和$b$使得$T=(a X_{n+1} + b \bar{X}_n)/S_n$服从$t$分布,并指出$t$分布的自由度; + }{ + 若$T=(a X_{n+1} + b \bar{X}_n)/S_n$服从$t$分布,则因为$X_{n+1}, \bar{X}_n$都与$S_n$独立,所以 + $$ + \begin{aligned} + ET=0 &\implies a E(X_{n+1}) + b(\bar{X}_{n}) = 0 \\ + &\implies a \mu + b \mu =0 \implies a = -b \\ + \end{aligned} + $$ + 又因为$\displaystyle \frac{(\bar{X}_n - X_{n+1})}{\sqrt{\frac{n+1}{n} }\sigma}=\frac{\bar{X}_n - \mu-(X_{n+1}-\mu)}{\sqrt{\frac{n+1}{n}} \sigma}\sim N(0,1)$,$\displaystyle \frac{(n-1) S_n^{2}}{\sigma^{2}} \sim \chi^{2}(n-1)$,所以 + $$ + T=\left.\frac{(\bar{X}_n-X_{n+1})}{\sqrt{\frac{n+1}{n}}\sigma} \middle/ \sqrt{\frac{(n-1)S_n^{2}}{\sigma^{2}(n-1)}}\right. \sim t(n-1) + $$ + 整理得 + $ + \displaystyle \sqrt{\frac{n}{n+1}} (\bar{X}_n-X_{n+1}) /S_n \sim t(n-1) + $\\ + 即$a=\pm \sqrt{\frac{n}{n+1}}$, $b=\mp \sqrt{\frac{n}{n+1}}$,自由度为$n-1$。 + } + \questionandanswerSolution[]{ + 计算$\mathbb{E}(S_n^{3})$。 + }{ + $$ + \begin{aligned} + &\because X = \frac{(n-1)S_n^{2}}{\sigma^{2}} \sim \chi^{2}(n-1) \\ + &\therefore X\text{的密度函数为} p(x)= \frac{\left( \frac{1}{2} \right) ^{\frac{n-1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) }x^{\frac{n}{2}-1} e^{-\frac{x}{2}}\ (x>0) \\ + \end{aligned} + $$ + 取$y=\sqrt{x}$,则$Y=\sqrt{X}$的密度函数为 + $$ + g(y)= p(x) \frac{\mathrm{d}x}{\mathrm{d}y} =p(x) \cdot 2y = p(y^{2})\cdot 2y = \frac{\left( \frac{1}{2} \right) ^{\frac{n-1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) } \cdot 2y^{n-2} \cdot y \cdot e^{-\frac{y^{2}}{2}} + $$ + $$ + \begin{aligned} + E(Y^{3}) &= \int_{0}^{+\infty} y^{3}g(y) \mathrm{d}y = \int_{0}^{+\infty} \frac{2\left( \frac{1}{2} \right) ^{\frac{n-1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) } y^{n+1} \cdot e^{-\frac{y^{2}}{2}} \mathrm{d}y \\ + &=\frac{2^{\frac{n+1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) } \int_{0}^{+\infty} y^{n+1} e^{-\frac{y^{2}}{2}} \mathrm{d}y = \begin{cases} + \frac{2^{\frac{n+1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) } (2k-1)!!,\quad & n=2k-1 \\ + \frac{2^{\frac{n+1}{2}}}{\Gamma\left( \frac{n-1}{2} \right) } (2k)!!,\quad & n=2k \\ + \end{cases} + \end{aligned} + $$ + 由$\displaystyle \sqrt{\frac{(n-1)S_n^{2}}{\sigma^{2}}}=Y \implies E S_n^{3}=\left( \frac{\sigma}{\sqrt{n-1}} \right) ^{3} \cdot E(Y^{3})$代入即得。 + } + \end{enumerate} +\end{enumerate} +\textbf{注:}正常题总分为100分,附加题总分为10分。总评分为两者之和,但总评分不超过100分。 +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第一周作业.tex b/数理统计/作业/第一周作业.tex new file mode 100644 index 0000000..0b4563f --- /dev/null +++ b/数理统计/作业/第一周作业.tex @@ -0,0 +1,175 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{5} +\section{总体与样本} +\begin{enumerate} + \questionandanswer[2]{ + 某市要调查成年男子的吸烟率,特聘请50名统计专业本科生作街头随机调查,要求每位学生调查100名成年男子,问该项调查的总体和样本分别是什么,总体用什么分布描述为宜? + }{ + 总体是成年男子,样本是$50\times 100=5000$名成年男子。总体应该用正态分布描述为宜。 + } + \questionandanswer[4]{ + 为估计鱼塘里有多少条鱼,一位统计学家设计了一个方案如下:从鱼塘中打捞出一网鱼,计有$n$条,涂上不会被水冲刷掉的红漆后放回,一天后再从鱼塘里打捞一网,发现共有$m$条鱼,而涂有红漆的鱼则有$k$条,你能估计出鱼塘里大概有多少鱼吗?该问题的总体和样本又分别是什么呢? + }{ + 鱼塘里大概有$\displaystyle \frac{m}{k}\cdot n$条鱼。将打捞鱼看做随机抽样的过程,则该问题的总体是鱼塘里的鱼,样本是打捞出的鱼。 + } + \questionandanswer[5]{ + 某厂生产的电容器的使用寿命服从指数分布,为了解其平均寿命,从中抽出$n$件产品测其实际使用寿命,试说明什么是总体,什么是样本,并指出样本的分布. + }{ + 总体是某厂生产的电容器,样本是抽出的$n$件产品,样本近似服从指数分布。 + } +\end{enumerate} + +\section{样本数据的整理与显示} +\begin{enumerate} + \questionandanswer[1]{ + 以下是某工厂通过抽样调查得到的10名工人一周内生产的产品数,试由这批数据构造经验分布函数并作图。 + $$ + 149 \quad 156 \quad 160 \quad 138 \quad 149 \quad 153 \quad 153 \quad 169 \quad 156 \quad 156 + $$ + }{ + 先将数据排序:138 149*2 153*2 156*3 160 169 + + \includexopp[1.5]{5.2.1} + } + \questionandanswer[5]{ + 40种刊物的月发行量(单位 百册)如下:\\ + 5954 \quad + 5022 \quad + 14667 \quad + 6582 \quad + 6870 \quad + 1840 \quad + 2662 \quad + 4508 \quad + 1208 \quad + 3852 \quad + 618 \quad + 3008 \quad + 1268 \quad + 1978 \quad + 7963 \quad + 2048 \quad + 3077 \quad + 993 \quad + 353 \quad + 14263 \quad + 1714 \quad + 11127 \quad + 6926 \quad + 2047 \quad + 714 \quad + 5923 \quad + 6006 \quad + 14267 \quad + 1697 \quad + 13876 \quad + 4001 \quad + 2280 \quad + 1223 \quad + 12579 \quad + 13588 \quad + 7315 \quad + 4538 \quad + 13304 \quad + 1615 \quad + 8612 \quad + \begin{enumerate} + \item 建立该批数据的频数分布表,取组距为1700(百册); + \item 画出直方图。 + \end{enumerate} + }{ + \begin{minipage}{0.3\linewidth} + \begin{table}[H] + \begin{tabular}{ccc} + \toprule + 下限 & 上限 & 频率\\ + \midrule + 300 & 1999 & 12 \\ + 2000 & 3699 & 6 \\ + 3700 & 5399 & 5 \\ + 5400 & 7099 & 6 \\ + 7100 & 8799 & 3 \\ + 8800 & 10499 & 0 \\ + 10500 & 12199 & 1 \\ + 12200 & 13899 & 4 \\ + 13900 & 15599 & 3 \\ + \bottomrule + \end{tabular} + \end{table} + \end{minipage} + \hfill + \begin{minipage}{0.7\linewidth} + \includesvgpdf{5.2.5} + \end{minipage} + + (频数分布表和直方图均通过Excel完成,坐标轴的标签无法与刻度对齐) + } + \questionandanswer[6]{ + 对下列数据构造茎叶图:\\ + 472 \quad + 425 \quad + 447 \quad + 377 \quad + 341 \quad + 369 \quad + 412 \quad + 399 \quad + 400 \quad + 382 \quad + 366 \quad + 425 \quad + 399 \quad + 398 \quad + 423 \quad + 384 \quad + 418 \quad + 392 \quad + 372 \quad + 418 \quad + 374 \quad + 385 \quad + 439 \quad + 408 \quad + 429 \quad + 428 \quad + 430 \quad + 413 \quad + 405 \quad + 381 \quad + 403 \quad + 479 \quad + 381 \quad + 443 \quad + 441 \quad + 433 \quad + 399 \quad + 379 \quad + 386 \quad + 387 \quad + }{ + \begin{center} + \renewcommand{\arraystretch}{0.8} + % \lineskip=0.1em + \begin{tabular}{r|l} + 34 & 1 \\ + 35 & \\ + 36 & 6 9 \\ + 37 & 2 4 7 9 \\ + 38 & 1 1 2 4 5 6 7 \\ + 39 & 2 8 9 9 9 \\ + 40 & 0 3 5 8 \\ + 41 & 2 3 8 8 \\ + 42 & 3 5 5 8 9 \\ + 43 & 0 3 9 \\ + 44 & 1 3 7 \\ + 45 & \\ + 46 & \\ + 47 & 2 9 \\ + \end{tabular} + \end{center} + } + +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第七周作业.tex b/数理统计/作业/第七周作业.tex new file mode 100644 index 0000000..6341f19 --- /dev/null +++ b/数理统计/作业/第七周作业.tex @@ -0,0 +1,136 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{6} +\setcounter{section}{3} +\section{最小方差无偏估计} +\begin{enumerate} + \questionandanswerProof[1]{ + 设总体概率函数是$p(x;\theta), x_1,x_2, \cdots ,x_n$ 是其样本,$T=T(x_1,x_2, \cdots ,x_n)$是$\theta$的充分统计量,则对$g(\theta)$的任一估计$\hat{g}$,令$\tilde{g}=E(\hat{g}|T)$,证明:$MSE(\tilde{g})\leqslant MSE(\hat{g})$。这说明,在均方误差准则下,人们只需要考虑基于充分统计量的估计。 + }{ + $$ + \begin{aligned} + \operatorname{MSE}(\hat{g})&=E((\hat{g} - g(\theta))^{2})= E\left( (\hat{g} - \tilde{g} + \tilde{g} -g(\theta))^{2} \right) \\ + &=E(\hat{g}-\tilde{g})^{2} + 2E(\hat{g}-\tilde{g})(\tilde{g} - g(\theta) ) + E(\tilde{g}-g(\theta))^{2} \\ + &=E(\hat{g} - \tilde{g})^{2}+2E(\hat{g}-\tilde{g})(\tilde{g}-g(\theta))+\operatorname{MSE}(\tilde{g}) \\ + \end{aligned} + $$ + 其中 + $$ + E(\hat{g}-\tilde{g})(\tilde{g}-g(\theta))=E(E((\hat{g}-\tilde{g})(\tilde{g}-g(\theta))|T)) + $$ + 由于$T$是充分统计量,所以$E(\tilde{g}-g(\theta))$与$T$无关,所以 + $$ + \begin{aligned} + E (\hat{g}-\tilde{g})(\tilde{g}-g(\theta))&=E(\tilde{g}-g(\theta)) E(E(\hat{g}-\tilde{g}|T)) \\ + &=[E(\tilde{g}) -E(g(\theta))]E(E(\hat{g}-\tilde{g}|T)) = 0 \\ + \end{aligned} + $$ + 所以 + $$ + \operatorname{MSE}(\hat{g}) = E(\hat{g}-\tilde{g})^{2}+\operatorname{MSE}(\tilde{g})\geqslant \operatorname{MSE}(\tilde{g}) + $$ + } + \questionandanswerProof[3]{ + 设$T$是$g(\theta)$的UMVUE,$\hat{g}$是$g(\theta)$的无偏估计,证明:若$\operatorname{Var}(\hat{g})<\infty$,则$\operatorname{Cov}(T,\hat{g})\geqslant 0$。 + }{ + 由于$T$是$g(\theta)$的UMVUE,所以$E(T)=g(\theta), \operatorname{Var}(T)<\infty$;由于$\hat{g}$是$g(\theta)$的无偏估计,所以$E(\hat{g})=0$。从而$E(T-\hat{g})=E(T)-E(\hat{g})=0$,且$\operatorname{Var}(T-\hat{g})=\operatorname{Var}(T)+\operatorname{Var}(\hat{g})+\operatorname{Cov}(T,\hat{g})<\infty$(应该不存在方差有限但协方差无限的情况吧),所以根据判断准则, + $$ + 0=\operatorname{Cov}(T,T-\hat{g})=\operatorname{Var}(T)-\operatorname{Cov}(T,\hat{g}) + $$ + 所以$\operatorname{Cov}(T,\hat{g})=\operatorname{Var}(T)>0$。 + } + \questionandanswerProof[5]{ + 设总体$p(x;\theta)$的费希尔信息量存在,若二阶导数$\displaystyle \frac{\partial ^{2}}{\partial \theta^{2}}p(x;\theta)$对一切的$\theta \in \Theta$存在,证明费希尔信息量 + $$ + I(\theta)=-E\left( \frac{\partial ^{2}}{\partial \theta^{2}}\ln p(x;\theta) \right) + $$ + }{ + $$ + \begin{aligned} + -E\left( \frac{\partial ^{2}}{\partial \theta^{2}} \ln p(x;\theta) \right) =&-\int_{-\infty}^{+\infty} \frac{\partial ^{2} \ln p(x;\theta)}{\partial \theta^{2}} p(x;\theta)\mathrm{d}x \\ + =&\int_{-\infty}^{+\infty} \left( \frac{\partial \ln p(x;\theta)}{\partial \theta} \right) ^{2} p(x;\theta) \mathrm{d}x \\ + =&\int_{-\infty}^{+\infty} \frac{\partial \ln p(x;\theta)}{\partial \theta} \frac{\partial \ln p(x;\theta)}{\partial p(x;\theta)} \frac{\partial p(x;\theta)}{\partial \theta} p(x;\theta) \mathrm{d}x \\ + =&\int_{-\infty}^{+\infty} \frac{\partial \ln p(x;\theta)}{\partial \theta} \frac{1}{p(x;\theta)} \frac{\partial p(x;\theta)}{\partial \theta} p(x;\theta) \mathrm{d}x \\ + =&\int_{-\infty}^{+\infty} \frac{\partial \ln p(x;\theta)}{\partial \theta} \frac{\partial p(x;\theta)}{\partial \theta} \mathrm{d}x \\ + =& E_{x} \left( \frac{\partial \ln p(x;\theta)}{\partial \theta} \right) ^{2} = I(\theta) \\ + \end{aligned} + $$ + } + \questionandanswer[6]{ + 设总体密度函数为$p(x;\theta)=\theta x^{\theta-1}, 00$, $x_1,x_2, \cdots ,x_n$是样本。 + }{} + + \begin{enumerate} + \questionandanswerSolution[]{ + 求$g(\theta)=\dfrac{1}{\theta}$的最大似然估计; + }{ + 对数似然函数为 + $$ + \ln L(\theta)=\sum_{i=1}^{n} \ln \theta x^{\theta-1}=\sum_{i=1}^{n} \left( \ln \theta+(\theta-1) \ln x_i \right) =n \ln \theta+(\theta-1) \sum_{i=1}^{n} \ln x_i + $$ + 对$\theta$求导并令其为0, + $$ + \frac{\partial L(\theta)}{\partial \theta} = \frac{n}{\theta}+\sum_{i=1}^{n} x_i = 0 + $$ + 则$\theta$的最大似然估计为$\hat{\theta} = \dfrac{n}{\sum_{i=1}^{n} x_i}$,根据最大似然估计的不变性,$g(\theta)=\dfrac{1}{\theta}$的最大似然估计为 + $$ + \widehat{g(\theta)}=\frac{1}{\hat{\theta}}=\frac{1}{n} \sum_{i=1}^{n} x_i + $$ + } + \questionandanswerSolution[]{ + 求$g(\theta)$的有效估计。 + }{ + 可以猜测上一小题中的 + $ + \widehat{g(\theta)}=\frac{1}{n} \sum_{i=1}^{n} x_i + $ + 为有效估计,接下来验证一下。 + + % $$ + % \frac{\theta}{\theta+2}-\left( \frac{\theta}{\theta+1} \right) ^{2} = \frac{\theta}{\theta^{3} + 4 \theta^{2} + 5 \theta + 2} + % $$ + 可以计算得到总体的方差为$\dfrac{1}{\theta^{2}}$,因此 $g(\hat{\theta})=\bar{x}$的方差为$\dfrac{1}{n \theta^{2}} $。 + + 由于$\ln p(x;\theta) = \ln \theta +(\theta-1)\ln x$, + $$ + \frac{\partial \ln p(x;\theta)}{\partial \theta}=\frac{1}{\theta}+\ln x, \quad \frac{\partial^{2} \ln p(x;\theta)}{\partial \theta^{2}}=-\frac{1}{\theta^{2}}, \quad I(\theta)=-E\left( \frac{\partial ^{2}\ln p(x;\theta)}{\partial \theta^{2}} \right) =\frac{1}{\theta^{2}} + $$ + 所以$I(\frac{1}{\theta})=\theta^{2}$,所以 + $$ + \operatorname{Var}(\widehat{g(\theta)})= \frac{1}{n \theta^{2}}=\frac{1}{I(\frac{1}{\theta})}=\frac{1}{I(g(\theta))} + $$ + 因此$\widehat{g(\theta)}=\frac{1}{n} \sum_{i=1}^{n} x_i$为$g(\theta)$的有效估计。 + } + \end{enumerate} + \questionandanswerSolution[7]{ + 设总体密度函数为$\displaystyle p(x;\theta)=\frac{2\theta}{x^{3}} e^{-\frac{\theta}{x^{2}}},x>0,\theta>0$,求$\theta$的费希尔信息量$I(\theta)$。 + }{ + $$ + \ln p(x;\theta)=\ln 2+\ln \theta-3\ln x -\frac{\theta}{x^{2}} + $$ + $$ + \frac{\partial \ln p(x;\theta)}{\partial \theta}=\frac{1}{\theta} - \frac{1}{x^{2}}, \quad \frac{\partial ^{2}\ln p(x;\theta)}{\partial \theta^{2}} = -\frac{1}{\theta^{2}} + $$ + 所以 + $$ + I(\theta)=-E\left( \frac{\partial ^{2}\ln p(x;\theta)}{\partial \theta^{2}} \right) =\frac{1}{\theta^{2}} + $$ + } + \questionandanswerProof[10]{ + 设$x_1,x_2, \cdots ,x_n$是来自$\operatorname{Ga}(\alpha,\lambda)$的样本,$\alpha>0$已知,试证明$\dfrac{\bar{x}}{\alpha}$是$g(\lambda)=\dfrac{1}{\lambda}$的有效估计,从而也是UMVUE。 + }{ + $$ + p(x;\lambda) = \frac{\lambda^{\alpha}}{\Gamma(\alpha)} x^{\alpha-1} e^{-\lambda x}, x>0; \quad \ln p(x;\lambda)=\alpha\ln \lambda-\ln \Gamma(\alpha)+(\alpha-1)\ln x-\lambda x + $$ + $$ + \frac{\partial \ln p(x;\lambda)}{\partial \lambda}=\frac{\alpha}{\lambda}-x; \quad \frac{\partial ^{2} \ln p(x;\lambda)}{\partial \lambda^{2}}=-\frac{\alpha}{\lambda^{2}} + $$ + 所以 + $$ + I(\lambda)=-E\left( \frac{\partial ^{2}\ln p(x;\lambda)}{\partial \lambda^{2}} \right) =\frac{\alpha}{\lambda^{2}}; \quad \text{C-R下界}=\frac{(g'(\lambda))^{2}}{n I(\lambda)}=\frac{(-\frac{1}{\lambda^{2}})^{2}}{n \frac{\alpha}{\lambda^{2}}} = \frac{1}{\alpha \lambda^{2} n} + $$ + 由于总体的方差为$\dfrac{\alpha}{\lambda^{2}}$,所以$\bar{x}$的方差为$\dfrac{\alpha}{n \lambda^{2}}$,所以$\dfrac{\bar{x}}{\alpha}$的方差为$\dfrac{1}{n \alpha \lambda^{2}}$,等于C-R下界。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第三周作业.tex b/数理统计/作业/第三周作业.tex new file mode 100644 index 0000000..a529b58 --- /dev/null +++ b/数理统计/作业/第三周作业.tex @@ -0,0 +1,92 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{5} +\setcounter{section}{3} +\section{三大抽样分布} +\begin{enumerate} + \questionandanswerSolution[2]{ + 设$x_1,x_2, \cdots ,x_n$是来自$N(\mu,16)$的样本,问$n$多大时才能使得$P(\left\vert \bar{x}-\mu \right\vert<1 )\geqslant 0.95$成立? + }{ + 由于$\bar{x}\sim N(\mu,\frac{16}{n})$,根据切比雪夫不等式, + $$ + P(\left\vert \bar{x}-E \bar{x} \right\vert <\varepsilon)\geqslant 1-\frac{\operatorname{Var}\bar{x}}{\varepsilon} + $$ + $$ + P(\left\vert \bar{x}-\mu \right\vert <1)\geqslant 1-\frac{16}{n} + $$ + $$ + \frac{16}{n}=0.95 \Rightarrow n=\frac{16}{0.95} = \frac{320}{19} \approx 16.8421052631579 + $$ + 因为$n$为整数,所以$n$至少为17时才能使得$P(\left\vert \bar{x}-\mu \right\vert<1 )\geqslant 0.95$成立。 + } + \questionandanswerSolution[4]{ + 由正态总体$N(\mu,\sigma^{2})$抽取容量为20的样本,试求$P\left( 10\sigma^{2}\leqslant \displaystyle \sum_{i=1}^{20} (x_i-\mu)^{2}\leqslant 30\sigma^{2} \right) $。 + }{ + 由于$\displaystyle s^{2}=\frac{1}{19}\sum_{i=1}^{20} (x_i-\mu)^{2}$, $\displaystyle \frac{19s^{2}}{\sigma^{2}} \sim \chi^{2}(n-1)$, + 所以$\displaystyle \frac{1}{\sigma^{2}}\sum_{i=1}^{20} (x_i-\mu)^{2}\sim \chi^{2}(n-1)$。 + 所以 + $$ + \begin{aligned} + &P\left( 10\sigma^{2}\leqslant \sum_{i=1}^{20} (x_i-\mu)^{2}\leqslant 30\sigma^{2} \right) = P\left( 10\leqslant \frac{1}{\sigma^{2}}\sum_{i=1}^{20} (x_i-\mu)^{2}\leqslant 30 \right) \\ + &=\int_{10}^{30} \frac{\left( \frac{1}{2} \right) ^{\frac{20}{2}}}{\Gamma\left( \frac{20}{2}-1 \right) } y^{\frac{20}{2}}e^{-\frac{y}{2}} \mathrm{d}y = \int_{10}^{30} \frac{\left( \frac{1}{2} \right) ^{10}}{9!} y^{9}e^{-\frac{y}{2}} \mathrm{d}y \approx 0.898318281994385 \\ + \end{aligned} + $$ + \begin{center} + \includegraphics[width=0.2\linewidth]{imgs/2024-03-20-14-05-40.png} + \end{center} + } + \questionandanswerSolution[6]{ + 设$x_1,x_2, \cdots ,x_n$是来自$N(\mu,1)$的样本,试确定最小的常数$c$,使得对任意的$\mu\geqslant 0$,有$P(\left\vert \bar{x} \right\vert \frac{4\mu^{2}}{n} + $$ + 所以此UMVUE达不到C-R不等式的下界,即它不是有效估计。 + } + \questionandanswer[14]{ + 设$x_1,x_2, \cdots x_n$为独立同分布变量,$0<\theta<1$, + $$ + P(x_1=-1)=\frac{1-\theta}{2}, \quad P(x_1=0)=\frac{1}{2}, \quad P(x_1=1)=\frac{\theta}{2} + $$ + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$\theta$的MLE $\hat{\theta}_1$并问$\hat{\theta}_1$是否是无偏的; + }{ + 设在$x_1,x_2, \cdots ,x_n$中有$n_{-1}$个$-1$,$n_{0}$个$0$,$n_1$个$1$,则对数极大似然函数为 + $$ + \begin{aligned} + \ln L(n_{-1},n_{0},n_1;\theta)&=\ln \left[ \left( \frac{1-\theta}{2} \right) ^{n_{-1}} \left( \frac{1}{2} \right) ^{n_0} \left( \frac{\theta}{2} \right) ^{n_1} \right] \\ + &=n_{-1}\ln \left( \frac{1-\theta}{2} \right) +n_0 \ln \frac{1}{2}+n_1 \ln \frac{\theta}{2} \\ + \end{aligned} + $$ + 对$\theta$求偏导并令其为0 + $$ + \frac{\partial L}{\partial \theta}=-\frac{1}{2}\frac{2 n_{-1}}{1-\theta}+ \frac{1}{2}\frac{2n_1}{\theta} = \frac{n_1}{\theta}-\frac{n_{-1}}{1-\theta} = 0 + $$ + 则最大似然估计为 + $$ + \hat{\theta}_1 = \frac{n_{1}}{n_{1} + n_{-1}} + $$ + 根据重期望公式, + $$ + E \hat{\theta}_1 = E\left( E\left( \frac{n_1}{n_1+n_{-1}} \middle| n_1+n_{-1} \right) \right) + $$ + 其中 + $$ + E\left( \frac{n_1}{n_1+n_{-1}}\middle| n_1+n_{-1} \right) =E\left( \frac{n_1}{m}\middle| n_1+n_{-1}=m \right) = \frac{1}{m} \times m \frac{\frac{\theta}{2}}{\frac{1-\theta}{2}+\frac{\theta}{2}} = \theta + $$ + 所以$E \hat{\theta}_1 = E(\theta)= \theta$,即$\hat{\theta}_1$是无偏估计。 + } + \questionandanswerSolution[]{ + 求$\theta$的矩估计$\hat{\theta}_2$; + }{ + 设总体为$X$,则 + $$ + EX = -1 \times \frac{1-\theta}{2}+0\times \frac{1}{2}+1\times \frac{\theta}{2} = \theta - \frac{1}{2} + $$ + 所以矩估计$\hat{\theta}_2 = \bar{x}+\frac{1}{2}$。 + } + \questionandanswerSolution[]{ + 计算$\theta$的无偏估计的方差的C-R下界。 + }{ + $$ + p(x;\theta)=\begin{cases} + \frac{1-\theta}{2},\quad & x=-1 \\ + \frac{1}{2},\quad & x=0 \\ + \frac{\theta}{2},\quad & x=1 \\ + 0, \quad &\text{其他} \\ + \end{cases}, \quad \ln p(x;\theta)=\begin{cases} + \ln (1-\theta)-\ln 2,\quad & x=-1 \\ + -\ln 2,\quad & x=0 \\ + \ln \theta-\ln 2,\quad & x=1 \\ + 0,\quad & \text{其他} \\ + \end{cases}, + $$ + $$ + \frac{\partial \ln p(x;\theta)}{\partial \theta}=\begin{cases} + -\frac{1}{1-\theta},\quad & x=-1 \\ + 0,\quad & x=0 \\ + \frac{1}{\theta},\quad & x=1 \\ + 0,\quad & \text{其他} \\ + \end{cases},\quad \left( \frac{\partial \ln p(x;\theta)}{\partial \theta} \right) ^{2} = \begin{cases} + \frac{1}{(1-\theta)^{2}},\quad & x=-1 \\ + \frac{1}{\theta^{2}},\quad & x=1 \\ + 0,\quad & \text{其他} \\ + \end{cases} + $$ + 所以 + $$ + I(\theta)=E\left( \frac{\partial \ln p(x;\theta)}{\partial \theta} \right) ^{2}=\frac{1}{(1-\theta)^{2}}\times \frac{1-\theta}{2}+\frac{1}{\theta^{2}}\times \frac{\theta}{2} = \frac{1}{2 \theta (1-\theta )} + $$ + 所以$\theta$的无偏估计的方差的C-R下界为 + $$ + \frac{1}{n I(\theta)}=\frac{2\theta(1-\theta)}{n} + $$ + } + \end{enumerate} +\end{enumerate} +\section{贝叶斯估计} +\begin{enumerate} + \questionandanswerSolution[2]{ + 设总体为均匀分布$U(\theta,\theta+1)$,$\theta$的先验分布是$U(10,16)$。现有三个观测值:$11.7, 12.1, 12.0$。求$\theta$的后验分布。 + }{ + $$ + p(X|\theta)=\begin{cases} + 1^{3},\quad & \theta\in [11.1,11.7] \\ + 0,\quad & \theta \not \in [11.1,11.7] \\ + \end{cases}=1_{[11.1,11.7]}(\theta), \quad \pi(\theta)=\frac{1}{6}1_{[10,16]}(\theta) + $$ + 所以$h(X,\theta)=p(X|\theta)\pi(\theta)=\frac{1}{6} 1_{[11.1,11.7]}(\theta)$,\quad $m(X)=\int_{-\infty}^{+\infty} \frac{1}{6}1_{[11.1,11.7]}(\theta) \mathrm{d}\theta = \frac{1}{6}\times 0.7$。 + 所以$\theta$的后验分布为 + $$ + \pi(\theta|X)=\frac{h(X,\theta)}{m(X)}=\frac{1}{0.7} 1_{[11.1,11.7]}(\theta) = \frac{10}{7} 1_{[11.1,11.7]}(\theta) + $$ + } + \questionandanswer[3]{ + 设$x_1,x_2, \cdots ,x_n$是来自几何分布的样本,总体分布列为 + $$ + P(X=k|\theta)=\theta(1-\theta)^{k}, \quad k=0,1,2, \cdots , + $$ + $\theta$的先验分布是均匀分布$U(0,1)$。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$\theta$的后验分布; + }{ + $$ + p(\theta|x_1,x_2, \cdots ,x_n)=\frac{p(x_1,x_2, \cdots ,x_n|\theta)\pi(\theta)}{\int_{0}^{1} p(x_1,x_2, \cdots ,x_n|\theta)\pi(\theta) \mathrm{d}\theta} = \frac{\prod_{i=1}^{n} \left[ \theta(1-\theta)^{x_i} \right] 1_{[0,1]}(\theta)}{\int_{0}^{1} \prod_{i=1}^{n} \left[ \theta(1-\theta)^{x_i} \right] \mathrm{d}\theta} + $$ + } + \questionandanswerSolution[]{ + 若$4$次观测值为$4,3,1,6$,求$\theta$的贝叶斯估计。 + }{ + $$ + E(\theta|4,3,1,6) = \int_{0}^{1} \theta p(\theta|4,3,1,6) \mathrm{d}\theta = \text{实在算不出来了} + $$ + } + \end{enumerate} + \questionandanswerProof[5]{ + 验证:正态总体方差(均值已知)的共轭先验分布是倒伽马分布(称$X$服从倒伽马分布,如果$\frac{1}{X}$服从倒伽马分布。 + }{ + 设总体$X\sim N(\mu,\sigma^{2})$,且$\sigma^{2}\sim \operatorname{IG}(\alpha,\gamma)$,则$\frac{1}{\sigma^{2}}\sim \operatorname{Ga}(\alpha,\lambda)$,所以 + $$ + h(X|\sigma^{2})=p(X|\sigma^{2})p(\sigma^{2})= \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{1}{2}\sum_{i=1}^{n} \left( \frac{x-\mu}{\sigma} \right) ^{2}} \cdot \frac{\lambda^{\alpha}}{\Gamma(\alpha)}\left( \frac{1}{\sigma^{2}} \right) ^{\alpha-1} e^{-\frac{1}{\sigma^{2}}} + $$ + $$ + p(\sigma^{2}|X)=\frac{p(X|\sigma^{2})p(\sigma^{2})}{\int_{0}^{+\infty} p(X|\sigma^{2})p(\sigma^{2}) \mathrm{d}\sigma^{2}} = \frac{\frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{1}{2}\sum_{i=1}^{n} \left( \frac{x-\mu}{\sigma} \right) ^{2}} \cdot \frac{\lambda^{\alpha}}{\Gamma(\alpha)}\left( \frac{1}{\sigma^{2}} \right) ^{\alpha-1} e^{-\frac{1}{\sigma^{2}}}}{\int_{0}^{+\infty} \frac{1}{\sqrt{2\pi}\sigma} e^{-\frac{1}{2}\sum_{i=1}^{n} \left( \frac{x-\mu}{\sigma} \right) ^{2}} \cdot \frac{\lambda^{\alpha}}{\Gamma(\alpha)}\left( \frac{1}{\sigma^{2}} \right) ^{\alpha-1} e^{-\frac{1}{\sigma^{2}}} \mathrm{d}\sigma^{2}} + $$ + 计算可得$p(\sigma^{2}|X)$也是倒伽马分布的概率密度函数,因此$\sigma^{2}$的后验分布也是倒伽马分布,从而正态总体方差(均值已知)的共轭先验分布是倒伽马分布。 + } + \questionandanswer[6]{ + 设$x_1,x_2, \cdots ,x_n$是来自如下总体的一个样本 + $$ + p(x|\theta) = \frac{2x}{\theta^{2}}, \quad 0\theta_0$,其中$\beta,\theta_0$是两个已知的常数。 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 验证:帕雷托分布是$\theta$的共轭先验分布; + }{ + 令$X=\{ x_1,x_2, \cdots ,x_n \}$,则 $P(X|\theta)=\prod_{i=1}^{n} \frac{1}{\theta} 1_{[0,\theta]}(x_i)=\frac{1}{\theta^{n}}1_{x_{(1)}\geqslant 0} 1_{x_{(n)}\leqslant \theta}$ + $$ + h(X,\theta)=P(X|\theta)\pi(\theta)=\frac{\beta \theta_0^{\beta}}{\theta^{\beta+1+n}} 1_{x_{(1)}\geqslant 0} 1_{x_{(n)}\leqslant \theta} + $$ + $$ + m(X)=\int_{x_{(n)}}^{+\infty} h(X,\theta) \mathrm{d}\theta= \beta \theta_0^{\beta} 1_{x_{(1)}\geqslant 0} \int_{x_{(n)}}^{+\infty} \theta^{-\beta-1-n} \mathrm{d}\theta = \frac{\beta \theta_0^{\beta} 1_{x_{(1)}\geqslant 0}}{\beta+n} x_{(n)}^{-\beta-n} + $$ + % 所以 + $$ + P(\theta|X)=\frac{h(X,\theta)}{m(X)}=\frac{\frac{1_{x_{(n)}\leqslant \theta}}{\theta^{\beta+n+1}}}{\frac{x_{(n)}^{-\beta-n}}{\beta+n}} = \frac{(\beta+n)x_{(n)}^{\beta+n}}{\theta^{\beta+n-1}} 1_{x_{(n)}\leqslant \theta} + $$ + 所以$\theta$的后验分布为参数为$\beta+n$和$x_{(n)}$的帕雷托分布,从而帕雷托分布是$\theta$的共轭先验分布。 + } + \questionandanswerSolution[]{ + 求$\theta$的贝叶斯估计。 + }{ + $\theta$的贝叶斯估计为 + $$ + \begin{aligned} + \hat{\theta} = \int_{x_{(n)}}^{+\infty} \theta p(\theta|X) \mathrm{d}\theta = \int_{x_{(n)}}^{+\infty} \frac{\theta (\beta+n) x_{(n)}^{\beta+n}}{\theta^{\beta+n+1}} \mathrm{d}\theta = \frac{\beta+n}{\beta+n-1} x_{(n)} + \end{aligned} + $$ + } + \end{enumerate} + \questionandanswerProof[12]{ + 从正态总体$N(\theta,2^{2})$中随机抽取容量为$100$的样本,又设$\theta$的先验分布为正态分布,证明:不管先验分布的标准差为多少,后验分布的标准差一定小于$\frac{1}{5}$。 + }{ + 设样本为$X$,$\theta$的先验分布为$N(\mu,\sigma^{2})$,则$\theta$的后验概率密度函数为 + $$ + \begin{aligned} + &\pi(\theta|X) = c f(X|\theta) f(\theta) \\ + &=c \left( \prod_{i=1}^{n} \frac{1}{2\sqrt{2\pi}} e^{-\frac{1}{2} \left( \frac{x_i-\theta}{2} \right) ^{2}} \right) \cdot \frac{1}{\sqrt{2\pi} \sigma} e^{-\frac{1}{2} \left( \frac{\theta-\mu}{\sigma} \right) ^{2}} \\ + &=c e^{-\frac{1}{2} \left( \frac{\theta-\mu}{\sigma} \right) ^{2} - \frac{1}{2} \sum_{i=1}^{n} \left( \frac{x_i-\theta}{2} \right) ^{2}} \\ + &\geqslant ce^{-\frac{1}{2} \cdot 25 (\theta-\mu-\bar{x})^{2}} \\ + \end{aligned} + $$ + 所以后验分布的标准差一定小于$\frac{1}{5}$。 + } + \questionandanswerProof[13]{ + 设随机变量$X$服从负二项分布,其概率分布为 + $$ + f(x|p)=\binom{x-1}{k-1} p^{k} (1-p)^{x-k}, \quad x=k,k+1, \cdots + $$ + 证明其成功概率$p$的共轭先验分布族为贝塔分布族。 + }{ + 设$X=\{ x_1,x_2, \cdots ,x_n \}$。设$p$的先验分布为贝塔分布$Be(a,b)$,则$\pi(p)=\frac{1}{B(a,b)} p^{a-1}(1-p)^{b-1}$,所以 + $$ + \begin{aligned} + P(p|X)&= c \cdot h(X,p)=c \cdot P(X|p)\pi(p) =c \left(\prod_{i=1}^{n} \mathrm{C}_{x_i-1}^{k-1} p^{k} (1-p)^{x_i-k}\right) \frac{1}{B(a,b)}p^{a-1} (1-p)^{b-1} \\ + &=c p^{nk} (1-p)^{-nk} (1-p)^{\sum_{i=1}^{n} x_i} p^{a-1} (1-p)^{b-1} \\ + &=c p^{nk+a-1} (1-p)^{\sum_{i=1}^{n} x_i-nk+b-1} \\ + \end{aligned} + $$ + 其中$c$为与$p$无关的数。 + + 所以$p$的后验分布为$\displaystyle Be(nk+a, \sum_{i=1}^{n} x_i -nk +b)$,从而$p$的共轭先验分布族为贝塔分布族。 + } + \questionandanswerSolution[14]{ + 从一批产品中抽检$100$个,发现$3$个不合格,假定该产品不合格率$\theta$的先验分布为贝塔分布$Be(2,200)$,求$\theta$的后验分布。 + }{ + 设总体为$X$,则$X\sim b(100, \theta)$,所以 + $$ + \begin{aligned} + P(\theta|X) &=c\cdot P(X|\theta) \pi(\theta) = c\cdot \mathrm{C}_{100}^{3} \theta^{3} (1-\theta)^{97} \frac{1}{B(2,200)} \theta^{1} (1-\theta)^{199} \\ + &=c \cdot \theta^{4} (1-\theta)^{296} \\ + \end{aligned} + $$ + 其中$c$为与$\theta$无关的数。 + + 所以$\theta$的后验分布为$Be(5,297)$。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第二周作业.tex b/数理统计/作业/第二周作业.tex new file mode 100644 index 0000000..ee21446 --- /dev/null +++ b/数理统计/作业/第二周作业.tex @@ -0,0 +1,299 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{5} +\setcounter{section}{2} +\section{统计量及其分布} +\begin{enumerate} + \questionandanswerSolution[1]{ + 在一本书上我们随机地检查了10页,发现每页上的错误数为: + $$ + 4 \quad 5 \quad 6 \quad 0 \quad 3 \quad 1 \quad 4 \quad 2 \quad 1 \quad 4 + $$ + 试计算其样本均值、样本方差和样本标准差。 + }{ + $$ + \bar{x}=\frac{4+5+6+0+3+1+4+2+1+4}{10} = 3 + $$ + $$ + s^{2}=\frac{1}{10-1}\sum_{i=1}^{10}(x_i-\bar{x})^{2}=\frac{34}{9} \approx 3.778 + $$ + $$ + s=\sqrt{\frac{34}{9}}\approx 1.944 + $$ + } + \questionandanswerProof[2]{ + 证明:对任意常数$c,d$,有 + $$ + \sum_{i=1}^{n}(x_i-c)(y_i-d)=\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})+n(\bar{x}-c)(\bar{y}-d) + $$ + }{ + 根据性质$\displaystyle \sum_{i=1}^{n}x_i=\sum_{i=1}^{n}\bar{x},\ \sum_{i=1}^{n}y_i=\sum_{i=1}^{n}\bar{y}$可得 + $$ + \begin{aligned} + \text{右边}&=\sum_{i=1}^{n}(x_i-\bar{x})(y_i-\bar{y})+\sum_{i=1}^{n}(\bar{x}-c)(\bar{y}-d) \\ + &=\sum_{i=1}^{n}\left[ (x_i-\bar{x})(y_i-\bar{y})+(\bar{x}-c)(\bar{y}-d) \right] \\ + &=\sum_{i=1}^{n}(x_i y_i -\bar{x}y_i-\bar{y}x_i+\bar{x}\bar{y}+\bar{x}\bar{y}-\bar{x}d-\bar{y}c+cd) \\ + % &=\sum_{i=1}^{n}[(x_i-\bar{x})y_i - (x_i-\bar{x})\bar{y}+(\bar{x}-c)\bar{y}-(\bar{x}-c)d] \\ + % =\sum_{i=1}^{n}[(x_i-\bar{x}+\bar{x}-c)\bar{y}] + &=\sum_{i=1}^{n}x_i y_i-\bar{x}\sum_{i=1}^{n}y_i -\bar{y}\sum_{i=1}^{n}x_i+n \bar{x}\bar{y} +n \bar{x}\bar{y}-n \bar{x}d- n\bar{y}c+ ncd \\ + &=\sum_{i=1}^{n}x_i y_i- n \bar{x}\bar{y} -n \bar{y}\bar{x}+n \bar{x}\bar{y}+n \bar{x}\bar{y}- \sum_{i=1}^{n}x_i d - \sum_{i=1}^{n}y_i c+\sum_{i=1}^{n}cd \\ + &=\sum_{i=1}^{n}(x_i y_i-x_id-y_ic+cd) \\ + &=\sum_{i=1}^{n}(x_i-c)(y_i-d) = \text{左边} \\ + \end{aligned} + $$ + } + \questionandanswerSolution[3]{ + 设$x_1,x_2, \cdots ,x_n$和$y_1,y_2, \cdots ,y_n$是两组样本观测值,且有如下关系: + $$ + y_i=3 x_i-4, i=1,2, \cdots ,n + $$ + 试求样本均值$\bar{x}$和$\bar{y}$间的关系以及样本方差$s_{x}^{2}$和$s_{y}^{2}$间的关系。 + }{ + $$ + \bar{y}=\frac{1}{n}\sum_{i=1}^{n}y_i=\frac{1}{n}\sum_{i=1}^{n}(3 x_i-4)=3\cdot \frac{1}{n}\sum_{i=1}^{n} x_i -4=3\bar{x}-4 + $$ + $$ + \begin{aligned} + s_{y}^{2}&=\frac{1}{n-1}\sum_{i=1}^{n} (y_i-\bar{y})^{2}=\frac{1}{n-1}\sum_{i=1}^{n} (3 x_i-4-(3 \bar{x}-4))^{2}=\frac{1}{n-1}\sum_{i=1}^{n} [3(x_i-\bar{x})]^{2} \\ + &=9 \cdot \frac{1}{n-1}\sum_{i=1}^{n} (x_i-\bar{x})^{2}=9 s_{x}^{2} \\ + \end{aligned} + $$ + } + \questionandanswerProof[5]{ + 从同一总体中抽取两个容量分别为$n,m$的样本,样本均值分别为$\bar{x}_1, \bar{x}_2$,样本方差分别为$s_1^{2}, s_2^{2}$,将两组样本合并,其均值、方差分别为$\bar{x}, s^{2}$,证明: + $$ + \bar{x}=\frac{n \bar{x}_1+m \bar{x}_2}{n+m} + $$ + $$ + s^{2}=\frac{(n-1)s_1^{2}+(m-1)s_2^{2}}{n+m-1}+\frac{nm(\bar{x}_1-\bar{x}_2)^{2}}{(n+m)(n+m+1)} + $$ + }{ + $$ + \bar{x}=\frac{1}{n+m}\left( \sum_{i=1}^{n} x_{1_{i}} +\sum_{i=1}^{m} x_{2_{i}} \right) =\frac{n \bar{x}_1+m \bar{x}_2}{n+m} + $$ + $$ + \begin{aligned} + s^{2}&=\frac{1}{n+m-1} \left( \sum_{i=1}^{n} (x_{1i}-\bar{x})^{2}+\sum_{j=1}^{m} \left( x_{2j}-\bar{x} \right) ^{2} \right) \\ + &=\frac{1}{n+m-1}\left( \sum_{i=1}^{n} \left( x_{1i}-\frac{n \bar{x}_1+m \bar{x}_2}{n+m} \right) ^{2}+\sum_{i=1}^{n} \left( x_{2j}-\frac{n \bar{x}_1+m \bar{x}_2}{n+m} \right) ^{2} \right) \\ + &=\frac{(n-1)s_1^{2}+(m-1)s_2^{2}}{n+m-1}+\frac{nm(\bar{x}_1-\bar{x}_2)^{2}}{(n+m)(n+m+1)} \\ + \end{aligned} + $$ + } + \questionandanswerSolution[8]{ + 设$x_1,x_2, \cdots ,x_n$是来自$U(-1,1)$的样本,试求$E(\bar{x})$和$\operatorname{Var}(\bar{x})$。 + }{ + 设随机变量$X \sim U(-1,1)$,则 + $$ + E(\bar{x})=EX=\frac{-1+1}{2}=0 + $$ + $$ + \operatorname{Var}(\bar{x})=\frac{\operatorname{Var}(X)}{n}=\frac{\frac{(-1-1)^{2}}{12}}{n}=\frac{1}{3n} + $$ + } + \questionandanswerProof[9]{ + 设总体二阶矩存在,$x_1,x_2, \cdots ,x_n$是样本,证明$x_i-\bar{x}$与$x_j-\bar{x}\ (i\neq j)$的相关系数为$-(n-1)^{-1}$。 + }{ + 根据样本均值的性质,$E(x_i-\bar{x})=E (x_j- \bar{x})=0$。 + + 设随机变量$X$表示从总体中抽出的一个样本,则$EX^{2}$存在。 + $$ + E(x_i-\bar{x})(x_j-\bar{x})=E(x_i x_j - \bar{x} x_i - \bar{x} x_j + \bar{x}^{2})= E x_i x_j - \bar{x}E x_i - \bar{x} E x_j + \bar{x}^{2} + $$ + 将$x_i$与$x_j$看作独立的两次抽样,则$x_i,x_j\overset{\text{i.i.d.}}{\sim}X $,所以$E x_i x_j=E x_i E x_j=(EX)^{2},$\\ + $E x_i=EX, E x_j=EX$。 + 所以 + $$ + E(x_i-\bar{x})(x_j-\bar{x})=(EX)^{2}-2 \bar{x}EX + \bar{x}^{2}=\frac{1}{1-n}=-(n-1)^{-1} + $$ + } + \questionandanswerProof[10]{ + 设$x_1,x_2, \cdots ,x_n$为一个样本,$\displaystyle s^{2}=\frac{1}{n-1}\sum_{i=1}^{n} (x_i-\bar{x})^{2}$是样本方差,试证: + $$ + \frac{1}{n(n-1)}\sum_{i0$,试证$(\hat{\theta})^{2}$不是$\theta^{2}$的无偏估计。 + }{ + 由题意可知$E\hat{\theta}=\theta$,$\operatorname{Var}\hat{\theta}=E\hat{\theta}^{2}-(E\hat{\theta})^{2}>0$,所以$E\hat{\theta}^{2}>(E\hat{\theta})^{2}=\theta^{2}$,所以$\hat{\theta}^{2}$不是$\theta^{2}$的无偏估计。 + } + \questionandanswerSolution[4]{ + 设总体$X\sim N(\mu,\sigma^{2}), x_1,x_2, \cdots ,x_{n}$是来自该总体的一个样本。试确定常数$c$使$\displaystyle c\sum_{i=1}^{n-1} (x_{i+1}-x_{i})^{2}$为$\sigma^{2}$的无偏估计。 + }{ + $$ + \begin{aligned} + Ec\sum_{i=1}^{n-1} (x_{i+1}-x_{i})^{2}&=Ec\sum_{i=1}^{n-1} (x_{i+1}^{2}-2x_{i}x_{i+1} + x_i^{2}) \\ + &=c\sum_{i=1}^{n-1} Ex_{i+1}^{2}-2c\sum_{i=1}^{n-1} Ex_{i}x_{i+1}+c\sum_{i=n}^{n-1} Ex_{i}^{2} \\ + \end{aligned} + $$ + 因为总体$X\sim N(\mu,\sigma)$,所以$\forall i=1,2, \cdots ,n$ ,$Ex_{i}=\mu, \operatorname{Var}x_i=Ex_{i}^{2}-(Ex_{i})^{2}=\sigma^{2}$,从而$Ex_{i}^{2}=\sigma^{2}+\mu^{2}$。由于$x_i$与$x_{i+1}$独立,所以$Ex_{i}x_{i+1}=Ex_{i}\cdot Ex_{i+1}=\mu^{2}$。所以 + $$ + \begin{aligned} + \text{上式}&=c \sum_{i=1}^{n-1} (\sigma^{2}+\mu^{2})-2c\sum_{i=1}^{n-1} \mu^{2}+c\sum_{i=1}^{n-1} (\sigma^{2}+\mu^{2}) \\ + &=2c(n-1)(\sigma^{2}+\mu^{2})-2c(n-1)\mu^{2} \\ + &=2c(n-1)\sigma^{2} \\ + \end{aligned} + $$ + 所以当$\displaystyle c=\frac{1}{2(n-1)}$时,$\displaystyle c\sum_{i=1}^{n-1} (x_{i+1}-x_{i})^{2}$为$\sigma^{2}$的无偏估计。 + } + \questionandanswerProof[5]{ + 设$x_1,x_2, \cdots ,x_n$是来自下列总体的简单样本, + $$ + p(x,\theta)=\begin{cases} + 1,\quad & \theta-\frac{1}{2}\leqslant x\leqslant \theta+\frac{1}{2} \\ + 0,\quad & \text{其他} \\ + \end{cases}\quad -\infty<\theta<\infty + $$ + 证明样本均值$\bar{x}$及$\frac{1}{2}(x_{(1)}+x_{(n)})$都是$\theta$的无偏估计,问何者更有效? + }{ + $E \bar{x}=\theta$,$\operatorname{Var}\bar{x}=\frac{1}{n}\times \frac{1}{12}=\frac{1}{12n}$。 + + 而$E \frac{1}{2}(x_{(1)}+x_{(n)}) $为样本中最小值和最大值的平均,虽然计算不出,但理论上也应该是$\theta$。但是似乎不像样本均值一样覆盖了样本全部的信息,所以应该是$\operatorname{Var}\bar{x}\leqslant \operatorname{Var} \frac{1}{2}(x_{(1)}+x_{(n)})$,即$\bar{x}$更有效。 + } + \questionandanswerSolution[9]{ + 设有$k$台一起,已知用第$i$台仪器测量的标准差为$\sigma_i(i=1,2, \cdots ,k)$。用这些仪器独立地对某一物理量$\theta$各观察一次,分别得到$x_1,x_2, \cdots ,x_k$,设仪器都没有系统偏差。问$a_1,a_2, \cdots ,a_k$应取何值,方能使$\displaystyle \hat{\theta}=\sum_{i=1}^{k} a_i x_i$ 成为$\theta$的无偏估计,且方差达到最小? + }{ + $$ + E \hat{\theta}=E\sum_{i=1}^{k} a_i x_i= \sum_{i=1}^{k} a_i E x_i=\theta \sum_{i=1}^{k} a_i=\theta \Longrightarrow \sum_{i=1}^{k} a_i=1 + $$ + $$ + \operatorname{Var} \hat{\theta}=\operatorname{Var} \sum_{i=1}^{k} a_i x_i=\sum_{i=1}^{k} a_i^{2} \operatorname{Var}x_i=\sum_{i=1}^{k} a_i^{2} \sigma_i^{2} + $$ + 所以原问题可以转化为 + $$ + \mathop{\arg\min}_{a_i} + \quad \sum_{i=1}^{k} a_i^{2}\sigma_i^{2} + \ \ ,\quad \text{s.t.} + \ \ \sum_{i=1}^{k} a_i=1 + $$ + + 对此可以使用拉格朗日乘数法。 + 令 + $$ + f(a_1, \cdots ,a_n, \lambda)=\sum_{i=1}^{k} a_i^{2}\sigma_i^{2}+\lambda \left( \sum_{i=1}^{k} a_i - 1 \right) + $$ + 则 + $$ + \begin{cases} + \forall i=1,2, \cdots ,k,\quad f'_{a_i}=2 a_i \sigma_i^{2}+\lambda=0 \\ + f'_{\lambda}=\sum_{i=1}^{k} a_i - 1=0 \\ + \end{cases} + $$ + 解得 + $$ + \begin{cases} + \forall i=1,2, \cdots ,k, \quad a_i=\displaystyle \frac{\frac{1}{2\sigma_i^{2}}}{\sum_{i=1}^{k} \frac{1}{2\sigma_i^{2}}} \\ + \lambda=\displaystyle -\frac{1}{\sum_{i=1}^{k} \frac{1}{2\sigma_i^{2}}} \\ + \end{cases} + $$ + + 所以$\forall i=1,2, \cdots ,k, \quad a_i=\displaystyle \frac{\frac{1}{2\sigma_i^{2}}}{\sum_{i=1}^{k} \frac{1}{2\sigma_i^{2}}}$,方能使$\displaystyle \hat{\theta}=\sum_{i=1}^{k} a_i x_i$ 成为$\theta$的无偏估计,且方差达到最小。 + } + \questionandanswerSolution[11]{ + 设总体$X$服从正态分布$N(\mu,\sigma^{2})$,$x_1,x_2, \cdots ,x_n$为来自总体$X$的样本,为了得到标准差$\sigma$的估计量,考虑统计量: + $$ + y_1=\frac{1}{n}\sum_{i=1}^{n} \left\vert x_i-\bar{x} \right\vert ,\quad \bar{x}=\frac{1}{n}\sum_{i=1}^{n} x_i, \quad n\geqslant 2 + $$ + $$ + y_2=\frac{1}{n(n-1)} \sum_{i=1}^{n} \sum_{j=1}^{n} \left\vert x_i-x_j \right\vert ,\quad n\geqslant 2 + $$ + 求常数$C_1$与$C_2$,使得$C_1y_1$与$C_2y_2$都是$\sigma$的无偏估计。 + }{ + 由于$\forall i,j=1,2, \cdots ,n(i\neq j), \quad x_i\sim N(\mu,\sigma^{2}),x_j\sim N(\mu,\sigma^{2}), \bar{x}\sim N(\mu,\frac{\sigma^{2}}{n})$且它们应该相互独立。 + 所以 + $$ + x_i-\bar{x}\sim N(0, \sigma^{2}+\frac{\sigma^{2}}{n}), \quad x_i-x_j\sim N(0, 2\sigma^{2}) + $$ + 因为$Y\sim N(0,\sigma^{2})$时$E\left\vert Y \right\vert =\sigma \sqrt{\frac{2}{\pi}}$,所以 + $$ + E\left\vert x_i-\bar{x} \right\vert =\sqrt{\sigma^{2}+\frac{\sigma^{2}}{n}}\sqrt{\frac{2}{\pi}}=\sigma\sqrt{1+\frac{1}{n}}\sqrt{\frac{2}{\pi}}, \quad E\left\vert x_i-x_j \right\vert = \sqrt{2}\sigma\sqrt{\frac{2}{\pi}}=\frac{2\sigma}{\sqrt{\pi}} + $$ + 所以 + $$ + EC_1y_1=C_1\frac{1}{n}\times n \cdot \sigma\sqrt{1+\frac{1}{n}}\sqrt{\frac{2}{\pi}}=\sigma \Longrightarrow C_1=\frac{1}{\sqrt{1+\frac{1}{n}}\sqrt{\frac{2}{\pi}}} = \sqrt{\frac{n\pi}{2n+2}} + $$ + $$ + EC_2y_2=C_2 \frac{1}{n(n-1)} (n^{2}-n) \cdot \frac{2\sigma}{\sqrt{\pi}}=\sigma \Longrightarrow C_2=\frac{\sqrt{\pi}}{2} + $$ + + 所以 + $$ + C_1=\sqrt{\frac{n\pi}{2n+2}}, \quad C_2=\frac{\sqrt{\pi}}{2} + $$ + } +\end{enumerate} +\section{矩估计及相合性} +\begin{enumerate} + \questionandanswer[3]{ + 设总体分布列如下,$x_1,x_2, \cdots ,x_n$是样本,试求未知参数的矩估计: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + $P(X=k)=\frac{1}{N}, k=0,1,2, \cdots ,N-1$,$N$(正整数)是未知参数; + }{ + $$ + EX = \sum_{k=0}^{N-1} k \cdot \frac{1}{N}=\frac{1}{N}\cdot \frac{N(N-1)}{2}=\frac{N-1}{2} + $$ + 所以$N=2EX+1$,所以$N$的矩估计为 + $$ + \hat{N}=2 \bar{x}+1 + $$ + } + \questionandanswerSolution[]{ + $P(X=k)=(k-1)\theta^{2}(1-\theta)^{k-2},\quad k=2,3, \cdots ,\quad 0<\theta<1$。 + }{ + $\displaystyle + EX=\sum_{k=2}^{\infty} k(k-1)\theta^{2}(1-\theta)^{k-2} = \frac{2}{\theta} + $ + ,所以$\theta=\dfrac{2}{EX}$,所以$\theta$的矩估计为 + $\displaystyle + \hat{\theta}=\frac{2}{\bar{x}} + $。 + } + \end{enumerate} + \questionandanswer[4]{ + 设总体密度函数如下,$x_1,x_2, \cdots ,x_n$是样本,试求未知参数的矩估计: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + $p(x;\theta)=\frac{2}{\theta^{2}}(\theta-x),\quad 00$; + }{ + $\displaystyle + EX=\int_{0}^{\theta} x\frac{2}{\theta^{2}}(\theta-x) \mathrm{d}x = \frac{\theta}{3} + $ + ,所以$\theta=3EX$,所以$\theta$的矩估计是$\hat{\theta}=3 \bar{x}$。 + } + \questionandanswerSolution[]{ + $p(x;\theta)=(\theta+1)x^{\theta},\quad 00$; + }{ + $\displaystyle EX=\int_{0}^{1} x(\theta+1)x^{\theta} \mathrm{d}x = \frac{\theta + 1}{\theta + 2} $,所以$\theta$的矩估计是$\displaystyle \hat{\theta}=\frac{1}{1-\bar{x}}-2$。 + } + \questionandanswerSolution[]{ + $p(x;\theta)=\sqrt{\theta}x^{\sqrt{\theta}-1},\quad 00$; + }{ + $\displaystyle + EX=\int_{0}^{1} x\sqrt{\theta}x^{\sqrt{\theta}-1} \mathrm{d}x = \frac{\sqrt{\theta}}{\sqrt{\theta} + 1} + $ + ,所以$\theta$的矩估计是$\displaystyle \hat{\theta}=\left( \frac{\bar{x}}{1-\bar{x}} \right) ^{2}$。 + } + \questionandanswerSolution[]{ + $\displaystyle p(x;\theta,\mu)=\frac{1}{\theta}e^{-\frac{x-\mu}{\theta}}, \quad x>\mu,\quad \theta>0$。 + }{ + $$ + EX=\int_{\mu}^{+\infty} x \cdot \frac{1}{\theta}e^{-\frac{x-\mu}{\theta}} \mathrm{d}x=\theta+\mu + $$ + $$ + EX^{2}=\int_{\mu}^{+\infty} x^{2}\cdot \frac{1}{\theta}e^{-\frac{x-\mu}{\theta}} \mathrm{d}x = 2\theta^{2}+2\mu \theta+\mu^{2} + $$ + $$ + \operatorname{Var}X=EX^{2}-(EX)^{2}=2\theta^{2}+2\mu \theta+\mu^{2}-(\theta+\mu)^{2} = \theta^{2} + $$ + 所以$\theta$和$\mu$的矩估计是 + $$ + \hat{\theta}=s, \quad \hat{\mu}=\bar{x}-s + $$ + } + \end{enumerate} + \questionandanswerSolution[5]{ + 设总体为$N(\mu,1)$,现对该总体观测$n$次,发现有$k$次观测值为正,使用频率替换方法求$\mu$的估计。 + }{ + 设总体为$X$,则根据频率替换方法,$P(X>0)=\dfrac{k}{n}$。设标准正态分布的累积分布函数为$\Phi(x)$,则 + $$ + \frac{k}{n}=P(X>0)=P\left( \frac{x-\mu}{1}>\frac{0-\mu}{1} \right) =1-P\left( \frac{x-\mu}{1}\leqslant -\mu \right) =1-\Phi(-\mu) + $$ + 所以$\mu$的估计为 + $$ + \hat{\mu}=-\Phi^{-1}(1-\frac{k}{n}) + $$ + } + \questionandanswerSolution[7]{ + 设总体$X$服从二项分布$b(m,p)$,其中$m,p$为未知参数,$x_1,x_2, \cdots ,x_n$为$X$的一个样本,求$m$与$p$的矩估计。 + }{ + 因为 + $\displaystyle + EX=mp,\ \operatorname{Var}X=mp(1-p) + $ + ,所以$\displaystyle p=1-\frac{\operatorname{Var}X}{EX}$,$\displaystyle m=\frac{EX}{p}=\frac{(EX)^{2}}{EX-\operatorname{Var}X}$,所以$m$与$p$的矩估计为 + $$ + m=1-\frac{s}{\bar{x}},\qquad p=\frac{\bar{x}^{2}}{\bar{x}-s} + $$ + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第六周作业.tex b/数理统计/作业/第六周作业.tex new file mode 100644 index 0000000..071663e --- /dev/null +++ b/数理统计/作业/第六周作业.tex @@ -0,0 +1,268 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\renewcommand{\bar}{\xoverline} +\renewcommand{\hat}{\xwidehat} +\setcounter{chapter}{6} +\section{最大似然估计与EM算法} +\begin{enumerate} + \questionandanswer[2]{ + 设总体概率函数如下,$x_1,x_2, \cdots ,x_n$是样本,试求未知参数的最大似然估计。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + $p(x;\theta)=c \theta^{c} x^{-(c+1)},x>\theta,\theta>0,c>0$已知; + }{ + 对数似然函数 + $$ + \begin{aligned} + \ln L(\theta)&=\ln \prod_{i=1}^{n} p(x_i|\theta)=\ln \prod_{i=1}^{n} c \theta^{c} x_i^{-(c+1)} \\ + &= \sum_{i=1}^{n} \ln (c\theta^{c}x_i^{-(c+1)})=\sum_{i=1}^{n} (\ln c+c\ln \theta-(c+1)\ln x_i) \\ + &=n\ln c+nc\ln \theta-(c+1)\sum_{i=1}^{n} \ln x_i \\ + \end{aligned} + $$ + 只需要让$\theta$尽量大即可使似然函数取到最大值,又因为$\theta\mu,\theta>0$; + }{ + 对数似然函数 + $$ + \begin{aligned} + &\ln L(\theta,\mu)=\ln \prod_{i=1}^{n} p(x;\theta,\mu)=\ln \prod_{i=1}^{n} \frac{1}{\theta}e^{-\frac{x-\mu}{\theta}} \\ + &=\sum_{i=1}^{n} \ln \left( \frac{1}{\theta}e^{-\frac{x-\mu}{\theta}} \right) =\sum_{i=1}^{n} (-\ln \theta-\frac{x-\mu}{\theta}) \\ + &=-n\ln \theta - \frac{1}{\theta}\sum_{i=1}^{n} x_i+\frac{n\mu}{\theta} \\ + \end{aligned} + $$ + + 对于$\mu$,由于$\ln L(\theta,\mu)$关于$\mu$是线性关系,所以只需要$\mu$尽量大即可使似然函数取到最大值,而$\mu0,k>0$已知。 + }{ + 对数似然函数 + $$ + \ln L(\theta)=\ln \prod_{i=1}^{n} (k\theta)^{-1}=\sum_{i=1}^{n} \ln (k\theta)^{-1}=\sum_{i=1}^{n} (-k\theta)=-nk\theta + $$ + 只要$\theta$尽量小即可使似然函数取得最大值。由于$\theta0$,所以$\frac{\theta}{k+1}<\frac{x}{k+1}<\theta$,所以$\theta$的最大似然估计为$\hat{\theta}=\dfrac{x_{(n)}}{k+1}$。 + } + \end{enumerate} + \questionandanswerSolution[4]{ + 一地质学家为研究密歇根湖的湖滩地区的岩石成分,随机地自该地区取100个样品,每个样品有10块石子,记录了每个样品中属石灰石的石子数。假设这100次观察柜互独立,求这地区石子中石灰石的比例$p$的最大似然估计。该地质学家所得的数据如下: + + \begin{tabular}{c|ccccccccccc} + 样本中的石子数 & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\ + \hline + 样品个数 & 0 & 1 & 6 & 7 & 23 & 26 & 21 & 12 & 3 & 1 & 0 \\ + \end{tabular} + }{ + 当已知石灰石的比例为$p$时,并且如果每次抽样都是随机抽样,那么每个石子是石灰石的概率就是$p$,由于每个样品有10块石子,所以一次抽样服从二项分布$b(10,p)$,则概率函数为 + $$ + p(k;p)=\mathrm{C}_{10}^{k}p^{k}(1-p)^{10-k} + $$ + + 设表格中的第一行为$x_i(i=0,1, \cdots ,10)$,第二行为$a_i(i=0,1, \cdots, 10)$,则对数似然函数为 + $$ + \begin{aligned} + &\ln L(p)=\ln \prod_{i=1}^{n} \left( \mathrm{C}_{10}^{x_i} p^{x_i}(1-p)^{10-x_i} \right) ^{a_i} \\ + &=\sum_{i=1}^{n} a_i\left( \ln \mathrm{C}_{10}^{x_i}+x_i\ln p+(10-x_i)\ln (1-p) \right) \\ + &=\sum_{i=1}^{n} a_i \ln \mathrm{C}_{10}^{x_i} +\ln p \sum_{i=1}^{n} a_i x_i+\ln (1-p)\sum_{i=1}^{n} a_i(10-x_i) \\ + \end{aligned} + $$ + 令 + $$ + \frac{\mathrm{d}\ln L(p)}{\mathrm{d}p} = \frac{\sum_{i=1}^{n} a_i x_i}{p}-\frac{\sum_{i=1}^{n} a_i(10-x_i)}{1-p}=0 + $$ + 解得 + $$ + p=\frac{\sum_{i=1}^{n} a_i x_i}{10 \sum_{i=1}^{n} a_i}= \frac{\sum_{i=1}^{n} a_i \frac{x_i}{10}}{\sum_{i=1}^{n} a_i} + $$ + 即以样品个数为权重,样品中石灰石比例的加权平均值。 + + 所以 + $$ + \hat{p}=\frac{\sum_{i=1}^{n} a_i x_i}{10 \sum_{i=1}^{n} a_i} = \frac{ + \begin{split} + 0\times 0+1\times 1+6\times 2+7\times 3+23\times 4+26\times 5 \\+21\times 6+12\times 7+3\times 8+1\times 9+0\times 10 + \end{split} + }{10\times 100} = 0.499 + $$ + } + \questionandanswerSolution[5]{ + 在遗传学研究中经常要从截尾二项分布中抽样,其总体概率函数为 + $$ + p(X=k;p)=\frac{\displaystyle \binom{m}{k}p^{k}(1-p)^{m-k}}{1-(1-p)^{m}},\quad k=1,2, \cdots ,m + $$ + 若已知$m=2,x_1,x_2, \cdots ,x_n$是样本,试求$p$的最大似然估计。 + }{ + 对数似然函数为 + $$ + \begin{aligned} + \ln L(p)&= \ln \prod_{i=1}^{n} \frac{\displaystyle \binom{m}{x_i}p^{x_i}(1-p)^{m-x_i}}{1-(1-p)^{m}} \\ + &=\sum_{i=1}^{n} \left[ \ln \binom{m}{x_i}+x_i\ln p+(m-x_i)\ln (1-p)-\ln (1-(1-p)^{m}) \right] \\ + &=\sum_{i=1}^{n} \ln \binom{m}{x_i}+\ln p \sum_{i=1}^{n} x_i+\ln (1-p)\sum_{i=1}^{n} (m-x_i)-n\ln (1-(1-p)^{m}) \\ + \end{aligned} + $$ + 令 + $$ + \frac{\mathrm{d}\ln L(p)}{\mathrm{d}p}=\frac{\sum_{i=1}^{n} x_i}{p}-\frac{\sum_{i=1}^{n} (m-x_i)}{1-p}-n \frac{-m(1-p)^{m-1}}{1-(1-p)^{m}}=0 + % m=2 + % solve(latex2sympy(r"\frac{\sum_{i=1}^{n} x_i}{p}-\frac{\sum_{i=1}^{n} (m-x_i)}{1-p}-n \frac{-m(1-p)^{m-1}}{1-(1-p)^{m}}=0"), p) + $$ + 由于$m=2$,所以 + $$ + \frac{\sum_{i=1}^{n} x_i}{p}-\frac{\sum_{i=1}^{n} (2-x_i)}{1-p}+\frac{2n(1-p)}{1-(1-p)^{2}}=0 + % [ p = - \frac{\sqrt{(- 8 n x_{i} + 16 n + x_{i}^{2} \sum_{i=1}^{n} 1 - 8 x_{i} \sum_{i=1}^{n} 1 + 16 \sum_{i=1}^{n} 1) \sum_{i=1}^{n} 1}}{2 \cdot (2 n + 2 \sum_{i=1}^{n} 1)} + \frac{4 n + 2 \sum_{i=1}^{n} 2 + 2 \sum_{i=1}^{n} - x_{i} + 3 \sum_{i=1}^{n} x_{i}}{2 \cdot (2 n + \sum_{i=1}^{n} 2 + \sum_{i=1}^{n} - x_{i} + \sum_{i=1}^{n} x_{i})}, \ p = \frac{\sqrt{(- 8 n x_{i} + 16 n + x_{i}^{2} \sum_{i=1}^{n} 1 - 8 x_{i} \sum_{i=1}^{n} 1 + 16 \sum_{i=1}^{n} 1) \sum_{i=1}^{n} 1}}{2 \cdot (2 n + 2 \sum_{i=1}^{n} 1)} + \frac{4 n + 2 \sum_{i=1}^{n} 2 + 2 \sum_{i=1}^{n} - x_{i} + 3 \sum_{i=1}^{n} x_{i}}{2 \cdot (2 n + \sum_{i=1}^{n} 2 + \sum_{i=1}^{n} - x_{i} + \sum_{i=1}^{n} x_{i})}, \ n = \frac{- p (p - 1)^{2} (\sum_{i=1}^{n} x_{i} + \sum_{i=1}^{n} (2 - x_{i})) + p (\sum_{i=1}^{n} x_{i} + \sum_{i=1}^{n} (2 - x_{i})) + (p - 1)^{2} \sum_{i=1}^{n} x_{i} - \sum_{i=1}^{n} x_{i}}{2 p (p - 1)^{2}}] + $$ + 即 + $$ + \frac{n \bar{x}}{p}- \frac{2-n \bar{x}}{1-p}+\frac{2n(1-p)}{1-(1-p)^{2}}=0 + $$ + 解得$p$的最大似然估计为 + $$ + \hat{p} = \frac{\bar{x} n + 4 n + 4}{4 (n + 1)} \pm \frac{\sqrt{\bar{x}^{2} n^{2} - 8 \bar{x} n^{2} - 8 \bar{x} n + 16 n + 16}}{4 (n + 1)} + $$ + } + \questionandanswerSolution[6]{ + 已知在文学家萧伯纳的 "The Intelligent Woman's Guide to Socialism and Capitalism" 一书中 ,一个句子的单词数$X$近似地服从对数正态分布,即$Z=\ln X\sim N(\mu,\sigma^{2})$。今从该书中随机地取20个句子,这些句子中的单词数分别为 + $$ + 52\quad24\quad15\quad67\quad15\quad22\quad63\quad26\quad16\quad32\quad7\quad33\quad28\quad14\quad7\quad29\quad10\quad6\quad59\quad30 + $$ + 求该书中一个句子单词数均值$E(X)=e^{\mu+\frac{\sigma^{2}}{2}}$的最大似然估计。 + }{} + + {\kaishu + 根据题意,由于$Z=\ln X \sim N(\mu,\sigma^{2})$,可以将一个句子的单词数先取自然对数,此时即可使用正态分布的最大似然估计来估计$\mu$和$\sigma^{2}$。 + \begin{minted}[frame=single]{python} +import numpy as np + +a = np.array([52,24,15,67,15,22,63,26,16,32,7,33,28,14,7,29,10,6,59,30]) +print(np.log(a)) +# [3.95124372 3.17805383 2.7080502 4.20469262 2.7080502 3.09104245 +# 4.14313473 3.25809654 2.77258872 3.4657359 1.94591015 3.49650756 +# 3.33220451 2.63905733 1.94591015 3.36729583 2.30258509 1.79175947 +# 4.07753744 3.40119738] + +print(np.mean(np.log(a))) +# 3.0890326915239807 +print(np.var(np.log(a))) +# 0.5081312851436304 + \end{minted} + + 所以$\hat{\mu}\approx 3.0890326915239807$, $\widehat{(\sigma^{2})}\approx 0.5081312851436304$。 + + 再根据最大似然估计的不变性,直接计算$\displaystyle e^{\hat{\mu}+\frac{\widehat{(\sigma^{2})}}{2}}$。 + \begin{minted}[frame=single]{python} +np.exp(np.mean(np.log(a)) + np.var(np.log(a)) / 2) +# 28.306694575039742 + \end{minted} + + 则该书中一个句子单词数均值$E(X)=e^{\mu+\frac{\sigma^{2}}{2}}$的最大似然估计约为$28.306694575039742$。 + } + \questionandanswer[7]{ + 设总体$X\sim U(\theta,2\theta)$,其中$\theta>0$是未知参数,$x_1,x_2, \cdots ,x_n$为取自该总体的样本,$\bar{x}$为样本均值。 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明$\hat{\theta}=\dfrac{2}{3} \bar{x}$是参数$\theta$的无偏估计和相合估计; + }{ + $$ + E \hat{\theta}=E \frac{2}{3} \bar{x}= E \frac{2}{3} \frac{1}{n}\sum_{i=1}^{n} x_i=\frac{2}{3} \frac{1}{n} \sum_{i=1}^{n} EX=\frac{2}{3} \frac{1}{n} n \frac{\theta+2\theta}{2}=\theta + $$ + $$ + \operatorname{Var} \hat{\theta}=\operatorname{Var} \frac{2}{3} \bar{x}=\frac{2}{3} \frac{n \operatorname{Var}X}{n^{2}}=\frac{2\operatorname{Var}X}{3n} \xrightarrow{n \to \infty} 0 + $$ + 所以$\hat{\theta} = \dfrac{2}{3} \bar{x}$是参数$\theta$的无偏估计和相合估计。 + } + \questionandanswerSolution[]{ + 求$\theta$的最大似然估计,它是无偏估计吗?是相合估计吗? + }{ + $$ + \ln L(\theta)= \ln \prod_{i=1}^{n} 1_{[\theta,2\theta]}(x_i) \cdot \frac{1}{\theta}=\frac{1}{\theta} \sum_{i=1}^{n} \ln 1_{[\theta,2\theta]}(x_i) + $$ + 要使似然函数最大,则需要$\theta$尽量小,同时要满足$\theta\leqslant x_i\leqslant 2\theta$,即$\frac{\theta}{2}\leqslant \frac{x_i}{2}\leqslant \theta$,所以$\theta$的最大似然估计为$\hat{\theta}=\dfrac{x_{(n)}}{2}$。 + + 下面验证无偏性。 + $$ + E \hat{\theta}=\frac{1}{2} \int_{\theta}^{2\theta} x \frac{n}{\theta} \left( \frac{x-\theta}{\theta} \right) ^{n-1} \mathrm{d}x = \frac{\theta (2 n + 1)}{2 (n + 1)} \xrightarrow{n \to \infty} \theta + $$ + 所以$\hat{\theta}$不是无偏估计,但是是渐近无偏估计。 + + 下面验证相合性。 + $$ + E \hat{\theta}^{2} = \frac{1}{4} \int_{\theta}^{2\theta} x^{2} \frac{n}{\theta} \left( \frac{x-\theta}{\theta} \right) ^{n-1} \mathrm{d}x=\frac{\theta^{2} (n^{2} + 2 n + \frac{1}{2})}{n^{2} + 3 n + 2} + $$ + $$ + \operatorname{Var}\hat{\theta} = E\hat{\theta}^{2} - (E \hat{\theta})^{2}= + \frac{n \theta^{2}}{4 (n^{3} + 4 n^{2} + 5 n + 2)} \xrightarrow{n \to \infty} 0 + $$ + 所以$\hat{\theta}$是相合估计。 + } + \end{enumerate} + \questionandanswer[8]{ + 设$x_1,x_2, \cdots ,x_n$是来自密度函数为$p(x;\theta)=e^{-(x-\theta)},x>\theta$的总体的样本。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$\theta$的最大似然估计$\hat{\theta}_1$,它是否是相合估计?是否是无偏估计? + }{ + $$ + \ln L(\theta)= \ln \prod_{i=1}^{n} e^{-(x-\theta)}=\sum_{i=1}^{n} (-(x_i-\theta))= -\sum_{i=1}^{n} x_i+ n \theta + $$ + 要让似然函数最大,$\theta$要尽量大,同时$\theta0.1$的显著性水平$\alpha=0.05$的检验; + }{ + 由于泊松分布关于参数$\lambda$具有可加性,所以$\sum_{k=1}^{n} x_k\sim P(30\lambda)$,所以选取$\sum_{k=1}^{n} x_k$作为统计量,设拒绝域为$W$,则 + $$ + P(W|H_0)=P(W|\lambda\leqslant 0.1)= \sum_{k=c}^{\infty} \frac{(30\lambda)^{k}}{k!} e^{-30\lambda} \leqslant 0.05 + $$ + 当$\lambda$越大则犯第一类错误的概率越大,所以此时$\lambda$可以取$0.1$,则 + $$ + \sum_{k=c}^{\infty} \frac{(30\lambda)^{k}}{k!} e^{-30\lambda} = \sum_{k=c}^{\infty} \frac{3^{k}}{k!}e^{-3} + $$ + \begin{center} + \includegraphics[width=0.3\linewidth]{imgs/2024-05-29-15-56-01.png} + \includegraphics[width=0.3\linewidth]{imgs/2024-05-29-15-55-51.png} + \end{center} + (图中的$50$可以为任何较大的自然数)可以看到当$c$取$6$时上式大于$0.05$,当$c$取$7$时上式小于$0.05$,所以所求检验的拒绝域为$\displaystyle W= \left\{ \sum_{k=1}^{30} x_k\geqslant 7 \right\} $。 + } + \questionandanswer[]{ + 求此检验的势函数$\beta(\lambda)$在$\lambda=0.05,0.2,0.3, \cdots ,0.9$时的值,并据此画出$\beta(\lambda)$的图像。 + }{ + $$ + \begin{aligned} + \beta(\lambda)&= P_{\lambda} \left( \sum_{k=1}^{30} x_i \geqslant 7 \right) = \sum_{k=7}^{\infty} \frac{(30\lambda)^{k}}{k!} e^{-30 \lambda} \\ + & = (- 1012500 \lambda^{6} - 202500 \lambda^{5} - 33750 \lambda^{4} - 4500 \lambda^{3} - 450 \lambda^{2} - 30 \lambda + e^{30 \lambda} - 1) e^{- 30 \lambda} \\ + \end{aligned} + $$ + 使用\LaTeX 的 pgfplots 宏包画图如下: + + \begin{center} + \noindent\hspace{-6em} % ylabel会导致图片偏右,需要向左移动回来 + \begin{tikzpicture} + \begin{axis}[ + xlabel={$\lambda$}, + ylabel={$\beta(\lambda)$} + ] + \addplot[domain=0:1] {(- 1012500*x^6 - 202500*x^5 - 33750 *x^4 - 4500 *x^3 - 450 *x^2 - 30 *x + e^(30*x) - 1)* e^(-30*x)}; + \end{axis} + \end{tikzpicture} + \end{center} + } + \end{enumerate} +\end{enumerate} +\section{正态总体参数假设检验} +说明:本节习题均采用拒绝域的形式完成,在可以计算检验的$p$值时要求计算出$p$值。 +\begin{enumerate} + \questionandanswerSolution[]{ + 有一批枪弹,出厂时,其初速率$v \sim N(950, 100)$(单位:m/s)。经过较长时间储存,取9发进行测试,得样本值(单位:m/s)如下: + $$ + 914\quad 920\quad 910\quad 934\quad 953\quad 945\quad 912\quad 924\quad 940 + $$ + 据经验,枪弹经储存后其初速率仍服从正态分布,且标准差保持不变,问是否可以认为这批枪弹的初速率有显著降低($\alpha=0.05$)? + }{ + 设总体的均值为$\mu$,则待检验的原假设$H_0$和备选假设$H_1$分别为 + $$ + H_0:\mu=950 \quad\mathrm{vs}\quad H_1:\mu<950 + $$ + 拒绝域为$\{ u\leqslant u_{\alpha} \}$,即$\left\{ \frac{\bar{x}-950}{10/3}\leqslant u_{0.05} \right\} $即 $\left\{ \bar{x}\leqslant -1.645\times \frac{10}{3}+950 \approx 944.5167 \right\} $。 + + 根据样本计算得出$\bar{x}=928$,在拒绝域内,因此可以认为这批枪弹的初速率有显著降低。 + + 再计算$p$值, + $$ + p=\Phi\left( \frac{928-950}{10/3} \right) = \bm{2.0665\times 10^{-11}} < 0.05 + $$ + } + \questionandanswerSolution[5]{ + 设需要对某正态总体的均值进行假设检验 + $$ + H_0:\mu=15 \quad\mathrm{vs}\quad H_1:\mu<15 + $$ + 已知$\sigma^{2}=2.5$,取$\alpha=0.05$,若要求当$H_1$中的$\mu\leqslant 13$时犯第二类错误的概率不超过$0.05$,求所需的样本容量。 + }{ + 由于已知$\sigma^{2}=2.5$,所以拒绝域为$\left\{ \frac{\bar{x}-15}{\sqrt{2.5/n}}\leqslant u_{0.05} \right\} $ + $$ + \beta=P\left( \frac{\bar{x}-15}{\sqrt{2.5/n}} >u_{0.05} \middle| \mu\leqslant 13 \right) \leqslant 0.05 + $$ + 其中 + $$ + \begin{aligned} + P\left( \frac{\bar{x}-15}{\sqrt{2.5/n}}>u_{0.05} \right) &=P\left( \frac{\bar{x}-\mu+\mu-15}{\sqrt{2.5 /n}} >u_{0.05} \right) =P\left( \frac{\bar{x}-\mu}{\sqrt{2.5 /n}}>u_{0.05}+\frac{15-\mu}{\sqrt{2.5 /n}} \right) \\ + &=1-\Phi\left( -1.645+\frac{15-\mu}{\sqrt{2.5 /n}} \right) \leqslant 0.05 \\ + \end{aligned} + $$ + 所以 + $\displaystyle + \Phi\left( -1.645+\frac{15-\mu}{\sqrt{2.5 /n}} \right) \geqslant 0.95 + $ + ,从而 + $\displaystyle + -1.645+\frac{15-\mu}{\sqrt{2.5 /n}} \geqslant 1.645 + $ + 需要在$\mu\leqslant 13$时成立,由于左侧关于$\mu$递减,所以当$\mu=13$时,解$-1.645+\frac{15-13}{\sqrt{2.5 /n} }=1.645 $可得$ n = 6.7650625$,所以所需的样本容量至少为$\bm{7}$。 + + } + \questionandanswer[6]{ + 从一批钢管中抽取10根,测得其内径(单位:mm)为 + $$ + 100.36\quad 100.31\quad 99.99\quad 100.11\quad 100.64\quad 100.85\quad 99.42\quad 99.91\quad 99.35\quad 100.10 + $$ + 设这批钢管内径服从正态分布$N(\mu,\sigma^{2})$,试分别在下列条件下检验假设($\alpha=0.05$): + $$ + H_0:\mu=100 \quad\mathrm{vs}\quad H_1:\mu>100 + $$ + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 已知$\sigma=0.5$; + }{ + 拒绝域为 + $\displaystyle + \left\{ \frac{\bar{x}-100}{0.5/\sqrt{10}}\geqslant u_{1-\alpha} \right\} = \left\{ \bar{x} \geqslant u_{0.95} \times 0.5 \sqrt{10} + 100 \right\} =\left\{ \bar{x}\geqslant 102.60 \right\} + $ + + 根据样本计算得出$\bar{x}=100.104$,不在拒绝域中,所以不能拒绝原假设。 + + 再计算$p$值, + $$ + p=1-\Phi\left( \frac{100.104-100}{0.5} \right) = \bm{0.082385} >0.05 + $$ + } + \questionandanswerSolution[]{ + $\sigma$未知。 + }{ + 拒绝域为 + $$ + \left\{ \frac{\bar{x}-100}{s /\sqrt{10}} \geqslant t_{0.95}(9) \right\} = \left\{ \frac{\bar{x}-100}{s /\sqrt{10}}\geqslant 1.8331 \right\} + $$ + 根据样本计算得出$\bar{x}=100.104, s=0.4759598489$,所以 $\frac{\bar{x}-100}{s /\sqrt{10}}=0.690976092663247$不在拒绝域内,所以不能拒绝原假设。 + + 再计算$p$值, + $$ + p=P_{t\sim t(9)}\left( t \geqslant 0.690976092663247 \right) > 1-0.7027 = \bm{0.2973} > 0.05 + $$ + } + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第十二周作业.tex b/数理统计/作业/第十二周作业.tex new file mode 100644 index 0000000..8f30289 --- /dev/null +++ b/数理统计/作业/第十二周作业.tex @@ -0,0 +1,300 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{6} +\setcounter{section}{5} +\section{区间估计} +\begin{enumerate} + \questionandanswer[3]{ + $0.50, 1.25, 0.80, 2.00$是取自总体$X$的样本,已知$Y=\ln X$服从正态分布$N(\mu,1)$。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$\mu$的置信水平为$95\%$的置信区间; + }{ + $$ + \frac{1-0.95}{2} = 0.025 + ,\quad + u_{0.025} = -1.96 + ,\quad + \frac{u_{0.025}}{\sqrt{n}}=\frac{-1.96}{\sqrt{4}}=-0.98 + $$ + $$ + \overline{\ln x} = \frac{1}{4}(\ln 0.50+ \ln 1.25+\ln 0.80+\ln 2.00) = 0 + $$ + 所以$\mu$的置信水平为$95\%$的置信区间为$[-0.98, 0.98]$。 + } + \questionandanswerSolution[]{ + 求$X$的数学期望的置信水平为$95\%$的置信区间。 + }{ + $$ + EX = E e^{Y} = e^{EY} = e^{\mu} + $$ + 所以$EX$的置信水平为$95\%$的置信区间为$[e^{-0.98}, e^{0.98}],即[0.3753110988514, 2.66445624192942]$。 + } + \end{enumerate} + \questionandanswer[5]{ + 已知某种材料的抗压强度$X\sim N(\mu,\sigma^{2})$,现随机地抽取10个试件进行抗压试验,测得数据如下: + $$ + 482\quad 493\quad 457\quad 471\quad 510\quad 446\quad 435\quad 418\quad 394\quad 469 + $$ + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求平均抗压强度$\mu$的置信水平为$95\%$的置信区间; + }{ + 由于$\sigma$未知,所以$\mu$的置信区间为$\left[ \bar{x}-t_{1-0.025}(10-1)s/ \sqrt{10}, \bar{x}+t_{1-0.025}(10-1)s /\sqrt{10} \right] $ + 之后计算得 + $$ + \bar{x}=457.5,\quad s\approx 35.21757768 + $$ + 所以$\mu$的置信水平为$95\%$的置信区间为 + $$ + [457.5- 2.2622\times 35.21757768/ \sqrt{10}, 457.5-2.2622\times 35.21757768 /\sqrt{10}] + $$ + 即 + $$ + [432.306385526736, 482.693614473264] + $$ + } + \questionandanswerSolution[]{ + 若已知$\sigma=30$,求平均抗压程度$\mu$的置信水平为$95\%$的置信区间; + }{ + 由于$\sigma$已知,所以$\mu$的$95\%$置信区间为$\left[ \bar{x}-u_{0.975}\sigma/\sqrt{n}, \bar{x}+u_{0.975}\sigma/\sqrt{n} \right] $,代入得 + $$ + \left[ 457.5-1.96\times 30 / \sqrt{10}, 457.5 + 1.96\times 30 /\sqrt{10} \right] + $$ + 即 + $$ + \left[ 438.90580735821, 476.09419264179 \right] + $$ + } + \questionandanswerSolution[]{ + 求$\sigma$的置信水平为$95\%$的置信区间。 + }{ + $\mu$未知时$\sigma$的置信水平为$95\%$的置信区间为$\left[ \frac{s\sqrt{n-1}}{\sqrt{\chi^{2}_{0.975}(n-1)}}, \frac{s\sqrt{n-1}}{\sqrt{\chi^{2}_{0.025}(n-1)}} \right] $,代入得 + $$ + \left[ \frac{35.21757768\times \sqrt{10-1}}{\sqrt{19.0228}}, \frac{35.21757768\times \sqrt{10-1}}{\sqrt{2.7004}} \right] + $$ + 即 + $$ + \left[ 24.2238693218913, 64.2934434191729 \right] + $$ + } + \end{enumerate} + \questionandanswerSolution[6]{ + 在一批货物中随机抽取80件,发现有11件不合格品,试求这批货物的不合格品率的置信水平为$0.90$的置信区间。 + }{ + 样本的分布为$b(1,p)$。由于样本量较大,可以使用近似置信区间,即\\ + $\left[ \bar{x}-u_{0.95}\sqrt{\frac{\bar{x}(1-\bar{x})}{n}}, \bar{x}+u_{0.95}\sqrt{\frac{\bar{x}(1-\bar{x})}{n}} \right] $ + ,其中$\bar{x}=\frac{11}{80} = 0.1375$,$n=80$,$u_{0.95}=1.645$,代入得 + $$ + \left[ 0.1375-1.645 \times \sqrt{\frac{0.1375\times (1-0.1375)}{80}}, 0.1375+1.645\times \sqrt{\frac{0.1375\times (1-0.1375)}{80}} \right] + $$ + 即 + $$ + \left[ 0.0741638282314373, 0.200836171768563 \right] + $$ + } + \questionandanswer[9]{ + 设从总体$X\sim N(\mu_1,\sigma_1^{2})$和总体$Y\sim N(\mu_2,\sigma_2^{2})$中分别抽取容量为$n_1=10,n_2=15$的独立样本,可计算得$\bar{x}=82, s_x^{2}=56.5, \bar{y}=76, s_y^{2}=52.4$。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 若已知$\sigma_1^{2}=64, \sigma_2^{2}=49$,求$\mu_1-\mu_2$的置信水平为$95\%$的置信区间; + }{ + $\sigma_1^{2}$和$\sigma_2^{2}$均已知,则$\mu_1-\mu_2$的置信水平为$95\%$的置信区间为\\ + $\left[ \bar{x}-\bar{y}-u_{0.975}\sqrt{\frac{\sigma_1^{2}}{n_1} +\frac{\sigma_2^{2}}{n_2}}, \bar{x}-\bar{y}+u_{0.975}\sqrt{\frac{\sigma_1^{2}}{n_1}+\frac{\sigma_2^{2}}{n_2}} \right] $,代入得 + $$ + \left[ 82-76-1.96\times \sqrt{\frac{64}{10}+\frac{49}{15}},\ 82-76+1.96\times \sqrt{\frac{64}{10}+\frac{49}{15}} \right] + $$ + 即 + $$ + \left[ -0.0938876480180258,\ 12.093887648018 \right] + $$ + }\questionandanswerSolution[]{ + 若已知$\sigma_1^{2}=\sigma_2^{2}$,求$\mu_1-\mu_2$的置信水平为$95\%$的置信区间; + }{ + $\sigma_1^{2}=\sigma_2^{2}$未知,则$\mu_1-\mu_2$的置信水平为$95\%$的置信区间为\\ + $$ + \left[\bar{x}-\bar{y} - \sqrt{\frac{n_1+n_2}{n_1n_2}}s_w t_{0.975}(n_1+n_2-2),\ \bar{x}-\bar{y}+\sqrt{\frac{n_1+n_2}{n_1n_2}}s_w t_{0.975}(n_1+n_2-2)\right] + $$ + 其中$\displaystyle s_w^{2} = \frac{(n_1-1)s_{x}^{2}+(n_2-1)s_{y}^{2}}{n_1+n_2-2}$,$t_{0.975}(23)=2.0687$,代入得 + $$ + s_w^{2}=\frac{(10-1)\times 56.5+(15-1)\times 52.4}{10+15-2} = \frac{12421}{230} + $$ + 置信区间为 + $$ + \left[ 82-76-\sqrt{\frac{10+15}{10\times 15}} \sqrt{\frac{12421}{230}}\times 2.0687,\ 82-76+\sqrt{\frac{10+15}{10\times 15}}\sqrt{\frac{12421}{230}}\times 2.0687 \right] + $$ + 即 + $$ + \left[ -0.206349837966326,\ 12.2063498379663 \right] + $$ + } + \questionandanswerSolution[]{ + 若对$\sigma_1^{2},\sigma_2^{2}$一无所知,求$\mu_1-\mu_2$的置信水平为$95\%$的置信区间; + }{ + 此时为一般场合下,$\mu_1-\mu_2$的置信水平为$95\%$的近似置信区间为\\ + $[\bar{x}-\bar{y}-s_0 t_{0.975}(l),\ \bar{x}-\bar{y}+s_0 t_{0.975}(l)]$,其中$s_0^{2} = \frac{s_{x}^{2}}{n_1}+\frac{s_y^{2}}{n_2}=\frac{56.5}{10}+\frac{52.4}{15} = \frac{2743}{300}$, \\ + $\displaystyle l=\frac{s_0^{4}}{\frac{s_{x}^{4}}{n_1^{2}(n_1-1)}+\frac{s_y^{4}}{n_2^{2}(n_2-1)}} = \frac{\left( \frac{2743}{300} \right) ^{2}}{\frac{56.5^{2}}{10^{2}(10-1)}+\frac{52.4^{2}}{15^{2}(15-1)}} = \frac{52668343}{2783727} \approx 18.92008\approx 19$,\\ + $t_{0.975}(19)=2.0930$。 + + 所以置信区间为 + $$ + \left[ 82-76-\sqrt{\frac{2743}{300}}\times 2.0930, \ 82-76+\sqrt{\frac{2743}{300}}\times 2.0930 \right] + $$ + 即 + $$ + \left[ -0.328801942179367, \ 12.3288019421794 \right] + $$ + } + \questionandanswerSolution[]{ + 求$\sigma_1^{2}/\sigma_2^{2}$的置信水平为$95\%$的置信区间。 + }{ + 置信区间为 + $$ + \left[\frac{s_{x}^{2}}{s_y^{2}}\cdot \frac{1}{F_{0.975}(9, 14)},\ \frac{s_{x}^{2}}{s_y^{2}}\cdot \frac{1}{F_{0.025}(9,14)} \right] + $$ + 由于$F_{\frac{\alpha}{2}}(n_1,n_2) = {1}/{F_{1-\frac{\alpha}{2}}(n_2,n_1)}$,所以可以代入得 + $$ + \left[ \frac{56.5}{52.4}\cdot \frac{1}{3.21},\ \frac{56.5}{52.4}\cdot {3.80} \right] + $$ + 即 + $$ + \left[0.335901643242729,\ 4.09732824427481 \right] + $$ + } + \end{enumerate} + \questionandanswerSolution[12]{ + 设某电子产品的寿命服从指数分布,其密度函数为$\lambda e^{-\lambda x}I_{\{ x>0 \}}$,现从此批产品中抽取容量为9的样本,测得寿命为(单位:千小时) + $$ + 15\quad 45\quad 50\quad 53\quad 60\quad 65\quad 70\quad 83\quad 90 + $$ + 求平均寿命$1/\lambda$的置信水平为0.9的置信区间和置信上、下限。 + }{ + 首先尝试构造枢轴量,设样本为$x_1,x_2, \cdots ,x_9$,则$x_1,x_2, \cdots x_9\overset{\text{i.i.d.}}{\sim}\operatorname{Exp}(\lambda)$,则$\sum_{i=1}^{9} x_i \sim \operatorname{Ga}(9, \lambda)$,所以${2\lambda}\sum_{i=1}^{9} x_i \sim \operatorname{Ga}(9, \frac{1}{2})=\chi^{2}(18)$,分布不依赖于$\lambda$,所以$G=2\lambda\sum_{i=1}^{9} x_i$为枢轴量,所以 + $$ + P\left( \chi^{2}_{0.05}(18)\leqslant G\leqslant \chi^{2}_{0.95}(18) \right) = 0.9 + $$ + $$ + P\left( \frac{\chi^{2}_{0.05}(18)}{2\sum_{i=1}^{9} x_i}\leqslant \lambda\leqslant \frac{\chi^{2}_{0.95}(18)}{2\sum_{i=1}^{9} x_i} \right) =0.9 + $$ + 所以$\lambda$的置信水平为0.9的双侧置信区间为 + $$ + \left[ \frac{\chi^{2}_{0.05}(18)}{2\sum_{i=1}^{9} x_i}, \ \frac{\chi^{2}_{0.95}(18)}{2\sum_{i=1}^{9} x_i} \right] = \left[ \frac{9.3905}{2\times 531},\ \frac{28.8693}{2\times 531} \right] = \left[ 0.00884227871939736,\ 0.0271838983050847 \right] + $$ + 同理,单侧置信上限为 + $$ + \frac{\chi^{2}_{0.9}(18)}{2\sum_{i=1}^{9} x_i}=\frac{25.9894}{2\times 531} = 0.0244721280602637 + $$ + 单侧置信下限为 + $$ + \frac{\chi^{2}_{0.1}(18)}{2\sum_{i=1}^{9} x_i}=\frac{10.8649}{2\times 531} = 0.0102306026365348 + $$ + 所以$\frac{1}{\lambda}$的置信水平为0.9的置信区间为 + $$ + \left[ \frac{2\times 531}{28.8693}, \ \frac{2\times 531}{9.3905} \right] = \mathbf{\left[ 36.7864825264208, \ 113.093019541025 \right]} + $$ + 单侧置信上限为 + $$ + \frac{2\times 531}{10.8649} = \mathbf{97.74595256284} + $$ + 单侧置信下限为 + $$ + \frac{2\times 531}{25.9894} = \mathbf{40.8628133008073} + $$ + } + \questionandanswerSolution[13]{ + 设总体$X$的密度函数为 + $$ + p(x;\theta)=\frac{1}{\pi\left[ 1+(x-\theta)^{2} \right] }, \quad -\infty\theta \}}, \quad -\infty<\theta<\infty, + $$ + $x_1,x_2, \cdots ,x_n$为抽自此总体的简单随机样本。 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明:$x_{(1)}-\theta$的分布与$\theta$无关,并求出此分布; + }{ + 令$y = x-\theta$,则$p(y) = e^{-y}I_{\{ y>0 \}}$。 + 由于$y=x-\theta$是单调增函数,所以$y_{(1)}=x_{(1)}-\theta$。 + $F(y)=\int_{0}^{y} e^{-t} \mathrm{d}t=1-e^{-y}$,从而次序统计量$y_{(1)}=x_{(1)}-\theta$的概率密度函数为 + $$ + p_{(1)}(y) = \frac{n!}{0!(n-1)!} [F(y)]^{0} \left[ 1-F(y) \right] ^{n-1} p(y) = n \left( e^{-y} \right) ^{n-1} e^{-y} I_{\{ y>0 \}} = ne^{-ny} I_{\{ y>0 \}} + $$ + 所以$x_{(1)}-\theta \sim \operatorname{Exp}(n)$,与$\theta$无关。 + } + \questionandanswerSolution[]{ + 求$\theta$的置信水平为$1-\alpha$的置信区间。 + }{ + $$ + P(c\leqslant x_{(1)}-\theta\leqslant d)=\int_{c}^{d} ne^{-ny} \mathrm{d}y + $$ + 因为被积函数在$[0,+\infty)$上单调递减,所以区间长度最短则$c=0$,所以 + $$ + \int_{0}^{d} n e^{-ny} \mathrm{d}y = \left. -e^{-ny} \right|_{0}^{d} = 1-e^{-nd} = 1-\alpha + $$ + 所以 $d = \dfrac{-\ln \alpha}{n}$。 + + 而$c \leqslant x_{(1)}-\theta\leqslant d \implies x_{(1)}-d\leqslant \theta\leqslant x_{(1)}-c\implies x_{(1)}+\frac{\ln \alpha}{n}\leqslant \theta\leqslant x_{(1)}$,所以$\theta$的置信水平为$1-\alpha$的置信区间为 + $$ + \left[ x_{(1)}+\frac{\ln \alpha}{n},\ x_{(1)} \right] + $$ + } + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第十五周作业.tex b/数理统计/作业/第十五周作业.tex new file mode 100644 index 0000000..b2d7a09 --- /dev/null +++ b/数理统计/作业/第十五周作业.tex @@ -0,0 +1,168 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{7} +\setcounter{section}{3} +\section{似然比检验与分布拟合检验} +\begin{enumerate} + \questionandanswer[3]{ + 设$x_1,x_2, \cdots ,x_n$为来自指数分布$\operatorname{Exp}(\lambda_1)$的样本,$y_1,y_2, \cdots ,y_m$为来自指数分布$\operatorname{Exp}(\lambda_1)$的样本,且两组样本独立,其中$\lambda_1,\lambda_2$是未知的正参数。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求假设$H_0:\lambda_1=\lambda_2 \quad\mathrm{vs}\quad H_1:\lambda_1\neq \lambda_2$的似然比检验; + }{ + 参数空间为$\Theta_0 = \{ (\lambda_1,\lambda_2)| \lambda_1 = \lambda_2 >0 \}$,$\Theta = \{ (\lambda_1,\lambda_2)|\lambda_1>0, \lambda_2>0 \}$。最大似然估计为 + $$ + \hat{\lambda_1} = \frac{n}{\sum_{i=1}^{n} x_i}, \hat{\lambda_2} = \frac{m}{\sum_{i=1}^{m} y_i}, \hat{\lambda_0}=\frac{n+m}{\sum_{i=1}^{n} x_i + \sum_{i=1}^{m} y_i} + $$ + 所以似然比检验为 + $$ + \Lambda = \frac{\left( \frac{n}{\sum_{i=1}^{n} x_i} \right) ^{n} \left( \frac{m}{\sum_{i=1}^{m} y_i} \right) ^{m}}{\left( \frac{n+m}{\sum_{i=1}^{n} x_i + \sum_{i=1}^{m} y_i} \right) ^{n+m}} + $$ + } + \questionandanswerProof[]{ + 证明上述检验法的拒绝域仅依赖于比值 $\displaystyle \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right.$; + }{ + 此检验的拒绝域为 + $$ + \{ \Lambda \geqslant c \}= \left\{ \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right. \leqslant \cdot \text{或} \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right. \geqslant \cdot \right\} + $$ + 这说明仅依赖于比值$\displaystyle \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right.$。 + } + \questionandanswerSolution[]{ + 求统计量 $\displaystyle \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right. $在原假设成立下的分布。 + }{ + 因为 $\sum_{i=1}^{n} x_i \sim \operatorname{Ga}(n, \lambda_1)$, $\sum_{i=1}^{m} y_i \sim \operatorname{Ga}(m, \lambda_2)$,所以在原假设成立下, + $$ + \left. \sum_{i=1}^{n} x_i \middle/ \sum_{i=1}^{n} y_i \right. \sim F(2n, 2m) + $$ + } + \end{enumerate} + \questionandanswerProof[4]{ + 设$x_1,x_2, \cdots ,x_n$为来自正态总体$N(\mu,\sigma^{2})$的 i.i.d. 样本,其中$\mu,\sigma^{2}$未知。证明关于假设$H_0:\mu\leqslant \mu_0 \quad\mathrm{vs}\quad H_1:\mu>\mu_0$的单侧$t$检验是似然比检验(显著性水平$\alpha < \frac{1}{2}$)。 + }{ + 似然比统计量为 + $$ + \Lambda = \frac{(2\pi \hat{\sigma})^{-\frac{n}{2}} \exp (-\frac{n}{2})}{(2\pi \hat{\sigma}_0^{2})^{-\frac{n}{2}}\exp (-\frac{n}{2})} + $$ + 拒绝域为 $\displaystyle \{ \Lambda\geqslant c \}=\left\{ \frac{\sqrt{n}(\bar{x}-\mu_0)}{s}\geqslant t_{1-\alpha}(n-1) \right\} $,这说明似然比检验此时就是单侧$t$检验。 + } + \questionandanswerSolution[6]{ + 掷一颗骰子60次,结果如下 + \begin{center} + \begin{tabular}{ccccccc} + \toprule + 点数 & 1 & 2 & 3 & 4 & 5 & 6 \\ + \midrule + 次数 & 7 & 8 & 12 & 11 & 9 & 13 \\ + \bottomrule + \end{tabular} + \end{center} + 试在显著性水平为0.05下检验这颗骰子是否均匀。 + }{ + 这是分布拟合优度检验: + $$ + \chi^{2} = \sum_{i=1}^{6} \frac{(n_i - 10)^{2}}{10}=2.8, \quad W=\{ \chi^{2}\geqslant \chi^{2}_{0.95}(5)=11.0705 \} + $$ + 所以不拒绝原假设,即认为这颗骰子均匀。 + } + \questionandanswerSolution[9]{ + 在一批灯泡中抽取300只作寿命试验,其结果如下: + \begin{center} + \begin{tabular}{ccccc} + \toprule + 寿命(h) & <100 & [100,200) & [200,300) & $\geqslant 300$ \\ + % \midrule + 灯泡数 & 121 & 78 & 43 & 58 \\ + \bottomrule + \end{tabular} + \end{center} + 在显著性水平为0.05下能否认为灯泡寿命服从指数分布$\operatorname{Exp}(0.005)$? + }{ + 也是分布拟合优度检验。题目中寿命分为了四个区间,由于指数分布的累计分布函数为$e^{-\lambda t}$,所以当$\lambda=0.005$时这四个区间的的概率$p$以及$np$分别为 + $$ + p=diff([e^{-300 \lambda}, e^{-200 \lambda}, e^{-100 \lambda},1]) \approx [0.2231, 0.1447, 0.2387, 0.3935] + $$ + $$ + np = 300 \times [0.2231, 0.1447, 0.2387, 0.3935] \approx [66.93, 43.41, 71.61, 118.05] + $$ + 所以$\chi^{2} = \sum_{axis=0} \frac{(x-np)^{2}}{np} \approx 1.8393$,拒绝域为$\{ \chi^{2}\geqslant \chi^{2}_{0.995}(3)\approx 7.8147 \}$,所以不能拒绝原假设,所以认为灯泡寿命服从指数分布 $\operatorname{Exp}(0.005)$。 + + } + \questionandanswerSolution[10]{ + 下表是上海1875年到1955年的81年间,根据其中63年观察到的一年中(5月到9月)下暴雨次数的整理资料 + \begin{center} + \begin{tabular}{ccccccccccc} + \toprule + $i$ & 0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & $\geqslant 9$ \\ + \midrule + $n_i$ & 4 & 8 & 14 & 19 & 10 & 4 & 2 & 1 & 1 & 0 \\ + \bottomrule + \end{tabular} + \end{center} + 试检验一年中暴雨次数是否服从泊松分布($\alpha=0.05$)。 + }{ + 由于泊松分布的参数的矩估计和最大似然估计是一样的,所以这里只需要计算样本的均值即 $\sum_{i=0}^{9} ( n_i \times i )/ 63 = 2.8571$,即为$\hat{\lambda}$。 + + 为了满足每一类的样本观测次数不小于5,需要合并$i\leqslant 1$和$i\geqslant 5$。 + + 之后计算 $\sum_{k=1}^{5} (n_k - n \hat{p_{k}})^{2} / n \hat{p_{k}}\approx 2.4995$,拒绝域为 $W=\{ \chi^{2}\geqslant \chi^{2}_{0.95}(5-1-1)\approx 7.8147 \}$,所以不能拒绝原假设,所以可以认为一年中暴雨次数服从泊松分布。 + + } + \questionandanswerProof[12]{ + 设按有无特性A与B将$n$个样品分成四类,组成$2\times 2$列联表: + \begin{center} + \begin{tabular}{c|cc|c} + \toprule + $ $ & $B$ & $\bar{B}$ & 合计 \\ + \hline + $A$ & $a$ & $b$ & $a+b$ \\ + $\bar{A}$ & $c$ & $d$ & $c+d$ \\ + \hline + 合计 & $a+c$ & $b+d$ & $n$ \\ + \bottomrule + \end{tabular} + \end{center} + 其中$n=a+b+c+d$,试证明此时列联表独立性检验的$\chi^{2}$统计量可以表示成 + $$ + \chi^{2} = \frac{n(ad-bc)^{2}}{(a+b)(c+d)(a+c)(b+d)} + $$ + }{ + 对于$a$,最大似然估计为$\frac{(a+c)(a+b)}{n^{2}}$,同理可以计算其他参数的最大似然估计,所以检验统计量为 + $$ + \begin{aligned} + &\chi^{2} = \frac{\left( a-\frac{(a+b)(a+c)}{n} \right) ^{2}}{\frac{(a+b)(a+c)}{n}} + \frac{\left( b - \frac{(a+b)(b+d)}{n} \right)^{2} }{\frac{(a+b)(b+d)}{n}} + \frac{\left( c-\frac{(a+c)(c+d)}{n} \right) ^{2}}{\frac{(a+c)(c+d)}{n}} + \frac{\left( d-\frac{(c+d)(b+d)}{n} \right) ^{2}}{\frac{(c+d)(b+d)}{n}} \\ + &= \frac{\begin{split} + (a + b) (a + c) (d n - (b + d) (c + d))^{2} + (a + b) (b + d) (c n - (a + c) (c + d))^{2}\\ + (a + c) (c + d) (b n - (a + b) (b + d))^{2} + (b + d) (c + d) (a n - (a + b) (a + c))^{2} + \end{split}}{n (a + b) (a + c) (b + d) (c + d)} \\ + &= \frac{n(ad-bc)^{2}}{(a + b) (a + c) (b + d) (c + d)} \\ + \end{aligned} + $$ + } + \questionandanswerSolution[13]{ + 在研究某种新措施对猪白痢的防治效果问题时,获得了如下数据: + \begin{center} + \begin{tabular}{c|cc|c|c} + \toprule + & 存活数 & 死亡数 & 合计 & 死亡率 \\ + \hline + 对照 & 114 & 36 & 150 & 24\% \\ + 新措施 & 132 & 18 & 150 & 12\% \\ + \hline + 合计 & 246 & 54 & 300 & 18\% \\ + \bottomrule + \end{tabular} + \end{center} + 试问新措施对防治该种疾病是否有显著疗效($\alpha=0.05$)? + }{ + 原假设为新措施对该种疾病无显著疗效。 + 根据第12题计算统计量 + $$ + \chi^{2} = \frac{300\times (114\times 18 - 132\times 36)^{2}}{(114+36)(36+18)(18+132)(132+114)} = \frac{300}{41} \approx 7.31707317073171 + $$ + 此时$r=c=2$,所以$(r-1)(c-1)=1$,所以$\chi^{2}_{0.95}(1)=3.8415$,所以拒绝域为$\{ \chi^{2}\geqslant 3.8415 \}$,所以拒绝原假设,所以新措施对防治该种疾病有显著疗效。 + + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第十四周作业.tex b/数理统计/作业/第十四周作业.tex new file mode 100644 index 0000000..2176a9e --- /dev/null +++ b/数理统计/作业/第十四周作业.tex @@ -0,0 +1,189 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{7} +\setcounter{section}{2} +\begin{enumerate} + \questionandanswerSolution[14]{ + 在针织品漂白工艺过程中,要考察温度对针织品断裂强力(主要质量指标)的影响。为了比较70℃与80℃的影响有无差别,在这两个温度下,分别重复做了8次试验,得数据(单位:N)如下: + + 70℃时的强力:\quad 20.5\quad 18.8\quad 19.8\quad 20.9\quad 21.5\quad 19.5\quad 21.0\quad 21.2, + + 80℃时的强力:\quad 17.7\quad 20.3\quad 20.0\quad 18.8\quad 19.0\quad 20.1\quad 20.0\quad 19.l. + + 根据经验,温度对针织品断裂强度的波动没有影响。问在70℃时的平均断裂强力与80℃时的平均断裂强力间是否有显著差别(假定断裂强力服从正态分布,取a= 0.05)? + }{ + 使用$t$检验,检验的问题为 + $$ + H_0:\mu_1=\mu_2 \quad\mathrm{vs}\quad H_1:\mu_1\neq \mu_2 + $$ + 根据样本计算得出$\bar{x}=20.4, \bar{y}=19.375, s_{u}=\sqrt{\frac{1}{8+8-2} (8\sigma^{2}_{x}+8\sigma^{2}_{y})}=0.9147599217$。 + \begin{center} + \includegraphics[width=0.3\linewidth]{imgs/2024-06-01-14-45-03.png} + \end{center} + $$ + t=\frac{\bar{x}-\bar{y}}{s_u \sqrt{\frac{1}{8}+\frac{1}{8}}}=\frac{20.4-19.375}{0.9147599217 \sqrt{\frac{1}{8}+\frac{1}{8}}} \approx 2.2410, \quad W=\{ \left\vert t \right\vert \geqslant t_{0.975}(14) \}= \{ \left\vert t \right\vert \geqslant 2.1448 \} + $$ + $t$在拒绝域内,所以拒绝原假设,所以在70℃时的平均断裂强力与80℃时的平均断裂强力间\boldkai{有显著差别}。 + + 再计算$p$值,$\displaystyle p=2(1-\Phi(\left\vert 2.2410 \right\vert ))=0.012513 < 0.05$,确实应拒绝原假设。 + } + \questionandanswerSolution[15]{ + 一药厂生产一种新的止痛片,厂方希望验证服用新药片后至开始起作用的时间间隔较原有止痛片至少缩短一半,因此厂方提出需检验假设 + $$ + H_0:\mu_1=2\mu_2 \quad\mathrm{vs}\quad H_1:\mu_1>2\mu_2 + $$ + 此处$\mu_1,\mu_2$分别是服用原有止痛片和服用新止痛片后至开始起作用的时间间隔的总体的均值。设两总体均为正态分布且方差分别为已知值$\sigma_1^{2},\sigma_2^{2}$,现分别在两总体中取一样本$x_1,x_2, \cdots ,x_n$和$y_1,y_2, \cdots ,y_m$,设两个样本独立。试给出上述假设检验问题的检验统计量及拒绝域. + }{ + 使用$u$检验,检验统计量为 $\displaystyle u=\frac{\bar{x} - 2\bar{y}}{\sqrt{\frac{\sigma_1^{2}}{n}+\frac{4\sigma_2^{2}}{m}}}$,拒绝域为$\displaystyle W=\{ u\geqslant u_{1-\alpha} \}$。 + } + \questionandanswer[26]{ + 测得两批电子器件的样品的电阻(单位:$\Omega$)为 + + A批($x$):\qquad 0.140\quad 0.138\quad 0.143\quad 0.142\quad 0.144\quad 0.137; + + B批($y$):\qquad 0.135\quad 0.140\quad 0.142\quad 0.136\quad 0.138\quad 0.140. + + 设这两批器材的电阻值分别服从分布$N(\mu_1, \sigma_1^{2}), N(\mu_2, \sigma_2^{2})$,且两样本独立。 + }{ + 使用Excel计算如下: + \begin{table}[H] + \tiny\centering + \begin{tabular}{ccccccccccc} + x & y & & & & & & & & & \\ + 0.14 & 0.135 & & & F-检验 双样本方差分析 & & & & t-检验: 双样本异方差假设 & & \\ + 0.138 & 0.14 & & & & & & & & & \\ + 0.143 & 0.142 & & & & x & y & & & x & y \\ + 0.142 & 0.136 & & & 平均 & 0.140667 & 0.1385 & & 平均 & 0.140667 & 0.1385 \\ + 0.144 & 0.138 & & & 方差 & 7.87E-06 & 7.1E-06 & & 方差 & 7.87E-06 & 7.1E-06\\ + 0.137 & 0.14 & & & 观测值 & 6 & 6 & & 观测值 & 6 & 6 \\ + & & & & df & 5 & 5 & & 假设平均差 & 0 & \\ + & & & & F & 1.107981 & & & df & 10 & \\ + & & & & P(F<=f) 单尾 & 0.456576 & & & t Stat & 1.371845 & \\ + & & & & F 单尾临界 & 5.050329 & & & P(T<=t) 单尾 & 0.100051 & \\ + & & & & & & & & t 单尾临界 & 1.812461 & \\ + & & & & & & & & P(T<=t) 双尾 & 0.200102 & \\ + & & & & & & & & t 双尾临界 & 2.228139 & \\ + & & & & & & & & & & \\ + \end{tabular} +\end{table} + } + \begin{enumerate} + \questionandanswerSolution[]{ + 试检验两个总体的方差是否相等(取$\alpha=0.05$)。 + }{ + 使用$F$检验,不能拒绝原假设,所以相等。 + } + \questionandanswerSolution[]{ + 试检验两个总体的均值是否相等(取$\alpha=0.05$)。 + }{ + 使用$t$检验,不能拒绝原假设,所以相等。 + } + \end{enumerate} +\end{enumerate} +\section{其他分布参数的假设检验} +\begin{enumerate} + \questionandanswerSolution[2]{ + 某厂一种元件平均使用 寿命为1200 h(偏低) ,现厂里进行技术革新,革新后任选8个元件进行寿命试验,测得寿命数据如下 + $$ + 2686\quad 2001\quad 2082\quad 792\quad 1660\quad 4105\quad 1416\quad 2089 + $$ + 假定元件寿命服从指数分布,取$\alpha=0.05$,问革新后元件的平均寿命是否有明显提高? + }{ + 使用$\chi^{2}$检验假设 + $$ + H_0: \theta \leqslant 1200 \quad\mathrm{vs}\quad H_1:\theta>1200 + $$ + $\chi^{2} = \frac{2\times 8 \bar{x}}{1200}\approx 28.0517$,拒绝域为$\{ \chi^{2}\geqslant \chi^{2}_{0.95}(2\times 8)\approx 26.2962 \}$,所以拒绝原假设,革新后元件的平均寿命\boldkai{有明显提高}。 + } + \questionandanswerSolution[3]{ + 有人称某地成年人中大学毕业生比率不低于30\%。为检验之,随机调查该地15名成年人,发现有3名大学毕业生,取$\alpha=0.05$,问该人看法是否成立?并给出检验的$p$值。 + }{ + 样本的分布为$x\sim b(15, p')$,检验的假设为 + $$ + H_0: p'\geqslant 0.3 \quad\mathrm{vs}\quad H_1: p'<0.3 + $$ + 检验的$p$值为$p=P(x\leqslant 3)$,其中$x\sim b(15,0.3)$,所以 + $$ + \bm{p}=\sum_{k=0}^{3} \mathrm{C}_{15}^{k} 0.3^{k} 0.7^{15-k} \approx \bm{0.2968679279} > 0.05 + $$ + \begin{center} + \includegraphics[width=0.3\linewidth]{imgs/2024-06-02-09-31-54.png} + \end{center} + 所以不能拒绝原假设,只能认为该人的看法\boldkai{成立}。 + } + \questionandanswerSolution[4]{ + 某大学随机调查120名男同学,发现有50人非常喜欢看武侠小说,而随机调查的85名女同学中有23人喜欢,用大样本检验方法在$\alpha=0.05$下确认男女同学在喜爱武侠小说方面有无显著差异?并给出检验的$p$值。 + }{ + 使用大样本$u$检验, + $$ + u=\frac{\frac{50}{120}-\frac{23}{85}}{\sqrt{\frac{50}{120}\left( 1-\frac{50}{120} \right) /120 + \frac{23}{85}\left( 1-\frac{23}{85} \right) /85}} \approx 2.21548089304598 + $$ + $$ + \bm{p}=2(1-\Phi(2.21548089304598)) \bm{\approx 0.026728} < 0.05 + $$ + 所以男女同学在喜爱武侠小说方面\boldkai{有显著差异}。 + } + \questionandanswerSolution[6]{ + 通常每平方米某种布上的疵点数服从泊松分布,现观测该种布100 $\mathrm{m}^{2}$,发现有126个疵点,在显著性水平为0.05下能否认为该种布每平方米上平均疵点数不超过1个?并给出检验的$p$值。 + }{ + 设总体为$X\sim \operatorname{Poi}(\lambda)$,使用大样本检验假设 + $$ + H_0: \lambda\leqslant 1 \quad\mathrm{vs}\quad H_1: \lambda>1 + $$ + 由于$EX=\operatorname{Var}X = \lambda$,所以$u = \frac{\sqrt{100} \left( \frac{126}{100}-1 \right) }{\sqrt{\frac{126}{100}}} \approx 2.31626409657434$,$p$值为 + $$ + \bm{p} = 1-\Phi\left( 2.31626409657434 \right) \bm{\approx 0.010272} < 0.05 + $$ + 所以拒绝原假设,因此该种布每平方米上平均疵点数\boldkai{超过1个}。 + } + \questionandanswer[9]{ + 有—批电子产品共50台,产销双方协商同意找出一个检验方案,使得当次品率$p\leqslant p_0=0.04$时拒绝的概率不超过0.05,而当$p>p_1=0.30$时,接受的概率不超过0.10,请你帮助找出适当的检验方案。 + }{} + \begin{solution} + + {\kaishu + 这里的次品率如何定义?是指这50台电子产品中次品的频率?还是所有生产的产品的频率?前者的总体是这50台电子产品,并且是不放回抽样,那么对应的是超几何分布。后者的总体是所有生产的产品,可以近似看作放回抽样,那么对应的是二项分布。由于生产的电子产品一般不止50台,所以这里认为是后者。 + + 设样本为$x\sim b(n, p)$,由于只有$50$台电子产品用于检验,所以$n\leqslant 50$,而$p$就是次品率。 + % 两次检验的假设为 + % $$ + % H_0:p\leqslant p_0=0.04 \quad\mathrm{vs}\quad H_1:p>0.04 + % $$ + % $$ + % H_0':p>p_1=0.30 \quad\mathrm{vs}\quad H_1':p\leqslant 0.30 + % $$ + 拒绝域为$\{ x>c \}$,$P(x, n, p)=\mathrm{C}_{n}^{x} p^{x}(1-p)^{n-x}$。所以需要求出$n$和$x$使得 + $$ + \sum_{x=c+1}^{n} \mathrm{C}_{n}^{x}0.04^{x}(1-0.04)^{n-x} \leqslant 0.05 + $$ + $$ + \sum_{x=0}^{c} \mathrm{C}_{n}^{x} 0.30^{x} (1-0.30)^{n-x} \leqslant 0.10 + $$ + 遍历$n$与$c$所有可能的取值($n = 1,2, \cdots ,50$, $c=0,1, \cdots ,n$)即可找到合适的$n$和$c$。 + \begin{minted}[breaklines=true, baselinestretch=1, frame=single, framesep=1em]{python} + from latex2sympy2 import latex2sympy + from sympy.abc import c, n + import pandas as pd + + verify1 = latex2sympy(r"\sum_{x=c+1}^{n} \binom{n}{x} 0.04^{x}(1-0.04)^{n-x} \leqslant 0.05") + verify2 = latex2sympy(r"\sum_{x=0}^{c} \binom{n}{x} 0.30^{x} (1-0.30)^{n-x} \leqslant 0.10") + + result = [] + for _n in range(1, 51): + line = [] + for _c in range(0, _n + 1): + line.append(verify1.subs({n:_n, c:_c}) and verify2.subs({n:_n, c:_c})) + for _c in range(_n + 1, 51): + line.append(False) + result.append(line) + + pd.DataFrame(result) + \end{minted} + + 观察结果即可发现在所有结果为 \mintinline{Python}{True} 的位置里,$n$最小取15,对应的$c$为2,也就是\boldkai{取出15个产品进行检测,次品数大于2时就拒绝,否则就接受}。 + } + + \end{solution} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/数理统计/作业/第四周作业.tex b/数理统计/作业/第四周作业.tex new file mode 100644 index 0000000..744dcc6 --- /dev/null +++ b/数理统计/作业/第四周作业.tex @@ -0,0 +1,183 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{5} +\setcounter{section}{4} +\section{充分统计量} +\begin{enumerate} + \questionandanswerProof[1]{ + 设$x_1,x_2, \cdots ,x_n$是来自几何分布 + $$ + P(X=x)=\theta(1-\theta)^{x},\quad x=0,1,2, \cdots + $$ + 的样本,证明 $\displaystyle T=\sum_{i=1}^{n} x_i$是充分统计量。 + }{ + $$ + p(x_1,x_2, \cdots ,x_n;\theta)=\prod_{i=1}^{n} \theta(1-\theta)^{x_i}=\theta^{n}(1-\theta)^{\sum_{i=1}^{n} x_i}=\theta^{n}(1-\theta)^{T} + $$ + 取$g(T,\theta)=\theta^{n}(1-\theta)^{T}, h(X)=1$, + 由因子分解定理可知 $\displaystyle T=\sum_{i=1}^{n} x_i$是$\theta$的充分统计量。 + } + \questionandanswer[3]{ + 设总体为如下离散分布: + \begin{tabular}{c|cccc} + $x$ & $a_1$ & $a_2$ & $\cdots$ & $a_k$ \\ + \hline + $p$ & $p_1$ & $p_2$ & $\cdots$ & $p_k$ \\ + \end{tabular}。 + $x_1,x_2, \cdots ,x_n$是来自该总体的样本, + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明次序统计量$(x_{(1)},x_{(2)}, \cdots , x_{(n)})$是充分统计量; + }{ + 设$T=(x_{(1)},x_{(2)}, \cdots , x_{(n)})$,$X$表示一次取样。则 + $$ + \begin{aligned} + P(X=(x_1,x_2, \cdots ,x_n)|T=t) &= \frac{P(X=(x_1,x_2, \cdots ,x_n), T=t)}{P(T=t)} \\ + &=\frac{\prod_{i=1}^{n} p_{i}}{\mathrm{P}_{n}^{n}\prod_{i=1}^{n} p_{i}}=\frac{1}{\mathrm{P}_{n}^{n}}=\frac{1}{n!} \\ + \end{aligned} + $$ + 可见与$T$无关,所以次序统计量$(x_{(1)},x_{(2)}, \cdots , x_{(n)})$是充分统计量。 + } + \questionandanswer[]{ + 以$n_j$表示$x_1,x_2, \cdots ,x_n$中等于$a_j$的个数,证明$(n_1,n_2, \cdots ,n_k)$是充分统计量。 + }{ + 设$T=(n_1,n_2, \cdots , n_k)$,$X$表示一次取样。则 + $$ + \begin{aligned} + P(X=(x_1,x_2, \cdots ,x_n)|T=t) &= \frac{P(X=(x_1,x_2, \cdots ,x_n), T=t)}{P(T=t)} \\ + &=\frac{\prod_{j=1}^{n} p_j}{\mathrm{P}_{n}^{n} \prod_{j=1}^{n} p_j^{n_j}} \\ + \end{aligned} + $$ + 应该与$T$无关,所以$(n_1,n_2, \cdots ,n_k)$是充分统计量。 + } + \end{enumerate} + \questionandanswerSolution[8]{ + 设$x_1,x_2, \cdots ,x_n$是来自拉普拉斯(Laplace)分布 + $$ + p(x;\theta)=\frac{1}{2\theta} e^{-\frac{\left\vert x \right\vert }{\theta}}, \theta>0 + $$ + 的样本,试给出一个充分统计量。 + }{ + 设$X$表示一次取样,则 + $$ + \begin{aligned} + P(X=(x_1,x_2, \cdots ,x_n);\theta)&=\prod_{i=1}^{n} p(x_i;\theta)=\prod_{i=1}^{n} \frac{1}{2\theta} e^{-\frac{\left\vert x \right\vert }{\theta}} = \left( \frac{1}{2\theta} \right) ^{n} e^{-\frac{1}{\theta}\sum_{i=1}^{n} \left\vert x_i \right\vert }\\ + % =\left( \frac{1}{2\theta} \right) ^{n} \left( e^{\sum_{i=1}^{n} \left\vert x_i \right\vert } \right) ^{-\frac{1}{\theta}} \\ + \end{aligned} + $$ + 令$T=\displaystyle \sum_{i=1}^{n} \left\vert x_i \right\vert $,则上式$=\displaystyle \left( \frac{1}{2\theta} \right) ^{n} \left( e^{-\frac{T}{\theta}} \right) $。则可以令$g(T,\theta)=\displaystyle \left( \frac{1}{2\theta} \right) ^{n} \left( e^{-\frac{T}{\theta}} \right)$, $h(X)=1$,由因子分解定理可知$T=\displaystyle \sum_{i=1}^{n} \left\vert x_i \right\vert $是$\theta$的充分统计量。 + } + \questionandanswer[10]{ + 设$x_1,x_2, \cdots ,x_n$是来自正态分布$N(\mu,\sigma^{2})$的样本。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 在$\mu$已知时给出$\sigma^{2}$的一个充分统计量。 + }{ + $$ + p(x_1,x_2, \cdots ,x_n; \sigma^{2})=(2\pi\sigma^{2})^{-\frac{n}{2}} \exp \left\{ -\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} (x_i-\mu)^{2}\right\} + $$ + 所以可以令$\displaystyle T=\sum_{i=1}^{n} (x_i-\mu)^{2}$,则$T$是$\sigma^{2}$的一个充分统计量。 + } + \questionandanswerSolution[]{ + 在$\sigma^{2}$已知时给出$\mu$的一个充分统计量。 + }{ + $$ + \begin{aligned} + p(x_1,x_2, \cdots ,x_n; \sigma^{2})&=(2\pi\sigma^{2})^{-\frac{n}{2}} \exp \left\{ -\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} (x_i-\mu)^{2}\right\} \\ + &=(2\pi \sigma^{2})^{-\frac{n}{2}} \exp \left\{ -\frac{n\mu^{2}}{2\sigma^{2}} \right\} \exp \left\{ -\frac{1}{2\sigma^{2}}\sum_{i=1}^{n} x_i^{2} \right\} \exp \left\{ \frac{\mu}{\sigma^{2}}\sum_{i=1}^{n} x_i \right\} \\ + \end{aligned} + $$ + % 理论上来说,对于正态分布的参数$\mu$,可以使用样本均值$\displaystyle \bar{x}= \sum_{i=1}^{n} x_i$来估计,但无法使用因子分解定理证明,那只能认为$\bar{x}$是$\mu$的一个充分统计量了。 + 令$\displaystyle T=\sum_{i=1}^{n} x_i$,则$\displaystyle g(\mu, T)=(2\pi \sigma^{2})^{-\frac{n}{2}} \exp \left\{ -\frac{n\mu^{2}}{2\sigma^{2}} \right\}\exp \left\{ \frac{\mu}{\sigma^{2}}T \right\}$,$\displaystyle h(\overrightarrow{x})=\exp \left\{ -\frac{1}{2\sigma^{2}}\sum_{i=1}^{n} x_i^{2} \right\} $。 + 所以$T$是$\mu$的一个充分统计量。 + + } + \end{enumerate} + \questionandanswerSolution[11]{ + 设$x_1,x_2, \cdots ,x_n$是来自均匀分布$U(\theta_1, \theta_2)$的样本,试给出一个充分统计量。 + }{ + $$ + p(x_1,x_2, \cdots ,x_n; \theta_1, \theta_2)= \prod_{i=1}^{n} \frac{1}{\theta_2-\theta_1} 1_{[\theta_1, \theta_2]}(x_i)=\left( \frac{1}{\theta_2-\theta_1} \right) ^{n} 1_{[\theta_1,\theta_2]}(x_{(1)}, x_{(n)}) + $$ + 所以$(x_{(1)}, x_{(n)})$是一个充分统计量。 + } + \questionandanswerSolution[12]{ + 设$x_1,x_2, \cdots ,x_n$是来自均匀分布$U(\theta,2\theta), \theta>0$的样本,试给出充分统计量。 + }{ + $$ + p(x_1,x_2, \cdots ,x_n; \theta)=\prod_{i=1}^{n} \frac{1}{\theta} 1_{[\theta,2\theta]}(x_i)=\frac{1}{\theta^{n}} 1_{[\theta, 2\theta]}(x_{(1)}, x_{(n)}) + $$ + 所以$(x_{(1)}, x_{(n)})$是一个充分统计量。 + } + \questionandanswerSolution[17]{ + 设$\displaystyle \binom{x_i}{y_i}, i=1,2, \cdots ,n$是来自正态分布族 + $$ + \left\{ N\left( \binom{\theta_1}{\theta_2}, \begin{pmatrix} + \sigma_1^{2} & \rho\sigma_1\sigma_2 \\ + \rho\sigma_1\sigma_2 & \sigma_2^{2} \\ + \end{pmatrix} \right) \ ;\ -\infty<\theta_1,\theta_2<\infty, \sigma_1,\sigma_2>0,\left\vert \rho \right\vert \leqslant 1 \right\} + $$ + 的一个二维样本,寻求$(\theta_1,\sigma_1,\theta_2,\sigma_2,\rho)$的充分统计量。 + }{ + $$ + \begin{aligned} + &p\left( \binom{x_i}{y_i};(\theta_1,\sigma_1,\theta_2,\sigma_2,\rho) \right) = \prod_{i=1}^{n} \frac{1}{2\pi\sigma_1\sigma_2\sqrt{1-\rho^{2}}} \exp \left\{ -\frac{1}{2(1-\rho^{2})}(a_i^{2}+b_i^{2}-2\rho a_i b_i) \right\} \\ + &=\left( \frac{1}{2\pi\sigma_1\sigma_2\sqrt{1-\rho^{2}}} \right) ^{n} \exp \left\{ -\frac{1}{2(1-\rho^{2})} \left( \sum_{i=1}^{n} a_i^{2}+\sum_{i=1}^{n} b_i^{2}-2\rho \sum_{i=1}^{n} a_i b_i \right)\right\} \\ + \end{aligned} + $$ + 其中 + $$ + \sum_{i=1}^{n} a_i^{2}=\sum_{i=1}^{n} \left( \frac{x_i-\theta_1}{\sigma_1} \right) ^{2}=\frac{1}{\sigma_1^{2}}\sum_{i=1}^{n} (x_i^{2}-2\theta_1 x_i+\theta_1^{2})=\frac{1}{\sigma_1^{2}}\sum_{i=1}^{n} x_i^{2}-\frac{2\theta_1}{\sigma_1^{2}}\sum_{i=1}^{n} x_i+ \frac{\theta_1^{2}}{\sigma_1^{2}} + $$ + $$ + \sum_{i=1}^{n} b_i^{2}=\sum_{i=1}^{n} \left( \frac{y_i-\theta_2}{\sigma_2} \right) ^{2}=\frac{1}{\sigma_2^{2}}\sum_{i=1}^{n} (y_i^{2}-2\theta_2 y_i+\theta_2^{2})=\frac{1}{\sigma_2^{2}}\sum_{i=1}^{n} y_i^{2}-\frac{2\theta_2}{\sigma_2^{2}}\sum_{i=1}^{n} y_i+\frac{\theta_2^{2}}{\sigma_2^{2}} + $$ + $$ + \begin{aligned} + &\sum_{i=1}^{n} a_i b_i =\sum_{i=1}^{n} \left( \frac{x_i-\theta_1}{\sigma_1} \right) \left( \frac{y_i-\theta_2}{\sigma_2} \right) =\frac{1}{\sigma_1\sigma_2}\sum_{i=1}^{n} (x_i y_i- \theta_1 y_i - \theta_2 x_i+\theta_1 \theta_2) \\ + &=\frac{1}{\sigma_1\sigma_2}\sum_{i=1}^{n} x_i y_i- \frac{\theta_1}{\sigma_1\sigma_2}\sum_{i=1}^{n} y_i - \frac{\theta_2}{\sigma_1\sigma_2}\sum_{i=1}^{n} x_i+\frac{n\theta_1\theta_2}{\sigma_1\sigma_2} \\ + \end{aligned} + $$ + 仔细观察即可发现 + $$ + \left( \sum_{i=1}^{n} x_i,\ \sum_{i=1}^{n} x_i^{2},\ \sum_{i=1}^{n} y_i,\ \sum_{i=1}^{n} y_i^{2},\ \sum_{i=1}^{n} x_i y_i \right) + $$ + 是此二维正态分布的充分统计量。 + } + \questionandanswerProof[19]{ + 设$x_1,x_2, \cdots ,x_n$是来自两参数指数分布 + $$ + p(x;\theta,\mu)=\frac{1}{\theta} e^{-\frac{x-\mu}{\theta}}, \quad x>\mu, \theta>0 + $$ + 的样本,证明$(\bar{x},x_{(1)})$是充分统计量。 + }{ + $$ + \begin{aligned} + &p(x_1,x_2, \cdots ,x_n; \theta,\mu)=\prod_{i=1}^{n} \frac{1}{\theta} e^{-\frac{x_i-\mu}{\theta}}=\frac{1}{\theta^{n}} \exp \left\{ -\frac{1}{\theta} \sum_{i=1}^{n} (x_i-\mu) \right\} \\ + =&\frac{1}{\theta^{n}} \exp \left\{ -\frac{1}{\theta}\sum_{i=1}^{n} x_i \right\} \exp \left\{ \frac{n\mu}{\theta} \right\} , \quad x_1,x_2, \cdots ,x_n > \mu \\ + \end{aligned} + $$ + 其中$x_1,x_2, \cdots ,x_n>\mu \iff x_{(1)} > \mu$,并且$\displaystyle \sum_{i=1}^{n} x_i=n \bar{x}$, + 所以$(\bar{x}, x_{(1)})$是充分统计量。 + } + \questionandanswerSolution[20]{ + 设随机变量$Y_i\sim N(\beta_0+\beta_1 x_i, \sigma^{2}), i=1,2, \cdots ,n$,诸$Y_i$独立,$x_1,x_2, \cdots ,x_n$是已知常数,证明$\displaystyle \left( \sum_{i=1}^{n} Y_i,\ \sum_{i=1}^{n} x_i Y_i,\ \sum_{i=1}^{n} Y_i^{2} \right) $是充分统计量。 + }{ + $$ + \begin{aligned} + &p(Y_1,Y_2, \cdots ,Y_n; \beta_0, \beta_1, \sigma^{2})=\prod_{i=1}^{n} \frac{1}{\sqrt{2\pi}\sigma} \exp \left\{ -\frac{1}{2}\left( \frac{Y_i-(\beta_0+\beta_1 x)}{\sigma} \right) ^{2} \right\} \\ + =&\left( \frac{1}{\sqrt{2\pi}\sigma} \right) ^{n} \exp \left\{ -\frac{1}{2\sigma^{2}} \sum_{i=1}^{n} \left( Y_i-\beta_0-\beta_1 x_i \right) ^{2} \right\} \\ + \end{aligned} + $$ + 其中 + $$ + \sum_{i=1}^{n} (Y_i-\beta_0-\beta_1 x_i)^{2}=\sum_{i=1}^{n} Y_i^{2}+n \beta_0^{2}+n\beta_1^{2}\sum_{i=1}^{n} x_i^{2} - 2\beta_0\sum_{i=1}^{n} Y_i -2\beta_1 \sum_{i=1}^{n} x_i Y_i + \beta_0\beta_1 \sum_{i=1}^{n} x_i + $$ + 其中$\beta_0,\beta_1, \sigma$为参数,$x_1,x_2, \cdots ,x_n$已知, + 所以$\displaystyle \left( \sum_{i=1}^{n} Y_i,\ \sum_{i=1}^{n} x_i Y_i,\ \sum_{i=1}^{n} Y_i^{2} \right) $是充分统计量。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/概率论/mypreamble.tex b/概率论/mypreamble.tex new file mode 100644 index 0000000..a008501 --- /dev/null +++ b/概率论/mypreamble.tex @@ -0,0 +1,55 @@ +\usepackage[margin=1in]{geometry} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +\usepackage{extarrows} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +% \usepackage{mathrsfs} % \mathscr +\usepackage{enumitem} +\usepackage{setspace} +\usepackage{color} +\usepackage{mylatex} +\usepackage{diagbox} +\usepackage{makecell} +\usepackage{mathtools} % \coloneqq 在好几个包里都出现了,不知道引入哪个最好 +% \usepackage{floatflt} +% \usepackage{wrapfig} +\usepackage{picinpar} +% \usepackage{cutwin} +% https://www.zhihu.com/question/26837705 试了好几个,发现能在列表和证明环境中完美使用的只有picinpar +\usepackage{amsrefs} +\usepackage{hyperref} +\usepackage{subfiles} + + +\setlist[1]{label=\arabic{enumi}., listparindent=\parindent} +\setlist[2]{label=(\arabic{enumii}), listparindent=\parindent} +\definecolor{shadecolor}{RGB}{204,232,207} + +\def\myitem#1#2{ + \item \textbf{#1} + \begin{enumerate} + #2 + \end{enumerate} +} + +\ExplSyntaxOn +\cs_set:Nn \rawquestionandanswer:Nnnn {% + \begin{shaded}% + \ifstrequal{#2}{-}{}{\format_item:Nn #1{#2}} #3% + \end{shaded}% + \begin{zhongwen}% + #4% + \end{zhongwen}% +} +\cs_set:Nn \format_item:Nn { + \IfBlankTF{#2}{ + \item + }{ + \item[#1{#2}] + } +} +\cs_set:Nn \simple_format:n {R#1.} +\newcommand{\questionandanswer}[3][]{% + \rawquestionandanswer:Nnnn \simple_format:n {#1}{#2}{#3} +} +\ExplSyntaxOff +% 成功实现了,而且下划线也没问题!!!似乎是函数式程序设计,或者装饰器模式? \ No newline at end of file diff --git a/概率论/全部作业.tex b/概率论/全部作业.tex new file mode 100644 index 0000000..a5d7bd3 --- /dev/null +++ b/概率论/全部作业.tex @@ -0,0 +1,18 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\title{\heiti\zihao{2} 《概率论》作业} +\author{\songti 岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2023年9月30日 —— 2024年1月4日} +\begin{document} +\renewcommand{\bar}{\xoverline} % 这一行在编译时可以取消注释,注意一定要放在\begin{document}下面才有用 +% \renewcommand{\overline}{\xoverline} % 这样会导致递归展开错误,暂时未解决 +\maketitle +\tableofcontents +\subfile{单元作业1} +\subfile{单元作业2} +\subfile{单元作业3} +\subfile{单元作业4} +\subfile{单元作业5} +\subfile{单元作业6} +\end{document} \ No newline at end of file diff --git a/概率论/单元作业1.tex b/概率论/单元作业1.tex new file mode 100644 index 0000000..f84fad1 --- /dev/null +++ b/概率论/单元作业1.tex @@ -0,0 +1,159 @@ +\documentclass[全部作业]{subfiles} + +\begin{document} +\chapter{单元作业1} +\begin{enumerate} + \item 证明$P(AB)\ge P(A)+P(B)-1$。 + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + &设\Omega 表示全集,则A \in \Omega, B \in \Omega \\ + &\therefore A\cup B\in \Omega \\ + &\therefore P(A\cup B)\le P(\Omega) \\ + &\therefore P(A)+P(B)-P(AB)\le 1 \\ + &\therefore P(AB)\ge P(A)+P(B)-1 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 一副标准扑克牌52张一张一张轮流分发给给4名游戏者,求每人恰好得到1张A的概率。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A表示事件“每人恰好得到一张A”,由盒子模型可知: \\ + &P(A) = \frac{\mathrm{P}_{4}^{4}}{4^{4}} = \frac{4!}{256} = \frac{3}{32} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$P(A)=0.7,P(A-B)=0.3$,求概率$P(\overline{AB})$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + P(\overline{AB})&=1-P(AB)=1-P(A-(A-B)) \\ + &=1-(P(A)-P(A-B))=1-(0.7-0.3)=0.6 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$P(A)=a,P(B)=b,P(A\cup B)=c$,求概率$P(\overline{\bar{A}\cup \bar{B}})$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + P(\overline{\bar{A}\cup \bar{B}})=P(A\cap B)=P(A)+P(B)-P(A\cup B)=a+b-c + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$A,B\in \mathcal{F}$,证明$P(A)=P(AB)+P(A \bar{B}), \quad P(A\triangle B)=P(A)+P(B)-2P(AB)$。 + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + &设\Omega 表示全集 \\ + P(A)&=P(A\cap \Omega)=P(A\cap (B\cup \bar{B})) \\ + &=P(A(B+\bar{B}))=P(AB+A \bar{B})=P(AB)+P(A \bar{B}) \\ + P(A \triangle B)&=P((A\backslash B)\cup (B\backslash A))=P((A-(AB))+(B-(AB))) \\ + &=P(A)-P(AB)+P(B)-P(AB)=P(A)+P(B)-2P(AB) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$\Omega =(-\infty, \infty), A=\{ x\in \Omega: 1\le x\le 5 \}, B=\{ x\in \Omega:35 \} \\ + &A\cup B=\{ x\in \Omega: 1\le x<7 \} \\ + &B \bar{C}=\{ x\in \Omega:32,A_n=\varnothing \\ + &\because \mathcal{F}是\Omega上的事件域,\forall n\geqslant 1,A_n\in \mathcal{F} \\ + &\therefore \bigcup_{n=1}^{\infty}A_n=A\cup B\in \mathcal{F} \\ + &又\because A,B\in \mathcal{F} \\ + &\therefore \bar{A},\bar{B}\in \mathcal{F} \\ + &同理,\bar{A}\cup \bar{B}\in \mathcal{F} \\ + &\therefore \overline{\bar{A}\cup \bar{B}}=AB\in \mathcal{F} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/概率论/单元作业2.tex b/概率论/单元作业2.tex new file mode 100644 index 0000000..be5105f --- /dev/null +++ b/概率论/单元作业2.tex @@ -0,0 +1,198 @@ +\documentclass[全部作业]{subfiles} + +\begin{document} +\renewcommand{\bar}{\xoverline} +\chapter{单元作业2} +\begin{enumerate} + \item 三人独立地对同一目标进行射击, 各人击中目标的概率分别是0.7, 0.8, 0.6, 求目标被击中的概率. + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &将三人击中目标的事件分别表示为A、B、C, \\ + &则P(A)=0.7, P(B)=0.8, P(C)=0.6, \\ + &P(目标被击中) = P(A\cup B\cup C) \\ + &\because 三人独立射击 \\ + &\therefore A、B、C相互独立 \\ + &\therefore \bar{A}、\bar{B}、\bar{C}相互独立 \\ + \end{aligned} + $$ $$ + \begin{aligned} + \therefore P(A\cup B\cup C)&=P(\overline{\bar{A} \bar{B} \bar{C}}) = 1 - P(\bar{A} \bar{B} \bar{C}) \\ + &=1 - P(\bar{A})P(\bar{B})P(\bar{C}) \\ + &=1 - (1-P(A))(1-P(B))(1-P(C)) \\ + &=1-(1-0.7)*(1-0.8)*(1-0.6) \\ + &= 0.976 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + + \item 制作某个产品有两个关键工序, 第一道和第二道工序的不合格品的概率分别为3\%和5\%, 假定两道工序互不影响, 试问该产品为不合格品的概率(答案保留至小数点后4位). + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &令A:第一道工序不合格,B:第二道工序不合格 \\ + &则P(A)=0.03,P(B)=0.05 \\ + &则P(该产品为不合格品)=P(A\cup B) \\ + &\because 两道工序互不影响 \\ + &\therefore A与B相互独立 \\ + &\therefore \bar{A}与\bar{B}相互独立 \\ + \end{aligned} + $$ + $$ + \begin{aligned} + \therefore P(A\cup B)&=P(\overline{\bar{A}\bar{B}})=1-P(\bar{A}\bar{B}) \\ + &=1-P(\bar{A})P(\bar{B}) \\ + &=1- (1-P(A))(1-P(B)) \\ + &=1-(1-0.03)(1-0.05) \\ + &= 0.0785 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \myitem{甲乙丙三个同学同时独立参加考试, 不及格的概率分别为: 0.2, 0.3, 0.4,}{ + \item 求恰有2位同学不及格的概率;\label{1} + \item 若已知3位同学中有2位不及格,求其中1位是同学乙的概率. \label{2} + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A、B、C分别表示事件甲不合格、乙不合格、丙不合格 \\ + &则P(A)=0.2, P(B)=0.3, P(C)=0.4 \\ + &P(\bar{A})=0.8, P(\bar{B})=0.7, P(\bar{C})=0.6 \\ + &且A、B、C相互独立 \\ + \end{aligned} + $$ + \ref{1} + $$ + \begin{aligned} + P(恰有2位同学不合格)&=P(AB \bar{C}+A \bar{B} C+\bar{A}BC) \\ + &=P(A)P(B)P(\bar{C})+P(A)P(\bar{B})P(C)+P(\bar{A})P(B)P(C) \\ + &=0.2\times 0.3\times 0.6+0.2\times 0.7\times 0.4+0.8\times 0.3\times 0.4 \\ + &= 0.188 \\ + \end{aligned} + $$ + \ref{2} + \setlength{\lineskip}{2.5pt} + \setlength{\lineskiplimit}{2.5pt} + $$ + \begin{aligned} + % \setstretch{1.5} + P(其中1位是同学乙)&=P(\left. B\ \right|\ 恰有2位同学不合格) \\ + &=\frac{P(B\cap 恰有2位同学不合格)}{P(恰有2位同学不合格)} \\ + &=\frac{P(AB \bar{C} + \bar{A} BC)}{P(AB \bar{C}+A \bar{B}C+\bar{A}BC)} \\ + &=\frac{P(A)P(B)P(\bar{C})+P(\bar{A})P(B)P(C)}{P(A)P(B)P(\bar{C})+P(A)P(\bar{B})P(C)+P(\bar{A})P(B)P(C)} \\ + &=\frac{0.2\times 0.3\times 0.6+0.8\times 0.3\times 0.4}{0.2\times 0.3\times 0.6+0.2\times 0.7\times 0.4+0.8\times 0.3\times 0.4} \\ + &= \frac{33}{47} \\ + &\approx 0.702127659574468 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + } + \item 甲袋中装有2个白球和4个黑球, 乙袋中装有3个白球和2个黑球, 现随机地从乙袋中取出一球放入甲袋, 然后从甲袋中随机取出一球, 试求从甲袋中取得的球是白球的概率. + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A表示从乙袋中取出的是白球,B表示从甲袋中取出的是白球 \\ + 则P(B) &= P(A)P(B|A)+P(\bar{A})P(B|\bar{A}) \\ + &=\frac{3}{3+2}\times \frac{2+1}{2+4+1}+\frac{2}{3+2}\times \frac{2}{2+4+1} \\ + &= \frac{13}{35} \\ + &\approx 0.371428571428571 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设n只罐子的每一只中装有4个白球和6个黑球, 另有一只罐子中装有5个白球和5个黑球.从这n+1个罐子中随机地选择一只罐子, 从中任取两个球, 结果发现两个都是黑球. 已知在此条件下, 有5个白球和3个黑球留在选出的罐子中的条件概率是1/7, 求n的值. + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A表示事件:选中的是第n+1个罐子 \\ + &设B表示事件:取出的两个都是黑球 \\ + &则事件:有5个白球和3个黑球留在选出的罐子中,\\ + &即选中的是第n+1个罐子,并且取出的两个都是黑球, 可表示为AB\\ + &\therefore P(A|B)=\frac{1}{7}, P(A)=\frac{1}{n+1} \\ + & P(B|A)=\frac{\mathrm{C}_{5}^{2}}{\mathrm{C}_{10}^{2}}=\frac{2}{9} \\ + \therefore P(B)&=P(A)P(B|A)+P(\bar{A})P(B|\bar{A})\\ + &=\frac{1}{n+1}\times \frac{\mathrm{C}_{5}^{2}}{\mathrm{C}_{10}^{2}}+\frac{n}{n+1}\times \frac{\mathrm{C}_{6}^{2}}{\mathrm{C}_{10}^{2}} \\ + &=\frac{3 n + 2}{9 (n + 1)} \\ + % &\because A与B相互独立 \\ + \therefore P(A|B)&=\frac{P(A)P(B|A)}{P(B)} \\ + &=\frac{\frac{1}{n+1}\times \frac{2}{9}}{\frac{3n+2}{9(n+1)}} \\ + &= \frac{2}{3 n + 2} = \frac{1}{7} \\ + &\therefore n=4 \\ + % solve(latex2sympy(r"\frac{2}{3 n + 2} = \frac{1}{7}")) = {n: 4} = [] + % solve(latex2sympy(r"\frac{1}{2} = n")) + % var["n"] + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设有三张卡片, 第一张两面皆为红色, 第二张两面皆为黄色, 第三张一面是红色一面是黄色. 随机地选择一张卡片并随机地选择其中一面. 如果已知此面是红色, 求另一面也是红色的概率. + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A、B、C分别表示选到了第一、二、三张卡片,设R表示选择的一面是红色。 \\ + &则P(A) = P(B) = P(C) = \frac{1}{3} \\ + &P(R|A)=1, P(R|B)=0, P(R|C)=\frac{1}{2} \\ + \end{aligned} + $$ + $$ + \begin{aligned} + 则P(另一面也是红色) &= P(A|R) \\ + &=\frac{P(A)P(R|A)}{P(A)P(R|A)+P(B)P(R|B)+P(C)P(R|C)} \\ + &=\frac{\frac{1}{3}\times 1}{\frac{1}{3}\times 1+\frac{1}{3}\times 0+\frac{1}{3}\times \frac{1}{2}} \\ + &= \frac{2}{3} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 从装有r个红球和w个白球的盒子中不返回的取出两只, 求事件“第一只为红球, 第二只为白球”的概率. + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &设A表示取出的两只球一红一白 \\ + &则P(第一只为红球,第二只为白球) = \frac{P(A)}{\mathrm{P}_{2}^{2}} \\ + &=\frac{\frac{\mathrm{C}_{r}^{1}\mathrm{C}_{w}^{1}}{\mathrm{C}_{r+w}^{2}}}{\mathrm{P}_{2}^{2}} \\ + &=\frac{\frac{\binom{r}{1}\binom{w}{1}}{\binom{r+w}{2}}}{2!} \\ + &= \frac{r w}{(r + w) (r + w - 1)} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 已知$P(A)=\frac{1}{4}, P(B|A)=\frac{1}{3},P(A|B)=\frac{1}{2}$,求概率$P(A\cup B)$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &P(AB) = P(B|A)P(A) = \frac{1}{3}\times \frac{1}{4} = \frac{1}{12} \\ + &P(B)=\frac{P(AB)}{P(A|B)}=\frac{\frac{1}{12}}{\frac{1}{2}} = \frac{1}{6} \\ + &\therefore P(A\cup B)=P(A)+P(B)-P(AB) \\ + &=\frac{1}{4}+\frac{1}{6} - \frac{1}{12} \\ + &= \frac{1}{3} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$P(A)=P(B)=\frac{1}{3},P(A|B)=\frac{1}{6}$,求概率$P(\bar{A}|\bar{B})$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &P(AB)=P(B)P(A|B)=\frac{1}{3}\times \frac{1}{6} = \frac{1}{18} \\ + &P(\bar{A} \bar{B})=P(\overline{A\cup B}) = 1 - P(A\cup B)=1 - (P(A)+P(B)-P(AB))\\ + &=1 - (\frac{1}{3}+\frac{1}{3}-\frac{1}{18}) = \frac{7}{18}\\ + &P(\bar{B}) = 1-P(B) = 1 - \frac{1}{3} = \frac{2}{3} \\ + &\therefore P(\bar{A}|\bar{B})=\frac{P(\bar{A} \bar{B})}{P(\bar{B})}=\frac{\frac{7}{18}}{\frac{2}{3}} = \frac{7}{12} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/概率论/单元作业3.tex b/概率论/单元作业3.tex new file mode 100644 index 0000000..c3f9092 --- /dev/null +++ b/概率论/单元作业3.tex @@ -0,0 +1,168 @@ +\documentclass[全部作业]{subfiles} + +\begin{document} +\chapter{单元作业3} +\begin{enumerate} + \item 试用随机变量$X$的分布函数$F_{X}(x)$表示随机变量$-\min(X,0)$的分布函数。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + % F_{-\min(X,0)}(x)=-\min(F_{X}(x),0) + F_{-\min(X,0)}(x) & = P(-\min(X,0)\leqslant x) \\ + & = P(\min(X,0)\geqslant -x) \\ + & = P(X\geqslant -x, 0\geqslant -x) \\ + & = P(X\geqslant -x, x\geqslant 0) \\ + &=\begin{cases} P(X\geqslant -x), & x\geqslant 0 \\ 0, & x<0 \end{cases} \\ + &=\begin{cases} 1-P(X<-x), & x\geqslant 0 \\ 0, & x<0 \end{cases} \\ + &=\begin{cases} 1-F_{X}(-x-0), & x\geqslant 0 \\ 0, & x<0 \end{cases} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设随机变量$X$等可能地取值0和1, 求$X$的分布函数。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + F_{X}(x)=\begin{cases} 0, & x<0 \\ \frac{1}{2}, & 0\leqslant x<1 \\ 1, & x\geqslant 1 \end{cases} + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设离散型随机变量X的分布列为$\displaystyle P(X=k)=\frac{c}{2^{k}}, \quad k=0, 1, 2, \ldots $,求常数$c$的值。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\because \sum_{k = 0}^{\infty}\frac{c}{2^{k}}=1 \\ + &\therefore c \sum_{k=0}^{\infty}\frac{1}{2^{k}}=c \frac{1}{1-\frac{1}{2}}=2c=1 \\ + &\therefore c=\frac{1}{2} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设随机变量$X$的概率密度函数为$p(x)=\begin{cases} ce^{-\sqrt{x}}, & x>0 \\ 0, & x\leqslant 0 \end{cases}$,求常数$c$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\because \int_{-\infty}^{+\infty} p(x) \mathrm{d}x=1 \\ + &\therefore \int_{0}^{+\infty} ce^{-\sqrt{x}} \mathrm{d}x=c \int_{0}^{+\infty} e^{-\sqrt{x}} \mathrm{d}x = 2c=1 \\ + &\therefore c=\frac{1}{2} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 设$X\sim N(10,4)$,求概率$P(61)=2P(X>2)$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + 由P(X>1)&=2P(X>2)可知: \\ + \int_{1}^{+\infty} \lambda e^{-\lambda x} \mathrm{d}x&=2\int_{2}^{+\infty} \lambda e^{-\lambda x} \mathrm{d}x \\ + \left. - e^{- \lambda x} \right|_{1}^{+\infty}&=-2\left. e^{- \lambda x} \right|_{2}^{+\infty} \\ + e^{-\lambda }&=2e^{-2\lambda } \\ + 2(e^{-\lambda })^{2}-e^{-\lambda }&=0 \\ + e^{-\lambda }(2e^{-\lambda }-1)&=0 \\ + \end{aligned} \hspace{5em} + \begin{aligned} + &\because e^{-\lambda }\neq 0 \\ + &\therefore 2e^{-\lambda }-1=0 \\ + &\therefore e^{-\lambda }=\frac{1}{2} \\ + &\therefore \lambda =-\ln (\frac{1}{2})=\ln 2 \\ + % &\left. \frac{(- \lambda x - 1) e^{- \lambda x}}{\lambda} \right|_{1}^{+\infty} =2\left. \frac{(- \lambda x - 1) e^{- \lambda x}}{\lambda} \right|_{2}^{+\infty} \\ + % &0-\frac{(-\lambda -1)e^{-\lambda }}{\lambda }=2 (0-\frac{(-2\lambda -1)e^{-2\lambda }}{\lambda }) \\ + % &(\lambda +1)e^{-\lambda }=2(2\lambda +1)e^{-2\lambda } \\ + % &\lambda e^{-\lambda }+e^{-\lambda }=4\lambda e^{-2\lambda }+2e^{-2\lambda } \\ + % &使用fx-991 \mathrm{CN}\ \mathrm{X}解得\lambda =2857100 \\ + % solve(latex2sympy(r"0-\frac{(-\lambda -1)e^{-\lambda }}{\lambda }=2 (0-\frac{(-2\lambda -1)e^{-2\lambda }}{\lambda })")) + % solve(0 - (-y - 1)*exp(-y)/y - 2*(0 - (-1*2*y - 1)*exp(-1*2*y)/y)) + \end{aligned} + $$ + \begin{center} + % \includegraphics[width=0.5\linewidth]{imgs/2023-11-08-13-38-39.png} + \end{center} + \end{zhongwen} + \end{proof} + \item 设随机变量$X$服从几何分布$\operatorname{Ge}(p)$,求$X$的数学期望$EX$。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\because 01\\ 1, & 0\leqslant x\leqslant 1 \end{cases} + $$ + $$ + \begin{aligned} + \operatorname{Var}X^{3} & = E(X^{3})^{2}-(EX^{3})^{2} \\ + &=\int_{-\infty}^{+\infty} x^{6}p(x) \mathrm{d}x-\left( \int_{-\infty}^{+\infty} x^{3}p(x) \mathrm{d}x \right) ^{2} \\ + &=\int_{0}^{1} x^{6} \mathrm{d}x-\left( \int_{0}^{1} x^{3} \mathrm{d}x \right) ^{2} \\ + & = \frac{9}{112} \\ + & \approx 0.0803571428571429 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/概率论/单元作业4.tex b/概率论/单元作业4.tex new file mode 100644 index 0000000..80bdb4f --- /dev/null +++ b/概率论/单元作业4.tex @@ -0,0 +1,228 @@ +\documentclass[全部作业]{subfiles} + +\begin{document} + \chapter{单元作业4} + \begin{enumerate} + \item 若二维离散型随机变量$(X,Y)$有联合分布列如下: + + \begin{center} + % \renewcommand\arraystretch{1.5} + \begin{tabular}{c|ccc} + % \hline + \diagbox{$X$}{$Y$} & $0$ & $1$ & $2$ \\ + \hline + $0$ & $\frac{1}{2}$ & $\frac{1}{8}$ & $\frac{1}{4}$ \\ + % \hline + $1$ & $\frac{1}{16}$ & $\frac{1}{16}$ & $0$ \\ + % \hline + \end{tabular} + \end{center} + 求$X$与$Y$的边际分布列。 + + \begin{proof}[解] + \begin{zhongwen} + + $X$和$Y$的边际分布列分别为 + + \begin{center} + \renewcommand\arraystretch{1.5} + \begin{tabular}{c|cc} + $X$ & $0$ & $1$ \\ + \hline + $P$ & \makecell{$\dfrac{7}{8}$} & $\dfrac{1}{8}$ \\ + \end{tabular} \qquad + \begin{tabular}{c|ccc} + $Y$ & $0$ & $1$ & $2$ \\ + \hline + $P$ & $\dfrac{9}{16}$ & $\dfrac{3}{16}$ & $\dfrac{1}{4}$ \\ + \end{tabular} + \end{center} + \end{zhongwen} + \end{proof} + + \item 设随机变量$(X,Y)$的概率密度函数为 + $$ + p(x,y)=\begin{cases} + 3x,\quad & \text{若}01 \\ + \end{cases}\\ + &=\begin{cases} + 3x^{2},\quad & 0\leqslant x\leqslant 1 \\ + 0,\quad & x<0 或x>1 \\ + \end{cases} + \end{aligned} + $$ + + $$ + \begin{aligned} + p_{Y}(y)&=\int_{-\infty}^{+\infty} p(x,y) \mathrm{d}x=\begin{cases} + \int_{y}^{1} 3x \mathrm{d}x, \quad & 0\leqslant y\leqslant 1 \\ + 0,\quad & x<0 或 x>1 \\ + \end{cases}\\ + &=\begin{cases} + \frac{3}{2}-\frac{3}{2}y^{2},\quad & 0\leqslant y\leqslant 1 \\ + 0,\quad & y<0 或 y>1 \\ + \end{cases} + \end{aligned} + $$ + \end{window} + + \noindent$p(1,1)=3,p_{X}(1)=3,p_{Y}(1)=0$,于是$p(1,1)\neq p_{X}(1)\cdot p_{Y}(1)$,所以$X$和$Y$互相不独立。 + + \end{zhongwen} + \end{proof} + + \item 设随机变量$X$与$Y$相互独立,且$X$服从均匀分布$U(0,1)$,$Y$服从指数分布$\operatorname{Exp}(1)$。求 + + \begin{enumerate} + \item $(X,Y)$的联合概率密度函数$p(x,y)$; + \begin{proof}[解] + \begin{zhongwen} + + $$ + p_{X}(x)=\begin{cases} + 1,\quad & x\in [0,1] \\ + 0,\quad & x<0 或 x>1 \\ + \end{cases}\quad p_{Y}(y)=\begin{cases} + e^{-y},\quad & y\geqslant 0 \\ + 0,\quad & y< 0 \\ + \end{cases} + $$ + + $$ + p(x,y)=\begin{cases} + e^{-y},\quad & x\in [0,1], y\geqslant 0 \\ + 0,\quad & 其他 \\ + \end{cases} + $$ + \end{zhongwen} + \end{proof} + \item 概率$P(X+Y\leqslant 1)$; + + \begin{proof}[解] + \begin{zhongwen} + + 令$Z=X+Y$,则随机变量$Z$的概率密度函数为 + $$ + p_{Z}(z)=\int_{-\infty}^{+\infty} p_{X}(x)p_{Y}(z-x) \mathrm{d}x=\begin{cases} + \int_{0}^{1} e^{x-z} \mathrm{d}x ,\quad & z>1\\ + \int_{0}^{z} e^{x-z} \mathrm{d}x,\quad & 0\leqslant z\leqslant 1 \\ + 0,\quad & z<0 \\ + \end{cases}=\begin{cases} + e^{1-z}-e^{-z},\quad & z>1 \\ + 1-e^{-z},\quad & 0\leqslant z\leqslant 1 \\ + 0,\quad & z<0 \\ + \end{cases} + $$ + 所以 + $$ + P(X+Y\leqslant 1)=\int_{-\infty}^{1} p_{Z}(z) \mathrm{d}z=\int_{0}^{1} (1-e^{-z}) \mathrm{d}z=1+(\frac{1}{e}-1)=\frac{1}{e} + $$ + \end{zhongwen} + \end{proof} + \item 概率$P(X\leqslant Y)$。 + + \begin{proof}[解] + \begin{zhongwen} + 令随机变量$Z=X-Y$,则$Z$的概率密度函数为 + $$ + p_{Z}(z)=\int_{-\infty}^{+\infty} p(x,x-z) \mathrm{d}x=\begin{cases} + 0,\quad & z>1 \\ + \int_{z}^{1} e^{z-x} \mathrm{d}x,\quad & 0\leqslant z\leqslant 1 \\ + \int_{0}^{1} e^{z-x} \mathrm{d}x,\quad & z<0 \\ + \end{cases}=\begin{cases} + 0,\quad & z>1 \\ + 1-e^{z-1},\quad & 0\leqslant z\leqslant 1 \\ + e^{z}-e^{z-1},\quad & z<0 \\ + \end{cases} + $$ + 所以 + $$ + P(X\leqslant Y)=P(X-Y\leqslant 0)=\int_{-\infty}^{0} (e^{z}-e^{z-1}) \mathrm{d}z=1-\frac{1}{e} + $$ + \end{zhongwen} + \end{proof} + \end{enumerate} + + \item 设随机变量$(X,Y)$的概率密度函数为 + $$ + p(x,y)=\begin{cases} + Ae^{-(3x+2y)},\quad & x>0,y>0; \\ + 0,\quad & \text{otherwise}. \\ + \end{cases} + $$ + 求: + \begin{enumerate} + \item 常数$A$的值; + + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\int_{-\infty}^{+\infty} \int_{-\infty}^{+\infty} p(x,y) \mathrm{d}x \mathrm{d}y=\int_{0}^{+\infty} \int_{0}^{+\infty} Ae^{-(3x+2y)} \mathrm{d}x \mathrm{d}y=\int_{0}^{+\infty} \left. -\frac{1}{3}Ae^{-(3x+2y)} \right|_{0}^{+\infty} \mathrm{d}y\\ + =&\int_{0}^{+\infty} \frac{1}{3}Ae^{-2y} \mathrm{d}y=\left. -\frac{1}{6}Ae^{-2y} \right|_{0}^{+\infty}=\frac{1}{6}A=1 + \end{aligned} + $$ + 所以常数$A$的值为$6$。 + \end{zhongwen} + \end{proof} + \item 分布函数$F(x,y)$; + + \begin{proof}[解] + \begin{zhongwen} + + 由题意可知,当$x\leqslant 0$ 或$y\leqslant 0$时,$F(x,y)=0$。 + + 当$x>0,y>0$时,$ + \displaystyle F(x,y) + =\int_{0}^{y} \int_{0}^{x} 6e^{-(3u+2v)} \mathrm{d}u \mathrm{d}v + =\int_{0}^{y} \left. -2e^{-(3u+2v)} \right|_{0}^{x} \mathrm{d}v + =\int_{0}^{y} \left(2e^{-2v}-2e^{-(3x+2v)}\right) \mathrm{d}v + =\left. -e^{-2v} \right|_{0}^{y}+\left. e^{-(3x+2v)} \right|_{0}^{y} + =-e^{-2y}+1+e^{-(3x+2y)}-e^{-3x} + =e^{-(3x+2y)}-e^{-3x}-e^{-2y}+1 + $ + + 所以 + $$ + \begin{aligned} + F(x,y)=\begin{cases} + e^{-(3x+2y)}-e^{-3x}-e^{-2y}+1,\quad & x>0,y>0 \\ + 0,\quad & \text{otherwise} \\ + \end{cases} + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 概率$P(-20$,求在$Y=y$时$X$的条件概率密度函数$p_{X|Y}(x|y)$,条件数学期望$E(X|Y=y)$。进一步地,利用重期望公式求$EX$。}{ + \begin{proof}[解] + + 先计算边际概率密度函数 + $$ + p_{Y}(y)=\int_{-\infty}^{+\infty} p(x,y) \mathrm{d}x=\begin{cases} + \int_{0}^{y} e^{-y} \mathrm{d}x,\quad & y>0 \\ + 0,\quad & y\leqslant 0 \\ + \end{cases}=\begin{cases} + ye^{-y},\quad & y>0 \\ + 0,\quad & y\leqslant 0 \\ + \end{cases} + $$ + 之后计算条件概率密度函数 + $$ + p_{X|Y}(x|y)=\frac{p(x,y)}{p_{Y}(y)}=\begin{cases} + \frac{1}{y},\quad & 00,x\leqslant 0 \\ + \end{cases} + $$ + 根据数学期望的定义, + $$ + E(X|Y=y)=\int_{-\infty}^{+\infty} x p_{X|Y}(x|y) \mathrm{d}x = \int_{0}^{y} x\cdot \frac{1}{y} \mathrm{d}x = \frac{y}{2} + $$ + 再利用重期望公式, + $$ + EX=\int_{-\infty}^{+\infty} E(X|Y=y)p_{Y}(y) \mathrm{d}y=\int_{0}^{+\infty} \frac{y}{2}\cdot ye^{-y} \mathrm{d}y = 1 + $$ + + \end{proof} + } + \questionandanswer[]{设$X$服从指数分布$\operatorname{Exp}(\lambda )$,求$Y=[X]$的分布。(这里符号$[a]$表示不超过$a$的最大整数。}{ + \begin{proof}[解] + + 由于$Y=[X]$是离散型分布,所以求出$Y$的分布列即可 + $$ + p_i=\int_{i}^{i+1} \lambda e^{-\lambda x} \mathrm{d}x = (e^{\lambda} - 1) e^{- \lambda (i + 1)} + $$ + + \end{proof} + } + \questionandanswer[]{设随机变量$X$服从标准正态分布$N(0,1)$, $a>0$,记$Y=\begin{cases} + X,\quad & \left\vert X \right\vert 0) + P(X>0,Y\leqslant 0) \\ + &\xlongequal{X\textit{与}Y\textit{}独立}P(X\leqslant 0)P(Y>0)+P(X>0)P(Y\leqslant 0) \\ + &\xlongequal{X\sim N(0,1),Y\sim N(0,1)}\frac{1}{2}\times \frac{1}{2}+\frac{1}{2}\times \frac{1}{2} \\ + &=\frac{1}{2} \\ + \end{aligned} + $$ + + \end{proof} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/概率论/单元作业6.tex b/概率论/单元作业6.tex new file mode 100644 index 0000000..fb176e0 --- /dev/null +++ b/概率论/单元作业6.tex @@ -0,0 +1,156 @@ +\documentclass[全部作业]{subfiles} +\setlength{\textheight}{210em} +\setlength{\paperheight}{210em} + +\begin{document} + \chapter{单元作业6} + \begin{enumerate} + \item 证明随机变量$X$的特征函数是实值函数当且仅当$X$与$-X$同分布。 + + \begin{proof} + \begin{zhongwen} + + 设$X$的特征函数为$f_{X}(t)$,则 + $$ + \begin{aligned} + X的特征函数是实值函数 \iff& f_{X}(t)=\overline{f_{X}(t)} \\ + \iff& f_{X}(t)=f_{X}(-t) \\ + \iff& Ee^{itX}=Ee^{i(-t)X} \\ + \iff& Ee^{itX}=Ee^{it(-X)} \\ + \iff& f_{X}(t)=f_{-X}(t) \\ + \iff& X与-X同分布 \\ + \end{aligned} + $$ + + \end{zhongwen} + \end{proof} + + \item 设随机变量$X$的特征函数为$f(t)=\left( \frac{2-it}{2} \right) ^{-2}$,求$EX$和$\operatorname{Var}X$。 + + \begin{proof}[解] + \begin{zhongwen} + + % 根据唯一性定理的推论,可知$X$的概率密度函数为 + % $$ + % p(x)=\frac{1}{2\pi }\int_{-\infty}^{+\infty} e^{-itx}\left( \frac{2-it}{2} \right) ^{-2} \mathrm{d}t + % $$ + 根据特征函数的性质,可知 + $$ + iEX = \left. f'(t) \right|_{t=0}=\left. \left( -\frac{i}{2}\cdot (-2)\left( \frac{2-it}{2} \right) ^{-3} \right) \right|_{t=0}=i\cdot 1^{-3}=i + $$ + $$ + -EX^{2}=i^{2}EX^{2}=\left. f''(t) \right|_{t=0}=\left.\left( i\cdot \left( -\frac{i}{2} \right) \cdot (-3)\left( \frac{2-it}{2} \right) ^{-4} \right) \right|_{t=0}=\left( -\frac{3}{2} \right) \cdot 1^{-4}=-\frac{3}{2} + $$ + 所以有 + $$ + EX=1, \qquad EX^{2}=\frac{3}{2}, \qquad \operatorname{Var}X=EX^{2}-(EX)^{2}=\frac{3}{2}-1^{2}=\frac{1}{2} + $$ + + \end{zhongwen} + \end{proof} + + \item 设$X_i$独立同分布,且$X_i\sim \operatorname{Exp}(\lambda ),i=1,2, \ldots ,n$。试用特征函数的方法证明: + $$ + Y_n=\sum_{i=1}^{n}X_i\sim \operatorname{Ga}(n,\lambda ) + $$ + \begin{proof} + \begin{zhongwen} + + 根据题意可知$X_i$的概率密度函数为$p(x)=\begin{cases} + \lambda e^{-\lambda x},\quad & x>0 \\ + 0,\quad & x\leqslant 0 \\ + \end{cases}$。根据特征函数的定义,计算$X_i$的特征函数$f(t)$: + $$ + \begin{aligned} + f(t)&=Ee^{itX_{i}}=\int_{-\infty}^{+\infty} e^{itx}p(x) \mathrm{d}x=\int_{0}^{+\infty} e^{itx}\lambda e^{-\lambda x} \mathrm{d}x=\frac{\lambda}{it-\lambda }\int_{0}^{+\infty} e^{(it-\lambda )x} \mathrm{d}(it-\lambda )x \\ + &=\frac{\lambda}{it-\lambda }\cdot \left. e^{(it-\lambda )x} \right|_{0}^{+\infty}=\frac{\lambda }{it-\lambda } \cdot \left( \lim_{x \to +\infty}e^{itx-\lambda x}-1 \right)=\frac{\lambda}{it-\lambda }\cdot \left( \lim_{x \to +\infty}e^{-\lambda x}e^{itx} -1 \right) \\ + \end{aligned} + $$ + 对于$\displaystyle \lim_{x \to +\infty}e^{-\lambda x}e^{itx}$,设$a=e^{-\lambda x}e^{itx}$,将其看作复数的模长辐角表示法,则$a$的模长为$e^{-\lambda x}$,辐角为$tx$。由于$\lambda >0$,所以当$x \to +\infty$时,$a$的模长$e^{-\lambda x} \to 0$(辐角$tx \to +\infty$,但不重要),因此$\displaystyle \lim_{x \to +\infty}e^{-\lambda x}e^{itx}=\lim_{x \to +\infty}a=0$。 + + 于是$\displaystyle f(t)=\frac{\lambda}{it-\lambda }\cdot (0-1)=\frac{\lambda }{\lambda -it}$。 + + 由于$X_i$相互独立,所以$Y_n$的特征函数为: + $$ + g(t)=\left[ f(t) \right] ^{n}=\left( \frac{\lambda }{\lambda -it} \right) ^{n} + $$ + + 再计算$Y\sim \operatorname{Ga}(n,\lambda )$的特征函数: + $$ + \begin{aligned} + h(t)&=Ee^{itY}=\int_{-\infty}^{+\infty} e^{itx}p(x) \mathrm{d}x=\int_{0}^{+\infty} e^{itx} \frac{\lambda ^{n}}{\Gamma (n)}x^{n-1}e^{-\lambda x} \mathrm{d}x \\ + &=\frac{\lambda ^{n}}{(\lambda -it)^{n}}\int_{0}^{+\infty} \frac{(\lambda -it)^{n}}{\Gamma (n)}x^{n-1}e^{(it-\lambda )x} \mathrm{d}x \\ + \end{aligned} + $$ + 注意到$\displaystyle \frac{(\lambda -it)^{n}}{\Gamma (n)}x^{n-1}e^{(it-\lambda )}$(零延拓后)为$\operatorname{Ga}(n, \lambda -it)$的概率密度函数,根据分布函数的正则性,$\displaystyle \int_{0}^{+\infty} \frac{(\lambda -it)^{n}}{\Gamma (n)}x^{n-1}e^{(it-\lambda )} \mathrm{d}x=1$,所以 + $$ + h(t)=\frac{\lambda ^{n}}{(\lambda -it)^{n}}=\left( \frac{\lambda }{\lambda -it} \right) ^{n}=g(t) + $$ + 根据特征函数的唯一性,$Y_n$与$Y$同分布,即 + $$ + Y_n=\sum_{i=1}^{n}X_i\sim \operatorname{Ga}(n,\lambda ) + $$ + + \end{zhongwen} + \end{proof} + + \item 设$X_n\xrightarrow{P}X,X_n\xrightarrow{P}Y$。证明$P(X=Y)=1$。 + + \begin{proof} + \begin{zhongwen} + + 根据依概率收敛的运算性质,有 + $$ + 0=X_n-X_n\xrightarrow{P}X-Y + $$ + 即对任意的$\varepsilon>0$,有 + $$ + \lim_{n \to \infty} P(\left\vert 0-(X-Y) \right\vert \geqslant \varepsilon)=\lim_{n \to \infty}P(\left\vert X-Y \right\vert \geqslant \varepsilon)=P(\left\vert X-Y \right\vert \geqslant \varepsilon)=0 + $$ + 令$\varepsilon \to 0$,则根据概率的下连续性,可得 + $$ + P(\left\vert X-Y \right\vert >0)=0 + $$ + 由于$\left\vert X-Y \right\vert \geqslant 0$,所以 + $$ + P(\left\vert X-Y \right\vert =0)=1-P(\left\vert X-Y \right\vert >0)=1 + $$ + 即$P(X=Y)=1$。 + + \end{zhongwen} + \end{proof} + + \item 证明$\displaystyle \lim_{n \to \infty}E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) =0$当且仅当$X_n\xrightarrow{P}0$。 + + \begin{proof} + \begin{zhongwen} + + 对任意的$\varepsilon>0$,$1=1_{\{ \left\vert X_n \right\vert \leqslant \varepsilon \}}+1_{\{ \left\vert X_n \right\vert >\varepsilon \}}$。所以有如下不等式: + + $$ + \begin{aligned} + \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert }&=\frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert }1_{\{ \left\vert X_n \right\vert \leqslant \varepsilon \}}+\frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert }1_{\{ \left\vert X_n \right\vert >\varepsilon \}} \\ + &\leqslant \left\vert X_n \right\vert 1_{\{ \left\vert X_n \right\vert \leqslant \varepsilon \}}+1_{\{ \left\vert X_n \right\vert >\varepsilon \}}\leqslant \varepsilon+1_{\{ \left\vert X_n \right\vert >\varepsilon \}} \\ + \end{aligned} + $$ + 等式两边同时取期望,则 + $$ + E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) \leqslant E(\varepsilon+1_{\{ \left\vert X_n \right\vert >\varepsilon \}})=\varepsilon+E(1_{\{ \left\vert X_n \right\vert >\varepsilon \}}) + $$ + 若$X_n\xrightarrow{P}0$,则$\displaystyle \lim_{n \to \infty}P(\left\vert X_n \right\vert >\varepsilon)=0$,所以$\displaystyle \lim_{n \to \infty}E(1_{\{ \left\vert X_n \right\vert >\varepsilon \}})=0$。 + 于是上述不等式两边同时取$n \to 0$时的极限可得 + $$ + \lim_{n \to \infty}E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) \leqslant \varepsilon + $$ + 所以$\displaystyle \lim_{n \to \infty}E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) =0$。 + + 若$\displaystyle \lim_{n \to \infty}E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) =0$,这里使用和书上不同的方法。根据马尔可夫不等式的一般形式,有 + $$ + P(\left\vert X_n \right\vert >\varepsilon)\leqslant \frac{E\left( \frac{\left\vert X_n \right\vert }{1+\left\vert X_n \right\vert } \right) }{\frac{\varepsilon}{1+\varepsilon}} + $$ + 不等式两边同时取$n \to 0$时的极限可得$\displaystyle \lim_{n \to \infty}P(\left\vert X_n \right\vert >\varepsilon)=0$,即$X_n\xrightarrow{P}0$。 + + \end{zhongwen} + \end{proof} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/深度学习/实验/Retrieval_task/实验报告.tex b/深度学习/实验/Retrieval_task/实验报告.tex new file mode 100644 index 0000000..24a25a8 --- /dev/null +++ b/深度学习/实验/Retrieval_task/实验报告.tex @@ -0,0 +1,110 @@ +\documentclass[a4paper]{ctexart} +\usepackage[margin=1in]{geometry} +\usepackage{booktabs} +\usepackage{hyperref} +\usepackage{graphicx} +\usepackage[numbers]{gbt7714} +\RequirePackage[outputdir=./latex-output]{minted} +\setlength{\belowcaptionskip}{1em} + +\title{《深度学习》实验报告} +\author{姓名:岳锦鹏\qquad 学号:10213903403\qquad 专业:统计学-计算机\qquad 学院:统计学院} +\date{2024年6月8日} +\ctexset { + section = { + name = {,、}, + format += \raggedright, + number = \chinese{section}, + }, + subsection = { + % name = {(,)}, + number = \arabic{subsection} + } +} + +\begin{document} + \maketitle + \section{实验环境} + \noindent requirements.txt: + \begin{minted}[frame=leftline, framesep=1em, framerule=1pt]{python} +numpy +paddlepaddle-gpu +scikit-learn +tqdm + \end{minted} + 这些代码库的作用是什么已经显而易见了,其中 \mintinline{Python}{scikit-learn (sklearn)} 只是用来分训练验证集的。 + + \section{实验过程} + \subsection{实验思路} + \subsubsection{确定首次召回个数} + 先尝试了一下完全不使用baseline的方法,直接从全部的几千个文档中召回3个文档,发现效果完全不如baseline,于是想到了采用二次召回,第一次采用baseline的方法,从几千个文档中召回一部分,第二次再从召回的这些文档中选出3个。关于第一次召回多少,我首先做了按照baseline的方式直接计算余弦相似度的top k召回率的实验,结果如 表 \ref{first retrieve num} 所示,可以看到当首次召回数量达到500个时已经有很高的召回率了,所以后续的实验都在首次召回500个文章下进行。 + \begin{table}[h] + \centering \caption{直接计算余弦相似度的召回率} \label{first retrieve num} + \begin{tabular}{cc} + \toprule + Recall@100 & 0.75 \\ + Recall@500 & 0.93 \\ + Recall@5000 & 0.99 \\ + \bottomrule + \end{tabular} + \end{table} + + \subsubsection{二次召回方案选择} + 从500个里召回3个,仍然是一个复杂的任务,尝试过几种方案: + \begin{enumerate} + \item 将其当做分类问题,输入一个查询,500个文章,输出这500个文章的概率。缺点是效率可能较低,而且实验后发现效果也不好; + \item 双塔编码(cross encoder)和point wise 对比学习\cite{jianshu},给定一个查询和一个文章,模型给出一个得分,对于查询和对应的文章(正例),得分应该更高;对于查询和不对应的文章(负例),得分应该更低,这里的负例一般是从文章库中随机选取。实验后发现不管正负例的比例是多少,效果都不好; + \item 单塔编码,query通过查询编码器,fact通过文章编码器,之后计算编码后的向量的余弦相似度,如果不使用对比学习会导致模型把所有的文章都编码得非常相似,所以这里还是需要使用对比学习。那么如何选取负例?实验过还是从文章库中随机选取负例,效果还是不好,于是查找资料,发现了这样一篇文章:\cite{aistudio},里面提到了In-batch Negatives策略,即将一个批次内其他样本都作为负例,尝试后发现效果有很大提升,从baseline的0.2121提升到了0.4059。 + \end{enumerate} + + 最终选择了单塔编码的方案,并且使用了In-batch Negatives策略。 + \subsection{数据预处理部分} + 先使用 \mintinline{Python}{sklearn} 中的 \mintinline{Python}{train_test_split} 按8:2的比例分出训练集和验证集。对于训练集和验证集,先把首次召回500个的工作全部完成,即对于每一个查询,先召回500个文章,存放在内存中,训练时在这500 $\times $ num of queries 个样本里训练。 + \subsection{模型构建} + 这里需要做的就是在单塔编码中,如何编码查询,如何编码文章。其实非常简单,就是多层全连接层,使用ReLU作为激活函数,并且使用了残差连接,如图 \ref{model structure} 所示。 + \begin{figure}[h] + \centering + \includegraphics[width=1\linewidth]{模型结构图.png} + \caption{模型结构图}\label{model structure} + (图中的N表示batch size,EMB表示嵌入维度。) + \end{figure} + + 由于query和fact的每一行是对应的,所以将query和fact通过编码器后的向量,在对角线的位置表示查询和文档对应时的相似度(正例),而非对角线的位置表示非对应时的相似度(负例),所以此矩阵应该和单位矩阵相近,所以可以用交叉熵损失。在实际代码中使用了小于1的margin来代替1形成对角阵。 + + 这里只使用简单的线性层加残差连接,是因为试了很多种结构,比如更深的带残差块的线性层,比如Transformer(Decoder only),效果都没有简单的线性层效果好。 + + \section{实验结果} + (以下召回率都是指Recall@3) + + % 训练集和验证集比例为8:2,batch size设为1024,训练370轮,优化器为Adam,在验证集上的召回率为0.48165760869565216,提交后(在测试集上)的召回率为0.452148。 + + % 不区分训练集和验证集,batch size设为4096,训练1300轮,优化器为Adam,提交后(在测试集上)的召回率为0.529622。 + + % 不区分训练集和验证集,batch size设为2048,训练2500步(iter steps)(不是轮(epochs)了),优化器为Adam,提交后(在测试集上)的召回率为0.523275。 + + % 不区分训练集和验证集,batch size设为2048,训练2600步,优化器为AdamW,提交后(在测试集上)的召回率为0.523926。 + + % 不区分训练集和验证集,batch size设为2048,训练5100步,优化器为AdamW,将模型参数与输入输出的数据类型从float32改为float64,提交后(在测试集上)的召回率为0.584635。 + + 结果如表 \ref{hyper-parameters} 所示。 + \begin{table}[h] + \centering + \caption{尝试不同的超参数}\label{hyper-parameters} + \begin{tabular}{cccccccc} + \toprule + 序号 & 是否有验证集 & batch size & epoch / step & 优化器 & 数据类型 & 验证集召回率 & 测试集召回率 \\ + \midrule + 0 & \multicolumn{4}{c}{baseline 无需训练} & float32 & / & 0.212077 \\ + 1 & 是 & 1024 & 370 epochs & Adam & float32 & 0.481658 & 0.452148 \\ + 2 & 否 & 4096 & 1300 epochs & Adam & float32 & / & 0.529622 \\ + 3 & 否 & 2048 & 2500 steps & Adam & float32 & / & 0.523275 \\ + 4 & 否 & 2048 & 2600 steps & AdamW & float32 & / & 0.523926 \\ + 5 & 否 & 2048 & 5100 steps & AdamW & float64 & / & 0.584635 \\ + 6 & 否 & 8192 & 9500 steps & AdamW & float64 & / & \textbf{0.606283} \\ + \bottomrule + \end{tabular} + \end{table} + + \bibliography{ref} + +\end{document} \ No newline at end of file diff --git a/深度学习/实验讲解/lab4.tex b/深度学习/实验讲解/lab4.tex new file mode 100644 index 0000000..4ff765d --- /dev/null +++ b/深度学习/实验讲解/lab4.tex @@ -0,0 +1,441 @@ +% https://zhuanlan.zhihu.com/p/165140693 +% https://zhuanlan.zhihu.com/p/36868831 + +%声明文档类型和比例 +\documentclass[aspectratio=169, 10pt, utf8, mathserif]{ctexbeamer} +%调用相关的宏包 +% \usepackage{beamerfoils} + +\usepackage[outputdir=./latex-output]{minted} + +\usepackage{multicol} +\setminted{breaklines=true, fontsize=\zihao{-6}} +% \PassOptionsToPackage{fontsize=\zihao{-6}}{minted} + +\definecolor{shadecolor}{RGB}{204,232,207} + +\usetheme{Berlin} %主题包之一,直接换名字即可 +\setbeamertemplate{page number in head/foot}[totalframenumber] + +\usecolortheme{beaver} %主题色之一,直接换名字即可。 +\usefonttheme{professionalfonts} + +% 设置用acrobat打开就会全屏显示 +\hypersetup{pdfpagemode=FullScreen} + +% 设置logo +% \pgfdeclareimage[height=2cm, width=2cm]{university-logo}{120701101} +% \logo{\pgfuseimage{university-logo}} + +\parskip=1.2em + +%--------------正文开始--------------- +\begin{document} + +%每个章节都有小目录 +\AtBeginSubsection[] +{ + \begin{frame} + \tableofcontents[currentsection,currentsubsection] + \end{frame} +} + +\title{《深度学习》实验4讲解} +\subtitle{多层感知机/全连接层} +\author[岳锦鹏]{岳锦鹏 \\ \small 10213903403} + +\date{\today} +\begin{frame} + %\maketitle + \titlepage +\end{frame} + +\begin{frame} + \frametitle{目录} + \tableofcontents[hideallsubsections] +\end{frame} + +\section{整体浏览} + +\begin{frame}[fragile] + 首先逐个观察每个填空的部分需要完成哪些内容。 + + 可以看到需要完成ReLU的反向传播过程。 + \begin{minted}{python} + class Relu: + def __init__(self): + self.mem = {} + + def forward(self, x): + self.mem['x'] = x + return np.where(x > 0, x, np.zeros_like(x)) + + def backward(self, grad_y): + ''' + grad_y: same shape as x + ''' + + # ========== + # todo '''请完成激活函数的梯度后传''' + # ========== + + \end{minted} +\end{frame} + +\begin{frame}[fragile] + 对于主要的模型部分,需要完成计算损失。 + \begin{minted}{python} + def compute_loss(self, log_prob, labels): + ''' + log_prob is the predicted probabilities + labels is the ground truth + Please return the loss + ''' + + # ========== + # todo '''请完成多分类问题的损失计算 损失为: 交叉熵损失 + L2正则项''' + # ========== + + + \end{minted} +\end{frame} + +\begin{frame}[fragile] + 按照给定的网络结构完成前向传播过程。 + \begin{minted}{python} + def forward(self, x): + ''' + x is the input features + Please return the predicted probabilities of x + ''' + + # ========== + # todo '''请搭建一个MLP前馈神经网络 补全它的前向传播 MLP结构为FFN --> RELU --> FFN --> Softmax''' + # ========== + + + \end{minted} +\end{frame} + +\begin{frame}[fragile] + 完成主模型的后向传播,注意这里可以使用其中各层的反向传播函数。 + \begin{minted}{python} + def backward(self, label): + ''' + label is the ground truth + Please compute the gradients of self.W1 and self.W2 + ''' + + # ========== + # todo '''补全该前馈神经网络的后向传播算法''' + # ========== + + + \end{minted} +\end{frame} + +\begin{frame}[fragile] + 更新参数,这里要注意不要忘记正则项的损失。 + \begin{minted}{python} + def update(self): + ''' + Please update self.W1 and self.W2 + ''' + + # ========== + # todo '''更新该前馈神经网络的参数''' + # ========== + + \end{minted} +\end{frame} + +\section{逐个实现} +\subsection{ReLU的反向传播} + +\begin{frame}[fragile] + \begin{multicols}{2} + 首先看ReLU的反向传播,由于ReLU的公式为(符号和课件中保持一致所以用了$a$和$x$) + $$ + a = \begin{cases} + x,\quad & x>0 \\ + 0,\quad & x\leqslant 0 \\ + \end{cases} + $$ + 所以显然 + $$ + \frac{\mathrm{d}a}{\mathrm{d}x} = \begin{cases} + 1,\quad & x>0 \\ + 0,\quad & x\leqslant 0 \\ + \end{cases} + $$ + \columnbreak + \begin{minted}{python} + class Relu: + def __init__(self): + self.mem = {} + + def forward(self, x): + self.mem['x'] = x + return np.where(x > 0, x, np.zeros_like(x)) + + def backward(self, grad_y): + ''' + grad_y: same shape as x + ''' + + # ========== + # todo '''请完成激活函数的梯度后传''' + # ========== + + \end{minted} + \end{multicols} +\end{frame} + +\begin{frame}[fragile] + + \begin{multicols}{2} + 由于要计算梯度时要根据输入$x$是否大于0判断,所以这里使用了\mintinline{python}{self.mem}来记忆上次输入的$x$,在反向传播的时候就可以使用记忆的$x$来进行分支,这里可以利用 numpy的批量操作能力实现,\mintinline{python}{grad_y}是传入的梯度,返回的结果应为本层梯度与传入梯度的乘积: + $$ + return = \frac{\mathrm{d}a}{\mathrm{d}x} \times grad\_y=\begin{cases} + grad\_y,\quad & x>0 \\ + 0,\quad & x\leqslant 0 \\ + \end{cases} + $$ + 因此写出代码如下: + \columnbreak + \begin{minted}{python} + class Relu: + def __init__(self): + self.mem = {} + + def forward(self, x): + self.mem['x'] = x + return np.where(x > 0, x, np.zeros_like(x)) + + def backward(self, grad_y): + ''' + grad_y: same shape as x + ''' + + # ========== + # todo '''请完成激活函数的梯度后传''' + return np.where(self.mem['x'] > 0, grad_y, np.zeros_like(grad_y)) + # ========== + + \end{minted} + \end{multicols} + \mint{python}|return np.where(self.mem['x'] > 0, grad_y, np.zeros_like(grad_y))| +\end{frame} + +\subsection{交叉熵损失+L2正则项} +\begin{frame}[fragile] + \begin{multicols}{2} + 交叉熵损失的函数为 + $$ + loss=\sum_{\text{每个类别}i} -y_i \log(\hat{y}_i) + $$ + L2正则项的损失为 + $ + \lambda \left\Vert W \right\Vert + $,$\lambda$为系数,$W$为权重,距离用的是欧几里得距离,即 + $$\displaystyle \sqrt{\sum_{W\text{中的每个参数}x} x^{2} }$$ + + 这里有两层网络,也就是两层权重,所以 + $$ + L2 = \lambda_1 \left\Vert W_1 \right\Vert +\lambda_2 \left\Vert W_2 \right\Vert + $$ + \columnbreak + \begin{minted}{python} + def compute_loss(self, log_prob, labels): + ''' + log_prob is the predicted probabilities + labels is the ground truth + Please return the loss + ''' + + # ========== + # todo '''请完成多分类问题的损失计算 损失为: 交叉熵损失 + L2正则项''' + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\begin{frame}[fragile] + \begin{multicols}{2} + \mintinline{python}{log_prob}应该是希望传入已经经过$\log$计算的$\hat{y}$,但是在lab4.ipynb里发现其实是没有经过$\log$计算的\mintinline{python}{pred_y},这里还得自己计算$\log(\hat{y})$,但是$\log (\hat{y}_i)$由于在前向传播的时候计算过就提前缓存在\mintinline{python}{self.log_value}了。 + + \mintinline{python}{labels}|$y$和\mintinline{python}{self.log_value}|$\log(\hat{y})$是one-hot编码的,形状为[批大小,类别数],根据公式在类别数维度求和,所以是\mintinline{python}{axis=1}。注意还要在批大小维度求平均,即\mintinline{python}{.mean(0)}。 + + 计算距离这里直接使用了\mintinline{python}{np.linalg.norm}。 + \columnbreak + \begin{minted}{python} + def compute_loss(self, log_prob, labels): + ''' + log_prob is the predicted probabilities + labels is the ground truth + Please return the loss + ''' + + # ========== + # todo '''请完成多分类问题的损失计算 损失为: 交叉熵损失 + L2正则项''' + return - np.sum(labels * self.log_value, axis=1).mean(0) + self.lambda1 * np.linalg.norm(self.W1) + self.lambda1 * np.linalg.norm(self.W2) + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\subsection{主模型的前向传播} + +\begin{frame}[fragile] + \begin{multicols}{2} + 这里$x$的形状是[批大小,28,28],这里的两个28分别是图像高度和宽度,而且可以观察到\mintinline{python}{self.W1}的形状是[100, 785],但是$28\times 28=784$,说明需要把高度和宽度拉平后还需要拼接一个\mintinline{python}{np.ones}来替代偏置项的作用。即 + \mint{python}|np.concatenate((x.reshape(x.shape[0], -1), np.ones((x.shape[0], 1))), axis=1)| + + 在\mintinline{python}{Matmul.backward}的注释中可以看到\\ + \mintinline{python}{x: shape(d, N)},所以拼接好之后还需要进行转置。 + \columnbreak + \begin{minted}{python} + def forward(self, x): + ''' + x is the input features + Please return the predicted probabilities of x + ''' + + # ========== + # todo '''请搭建一个MLP前馈神经网络 补全它的前向传播 MLP结构为FFN --> RELU --> FFN --> Softmax''' + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\begin{frame}[fragile] + \begin{multicols}{2} + 在\mintinline{python}{Softmax.forward}的注释中可以看到\mintinline{python}{x: shape(N, c)},因此在进行Softmax操作前还需要再转置回来。 + + 理论上这时候就可以直接返回了,不需要用到\mintinline{python}{self.log},$\log$是在计算交叉熵时才会用到的操作,但是在lab4.ipynb中非要先反向传播再计算损失,反向传播需要\mintinline{python}{self.log.backward},但这又需要先调用过\mintinline{python}{self.log.forward}才能把输入记忆到\mintinline{python}{self.mem}中,才能正确返回梯度。 + + 那没办法,只能先调用一下\mintinline{python}{self.log.forward}把结果缓存起来。 + \columnbreak + \begin{minted}{python} + def forward(self, x): + ''' + x is the input features + Please return the predicted probabilities of x + ''' + + # ========== + # todo '''请搭建一个MLP前馈神经网络 补全它的前向传播 MLP结构为FFN --> RELU --> FFN --> Softmax''' + y = np.concatenate((x.reshape(x.shape[0], -1), np.ones((x.shape[0], 1))), axis=1).T # 这形状真难弄 + y = self.mul_h1.forward(self.W1, y) + y = self.relu.forward(y) + y = self.mul_h2.forward(self.W2, y).T + y = self.softmax.forward(y) + # print(y) + # 唉没办法,非要先反向传播再计算损失,那只能把log的结果缓存起来了 + self.log_value = self.log.forward(y) + return y + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\subsection{主模型的反向传播} +\begin{frame}[fragile] + \begin{multicols}{2} + 前面的准备工作都实现了后,这里就很简单了,只需要逐层反向传播就行了。 + + 注意交叉熵损失为 + $$ + loss=\sum_{\text{每个类别}i} -y_i \log(\hat{y}_i) + $$ + 所以 + $$ + \frac{\mathrm{d}loss}{\mathrm{d}\log(\hat{y}_i)}= -y_i + $$ + 因此首个梯度为 \mintinline{python}{-label},后续的反向传播就交给各层的\mintinline{python}{backward}函数了。 + \columnbreak + \begin{minted}{python} + def backward(self, label): + ''' + label is the ground truth + Please compute the gradients of self.W1 and self.W2 + ''' + + # ========== + # todo '''补全该前馈神经网络的后向传播算法''' + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\begin{frame}[fragile] + \begin{multicols}{2} + 仍然要注意在Softmax反向传播后需要转置一下。 + + \mintinline{python}{Matmul.backward}返回的结果为\mintinline{python}{return grad_x, grad_W},这也提示了全连接层要保留对输入和对参数的求导,对输入的求导用来继续反向传播,对参数的求导用来更新参数。 + \columnbreak + \begin{minted}{python} + def backward(self, label): + ''' + label is the ground truth + Please compute the gradients of self.W1 and self.W2 + ''' + + # ========== + # todo '''补全该前馈神经网络的后向传播算法''' + temp = self.log.backward(-label) + temp = self.softmax.backward(temp).T + temp, self.gradient2 = self.mul_h2.backward(temp) + temp = self.relu.backward(temp) + temp, self.gradient1 = self.mul_h1.backward(temp) + # ========== + + + \end{minted} + \end{multicols} +\end{frame} + +\subsection{更新参数} +\begin{frame}[fragile] + \begin{multicols}{2} + 更新参数只需要按照公式即可,不要忘记L2正则项的梯度,以下以$W_1$为例,$W_2$同理。 + + $W_1^{(i,j)}$表示$W_1$的第$i$行$j$列的元素,lr表示learning rate,即学习率。 + $$ + \frac{\mathrm{d}L2}{\mathrm{d}W_1^{(i,j)}}= \frac{2 \lambda_1 W_1^{(i,j)}}{\left\Vert W_1 \right\Vert } + $$ + + $$ + W_1 = W_1 - \left( \frac{\mathrm{d}loss}{\mathrm{d}W_1}+\frac{\mathrm{d}L2}{\mathrm{d}W_1} \right) \times lr + $$ + \columnbreak + \begin{minted}{python} + def update(self): + ''' + Please update self.W1 and self.W2 + ''' + + # ========== + # todo '''更新该前馈神经网络的参数''' + self.W1 -= (self.gradient1 + 2 * self.lambda1 * self.W1 / np.linalg.norm(self.W1)) * self.lr + self.W2 -= (self.gradient2 + 2 * self.lambda1 * self.W2 / np.linalg.norm(self.W2)) * self.lr + # ========== + + \end{minted} + \end{multicols} +\end{frame} + +\begin{frame} + \zihao{-4}\centering{感谢观看!} +\end{frame} +\end{document} \ No newline at end of file diff --git a/离散数学/作业/mypreamble.tex b/离散数学/作业/mypreamble.tex new file mode 100644 index 0000000..55c91cd --- /dev/null +++ b/离散数学/作业/mypreamble.tex @@ -0,0 +1,40 @@ +\usepackage[margin=1in]{geometry} +\usepackage{amsmath} +\usepackage{amssymb, amsfonts, amstext, amsopn, amsthm} +\usepackage[outputdir=./latex-output]{minted} +\usepackage{subfiles} +\usepackage{mylatex} +\usepackage{fancyhdr} +\usepackage{zhnumber} % change chapter number to chinese +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{enumitem} +\usepackage{multicol} +\usepackage{hyperref} +\usepackage{subfig} +\usepackage{tasks} +\usepackage{appendix} +\usepackage{gbt7714} +\usepackage{totpages} % 不加这个会导致总页数出错 +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\thechapter.\arabic{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\renewcommand{\labelenumii}{(\arabic{enumii})} +\title{《离散数学》作业} +\author{岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2023年9月19日 —— 2023年12月31日} +\setlist[1]{listparindent=\parindent} +\setlist[2]{listparindent=\parindent} + +\def\myitem#1#2{ + \item \text{#1} + \begin{enumerate} + #2 + \end{enumerate} +} + +% \newcommand{\mycircle}[1]{\large{\textcircled{\normalsize#1}}\normalsize} +\setminted{linenos=true, breaklines=true, baselinestretch=0.85} + +\bibliographystyle{gbt7714-numerical} \ No newline at end of file diff --git a/离散数学/作业/全部作业.tex b/离散数学/作业/全部作业.tex new file mode 100644 index 0000000..484ce03 --- /dev/null +++ b/离散数学/作业/全部作业.tex @@ -0,0 +1,24 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\begin{document} + \maketitle + \tableofcontents + \setcounter{page}{0} % 这样会导致目录的最后一页页码为0,TODO: 待修复 + \subfile{第一周作业} + \subfile{第二周作业} + \chapter{数论基础} + \subfile{第三周作业} + \subfile{第四周作业} + \subfile{第五周作业} + \subfile{第七周作业} + \subfile{第八周作业} + \subfile{第十周作业} + \subfile{第十二周作业} + \subfile{第十三周作业} + \subfile{第十四周作业} + \subfile{第十五周作业} + \subfile{第十六周作业} + \appendix + \chapter{附录} + \subfile{课程项目} +\end{document} \ No newline at end of file diff --git a/离散数学/作业/第一周作业.tex b/离散数学/作业/第一周作业.tex new file mode 100644 index 0000000..ed5f469 --- /dev/null +++ b/离散数学/作业/第一周作业.tex @@ -0,0 +1,204 @@ +\documentclass[全部作业]{subfiles} +% \documentclass[a4paper]{ctexart} +\usepackage[margin=1in]{geometry} % 设置边距,符合Word设定 +% \usepackage{ctex} +\usepackage{lipsum} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +% \usepackage{fontspec} +\usepackage{minted} +% \usepackage{shellesc} +% \usepackage{regexpatch} +% \usepackage{xpatch} +% \usepackage{l3regex} +\usepackage{expl3} +\usepackage{environ} +\usepackage{mylatex} +% \setmainfont{Microsoft YaHei} +% \setCJKmainfont{SimSun} +\date{2023年9月14日} +\begin{document} +\chapter{集合论基础} +\section{集合的概念和术语} + +\renewcommand{\labelenumii}{(\arabic{enumii})} +\begin{enumerate} + \item + 给出集合{-3,-2,-1,0,1,2,3}的谓词表示法。 + + $\{ x|x \in \mathbb{Z}, -3\le x\le 3 \}$ + \item + 判断2和{2}是否下列集合的元素。 + + \begin{enumerate} + + \item + +$\{ x| {x\text{是大于1的整数}} \}$ + + 2是, {2}不是。 + \item + +$\{ x|x {\text{是某整数的平方}} \}$ + + 2不是,{2}不是。 + \item + +$\{ 2,\{ 2 \} \}$ + + 2是,{2}是。 + \item + +$\{ \{ 2 \},\{ \{ 2 \} \} \}$ + + 2不是,{2}是。 + \item + +$\{ \{ 2 \},\{ 2,\{ 2 \} \} \}$ + + 2不是,{2}是。 + \item + +$\{ \{ \{ 2 \} \} \}$ + + 2不是,{2}不是。 +\end{enumerate} + +\item +下列哪些命题成立?哪些不成立?为什么? +\begin{enumerate} + \item + +$\emptyset \in \{ \emptyset,\{ \emptyset \} \}$ + + 成立。 + \item + +$\emptyset\subseteq \{ \emptyset,\{ \emptyset \} \} $ + + 成立。 + \item + +$\{ \emptyset \}\subseteq \{ \emptyset,\{ \emptyset \} \}$ + + 成立。 + \item + +$\{ \{ \emptyset \} \}\subseteq \{ \emptyset,\{ \emptyset \} \}$ + + 成立。 +\end{enumerate} +\end{enumerate} + +\section{集合的运算} +\renewcommand{\labelenumii}{(\arabic{enumii})} +\begin{enumerate} + \item +设A是ECNU二年级学生的集合,B是ECNU必须学习离散数学的学生的集合。请用A和B表示ECNU不必学习离散数学的二年级的学生的集合。\\ + $A\setminus B$ + \item +设A是集合,下列命题是否必定成立? +\begin{enumerate} + +\item +$A\in P(A)$\\ + 是。 + \item +$A \subseteq P(A)$\\ + 否。 + \item +$\{ A \}\in P(A)$\\ + 否。 + \item +$\{ A \} \subseteq P(A)$\\ + 是。 + \end{enumerate} + \item +设A和B是任意集合,证明 $P(A)\cap P(B)=P(A\cap B)$。\\ +\begin{proof} +\ExplSyntaxOn +\begin{zhongwen} + $$ + \begin{aligned} + 证明:&\\ + &X \in P(A) \cap P(B)\\ + \Leftrightarrow &X \in P(A) 且 X \in P(B)\\ + \Leftrightarrow &X \subseteq A, X \subseteq B\\ + \Leftrightarrow &X \subseteq A \cap B\\ + \Leftrightarrow &X \in P(A \cap B)\\ + \therefore &P(A)\cap P(B) = P(A\cap B)\\ + \end{aligned} + $$ +\end{zhongwen} +\ExplSyntaxOff +\end{proof} + + \item +设A是任意集合,$A^3=(A×A)×A=A×(A×A)$是否成立?为什么?\\ + \ExplSyntaxOn + \begin{zhongwen} + $不一定,假设A=\{ 1 \},则A^3=\{ (1,1,1) \}, (A\times A)\times A=\{ ((1,1),1) \}, A\times (A\times A)=\{ (1,(1,1)) \}$ + \end{zhongwen} + \ExplSyntaxOff + +\item +设A、B、C和D是集合,证明:若A、B、C和D均非空集,且A×B=C×D,那么A=C且B=D。\\ +% {\ctex@fontset{middle}} + +\begin{proof} +\ExplSyntaxOn +\begin{zhongwen} + $$ + \begin{aligned} + &假设 A \neq C 或 B \neq D\\ + &则\exists x, x \in A, x \notin C 或x \in C, x \notin A\\ + &或\exists y, y \in B, y \notin D 或y \in D, y \notin B\\ + &不妨设\exists x, x \in A, x \notin C\\ + &\because B 非空\\ + &\therefore 设b \in B\\ + &则(x,b) \in A\times B\\ + &\because x \notin C\\ + &\therefore (x,b) \notin C\times D\\ + &\therefore A\times B \neq C \times D\\ + &与已知矛盾\\ + &\therefore 若A、B、C和D均非空集,且A×B=C×D,\\ + &那么A=C且B=D。\\ + \end{aligned} + $$ + % \endbf +\end{zhongwen} +\ExplSyntaxOff +\end{proof} + +\item *编写一个程序,输入任意一个自然数n,输出P({1,2,…,n})的所有元素。 \\ + (JavaScript,Nodejs环境) + \begin{minted}{javascript} + const readline = require("readline"); + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, + }); + + let n; + + function get_pow_set(end_num) { + end_num = parseInt(end_num); + let pow_set = [[]]; + for (let i = 1; i <= end_num; i++) { + pow_set = pow_set.concat(pow_set.map((ele) => { + return ele.concat([i]); + })); + } + return pow_set; + } + + rl.question("", (answer) => { + n = parseInt(answer); + console.log(get_pow_set(n)); + rl.close(); + }); + + \end{minted} + +\end{enumerate} + +\end{document} \ No newline at end of file diff --git a/离散数学/作业/第七周作业.tex b/离散数学/作业/第七周作业.tex new file mode 100644 index 0000000..a357d74 --- /dev/null +++ b/离散数学/作业/第七周作业.tex @@ -0,0 +1,79 @@ +\documentclass[全部作业]{subfiles} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\setcounter{chapter}{4} +\setcounter{section}{1} + +\begin{document} + \section{谓词公式的等值演算和前束范式} + \begin{enumerate} + \item 指出谓词公式$\forall x\forall y(P(x,y)\lor Q(y,z))\land \exists xR(x,y)$的指导变元、量词的辖域、约束变元和自由变元。 + \begin{figure}[h] + \centering + \includexopp[0.8]{7.1.1} + \end{figure} + \item 求谓词公式$\forall x \forall y (P(x,y) \leftrightarrow Q(x,y)) \to \exists x \forall y R(x,y)$的前束范式。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\forall x \forall y(P(x,y) \leftrightarrow Q(x,y)) \to \exists x \forall y R(x, y) \\ + =&\forall x \forall y(P(x,y)\leftrightarrow Q(x,y)) \to \exists z \forall uR(z, u) & (换名) \\ + =&\lnot (\forall x\forall y(P(x,y)\leftrightarrow Q(x,y)))\lor \exists z\forall uR(z,u) & (消去\to ) \\ + =&\exists x\exists y(\lnot (P(x,y)\leftrightarrow Q(x,y)))\lor \exists z\forall u R(z,u) & (内移\lnot )\\ + =&\exists x\exists y\exists z\forall u(\lnot (P(x,y)\leftrightarrow Q(x,y))\lor R(z,u)) & (量词前移) \\ + =&\exists x\exists y\exists z\forall u((P(x,y)\leftrightarrow Q(x,y))\to R(z,u)) & (恢复\to (非必要)) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \end{enumerate} + \section{一阶逻辑的推理理论} + \begin{enumerate} + \item 构造$\forall x(P(x)\lor Q(x)), \forall x(Q(x) \to \lnot R(x)), \forall xR(x) \Rightarrow \forall xP(x)$的形式证明。 + \begin{proof} + \begin{zhongwen} + $$设y为任意的个体变量$$ + \begin{enumerate}[label=\mycircle{\arabic{enumii}},leftmargin=\linewidth/4,rightmargin=\linewidth/4] + \item $\forall x(P(x)\lor Q(x))$\hfill 前提引入 + \item $P(y)\lor Q(y)$\hfill \mycircle{1} US规则 + \item $\forall x(Q(x)\to \lnot R(x))$\hfill 前提引入 + \item $Q(y)\to \lnot R(y)$\hfill \mycircle{3} US规则 + \item $\forall xR(x)$ \hfill 前提引入 + \item $R(y)$\hfill \mycircle{5} US规则 + \item $\lnot Q(y)$\hfill \mycircle{4} \mycircle{6} 拒取式 + \item $P(y)$ \hfill \mycircle{2} \mycircle{7} 析取三段论 + \item $\forall xP(x)$\hfill \mycircle{8} UG规则 + \end{enumerate} + \end{zhongwen} + \end{proof} + \item 证明下面的推理:\\ + “每个科研工作者都是努力工作的。每个努力工作而又聪明的人都取得事业的成功。某个人是科研工作者并且聪明。所以,某人事业取得成功。” + \begin{zhongwen} + $$ + \begin{aligned} + &设P(x): x是科研工作者,Q(x): x努力工作,R(x): x聪明,S(x): x取得事业的成功, \\ + &e: 某个人,则需要证明: \\ + &\forall x(P(x)\to Q(x)), \forall x (Q(x)\land R(x)\to S(x)), P(e)\land R(e) \Rightarrow S(e) \\ + \end{aligned} + $$ + \end{zhongwen} + \begin{proof} + \begin{zhongwen} + \begin{enumerate}[label=\mycircle{\arabic{enumii}},leftmargin=\linewidth/4,rightmargin=\linewidth/4] + \item $P(e)\land R(e)$\hfill 前提引入 + \item $P(e)$\hfill \mycircle{1} 化简 + \item $R(e)$\hfill \mycircle{1} 化简 + \item $\forall x(P(x)\to Q(x))$\hfill 前提引入 + \item $P(e)\to Q(e)$\hfill \mycircle{4} US规则 + \item $Q(e)$\hfill \mycircle{2} \mycircle{5} 假言推理 + \item $Q(e)\land R(e)$\hfill \mycircle{3} \mycircle{6} 合取引入 + \item $\forall x(Q(x)\land R(x)\to S(x))$\hfill 前提引入 + \item $Q(e)\land R(e)\to S(e)$\hfill \mycircle{8} US规则 + \item $S(e)$\hfill \mycircle{7} \mycircle{9} 假言推理 + \end{enumerate} + \end{zhongwen} + \end{proof} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/离散数学/作业/第三周作业.tex b/离散数学/作业/第三周作业.tex new file mode 100644 index 0000000..da86368 --- /dev/null +++ b/离散数学/作业/第三周作业.tex @@ -0,0 +1,206 @@ +\documentclass[全部作业]{subfiles} +\usepackage{titlesec} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\setcounter{chapter}{2} + +\begin{document} + % \titleformat{\chapter}{} + \chapter{命题逻辑} + \section{命题} + \begin{enumerate} + \myitem{下列语句哪些是命题?}{ + \item 2是正数吗? + \begin{zhongwen} + $$ + \begin{aligned} + 不是。 + \end{aligned} + $$ + \end{zhongwen} + \item $x^{2}+x+1=0$ + \begin{zhongwen} + $$ + \begin{aligned} + 是。 + \end{aligned} + $$ + \end{zhongwen} + \item 我要上学。 + \begin{zhongwen} + $$ + \begin{aligned} + 是。 + \end{aligned} + $$ + \end{zhongwen} + \item 明年2月1日下雨。 + \begin{zhongwen} + $$ + \begin{aligned} + 是。 + \end{aligned} + $$ + \end{zhongwen} + \item 如果股票涨了,那么我就赚钱。 + \begin{zhongwen} + $$ + \begin{aligned} + 是。 + \end{aligned} + $$ + \end{zhongwen} + } + \item 将当当网的图书高级搜索符号化:http://search.dangdang.com/AdvanceSearch/AdvanceSearch.aspx?c=0 + \begin{zhongwen} + $$ + \begin{aligned} + &介质=\{\}\land 书名=\{\}\land 作者译者=\{\}\land 关键词=\{\}\land 出版社=\{\}\land ISBN=\{\}\land 包装=\{\} \\ + &\land 分类=\{\}\land \{最低价格\} \le 价格 \le \{最高价格\}\land \{最低折扣\}\le 折扣\le \{最高折扣\} \\ + &\land \{最早出版时间\}\le 出版时间\le \{最晚出版时间\}\land 库存状态=\{\} \\ + \end{aligned} + $$ + \end{zhongwen} + \item 请将语句“除非你已满16周岁,否则只要你身高不足1.2米就不能乘公园的滑行铁道”符号化。 + \begin{zhongwen} + $$ + \begin{aligned} + &令p:你已满16周岁,q:你身高足1.2米,r:你能乘公园的滑行铁道。 \\ + &命题符号化为:\lnot p \to (\lnot q \to \lnot r) \\ + \end{aligned} + $$ + \end{zhongwen} + \item p、q、r为如下命题: \par + \qquad p:你得流感了 \par + \qquad q:你错过了最后的考试 \par + \qquad r:这门课你通过了 \\ + 请用自然语言表达命题$(p \to \lnot r)\lor (q \to \lnot r)$。 + \begin{zhongwen} + $$ + \begin{aligned} + 如果你得流感了,那么这门课你没通过,或者如果你错过了最后的考试,那么这门课你没通过。 + \end{aligned} + $$ + \end{zhongwen} + \myitem{判断下列命题的真值:}{ + \item \begin{zhongwen} + $若1+1=3,则2+2=4$ + \end{zhongwen} + \begin{zhongwen} + $$ + \begin{aligned} + 最外层的蕴含式的前件为假,所以此命题的真值为1。 + \end{aligned} + $$ + \end{zhongwen} + \item \begin{zhongwen} + $若鸟会飞,则1+1=3$ + \end{zhongwen} + \begin{zhongwen} + $$ + \begin{aligned} + &在考虑例外的情况下(\exists 不会飞的鸟类): \\ + &\qquad 最外层的蕴含式的前件为假,所以此命题的真值为1。 \\ + &在不考虑例外的情况下: \\ + &\qquad 最外层的蕴含式的前件为真,但后件为假,所以此命题的真值为0。 \\ + \end{aligned} + $$ + \end{zhongwen} + } + \item 构造一个只含命题变量p、q和r的命题公式A,满足:p、q和r的任意一个赋值是A的成真赋值当且仅当p、q和r中恰有两个为真 + \begin{zhongwen} + $$ + \begin{aligned} + A=(p\land q\land \lnot r)\lor (p\land \lnot q\land r)\lor (\lnot p\land q\land r) + \end{aligned} + $$ + \end{zhongwen} + \end{enumerate} + \section{等值演算} + \begin{enumerate} + \myitem{将下列两个命题符号化,并分别用真值表和等值演算的方法证明所得到的那两个命题公式是等值的。}{ + \item 你不会休息所以就不会工作,你没有丰富的知识所以你就不会工作。 + \item 你会工作所以一定会休息并具有丰富的知识。 + } + \begin{zhongwen} + $$ + \begin{aligned} + 令&p:你会休息,q:你会工作,r:你有丰富的知识 \\ + 则&(1)符号化为(\lnot p \to \lnot q)\land (\lnot r \to \lnot q) \\ + &(2)符号化为q \to p \land r \\ + \end{aligned} + $$ + \end{zhongwen} + \begin{proof} + \begin{zhongwen} + $$ + 以下是真值表: + $$ + \begin{longtable}{ccccc} + \hline + $p$ & $q$ & $r$ & $(\lnot p \to \lnot q)\land (\lnot r \to \lnot q)$ & $q \to p \land r$ \\ + \hline + 0 & 0 & 0 & 1 & 1 \\ + 0 & 0 & 1 & 1 & 1 \\ + 0 & 1 & 0 & 0 & 0 \\ + 0 & 1 & 1 & 0 & 0 \\ + 1 & 0 & 0 & 1 & 1 \\ + 1 & 0 & 1 & 1 & 1 \\ + 1 & 1 & 0 & 0 & 0 \\ + 1 & 1 & 1 & 1 & 1 \\ + \hline + \end{longtable} + $$ + \begin{aligned} + 以下是等值演算: \\ + (\lnot p \to \lnot q)\land (\lnot r \to \lnot q) & = (p\lor \lnot q)\land (r\lor \lnot q) \\ + & = (p\land r)\lor \lnot q \\ + & = \lnot q\lor (p\land r) \\ + & = q \to p\land r \\ + \end{aligned} + $$ + $$ + 所以(\lnot p \to \lnot q)\land (\lnot r \to \lnot q)与q \to p \land r等值。 + $$ + \end{zhongwen} + \end{proof} + \item 用等值演算的方法证明命题恒等式$p \to (q \to p)=\lnot p \to (p \to \lnot q)$ + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + \lnot p \to (p \to \lnot q) & = p \lor (p \to \lnot q) \\ + & = p \lor (\lnot p \lor \lnot q) \\ + & = \lnot p \lor \lnot q \lor p \\ + & = p \to (\lnot q \lor p) \\ + & = p \to (q \to p) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \myitem{一教师要从3名学生A、B和C中选派1$\sim $2人参加市级科技竞赛,需满足以下条件:}{ + \item 若A去,则C同去; + \item 若B去,则C不能去; + \item 若C不去,则A或B可以去。 + } + 问该如何选派?\\ + \begin{zhongwen} + $$ + \begin{aligned} + &令a:A去,b:B去,c:C去 \\ + 则需满足:& \quad (a \to c)\land (b \to \lnot c) \land (\lnot c \to a \lor b)\land \lnot (a\land b\land c) \\ + &=(\lnot a \lor c)\land (\lnot b \lor \lnot c)\land (c \lor (a \lor b))\land (\lnot a\lor \lnot b\lor \lnot c) \\ + &=(\lnot a \lor c)\land (\lnot b \lor \lnot c)\land (a \lor b\lor c)\land (\lnot a\lor \lnot b\lor \lnot c) \\ + &=(\lnot a\lor \lnot b\lor c)\land (\lnot a\lor b\lor c)\land (\lnot a\lor \lnot b\lor \lnot c)\land (a\lor \lnot b\lor \lnot c)\land (a\lor b\lor c) \\ + &=\bigwedge M(0,3,4,6,7) \\ + &=\bigvee m(1,2,5) \\ + &=(\lnot a\land \lnot b\land c)\lor (\lnot a\land b\land \lnot c)\lor (a\land \lnot b\land c) \\ + \end{aligned} + $$ + \begin{flalign*} + 即选派C或选派B或选派AC。&&\\ + \end{flalign*} + \end{zhongwen} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/离散数学/作业/第二周作业.tex b/离散数学/作业/第二周作业.tex new file mode 100644 index 0000000..98d70ff --- /dev/null +++ b/离散数学/作业/第二周作业.tex @@ -0,0 +1,201 @@ +\documentclass[全部作业]{subfiles} +\usepackage{mylatex} +\pagestyle{fancy} +\fancyhead{} +\fancyhead[C]{\mysignature} +\setcounter{chapter}{1} +\setcounter{section}{2} + +\begin{document} +\section{集合运算的性质} +\begin{enumerate} + \item[9.] \ExplSyntaxOn + \begin{zhongwen} + $设A、B、C是集合,证明下列结论:$ + \end{zhongwen} + \ExplSyntaxOff + \begin{enumerate} + \item[(3)] \ExplSyntaxOn + \begin{zhongwen} + $若A\cap B=\varnothing,则A-B=A$ + \end{zhongwen} + \ExplSyntaxOff + \begin{proof} + \ExplSyntaxOn + \begin{zhongwen} + $$ + \begin{aligned} + &\because A\cap B=\varnothing\\ + &\therefore \forall x \in A \implies x\notin B\\ + &\therefore \forall x \in A\implies x\in \bar{B}\\ + &\therefore A \subseteq \bar{B}\\ + &\therefore A\cap \bar{B}=A\\ + &\therefore A-B=A\\ + \end{aligned} + $$ + \end{zhongwen} + \ExplSyntaxOff + \end{proof} + \end{enumerate} + \item[11.] \ExplSyntaxOn + \begin{zhongwen} + $指出下列集合等式成立的充分必要条件,其中A、B和C是集合:$ + \end{zhongwen} + \ExplSyntaxOff + \begin{enumerate} + \item[(5)] $(A-B)\cap (A-C)=\varnothing$ + $$ + \begin{aligned} + &(A-B)\cap (A-C)=A\cap \bar{B}\cap A \cap \bar{C}=A\cap \bar{B}\cap \bar{C}=A-B-C=\varnothing\\ + &\iff A-B-C=\varnothing\\ + \end{aligned} + $$ + \end{enumerate} + \item[13.] \ExplSyntaxOn + \begin{zhongwen} + $设A和B是集合,集合运算对称差\oplus 定义如下:A\oplus B=(A-B)\cup (B-A).\\证明下列恒等式,其中A、B和C是任意集合:$ + \end{zhongwen} + \ExplSyntaxOff + \begin{enumerate} + \item[(5)] $A\oplus B=(A\cup B)-(A\cap B)$ + \begin{proof} + \ExplSyntaxOn + \begin{zhongwen} + $$ + \begin{aligned} + (A\cup B)-(A\cap B) & = (A\cup B)\cap \overline{A\cap B} \\ + & = (A\cup B)\cap (\bar{A}\cup \bar{B}) \\ + & = ((A\cup B)\cap \bar{A})\cup ((A\cup B)\cap \bar{B}) \\ + & = (B\cap \bar{A})\cup (A\cap \bar{B}) \\ + & = (A-B)\cup (B-A) \\ + & = A\oplus B \\ + \end{aligned} + $$ + \end{zhongwen} + \ExplSyntaxOff + \end{proof} + \end{enumerate} + \item[21.] \textit{设A、B、C和D是任意集合.请证明:} + \begin{enumerate} + \item $(A\times C)\cap (B\times D)=(A\cap B)\times (C\cap D)$ + \begin{proof} + \ExplSyntaxOn + \begin{zhongwen} + $$ + \begin{aligned} + \forall (x,y), \quad&(x,y)\in (A\times C)\cap (B\times D)\\ + \iff &(x,y)\in (A\times C)且(x,y)\in (B\times D)\\ + \iff &x\in A,y\in C且x\in B,y\in D\\ + \iff &x\in A\cap B且y\in C\cap D\\ + \iff &(x,y)\in (A\cap B)\times (C\cap D)\\ + \therefore \quad&(A\times C)\cap (B\times D)=(A\cap B)\times (C\cap D)\\ + \end{aligned} + $$ + \end{zhongwen} + \ExplSyntaxOff + \end{proof} + \end{enumerate} + \item[22.] \textit{设$\{ A_\beta|\beta\in B \}$是以B为下标集的集合族.证明下列恒等式.} + \begin{enumerate} + \item $\overline{\displaystyle \bigcup_{\beta\in B} A_\beta}=\displaystyle \bigcap_{\beta\in B} \overline{A_\beta}$ + \begin{proof} + % \ExplSyntaxOn + \begin{zhongwen} + $$ + \begin{aligned} + \forall x, \quad&x\in \overline{\bigcup_{\beta\in B}A_\beta}\\ + \iff& x\notin \bigcup_{\beta\in B} A_\beta\\ + \iff&\lnot (\exists \beta\in B, x\in A_\beta)\\ + \iff&\forall \beta\in B, x\notin A_\beta\\ + \iff&\forall \beta\in B, x\in \overline{A_\beta}\\ + \iff&x\in \bigcap_{\beta\in B} \overline{A_\beta}\\ + \therefore \quad&\overline{\bigcup_{\beta\in B} A_\beta}=\bigcap_{\beta\in B} \overline{A_\beta}\\ + \end{aligned} + $$ + \end{zhongwen} + % \ExplSyntaxOff + \end{proof} + \end{enumerate} + \item[24.] \textit{设集合族$\{A_n|n\in \mathbb{N}\}$,令$B_0=A_0$,$B_n=A_n-\displaystyle \bigcup_{k=0}^{n-1} A_k(n>0) $.证明:} + \begin{enumerate} + \item[(2)] $\displaystyle\bigcup_{ n\in \mathbb{N}} A_n =\displaystyle \bigcup_{n\in \mathbb{N}} B_n$ + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + &\because B_n=A_n-\displaystyle \bigcup_{k=0}^{n-1}A_k(n>0)\\ + &\therefore \forall n>0, B_n\in A_n\\ + &\forall x\in \bigcup_{n\in \mathbb{N}} B_n \iff\exists n_0\in \mathbb{N},x\in B_{n_0}\implies x\in A_{n_0}\\ + &\therefore \displaystyle \bigcup_{n\in \mathbb{N}}A_n\supseteq \bigcup_{n\in \mathbb{N}} B_n \\ + &\forall x\in \displaystyle \bigcup_{n\in \mathbb{N}} A_n, 则 \exists n\in \mathbb{N},x\in A_{n} \\ + &设C_x=\{ n|x\in A_n \} \\ + &设n_1=\min{C_x} \\ + &则x\in A_{n_1}且\forall n_2 a =[] + [] + > for (let i = 1; i<=200; i++){ + ... a.push(i); + ... } + > a.reduce((out, cur) => { + ... if ((cur%3==0 || cur%5==0) && cur%15!=0) out.push(cur); + ... return out; + ... }, Array()).length + 80 + \end{minted} + \item[(5)] \begin{zhongwen} + $与15互素的正整数(即与15之间的最大公因子为1的那些正整数)共有多少个?$ + \end{zhongwen} + \begin{zhongwen} + $$ + \begin{aligned} + &A与B的定义和上题相同 \\ + &则\left\vert 在1\sim 200的正整数中与15互素的正整数 \right\vert \\ + &=\left\vert 1\sim 200的正整数 \right\vert -\left\vert A\cup B \right\vert \\ + &=200-(\left\vert A \right\vert +\left\vert B \right\vert -\left\vert A\cap B \right\vert )=200-(66+40-13) = 107 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/离散数学/作业/第五周作业.tex b/离散数学/作业/第五周作业.tex new file mode 100644 index 0000000..6beb924 --- /dev/null +++ b/离散数学/作业/第五周作业.tex @@ -0,0 +1,125 @@ +\documentclass[全部作业]{subfiles} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\setcounter{chapter}{3} +\setcounter{section}{2} + +\begin{document} + \chapter{一阶逻辑} + \section{谓词、量词和谓词公式} + \begin{enumerate} + \item 用谓词公式表达语句“所有的运动员都钦佩某些教练”,个体域为全总个体域。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &由于个体域为全总个体域, \\ + &设P(x)表示x为运动员,Q(x)表示x为教练,R(x,y)表示x钦佩y, \\ + &注意到“某些”表示复数,则语句“所有的运动员都钦佩某些教练”可表示为: \\ + &\forall x(P(x) \to \exists y\exists z((y \neq z)\land Q(y)\land Q(z) \land R(x,y)\land R(x,z))) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 用谓词公式表达语句“本班的学生都已学过微积分”,个体域分别取ECNU的学生集合和本班的学生集合。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &当个体域取ECNU的学生集合时, \\ + &设P(x)表示x为本班的学生,Q(x)表示x已学过微积分, \\ + &则语句“本班的学生都已学过微积分”可表示为: \\ + &\forall x(P(x) \to Q(x)) \\ + &当个体域取本班的学生集合时, \\ + &设Q(x)表示x已学过微积分, \\ + &则语句“本班的学生都已学过微积分”可表示为: \\ + &\forall x Q(x) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 用谓词公式表达语句“班上无人恰给另外两个同班同学发过电子邮件”,个体域取本班学生的集合。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &由于个体域为本班学生的集合, \\ + &设P(x, y)表示x给y发过电子邮件, \\ + &则语句“班上无人恰给另外两个同班同学发过电子邮件”可表示为: \\ + &\lnot \exists x(\exists y\exists z((y\neq z)\land P(x,y)\land P(x,z)\land \forall w((w \neq y)\land (w\neq z) \to \lnot P(x,w)))) \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 将$\forall x(C(x)\lor \exists y(C(y)\land F(x,y)))$翻译成汉语,其中C(x)表示x有电脑,F(x,y) 表示x和y是同班同学,个体域是学校全体学生的集合。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &对于学校中的任何一个学生,他有电脑,或者存在一个他的同班同学有电脑。 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 给定解释I如下:\\ + 个体域$D: \{ -2,3,6 \}$;\\ + 个体常元$a: 6$;\\ + 谓词$P: 2 > 1, Q(x): x\leqslant 3, R(x): x>5$。\\ + 求出谓词公式$\forall x(P \to Q(x))\lor R(a)$在解释I下的真值。 + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &\forall x(P \to Q(x))\lor R(a)在解释I下的真值为: \\ + &((P \to Q(-2))\land (P \to Q(3))\land (P \to Q(6)))\lor R(6) \\ + &=(((2>1) \to (-2\leqslant 3))\land ((2>1) \to (3\leqslant 3))\land ((2>1) \to (6\leqslant 3)))\lor (6>5) \\ + &=((1 \to 1)\land (1 \to 1)\land (1 \to 0))\lor 1\\ + &=(1\land 1\land 0)\lor 1 \\ + &=0\lor 1 \\ + &=1 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item[书上3.] 请将下列谓词公式翻译为汉语,并指出每个命题的真值,这里个体域为实数集。 + \begin{enumerate} + \item $\forall x(x^{2}=x)$; + \begin{zhongwen} + $$ + 对于任何一个实数x,都有x^{2}=x + $$ + $$ + 真值为0 + $$ + \end{zhongwen} + \item $\exists x(2x=x)$; + \begin{zhongwen} + $$ + 存在一个实数x,满足2x=x + $$ + $$ + 真值为1 + $$ + \end{zhongwen} + \item $\exists x(x^{2}+3x-2=x)$; + \begin{zhongwen} + $$ + 存在一个实数x,使得x^{2}+3x-2=x + $$ + $$ + 真值为1 + $$ + \end{zhongwen} + \item $\forall x(x-3m-1$,即$v$的度数大于$\alpha $中去除$v$后的顶点总数,所以与$v$相连的边中必定存在一条边$e$连接了不在$\alpha $中的顶点$v'$,于是将边$e$和顶点$v'$加入到$\alpha $中,就构成了长度为$m$的基本通路。 + + 所以$\forall m \in \mathbb{N}, 1\leqslant m\leqslant k$,$G$有长度为$m$的基本通路。自然地,$G$有长度为$k$的基本通路。 + + \end{zhongwen} + \end{proof} + + \item 证明:若无向图$G$没有长度为奇数的基本回路,则$G$没有任何长度为奇数的回路。 + + \begin{proof} + \begin{zhongwen} + + 证明原命题的逆否命题“若$G$中存在一条长度为奇数的回路,则$G$中必定存在长度为奇数的基本回路。” + + 若$G$中存在一条长度为奇数的回路$\alpha $,则可以设$\alpha =v_0e_1v_1e_2\cdots e_k v_k$,$\alpha $的长度$k$为奇数。若$\alpha $是基本回路,则$G$中存在长度为奇数的基本回路。 + + 若$\alpha $不是基本回路,则其中存在相同的顶点,不妨设$v_i=v_j$, $0\leqslant i0$。 + 证明$E$是$X$上的等价关系,并给出$[(x,y)]_{E}$的几何解释。 + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + &\forall (x,y)\in X,则x \neq 0,y\neq 0\quad\therefore x\cdot x=x^{2}>0,\frac{y}{x}=\frac{y}{x} \quad \therefore (x,y)E(x,y),即E是自反关系 \\ + &\forall ((x_1,y_1),(x_2,y_2))\in E,即x_1\cdot x_2>0,\frac{y_1}{x_1}=\frac{y_2}{x_2},则x_2\cdot x_1>0,\frac{y_2}{x_2}=\frac{y_1}{x_1} \\ + &\therefore ((x_2,y_2),(x_1,y_1))\in E,即 E是对称关系 \\ + &\forall ((x_1,y_1),(x_2,y_2)),((x_2,y_2),(x_3,y_3))\in E,即x_1\cdot x_2>0,x_2\cdot x_3>0,\frac{y_1}{x_1}=\frac{y_2}{x_2},\frac{y_2}{x_2}=\frac{y_3}{x_3}\\ + &\therefore x_1\cdot x_3>0,\frac{y_1}{x_1}=\frac{y_3}{x_3}\quad \therefore ((x_1,y_1),(x_3,y_3))\in E,即E是传递关系 \\ + &\therefore E是X上的等价关系 \\ + &[(x,y)]_{E}表示从原点出发并经过(x,y)的某一条射线去除原点 \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \item 下面哪些$\mathbb{Z}$的子集簇构成$\mathbb{Z}$的划分?为什么? + \begin{enumerate} + \item \{偶数集,奇数集\} + \begin{zhongwen} + $$ + \begin{aligned} + &构成,令\pi =\{ 偶数集,奇数集 \},则偶数集\neq \varnothing ,奇数集\neq \varnothing \\ + &偶数集\cap 奇数集=\varnothing,\quad 偶数集\cup 奇数集=\mathbb{Z} \\ + &\therefore \{ 偶数集,奇数集 \}构成\mathbb{Z}的划分 \\ + \end{aligned} + $$ + \end{zhongwen} + \item \{正整数集,负整数集\} + \begin{zhongwen} + $$ + \begin{aligned} + 不构成,\because 0\in \mathbb{Z},但0\not \in 正整数集\cup 负整数集,即正整数集\cup 负整数集\neq \mathbb{Z} + \end{aligned} + $$ + \end{zhongwen} + \item \{能被3整除的整数的集合,被3除余数为1的整数的集合,被3除余数为2的整数的集合\} + \begin{zhongwen} + $$ + \begin{aligned} + 构成,因为任何一个整数除以3的余数只能是0或1或2. + \end{aligned} + $$ + \end{zhongwen} + \item \{小于-100的整数的集合,绝对值不超过100的整数的集合,大于100的整数的集合\} + \begin{zhongwen} + $$ + \begin{aligned} + 构成,任何一个整数必然在且只在这三个集合中的某一个集合中。 + \end{aligned} + $$ + \end{zhongwen} + \item \{不能被3整除的整数的集合,偶数集合,被6除余数为3的整数的集合\} + \begin{zhongwen} + $$ + \begin{aligned} + &不构成,\because 2\in 不能被3整除的整数的集合\cap 偶数集合, \\ + &即 不能被3整除的整数的集合\cap 偶数集合\neq \varnothing \\ + \end{aligned} + $$ + \end{zhongwen} + \end{enumerate} + \end{enumerate} + \section{偏序关系} + \begin{enumerate} + \item 下列集合关于整除关系$|$构成偏序集。请分别画出它们的哈斯图,判断它们是否是全序集,给出它们的极大元、极小元、最大元、最小元。 + \begin{multicols}{2} + \begin{enumerate} + \item $\{ 2,4,8,16 \}$; + + % \centering + % \includegraphics[1\linewidth]{imgs/5.5.1.drawio.png} + \hspace{5em}\includesvgpdf[0.1]{5.5.1.drawio} + + 极大元:16,极小元:2;\\ + 最大元:16,最小元:2。 + + \item $\{ 2,3,4,5,9,10,80 \}$。 + + \includesvgpdf[0.8]{5.5.2.drawio} + + 极大元:80、9,极小元:2、5、3;\\ + 最大元:无,最小元:无。 + \end{enumerate} + \end{multicols} + \pagebreak[2] + \item 证明: + \begin{enumerate} + \item 偏序集的最小元也必定是其极小元; + \begin{proof} + \begin{zhongwen} + $$ + \begin{aligned} + &对于任意的偏序集(X,\leqslant ),若a\in X是它的最小元,取个体域为X\\ + &则\forall x(a\leqslant x) \\ + &\because 偏序关系具有反对称性, \\ + &\therefore \forall x((x=a)\lor \lnot (x\leqslant a)) \\ + &\therefore \forall x(\lnot (x\neq a\land x\leqslant a)) \\ + &\therefore \lnot \exists x(x (...args) => { + const start_time = new Date(); + const result = func(...args); + console.log(new Date() - start_time); + return result; + } + + function func1(args) { + do_some_thing(args); + } + + const func = measure_time(func1); + func(); + \end{minted} + + 这里使用了JavaScript的箭头函数的语法特性,这种语法特性能非常方便地实现函数式程序设计的多种特性,如函数部分参数调用,柯里(curry)化等,详细内容可见参考文献\cite{zhihuJS1, zhihuJS2}。 + + 同样,在C++中也可以实现装饰器的概念。 + \begin{minted}{cpp} + #include + #include + + template + std::function measure_time(std::function func) { + return [=](ARGS... args) -> RET { + time_t start_time = time(nullptr); + RET result = func(args...); + std::cout << time(nullptr) - start_time << std::endl; + return result; + } + } + + std::function do_something; + + const func = measure_time(do_something); + func(); + \end{minted} + + 上述代码参考\cite{zhihuc++1},同样也没经过测试,但大致思路体现了函数式程序设计的思想,包括lambda匿名函数等特性。 + + 虽然不知道各种编程语言的装饰器是否是受到了函数式程序设计的启发,但可以看到它们都能实现装饰器的功能,这也是函数式程序设计在现代发展的体现。 + + \subsubsection{\LaTeX 排版} + 另一个非常需要函数式程序设计的思维的地方就是\LaTeX 排版了,在使用\LaTeX 的过程中,我曾经有这样一个需求:要在一个列表环境中使用多个\mintinline{latex}|\item|,但是它们有不同序号格式,比如有的格式是\mintinline{latex}|P\arabic{enumi}.|有的格式是\mintinline{latex}|R\arabic{enumi}.|,但是又希望序号能连续。因此在以前,只能使用\mintinline{latex}|\item[]|单独为每一项指定带格式的序号。但是在了解了函数式程序设计后,同时结合\LaTeX3的语法,写出了如下的\LaTeX 代码: + \begin{minted}{latex} + \def\getenum{% + \ifnum\EnumitemId=1% + enumi% + \else + \ifnum\EnumitemId=2% + enumii% + \else + \ifnum\EnumitemId=3% + enumiii% + \else% + enumiv% + \fi + \fi + \fi% + } + + \ExplSyntaxOn + \cs_set:Nn \rawquestionandanswer:Nnnn {% + \ifstrequal{#2}{-}{}{\format_item:Nn #1{#2}} #3% + #4% + } + \cs_set:Nn \format_item:Nn { + \IfBlankTF{#2}{ + \stepcounter{\getenum} + \item[#1{\csname the\getenum\endcsname}] + % 完美结合了LaTeX2e和LaTeX3! + }{ + \item[#1{#2}] + } + } + \cs_set:Nn \Rformat:n {R#1.} + \cs_set:Nn \Pformat:n {P#1.} + \newcommand{\Rquestionandanswer}[3][]{% + \rawquestionandanswer:Nnnn \Rformat:n {#1}{#2}{#3} + } + \newcommand{\Pquestionandanswer}[3][]{% + \rawquestionandanswer:Nnnn \Pformat:n {#1}{#2}{#3} + } + \ExplSyntaxOff + \end{minted} + 这里的\mintinline{latex}|\Rquestionandanswer|和\mintinline{latex}|\Pquestionandanswer|其实是使用了函数式程序设计中的部分参数调用的思想,对于原始的\mintinline{latex}|\rawquestionandanswer|,分别传入不同的格式,即\mintinline{latex}|\Rformat|和\mintinline{latex}|\Pformat|,形成了不同的函数,使用时直接调用\mintinline{latex}|\Rquestionandanswer|和\mintinline{latex}|\Pquestionandanswer|,传入剩余的参数,完成整个调用过程,这时之前定义的格式就会产生作用,形成不同的效果。 + + \subsection{总结} + 从上面这些例子中,我们可以看到虽然函数式程序设计听起来比较陌生,但其实它的思想在很多编程语言中早已有所体现。还要注意的是,在一些情况其实也不是很适合使用函数式程序设计,比如具有大量可变状态的图形用户界面。了解函数式程序设计,也许在目前来看,并不能给我们带来什么实质性的帮助,但也许受到了函数式的思想潜移默化的影响,在未来的某一天,实现某个功能的时候,突然就有了灵感,想到一个绝妙的设计方案。函数式程序设计归根结底还是一种编程范式,了解各种编程范式,一定不能生搬硬套,要学会灵活使用,最终达成高内聚低耦合的目的。 + + \phantomsection\addcontentsline{toc}{subsection}{参考文献} %将参考文献放进目录 + \bibliography{ref} + \ifSubfilesClassLoaded{ + \stopcontents + }{} +\end{document} \ No newline at end of file diff --git a/离散数学/废稿.tex b/离散数学/废稿.tex new file mode 100644 index 0000000..c2b33ba --- /dev/null +++ b/离散数学/废稿.tex @@ -0,0 +1,191 @@ + +\newwrite\mywrite +\immediate\openout\mywrite=\jobname.wrt +\immediate\write\mywrite{abc} +\immediate\closeout\mywrite + +\newlength{\la} +\settowidth{\la}{\fbox{这是一个带测量宽度的盒子}} +\immediate\openout0=\jobname.txt +\immediate\write0{\the\la} +\immediate\closeout0 +% \ShellEscape{set /p xxx=&&wscript "msgbox \%xxx\%"} +\immediate\write18{echo 222323} +% \read +\DeleteFile{\jobname.wrt} + + +% \newenvironment{myenv} +% {\begin{quotation}\small\itshape}{\end{quotation}} + +% \newcommand{\replaced}[2][\relax]{\renewcommand{\tmpbox}{\fboxsep#1\colorbox{red}{\tmpbox}\par}\tmpbox} + + +% \begin{myenv} +% This is a test sentence. +% \end{myenv} + +% \replaced[10pt]{\begin{myenv} +% This is another test sentence. +% \end{myenv}} + +% \newcommand{\code}[1]{\colorbox[RGB]{245,245,245}{\texttt{\detokenize{#1}}}} +% ... +% \code{std::string this_is_a_string = "\n";} +% \xpatchcmd{\regex_replace_all:NnN}{hello}{goodbye}{\typeout{Patched!}}{\typeout{Patching failed!}} +\ExplSyntaxOn + + +% \newenvironment{zhongwen}{ +% \newsavebox{\rawinput} +% \begin{lrbox}{\rawinput} +% }{ +% \end{lrbox} +% \immediate\write18{echo `\unhcopy\rawinput` > output.txt} +% \newwrite\mywrite +% \immediate\openout\mywrite=\jobname.wrt +% \immediate\write\mywrite{\unhcopy\rawinput} +% \regex_replace_all:nnN{a}{ifrfe}{\usebox{\rawinput}} +% \unhcopy\rawinput +% \unhcopy\rawinput +% \unhcopy\rawinput +% \immediate\write\mywrite{\unhcopy\rawinput} +% \immediate\closeout\mywrite +% } + +% \newenvironment{zhongwen}{ +% \regex_replace_all:nnN{at}{is} +% \begingroup +% }{ +% % \egroup +% \endgroup +% } + +% https://www.jianshu.com/p/6dfd27b7bd90 + +\cs_new:Nn \my_add:nn { + #1 + #2 +} +\int_eval:n { + \my_add:nn {123} {456} +} +\str_new:N \temp +\cs_new:Nn \zhongwenfunction:n { + \str_set:NV \temp {#1} + \regex_replace_all:nnN{[^\x00-\xff]+}{\\text\{\0\}}{\temp} + % \temp + \immediate\openout0=\jobname.zhongwen + \immediate\write0{\temp} + \immediate\closeout0 + \input{\jobname.zhongwen} + % \DeleteFile{\jobname.zhongwen} + % \new +} +\NewEnviron{myenv}{\zhongwenfunction:n{\BODY}} +% \zhongwenfunction:n { +% $$ +% a at is at is. +% 中文 +% 中文2让中文 +% $$ +% } +\begin{myenv} + $$ + a at is at is. + 中文 + 中文2让中文 + $$ +\end{myenv} + +\NewEnviron{zhongwen}{ + \ExplSyntaxOn + \str_set:NV \temp {\BODY} + \regex_replace_all:nnN{[^\x00-\xff]+}{\\text\{\0\}}{\temp} + % 应该可以使用\ifwindows和\iflinux来判断临时文件目录从而把临时文件放到临时文件目录里的 + \immediate\openout0=\jobname.zhongwen + \immediate\write0{\temp} + \immediate\closeout0 + \input{\jobname.zhongwen} + \DeleteFile{\jobname.zhongwen} + \ExplSyntaxOff +} + +\begin{zhongwen} + $$ + 中文中文 + 飞机及哦额叫哦哦我i哦飞机饿哦i就发我哦佛偈哦哦哦挖机 + $$ +\end{zhongwen} + +\newcommand{\mycommand}[1]{\expandafter\def\csname myenv\endcsname{#1}} +\mycommand{abc} +\verb|\begin{myenv}abc\end{myenv}| + +\def\foo{hello} +\def\bar{world} +\def\baz{!} + +\foo\ \bar\ \baz + +fefef + +% \xdef\zhongwen{\regex_replace_all:nnN{at}{is}{\zhongwen}} + +% \begin{zhongwen} +% a at is at is. +% \end{zhongwen} + +\def\openbox#1{\setbox#1=\hbox\bgroup} +\def\closebox#1{\egroup\usebox#1} +\openbox0 ... \closebox0 + +% \zhongwen {23232at is ao is at .} +% \xdef\mycommand{$2323$} +% \newsavebox{\mybox} + +% \begin{lrbox}{\mybox} +% fwojefjoiwejfio +% \end{lrbox} + +% \usebox{\mybox} +% \usebox{\mybox} +% \usebox{\mybox} +% \usebox{\mybox} +% \usebox{\mybox} + +% \mycommand + + +% \begin{zhongwen} +% This is some text inside the environment. +% \end{zhongwen} + +% \xdef\myvariable{\begin{zhongwen}} +% \expandafter\xdef\expandafter\myvariable\expandafter{\myvariable\end{zhongwen}} + + +\str_new:N \l_my_tl +\str_set:Nn \l_my_tl { That~cat. } +\l_my_tl +\regex_replace_all:nnN { at } { is } \l_my_tl +\l_my_tl + +% \regex_replace_once:nnn { at } { is } {This is a sample text with some words.} 11515632 +% \regex_replace_all:NnN +% \replace +% \regex_replace_all:nnn{\\b[a-z]+\\b}{X} This is a sample text with some words. +% {<->} +% {<*>} + +换行 + +换行 + +换行 +\ExplSyntaxOff + +换行 + +换行 + +换行 diff --git a/网络安全基础/实验报告/mypreamble.tex b/网络安全基础/实验报告/mypreamble.tex new file mode 100644 index 0000000..31ba59a --- /dev/null +++ b/网络安全基础/实验报告/mypreamble.tex @@ -0,0 +1,109 @@ +\usepackage[margin=1in]{geometry} +\usepackage{longtable} +\usepackage{booktabs} +\usepackage{zhnumber} % change section number to chinese +% \usepackage{enumerate} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{fancyhdr} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +% \usepackage[outputdir=./latex-output]{minted} +\usepackage{float} % https://blog.csdn.net/qq_32623363/article/details/101095168 +\usepackage{fp} +\usepackage{graphicx} % 原来includegraphics要使用参数要用graphicx,只是用graphics是没法带参数的 +\usepackage{tabularx} +\usepackage{array} +\usepackage{ragged2e} +\usepackage{multirow} +\usepackage{url} +\usepackage{color} +\usepackage{mylatex} +\usepackage{totpages} % 不加这个会导致总页数出错 +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{华东师范大学计算机科学与技术学院上机实践报告} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\zhnum{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\setlist[1]{label=\zhnum{enumi}、} +\setlist[2]{labelindent=-1em, leftmargin=*, label=\arabic{enumii}、\ } +\setlist[3]{listparindent=2em, leftmargin=*, label=\arabic{enumiii}、\ } +\definecolor{shadecolor}{RGB}{204,232,207} + +\newcommand{\mydate}{ + 2023年11月3日 +} + +\newcommand{\mychapternum}{ + 1 +} + +\newcommand{\mylabname}{ + +} + +\newcommand{\myname}{ + 姓名 +} + +\newcommand{\mystudentnum}{ + e.g. 12345678902 +} + +\input{myprivatepreamble} + +\newcommand{\mytitle}{ + \title{\fontsize{15}{0}华东师范大学计算机科学与技术学院上机实践报告\vspace{-2em}} + \date{} + \maketitle + + \begin{center} + \begin{tabularx}{\textwidth}{XXl} + \toprule + \textbf{课程名称}:网络安全基础 & \textbf{年级}:2022级 & \textbf{上机实践日期}:\mydate \\ + \textbf{指导教师}:黄新力 & \textbf{姓名}:\myname & \textbf{学号}:\mystudentnum \\ + \multicolumn{3}{l}{\textbf{实验名称}:实验\zhnumber{\mychapternum}\quad\mylabname} \\ + \bottomrule + \end{tabularx} + \end{center} + \addtocounter{table}{-1} + \vspace{1em} +} + +\newcommand{\myitemx}[3][]{ + \item \textbf{#2} + \begin{enumerate}[#1] + #3 + \end{enumerate} +} + +% https://blog.csdn.net/u010801696/article/details/79477226 +\def\UrlBreaks{\do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J +\do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T\do\U\do\V +\do\W\do\X\do\Y\do\Z\do\[\do\\\do\]\do\^\do\_\do\`\do\a\do\b +\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j\do\k\do\l\do\m\do\n +\do\o\do\p\do\q\do\r\do\s\do\t\do\u\do\v\do\w\do\x\do\y\do\z +\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\, +\do\?\do\'\do+\do\=\do\#} + +\renewcommand{\thefigure}{\mychapternum-\arabic{figure}} +\renewcommand{\thetable}{\mychapternum-\arabic{table}} + + +% https://mirrors.pku.edu.cn/ctan/info/svg-inkscape/InkscapePDFLaTeX.pdf +% 这个只有PDFLaTeX才能用,filemod也是 +% \newcommand{\executeiffilenewer}[3]{% +% \ifnum\pdfstrcmp{\pdffilemoddate{#1}}% +% {\pdffilemoddate{#2}}>0% +% {\immediate\write18{#3}}\fi% +% } + + +% 该命令用于控制 p{} 的情况 +\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}} % 使用过程中,将p{4cm}换成P{4cm},小写改成大写即可! +% 该命令用于控制 X 的情况 +\newcolumntype{Z}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X} % 使用过程中,将Z 换成 X,即可! + +% 可利用 RaggedLeft Centering替换RaggedRight,实现靠右和居中 [代码对大小写敏感!!!!!!!!!!!!!!!!!!!!!!!!!!!!] + +% 原文链接:https://blog.csdn.net/wanjiac/article/details/107494424 diff --git a/网络安全基础/实验报告/实验一.tex b/网络安全基础/实验报告/实验一.tex new file mode 100644 index 0000000..867117d --- /dev/null +++ b/网络安全基础/实验报告/实验一.tex @@ -0,0 +1,38 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{1} +\renewcommand{\mylabname}{DES演示} +\renewcommand{\mydate}{2024年3月26日} +% \setlength{\textheight}{10000em} +% \setlength{\paperheight}{10000em} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item DES单步加密演示实验 + \item DES算法演示实验 + \item 3DES 算法演示实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item DES加密和解密 + } + \myitemx[itemsep=1em]{实验步骤}{ + \item 见下页图: + \begin{figure}[h] + \centering + \includegraphics[height=1\textheight]{imgs/screen_shot_1712027504144.png} + \hfil + \includegraphics[height=1\textheight]{imgs/screen_shot_1712027734857.png} + \hfil + \includegraphics[height=1\textheight]{imgs/screen_shot_1712027834513.png} + \end{figure} + } + \myitem{实验结果总结}{ + \item 本次实验通过优良的图形用户界面、清晰的演示,使我清晰地了解了DES加密和解密的过程。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验七.tex b/网络安全基础/实验报告/实验七.tex new file mode 100644 index 0000000..9a4724b --- /dev/null +++ b/网络安全基础/实验报告/实验七.tex @@ -0,0 +1,55 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{7} +\renewcommand{\mylabname}{素性、原根、ECC与SSH} +\renewcommand{\mydate}{2024年5月7日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item 素性测试编码实验 + \item 原根编码实验 + \item ECC签名编码实验(复习) + \item 基于SSH协议的安全通信实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item 素性、原根、ECC与SSH + } + \myitem{实验结果总结}{ + \item 本次实验介绍了素性测试与原根检测的原理与方法,并且使用Python和C++实现了素性测试与原根检测的功能。还介绍了SSH协议,并且使用OpenSSH实现了两台主机之间的安全通信。 + } + \myitem{实验步骤}{ + \centering + \item 素性测试编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-05-07-09-58-45.png} + \includegraphics[height=1\textheight]{imgs/2024-05-07-10-08-15.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715047774229.png} + + \item 原根编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-05-07-10-16-17.png} + \includegraphics[height=1\textheight]{imgs/2024-05-07-10-23-03.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715048653431.png} + + \item ECC签名编码实验(复习) + + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-16-25.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-20-48.png} + \includegraphics[height=1\textheight]{imgs/2024-04-30-10-27-44.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1714444150414.png} + + \item 基于SSH协议的安全通信实验 + + \includegraphics[width=1\linewidth]{imgs/2024-05-07-10-51-59.png} + \includegraphics[height=1\textheight]{imgs/2024-05-07-10-52-17.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-07-10-54-57.png} + \includegraphics[height=1\textheight]{imgs/2024-05-07-10-56-27.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715050674206.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验三.tex b/网络安全基础/实验报告/实验三.tex new file mode 100644 index 0000000..00518ec --- /dev/null +++ b/网络安全基础/实验报告/实验三.tex @@ -0,0 +1,49 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{3} +\renewcommand{\mylabname}{AES、RSA、OpenSSL} +\renewcommand{\mydate}{2024年4月9日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item AES单步加密演示实验 + \item AES算法演示实验 + \item AES编码实验 + \item RSA编码实验 + \item 大数运算编码实验 + \item 利用对称密码对文件加密实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item DES加密和解密 + } + \myitemx[itemsep=1em]{实验步骤}{ + \item \includegraphics[height=1\textheight]{imgs/screen_shot_1712627647454.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-02-21.png} + \includegraphics[height=1\textheight]{imgs/2024-04-09-10-12-48.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1712628827832.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-23-14.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-27-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-30-15.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1712629869991.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-37-27.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-39-36.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-45-05.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1712630769193.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-09-10-54-36.png} + \includegraphics[height=1\textheight]{imgs/2024-04-09-10-57-28.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1712631488755.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-09-11-08-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-11-11-40.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-09-11-13-55.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1712632499452.png} + } + \myitem{实验结果总结}{ + \item 本实验使我充分了解了AES加密和解密的过程,以及RSA加密和解密的过程,中间还补充了大数运算相关的知识,最后的OpenSSL的介绍以及命令行的调用也非常实用。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验九.tex b/网络安全基础/实验报告/实验九.tex new file mode 100644 index 0000000..baa6ea5 --- /dev/null +++ b/网络安全基础/实验报告/实验九.tex @@ -0,0 +1,51 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{9} +\renewcommand{\mylabname}{Linux身份认证管理} +\renewcommand{\mydate}{2024年5月21日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item Linux环境下使用openssl制作CA + \item Linux环境下CA的日常操作 + \item Linux环境下CA签发数字证书 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item Linux身份认证管理、PKI + } + \myitem{实验结果总结}{ + \item 本实验在Linux中使用openssl命令实现了CA的建立,用户申请证书的请求,CA对请求进行验证和颁发证书,CA吊销证书以及公布证书吊销列表等操作。学会独立创建自签名证书后,对日常的服务器维护非常有帮助。 + } + \myitem{实验步骤}{ + \centering + \item Linux环境下使用openssl制作CA + + \includegraphics[width=1\linewidth]{imgs/2024-05-21-09-54-21.png} + 可以看到,操作机似乎并不是Kali。 + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-04-10.png} + \includegraphics[height=1\textheight]{imgs/2024-05-21-10-09-51.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1716257454007.png} + + \item Linux环境下CA的日常操作 + + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-23-04.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-24-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-26-59.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-28-34.png} + \includegraphics[height=1\textheight]{imgs/2024-05-21-10-30-02.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1716258740491.png} + + \item Linux环境下CA签发数字证书 + + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-41-09.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-21-10-44-33.png} + \includegraphics[height=1\textheight]{imgs/2024-05-21-10-46-41.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1716259651372.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验二.tex b/网络安全基础/实验报告/实验二.tex new file mode 100644 index 0000000..fca6adb --- /dev/null +++ b/网络安全基础/实验报告/实验二.tex @@ -0,0 +1,37 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{2} +\renewcommand{\mylabname}{DES使用} +\renewcommand{\mydate}{2024年4月2日} +% \setlength{\textheight}{500em} +% \setlength{\paperheight}{500em} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item DES编码实验 + \item 3DES编码实验 + \item DES加解密实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item DES加密和解密 + } + \myitemx[itemsep=1em]{实验步骤}{ + \item \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-19-09.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-31-48.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-37-08.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-38-14.png} + \item \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-46-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-47-50.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-49-48.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-02-10-50-41.png} + } + \myitem{实验结果总结}{ + \item 本实验使我充分了解了DES的加密和解密的过程,以及如何在Linux中使用Python和C实现DES、3DES的加密和解密。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验五.tex b/网络安全基础/实验报告/实验五.tex new file mode 100644 index 0000000..3bd8b26 --- /dev/null +++ b/网络安全基础/实验报告/实验五.tex @@ -0,0 +1,58 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{5} +\renewcommand{\mylabname}{RSA} +\renewcommand{\mydate}{2024年4月23日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item RSA算法演示实验 + \item 算法编程演示实验 + \item 数字签名-RSA编码实验 + \item 加解密文本实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item RSA加密和解密 + } + \myitem{实验结果总结}{ + \item 本次实验使我更深刻地了解了RSA的加密和解密过程,以及如何使用C调用RSA的加密和解密流程,并且使用了OpenSSL的命令行工具实现了文本(或文件)的加密和解密。 + } + \myitem{实验步骤}{ + \centering + \item RSA算法演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-04-28.png} + \includegraphics[height=1\textheight]{imgs/2024-04-23-10-09-55.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713838260195.png} + + \item 算法编程演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-20-00.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-21-49.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-22-15.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-23-40.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-25-16.png} + \includegraphics[height=1\textheight]{imgs/2024-04-23-10-27-29.png} + % \includegraphics[height=1\textheight]{imgs/screen_shot_1713839398250.png} + + \item 数字签名-RSA编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-40-55.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-23-10-42-03.png} + \includegraphics[height=1\textheight]{imgs/2024-04-23-10-44-01.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713840359131.png} + + \item 加解密文本实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-23-11-16-08.png} + \includegraphics[height=1\textheight]{imgs/2024-04-23-11-17-22.png} + \includegraphics[height=1\textheight]{imgs/2024-04-23-11-19-40.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713842407814.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验八.tex b/网络安全基础/实验报告/实验八.tex new file mode 100644 index 0000000..5013497 --- /dev/null +++ b/网络安全基础/实验报告/实验八.tex @@ -0,0 +1,67 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{8} +\renewcommand{\mylabname}{Windows身份认证管理} +\renewcommand{\mydate}{2024年5月14日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item Windows环境下独立根CA的安装和使用 + \item Windows环境下证书服务管理 + \item Windows环境下配置基于Web的SSL连接 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item Windows身份认证管理、PKI + } + \myitem{实验结果总结}{ + \item 本次实验使用Windows Server 2008,完整演示了CA的建立,以及网站所有者如何向CA申请证书,CA如何颁发证书,如何吊销证书以及发布吊销列表,网站所有者如何使用颁发的证书将网站配置HTTPS服务。并且使用Sniffer工具说明了HTTPS相比于HTTP,将通信的数据进行了加密,更安全。 + } + \myitem{实验步骤}{ + \centering + \item Windows环境下独立根CA的安装和使用 + + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-01-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-03-31.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-05-51.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-07-04.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-07-53.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-08-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-10-43.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-12-37.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-18-53.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715653239167_cr.png} + + \item Windows环境下证书服务管理 + + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-34-51.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-35-22.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-37-33.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-38-14.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-38-53.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-39-55.png} + \includegraphics[height=1\textheight]{imgs/2024-05-14-10-40-29.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715654506247_cr.png} + + \item Windows环境下配置基于Web的SSL连接 + + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-52-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-53-01.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-54-33.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-10-55-32.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-00-10.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-02-14.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-04-23.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-07-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-09-45.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-10-21.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-14-11-11-59.png} + \includegraphics[height=1\textheight]{imgs/2024-05-14-11-14-24.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1715656554255_cr.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验六.tex b/网络安全基础/实验报告/实验六.tex new file mode 100644 index 0000000..3cbe8eb --- /dev/null +++ b/网络安全基础/实验报告/实验六.tex @@ -0,0 +1,52 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{6} +\renewcommand{\mylabname}{数字签名} +\renewcommand{\mydate}{2024年4月30日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item DSA数字签名演示实验 + \item ECC签名编码实验 + \item DSA签名算法实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item 数字签名 + } + \myitem{实验结果总结}{ + \item 本次实验使我更深刻地了解了数字签名的概念、ECC和DSA算法的过程、以及如何使用Python实现数字签名。而且,在Linux中使用GPG创建自己的数字签名的过程使我了解了如何在开源代码仓库中对自己发布的发行版进行签名,以便他人验证。 + } + \myitem{实验步骤}{ + \centering + \item DSA数字签名演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-01-44.png} + \includegraphics[height=1\textheight]{imgs/2024-04-30-10-04-43.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1714442775208.png} + + \item ECC签名编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-16-25.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-20-48.png} + \includegraphics[height=1\textheight]{imgs/2024-04-30-10-27-44.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1714444150414.png} + + \item DSA签名算法实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-49-29.png} + + 由于虚拟机中没有执行很多“琐事/other action”,熵不够多,所以生成随机字节非常慢。这里就直接在服务器里执行了,可以发现由于服务器同时运行的东西很多,所以很快就生成完毕了。 + + \includegraphics[height=1\textheight]{imgs/2024-04-30-10-53-27.png} + \includegraphics[width=1\linewidth]{imgs/2024-04-30-10-54-25.png} + \includegraphics[height=1\textheight]{imgs/2024-04-30-10-56-50.png} + \includegraphics[height=1\textheight]{imgs/2024-04-30-11-02-25.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1714446369702.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验十.tex b/网络安全基础/实验报告/实验十.tex new file mode 100644 index 0000000..116304f --- /dev/null +++ b/网络安全基础/实验报告/实验十.tex @@ -0,0 +1,64 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{10} +\renewcommand{\mylabname}{协议分析和应用分析} +\renewcommand{\mydate}{2024年5月28日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item 协议分析-ARP协议解码详解 + \item 协议分析-ICMP协议解码详解 + \item 协议分析-IP协议解码详解 + \item 协议分析-TCP协议解码详解 + \item 应用分析-FTP文件传输应用分析 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item ARP、ICMP、IP、TCP、FTP协议 + } + \myitem{实验结果总结}{ + \item 本次实验使用科来网络分析系统,分析了ARP、ICMP、IP、TCP、FTP协议,实验步骤简洁有效,Windows XP与Windows Server 2003的操作系统复古怀旧,引起了我对曾经使用Windows XP系统的时光的回忆。 + } + \myitem{实验步骤}{ + \centering + \item 协议分析-ARP协议解码详解 + + \includegraphics[width=1\linewidth]{imgs/2024-05-28-09-57-29.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-09-58-33.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-02-11.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-03-12.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1716861848242.png} + + \item 协议分析-ICMP协议解码详解 + + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-10-31.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-12-43.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-13-21.png} + + \item 协议分析-IP协议解码详解 + + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-18-32.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-21-35.png} + + \item 协议分析-TCP协议解码详解 + + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-32-16.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-32-51.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-34-13.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-34-39.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-35-43.png} + + \item 应用分析-FTP文件传输应用分析 + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-40-42.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-43-39.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-44-18.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-46-49.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-48-38.png} + \includegraphics[width=1\linewidth]{imgs/2024-05-28-10-53-04.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验十一.tex b/网络安全基础/实验报告/实验十一.tex new file mode 100644 index 0000000..d677664 --- /dev/null +++ b/网络安全基础/实验报告/实验十一.tex @@ -0,0 +1,76 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{11} +\renewcommand{\mylabname}{Windows系统VPN配置和Linux系统VPN配置} +\renewcommand{\mydate}{2024年6月4日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item Windows下IPSec安全通信实验 + \item Windows下IPSec VPN实验 + \item Windows下PPTP VPN实验 + \item Linux下PPTP服务器建设 + \item Linux下Openswan环境的搭建 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item Windows系统VPN配置和Linux系统VPN配置 + } + \myitem{实验结果总结}{ + \item 本次实验在Windows和Linux环境下分别进行了IPSec和PPTP等工作在不同层的VPN服务器的搭建,并且成功使用户登录了VPN服务器。VPN服务器的搭建过程并不容易,但复杂的步骤也间接确保了VPN的安全。 + } + \myitem{实验步骤}{ + \centering + \item Windows下IPSec安全通信实验 + + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-17-53.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-21-40.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-22-03.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1717467952871.png} + + \item Windows下IPSec VPN实验 + + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-38-16.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-41-52.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-46-45.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-47-29.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-47-50.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-50-18.png} + \includegraphics[height=1\textheight]{imgs/2024-06-04-11-11-46.png} + % \includegraphics[height=1\textheight]{imgs/screen_shot_1717469660933.png} + + \item Windows下PPTP VPN实验 + + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-56-13.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-57-26.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-58-10.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-58-53.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-59-12.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-10-59-51.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-11-01-08.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-11-02-18.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-11-06-00.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-11-06-20.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-11-06-41.png} + \includegraphics[height=1\textheight]{imgs/2024-06-04-11-11-13.png} + % \includegraphics[height=1\textheight]{imgs/screen_shot_1717470799133.png} + + \item Linux下PPTP服务器建设 + + \includegraphics[width=1\linewidth]{imgs/2024-06-04-13-39-45.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-04-13-48-52.png} + \includegraphics[height=1\textheight]{imgs/2024-06-04-14-06-45.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1717481283782.png} + + \item Linux下Openswan环境的搭建 + + \includegraphics[width=1\linewidth]{imgs/2024-06-04-14-26-03.png} + \includegraphics[height=1\textheight]{imgs/2024-06-04-14-31-52.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1717482755989.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验十二.tex b/网络安全基础/实验报告/实验十二.tex new file mode 100644 index 0000000..596644f --- /dev/null +++ b/网络安全基础/实验报告/实验十二.tex @@ -0,0 +1,86 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{12} +\renewcommand{\mylabname}{防火墙} +\renewcommand{\mydate}{2024年6月11日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item[] 第1章 iptables基本应用 + \item 1.1 Iptables基本操作实验 + \item 1.2 Iptables服务器配置与管理实验 + \item 1.3 Iptables基本实验及抓包分析实验 + \item[] 第3章 其他防火墙配置与应用 + \item 3.1 Outpost Firewall配置与使用实验 + \item 3.2 普通包过滤实验 + \item 3.3 包过滤防火墙配置和应用实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item iptables和其他防火墙 + } + \myitem{实验结果总结}{ + \item 本次实验讲解并演示了iptables的配置,虽然在命令行里添加删除不像在Windows里直接图形化界面直观,但好处是可以结合其他脚本批量操作。也讲解了Windows中其他防火墙的使用方法,但都没有Windows自带的防火墙方便免费好用。综上所述,Linux自带的iptables和Windows自带的防火墙是最好用的。 + } + \myitem{实验步骤}{ + \centering + \item Iptables基本操作实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-05-37.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-14-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-17-18.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-19-18.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-20-16.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-10-24-45.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1718072829316.png} + + \item Iptables服务器配置与管理实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-28-15.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-33-04.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-36-24.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-10-38-04.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1718073591055.png} + + \item Iptables基本实验及抓包分析实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-43-10.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-45-54.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-52-05.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-53-49.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-54-25.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-10-56-25.png} + % \includegraphics[height=1\textheight]{imgs/screen_shot_1718074625502.png} + + \item Outpost Firewall配置与使用实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-58-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-10-59-36.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-03-12.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-03-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-05-57.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-07-18.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-11-08-29.png} + % \includegraphics[height=0.5\textheight]{imgs/screen_shot_1718075351903.png} + + \item 普通包过滤实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-11-08.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-12-28.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-12-48.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-14-55.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-15-36.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-15-58.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-11-17-07.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-11-18-23.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1718075930688.png} + + \item 包过滤防火墙配置和应用实验 + \includegraphics[width=1\linewidth]{imgs/2024-06-11-13-01-04.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-13-13-44.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-13-15-17.png} + \includegraphics[width=1\linewidth]{imgs/2024-06-11-13-15-46.png} + \includegraphics[height=1\textheight]{imgs/2024-06-11-13-17-14.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1718083090706.png} + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/网络安全基础/实验报告/实验四.tex b/网络安全基础/实验报告/实验四.tex new file mode 100644 index 0000000..67e45c5 --- /dev/null +++ b/网络安全基础/实验报告/实验四.tex @@ -0,0 +1,78 @@ +\documentclass[a4paper]{ctexart} +\input{mypreamble} +\renewcommand{\mychapternum}{4} +\renewcommand{\mylabname}{MD5、SHA} +\renewcommand{\mydate}{2024年4月16日} + +\begin{document} +\mytitle +\begin{enumerate} + \myitem{实验目的}{ + \item MD5单步运算演示实验 + \item MD5算法演示实验 + \item SHA-1算法演示实验 + \item MD5编码实验 + \item SHA编码实验 + \item SHA2-224编码实验 + \item SHA2-256编码实验 + } + \myitem{实验设备}{ + \item 49.52.5.80 上的虚拟机 + } + \myitem{实验原理}{ + \item DES加密和解密 + } + \myitem{实验结果总结}{ + \item 本实验使我充分了解了MD5和SHA系列算法的原理、过程,以及如何使用Python实现。 + } + \myitem{实验步骤}{ + \centering + + \item MD5单步运算演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-04-34.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-09-39.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713233513479.png} + + \item MD5算法演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-16-20.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-17-17.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713233883411.png} + + \item SHA-1算法演示实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-25-32.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-29-31.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713234649231.png} + + \item MD5编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-36-11.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-37-49.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-39-47.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713235219043.png} + + \item SHA编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-46-10.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-47-12.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-49-36.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713235847126.png} + + \item SHA-224编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-10-56-12.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-56-56.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-10-58-29.png} + \includegraphics[height=1\textheight]{imgs/screen_shot_1713236353250.png} + + \item SHA-256编码实验 + + \includegraphics[width=1\linewidth]{imgs/2024-04-16-11-02-37.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-11-03-57.png} + \includegraphics[height=1\textheight]{imgs/2024-04-16-11-04-49.png} + + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/mypreamble.tex b/计算机系统结构/作业/mypreamble.tex new file mode 100644 index 0000000..f31a742 --- /dev/null +++ b/计算机系统结构/作业/mypreamble.tex @@ -0,0 +1,68 @@ +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{booktabs} +\usepackage[framemethod=TikZ]{mdframed} +% \usepackage[tikz]{bclogo} +\usepackage{fontawesome5} +\usepackage{tabularx} +\usepackage{array} +\usepackage{ragged2e} +\usepackage{bm} +\usepackage{hyperref} + +\usepackage{fancyhdr} +\usepackage{enumitem} +\usepackage{totpages} +\usepackage{mylatex} +\usepackage{subfiles} + +\title{《计算机系统结构》作业} +\author{岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2024年3月17日——2024年6月18日} +\setlist[1]{listparindent=\parindent} +\setlist[2]{label=\alph{enumii}.,listparindent=\parindent} +\definecolor{shadecolor}{RGB}{204,232,207} +\definecolor{verificationColor}{RGB}{85,206,255} % 这颜色误差确实有点大啊,目前手动调的 + +\newcommand{\complicateditem}[3]{ + \item[\textbf{#1}] [#2]<#3> +} + +\renewcommand{\questionandanswer}[3][]{% + \begin{shaded}% + \ifstrequal{#1}{-}{}{\item[\textbf{#1}]} #2% + \end{shaded}% + \begin{zhongwen}% + #3% + \end{zhongwen}% +} + +\newmdenv[% + frametitle={% + \tikz[] + \node[anchor=east,rectangle,fill=verificationColor] + { \faIcon{search}\ 验证一下};}, % + % frametitlerule=true, % + % frametitlebelowskip=10pt, % + roundcorner=5pt, % + innertopmargin=10pt,linecolor=verificationColor,% + linewidth=2pt,topline=true, % + frametitleaboveskip=\dimexpr-\ht\strutbox\relax, +]{verification} + +% \newenvironment{verification}{ +% \begin{bclogo}[couleur=verificationColor, arrondi =0.1 , logo=\bcloupe, noborder=true]{验证一下} +% }{ +% \end{bclogo} +% } + +\usemintedstyle{staroffice} % 虽然这个没有颜色区分操作符与操作数,但是对于数字的强调很重要,因为汇编中的这些立即数都是比较重要,同时注释的字体也比较正常没有花体 + +% 该命令用于控制 p{} 的情况 +\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}} % 使用过程中,将p{4cm}换成P{4cm},小写改成大写即可! +% 该命令用于控制 X 的情况 +\newcolumntype{Z}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X} % 使用过程中,将Z 换成 X,即可! + +\let\kaishu\relax % 清除旧定义 +\newCJKfontfamily\kaishu{KaiTi}[AutoFakeBold] % 重定义 \kaishu +\newcommand{\boldkai}[1]{{\bfseries\kaishu #1}} diff --git a/计算机系统结构/作业/mysubpreamble.tex b/计算机系统结构/作业/mysubpreamble.tex new file mode 100644 index 0000000..5195ac7 --- /dev/null +++ b/计算机系统结构/作业/mysubpreamble.tex @@ -0,0 +1,5 @@ +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +% \definecolor{shadecolor}{named}{white} diff --git a/计算机系统结构/作业/全部作业.tex b/计算机系统结构/作业/全部作业.tex new file mode 100644 index 0000000..a764cc1 --- /dev/null +++ b/计算机系统结构/作业/全部作业.tex @@ -0,0 +1,12 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\begin{document} + \maketitle + \tableofcontents + \subfile{第一章作业} + \subfile{第二章作业} + \subfile{第三章作业} + \subfile{第四章作业} + \subfile{第五章作业1} + \subfile{第五章作业2} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第一章作业.tex b/计算机系统结构/作业/第一章作业.tex new file mode 100644 index 0000000..9e73114 --- /dev/null +++ b/计算机系统结构/作业/第一章作业.tex @@ -0,0 +1,178 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\chapter{计算机抽象及相关技术} +\begin{enumerate} + \questionandanswer[1.3]{ + [ 2 ]<1.3>请描述高级语言(例如C)编写的程序转化为能够直接在计算机处理器上执行的表示的具体步骤。 + }{ + 高级语言通过编译器(编译型的高级语言,如C、C++)或解释器(解释型的高级语言,如Python、JavaScript)转化成指令,再转化成二进制的机器码,或者直接转化成二进制的机器码(不同的硬件对应的机器码可能不同),机器码就是能够直接在计算机处理器上执行的表示。 + } + \questionandanswer[1.5]{ + [ 4 ]<1.6>有3种不同的处理器P1、P2和P3执行同样的指令系统。P1的时钟频率为3GHz,CPI为1.5;P2的时钟频率为2.5GHz,CPI为1.0;P3的时钟频率为4GHz,CPI为2.2。 + }{} + \begin{enumerate} + \questionandanswer[-]{ + \item 以每秒执行的指令数为标准,哪个处理器性能最高? + }{ + \noindent + P1:$\frac{3 \text{GHz}}{1.5\text{时钟周期数/指令}}=2\times 10^{9}$\\ + P2:$\frac{2.5\text{GHz}}{1.0\text{时钟周期数/指令}}=2.5\times 10^{9}$\\ + P3:$\frac{4\text{GHz}}{2.2\text{时钟周期数/指令}}\approx 1.818\times 10^{9}$\\ + 所以处理器P2性能最高。 + } + \questionandanswer[-]{ + \item 如果每个处理器执行一个程序都花费10秒时间,求它们的时钟周期数和指令数。 + }{ + \begin{tabular}{ccc} + \toprule + & 时钟周期数 & 指令数 \\ + \midrule + P1 & $3\text{GHz}\times 10s=30\times 10^{9}$ & $\frac{30\times 10^{9}}{1.5}=20\times 10^{9}$ \\ + P2 & $2.5\text{GHz}\times 10s=25\times 10^{9}$ & $\frac{25\times 10^{9}}{1.0}=25\times 10^{9}$ \\ + P3 & $4\text{GHz}\times 10s=40\times 10^{9}$ & $\frac{40\times 10^{9}}{2.2}\approx 18.1818\times 10^{9}$ \\ + \bottomrule + \end{tabular} + } + \questionandanswer[-]{ + \item 我们试图把执行时间减少30\%,但这会引起CPI增大20\%。请问为达到时间减少30\%的目标,时钟频率应达到多少? + }{ + $$ + \text{执行时间}\times 70\% = \text{指令数}\times (\text{CPI}\times 120\%) / \text{时钟频率} + $$ + $$ + \text{时钟频率}=\frac{\text{指令数}\times \text{CPI}}{\text{执行时间}}\times \frac{1.2}{0.7} \approx 1.714 \times \text{原始时钟频率} + $$ + 所以时钟频率要达到原始时钟频率的大约$1.714$倍。 + } + \end{enumerate} + \questionandanswer[1.6]{ + [ 20 ]<1.6>同一个指令系统体系结构有两种不同的实现方式。根据CPI的不同将指令分成四类(A、B、C和D)。P1的时钟频率为2.5GHz,CPI分别为1、2、3和3;P2时钟频率为3GHz,CPI分别为2、2、2和2。\\ + 给定一个程序,有$1.0\times 10^{6}$条动态指令,按如下比例分为4类:A,10\%;B,20\%;C,50\%;D,20\%。 + }{} + \begin{enumerate} + \questionandanswer[-]{ + \item 每种实现方式下的整体CPI是多少? + }{ + P1:$1\times 10\%+2\times 20\%+3\times 50\%+3\times 20\% = 2.6$\\ + P2:$2$ + } + \questionandanswer[-]{ + \item 计算两种情况下的时钟周期总数。 + }{ + P1:$1.0\times 10^{6}\times 2.6 = 2.6\times 10^{6}$\\ + P2:$1.0\times 10^{6}\times 2=2\times 10^{6}$ + } + \end{enumerate} + \questionandanswer[1.7]{ + [ 15 ]<1.6>编译器对应用程序性能有极深的影响。假定对于一 + 个程序,如果采用编译器A,则 + 动态指令数为$1.0\times 10^{9}$,执行时间为1.1s;如果采用编译器B,则动态指令数为$1.2\times 10^{9}$,执行时间为1.5s。 + }{} + \begin{enumerate} + \questionandanswer[-]{ + \item 在给定处理器时钟周期长度为1ns时,求每个程序的平均CPI。 + }{ + 编译器A:$\frac{1.1s}{1\times 10^{-9} s}/1.0\times 10^{9}=1.1$\\ + 编译器B:$\frac{1.5s}{1\times 10^{-9} s}/1.2\times 10^{9}=1.25$ + } + \questionandanswer[-]{ + \item 假定被编译的程序分别在两个不同的处理器上运行。如果这两个处理器的执行时间相同,求运行编译器A生成之代码的处理器时钟比运行编译器B生成之代码的处理器时钟快多少。 + }{ + % 相同处理器时执行时间分别为1.1s和1.5s,那么相同执行时间时处理器时钟的比值为: + $$ + \begin{aligned} + % &\frac{处理器1时钟}{处理器2时钟}=\frac{处理器1时钟\times 执行时间}{处理器2时钟\times 执行时间}=\frac{编译器A生成代码的时钟周期数}{编译器B生成代码的时钟周期数} \\ + 执行时间_{A}&=执行时间_{B} \\ + \frac{指令数_{A}\times CPI_{A}}{时钟频率_{A}}&=\frac{指令数_{B}\times CPI_{B}}{时钟频率_{B}} \\ + \frac{时钟频率_{A}}{时钟频率_{B}}&=\frac{指令数_{A}\times CPI_{A}}{指令数_{B}\times CPI_{B}}=\frac{1.0\times 10^{9}\times 1.1}{1.2\times 10^{9}\times 1.25} = \frac{11}{15} = 0.733 \\ + \end{aligned} + $$ + % $$ + % \frac{1.5s}{1.2s} = 1.25 + % $$ + 所以题意应该是错了,运行编译器A生成之代码的处理器时钟比运行编译器B生成之代码的处理器时钟慢,约$0.733$倍。 + } + \questionandanswer[-]{ + \item 假设开发了一种新的编译器,只需$6.0\times 10^{8}$条指令,程序平均CPI为1.1。求这种新的编译器在原处理器环境下相对于原编译器A和B的加速比。 + }{ + 记这个新的编译器为C。 + $$ + \frac{性能C}{性能A}=\frac{执行时间A}{执行时间C}=\frac{\frac{指令数_{A}\times CPI_{A}}{时钟频率}}{\frac{指令数_{C}\times CPI_{C}}{时钟频率}}=\frac{指令数_{A}\times CPI_{A}}{指令数_{C}\times CPI_{C}}=\frac{1.0\times 10^{9}\times 1.1}{6.0\times 10^{8}\times 1.1} = \frac{5}{3} \approx 1.667 + $$ + 同理, + $$ + \frac{性能C}{性能B}=\frac{指令数_{B}\times CPI_{B}}{指令数_{C}\times CPI_{C}}=\frac{1.2\times 10^{9}\times 1.25}{6.0\times 10^{8}\times 1.1} = \frac{25}{11} \approx 2.273 + $$ + 所以这种新的编译器在原处理器环境下相对于原编译器A和B的加速比分别约为$1.667$和$2.273$。 + } + \end{enumerate} + \questionandanswer[1.9]{ + 在某处理器中,假定算术指令、load/store指令和分支指令的CPI分别是1、12和5。同时假定某程序在单个处理器核上运行时需要执行$2.56\times 10^{9}$条算术指令、$1.28\times 10^{9}$条load/store指令和$2.56\times 10^{8}$条分支指令,并假定处理器的时钟频率为2GHz。 + 现假定程序并行运行在多核上,分配到每个处理器核上运行的算术指令和 load/store指令数目为单核情况下相应指令数目除以$0.7\times p$ ( $p$为处理器核数),而每个处理器的分支指令的数量保持不变。 + }{} + \questionandanswer[1.9.1]{ + [ 5 ]<1.7>求出当该程序分别运行在1、2、4和8个处理器核上的执行时间,并求出其他情况下相对于单核处理器的加速比。 + }{ + $$ + 多核执行时间=\frac{指令数\times CPI}{时钟周期}=\frac{\frac{2.56\times 10^{9}}{0.7\times p}\times 1+\frac{1.28\times 10^{9}}{0.7\times p}\times 12+2.56\times 10^{8}\times 5}{2\times 10^{9}} = \frac{16 (p + 20)}{25 p} s + $$ + $$ + 单核执行时间=\frac{指令数\times CPI}{时钟周期}=\frac{2.56\times 10^{9}\times 1+1.28\times 10^{9}\times 12+2.56\times 10^{8}\times 5}{2\times 10^{9}} = \frac{48}{5} = 9.6 s + $$ + $$ + 多核与单核的加速比=\frac{单核执行时间}{多核执行时间}=\frac{\frac{48}{5}}{\frac{16(p+20)}{25p}} = \frac{15 p}{p + 20} + $$ + \begin{center} + \begin{tabular}{ccc} + \toprule + 处理器核数 & 执行时间 & 加速比 \\ + \midrule + 1 & 9.600 & 1.000 \\ + 2 & 7.040 & 1.364 \\ + 4 & 3.840 & 2.500 \\ + 8 & 2.240 & 4.286 \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[1.9.2]{ + [ 10 ]<1.6,1.8>如果算术指令的CPI加倍,对分别运行在1、2、4和8个处理器核上的执行时间有何影响? + }{ + $$ + 多核执行时间=\frac{\frac{2.56\times 10^{9}}{0.7\times p}\times 2+\frac{1.28\times 10^{9}}{0.7\times p}\times 12+2.56\times 10^{8}\times 5}{2\times 10^{9}} = \frac{16 (7 p + 160)}{175 p} s + $$ + $$ + 单核执行时间=\frac{2.56\times 10^{9}\times 2+1.28\times 10^{9}\times 12+2.56\times 10^{8}\times 5}{2\times 10^{9}} = \frac{272}{25} = 10.88 s + $$ + \begin{center} + \begin{tabular}{ccc} + \toprule + 处理器核数 & 之前的执行时间 & 现在的执行时间 \\ + \midrule + 1 & 9.600 & 10.880 \\ + 2 & 7.040 & 7.954 \\ + 4 & 3.840 & 4.297 \\ + 8 & 2.240 & 2.469 \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[1.9.3]{ + [ 10 ]<1.6,1.8>如果要使单核处理器的性能与四核处理器相当,单处理器中 load/store指令的CPI应该降低多少?此处假定四核处理器的CPI保持原数值不变。 + }{ + 设单处理器中 load/store指令的CPI应该降低到原CPI的$x$倍。 + $$ + \begin{aligned} + 单核处理器(CPI降低)的执行时间&=四核处理器(原CPI)的执行时间 \\ + \frac{2.56\times 10^{9}\times 1+1.28\times 10^{9}\times 12x+2.56\times 10^{8}\times 5}{2\times 10^{9}} &= \frac{16 \times (4 + 20)}{25 \times 4} \\ + \frac{192 x}{25} + \frac{48}{25} &= \frac{96}{25} \\ + \end{aligned} + $$ + $$ + x = \frac{96-48}{192} = \frac{1}{4} = 0.25 + $$ + 所以单处理器中 load/store指令的CPI应该降低到原CPI的0.25倍,即$12\times 0.25=3$。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第三章作业.tex b/计算机系统结构/作业/第三章作业.tex new file mode 100644 index 0000000..83e12a7 --- /dev/null +++ b/计算机系统结构/作业/第三章作业.tex @@ -0,0 +1,46 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\setcounter{chapter}{2} +\begin{document} +\chapter{计算机的算术运算} +\begin{enumerate} + \questionandanswer[3.7]{ + [ 5 ]<3.2>假设带符号的8位十进制整数185和122以符号-数值形式存储。计算185+122。是否上溢或下溢,或都没有? + }{ + 185 转成8位二进制为 $1011\ 1001$,其最高位为1,表示负数,即$185-256=-71$; + 122 转成8位二进制为 $0111\ 1010$,其最高位为0,表示正数。 + + $1011\ 1001 + 0111\ 1010 = 1\ 0011\ 0011$,只有8位,所以结果为$0011\ 0011$,即51。符合结果$-71+122 = 51$,所以没有上溢或下溢。 + } + \questionandanswer[3.22]{ + [ 10 ] <3.5>如果是浮点数,位模式0x0C000000表示的十进制数是什么?使用IEEE 754标准。 + }{ + 这是32位的浮点数,即单精度浮点数。根据 IEEE 754 标准,即1位符号位、8位指数位、23位尾数位。 + $$ + \underbrace{0}_{\text{符号位}} | \underbrace{000\ 1100\ 0}_{\text{指数位}}|\underbrace{000\ 0000\ 0000\ 0000\ 0000\ 0000}_{尾数位} + $$ + 符号位是0,表示正数;指数位是$0001\ 1000$,转化为十进制为24;尾数位是0。 + + 所以位模式0x0C000000表示的十进制数为 + $$ + (-1)^{\text{符号}}\times (1+\text{尾数})\times 2^{\text{指数}-127} = (-1)^{0}\times (1+0.0)\times 2^{24-127} = 2^{-103} + $$ + } + \questionandanswer[3.23]{ + [ 10 ]<3.5>假定采用IEEE 754单精度格式,写出十进制数63.25的二进制表示。 + }{ + $$ + 63.25 = \frac{253}{4} = 1111\ 1101_{2} \times 2^{-2} =1.111\ 1101_{2} \times 2^{5} =(-1)^{0}\times (1+0.111\ 1101)\times 2^{132-127} + $$ + 根据 IEEE 754 标准,单精度格式为1位符号位、8位指数位、23位尾数位,132转化为8位二进制为$1000\ 0100$,所以十进制数63.25的二进制表示为 + $$ + \underbrace{0}_{\text{符号位}}|\underbrace{100\ 0010\ 0}_{\text{指数位}}|\underbrace{111\ 1101\ 0000\ 0000\ 0000\ 0000}_{\text{尾数位}} + $$ + 即 + $$ + 0100\ 0010\ 0111\ 1101\ 0000\ 0000\ 0000\ 0000 + $$ + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第二章作业.tex b/计算机系统结构/作业/第二章作业.tex new file mode 100644 index 0000000..b2debca --- /dev/null +++ b/计算机系统结构/作业/第二章作业.tex @@ -0,0 +1,249 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\setcounter{chapter}{1} +\begin{document} +\chapter{指令:计算机的语言} +\begin{enumerate} + \questionandanswer[2.3]{ + [ 5 ]<2.2,2.3>对于以下C语句,请编写相应的RISC-V汇编代码。假设变量f、g、h、i和j分别分配给寄存器x5、x6、x7、x28和x29。假设数组A和B的基地址分别在寄存器x10和x11中。 + \mint{C}|B[8] = A[i-j];| + }{} + {\kaishu + % 这个minted环境放到自定义的命令里好像一直会报错 + 这里假设数组A和B中的元素都是64位的,即“双字”,即8个字节。 + + \begin{minted}{asm} +sub x30, x28, x29 // i-j,从A开始的双字偏移 +slli x30, x30, 3 // (i-j)*8, 从A开始的字节偏移 +add x30, x30, x10 // A[i-j]的地址 +ld x31, 0(x30) // 加载A[i-j] +sd x31, 64(x11) // 放到B[8],8是双字偏移,转化成字节偏移就是64 + \end{minted} + +% 由于minted用了verbatim,而verbatim的文档中有这样一句话: +% You cannot use the verbatim environment inside user defined commands; +% 可以看到在自己定义的环境里无法使用minted了。 + \begin{verification} + + 使用命令 \mintinline{shell}|riscv64-unknown-linux-gnu-gcc -S main.c -o main.s| 编译,左边是C代码,右边是汇编代码。 + + \begin{minipage}{0.5\linewidth} + \begin{minted}{C} +... +long long *A, *B, i,j; +B[8] = A[i - j]; +... + \end{minted} + \end{minipage} + \begin{minipage}{0.5\linewidth} + \begin{minted}{asm} +... +ld a4,-24(s0) // 加载i +ld a5,-32(s0) // 加载j +sub a5,a4,a5 +slli a5,a5,3 +ld a4,-40(s0) // 加载A +add a4,a4,a5 +ld a5,-48(s0) // 加载B +addi a5,a5,64 +ld a4,0(a4) +sd a4,0(a5) +... + \end{minted} + \end{minipage} + + 比较后可以发现基本差不多,但是最后一步赋值时这里先用了addi偏移64位,再存储,为什么不是直接64(a5)一步存储到从a5偏移64个字节的位置呢? + \end{verification} + } + \questionandanswer[2.4]{ + [ 10 ]<2.2,2.3>对于以下 RISC-V汇编指令,相应的C语句是什么?假设变量f、g、h、i和j分别分配给寄存器x5、x6、x7、x28和x29。假设数组A和B的基地址分别在寄存器x10和x11中。}{} + \begin{minted}[fontfamily=tt]{asm} +slli x30, x5, 3 // x30 = f*8 +add x30, x10, x30 // x30 = &A[f] +slli x31, x6, 3 // x31 = g*8 +add x31, x11, x31 // x31 = &B[g] +ld x5, 0(x30) // f = A[f] + +addi x12, x30, 8 // x12 = (&f + 1) = (原始的f)&A[f + 1] +ld x30, 0(x12) // x30 = A[f + 1] +add x30, x30, x5 // x30 = f + A[f + 1] = (原始的f)A[f] + A[f + 1] +sd x30, 0(x31) // B[g] = A[f] + A[f + 1] + \end{minted} + + {\kaishu + 注释已写在上方,因此此汇编相应的C语句如下: + \mint{C}|B[g] = A[f] + A[f + 1];| + } + \questionandanswer[2.10]{ + 假设寄存器x5和x6分别保存值0x8000000000000000和0xD000000000000000。 + }{} + + \questionandanswer[2.10.1]{ + [ 5 ]<2.4>以下汇编代码中x30的值是多少? + \mint{asm}|add x30, x5, x6| + }{ + 由于后面全是0,只需要考虑最高4位二进制。x5为$8_{16}$即$1000_{2}$,x6为$\mathrm{D}_{16}$即$1101_{2}$,要注意最高位为1代表负数,由于负数已按照补码方式表示,所以可以直接相加。这里两个数都是负数,相加后为$1\ 0101_{2}$,进位忽略,即$0101_{2}=5_{16}$,此时x30的值为 + $$ + 0 \mathrm{x} 5000000000000000 + $$ + } + \questionandanswer[2.10.2]{ + [ 5 ]<2.4> x30中的结果是否为预期结果,或者是否溢出? + }{ + 两个负数相加,结果的最高位为0,表示正数,不是预期结果,即产生了溢出。 + } + \questionandanswer[2.10.3]{ + [ 5 ]<2.4>对于上面指定的寄存器x5和x6的内容,以下汇编代码中x30的值是多少? + \mint{asm}|sub x30, x5, x6| + }{ + 还是只考虑最高4位二进制,最高位为1代表负数,直接相减不方便,可以先按照补码方式转换为相反数再相加,按照补码方式$1101_{2}$的相反数为$0011$,因此$1000_{2}-1101_{2}=1000_{2}+0011_{2}=1011_{2}$,即$\mathrm{B}_{16}$。因此x30的值为 + $$ + 0 \mathrm{x} \mathrm{B}000000000000000 + $$ + } + \questionandanswer[2.10.4]{ + [ 5 ]<2.4> x30中的结果是否为预期结果,或者是否溢出? + }{ + 两个负数相减,结果仍为负数,最高位是1,为预期结果,无溢出。 + } + \questionandanswer[2.10.5]{ + [ 5 ]<2.4>对于上面指定的寄存器x5和x6的内容,以下汇编代码中x30的值是多少? + \mint{asm}|add x30, x5, x6| + \vspace{-1.5em} + \mint{asm}|add x30, x30, x5| + }{ + 第一行就是2.10.1的指令,之后执行第二行,按照最高位来看就是$0101_{2}+1000_{2}=1101_{2}$,即$\mathrm{D}_{16}$,所以x30的值为 + $$ + 0 \mathrm{xD} 000000000000000 + $$ + } + \questionandanswer[2.10.6]{ + [ 5 ]<2.4> x30中的结果是否为预期结果,或者是否溢出? + }{ + 结果的最高位为1,虽然仍是负数但显然不是$\mathrm{x}5+\mathrm{x}6+\mathrm{x}5$的结果,所以不是预期结果,产生了溢出。 + } + \questionandanswer[2.27]{ + [ 5 ]<2.7>将以下循环转换为C代码。假设C语言级的整数i保存在寄存器x5中, x6保存名为result的C语言级的整数,x10保存整数MemArray的基址。 + }{} + \begin{minted}{asm} + addi x6, x0, 0 // result = 0 + addi x29, x0, 100 // x29 = 100 +LOOP: ld x7, 0(x10) // x7 = *MemArray + add x5, x5, x7 // i = i + *MemArray + addi x10, x10, 8 // MemArray++ + addi x6, x6, 1 // result++ + blt x6, x29, LOOP // (result < 100) + \end{minted} + + {\kaishu + 注释已写在上方。根据题意和命名来看, \mintinline{C}{MemArray} 应该是整数数组而不是整数吧,不然总不能 \mintinline{C}{(&MemArray)++} 吧。这里假设整数都是64位的,所以 \mintinline{C}{MemArray++} 对应的汇编代码是增加8个字节,即 \mintinline{asm}{addi x10, x10, 8 }。 + + 根据注释分析出的结果,可以得到C代码: + \begin{minted}{C} + for (int result = 0; result < 100; result++) { + i += *(MemArray++); + } + \end{minted} + + 为什么这里是 \mintinline{C}{result} 作为循环变量而 \mintinline{C}{i} 作为结果啊???但按照题意分析出来就是这样。 + } + + \questionandanswer[2.31]{ + [ 20 ]<2.8>将函数f转换为RISC-V汇编语言。假设g的函数声明是 \mintinline{C}{int g(int a,int b)}。函数f的代码如下: + }{} + \begin{minted}{C} + int f(int a, int b, int c, int d) { + return g(g(a,b), c+d); + } + \end{minted} + {\kaishu + 注意: + % \setlist[2]{label=\alph{enumii}.,listparindent=\parindent} + \begin{enumerate}[label=(\arabic{enumii})] + \item 调用函数时参数应该是从右往左计算的,但是需要保存的局部变量是从左到右保存的; + \item 栈指针应该是16字节(四字)对齐的; + \item 返回地址应该是调用者保存的。 + \end{enumerate} + \begin{minted}{asm} +f: // 保存自己要用到的保存寄存器,好像没有 + // 此时a,b,c,d 分别保存在 x10, x11, x12, x13 中 + addw x5, x12, x13 // 计算c+d,4字节整数的要加w + addi sp, sp, -16 // 移动栈指针,栈指针应该是16字节对齐的? + sd x1, 8(sp) // 保存x1,返回地址 + sd x5, 0(sp) // 保存x5,这里int类型4个字节,由于对齐产生了空位 + // a和b在调用g(a,b)后不会用到,所以不用保存 + // ***开始计算g(a,b) + // a和b已经在x10和x11中所以不需要移动 + jal x1, g // 跳转到g + // g的返回值在x10中,正好是下一次调用的第一个参数 + ld x11, 0(sp) // 恢复x5,直接恢复到x11上避免再移动 + // x1不需要着急恢复,马上就是下一次调用了 + // 只恢复了x5,栈指针要16字节对齐不能移动 + // ***开始计算g(g(a,b), c+d) + // 第二个参数已从x5恢复 + // 第一个参数已经在x10中 + jal x1, g // 跳转到g + // g的返回值在x10中,不需要移动 + ld x1, 0(sp) // 恢复x1 + addi sp, sp, 16 // 恢复栈指针 + // 恢复保存的保存寄存器,好像没有 + jalr x0, x1 // 返回 + \end{minted} + } + \vspace{2em} + + \begin{verification} + 使用命令 \mintinline{shell}|riscv64-unknown-linux-gnu-gcc -S main.c -o main.s| 编译。 + \baselineskip=1.4em + \begin{minted}{asm} +f: +.LFB0: + .cfi_startproc + addi sp,sp,-32 + .cfi_def_cfa_offset 32 + sd ra,24(sp) + sd s0,16(sp) + .cfi_offset 1, -8 + .cfi_offset 8, -16 + addi s0,sp,32 + .cfi_def_cfa 8, 0 + mv a5,a0 + mv a4,a3 + sw a5,-20(s0) + mv a5,a1 + sw a5,-24(s0) + mv a5,a2 + sw a5,-28(s0) + mv a5,a4 + sw a5,-32(s0) + lw a4,-24(s0) + lw a5,-20(s0) + mv a1,a4 + mv a0,a5 + call g + mv a5,a0 + mv a3,a5 + lw a5,-28(s0) + mv a4,a5 + lw a5,-32(s0) + addw a5,a4,a5 + sext.w a5,a5 + mv a1,a5 + mv a0,a3 + call g + mv a5,a0 + mv a0,a5 + ld ra,24(sp) + .cfi_restore 1 + ld s0,16(sp) + .cfi_restore 8 + .cfi_def_cfa 2, 32 + addi sp,sp,32 + .cfi_def_cfa_offset 0 + jr ra + .cfi_endproc + \end{minted} + \end{verification} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第五章作业1.tex b/计算机系统结构/作业/第五章作业1.tex new file mode 100644 index 0000000..a43b7aa --- /dev/null +++ b/计算机系统结构/作业/第五章作业1.tex @@ -0,0 +1,363 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\setcounter{chapter}{4} +\begin{document} +\chapter{大而快:层次化存储} +\begin{enumerate} + \questionandanswer[5.2]{ + cache对于为处理器提供高性能存储器层次结构非常重要。下面是64位存储器地址访问顺序列表,以字地址的形式给出。 + \mint{C}|0x03, 0xb4, 0x2b, 0x02, 0xbf, 0x58, 0xbe, 0x0e, 0xb5, 0x2c, 0xba, 0xbd| + }{} + \begin{enumerate} + \questionandanswer[5.2.1]{ + [ 10 ]<5.3>对于一个有16个cache块、每个块大小为1个字的cache,标识这些引用的二进制字地址、标签和索引。此外,假设cache最初为空,列出每个地址的访问会命中还是失效。 + }{ + 缓存块有16个,也就是$2^{4}$,所以索引的大小为4个位,给出的地址为两个十六进制位,即8位二进制,所以索引实际上就是低4位地址,标签实际上是就是高4位地址,是否命中只需要看在某一行之前是否出现过相同的标签和索引。 + \includexopp[1.5]{5.2.1.1} + } + + \questionandanswer[5.2.2]{ + [ 10 ]<5.3>对于一个有8个cache块、每个块大小为2个字的cache,标识这些引用的二进制字地址、标签、索引和偏移。此外,假设cache最初为空,列出每个地址的访问会命中还是失效。 + }{ + 每个缓存块的大小变大了,缓存块的数量变小了,所以偏移实际上就是把索引的最低位移过来了。同样是否命中只需要看在某一行之前是否出现过相同的标签和索引,并且在这之后没有索引相同但标签不同的访问(不然就被置换了),不需要考虑偏移。这里的命中一列,不命中使用$\times $表示,而命中使用〇表示(用〇比√从视觉上更好区分)。 + \includexopp[1.5]{5.2.2.1} + } + \questionandanswer[5.2.3]{ + [ 20 ]<5.3,5.4>请针对给定的访问顺序优化cache设计。这里有三种直接映射cache的设计方案,每种方案都可以容纳8个字的数据: + \begin{itemize} + \item C1的块大小为1个字 + \item C2的块大小为2个字 + \item C3的块大小为4个字 + \end{itemize} + }{ + \includexopp[1.5]{5.2.3.1} + 可见C2的缓存命中次数最多,所以这里应该选择C2方案。 + } + \end{enumerate} + + \questionandanswer[5.3]{ + 按照惯例, cache 以它包含的数据量来进行命名(例如,4KiB cache可以容纳4KiB的数据),但是cache还需要SRAM来存储元数据,如标签和有效位等。本题研究cache的配置如何影响实现它所需的SRAM总量以及cache 的性能。对所有的部分,都假设cache是字节可寻址的,并且地址和字都是64位的。 + }{} + \begin{enumerate} + \questionandanswer[5.3.1]{ + [ 10 ]<5.3>计算实现每个块大小为2个字的32KiB cache 所需的总位数。 + }{ + 32KiB即$2^{5}\times 2^{10}=2^{15} \text{B}$,每个块大小为2个字即$2\times 64 / 8=2^{4}\text{B}$,由于字节寻址所以偏移为4位,共有$2^{15-4}=2^{11}$个块,因此索引为11位,那么地址为64位,所以标签就是$64-4-11=49$位,有效位为1位。每个块都有一个标签和一个有效位,所以SRAM存储的元数据需要$2^{11}\times (49+1) = 102400$位。再加上存储数据的$2^{15+3}$位,即\boldkai{$\bm{2^{11}\times (49+1) + 2^{15+3} = 364544}$位}。 + } + \questionandanswer[5.3.2]{ + [ 10 ]<5.3>计算实现每个块大小为16个字的64KiB cache所需的总位数。这个cache 比 5.3.1中描述的32KiB cache大多少?(请注意,通过更改块大小,我们将数据量增加了一倍,但并不是将cache的总大小加倍。) + }{ + 64KiB即$2^{6}\times 2^{10}=2^{16}\text{B}$,每个块的大小为16个字即$16\times 64/8=2^{7}$B,所以偏移为7位。 + + 共有$2^{16-7}=2^{9}$个块,索引为9位。 + 标签为$64-7-9 = 48$位,有效位为1位。 + + 所以需要的总位数为$2^{9}\times (48+1)+2^{16+3} = \bm{549376}$位,比5.3.1大了$\frac{549376-364544}{364544} = 0.507022471910112$,即约大了$\bm{50.70\%}$。 + } + \questionandanswer[5.3.3]{ + [ 5 ]<5.3>解释为什么5.3.2中的64KiB cache尽管数据量比较大,但是可能会提供比5.3.1中的cache更慢的性能。 + }{ + 5.3.2中的64KiB cache每个块的大小比5.3.1大,所以每次缓存失效时都需要把更多的数据读入缓存或写回存储,所以失效代价会更大。而且总块数更少,所以命中率会更低。 + } + \questionandanswer[5.3.4]{ + [ 10 ]<5.3,5.4>生成一系列读请求,这些请求需要在32KiB的两路组相联cache上的失效率低于在5.3.1中描述的cache的失效率。 + }{ + 在5.3.1中标签49位,索引11位,偏移4位。若改成两路组相联,那么每个块就只有1个字了,且索引为10位,标签为50位,每个块都各自有一个标签和一个有效位。所以只需要构造索引相同的地址,但是标签不同,即可让5.3.1的直接映射失效,而两路组相联不失效。所以构造的读请求地址如下:\boldkai{0x00000, 0x10000, 0x00000, 0x10000, 0x00000, 0x10000, ……},前两次请求都未命中缓存,但从第三次请求开始,直接映射会一直失效,而两路组相联会一直命中,所以符合要求。 + } + \end{enumerate} + \questionandanswer[5.5]{ + 对一个64位地址的直接映射cache的设计,地址的以下位用于访问cache。 + \begin{center} + \begin{tabular}{ccc} + \toprule + 标签 & 索引 & 偏移 \\ + \midrule + $63 \sim 10$ & $9\sim 5$ & $4\sim 0$ \\ + \bottomrule + \end{tabular} + \end{center} + }{} + + \begin{enumerate} + \questionandanswer[5.5.1]{ + [ 5 ]<5.3>cache 块大小为多少(以字为单位)? + }{ + 偏移是0到4,也就是5位,所以cache块的大小是$2^{5}=32$B,一个字是4B,所以cache块的大小是\boldkai{8}个字。 + } + \questionandanswer[5.5.2]{ + [ 5 ]<5.3 >cache块有多少个? + }{ + 索引从5到9,也就是5位,所以cache块有$2^{5}=\bm{32}$个。 + } + \questionandanswer[5.5.3]{ + [ 5 ]<5.3>这种cache实现所需的总位数与数据存储位之间的比率是多少? + }{ + 标签是10到63,也就是54位,还需要一位有效位,所以实现所需的总位数是$2^{5}\times (54+1)+2^{5}\times 2^{5} \times 8 = 9952$,数据存储位是$2^{5}\times 2^{5}\times 8 = 8192$。所以这种cache实现所需的总位数与数据存储位之间的比率是$\frac{9952}{8192}\times 100\% = \bm{121.484375\%}$。 + } + \questionandanswer[5.5.4]{ + 下表记录了从上电开始cache访问的字节地址。 + \begin{center} + \begin{tabular}{cccccccccccccc} + \toprule + 十六进制 & 00 & 04 & 10 & 84 & E8 & A0 & 400 & 1E & 8C & C1C & B4 & 884 \\ + \midrule + 十进制 & 0 & 4 & 16 & 132 & 232 & 160 & 1024 & 30 & 140 & 3100 & 180 & 2180 \\ + \bottomrule + \end{tabular} + \end{center} + [ 20 ]<5.3>对每一次访问,列出:它的标签、索引和偏移;指出命中还是失效;替换了哪个字节(如果有的话)。 + }{ + \includexopp[1.5]{5.5.4.1} + + 图中的Address表示十六进制的地址,Tag为标签,,Index为索引,Offset为偏移,Hit列中勾表示命中,叉表示失效;Sub表示替换的字节地址范围。 + } + \questionandanswer[5.5.5]{ + [ 5 ]<5.3>命中率是多少? + }{ + 12次访问中有4次命中,所以命中率为$\frac{1}{3} \approx \bm{33.33}\%$。 + } + \questionandanswer[5.5.6]{ + [ 5 ]<5.3>列出cache的最终状态,每个有效表项表示为<索引,标签,数据>的记录。例如: + \mint{C}|<0, 3, Mem[0xC00]-Mem[0xC1F]| + }{} + {\kaishu + 对于某个索引,从后往前看Index,首次找到这个索引的地方所在的标签即为最终状态的标签,之后把偏移全填为0,再把地址转成十六进制(已按4位一组用蓝色线分隔),即为起始地址;把偏移量全填为1,再把地址转成十六机制,即为结束地址。 + + 例如,对于0号索引,最后一次出现是在地址C1C的地方,它的标签为11,也就是十六进制的3。之后看这一行的地址为 11\!|\!00 000\!|\!1 1100,将偏移量全填成0,也就是 11\!|\!00 000\!|\!0 0000,这就是0xC00,将偏移量全填成1,也就是 11\!|\!00 000\!|\!1 1111,这就是 0xC1F,所以结果为 \mintinline{C}{<0, 3, Mem[0xC00]-Mem[0xC1F]} 。 + + 所以cache的最终状态如下: + \begin{minted}{C} + <0, 3, Mem[0xC00]-Mem[0xC1F]> + <4, 2, Mem[0x880]-Mem[0x89F]> + <5, 0, Mem[0x0A0]-Mem[0x0BF]> + <7, 0, Mem[0x0E0]-Mem[0x0FF]> + \end{minted} + } + \end{enumerate} + + \questionandanswer[5.7]{ + 考虑以下的程序和cache行为: + \begin{center} + \begin{tabularx}{\linewidth}{ZZZZZ} + \toprule + 每1000条指令的数据读次数 & 每1000条指令的数据写次数 & 指令cache失效率 & 数据cache失效率 & 块大小(字节) \\ + \midrule + 250 & 100 & 0.30\% & 2\% & 64 \\ + \bottomrule + \end{tabularx} + \end{center} + }{} + \begin{enumerate} + \questionandanswer[5.7.1]{ + [ 10 ]<5.3,5.8>假设一个带有写直达、写分配cache的CPU实现了2的CPI,那么RAM和cache之间的读写带宽(用每个周期的字节数进行测量)是多少?(假设每个失效都会生成一个块的请求。) + }{ + CPI为2,每条指令2个周期,那么每个周期就是0.5条指令,那么指令的读带宽就是$0.5\times 0.30\% \times 64 = 0.096$字节/周期,而数据的读带宽就是$0.5\times \frac{250}{1000}\times 2\%\times 64 = 0.16$字节/周期。 + % $$ + % 0.5\times 0.30\% \times 64 + 0.5\times \frac{250}{1000}\times 2\%\times 64 = 0.256 \text{字节/周期} + % $$ + + 由于写直达,所以不管是否失效,都需要将某个寄存器的数据写入到RAM中,RISC-V中的寄存器为64位,也就是8个字节,那么写入RAM的带宽为$0.5\times \frac{100}{1000}\times 8 = 0.4$字节/周期。 + + 由于写分配,所以当失效时,需要先(后*)将RAM中的数据放回到寄存器中,这时会产生读带宽$0.5\times \frac{100}{1000}\times 2\%\times 64 = 0.064$字节/周期。 + + (*如果先取回数据,那么需要同时写入cache和RAM;如果后取回数据,那么就只写入RAM,取回时就已经是最新的数据了。) + + 所以总的读带宽为 + $ + 0.096+0.16+0.064 = \bm{0.32} \text{字节/周期} + $, + 总的写带宽为 + $ + \bm{0.4} \text{字节/周期} + $。 + } + \questionandanswer[5.7.2]{ + [ 10 ]<5.3,5.8>对于一个写回、写分配 cache来说,假设替换出的数据cache块中有30\%是脏块,那么为了实现CPI为2,读写带宽需要达到多少? + }{ + 指令的读带宽仍为0.096字节/周期,数据的读带宽仍为0.16字节/周期。但是这里的“写分配”似乎没用?写的时候如果不失效,那cache中就是最新的;如果失效,那先替换旧的块,之后再写入cache,也不会出现分配的情况。 + + 对于写回策略,当写不失效时,不需要在cache与RAM中传输数据。当写失效时,如果被替换的cache块是“脏”块,也就是被修改过,那么需要将这个块写入到RAM中。当读失效时,仍然会产生cache块的替换,所以如果是“脏”块也需要写入RAM。并且这里没有提及缓冲的事,所以认为没有写缓冲,那么写带宽为$0.5\times \left( \frac{250}{1000}+\frac{100}{1000} \right) \times 2\%\times 30\%\times 64 = 0.0672$。 + + 所以总的读带宽为$\bm{0.096}$字节/周期,总的写带宽为$\bm{0.0672}$字节/周期。 + } + \end{enumerate} + + \questionandanswer[5.9]{ + cache块大小(B)可以影响失效率和失效延迟。假设一台机器的基本CPI为1,每条指令的平均访问次数(包括指令和数据)为1.35,给定以下各种不同cache块大小的失效率,找到能够最小化总失效延迟的cache块大小。 + + \begin{center} + \begin{tabularx}{0.8\linewidth}{ZZZZZ} + \toprule + 8:4\% & 16:3\% & 32:2\% & 64:1.5\% & 128:1\% \\ + \bottomrule + \end{tabularx} + \end{center} + }{} + \begin{enumerate} + \questionandanswer[5.9.1]{ + [ 10 ]<5.3>失效延迟为20$\times $B周期时,最优块大小是多少? + }{ + 总失效延迟为$1.35\times \text{失效率}\times 20\times B$周期,所以所求问题为 + $$ + \mathop{\arg\min}_{i} + \quad 1.35\times \text{失效率}_{i}\times 20\times B_i + $$ + $$ + \left\{ \left( B_i, \text{失效率}_{i} \right) \right\} = \{ (8,0.04), (16,0.03), (32,0.02), (64,0.015), (128,0.01) \} + $$ + 枚举可得 + \begin{center} + \begin{tabular}{ccc} + \toprule + $B_i$ & $\text{失效率}_{i}$ & 总失效延迟 \\ + \midrule + 8 & 0.04 & 8.64 \\ + 16 & 0.03 & 12.96\\ + 32 & 0.02 & 17.28\\ + 64 & 0.015 & 25.92\\ + 128 & 0.01 & 34.56\\ + \bottomrule + \end{tabular} + \end{center} + + \boldkai{所以最优块大小是8。} + } + \questionandanswer[5.9.2]{ + [10]<5.3>失效延迟为24+B周期时,最优块大小是多少? + }{ + 总失效延迟为$1.35\times \text{失效率}\times (24+B)$周期,所以所求问题为 + $$ + \mathop{\arg\min}_{i} + \quad 1.35\times \text{失效率}\times (24+B) + $$ + $$ + \left\{ \left( B_i, \text{失效率}_{i} \right) \right\} = \{ (8,0.04), (16,0.03), (32,0.02), (64,0.015), (128,0.01) \} + $$ + 枚举可得 + \begin{center} + \begin{tabular}{ccc} + \toprule + $B_i$ & $\text{失效率}_{i}$ & 总失效延迟 \\ + \midrule + 8 & 0.04 & 1.728\\ + 16 & 0.03 & 1.62 \\ + 32 & 0.02 & 1.512\\ + 64 & 0.015 & 1.782\\ + 128 & 0.01 & 2.052\\ + \bottomrule + \end{tabular} + \end{center} + + \boldkai{所以最优块大小是32。} + } + \questionandanswer[5.9.3]{ + 5.9.3[ 10 ]<5.3>失效延迟为定值时,最优块大小是多少? + }{ + 总失效延迟为$1.35\times \text{失效率}\times \text{定值}$,所以失效率越小,总失效延迟就越小,\boldkai{所以最优块大小是128。} + } + \end{enumerate} + + \questionandanswer[5.10]{ + 本题研究不同cache容量对整体性能的影响。通常, cache访问时间与cache容量成正比。假设主存访问需要70ns,并且在所有指令中有36\%的指令访问数据内存。下表显示了两个处理器P1和P2中每个处理器各自的L1 cache 的数据。 + \begin{center} + \begin{tabular}{cccc} + \toprule + & L1大小 & L1失效率 & L1命中时间 \\ + \midrule + P1 & 2 KiB & 8.0\% & 0.66 ns \\ + P2 & 4 KiB & 6.0\% & 0.90 ns \\ + \bottomrule + \end{tabular} + \end{center} + }{} + \questionandanswer[5.10.1]{ + [ 5 ]<5.4>假设L1命中时间决定Pl和P2的时钟周期时间,它们各自的时钟频率是多少? + }{ + % 设P1的时钟周期频率为C1,CPI为CPI,则 + % % + C_1 \times CPI \times (1+0.36)\times 0.08 \times 70 + % $$ + % C_1\times CPI \times 0.36\% \times 2k = 0.66 + % $$ + P1:$\frac{1}{0.66 \times 10^{-9}} \approx 1.515 \times 10^{9} \text{Hz}=1.515 \text{GHz}$。 + + P2:$\frac{1}{0.90 \times 10^{-9}} \approx 1.111 \times 10^{9} \text{Hz}=1.111 \text{GHz}$。 + } + \questionandanswer[5.10.2]{ + [ 10 ]<5.4>P1和P2各自的AMAT (平均内存访问时间)是多少(以周期为单位)? + }{ + 这里的平均内存访问时间应该是每条指令的,而且是已知产生内存访问的情况下计算的, + % 所以应该为$36\% \times (0.66 + 8\% \times 70) \times 10^{-9}\times \frac{1}{0.66\times 10^{-9}} = 3.41454545454545$ + 所以为 + $$ + \text{P1:}\quad 1+8\% \times \left\lceil \frac{70}{0.66} \right\rceil = 9.56 \text{周期} + $$ + $$ + \text{P2:} \quad 1+6\%\times \left\lceil \frac{70}{0.90} \right\rceil = 5.68 \text{周期} + $$ + } + \questionandanswer[5.10.3]{ + [ 5 ]<5.4>假设基本CPI为1.0而且没有任何内存停顿,那么P1和P2的总CPI是多少?哪个处理器更快?(当我们说“基本CPI为1.0”时,意思是指令在一个周期内完成,除非指令访问或者数据访问导致cache失效。) + }{ + 这里计算的总CPI仍然是每条指令的周期数,但是并没有已知产生内存访问,所以 + $$ + \text{P1:}\quad 1+ 8\% \times \left\lceil \frac{70}{0.66} \right\rceil +36\% \times 8\% \times \left\lceil \frac{70}{0.66} \right\rceil = 12.6416 \text{周期/指令} + $$ + $$ + \text{P2:} \quad 1+ 6\% \times \left\lceil \frac{70}{0.90} \right\rceil + 36\% \times 6\% \times \left\lceil \frac{70}{0.90} \right\rceil = 7.3648 \text{周期/指令} + $$ + \boldkai{所以P2更快。} + } + \questionandanswer[]{ + 对于接下来的三个问题,我们将考虑向P1添加L2 cache(可能弥补其有限的Ll cache容量)。解决这些问题时,请使用上一个表中的Ll cache容量和命中时间。L2失效率表示的是其局部失效率。 + \begin{center} + \begin{tabular}{ccc} + \toprule + L2大小 & L2失效率 & L2命中时间 \\ + \midrule + 1 MiB & 95\% & 5.62 ns \\ + \bottomrule + \end{tabular} + \end{center} + }{} + \questionandanswer[5.10.4]{ + [ 10 ]<5.4>添加L2 cache的P1的AMAT是多少?在使用L2 cache后,AMAT变得更好还是更差? + }{ + $$ + 1+8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times 95\% \times \left\lceil \frac{70}{0.66} \right\rceil = 9.852 \text{周期} + $$ + 显然使用L2 cache后,AMAT变得更差。 + } + \questionandanswer[5.10.5]{ + [ 5 ]<5.4>假设基本CPI为1.0而且没有任何内存停顿,那么添加L2 cache的P1的总CPI是多少? + }{ + $$ + 1+ 8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times 95\% \times \left\lceil \frac{70}{0.66} \right\rceil + 36\% \times \left( 8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times 95\% \times \left\lceil \frac{70}{0.66} \right\rceil \right) = 13.03872 + $$ + } + \questionandanswer[5.10.6]{ + [ 10 ]<5.4>为了使具有L2 cache的P1比没有L2 cache的P1更快,需要L2的失效率为多少? + }{ + 设L2的失效率最大为$x$,则 + $$ + 1+8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times x \times \left\lceil \frac{70}{0.66} \right\rceil = 9.56 + $$ + 解得 + $ x = \frac{98}{107} \approx 0.9159 = 91.59\%$,所以L2的失效率需要小于$91.59\%$。 + } + \questionandanswer[5.10.7]{ + [ 15 ]<5.4>为了使具有L2 cache 的P1比没有L2 cache的P2更快,需要L2的失效率为多少? + }{ + 设L2的失效率最大为$x$,由于涉及到P1和P2,所以这里需要比较的是实际的执行时间,即CPI $\times $ 每条指令执行的时间,由于5.10.1的假设,所以每条指令执行的时间就是L1命中时间。 + $$ + \begin{aligned} + &\left[1+ 8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times x\times \left\lceil \frac{70}{0.66} \right\rceil + 36\% \times \left( 8\% \times \left\lceil \frac{5.62}{0.66} \right\rceil + 8\% \times x\times \left\lceil \frac{70}{0.66} \right\rceil \right) \right] \times 0.66 \\ + &= 7.3648 \times 0.90 \\ + \end{aligned} + $$ + 解得 + $ x = \frac{27719}{40018} \approx 0.6927 = 69.27 \% + $,所以L2的失效率需要小于$69.27\%$。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第五章作业2.tex b/计算机系统结构/作业/第五章作业2.tex new file mode 100644 index 0000000..507c56e --- /dev/null +++ b/计算机系统结构/作业/第五章作业2.tex @@ -0,0 +1,245 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\setcounter{chapter}{4} +\begin{document} +\begin{enumerate} + \questionandanswer[5.11]{ + 本题研究不同cache 设计的效果,特别是将组相联cache 与5.4节中的直接映射cache进行比较。有关这些练习,请参阅下面显示的字地址序列: + \mint{C}|0x03, 0xb4, 0x2b, 0xbe, 0x58, 0xbf, 0x0e, 0x1f, 0xb5, 0xba, 0x2e, 0xce| + }{} + \begin{enumerate} + \questionandanswer[5.11.1]{ + [ 10 ]<5.4>绘制块大小为2字、总容量为48字的三路组相联cache 的组织结构图。图中应有类似于图5-18的样式,还应该清楚地显示标签和数据字段的宽度。 + }{ + \includexopp[1.1]{5.11.1.1} + + 块大小为$2=2^{1}$字,所以地址中的偏移量为1位。$48 \div 3 \div 2 = 8$,所以索引有$8=2^{3}$行,所以地址中的索引有3位。所以标签为$64-3-1 = \bm{60}$位。一个字应该是32位,并且块大小为2字,那么数据字段就是$2\times 32 = \bm{64}$位。 + } + \questionandanswer[5.11.2]{ + [ 10 ]<5.4>从5.11.1中记录cache 的行为。假设cache使用LRU替换策略。对于每一次 cache访问,确定: + \begin{itemize} + \item 二进制字地址。 + \item 标签。 + \item 索引。 + \item 偏移。 + \item 访问会命中还是失效。 + \item 在处理访问后,cache每一路中有哪些标签。 + \end{itemize} + }{ + \includexopp[1.1]{5.11.2.1} + + 图中的Hit(命中)列用蓝色圈表示命中,命中时在上一行会有蓝色框表示命中了哪个缓存。红色下划线表示在这一时刻产生了缓存替换,标记了新的缓存放在哪个位置。 + } + \questionandanswer[5.11.3]{ + [ 5 ]<5.4>绘制块大小为1字、总容量为8字的全相联cache 的组织结构图。图中应有类似于图5-18的样式,还应该清楚地显示标签和数据字段的宽度。 + }{ + \includexopp[1.1]{5.11.3.1} + + 地址是按字索引的,块大小是1字,所以没有偏移量。由于是全相联,所以没有索引位,所以标签为64位。总容量为8字,所以8个块排成一行。数据字段就是块大小即1字 $=$ 32位。 + } + \questionandanswer[5.11.4]{ + [ 10 ]<5.4>从5.11.3中记录cache的行为。假设cache使用LRU替换策略。对于每一次 cache访问,确定: + \begin{itemize} + \item 二进制字地址。 + \item 标签。 + \item 索引。 + \item 偏移。 + \item 访问会命中还是失效。 + \item 在处理访问后,cache每一路中有哪些标签。 + \end{itemize} + }{ + \includexopp[1.1]{5.11.4.1} + + 图中的Hit(命中)列用蓝色圈表示命中,命中时在上一行会有蓝色框表示命中了哪个缓存。红色下划线表示在这一时刻产生了缓存替换,标记了新的缓存放在哪个位置。 + } + \questionandanswer[5.11.5]{ + [ 5 ]<5.4>绘制块大小为2字、总容量为8字的全相联cache 的组织结构图。图中应有类似于图5-18的样式,还应该清楚地显示标签和数据字段的宽度。 + }{ + \includexopp[1.1]{5.11.5.1} + + 块大小为2字,所以偏移量为1位,一个字是32位,所以数据大小为64位。总容量为8字,所以有4个块,全相联所以4个块排成一行,没有索引位,所以标签为$64-1=63$位。 + } + \questionandanswer[5.11.6]{ + [ 10 ]<5.4>从5.11.5中记录cache 的行为。假设cache使用LRU替换策略。对于每一次 cache访问,确定: + \begin{itemize} + \item 二进制字地址。 + \item 标签。 + \item 索引。 + \item 偏移。 + \item 访问会命中还是失效。 + \item 在处理访问后,cache每一路中有哪些标签。 + \end{itemize} + }{ + \includexopp[1.1]{5.11.6.1} + + 图中Tag列中的蓝色线表示4位分隔,便于二进制转十六进制。Hit(命中)列用蓝色圈表示命中,在命中时右侧的蓝色下划线表示命中了哪一路的标签,同时也代表产生了一次访问(相当于LRU把它放到链表最后)。在未命中时右侧的红色下划线表示替换了哪一路的标签,同时也代表产生了一次访问。 + + 所以,对于每一行,填写方法是:先把Tag转成十六进制,再查看Way(这里全相联就是四路组相联,Way表示路)中是否有这个十六进制地址,如果有,表示命中,那就把上一行的Way复制下来,并在命中的地址上划一条蓝色下划线;如果没有,表示未命中,就从这行开始向上查看最近的哪条下划线距离最远(表示最久没访问),那么就替换这个地址,其他地址不变,替换后在这个地址上划一条红色下划线。 + } + \end{enumerate} + + \questionandanswer[5.12]{ + 多级cache是一种重要的技术,可以在克服一级cache提供的有限空间的同时仍然保持速度。考虑具有以下参数的处理器: + \begin{center} + \small + \begin{tabularx}{\linewidth}{ZZZZZZZZ} + \toprule + 无内存停顿的基本CPI & 处理器速度 & 主存访问时间 & 每条指令的 L1 cache 的失效率 * & L2 直接映射 cache 速度 & L2 直接映射 cache 全局失效率 & L2八路组相联速度 & L2八路组相联cache全局失效率 \\ + \midrule + 1.5 & 2GHz & 100ns & 7\% & 12cycles & 3.5\% & 28cycles & 1.5\% \\ + \bottomrule + \end{tabularx} + + *Ll cache失效率是针对每条指令而言的。假设Ll cache的总失效数量(包括指令和数据)为总指令数的7\%。 + \end{center} + }{ + \textcolor{red}{\Large 这题的参考答案有误,答案当成局部失效率计算了。(全局失效率与局部失效率的定义在课本第290页)} + } + \begin{enumerate} + \questionandanswer[5.12.1]{ + [ 10 ]<5.4>使用以下方法计算表中处理器的CPI:仅有Ll cache;使用L2直接映射cache;使用L2八路组相联cache。如果主存访问时间加倍,这些数据会如何变化?(将每个更改作为绝对CPI和百分比更改。)请注意L2 cache可以隐藏慢速内存影响的程度。 + }{ + 先计算主存访问的时钟周期,$2 \times 10^{9} \text{Hz} \times 100 \times 10^{-9} \text{s} = 200 \text{cycles}$。 + + 全局失效率是指访问L2并且L2失效的指令数量与全部指令数量的比值;局部失效率是指访问L2并且L2失效的指令数量与访问L2的指令的数量的比值。 + + + \begin{itemize} + \item 仅有L1 cache时,CPI为$1.5+7\% \times 200 = \bm{15.5}$周期; + \item 使用L2直接映射cache时,CPI为 $1.5+7\% \times 12 + 3.5\% \times 200 = \bm{9.34}$周期; + \item 使用L2八路组相联cache时,CPI为 $1.5+7\% \times 28 + 1.5\% \times 200 = \bm{6.46}$周期。 + \end{itemize} + + 如果主存访问时间加倍, + \begin{itemize} + \item 仅有L1 cache时,CPI为$1.5+7\% \times 400 = \bm{29.5}$周期,增加了$29.5-15.5=\bm{14}$个周期,增加了$14 / 15.5 = \bm{90.3225806451613\%}$; + \item 使用L2直接映射cache时,CPI为 $1.5+7\% \times 12 + 3.5\% \times 400 = \bm{16.34}$周期,增加了$16.34-9.34 = \bm{7}$个周期,增加了$7 / 15.5 = \bm{45.1612903225806\%}$; + \item 使用L2八路组相联cache时,CPI为 $1.5+7\% \times 28 + 1.5\% \times 400 = \bm{9.46}$周期,增加了$9.46-6.46 = \bm{3}$个周期,增加了$3 / 6.46 = \bm{46.4396284829721}\%$。 + \end{itemize} + } + + \questionandanswer[5.12.2]{ + [ 10 ]<5.4>可能有比两级更多的cache层次结构吗?已知上述处理器具有L2直接映射cache,设计人员希望添加一个L3 cache,访问时间为50个时钟周期,并且该cache将具有13\%的失效率。这会提供更好的性能吗?一般来说,添加L3 cache有哪些优缺点? + }{ + 可能有比两级更多的cache层次结构。这里的13\%失效率没有说局部还全局。那么,如果它是全局失效率,那么肯定要比L2的全局失效率低,但是这里它比L2的全局失效率高,所以只能是局部失效率。 + + 那么加入L3 cache后的CPI为:$1.5+7\%\times 12 +3.5\% \times (50 + 13\% \times 200) = 5$周期 $<$ 9.34 周期,所以\boldkai{会}提供更好的性能。 + + 添加L3 cache的优点是能用更小的全局失效率兜底,隐藏慢速内存影响的程度,减小总体的CPI;缺点是一旦全部缓存都失效,必须访问主存时,会产生很大的延迟。 + } + \questionandanswer[5.12.3]{ + [ 20 ]<5.4>在较老的处理器中,例如Intel Pentium或Alpha 21264,L2 cache在主处理器和Ll cache的外部(位于不同芯片上)。虽然这种做法使得大型L2 cache成为可能,但是访问cache 的延迟也变得很高,并且因为L2 cache以较低的频率运行,所以带宽通常也很低。假设512KiB的片外L2 cache 的失效率为4\%,·如果每增加一个额外的512KiB cache能够降低0.7\%的失效率,并且cache 的总访问时间为50个时钟周期,那么cache容量必须多大才能与上面列出的L2直接映射cache的性能相匹配? + }{ + 这里$4\%$的失效率应该为局部失效率。设有$x+1$个512 KiB 的片外L2 cache。那么 + $$ + 1.5+7\%\times 12+3.5\%\times 200 = 1.5 + 7\% \times (50+(4\% - 0.7\% x)\times 200) + $$ + 解得 + $x = - \frac{270}{7} = -38.5714285714286$,但$x$应$\geqslant 0$,所以\boldkai{不存在合适的cache容量与上面列出的L2直接映射cache的性能相匹配。} + } + \end{enumerate} + + \questionandanswer[5.16]{ + 如5.7节所述,虚拟内存使用页表来跟踪虚拟地址到物理地址的映射。本题显示了在访问地址时必须如何更新页表。以下数据构成了在系统上看到的虚拟字节地址流。假设有4KiB页,一个4表项全相联的TLB,使用严格的LRU替换策略。如果必须从磁盘中取回页,请增加下一次能取的最大页码: + \begin{center} + \begin{tabular}{cccccccc} + \toprule + 十进制 & 4669 & 2227 & 13916 & 34587 & 48870 & 12608 & 49225 \\ + \midrule + 十六进制 & 0x123d & 0x08b3 & 0x365c & 0x871b & 0xbee6 & 0x3140 & 0xc049 \\ + \bottomrule + \end{tabular} + \end{center} + TLB + \begin{center} + \begin{tabular}{cccc} + \toprule + 有效位 & 标签 & 物理页号 & 上次访问时间间隔 \\ + \midrule + 1 & 0xb & 12 & 4 \\ + 1 & 0x7 & 4 & 1 \\ + 1 & 0x3 & 6 & 3 \\ + 0 & 0x4 & 9 & 7 \\ + \bottomrule + \end{tabular} + \end{center} + 页表 + \begin{center} + \begin{tabular}{ccc} + \toprule + 索引 & 有效位 & 物理页号/在磁盘中 \\ + \midrule + 0 & 1 & 5 \\ + 1 & 0 & 在磁盘中 \\ + 2 & 0 & 在磁盘中 \\ + 3 & 1 & 6 \\ + 4 & 1 & 9 \\ + 5 & 1 & 11 \\ + 6 & 0 & 在磁盘中 \\ + 7 & 1 & 4 \\ + 8 & 0 & 在磁盘中 \\ + 9 & 0 & 在磁盘中 \\ + a & 1 & 3 \\ + b & 1 & 12 \\ + \bottomrule + \end{tabular} + \end{center} + }{} + \begin{enumerate} + \questionandanswer[5.16.1]{ + [ 10 ]<5.7>对于上述每一次访问,列出: + \begin{itemize} + \item 本次访问在 TLB会命中还是失效。 + \item 本次访问在页表中会命中还是失效。 + \item 本次访问是否会造成缺页错误。 + \item TLB的更新状态。 + \end{itemize} + }{ + 4KiB即$2^{12}$Bytes,所以对于一个十六进制地址,右侧三位十六进制表示页内偏移,左侧一位表示标签。 + \includexopp[1.5]{5.16.1.1} + + \begin{itemize} + \item TLB是否失效,只需要查看是否在上一行的Tag中出现过; + \item 页表是否失效,只需要看标签是否在页表中出现; + \item 如果某个标签在磁盘中,或者不在页表中,都会造成缺页错误; + \item 每次访问后,TLB中的上次访问时间间隔都需要加一(用蓝色表示),如果TLB未命中,则需要替换上次访问时间间隔最大的那一行(用红色表示),不管是否命中都需要把当前访问到的Tag所在的那行的上次访问时间间隔改为0(用红色表示); + \item 题目中的“如果必须从磁盘中取回页,请增加下一次能取的最大页码”的意思是发生缺页错误时,分配的物理页号是当前最大的物理页号加一。 + \item 答案中的last access是相对顺序,每次替换序号最小的一行,而这里是指访问时间间隔,所以每次替换最大的一行。 + \end{itemize} + } + + \questionandanswer[5.16.2]{ + [ 15 ]<5.7>重复5.16.1,但这次使用16KiB页而不是4KiB页。拥有更大页大小的优势是什么?有什么缺点? + }{ + 16KiB = $2^{14}$Bytes,所以右侧14位二进制位表示页内偏移,左侧2位二进制位表示页号。 + \includexopp[1.5]{5.16.2.1} + + 由于标签只有2位,所以一共4行的TLB不会出现很多次置换,这里的上次访问间隔就省略了(直接按照原始的TLB,先置换第4行,再置换第1行,再置换第3行,再置换第2行),每次置换的行仍然用红色表示。 + + 拥有更大页大小的优势是有更高的快表命中率,缺点是会降低内存使用率(产生了更多内零头)。 + } + \questionandanswer[5.16.3]{ + [ 15 ]<5.7>重复5.16.1,但这次使用4KiB页和一个两路组相联TLB。 + }{ + 一个页是4KiB,两个页组成一行。右侧12位表示页内偏移,中间1位表示索引,左侧3位表示标签。页号仍然是左侧4位。 + \includexopp[1.1]{5.16.3.1} + } + + \questionandanswer[5.16.4]{ + [ 15 ]<5.7>重复5.16.1,但这次使用4KiB页和一个直接映射 TLB。 + }{ + 一个页是4KiB,右侧12位表示页内偏移,中间2位表示索引,左侧2位表示标签。页号仍然是左侧4位。 + \includexopp[1.5]{5.16.4.1} + } + + \questionandanswer[5.16.5]{ + [ 10 ]<5.4,5.7>讨论为什么CPU必须使用TLB才能实现高性能。如果没有TLB,如何处理虚拟内存访问? + }{ + 为了便于编写程序,写代码时不需要指定某段数据放在哪个物理地址中,出现了虚拟地址,为了将虚拟地址存放到实际的物理地址中,需要有个表存放这个映射关系,这就是页表,而页表存放在内存中,访问比较慢。但是每次访问虚拟地址时,都需要访问一次页表再访问实际的数据,也就是访问两次内存,所以就出现了TLB(快表)作为页表的缓存,在TLB命中时只需要访问一次内存,从而提升性能。 + + 如果没有TLB,每次虚拟内存访问就需要访问两次内存,第一次访问页表,第二次再访问实际的数据。 + } + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机系统结构/作业/第四章作业.tex b/计算机系统结构/作业/第四章作业.tex new file mode 100644 index 0000000..b99389a --- /dev/null +++ b/计算机系统结构/作业/第四章作业.tex @@ -0,0 +1,288 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} + +\setcounter{chapter}{3} +\begin{document} +\chapter{处理器} +\begin{enumerate} + \questionandanswer[4.7]{ + 假设用来实现处理器数据通路的各功能模块延迟如下所示: + + \noindent{\footnotesize\sffamily + \begin{tabularx}{\linewidth}{ZZZZZZZZZZ} + \toprule + I-Mem / D-Mem & Register File & Mux & ALU & Adder & Single gate & Register Read & Register Setup & Sign extend & Control \\ + \midrule + 250 ps & 150 ps & 25 ps & 200 ps & 150 ps & 5 ps & 30 ps & 20 ps & 50 ps & 50 ps \\ + \bottomrule + \end{tabularx} + } + + 其中,寄存器读延迟指的是,时钟上升沿到寄存器输出端稳定输出新值所需的时间。该延迟仅针对PC寄存器。寄存器建立时间指的是,寄存器的输入数据稳定到时钟上升沿所需的时间。该数值针对PC寄存器和寄存器堆。 + }{} + \begin{enumerate} + \questionandanswer[4.7.1]{ + [ 5 ]<4.4>R型指令的延迟是多少?比如,如果想让这类指令工作正确,时钟周期最少为多少? + }{ + R型指令的步骤如下图所示。其中,在译码阶段,Control的延迟为50ps,Register File的延迟为150ps,Mux的延迟为25ps,由于这三个步骤可以同时执行,所以延迟取最大值,即150ps。在访存(MEM)阶段,由于R型指令不需要访问内存,所以只需要通过一个多路选择器(MUX),所以延迟为25ps。 + \includexopp[1.2]{4.7.1.1} + 因此,延迟为$325+150+200+25+20 = 720$ ps,即如果想让这类指令工作正确,时钟周期最少为$720$ ps。 + } + \questionandanswer[4.7.2]{ + [ 10 ]<4.4>ld指令的延迟是多少?仔细检查你的答案,许多学生会在关键路径上添加额外的寄存器。 + }{ + ld指令的步骤如下图所示,可以观察到在译码步骤中,虽然延迟的组成部分和上一题不一样,但由于Register File的延迟较长,因此总的延迟还是由Register File决定,即150ps。IF、ID、EX步骤的延迟与上一题没有改变,但后面两个步骤有所改变。 + \includexopp[1.2]{4.7.2.1} + 因此,延迟为$325+150+200+275+20 = 970$ ps。 + } + \questionandanswer[4.7.3]{ + [ 10 ]<4.4>sd指令的延迟是多少?仔细检查你的答案,许多学生会在关键路径上添加额外的寄存器。 + }{ + 前三个步骤仍然与之前一样,在MEM中,只需要访问D-Mem,即250 ps,并且没有WB步骤,所以延迟为$325+150+200+250 = 925$ ps。 + } + \questionandanswer[4.7.4]{ + [ 5 ]<4.4> beq指令的延迟是多少? + }{ + 前三个步骤仍然与之前一样,只需要在MEM中加入一个Single gate的延迟,并且没有WB步骤。 + \includexopp[3]{4.7.4.1} + 因此,延迟为$325+150+200+5=680$ ps。 + } + \questionandanswer[4.7.5]{ + [ 5 ]<4.4>I型指令的延迟是多少? + }{ + 与R型指令类似,I型指令只是在ID阶段需要在MUX前加入Sign extend的延迟,但仍然没有Register File的延迟大,所以ID步骤仍然需要150 ps的延迟,所以总延迟仍然为 720 ps。 + } + \questionandanswer[4.7.6]{ + [ 5 ]<4.4>该CPU的最小时钟周期是多少? + }{ + 由于延迟最长的指令为ld指令,所以该CPU的最小时钟周期为ld指令的延迟,即970 ps。 + } + \end{enumerate} + + \questionandanswer[4.8]{ + [ 10 ]<4.4>假设你能设计一款处理器并让每条指令执行不同的周期数。给定指令比例如下表所示,相比图4-21中的处理器,这款新处理器的加速比是多少? + \begin{center} + \begin{tabular}{cccc} + \toprule + R-type/I-type (non-ld) & ld & sd & beq \\ + \midrule + $52\%$ & $25\%$ & $11\%$ & $12\%$ \\ + \bottomrule + \end{tabular} + \end{center} + }{ + R型指令和I型指令没有MEM阶段,ld指令5个阶段都有,sd指令没有WB阶段,beq指令没有MEM和WB阶段。可以认为一个阶段的执行需要一个时钟周期,如果所有指令执行相同的周期数,那么都需要5个时钟周期,而如果每条指令可以执行不同的周期数,那么各类指令的周期数之比为R/I:4/5;ld:1;sd:4/5;beq:3/5。将各类指令的周期比按照指令比例加权平均即可得到周期比: + $$ + \frac{4}{5}\times 0.52+1\times 0.25+\frac{4}{5}\times 0.11+\frac{3}{5}\times 0.12 = 0.826 + $$ + 取倒数即可得到加速比:$\displaystyle \frac{1}{0.826} = \frac{500}{413} \approx 1.21065375302663$ + } + \questionandanswer[4.16]{ + 在本题中将讨论流水线如何影响处理器的时钟周期。假设数据通路的各个流水级的延迟如下: + \begin{center} + \begin{tabular}{ccccc} + \toprule + IF & ID & EX & MEM & WB \\ + \midrule + 250ps & 350ps & 150ps & 300ps & 200ps \\ + \bottomrule + \end{tabular} + \end{center} + 同时,假设处理器执行的指令分布如下: + \begin{center} + \begin{tabular}{cccc} + \toprule + ALU/Logic & Jump/Branch & Load & Store \\ + \midrule + $45\%$ & $20\%$ & $20\%$ & $15\%$ \\ + \bottomrule + \end{tabular} + \end{center} + }{} + \begin{enumerate} + \questionandanswer[4.16.1]{ + [ 5 ]<4.5>在流水化和非流水的处理器中,时钟周期分别是多少? + }{ + 流水化的处理器:按照最长的阶段,即350ps;\\ + 非流水化的处理器:所有阶段延迟之和,即$250+350+150+300+200=1250$ ps。 + } + \questionandanswer[4.16.2]{ + [ 10 ]<4.5 >在流水化和非流水的处理器中,对于ld指令的延迟分别是多少? + }{ + ld指令5个阶段都有,在流水化的处理器中,为$350\times 5 = 1750$ ps;\\ + 非流水化的处理器中,为所有阶段延迟之和,即$250+350+150+300+200=1250$ ps。 + } + \questionandanswer[4.16.3]{ + [ 10 ]<4.5>如果我们将数据通路中的一个流水级拆成两个新流水级,每一个新流水级的延迟是原来的一半,那么我们将拆分哪一级?新处理器的时钟周期是多少? + }{ + 应该拆分最长的一级,即ID阶段,拆分之后最长的阶段延迟为300 ps,所以新处理器的时钟周期是300 ps。 + } + \questionandanswer[4.16.4]{ + [ 10 ]<4.5>假设没有停顿或冒险,数据存储的利用率如何? + }{ + 既然题目中出现了“停顿”“冒险”这种只有在流水化处理器中才会出现的情况,那么说明这里只需要考虑流水化的情况。数据存储对应的是MEM阶段,MEM阶段只需要300ps,但是为了满足流水线,延迟到了350ps,所以MEM阶段的利用率为$\frac{300}{350}$;而在题目给出的指令分布中,只有Load和Store指令会用到数据存储,即$20\%+15\%$,所以数据存储的利用率为 + $$ + \frac{300}{350} \times (0.2+0.15) = 0.3 + $$ + } + \questionandanswer[4.16.5]{ + [ 10 ]<4.5>假设没有停顿或冒险,寄存器堆的写口利用率如何? + }{ + 寄存器堆的写口对应的是WB阶段,WB阶段的利用率为$\frac{200}{350}$;在题目给出的指令分布中,使用到寄存器堆的写口的指令为ALU/Logic和Load,即$45\%+20\%$,所以寄存器堆写口的利用率为 + $$ + \frac{200}{350} \times (0.45+0.2) = \frac{13}{35} \approx 0.371428571428571 + $$ + } + \end{enumerate} + \questionandanswer[4.18]{ + [ 5 ]<4.5>假设初始化寄存器x11为11,x12为22,如果在4.5节中的流水线结构上执行下述代码,寄存器x13和x14中最终为何值?注:硬件不处理数据冒险,编程者需要在必要处插入NOP指令来解决数据冒险。 + }{} + \begin{minted}{asm} + addi x11, x12, 5 + add x13, x11, x12 + addi x14, x11, 15 + \end{minted} + {\kaishu + 显然在硬件不处理数据冒险情况下,执行上述代码会出现数据冒险,以下是示意图,在ID指令旁边标注了实际取出的操作数。 + \includexopp[1.5]{4.18.1} + 所以寄存器x13最终为33,寄存器x14最终为26。 + } + \questionandanswer[4.22]{ + [ 5 ]<4.5>对于如下的RISC-V的汇编片段: + }{} + \begin{minted}{asm} + sd x29, 12(x16) + ld x29, 8(x16) + sub x17, x15, x14 + beqz x17, label + add x15, x11, x14 + sub x15, x30, x14 + \end{minted} + \begin{enumerate} + \questionandanswer[4.22.1]{ + [ 5 ]<4.5>请画出流水线图,说明以上代码会在何处停顿。 + }{ + 在加入停顿之前的流水线图是这样的,显然由于前面的指令的MEM阶段和后面的指令的IF阶段都需要访问存储器,会发生结构冒险。 + \includexopp[1.1]{4.22.1.1} + 加入停顿后流水线图变成了这样: + \includexopp{4.22.1.2} + } + \questionandanswer[4.22.2]{ + [ 5 ]<4.5>是否可通过重排代码来减少因结构冒险而导致停顿的次数? + }{ + 可以,由于只考虑结构冒险(即两条指令在同一个阶段访问寄存器堆或存储器的冒险),可以把第一行的sd指令放到第二三行的ld和sub指令后面,这样就可以减少一个停顿。 + } + \questionandanswer[4.22.3]{ + [ 5 ]<4.5>该结构冒险必须用硬件来解决吗?我们可以通过在代码中插入NOP指令来消除数据冒险,对于结构冒险是否可以相同处理?如果可以,请解释原因。否则,也请解释原因。 + }{ + 不一定要用硬件来解决,可以通过插入NOP指令来消除结构冒险,因为NOP指令相当于一个停顿,只需要把上述的停顿换成NOP指令即可。 + } + \questionandanswer[4.22.4]{ + [ 5 ]<4.5>在典型程序中,大约需要为该结构冒险产生多少个周期的停顿?(使用习题4.8中的指令分布)。 + }{ + 仔细观察可以发现,停顿的产生是由于sd和ld有MEM阶段,会和后续指令的IF阶段冲突,ld和R型指令有WB阶段,会和后续指令的ID阶段冲突,那么可以认为一个ld导致2个停顿,一个sd导致1个停顿,一个R型导致1个停顿。所以大概产生的停顿周期数为: + $$ + 1\times 0.52+2\times 0.25+1\times 0.11 = 1.13 + $$ + 即产生$1.13\times \text{原始时钟周期数}$ 个周期的停顿。 + } + \end{enumerate} + \questionandanswer[4.27]{ + 讨论下述指令序列,假设在一个五级流水的数据通路中执行: + }{} + \begin{minted}{asm} + add x15, x12, x11 + ld x13, 4(x15) + ld x12, 0(x2) + or x13, x15, x13 + sd x13, 0(x15) + \end{minted} + \begin{enumerate} + \questionandanswer[4.27.1]{ + [ 5 ]<4.7>如果没有前递逻辑或者冒险检测支持,请插入NOP指令保证程序正确执行。 + }{} + {\kaishu + \begin{minted}{asm} + add x15, x12, x11 // 在第5个阶段写入x15 + nop + nop + ld x13, 4(x15) // 在第2个阶段读取x15,在第5个阶段写入x13 + ld x12, 0(x2) // 在第2个阶段读取x2,在第5个阶段写入x12 + nop + or x13, x15, x13 // 在第2个阶段读取x13和x15,在第5个阶段写入x13 + nop + nop + sd x13, 0(x15) // 在第2个阶段读取x13和x15 + \end{minted} + } + \questionandanswer[4.27.2]{ + [ 10 ]<4.7>对代码进行重排,插入最少的NOP指令。假设寄存器x17可用来做临时寄存器。 + }{} + {\kaishu + \begin{minted}{asm} + add x15, x12, x11 + nop + nop + ld x13, 4(x15) + ld x12, 0(x2) + nop + or x17, x15, x13 + sd x17, 0(x15) + \end{minted} + } + \questionandanswer[4.27.3]{ + [ 10 ]<4.7>如果处理器中支持前递,但未实现冒险检测单元,上述代码段的执行将会发生什么? + }{ + 不会发生数据冒险,因为在不存在加载后马上使用的情况,第二行加载到x13后在第4行才使用x13,此时已经可以使用前递确保正确执行。 + } + \questionandanswer[4.27.4]{ + [ 20 ]<4.7>以图4-58中的冒险检测和前递单元为例,如果执行上述代码,在前7个时钟周期中,每周期哪些信号会被它们置为有效? + }{ + \includexopp[1.2]{4.27.4.1} + 前递信号如图所示。所以在前7个时钟周期中,有效信号表示如下表: + \begin{center} + \begin{tabular}{cccc} + \toprule + 时钟周期 & 冒险检测 & ForwardA & ForwardB \\ + \midrule + 1 & x & x & x \\ + 2 & x & x & x \\ + 3 & 有效 & 有效 & x \\ + 4 & x & x & x \\ + 5 & 有效 & x & 有效 \\ + 6 & 有效 & 有效 & x \\ + 7 & x & x & x \\ + \bottomrule + \end{tabular} + \end{center} + } + \questionandanswer[4.27.5]{ + [ 10 ]<4.7>如果没有前递单元,以图4-58中的冒险检测逻辑为例,需要为其增加哪些输入和输出信号? + }{ + 第3个周期的前递,需要IF/ID.Rs1 和 ID/EX.Rd的输入信号,ForwardA的输出信号;\\ + 第5个周期的前递,需要IF/ID.Rs2 和 EX/MEM.Rd的输入信号,ForwardB的输出信号;\\ + 第6个周期的前递,需要IF/ID.Rs1 和 ID/EX.Rd的输入信号,ForwardA的输出信号。\\ + 综上所述,需要增加IF/ID.Rs1, IF/ID.Rs2, ID/EX.Rd, EX/MEM.Rd 的输入信号,ForwardA, ForwardB的输出信号。 + } + \questionandanswer[4.27.6]{ + [ 20 ]<4.7>如果使用习题4.26.5中的冒险检测单元,执行上述代码,在前5个时钟周期中,每个周期哪些输出信号会有效? + }{ + \includexopp[1.2]{4.27.4.1} + 前递信号如图所示。所以在前5个时钟周期中,有效信号表示如下表: + \begin{center} + \begin{tabular}{cccc} + \toprule + 时钟周期 & 冒险检测 & ForwardA & ForwardB \\ + \midrule + 1 & x & x & x \\ + 2 & x & x & x \\ + 3 & 有效 & 有效 & x \\ + 4 & x & x & x \\ + 5 & 有效 & x & 有效 \\ + \bottomrule + \end{tabular} + \end{center} + } + \end{enumerate} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/Chapter_1_HW.tex b/计算机网络/Chapter_1_HW.tex new file mode 100644 index 0000000..b6b9998 --- /dev/null +++ b/计算机网络/Chapter_1_HW.tex @@ -0,0 +1,164 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\chapter{计算机网络概述} +\begin{enumerate} + \cnitem[3]{Consider an application that transmits data at a steady rate (for example, the + sender generates an N-bit unit of data every k time units, where k is small and fixed). + Also, when such an application starts, it will continue running for a relatively long + period of time. Answer the following questions, briefly justifying your answer:} + \begin{enumerate} + \item Would a packet-switched network or a circuit-switched network be more + appropriate for this application? Why? + + 电路交换网络更合适,一方面,该应用以稳定的速率传输数据,因此只需要分配固定的频宽或时隙等即可方便实现电路交换的多路复用,而不需要分组交换;另一方面,该应用开始后会持续运行相当长的一段时间,因此不需要分组交换来应对突发情况,此时使用电路交换,不需要分片,也不需要处理,能达到更高的传输效率。 + \item Suppose that a packet-switched network is used and the only traffic in this network + comes from such applications as described above. Furthermore, assume that the sum + of the application data rates is less than the capacities of each and every link. Is some + form of congestion control needed? Why? + + 不需要拥塞控制,注意到“such applications”是复数,说明可能存在多个这样的应用,但由于应用传输速率小于每条连接的传输能力,而拥塞控制是用于在应用传输速率大于连接的传输能力时降低应用传输速率的,所以这时不需要拥塞控制。 + \end{enumerate} + \cnitem[5]{This elementary problem begins to explore propagation delay and transmission + delay, two central concepts in data networking. Consider two hosts, A and B, + connected by a single link of rate $R$ bps. Suppose that the two hosts are separated by + $m$ meters, and suppose the propagation speed along the link is $s$ meters/sec. Host A is + to send a packet of size $L$ bits to Host B.} + \begin{enumerate} + \item Express the propagation delay, $d_{prop}$, in terms of $m$ and $s$. + $$ + d_{prop}=\frac{m}{s}\ \mathrm{second} + $$ + \item Determine the transmission time of the packet, $d_{trans}$, in terms of $L$ and $R$. + $$ + d_{trans}=\frac{L}{R}\ \mathrm{second} + $$ + \item Ignoring processing and queuing delays, obtain an expression for the end-to-end + delay. + $$ + d_{end\_to\_end}=d_{prop}+d_{trans}=(\frac{m}{s}+\frac{L}{R})\ \mathrm{second} + $$ + \item Suppose Host A begins to transmit the packet at time $t = 0$. At time $t = d_{trans}$, + where is the last bit of the packet? + + 最后一个bit刚刚被Host A发出,但Host B还未收到。 + \item Suppose $d_{prop}$ is greater than $d_{trans}$. At time $t = d_{trans}$, where is the first bit of the + packet? + + 第一个bit仍然在传播过程中,未被Host B收到。 + \item Suppose $d_{prop}$ is less than $d_{trans}$. At time $t = d_{trans}$, where is the first bit of the packet? + + 第一个bit已经被Host B收到了。 + + \item Suppose $s = 2.5 \cdot 10^{8}$,$L=100 \mathrm{bits}$,and $R=28 \mathrm{kbps}$. Find the distance $m$ so that $d_{prop}$ equals $d_{trans}$. + + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + d_{prop}&=d_{trans} \\ + \frac{m}{s}&=\frac{L}{R} \\ + \frac{m}{2.5\cdot 10^{8}}&=\frac{100}{28\cdot 10^{3}} \\ + m = 2.5\cdot 10^{8}\times \frac{100}{28\cdot 10^{3}} &= \frac{6250000}{7} \approx 892857.142857143 \quad (\mathrm{meters})\\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \end{enumerate} + \cnitem[10]{Consider the queuing delay in a router buffer (preceding an outbound link). + Suppose all packets are $L$ bits, the transmission rate is $R$ bps, and that N packets + simultaneously arrive at the buffer every $LN/R$ seconds. Find the average queuing + delay of a packet. (Hint: The queuing delay for the first packet is zero; for the second + packet $L/R$; for the third packet $2L/R$. The $N$th packet has already been transmitted + when the second batch of packets arrives.)} + + \begin{proof}[解] + \begin{zhongwen} + $$ + \begin{aligned} + &第i个包的排队延迟为(i-1)\frac{L}{R},每一批共N个包,且各批之间互不影响 \\ + &\therefore 一个包的平均排队延迟为: \\ + &\frac{1}{N}\sum_{i=1}^{N}(i-1)\frac{L}{R}=\frac{L}{NR}\sum_{i=1}^{N}(i-1)=\frac{L}{NR}\frac{N(N-1)}{2}=\frac{L(N-1)}{2R} \\ + \end{aligned} + $$ + \end{zhongwen} + \end{proof} + \cnitem[12]{Consider a packet of length $L$ which begins at end system A and travels over one + link to a packet switch, and travels from the packet switch over a second link to a + destination end system. These two links are connected by one packet switch. Let $d_i$, + $s_i$, and $R_i$ denote the length, propagation speed, and the transmission rate of link $i$, for $i + = 1, 2$. The packet switch delays each packet by $d_{proc}$. Assuming no queuing delays, in + terms of $d_i$, $s_i$, and $R_i,(i = 1,2)$, and $L$, what is the total end-to-end delay for the packet?} + + $$ + d_{end\_to\_end} = d_{proc} + d_{prop}+d_{trans} = d_{proc}+\sum_{i=1}^{2}\frac{d_i}{s_i}+ \sum_{i=1}^{2}\frac{L}{R_i} + $$ + + Suppose now the packet is 1,000 bytes, the propagation speed on both links is + $2.5\cdot 10^{8}$ m/s, the transmission rates of all both links are 1 Mbps, the packet length is + 1,000 bytes, the packet switch processing delay is 1 msec, the length of the first link is + 4,000 km, and the length of the last link is 1,000 km. For these values, what is the + end-to-end delay? + + $$ + \begin{aligned} + d_{end\_to\_end} &= d_{proc} + d_{prop}+d_{trans} = d_{proc}+\sum_{i=1}^{2}\frac{d_i}{s_i}+ \sum_{i=1}^{2}\frac{L}{R_i} \\ + &=1 \cdot 10^{-3}\mathrm{s} + \frac{4000 \cdot 10^{3} \mathrm{m}}{2.5\cdot 10^{8} \mathrm{m/s}}+\frac{1000\cdot 10^{3}\mathrm{m}}{2.5\cdot 10^{8}\mathrm{m/s}} + 2\times \frac{1000 \times 8\ \mathrm{bits}}{1\cdot 10^{6}\mathrm{bits/s}} \\ + &=(1\cdot 10^{-3}+\frac{4000\cdot 10^{3}}{2.5\cdot 10^{8}}+\frac{1000\cdot 10^{3}}{2.5\cdot 10^{8}}+2\times \frac{1000\times 8}{1\cdot 10^{6}})\times 10^{3} \quad \mathrm{ms} \\ + &= 37 \quad \mathrm{ms} \\ + \end{aligned} + $$ + + \cnitem[17]{Consider the throughput example corresponding to Figure 1.16(b). Now + suppose that there are $M$ client-server pairs rather than 10. Denote $R_s$, $R_c$, and + $R$ for the rates of the server links, client links, and network link. Assume all other + links have abundant capacity and that there is no other traffic in the network besides + the traffic generated by the M client-server pairs. Derive a general expression for + throughput in terms of $R_s$, $R_c$, $R$, and $M$.} + \begin{figure}[h] + \centering + \includegraphics{imgs/2023-10-14-21-43-15.png} + \caption{Figure 1.16(b)} + \end{figure} + + 吞吐量为: + $$ + \min \left\{ R_s,R_c,\frac{R}{M} \right\} + $$ + \pagebreak[1] + \cnitem[25]{Consider sending a large file of $F$ bits from Host A to Host B. There are two links + (and one switch) between A and B, and the links are uncongested (that is, no + queuing delays). Host A segments the file into segments of $S$ bits each and adds 40 + bits of header to each segment, forming packets of $L = 40 + S$ bits. Each link has a + transmission rate of $R$ bps. Find the value of $S$ that minimizes the delay of moving the + file from Host A to Host B. Disregard propagation delay.} + + \begin{proof}[解] + \begin{zhongwen} + $$ + 设d_{all}(F,S,R)表示将文件从主机A发送到主机B的全部延迟,即需要求解 + $$ $$ + \mathop{\arg\min}_{S} + \quad d_{all}(F,S,R) + $$ $$ + \begin{aligned} + d_{all}(F,S,R) &= \frac{\left\lceil \frac{F}{S} \right\rceil \times (40+S)}{R} + \frac{(40+S)}{R}\\ + &=\left(\left\lceil \frac{F}{S} \right\rceil + 1\right) \times \frac{40+S}{R} \\ + &=\frac{1}{R}\left( 40\left\lceil \frac{F}{S} \right\rceil +S\left\lceil \frac{F}{S} \right\rceil +40+S \right) \\ + \end{aligned} + $$ $$ + 一般情况下, S\ll F,所以\left\lceil \frac{F}{S} \right\rceil \approx \frac{F}{S},所以 + $$ $$ + \begin{aligned} + d_{all}(F,S,R)&\approx \frac{1}{R}\left(40 \times \frac{F}{S}+S\times \frac{F}{S}+40+S\right)\\ + &=\frac{1}{R}\left(S+\frac{40F}{S}+F+40\right) \\ + &\geqslant \frac{1}{R}\left(2\sqrt{40F}+F+40\right) \\ + &当且仅当S=\sqrt{40F}时,此不等式的等号成立 \\ + \end{aligned} + $$ $$ + \therefore S取\sqrt{40F}时,将文件从主机A发送到主机B的全部延迟最小。 + $$ + \end{zhongwen} + \end{proof} +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/Chapter_2_HW.tex b/计算机网络/Chapter_2_HW.tex new file mode 100644 index 0000000..bf01ed4 --- /dev/null +++ b/计算机网络/Chapter_2_HW.tex @@ -0,0 +1,194 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\setcounter{chapter}{1} +\begin{document} + \chapter{应用层} + \begin{enumerate} + \cnitem[2] Consider an HTTP client that wants to retrieve a Web document at a given URL. + The IP address of the HTTP server is initially unknown. What transport and + application-layer protocols besides HTTP are needed in this scenario? + + \begin{zhongwen} + 首先,客户端需要根据URL中的域名找到IP地址,这需要DNS协议(这是应用层协议),而DNS协议是基于UDP协议的(这是传输层协议)。之后的HTTP协议如果不是HTTP3.0,则是基于TCP协议的(这是传输层协议),如果是HTTP3.0,则是基于UDP协议的(这是传输层协议)。 + + 总结:如果是HTTP3.0,则还需要应用层协议DNS,传输层协议UDP; + 如果不是HTTP3.0,则还需要应用层协议DNS,传输层协议UDP、TCP。 + \end{zhongwen} + + \cnitem[8] Suppose within your Web browser you click on a link to obtain a Web page. The + IP address for the associated URL is not cached in your local host, so a DNS lookup is + necessary to obtain the IP address. Suppose that $n$ DNS servers are visited before your + host receives the IP address from DNS; the successive visits incur an RTT of + RTT$_1$, $\cdots$, RTT$_n$. Further suppose that the Web page associated with the link contains + exactly one object, consisting of a small amount of HTML text. Let RTT$_0$ denote the + RTT between the local host and the server containing the object. Assuming zero + transmission time of the object, how much time elapses from when the client clicks on + the link until the client receives the object? + + \begin{zhongwen} + 首先,需要查询DNS,由于DNS基于UDP,因此需要$\sum_{i=1}^{n}RTT_i$的时间完成DNS查询。之后的网页应该是通过HTTP协议传输,假定这里使用的不是HTTP 3.0,那么这里是基于TCP协议的HTTP协议,因此需要$RTT_0$的时间建立TCP连接,之后请求和响应还需要一个$RTT_0$的时间。 + + 因此总的时间为: + $$ + \sum_{i=1}^{n}RTT_{i} + 2RTT_0 + $$ + \end{zhongwen} + + \cnitem[9] Referring to Problem P8, suppose the HTML file references three very small + objects on the same server. Neglecting transmission times, how much time elapses + with + \begin{enumerate} + \item Non-persistent HTTP with parallel connections? + + \begin{zhongwen} + 每次请求和响应都需要开启一个新的TCP连接,但这些连接可以同时进行,因此需要的时间为: + $$ + \sum_{i=1}^{n}RTT_{i}+2RTT_0+2RTT_0=\sum_{i=1}^{n}RTT_i+4RTT_0 + $$ + \end{zhongwen} + + \item Non-persistent HTTP with no parallel TCP connections? + + \begin{zhongwen} + 每次请求和响应都需要开启一个新的TCP连接,而且这些连接不能同时进行,因此需要的时间为: + $$ + \sum_{i=1}^{n}RTT_{i}+2RTT_0+3\times 2RTT_0=\sum_{i=1}^{n}RTT_i+8RTT_0 + $$ + \end{zhongwen} + + \item Persistent HTTP? + + \begin{zhongwen} + 只开启一个TCP连接,并且在这个TCP连接中,HTTP请求互相不阻塞,也就是说不需要等到前一个HTTP请求收到响应后再发送后一个HTTP请求,由于忽略传输时间,因此可以认为这三个请求同时发出,同时得到响应。但这三个请求还是会依赖于HTML文件的响应,因此在DNS查询后,需要建立一次TCP连接,之后在这个连接上进行两批HTTP的请求和响应,因此总的时间为: + $$ + \sum_{i=1}^{n}RTT_{i}+RTT_0+2RTT_0=\sum_{i=1}^{n}RTT_{i}+3RTT_0 + $$ + \end{zhongwen} + + \end{enumerate} + + \cnitem[11] What is the difference between \textit{MAIL FROM}: in SMTP and \textit{From}: in the mail + message itself? + + \begin{zhongwen} + SMTP中的\textit{MAIL FROM}表示发信的SMTP服务器的地址与发信的用户名,而邮件信息中的\textit{From}是用户自己填写的内容。 + + 也就是说,一封邮件可能经过很多次转发,而SMTP中的\textit{MAIL FROM}就是每次转发时直接发信的服务器和用户名,而邮件信息中的\textit{From}是写信的人。 + + 当然,由于\textit{From}是可以由用户自己编辑的,所以用户也可以填写一个虚假的发信的邮箱地址,而用户就无法在\textit{MAIL FROM}上造假了(除非用户用自己的SMTP服务器)。 + \end{zhongwen} + + \cnitem[15] Consider accessing your e-mail with POP3. + \begin{enumerate} + \item Suppose you have configured your POP mail client to operate in the + \textit{download-and-keep} mode. Complete the following transaction: + + % 这种需要分栏的情况可以用minipage也可以用multicol,具体哪个更好呢? + + \begin{minipage}[H]{0.3\linewidth} + \begin{minted}{text} +C: list +S: 1 498 +S: 2 912 +S: . +C: retr 1 +S: blah blah ... +S: ..........blah +S: . +? +? + \end{minted} + \end{minipage} + {\Huge$\longrightarrow$} + \begin{minipage}[H]{0.3\linewidth} + \begin{minted}{text} + C: list + S: 1 498 + S: 2 912 + S: . + C: retr 1 + S: blah blah ... + S: ..........blah + S: . + C: retr 2 + S: blah blah ... + S: ..........blah + S: . + C: quit + S: +OK POP3 server signing off + \end{minted} + \end{minipage} + + \item Suppose you have configured your POP mail client to operate in the + \textit{download-and-delete} mode. Complete the following transaction: + + \begin{minipage}[H]{0.3\linewidth} + \begin{minted}{text} +S: ..........blah +S: . +? +? + \end{minted} + \end{minipage} + {\Huge$\longrightarrow$} + \begin{minipage}[H]{0.3\linewidth} + \begin{minted}{text} + S: ..........blah + S: . + C: dele 1 + C: retr 2 + S: blah blah ... + S: ..........blah + S: . + C: dele 2 + C: quit + S: +OK POP3 server signing off + \end{minted} + \end{minipage} + + \item Suppose you have configured your POP mail client to operate in the + \textit{download-and-keep} mode. Using your transcript in part (b), suppose you retrieve + messages 1 and 2, exit POP, and then five minutes later you again access POP to + retrieve new e-mail. Suppose that in the five-minute interval no new messages have + been sent to you. Provide a transcript of this second POP session. + + + \begin{minted}{text} + C: list + S: 1 498 + S: 2 912 + S: . + C: retr 1 + S: blah blah ... + S: ..........blah + S: . + C: retr 2 + S: blah blah ... + S: ..........blah + S: . + C: quit + S: +OK POP3 server signing off + \end{minted} + \end{enumerate} + \item Consider query flooding, as discussed in Section 2.6. Suppose that each peer is + connected to at most $N$ neighbors in the overlay network. Also suppose that the + node-count field is initially set to $K$. Suppose Alice makes a query. Find an upper + bound on the number of query messages that are sent into the overlay network. + + \begin{zhongwen} + 每个节点最多向$N$个邻居节点发送查询信息,但是不应向给自己发送查询信息的服务器发送查询信息,因此除了Alice外,每个邻居最多向$N-1$个邻居节点发送查询信息。而Alice因为是查询的发起者,所以最多向$N$个邻居节点发送查询信息。 + + 因此,设Alice发起的查询为第$0$次查询,邻居发送给邻居的邻居为第$1$次查询,依此类推。设$a_i$ $(i\in \mathbb{N})$表示第$i$次查询时新收到查询的邻居数,则$a_{i+1}=a_i\times (N-1)$,且$a_0=N$。这样的查询最多执行$K$轮,那么最多发送的查询信息数也就是所有收到查询的邻居数的总和,因此只需要将每次查询时新收到查询的邻居数求和即可。 + + 因此最多发送的查询信息数为: + $$ + \underbrace{a_0+a_1+a_2+ \cdots}_{K个}=\underbrace{N+N(N-1)+N(N-1)^{2}+ \cdots }_{K个} + $$ + + 可以看到$\{ a_n \}_{n=1}^{\infty}$构成等比数列,所求的值为它的前$K$项求和,因此上式可化为: + $$ + \frac{N(1-(N-1)^{K})}{1-(N-1)}=\frac{N(1-(N-1)^{K})}{2-N} + $$ + \end{zhongwen} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/Chapter_3_HW.tex b/计算机网络/Chapter_3_HW.tex new file mode 100644 index 0000000..2cb50f3 --- /dev/null +++ b/计算机网络/Chapter_3_HW.tex @@ -0,0 +1,229 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +% \definecolor{shadecolor}{RGB}{255,255,255} +\setcounter{chapter}{2} + +\begin{document} + \chapter{传输层} + \begin{enumerate} + \begin{shaded} + \cnitem[14] True or false? + \end{shaded} + \begin{enumerate} + \questionandanswer[]{Suppose Host A is sending a large file to Host B over a TCP connection. If the sequence number for a segment of this connection is m, then the sequence number for the subsequent segment will necessarily be $m+1$.}{ + 错误,下一次连接的序列号应为$m$加上这次发送的数据部分的字节数。 + } + \questionandanswer[]{Host A is sending Host B a large file over a TCP connection. Assume Host B has no data to send Host A. Host B will not send acknowledgments to Host A because Host B cannot piggyback the acknowledgments on data.}{ + 错误,即使没有数据要发送,也要发送ACK报文,否则就违背了可靠传输协议的原则。 + } + \questionandanswer[]{Suppose that the last SampleRTT in a TCP connection is equal to 1 sec. The current value of Timeout Interval for the connection will necessarily be $\geqslant $ l sec.}{ + 正确, + $$ + sRTT = 0.875sRTT + 0.125SampleRTT + $$ + $$ + DevRTT = 0.75DevRTT + 0.25\left\vert SampleRTT - sRTT \right\vert + $$ + $$ + Timeout = sRTT + 4 DevRTT + $$ + + 若在某一时刻,假设$sRTT$和$DevRTT$都非常接近0,而最后一个$SampleRTT$为1秒,则在下一时刻可以计算得到: + $$ + sRTT = 0.125秒 \quad DevRTT = 0.25秒 \quad Timeout = 0.125 + 4 \times 0.25 = 1.125秒 + $$ + + 若$sRTT$增加或者$DevRTT$增加,都会使Timeout增加,因此$Timeout \geqslant 1.125 秒$,所以$Timeout \geqslant 1 秒$正确。 + } + \questionandanswer[]{Suppose Host A is sending Host B a large file over a TCP connection. The number of unacknowledged bytes that A sends cannot exceed the size of the receive buffer.}{ + 正确。 + } + \questionandanswer[]{The size of the TCP RcvWindow never changes throughout the duration of the connection.}{ + 错误,TCP RcvWindow会根据接收端的接收能力变化。 + } + \questionandanswer[]{The TCP segment has a field in its header for Rcvwindow.}{ + 正确。 + } + \questionandanswer[]{Suppose Host A sends one segment with sequence number 38 and 4 bytes of data over a TCP connection to Host B. In this same segment the acknowledgment number is necessarily 42.}{ + 错误,确认序号为下一个希望对方发送给自己的段序号,而发送序号为自己发送给对方的段序号,即前者为B维护的序号,后者为A维护的序号,这两者互不影响。 + } + \end{enumerate} + \questionandanswer[2]{UDP and TCP use 1s complement for their checksums. Suppose you have the following three 8-bit bytes: 01010101,01110000,01001100. What is the 1s + complement of the sum of these 8-bit bytes?(Note that although UDP and TCP use + 16-bit words in computing the checksum,for this problem you are being asked to + consider 8-bit sums.) Show all work. }{ + \begin{center} + \begin{tabular}{rr} + $ $ & $\ 0\ 1\ 0\ 1\ 0\ 1\ 0\ 1$ \\ + $ $ & $\ 0\ 1\ 1\ 1\ 0\ 0\ 0\ 0$ \\ + $+$ & $\ 0\ 1\ 0\ 0\ 1\ 1\ 0\ 0$ \\ + \hline + 直接求和 & $\ 1\ 0\ 0\ 0\ 1\ 0\ 0\ 0\ 1$ \\ + 进位加到末尾 & $\ 0\ 0\ 0\ 1\ 0\ 0\ 1\ 0$ \\ + 取反 & $\ 1\ 1\ 1\ 0\ 1\ 1\ 0\ 1$ + \end{tabular} + \end{center} + + 所以8位校验和是11101101。 + } + + \questionandanswer[-]{Why is it that UDP takes the 1s complement of + the sum; that is, why not just use the sum? }{ + 使用反码后,接收端校验时只需要把整个报文一起进行回卷求和,再取反,若结果为全1,则通过校验;而不需要先把报文中的校验和字段置为0再进行求和回卷取反。 + } + + \questionandanswer[-]{With the 1s complement scheme, how does the receiver detect errors?}{ + 接收端对整个报文和发送方进行相同的操作,包括校验和本身,即将报文分割成16位的字,若报文为奇数个字节(即分割到最后不足16位),则将最后一个字节在末尾增加0补充到16位;之后将这些16位的字求和,将超过16位的高位部分(即进位)加到低16位的部分;再进行取反,此时结果如果为全1,则说明校验正确,否则说明校验错误。 + } + + \questionandanswer[-]{Is it possible that a 1-bit error will go undetected? How + about a 2-bit error?}{ + 1位的错误必定会被发现,因为1位的错误会导致最终的校验结果中的其中一位的1变为0,而2位的错误可能不被发现。 + } + + \questionandanswer[5]{Consider our motivation for correcting protocol rdt2.1. Show that the receiver, shown in the following figure, when operating with the sender shown in Figure 3.11, can lead the sender and receiver to enter into a deadlock state,where each is waiting for an event that will never occur. + + \noindent\includegraphics[width=0.9\linewidth]{imgs/2023-12-08-20-44-19.png} + \includegraphics[width=0.9\linewidth]{imgs/2023-12-08-20-46-36.png} + }{ + 首先,rdt2考虑的是具有比特差错信道上的可靠数据传输(也就是不会丢包)。那么考虑如下情况,发送端发送了序号0的包,接收端接收,校验正确,返回ACK并转换状态,但ACK出错,发送端校验错误后重新发送序号0的包,此时接收端已经处于等待序号1的包的状态,它接收到序号0的包,会返回NAK,发送端收到NAK,又会重发序号0的包,这样就会导致死锁,发送端一直发送序号0的包,接收端一直返回NAK。 + } + + \questionandanswer[22]{Consider the GBN and SR protocols. Suppose the sequence number space is of + size k. What is the largest allowable sender window that will avoid the occurrence of + problems such as that in Figure 3.27 for each of these protocols? + + \noindent\includegraphics[width=1\linewidth]{imgs/2023-12-08-21-18-23.png} + }{ + 对于GBN协议,最大的发送端窗口大小为$2^{k}-1$;对于SR协议,最大的发送端窗口大小为$2^{k-1}$。 + } + + \begin{shaded} + \cnitem[24]{P24.Consider transferring an enormous file of $L$ bytes from Host A to Host B. (P24 MSS 为 536 字节) + } + \end{shaded} + \begin{enumerate} + \questionandanswer[]{What is the maximum value of $L$ such that TCP sequence numbers are not exhausted? Recall that the TCP sequence number field has 4 bytes.\label{a}}{ + 由于TCP协议的序号有4个字节,那么序号范围就是$0\sim 2^{4\times 8}-1$,因此如果需要TCP的序号不耗尽,L最大取$2^{4\times 8} = 4294967296 = 4 \mathrm{Gi}$。\\ + (1Gi=1024Mi=1048576Ki=1073741824) + } + \questionandanswer[]{For the $L$ you obtain in (\ref{a}) , find how long it takes to transmit the file. Assume that a total of 66 bytes of transport, network, and data-link header are added to each segment before the resulting packet is sent out over a 10 Mbps link. Ignore flow control and congestion control so A can pump out the segments back to back and continuously.}{ + 一共要分$\displaystyle \frac{L}{MSS}=\frac{2^{32}}{536}$个段,每段的长度为$536+66 = 602$ (bytes),于是需要传输的数据的总长度为 ($\displaystyle \frac{2^{32}}{536}\times 602$) bytes。 + + 所以传输文件需要的时间为 + $$ + \frac{\left( \frac{2^{32}}{536}\times 602 \right) \mathrm{bytes}}{10 \mathrm{Mbps}}=\frac{\left( \frac{2^{32}}{536}\times 602 \times 8\right) \mathrm{bit}}{(10\times 2^{20})\mathrm{bit}/\mathrm{s}} = \frac{1232896}{335} \approx 3680.28656716418 秒 \approx 61.338 分钟 + $$ + } + \end{enumerate} + + \begin{shaded} + \cnitem[32]{Consider Figure 3.58. + + \noindent\includegraphics[width=0.9\linewidth]{imgs/2023-12-09-09-01-01.png} + + Assuming TCP \textbf{Reno} is the protocol experiencing the behavior shown above, answer the following questions. In all cases,you should provide a short discussion justifying your answer. + } + \end{shaded} + \begin{enumerate} + \questionandanswer[]{What is the value of Threshold \textit{ssthresh} at the 18th transmission round? + }{ + 第16轮时的拥塞窗口为42,第17轮拥塞窗口和\textit{ssthresh}都变为42的一半即21,第18轮\textit{ssthresh}未改变,因此还是21。 + } + \questionandanswer[]{What is the value of Threshold \textit{ssthresh} at the 24th transmission round? + }{ + 第22轮时的拥塞窗口为26,第23轮\textit{ssthresh}变为26的一半即13,第24轮\textit{ssthresh}未改变,因此还是13。 + } + \questionandanswer[]{Identify the intervals of time when TCP slow start is operating. + }{ + 即图中拥塞窗口大小指数增长的部分,即第1到6轮、第23到26轮。 + } + \questionandanswer[]{Assuming a packet loss is detected after the 26th round by the receipt of a triple duplicate ACK,what will be the values of the congestion window size and of Threshold \textit{ssthresh}? + }{ + 第26轮原先的拥塞窗口大小为8,\textit{ssthresh}为13,收到三个重复ACK后后拥塞窗口大小变为8的一半即4,\textit{ssthresh}也变为8的一半即4。 + } + \questionandanswer[]{After the 16th transmission round,is segment loss detected by a triple duplicate ACK or by a timeout? + }{ + 第17轮的拥塞窗口变为第16轮的一半,这说明发送端收到了三个重复的ACK。 + } + \questionandanswer[]{After the 22nd transmission round, is segment loss detected by a triple duplicate ACK or by a timeout? + }{ + 第23轮的拥塞窗口变为1,这说明发送端通过超时检测到了丢包。 + } + \questionandanswer[]{Identify the intervals of time when TCP congestion avoidance is operating. + }{ + 即图中拥塞窗口大小线性增长的部分,即第6到16轮、第17到第22轮。 + } + \questionandanswer[]{What is the initial value of Threshold \textit{ssthresh} at the first transmission round? + }{ + 在第7轮时由慢启动状态转换到拥塞避免状态,此时的拥塞窗口大小为32,这说明第1轮初始的\textit{ssthresh}为32. + } + \questionandanswer[]{During what transmission round is the 70th segment sent? + }{ + 每一轮的拥塞窗口大小为这一轮发的段的数量,将它们按顺序列出来: + $$ + 1,2,4,8,16,32,33, \cdots \cdots + $$ + 则可以注意到前6轮发的段的数量为$1+2+4+8+16+32 = 63$,前7轮发的段的数量为$1+2+4+8+16+32+33 = 96$,而$63<70<96$,因此第70个段在第7轮发出。 + } + \questionandanswer[]{Suppose TCP \textbf{Tahoe} is used (instead of TCP \textbf{Reno}), and assume that triple duplicate ACKs are received at the 16th round. What are the \textit{ssthresh} and the congestion window size at the 19th round? + }{ + 第16轮原先的拥塞窗口为42,若使用TCP \textbf{Tahoe},则收到三个重复的ACK后,第17轮的\textit{ssthresh}变为42的一半即21,拥塞窗口大小变为1。因此第19轮的\textit{ssthresh}为21,拥塞窗口大小为4。 + } + \questionandanswer[]{Again suppose TCP \textbf{Tahoe} is used, and there is a timeout event at 22nd round.How many packets have been sent out from 17th round till 22nd round, inclusive? + }{ + 第17轮到第22轮的拥塞窗口大小依次为$1,2,4,8,16,21$,每一轮的拥塞窗口大小为这一轮发的段的数量,第22轮的超时事件只会影响第22轮以后的发的包的数量而不会影响第22轮发的包的数量,因此从第17轮(包括)到22轮(包括)发的包的数量为: + $$ + 1+2+4+8+16+21 = 52 + $$ + } + \end{enumerate} + \begin{shaded} + \item[] 【2010统考真题】主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B。若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000B,则此时主机甲还可以向主机乙发送的最大字节数是(B). + + % \tabcolsep=2em + % \resizebox{\textwidth}{\linewidth}{ + \noindent\begin{tabular*}{0.9\linewidth}{@{}@{\extracolsep{\fill}}llll@{}} + A. 1000 & B. 2000 & C. 3000 & D. 4000 \\ + \end{tabular*} + \end{shaded} + + \begin{zhongwen} + 主机甲接收到主机乙发送的第一个段的确认段后,发现接收窗口小于当前拥塞窗口,因此窗口暂停滑动直到2000B(接收窗口大小)以前的数据都已确认,而原先的发送窗口大小为4000B,发送了两个最大段(即2000B),因此还可以发2000B的字节数。 + + 所以此题选B。 + \end{zhongwen} + + \begin{shaded} + \item[] 【2020统考真题】若主机甲与主机乙建立TCP连接时,发送的SYN段中的序号为1000,在断开连接时,甲发送给乙的FIN段中的序号为5001,则在无任何重传的情况下,甲向乙已经发送的应用层数据的字节数为(C). + + \noindent\begin{tabular*}{0.9\linewidth}{@{}@{\extracolsep{\fill}}llll@{}} + A. 4002 & B. 4001 & C. 4000 & D. 3999 \\ + \end{tabular*} + \end{shaded} + + \begin{zhongwen} + 由题意可知,是主机甲主动发起连接,并且主机甲主动断开连接。主机甲发送的SYN段不应携带应用层数据,之后主机乙向主机甲发送ACK+SYN,主机甲再发送ACK段时可以携带应用层数据,此时这个携带数据的ACK的序号为1001。而甲发送给乙的FIN段(序号为5001)也不应携带应用层数据,所以携带应用层数据的字节序号为1001到5000,因此发送的应用层数据的字节数为 $5000-1001+1=4000$ 。 + + 所以此题选C。 + \end{zhongwen} + + \begin{shaded} + \item[] 【2021统考真题】设主机甲通过TCP向主机乙发送数据,部分过程如下图所示。甲在$t_0$时刻发送一个序号seq=501、封装200B数据的段,在$t_1$时刻收到乙发送的序号seq=601、确认序号ack\_seq=501、接收窗口rcvwnd= 500B的段,则甲在未收到新的确认段之前,可以继续向乙发送的数据序号范围是(A). + + \begin{center} + \includegraphics[width=0.5\linewidth]{imgs/2023-12-09-10-33-30.png} + \end{center} + + \noindent\begin{tabular*}{0.9\linewidth}{@{}@{\extracolsep{\fill}}llll@{}} + A. $501\sim 1000$ & B. $601\sim 1100$ & C. $701\sim 1000$ & D. $801\sim 1100$ \\ + \end{tabular*} + \end{shaded} + + \begin{zhongwen} + 此题中,主机甲初始的发送窗口大小未知,那么只能根据甲在$t_1$时刻收到乙发送的段来判断,此段中确认序号为501,所以甲需要重发序号为501的段;接收窗口为500B,则说明甲在收到新的确认段之前,最多只能发送500B的应用层数据,因此甲可以继续向乙发送的数据序号范围是$501\sim 1000$。 + + 所以此题选A。 + \end{zhongwen} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/Chapter_4_HW.tex b/计算机网络/Chapter_4_HW.tex new file mode 100644 index 0000000..836cb5d --- /dev/null +++ b/计算机网络/Chapter_4_HW.tex @@ -0,0 +1,234 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +% \definecolor{shadecolor}{RGB}{255,255,255} +\setcounter{chapter}{3} +\setlist[1]{label=\arabic{enumi},listparindent=\parindent} + +% 失败,无法不使用临时文件将字符串转为token list +% \ExplSyntaxOn +% % \cs_set:Nn \myexpand:n {#1} +% % \debug_on:n {all} +% \RenewEnviron{zhongwen}{ +% % \seq_new:N \temp +% % \tl_new:N \temp +% \tl_set:NV \temp {\BODY} % 看来LaTeX3也有字符串当作序列的概念 +% \regex_replace_all:nnN{[^\x00-\xff]+}{\\textit\{\0\}}{\temp} +% % 应该可以使用\ifwindows和\iflinux来判断临时文件目录从而把临时文件放到临时文件目录里的 +% % \immediate\openout0=\jobname.zhongwen +% % \immediate\write0{\temp} +% % \immediate\closeout0 +% % \ExplSyntaxOff +% % % \input{\jobname.zhongwen} +% % \temp\csname \temp \endcsname +% % \exp_args:NV \myexpand:n {\temp} +% % \tl_use:N \temp +% % \temp +% % \exp_args_generate:n +% % \str_map_tokens:Nn +% \tlrep +% \tl_set:NV \l_tmpa_tl \temp +% \tl_use:N \l_tmpa_tl +% % \text_expand:n \temp +% % \ExplSyntaxOn +% % 好像没法删除临时文件,编译时会提示 rm: cannot remove '第十周作业.zhongwen': No such file or directory 但不影响编译,那还不如不删除了,少执行一个命令还能再快一点 +% % \DeleteFile{\jobname.zhongwen} +% } +% \ExplSyntaxOff + +\begin{document} + \chapter{网络层} + \begin{enumerate} + % \item[R13.] + \Rquestionandanswer[13]{Suppose Host A sends Host B a TCP segment encapsulated in an IP datagram. + When Host B receives the datagram, how does the network layer in Host B know it + should pass the segment (that is, the payload of the datagram) to TCP rather than to + UDP or to something else?}{ + 在IP协议的头部,有一个字段指示了高层协议的类型,主机B的网络层根据这个字段的值决定它应该把这个IP报文负载的段传递给哪个高层协议。 + } + \Rquestionandanswer[16]{Suppose an application generates chunks of 40 bytes of data every 20 msec, and + each chunk gets encapsulated in a TCP segment and then an IP datagram. What + percentage of each datagram will be overhead, and what percentage will be + application data?}{ + 假设TCP层和IP层均没有额外的选项字段,那么TCP的头部为20字节,IP的头部为20字节,应用层总长度也就是每个chunk为40字节,那么每个报文的头部占比为$\frac{20+20}{20+20+40}\times 100\%=50\%$,应用层占比为$\frac{40}{20+20+40}\times 100\%=50\%$。 + } + \Rquestionandanswer[20]{Suppose you purchase a wireless router and connect it to your cable modem. + Also suppose that your ISP dynamically assigns your connected device (that is, your + wireless router) one IP address. Also suppose that you have five PCs at home that use + 802.11 to wirelessly connect to your wireless router. How are IP addresses assigned to + the five PCs? Does the wireless router use NAT? Why or why not?}{ + 在没有进行特别设置的情况下,五台个人电脑的IP地址由无线路由器提供,并且是局域网IP地址,但为了使局域网中的电脑能访问互联网,路由器需要使用NAT(网络地址转换),将局域网内其他设备的IP和端口映射到路由器的IP和端口,从而使局域网中的其他设备都能访问互联网。 + } + \Rquestionandanswer[22]{Compare and contrast link-state and distance-vector routing algorithms.}{ + \noindent\begin{tabular}{c|p{0.5\linewidth-5em}|p{0.5\linewidth-5em}} + \toprule + 比较项目 & 链路状态(Link-State)算法 & 距离矢量(Distance-Vector)算法 \\ + \hline + 原理 & 每个节点与所有其他节点广播交流,只告知与其直接相连链路的费用。 & 每个节点只与邻居互相交流,得到邻居的新费用,并告知邻居自己的当前最低费用。\\ + \hline + 报文复杂性 & 知道网络每条链路的费用,需发送$\mathrm{O}(nE)$个报文;当一条链路的费用变化时,必须通知所有节点。 & 迭代时,在两个直接相连邻居之间交换报文;收敛时间受许多因素影响;当链路费用改变时,只有该链路相连的节点的最低费用路径发生改变时,才传播已改变的链路费用。\\ + \hline + 收敛速度 & 需要$\mathrm{O}(nE)$个报文和$\mathrm{O}(n^{2})$的搜寻。 & 收敛较慢。可能会遇到选路回环,或计数到无穷的问题。 \\ + \hline + 健壮性 & 当一台路由器发生故障、操作错误或受到破坏时,路由器向其连接的一条链路广播不正确费用。路由计算基本独立(仅计算自己的转发表),有一定健壮性。 & 当一台路由器发生故障、操作错误或受到破坏时,一个节点可向任意或所有目的节点发布其不正确的最低费用路径。一个节点的计算值会传递给它的邻居,并间接地传递给邻居的邻居。一个不正确的计算值会扩散到整个网络。\\ + \bottomrule + \end{tabular} + } + \Rquestionandanswer[24]{Why are different inter-AS and intra-AS protocols used in the Internet?}{ + \noindent + 策略:\\ + 自治系统之间:管理员想要控制网络流量如何流动以及其他流量是否能通过它的网络。\\ + 自治系统内部:单个管理员,因此不需要这些决策。 + + \noindent + 规模:\\ + 层次化的路由减少了路由表的大小,减少了更新路由表的流量。 + + \noindent + 性能:\\ + 自治系统内部:能够专注于性能。\\ + 自治系统之间:策略可能比性能更重要。 + } + \Rquestionandanswer[25]{Consider Figure 4.33. Starting with the original table in D, suppose that D + receives from A the following advertisement: + + \noindent\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}ccc} + \toprule + Destination Subnet & Next Router & Number of Hops to Destination \\ + \midrule + z & C & 10 \\ + w & --- & 1 \\ + x & --- & 1 \\ + \dots & \dots & \dots \\ + \bottomrule + \end{tabular*} + \includegraphics[width=1\linewidth]{imgs/2023-12-23-15-47-18.png} + Will the table in D change? If so how? + }{ + D的路由表不会改变。 + + 首先,可以看出A向D提供了A分别到z,w,x的下一跳和总跳数,那么之后D会查看自己的路由表。D原先记录的到z的总跳数是7,但如果经过A再到z,那就会是$1+10=11$,比原先的跳数还多,因此不会更新z这一行;D原先记录的到w的总跳数是2,从A收到的信息来看,经过A再到w的跳数就是$1+1=2$,和原来一样,因此也不会更新w这一行;D原先记录的到x的跳数是1,已经最少了,不需要更新。 + + 所以D收到的A的前三行信息都不会导致D更新,第三行以下的信息也没给出,因此可以认为D的路由表不会改变。 + } + \Pquestionandanswer[11]{Consider a datagram network using 8-bit host addresses. Suppose a router uses longest prefix matching and has the following forwarding table: + + \noindent\begin{tabularx}{\linewidth}{ZZ} + \toprule + Prefix Match & Interface \\ + \midrule + 1 & 0 \\ + 11 & 1 \\ + 111 & 2 \\ + otherwise & 3 \\ + \bottomrule + \end{tabularx}\\ + For each of the four interfaces, give the associated range of destination host addresses and the number of addresses in the range. + }{ + \noindent\begin{tabularx}{\linewidth}{ZZZ} + \toprule + 接口 & 目的主机地址关联范围 & 目的主机地址数 \\ + \midrule + 0 & 1000 0000 - 1011 1111 & $2^{6}=64$\\ + 1 & 1100 0000 - 1101 1111 & $2^{5}=32$\\ + 2 & 1110 0000 - 1111 1111 & $2^{5}=32$\\ + 3 & 0000 0000 - 0111 1111 & $2^{7}=128$\\ + \bottomrule + \end{tabularx} + + 检查一下,目的主机地址数总和为$64+32+32+128 = 256 = 2^{8}$,正确。 + } + \Pquestionandanswer[13]{Consider a subnet with prefix 101.101.101.64/26. Give an example of one IP + address (of form xxx.xxx.xxx.xxx) that can be assigned to this network.}{ + 直接把表示网络号的IP地址加一即可,即 101.101.101.65。 + } + \Pquestionandanswer[-]{Suppose an + ISP owns the block of addresses of the form 101.101.128/17. Suppose it wants to + create four subnets from this block, with each block having the same number of IP + addresses. What are the prefixes (of form a.b.c.d/x) for the four subnets?}{ + 由于子网掩码为$17=8+8+1$位,所以IP地址的前两个部分以及第三个部分的第一位表示网络号,因此IP地址第三个部分还有$2^{8-1}=128$个数字可以使用,要分成4个子网,$128\div 4=32$,$17+2=19$ + + $128+0\times 32=128$, $128+1\times 32=160$, $128+2\times 32 = 192$, $128+3\times 32 = 224$。 + + 所以四个子网的前缀为 + \begin{center} + 101.101.128.0/19\\ + 101.101.160.0/19\\ + 101.101.192.0/19\\ + 101.101.224.0/19\\ + \end{center} + } + \Pquestionandanswer[14]{Consider a datagram network using 8-bit host addresses. Suppose a router uses + longest prefix matching and has the following forwarding table: + + \noindent\begin{tabularx}{\linewidth}{ZZ} + \toprule + Prefix Match & Interface \\ + \midrule + 00 & 0 \\ + 01 & 1 \\ + 10 & 2 \\ + 11 & 3 \\ + \bottomrule + \end{tabularx} + For each of the four interfaces, give the associated range of destination host addresses and the number of addresses in the range. + }{ + \noindent\begin{tabularx}{\linewidth}{ZZZ} + \toprule + 接口 & 目的主机地址关联范围 & 目的主机地址数 \\ + \midrule + 0 & 0000 0000 - 0011 1111 & $2^{6}=64$\\ + 1 & 0100 0000 - 0111 1111 & $2^{6}=64$\\ + 2 & 1000 0000 - 1011 1111 & $2^{6}=64$\\ + 3 & 1100 0000 - 1111 1111 & $2^{6}=64$\\ + \bottomrule + \end{tabularx} + } + \Pquestionandanswer[18]{In this problem we’ll explore the impact of NATs on P2P applications. Suppose a + peer with username Arnold discovers through querying that a peer with username + Bernard has a file it wants to download. Also suppose that Bernard and Arnold are + both behind a NAT. Try to devise a technique that will allow Arnold to establish a + TCP connection with Bernard without application-specific NAT configuration. If you + have difficulty devising such a technique, discuss why.}{ + + 由于Arnold和Bernard都在NAT后面,因此他们都只能发现对方所在子网的路由器的IP地址(公网IP),而TCP连接是端到端的,因此如果没有对NAT进行特别配置,那么只能采用TCP打洞方式,TCP打洞具体过程比较复杂,这里就简单描述一下,大致是通过一个具有公网IP的服务器对TCP三次握手的报文进行中继,使每一方与对方的路由器进行通信,但对于上层来说就好像是双方形成了TCP连接,而且TCP打洞还不一定能成功,例如对于对称NAT就无法成功,详细过程就不再叙述了,可以查找相关资料。 + } + \Pquestionandanswer[20]{Consider the network fragment shown below. $x$ has only two attached neighbors, + $w$ and $y$. $w$ has a minimum-cost path to destination $u$ (not shown) of 5, and $y$ has a + minimum-cost path to $u$ of 6. The complete paths from $w$ and $y$ to $u$ (and between $w$ + and $y$) are not shown. All link costs in the network have strictly positive integer + values. + \begin{center} + \includegraphics[width=0.3\linewidth]{imgs/2023-12-23-18-56-31.png} + \end{center} + }{} + \begin{enumerate} + \Pquestionandanswer[-]{ + \item Give $x$’\!\!s distance vector for destinations $w$, $y$, and $u$. + }{ + \begin{tabularx}{\linewidth}{ZZZ} + \toprule + 终点 & 下一跳 & 花费/代价/损失 \\ + \midrule + $w$ & --- & 2 \\ + $y$ & $w$ & 4 \\ + $u$ & $w$ & 7 \\ + \bottomrule + \end{tabularx} + } + \Pquestionandanswer[-]{ + \item Give a link-cost change for either $c(x,w)$ or $c(x,y)$ such that $x$ will inform its + neighbors of a new minimum-cost path to $u$ as a result of executing the + distance-vector algorithm. + }{ + 若$c(x,w) = 10$,则$x$到$u$的最小代价的距离更新为11,且下一跳更新为$y$,此时$x$会通知$w$和$y$它的距离矢量发生了变化。 + } + \Pquestionandanswer[-]{ + \item Give a link-cost change for either $c(x,w)$ or $c(x,y)$ such that $x$ will \textit{not} inform its + neighbors of a new minimum-cost path to u as a result of executing the + distance-vector algorithm. + }{ + 若$c(x,y)=6$,则$x$到$u$的最小代价仍然是7,下一跳仍然是$w$,此时$x$不会通知它的邻居。 + } + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/Chapter_5_HW.tex b/计算机网络/Chapter_5_HW.tex new file mode 100644 index 0000000..c7cf887 --- /dev/null +++ b/计算机网络/Chapter_5_HW.tex @@ -0,0 +1,233 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +% \definecolor{shadecolor}{RGB}{255,255,255} +\setcounter{chapter}{4} +\setlist[1]{label=\arabic{enumi},listparindent=\parindent} + +\begin{document} + \chapter{数据链路层} + \begin{enumerate} + \Rquestionandanswer[1]{What are some of the possible services that a link-layer protocol can offer to the + network layer? Which of these link-layer services have corresponding services in IP? + In TCP?}{ + 数据链路层可以提供流量控制,差错检测和纠正,共享广播信道-多路访问,链路层编址。其中流量控制、差错检测在IP和TCP中都有相应的服务,链路层编址在IP有类似的IP地址。 + } + \Rquestionandanswer[2]{If all the links in the Internet were to provide reliable delivery service, would the + TCP reliable delivery service be redundant? Why or why not?}{ + 如果在因特网中的所有链路都能提供可靠收发服务,TCP的可靠收发服务也不是多余的。这样虽然能保证到达的包没有差错,但是IP层可能把数据包转发到错误的地方导致丢包,或者各个数据包通过不同的链路到达目的,导致数据包乱序,TCP的可靠收发服务需要解决丢包和乱序的问题。 + } + \Rquestionandanswer[9]{Why is an ARP query sent within a broadcast frame? Why is an ARP response + sent within a frame with a specific destination MAC address?}{ + ARP查询使用广播帧是因为发送端此时还不知道接收端的MAC地址,无法单播,所以只能使用广播帧;而ARP响应帧理论上使用广播MAC地址也行,只要查询方能收到就行,但其他没有发送ARP查询帧的主机收到ARP响应帧也会丢弃,因此还不如不使用广播帧,其他主机收到目的MAC不是自己的帧就提早丢弃了。 + } + \Rquestionandanswer[10]{Suppose nodes A, B, and C each attach to the same broadcast LAN (through + their adapters). If A sends thousands of IP datagrams to B with each encapsulating + frame addressed to the MAC address of B, will C's adapter process these frames? If + so, will C's adapter pass the IP datagrams in these frames to the network layer C? + How would your answers change if A sends frames with the MAC broadcast address?}{ + C的适配器会将这些帧首部的目的MAC地址和C的MAC地址比较,发现不相同,就把这些帧丢弃了,所以C的适配器会处理这些帧,但是将这些帧丢弃了,所以不会将IP数据传递给C的网络层。但是如果A发送的帧使用了MAC广播地址,那么C的适配器会处理这些帧,并且将帧里的IP数据包传递给C的网络层(网络层还是有可能丢弃报文的)。 + } + \Rquestionandanswer[11]{In CSMA/CD, after the fifth collision, what is the probability that a node + chooses K = 4? The result K = 4 corresponds to a delay of how many seconds on a 10 + Mbps Ethernet?}{ + 第五次冲突后,$K$的取值范围为$[0,2^{5}-1]$,即$K$等可能地从$[0,31]$中选取一个整数,因此$P(K=4)=\dfrac{1}{32}$。 + + 而$K=4$就意味着延迟$4\times 512 \operatorname{bit}$的传输时间,因此在 10 Mbps 的以太网中,延时为 + $$ + \text{Delay}=\frac{4\times 512 \text{bit}}{10 \text{Mbps}}=\frac{2048 \text{bit}}{10 \times 10^{6} \text{bit/s}}= 0.0002048\ \text{秒} + $$ + } + \Rquestionandanswer[13]{Suppose a 10 Mbps adapter sends into a channel an infinite stream of 1s using + Manchester encoding. The signal emerging from the adapter has how many transitions + per second?}{ + 曼彻斯特编码在每位信号的中间都有一个跳变,由于数据全1,所以在每位信号的开始处还需要归零,因此一位信号有2个跳变。而在10 Mbps 的适配器上每秒能传输$10\times 10^{6}$位信号,所以每秒的跳变数为$20 \times 10^{6}$。 + } + \Pquestionandanswer[1]{Suppose the information content of a packet is the bit pattern 1010 1010 1010 + 1011 and an even parity scheme is being used. What would the value of the field + containing the parity bits be for the case of a two-dimensional parity scheme? Your + answer should be such that a minimum-length checksum field is used.}{ + 由于需要二维奇偶校验和长度最小,并且此数据包的长度为16个字节,$\sqrt{16}=4$,所以应当一行4个字节,共4行。校验过程可以画出二维表格如下: + \begin{center} + \begin{tabular}{ccccl} + $1$ & $0$ & $1$ & $0$ \vline & $0$ \\ + $1$ & $0$ & $1$ & $0$ \vline & $0$ \\ + $1$ & $0$ & $1$ & $0$ \vline & $0$ \\ + $1$ & $0$ & $1$ & $1$ \vline & $1$ \\ + \hline + $0$ & $0$ & $0$ & $1$ \vline & $1$ \\ + \end{tabular} + \end{center} + 于是带校验的数据为 10100 10100 10100 10111 00011。 + } + \Pquestionandanswer[15]{Suppose nodes A and B are on the same 10 Mbps Ethernet bus, and the + propagation delay between the two nodes is 225 bit times. Suppose node A begins + transmitting a frame and, before it finishes, node B begins transmitting a frame. Can A + finish transmitting before it detects that B has transmitted? Why or why not? If the + answer is yes, then A incorrectly believes that its frame was successfully transmitted + without a collision. \textit{Hint:} Suppose at time t = 0 bit times, A begins transmitting a + frame. In the worst case, A transmits a minimum-sized frame of 512 + 64 bit times. So + A would finish transmitting the frame at t = 512 + 64 bit times. Thus, the answer is no, + if B's signal reaches A before bit time t = 512 + 64 bits. In the worst case, when does + B's signal reach A?}{ + 题目中已经给出了提示,在最差的情况下,A传输的帧为8个字节的前同步码加上64个字节的有效帧的部分(数据字段长度最小为46字节),也就是$64+512=576$位。A的信号到达B需要225个比特时间,在最差的情况下,在A发出的帧到达B的一瞬间,B发出了自己的帧,此时B的信号再到达A又需要225个比特时间,因此在第$2\times 225=450$个比特时间,B的信号到达A,$450<576$,因此A不会在检测到B传输之前结束传输。 + } + \Pquestionandanswer[16]{Suppose two nodes, A and B, are attached to opposite ends of an 900 m cable, + and that they each have one frame of 1,000 bits (including all headers and preambles) + to send to each other. Both nodes attempt to transmit at time $t$ = 0. Suppose there are + four repeaters between A and B, each inserting a 20-bit delay. Assume the + transmission rate is 10 Mbps, and CSMA/CD with backoff intervals of multiples of + 512 bits is used. After the first collision, A draws $K$ = 0 and B draws $K$ = 1 in the + exponential backoff protocol. Ignore the jam signal and the 96-bit time delay.}{} + \begin{enumerate} + \Pquestionandanswer[-]{\item + What is the one-way propagation delay (including repeater delays) between A and + B in seconds? Assume that the signal propagation speed is $2\times 10^{8}$ m/sec.}{ + 这里说的包括中继器的延时是要把每个中继器20比特时间的延时也算进去?但这不是传输延时的范畴了?不过既然说了那就这样算吧。 + + 信号传播速度是$2\times 18^{8}$ m/sec,AB之间使用900 m的电缆连接。因此在不考虑中继器的情况下传播延时为 + $$ + \frac{900 \text{m}}{2\times 10^{8} \text{m/sec}}=4.5 \times 10^{-6}\ \text{秒} + $$ + 每个中继器有20比特时间的延时,传输率为10 Mbps,因此每个中继器的延时为 + $$ + \frac{20 \text{bit}}{10 \text{Mbps}}=\frac{20 \text{bit}}{10\times 10^{6} \text{bit/s}}=2\times 10^{-6}\ \text{秒} + $$ + 所以在考虑中继器的情况下总的传播延时为 + $$ + 4.5\times 10^{-6}+ 4\times 2\times 10^{-6}=12.5\times 10^{-6}\ \text{秒} + $$ + } + \Pquestionandanswer[-]{\item + At what time (in seconds) is A's packet completely delivered at B?}{ + 这里为什么用的是“packet”?“packet”不应该是指网络层的协议数据单元吗?这题不是关注数据链路层吗?而且题目中也说了传输了一帧(frame)。 + + 首先将上一小题计算的传播延时转化为比特时间,数据传输率为10 Mbps,所以 + $$ + 10 \text{Mbps} \times (12.5\times 10^{-6}) \text{sec}=(10\times 10^{6}) \text{bit/s} \times (12.5\times 10^{-6}) \text{sec}=125 \text{bit(比特时间)} + $$ + + A和B都在$t=0$时刻发出帧,在$t=125$时刻,A和B都检测到了冲突,忽略48比特的拥塞信号,直接停止发送。A在指数退避中选择了$K=0$,因此会立刻重新准备发送,此时信道忙,A继续侦听。B在指数退避中选择了$K=1$,因此会在512比特时间后重新发送帧。 + + 在$t=125+125=250$时刻,B发送的帧已经全部到达了A,此时信道空闲,忽略96比特的侦听时间,A立刻重新发送帧。 + + 在$t=250+125=375$时刻,B开始接受帧。 + + 在$t=125+512+737$时刻,B准备重发帧,但信道忙(B正在接收帧),因此不会发送。 + + 在$t=375+1000=1375$时刻,B完整接收了帧。 + + 再将比特时间转化为秒 + $$ + \frac{1375 \text{bit}}{10\times 10^{6} \text{bit/s}}=137.5\times 10^{-6}\ \text{秒} + $$ + + 所以在$137.5\times 10^{-6}$秒,A的帧完全到达B。 + + % 上一小题已经算出了传播延时,这里只需要计算传输延时。传输率为10 Mbps ,一帧为1000 bits,所以传输延时为: + % $$ + % t_{\text{transmission}}=\frac{1000 \text{bit}}{10 \text{Mbps}}=\frac{1000 \text{bit}}{10\times 10^{6} \text{bit/s}}=10\times 10^{-6}\ \text{秒} + % $$ + % 因此总延时(不考虑排队延时和处理延时)为 + % $$ + % t_{\text{all}}=t_{\text{propagation}}+t_{\text{transmission}}=12.5\times 10^{-6}+1\times 100^{-6}=112.5 \times 10^{-6}\ \text{秒} + % $$ + % 由于A在$t=0$时刻发出帧,所以在$t=112.5\times 10^{-6}$(秒)时刻A的帧完全到达B。 + } + \Pquestionandanswer[-]{\item + Now suppose that only A has a packet to send and that the repeaters are replaced + with switches. Suppose that each switch has a 20-bit processing delay in addition to a + store-and-forward delay. At what time, in seconds, is A's packet delivered at B?}{ + 只有A发送包,因此不考虑冲突以及排队延时。这时就不便于使用比特时间来计算了,因此还是使用秒为单位来计算。 + + 传播延时只需要整体考虑A到B之间的线缆即可 + $$ + t_{\text{propagation}} = \frac{900 \text{m}}{2\times 10^{8} \text{m/sec}}=4.5 \times 10^{-6}\ \text{秒} + $$ + + 4个交换机,每个交换机的处理延时为20个比特时间,应该是处理的这段时间里能传输20比特的数据的意思吧,那么根据数据传输率为10 Mbps,可以计算出处理延时 + $$ + t_{\text{processing}}=4\times \frac{20 \text{bit}}{10\times 10^{6} \text{bit/s}}=8\times 10^{-6}\ \text{秒} + $$ + + 由于每个交换机都采用存储转发方式,所以传输延时为(4个交换机把链路分成了5段) + $$ + t_{\text{transmission}}=5\times \frac{1000 \text{bit}}{10\times 10^{6}\text{bit/s}}=500\times 10^{-6}\ \text{秒} + $$ + + 所以总延时为 + $$ + \begin{aligned} + t_{\text{all}} & = t_{\text{propagation}}+t_{\text{processing}}+t_{\text{transmission}} \\ + & = 4.5\times 10^{-6}+8\times 10^{-6}+500\times 10^{-6} \\ + & = 512.5\times 10^{-6}\ \text{秒} \\ + \end{aligned} + $$ + + 所以在$512.5\times 10^{-6}$秒,A的帧完全到达B。 + } + \end{enumerate} + + \Pquestionandanswer[17]{Suppose nodes A and B are on the same 10 Mbps Ethernet bus, and the + propagation delay between the two nodes is 225 bit times. Suppose A and B send + frames at the same time, the frames collide, and then A and B choose different values + of K in the CSMA/CD algorithm. Assuming no other nodes are active, can the + retransmissions from A and B collide? For our purposes, it suffices to work out the + following example. Suppose A and B begin transmission at $t$ = 0 bit times. They both + detect collisions at $t$ = 225 bit times. They finish transmitting a jam signal at $t$ = 225 + + 48 = 273 bit times. Suppose $K_A$ = 0 and $K_B$ = 1. At what time does B schedule its + retransmission? At what time does A begin transmission? (\textit{Note:} The nodes must wait + for an idle channel after returning to Step 2—see protocol.) At what time does A's + signal reach B? Does B refrain from transmitting at its scheduled time?}{ + 上一题不考虑48 bit的拥塞信号时间和96 bit的侦听时间,这一题就要考虑了。 + + 根据题意,A和B都在$t=225$时刻检测到了冲突,在$t=225+48=273$时刻结束发送拥塞信号。之后在指数退避过程中A选择了$K=0$,因此立刻进入侦听状态。由于B之前发送的帧还没有完全到达A,因此这时A侦听到信道忙。 + + B的信号在225个比特时间后完全到达A,因此在$t=273+225=498$时刻,A侦听到信道开始空闲,于是在96个比特时间后,也就是$t=498+96=594$时刻,A开始重新发送帧。 + + 在225个比特时间后,也就是$t=594+225 = 819$时刻,A重新发送的帧开始到达B。 + + 由于在指数退避过程中B选择了$K=1$,因此在512个比特时间后,也就是$t=273+512=785$时刻,B进入侦听状态,此时信道空闲,但是在$t=819=785+34$时刻,B开始接收A发送的帧,此时信道开始忙,$34<96$,也就是在96个比特时间内信道开始忙了,所以此时B不会发送帧。 + + 因此,A和B的重发帧不会冲突。 + } + \Pquestionandanswer[19]{Consider three LANs interconnected by two routers, as shown in the figure + below. + \begin{center} + \includegraphics[width=0.5\linewidth]{imgs/2023-12-31-09-55-13.png} + \end{center} + }{} + \begin{enumerate} + \Pquestionandanswer[-]{ + \item Redraw the diagram to include adapters. + \item Assign IP addresses to all of the interfaces. For Subnet 1 use addresses of the form + 111.111.111.xxx; for Subnet 2 uses addresses of the form 122.122.122.xxx; and for + Subnet 3 use addresses of the form 133.133.133.xxx. + \item Assign MAC addresses to all of the adapters. + }{ + % \includesvgpdf{5.19.1.drawio} + \noindent\includexopp{5.19.1} + } + \Pquestionandanswer[-]{ + \item Consider sending an IP datagram from Host A to Host F. Suppose all of the ARP + tables are up to date. Enumerate all the steps, as done for the single-router example in + Section 5.4.2. + }{ + 第一跳,主机A已知主机F的IP地址(133.133.133.2),于是封装了一个源IP为111.111.111.1,目的IP为133.133.133.2的IP包,之后A发现目的IP和本机IP不在一个子网,于是A从自己的ARP表中查找网关(路由器)的IP(111.111.111.11)对应的MAC(01:23:45:67:89:11),将目的MAC为01:23:45:67:89:11,源MAC为01:23:45:67:89:01放到数据链路层首部,形成帧并发送出去。 + + 第二跳,路由器1的接口1收到该帧,比较该帧首部的MAC和自己的MAC,确认是发送给自己的后,查看该帧内的IP层内容,发现目的IP(133.133.133.2)和接口1、接口2都不在一个子网,于是查看自己的路由表,发现该子网的数据包应该发送给路由器2的接口1的IP(122.122.122.21),并且应该从接口2发出,之后查看自己的ARP表,找到此IP对应的MAC(01:23:45:67:89:21),将目的MAC为01:23:45:67:89:21,源MAC为01:23:45:67:89:12(接口2)放到数据链路层首部,形成帧从接口2发出。 + + 第三跳,路由器2的接口1收到帧,比较该帧首部的MAC和自己的MAC,确认是发送给自己的后,查看该帧内的IP层内容,发现目的IP(133.133.133.2)和接口2在同一个子网,于是查看自己的ARP表,找到此IP对应的MAC(01:23:45:67:89:06),将目的MAC为01:23:45:67:89:06,源MAC为01:23:45:67:89:22(接口2)放到数据链路层首部,形成帧从接口2发出。 + + 最后,主机F收到帧,比较该帧首部的MAC和自己的MAC,确认是发送给自己的后,查看该帧内的IP层内容,比较目的IP和自己的IP,确认是发送给自己的后,将IP层的数据解包后交给上层处理。 + } + \Pquestionandanswer[-]{ + \item Repeat (d), now assuming that the ARP table in the sending host is empty (and the + other tables are up to date). + }{ + 首先,仍然是主机A已知主机F的IP地址(133.133.133.2),于是封装了一个源IP为111.111.111.1,目的IP为133.133.133.2的IP包,之后A发现目的IP和本机IP不在一个子网,于是查找网关(路由器的IP)(已经配置为111.111.111.11)对应的MAC,但ARP表为空,无法找到此IP对应的MAC。于是A发送ARP查询广播,将目的MAC设为广播地址(全1),源MAC为A的MAC(01:23:45:67:89:01),源IP为A的IP(111.111.111.1),目的IP设为111.111.111.11。路由器1的接口1收到该帧,该帧为广播帧,因此不需要和自己的MAC比较,直接查看该帧封装的数据部分,发现是ARP查询报文,并且目的IP和自己的IP相同,于是准备发送ARP响应报文。路由器1在自己的ARP表中查询该报文中的源(111.111.111.1)IP对应的MAC,查找到为01:23:45:67:89:01,于是将目的MAC设为01:23:45:67:89:01,源MAC为路由器1接口1的MAC(01:23:45:67:89:11),源IP为路由器1接口1的IP(111.111.111.11),目的IP为111.111.111.1,将该帧从接口1发送出去。 + + A收到该帧,比较该帧首部的MAC和自己的MAC,确认是发送给自己的后,查看该帧内的IP层内容,比较目的IP和自己的IP,确认是发送给自己的后,发现IP层内的数据为ARP响应报文,并且此响应报文中的源IP(111.111.111.11)正好是自己刚才查询的IP,于是将此帧的源IP和源MAC放入自己的ARP表中,于是A就知道网关(路由器的IP)对应的MAC为01:23:45:67:89:11了,之后的步骤就和上一小题相同了。 + } + \end{enumerate} + \end{enumerate} +\end{document} \ No newline at end of file diff --git a/计算机网络/mypreamble.tex b/计算机网络/mypreamble.tex new file mode 100644 index 0000000..8bbbd44 --- /dev/null +++ b/计算机网络/mypreamble.tex @@ -0,0 +1,144 @@ +\usepackage[margin=1in]{geometry} +\usepackage{environ} % 加了这个再\def\myitem就不报错了 +\usepackage{extarrows} +\usepackage{enumerate} +\usepackage{enumitem} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{extarrows} +\usepackage{booktabs} +\usepackage{tabularx} +\usepackage{array} +\usepackage{ragged2e} +\usepackage[outputdir=./latex-output]{minted} +\usepackage{color} +\usepackage{hyperref} +\usepackage{mylatex} +\usepackage{subfiles} + +\setlist[1]{label=P\arabic{enumi}.,listparindent=\parindent} +\setlist[2]{label=\alph{enumii}.,listparindent=\parindent} +\definecolor{shadecolor}{RGB}{204,232,207} + +% 有\EnumitemId了 +% 百分号要记得在判断语句的外面也用上 +\def\getenum{% + \ifnum\EnumitemId=1% + enumi% + \else + \ifnum\EnumitemId=2% + enumii% + \else + \ifnum\EnumitemId=3% + enumiii% + \else% + enumiv% + \fi + \fi + \fi% +} + % \ifx\theenumiv\empty + % \ifx\theenumiii{} + % \ifx\theenumii{} + % 1 + % \else + % 2 + % \fi + % \else + % 3 + % \fi + % \else + % 4 + % \fi + +% 可选参数合并到主.sty文件中了 +% \def\myitemArg#1#2{ +% \item \textbf{#1} +% \begin{enumerate} +% #2 +% \end{enumerate} +% } + +% \def\myitemOptArg[#1]#2#3{ +% \setcounter{\getenum}{#1-1} +% \item \textbf{#2} +% \begin{enumerate} +% #3 +% \end{enumerate} +% } + +% \def\myitem{\futurelet\next\myitemAux} +% \def\myitemAux{\ifx\next[% +% \expandafter\myitemOptArg +% \else +% \expandafter\myitemArg +% \fi} + +% \def\originitem{\csname\item \endcsname} + +% \edef\item[#1]{ +% \csname a\expandafter \endcsname \item +% % {\setcounter{\getenum}{#1-1}} +% % {\item} +% } + +% \edef\item{\item} + +% \edef\item{\originitem} + +\newcommand{\cnitem}[1][]{ + \IfBlankF{#1}{ + \setcounter{\getenum}{#1-1} + } + \item +} + + +% 好像直接\AddEnumerateCounter就行 + +\newcommand{\questionandanswer}[3][]{% + \begin{shaded}% + \ifstrequal{#1}{-}{}{\cnitem[#1]} #2% + \end{shaded}% + \begin{zhongwen}% + #3% + \end{zhongwen}% +} + +\ExplSyntaxOn +\cs_set:Nn \rawquestionandanswer:Nnnn {% + \begin{shaded}% + \ifstrequal{#2}{-}{}{\format_item:Nn #1{#2}} #3% + \end{shaded}% + \begin{zhongwen}% + #4% + \end{zhongwen}% +} +\cs_set:Nn \format_item:Nn { + \IfBlankTF{#2}{ + \stepcounter{\getenum} + \item[#1{\csname the\getenum\endcsname}] + % 完美结合了LaTeX2e和LaTeX3! + }{ + \item[#1{#2}] + } +} +\cs_set:Nn \Rformat:n {R#1.} +\cs_set:Nn \Pformat:n {P#1.} +\newcommand{\Rquestionandanswer}[3][]{% + \rawquestionandanswer:Nnnn \Rformat:n {#1}{#2}{#3} +} +\newcommand{\Pquestionandanswer}[3][]{% + \rawquestionandanswer:Nnnn \Pformat:n {#1}{#2}{#3} +} +\ExplSyntaxOff +% 成功实现了,而且下划线也没问题!!!似乎是函数式程序设计,或者装饰器模式? + + +% 该命令用于控制 p{} 的情况 +\newcolumntype{P}[1]{>{\RaggedRight\hspace{0pt}}p{#1}} % 使用过程中,将p{4cm}换成P{4cm},小写改成大写即可! +% 该命令用于控制 X 的情况 +\newcolumntype{Z}{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}X} % 使用过程中,将Z 换成 X,即可! + +% 可利用 RaggedLeft Centering替换RaggedRight,实现靠右和居中 [代码对大小写敏感!!!!!!!!!!!!!!!!!!!!!!!!!!!!] + +% 原文链接:https://blog.csdn.net/wanjiac/article/details/107494424 diff --git a/计算机网络/mysubpreamble.tex b/计算机网络/mysubpreamble.tex new file mode 100644 index 0000000..f0bf1dd --- /dev/null +++ b/计算机网络/mysubpreamble.tex @@ -0,0 +1,6 @@ +\usepackage{fancyhdr} +\usepackage{totpages} +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} \ No newline at end of file diff --git a/计算机网络/全部作业.tex b/计算机网络/全部作业.tex new file mode 100644 index 0000000..411c88a --- /dev/null +++ b/计算机网络/全部作业.tex @@ -0,0 +1,15 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\title{\heiti\zihao{2} 《计算机网络》作业} +\author{\songti 岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2023年10月6日 —— 2023年12月31日} +\begin{document} +\maketitle +\tableofcontents +\subfile{Chapter_1_HW} +\subfile{Chapter_2_HW} +\subfile{Chapter_3_HW} +\subfile{Chapter_4_HW} +\subfile{Chapter_5_HW} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/mypreamble.tex b/随机过程/作业/mypreamble.tex new file mode 100644 index 0000000..852fd98 --- /dev/null +++ b/随机过程/作业/mypreamble.tex @@ -0,0 +1,34 @@ +\usepackage{booktabs} +\usepackage{diagbox} +\usepackage{multicol} + +\usepackage{fancyhdr} +\usepackage{enumitem} +\usepackage{titlesec} +\usepackage{amssymb, amsfonts, amstext, amsmath, amsopn, amsthm} +\usepackage{bm} +\usepackage{extarrows} +\usepackage{hyperref} +\usepackage{totpages} +\usepackage{mylatex} +\usepackage{subfiles} + +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\renewcommand\thesection{\thechapter.\arabic{section}} +\renewcommand \thesubsection {\arabic{subsection}} +\renewcommand{\labelenumii}{(\arabic{enumii})} +\title{《随机过程》作业} +\author{岳锦鹏} +\newcommand{\mysignature}{10213903403 岳锦鹏} +\date{2024年2月27日——2024年6月18日} +\setlist[1]{listparindent=\parindent} +\setlist[2]{listparindent=\parindent} +\titlelabel{} % 去除序号,但是在主文件中不去除 +\definecolor{shadecolor}{RGB}{204,232,207} + +\def\myitem#1#2{ + \item \text{#1} + \begin{enumerate} + #2 + \end{enumerate} +} diff --git a/随机过程/作业/mysubpreamble.tex b/随机过程/作业/mysubpreamble.tex new file mode 100644 index 0000000..bec6221 --- /dev/null +++ b/随机过程/作业/mysubpreamble.tex @@ -0,0 +1,6 @@ + +\pagestyle{fancyplain} +\fancyhead{} +\fancyhead[C]{\mysignature} +\fancyfoot[C]{第 \thepage 页\quad 共 \ref{TotPages} 页} +\definecolor{shadecolor}{named}{white} diff --git a/随机过程/作业/全部作业.tex b/随机过程/作业/全部作业.tex new file mode 100644 index 0000000..eba2a08 --- /dev/null +++ b/随机过程/作业/全部作业.tex @@ -0,0 +1,26 @@ +\documentclass[a4paper]{ctexbook} +\input{mypreamble} +\begin{document} + \maketitle + \tableofcontents + \chapter{概率论复习} + \subfile{第一周作业} + \subfile{第二周作业} + \chapter{简单随机模型} + \subfile{第三周作业} + \subfile{第四周作业} + \subfile{第五周作业} + \chapter{离散时间马尔可夫链} + \subfile{第六周作业} + \subfile{第七周作业} + \subfile{第九周作业} + \subfile{第十周作业} + \chapter{马氏链应用模型} + \subfile{第十一周作业} + \subfile{第十二周作业} + \subfile{第十三周作业} + \setcounter{chapter}{5} + \chapter{布朗运动} + \subfile{第十四周作业} + \subfile{第十五周作业} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第一周作业.tex b/随机过程/作业/第一周作业.tex new file mode 100644 index 0000000..5992086 --- /dev/null +++ b/随机过程/作业/第一周作业.tex @@ -0,0 +1,161 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\section{《随机过程》2月26日作业} +\begin{enumerate} + \questionandanswer[]{ + 设$X$为$k$阶矩存在的非负连续型随机变量($k\in \mathbb{Z}^{+}$),证明: + $$ + E(X^{k})=\int_{0}^{+\infty} kx^{k-1}P(X>x) \mathrm{d}x + $$ + 试推广一下该结论。 + }{ + \begin{proof} + + 设$X$的概率密度函数为$p(x), x\in (-\infty,+\infty)$ + + 根据数学期望的定义,同时注意到$X$是非负连续型随机变量,可知 + $$ + E(X^{k})=\int_{0}^{+\infty} x^{k}p(x) \mathrm{d}x=\int_{0}^{+\infty} \left( \int_{0}^{x} ku^{k-1} \mathrm{d}u \right) p(x) \mathrm{d}x=\int_{0}^{+\infty} \int_{0}^{x} ku^{k-1}p(x) \mathrm{d}u \mathrm{d}x + $$ + 交换积分次序, + $$ + E(X^{k})=\int_{0}^{+\infty} \int_{u}^{+\infty} ku^{k-1}p(x) \mathrm{d}x \mathrm{d}u=\int_{0}^{+\infty} ku^{k-1}P(X>u) \mathrm{d}u=\int_{0}^{+\infty} kx^{k-1}P(X>x) \mathrm{d}x + $$ + \end{proof} + 推广该结论可得:设$f(X)$为数学期望存在的非负连续型随机变量,且$f(x)$存在导函数$f'(x)$,则 + $$ + E(f(X))=\int_{0}^{+\infty} f'(x)P(X>x) \mathrm{d}x + $$ + } + \questionandanswer[]{ + 若连续型随机变量$X$与$Y$相互独立,其概率密度函数分别为$p_{X}(\cdot )$和$P_{Y}(\cdot )$,证明: + $$ + E(\Phi(X,Y)|X)=\int_{\mathbb{R}}\Phi(X,y)p_{Y}(y)\mathrm{d}y + $$ + }{ + \begin{proof} + + 直接根据定义,在$X=x$的条件下对$Y$求数学期望即可: + $$ + E(\Phi(x,Y)|X=x)=\int_{-\infty}^{+\infty} \Phi(x,y)p_{Y}(y) \mathrm{d}y + $$ + 所以 + $$ + E(\Phi(X,Y)|X)=\int_{\mathbb{R}}\Phi(X,y)p_{Y}(y)\mathrm{d}y + $$ + \end{proof} + } + \questionandanswer[]{ + 从1到9中有放回地抽取数字,每次抽一个,直到奇数和偶数都被抽到时位置。求该过程中抽到奇数的次数在全部抽取次数中占比的期望(结果保留4位有效数字)。 + }{ + \begin{proof}[解] + + 设随机变量$X$表示首次抽到奇数时的总次数,则$X\sim \operatorname{Ge}(\frac{5}{9})$; + 设随机变量$Y$表示首次抽到偶数时的总次数,则$Y\sim \operatorname{Ge}(\frac{4}{9})$。 + 设随机变量$Z$表示该过程中抽到奇数的次数在全部抽取次数中的占比,则$EZ$为所求的期望。 + + 根据几何分布的数学期望可知,$EX=\frac{1}{\frac{5}{9}}=\frac{9}{5}$, $EY=\frac{1}{\frac{4}{9}}=\frac{9}{4}$。 + + 根据重期望公式,$EZ = E(E(Z|X))$,下面计算$E(Z|X)$ + $$ + E(Z|X=x)=\begin{cases} + \frac{EY}{EY+1}=\frac{\frac{9}{4}}{\frac{9}{4}+1} = \frac{9}{13},\quad & x=1 \\ + \frac{1}{EX}=\frac{1}{\frac{9}{5}}=\frac{5}{9},\quad & x>1 \\ + \end{cases} + $$ + 再对$X$求期望, + $$ + EZ = E(E(Z|X))=\frac{9}{13}\times \frac{5}{9}+\frac{5}{9}\times (1-\frac{5}{9}) = \frac{665}{1053} \approx 0.6315 + $$ + \end{proof} + } + \questionandanswerSolution[]{ + 设闯入果园的猩猩数$X$服从参数为$\lambda(>0)$的Poisson分布,每只猩猩独立地以概率$p(\in (0,1))$成功地抢到香蕉,而以概率$q=1-p$没有抢到。请分别求闯入果园且成功抢到香蕉的猩猩数$Y$和闯入果园但没抢到香蕉的猩猩数$Z$的分布,并判断$Y$和$Z$是否独立。 + }{ + $X$的分布列为$\displaystyle P(X=k)=\frac{\lambda^{k}}{k!}e^{-\lambda}$; + + 所以$Y$的分布列为$\displaystyle P(Y=k)=\frac{\lambda^{k}}{k!}e^{-\lambda} \sum_{n=k}^{\infty}C_{n}^{k}p^{k}(1-p)^{n-k}$;\\ + $Z$的分布列为$\displaystyle P(Z=k)=\frac{\lambda^{k}}{k!}e^{-\lambda} \sum_{n=k}^{\infty}C_{n}^{k}(1-p)^{k}p^{n-k}$ + + 取$k=0$时来验证$Y$和$Z$是否独立。(已知$p \in (0,1)$) + $$ + P(Y=0) = e^{-\lambda} \sum_{n=0}^{\infty}(1-p)^{n} = e^{-\lambda} \cdot \frac{1}{p} + $$ + $$ + P(Z=0)=e^{-\lambda} \sum_{n=0}^{\infty}p^{n} = e^{-\lambda} \cdot \frac{1}{1-p} + $$ + $$ + P(Y=0, Z=0)=P(X=0)=e^{-\lambda} + $$ + 所以 + $$ + P(Y=0)\cdot P(Z=0) \neq P(Y=0,Z=0) + $$ + 因此$Y$和$Z$不独立。 + } + % $$ + % \sum_{i=1}^{n} s^{i} p^{i-1}(1-p) = \begin{cases} (1 - p) \sum_{i=1}^{n} s^{i} (\frac{1}{s})^{i - 1} & \text{for}\: p = \frac{1}{s} \\- \frac{s (p - 1) (p^{n} s^{n} - 1)}{p s - 1} & \text{otherwise} \end{cases} + % $$ + \questionandanswerSolution[]{ + 重复抛一枚硬币,假设每次试验是相互独立的,出现正面的概率为$p(\in (0,1))$。令$T_n$是首次出现连续$n$次正面的时刻。求$T_n$的概率母函数。 + }{ + 设$Y$表示首次出现反面的时刻,则$Y\sim \operatorname{Ge}(1-p)$。 + 则$T_n$的概率母函数为: + $$ + \begin{aligned} + \phi_{T_n}(s) = E(s^{T_n})&= s^{n} \sum_{i=n+1}^{\infty} P(Y=i) + \sum_{i=1}^{n}E(s^{i+T_n}) P(Y=i) \\ + &=s^{n}P(Y\geqslant n+1)+\sum_{i=1}^{n}s^{i}E(s^{T_n})P(Y=i) \\ + &=s^{n} p^{n} + E(s^{T_n})E(s^{Y}) \\ + \end{aligned} + $$ + 即可解得 + $$ + E(s^{T_n})=\frac{s^{n}p^{n}}{1-E(s^{Y})} + $$ + 由于$s \in [-1,1],\ p \in (-1,1)$,所以$ps \neq 1$,因此 + $$ + E(s^{Y}) =\sum_{i=1}^{n}s^{i}P(Y=i)= \sum_{i=1}^{n} s^{i} p^{i-1}(1-p) = - \frac{s (p - 1) (p^{n} s^{n} - 1)}{p s - 1} + $$ + 所以 + $$ + E(s^{T_n})= \frac{s^{n}p^{n}}{1+ \frac{s (p - 1) (p^{n} s^{n} - 1)}{p s - 1} } = \frac{p^{n} s^{n} (p s - 1)}{- p^{n} s^{n + 1} + p^{n + 1} s^{n + 1} + s - 1} + $$ + % $$ + % - p p^{n} s^{n + 1} + p^{n} s^{n + 1} - s + 1 = p^{n} s^{n + 1} - p^{n + 1} s^{n + 1} - s + 1= p^{n} s^{n + 1} \cdot (1 - p) - s + 1 + % $$ + } + \questionandanswerSolution[]{ + 设$X_1,X_2, \cdots $ 为独立同分布的非负整数值随机变量序列,其中$X_1$的特征函数、Laplace变换和概率母函数分别为$\Psi_{X}(t)$、$L_{X}(\theta)$和$\phi_{X}(s)$。而$N$是与之独立的非负整数值随机变量,其特征函数、Laplace变换和概率母函数分别为$\Psi_{N}(t)$、$L_{N}(\theta)$和$\phi_{N}(s)$。令$\displaystyle Z=\sum_{n=1}^{N}X_n$,请分别计算$Z$的特征函数、Laplace变换和概率母函数。 + }{ + 使用重期望公式,$Z$的特征函数可转化为 + $$ + E e^{itZ}=E(E(e^{itZ}|N)) + $$ + 而 + $$ + E(e^{itZ}|N=k)=E\left( e^{it \sum_{n=1}^{k}X_n} \right) =E\left( \prod_{n=1}^{k} e^{it X_n} \right) + $$ + 因为$X_1,X_2, \cdots $独立同分布,所以 + $$ + \text{上式}=\prod_{n=1}^{k} E(e^{it X_n})=\prod_{n=1}^{k} \Psi_{X}(t)=\left[ \Psi_{X}(t) \right] ^{k} + $$ + 根据概率母函数的反演公式, + $$ + \forall n \in \mathbb{Z}^{+}, \forall k \in \mathbb{Z}^{+}, P(N=k)=\frac{\phi_{N}^{(k)}(0)}{k!} + $$ + 所以$Z$的特征函数为 + $$ + \Psi_{Z}(t)=Ee^{itZ}=E(E(e^{itZ}|N))=\sum_{k=1}^{\infty}E(e^{itZ}|N=k)P(N=k)=\sum_{k=1}^{\infty}[\Psi_{X}(t)]^{k} \cdot \frac{\phi_{N}^{(k)}(0)}{k!} + $$ + 同理,$Z$的Laplace变换为 + $$ + L_{Z}(\theta)=E(e^{-\theta Z})=\sum_{k=1}^{\infty}[L_{X}(\theta)]^{k}\cdot \frac{\phi_{N}^{(k)}(0)}{k!} + $$ + $Z$的概率母函数为 + $$ + \phi_{Z}(s)=E(s^{Z})=\sum_{k=1}^{\infty}[\phi_{X}(s)]^{k}\cdot \frac{\phi_{N}^{(k)}(0)}{k!} + $$ + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第七周作业.tex b/随机过程/作业/第七周作业.tex new file mode 100644 index 0000000..acc8b6c --- /dev/null +++ b/随机过程/作业/第七周作业.tex @@ -0,0 +1,132 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{3} +\section{《随机过程》4月8日作业} +\begin{enumerate} + \questionandanswerSolution[]{ + 设马氏链$X$的状态空间为$S=\{ 0,1,2,3,4 \}$,一步转移概率矩阵为 + $$ + \begin{bmatrix} + \frac{1}{3} & \frac{2}{3} & 0 & 0 & 0 \\ + 0 & \frac{1}{3} & \frac{1}{3} & \frac{1}{3} & 0 \\ + \frac{3}{4} & \frac{1}{4} & 0 & 0 & 0 \\ + 0 & 0 & 0 & 0 & 1 \\ + 0 & 0 & 0 & \frac{1}{2} & \frac{1}{2} \\ + \end{bmatrix} + $$ + 试写出状态空间$S$中的所有互通类,判断它们是否是本质类,并说明理由。 + }{ + \begin{multicols}{2} + \includexopp[1.5]{7.1.1} + 首先画出示意图,之后即可看出互通类为 + $$ + \{ 0,1,2 \}, \{ 3,4 \} + $$ + + 其中由于$1 \to 3$而$3 \not \to 1$,所以$\{ 0,1,2 \}$不是本质类。 + + 而$3 \to 4$且$4 \to 3$,所以$\{ 3,4 \}$是本质类。 + \end{multicols} + } + \questionandanswerProof[]{ + 在马氏链中,假设$i \leftrightarrow j$且它们的周期为$d$。证明:若$p_{ij}^{(n)}>0$且$p_{ij}^{(m)}>0$,则必有$d | (n-m)$。 + }{ + 由于$i \leftrightarrow j$,则可设$p_{ji}^{(x)}>0$,所以 + $$ + p_{ii}^{(n+x)}\geqslant p_{ij}^{(n)}p_{ji}^{(x)}>0, \quad p_{ii}^{(m+x)}\geqslant p_{ij}^{(m)}p_{ji}^{(x)}>0 + $$ + 又由于$i$的周期为$d$,所以$d|(n+x)$, $d|(m+x)$,则根据整除的性质,有$d|(n-m)$。 + } + \questionandanswerProof[]{ + 证明:在马氏链中,若状态$j$非常返,则对任意状态$i$,有$\displaystyle \lim_{n \to \infty} p_{ij}^{(n)}=0$。 + }{ + 设状态空间为$S$。因为状态$j$非常返,所以$\displaystyle \sum_{n=1}^{\infty} p_{ii}^{(n)}<\infty$。 + + 若$j \to i$,则$\exists m >0, \ \ \text{s.t.} \ p_{ji}^{(m)}>0$,所以 + $$ + \infty > \sum_{n=1}^{\infty} p_{jj}^{(n)} \geqslant \sum_{n=m}^{\infty} p_{jj}^{(n)} = \sum_{n=m}^{\infty} \sum_{k\in S}^{n} p_{jk}^{(m)}p_{kj}^{(n-m)} \geqslant \sum_{n=m}^{\infty} p_{ji}^{(m)}p_{ij}^{(n-m)} = p_{ji}^{(m)} \sum_{n=m}^{\infty} p_{ij}^{(n-m)} + $$ + 因为$p_{ji}^{(m)}>0$,所以上式可化为$\displaystyle \sum_{n=m}^{\infty} p_{ij}^{(n-m)} = \sum_{n=0}^{\infty} p_{ij}^{(n)}<\infty$。 + 从而级数$\displaystyle \sum_{n=0}^{\infty} p_{ij}^{(n)}$收敛 $\implies \displaystyle \lim_{n \to \infty} p_{ij}^{(n)}=0$ + + 若$j \not \to i$,则不会了。 + } + \questionandanswerProof[]{ + 证明:在马氏链中,若状态$j$为吸收态,则对任意状态$i$,有$\displaystyle \lim_{n \to \infty}p_{ij}^{(n)}=f_{ij}$。 + }{ + 由于$j$为吸收态,所以$\forall i=1,2, \cdots ,n,\ p_{jj}^{(i)}=1$,所以 + $$ + \lim_{n \to \infty} p_{ij}^{(n)} = \lim_{n \to \infty} \sum_{k=1}^{n} p_{jj}^{(n-k)} f_{ij}^{(k)} = \lim_{n \to \infty} \sum_{k=1}^{n} f_{ij}^{(k)} = \sum_{k=1}^{\infty} f_{ij}^{(k)} = f_{ij} + $$ + } + \questionandanswerProof[]{ + 证明:元素有限的本质类必是常返类。 + }{ + 设本质类$S = \{ s_1,s_2, \cdots ,s_n \}$,则对于$\forall i=1,2, \cdots ,n$,令$S_i = \{ s_j\ :\ p_{s_i s_j}^{(1)}>0 \}$(即把所有$s_i$一步可达的$s_j$都取出来组成$S_i$)。由于$S$是本质类,所以当$s_i \to s_j$时有$s_j \to s_i$,设$s_j \to s_i$的首次到达需要的步数为$m_j$则 + $$ + \sum_{n=1}^{\infty} p_{s_i s_i}^{(n)} \geqslant \sum_{n=1}^{\infty} \sum_{s_j\in S_i} p_{s_i s_j}^{(1)} p_{s_j s_i}^{(m_j)} + $$ + 由于 $\displaystyle \sum_{s_j\in S_i} p_{s_i s_j}^{(1)} p_{s_j s_i}^{(m_j)}$有限且为定值,可以设为$\varepsilon$ ($\varepsilon>0$),则 + $$ + \sum_{n=1}^{\infty} p_{s_i s_i}^{(n)} \geqslant \lim_{n \to \infty}n \varepsilon =\infty + $$ + 所以$S$是常返类。 + } + \questionandanswerProof[]{ + 证明:平面格点上的简单对称随机游动(指每一步向四个方向挪动的概率都是$\dfrac{1}{4}$,且各步独立)常返。 + }{ + 设$\uparrow, \downarrow, \leftarrow, \rightarrow$分别表示向上下左右挪动一步,对于任意状态$i$(即任意一个格点), + $$ + \begin{aligned} + p_{ii}^{(4n+2)}&=p_{\uparrow}^{(1)}p_{\downarrow}^{(4n+1)} +p_{\rightarrow}^{(1)}p_{\leftarrow}^{(4n+1)} +p_{\downarrow}^{(1)}p_{\uparrow}^{(4n+1)}+p_{\leftarrow}^{(1)}p_{\rightarrow}^{(4n+1)} \\ + &=\frac{1}{4} p_{\downarrow}^{(4n+1)}+\frac{1}{4}p_{\leftarrow}^{(4n+1)} + \frac{1}{4}p_{\uparrow}^{(4n+1)}+\frac{1}{4}p_{\rightarrow}^{(4n+1)} \\ + \end{aligned} + $$ + 对于$p_{\downarrow}^{(4n+1)}$,可以理解为向下挪动了$n+1$步,向其它三个方向挪动了$n$步,所以$p_{\downarrow}^{(4n+1)}=\mathrm{C}_{4n+1}^{n}\mathrm{C}_{3n+1}^{n}\mathrm{C}_{2n+1}^{n} \left( \frac{1}{4} \right) ^{4n+1}$。 + $p_{\leftarrow}^{(4n+1)}, p_{\uparrow}^{(4n+1)}, p_{\rightarrow}^{(4n+1)}$同理。因此 + $$ + \text{上式}=\frac{1}{4} \times 4\left( \mathrm{C}_{4n+1}^{n}\mathrm{C}_{3n+1}^{n}\mathrm{C}_{2n+1}^{n} \left( \frac{1}{4} \right) ^{4n+1} \right) + $$ + 所以 + $$ + \sum_{n=1}^{\infty} p_{ii}^{(n)} \geqslant \sum_{n=1}^{\infty} p_{ii}^{(4n+1)} = \sum_{n=1}^{\infty} \mathrm{C}_{4n+1}^{n}\mathrm{C}_{3n+1}^{n}\mathrm{C}_{2n+1}^{n} \left( \frac{1}{4} \right) ^{4n+1} =\infty + $$ + % $$ + % \binom{4n+1}{n}\binom{3n+1}{n}\binom{2n+1}{n} \left( \frac{1}{4} \right) ^{4n+1} = \frac{2^{- 8 n} \Gamma(4 n + 2)}{4 \Gamma^{3}(n + 1) \Gamma(n + 2)} + % $$ + % $$ + % \left\{ \frac{2}{0}2/4\ \middle|\ \right\} + % \sum_{n=1}^{\infty} (\binom{4n+1}{n}\binom{3n+1}{n}\binom{2n+1}{n} \left( \frac{1}{4} \right) ^{4n+1}) = \frac{{{}_{3}F_{2}(\begin{matrix} \frac{1}{2}, \frac{3}{4}, \frac{5}{4} \\ 1, 2 \end{matrix}\middle| {1})}}{4} - \frac{1}{4} + % $$ + 所以状态$i$常返,从而任意一个格点均常返。 + } + \questionandanswerProof[]{ + 设$X=\{ X_n\ :\ n \in \mathbb{N} \}$是不可约常返马氏链。对$j\in S$,定义$\tau_j^{(0)}=0$,并对$k\in \mathbb{Z}^{+}$递归定义$\tau_j^{(k)}=\inf \left\{ n>\tau_j^{(k-1)}\ :\ X_n=j \right\}$。然后对$k\in \mathbb{Z}^{+}$定义$W_j^{(k)}=\tau_j^{(k)}-\tau_j^{(k-1)}$。证明:$\left\{ W_j^{(k)}\ :\ k\in \mathbb{Z}^{+} \right\}$相互独立,且当$k\geqslant 2$时分布相同。 + }{ + 设初始状态为$i$,对于$\forall k\geqslant 2$, + $$ + \begin{aligned} + &P\left( W_j^{(k)}=y \right) = P\left( \tau_j^{(k)}-\tau_j^{(k-1)}=y \right) \\ + &=\sum_{x=0}^{\infty} P\left(\tau_j^{(k)}=x+y, \tau_j^{(k-1)}=x\right) \\ + &=\sum_{x=0}^{\infty} P\left( \tau_j^{(k)}=x+y \middle| \tau_j^{(k-1)}=x \right) P\left( \tau_j^{(k-1)}=x \right) \\ + &=\sum_{x=0}^{\infty} f_{jj}^{(y)} \sum_{x_1+x_2+ \cdots +x_{k-1}=x} f_{ij}^{(x_1)} f_{jj}^{(x_2)}\cdots f_{jj}^{(x_{k-1})} \\ + &=\sum_{x=0}^{\infty} \sum_{x_1+x_2+ \cdots +x_{k-1}=x} f_{ij}^{(x_1)}f_{jj}^{(x_2)}\cdots f_{jj}^{(x_{k-1})}f_{jj}^{(y)} \\ + \end{aligned} + $$ + 后面不会了。 + } + \questionandanswerProof[]{ + 证明:在马氏链中,对任意$i,j,k \in S$,有$f_{ik}\geqslant f_{ij}f_{jk}$。 + }{ + 对任意$i,j,k \in S$, + $$ + f_{ik}=\sum_{n=1}^{\infty} f_{ik}^{(n)}=\sum_{n=1}^{\infty} \sum_{a\in S} \sum_{b=1}^{n} p_{ia}^{(b)}f_{ak}^{(n-b)} + $$ + $$ + f_{ij}f_{jk} = \left( \sum_{n=1}^{\infty} f_{ij}^{(n)} \right) \left( \sum_{n=1}^{\infty} f_{jk}^{(n)} \right) =\left( \sum_{n=1}^{\infty} \sum_{a\in S} \sum_{b=1}^{n} p_{ia}^{(b)}f_{aj}^{(n-b)} \right) \left( \sum_{n=1}^{\infty} \sum_{a\in S} \sum_{b=1}^{n} f_{ja}^{(b)}f_{ak}^{(n-b)} \right) + $$ + 实在是不会了。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第三周作业.tex b/随机过程/作业/第三周作业.tex new file mode 100644 index 0000000..ac62f65 --- /dev/null +++ b/随机过程/作业/第三周作业.tex @@ -0,0 +1,63 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{2} +\section{《随机过程》第三周作业} +\subsection{练习题\thechapter.\thesubsection} +\begin{enumerate} + \questionandanswer[1]{ + 试解释对离散参数随机过程而言,“不可区分”与“修正”等价。 + }{ + 由于“不可区分”能推出“修正”,所以这里只需要说明对离散参数随机过程能从“修正”推出“不可区分”。 + + 设$X=\{ X_t; t\in T \}, Y=\{ Y_t; t \in T \}$都是概率空间$(\Omega, \mathfrak{F}, P)$上的随机过程。 + + “修正”的原始定义为对$\forall t\in T, P(X_t=Y_t)=1$,将概率进行定义展开可得:$\forall t\in T, \exists A_t \in \mathfrak{F}$使得$P(A)=1$而且$\forall \omega\in A, X_t(\omega)=Y_t(\omega)$。 + + “不可区分”的定义为$\exists A\in \mathfrak{F}$,使得$P(A)=1$而且$\forall t\in T, \forall \omega\in A, X_t(\omega)=Y_t(\omega)$。 + + 比较这两个定义可知在“修正”的定义中$A_t$的取法与$t$有关,而在“不可区分”的定义中$A$的取法与$t$无关。 + + 所以若$T$为离散参数集,且$X$与$Y$互为修正,则对每一个$t\in T$都能找到一个$A_t\in \mathfrak{F}$满足$P(A_t)=1, \forall \omega\in A_t, X_t(\omega)=Y_t(\omega)$。则$P(\overline{A_t})=0$,取$A=\displaystyle \bigcap_{t\in T} (A_t)$,则 + $$ + P(A)=P\left( \bigcap_{t\in T} A_t \right) =P\left( \overline{\bigcup_{t\in T} \overline{A_t}} \right) =1-P\left( \bigcup_{t\in T} \overline{A_t} \right) + $$ + 由于$T$是离散集合,可列个零测集的并仍然是零测集,所以$\displaystyle P\left(\bigcup_{t\in T} \overline{A_t}\right)=0$,所以$P(A)=1$。而且$\forall \omega\in A, X_t(\omega)=Y_t(\omega)$,即$X$与$Y$不可区分。 + } + \questionandanswerProof[5]{ + 已知$\{ X(t)\ ;\ t\in [0,+\infty) \}$为平稳独立增量过程。对任意$s>0$,令$Y(t)=X(s+t)-X(s)$,证明$\{ Y(t)\ ;\ t\in [0,+\infty) \}$也是平稳独立增量过程。 + }{ + 对于$\forall n\in \mathbb{Z}^{+},\forall t_1,t_2, \cdots ,t_n\in [0,+\infty), \forall i \in \{ 1,2, \cdots ,n-1 \}, $ + $$ + Y(t_{i+1}) - Y(t_i)=[X(s+t_{i+1})-X(s)]-[X(s+t_i)-X(s)]=X(s+t_{i+1})-X(s+t_i) + $$ + 因为$s>0$,所以$s+t_{i+1},s+t_i \in [0,+\infty)$,由$\{ X(t)\ ;\ t\in [0,+\infty) \}$是独立增量过程可知,$\{ X(s+t_{i+1})-X(s+t_i)\ ;\ i\in 1,2, \cdots ,n-1 \}$相互独立,即$\{ Y(t_{i+1})-Y(t_i)\ ;\ i\in 1,2, \cdots ,n-1 \}$相互独立,所以$\{ Y(t)\ ;\ t\in [0,+\infty) \}$是独立增量过程。下证“平稳”: + + 对于$\forall t, t+h, w, w+h\in [0,+\infty)$, + $$ + Y(t+h)-Y(t)=[X(s+t+h)-X(s)]-[X(s+t)-X(s)]=X(s+t+h)-X(s+t) + $$ + 同理,$Y(w+h)-Y(w)=X(s+w+h)-X(s+w)$。由于$s+t,s+t+h,\ s+w, s+w+h\in [0,+\infty)$,且$\{ X(t)\ ;\ t\in [0,+\infty) \}$是平稳独立增量过程,所以$X(s+t+h)-x(s+t)$与$X(s+w+h)-X(s+w)$的分布相同,即$Y(t+h)-Y(t)$与$Y(w+h)-Y(w)$的分布相同,所以$\{ Y(t)\ ;\ t\in [0,+\infty) \}$是平稳独立增量过程。 + } + \questionandanswerProof[6]{ + 证明伯努利过程不是独立增量过程。 + }{ + 设随机过程$X=\{ X_n\ ;\ n\in \mathbb{Z}_{+} \}$是伯努利过程,则$\{ X_n\ ;\ n\in \mathbb{Z}_{+} \}$是独立同分布的随机变量序列,而且 + $$ + P(X_n=1)=p, \qquad P(X_n=0)=q=1-p, \quad 00, \exists \delta_0 >0, \forall t_1,t_2 \in [0,+\infty)$,且$\left\vert t_1-t_2 \right\vert <\delta_0$,都有$\left\vert e^{-t_1}-e^{-t_2} \right\vert <\dfrac{\varepsilon}{Ee^{X}}$,所以$Ee^{X}\left\vert e^{-t_1}-e^{-t_2} \right\vert <\varepsilon$,即$\left\vert Ee^{-t_1X}-Ee^{-t_2X} \right\vert =Ee^{-t_1X}(1-e^{(t_1-t_2)X})$ + 设$X$的概率密度函数为$p(x)$。使用点列式等价定义,$\forall t_{1n}, t_{2n}\in [0,+\infty)$且$\left\vert t_{1n}-t_{2n} \right\vert \to 0$ + $$ + \begin{aligned} + &\left\vert L_{X}(t_{1n})-L_{X}(t_{2n}) \right\vert = \left\vert Ee^{-t_{1n}X}-Ee^{-t_{2n}X} \right\vert =\left\vert E(e^{-t_{1n}X}-e^{-t_{2n}X}) \right\vert \\ + &=\left\vert \int_{0}^{+\infty} (e^{-t_{1n}x}-e^{-t_{2n}x})p(x) \mathrm{d}x \right\vert =\left\vert \int_{0}^{+\infty} e^{-t_{1n}x}(1-e^{(t_{1n}-t_{2n})x}) p(x)\mathrm{d}x \right\vert \\ + &\leqslant \left\vert \int_{0}^{+\infty} (1-e^{(t_{1n}-t_{2n})x}) p(x)\mathrm{d}x \right\vert \\ + \end{aligned} + $$ + 根据积分中值定理,$\exists \xi \in [0,+\infty) $,使得 + $$ + \left\vert \int_{0}^{+\infty} (1-e^{(t_{1n}-t_{2n})x})p(x) \mathrm{d}x \right\vert =(1-e^{(t_{1n}-t_{2n})\xi}) \int_{0}^{+\infty} p(x) \mathrm{d}x=1-e^{(t_{1n}-t_{2n})x} + $$ + + 因为$\left\vert t_{1n}-t_{2n} \right\vert \to 0$,所以$1-e^{(t_{1n}-t_{2n})x} \to 0$,因此$\left\vert L_{X}(t_{1n}-t_{2n}) \right\vert \to 0$,从而$L_{X}(t)$在$[0,+\infty)$内是一致收敛的。 + + } + \questionandanswer[5]{ + 设独立同分布的标准正态分布随机变量簇$W_m,m>1$与$\{ N(n),n\geqslant 1 \}$独立,其中$N(n)$服从泊松分布$P(n)$。令$Y_n=\sum_{k=1}^{N(n)}W_k$。求$Y_n$的特征函数,并证明$n \to +\infty$时$\dfrac{Y_n}{\sqrt{n}}$依分布收敛到一个服从标准正态分布的随机变量。 + }{ + \begin{solution} + + $Y_n$的特征函数为 + $$ + \begin{aligned} + \psi_{Y_n}(t)=E e^{it Y_n}=Ee^{it \sum_{k=1}^{N(n)}W_k}=E e^{\sum_{k=1}^{N(n)}it W_k}=E \prod_{k=1}^{N(n)} e^{it W_k} + \end{aligned} + $$ + 根据重期望公式, + $$ + \text{上式}=E\left( E \left(\left. \prod_{k=1}^{N(n)} e^{it W_k} \right| N(n)=p \right) \right) + $$ + 由于$W_k$独立同分布且服从标准正态分布,所以 + $$ + E\left( \left. \prod_{k=1}^{N(n)} e^{it W_k} \right|N(n)=p \right) =\prod_{k=1}^{p} E e^{it W_k}= \prod_{k=1}^{p} \psi_{W_1}(t)= \left[ \psi_{W_1}(t) \right] ^{p}=\left[ e^{-\frac{t^{2}}{2}} \right] ^{p}=e^{-\frac{p t^{2}}{2}} + $$ + 所以 + % = e^{- n} \sum_{k=1}^{\infty} \frac{n^{k} e^{- \frac{k t^{2}}{2}}}{\Gamma(k + 1)} + $$ + \psi_{Y_n}(t)=E \left( e^{-\frac{t^{2}N(n)}{2}} \right) = \sum_{k=1}^{\infty}e^{- \frac{t^{2}k}{2}} \frac{n^{k}}{k!}e^{-n} + % = e^{- \frac{nt^{2}}{2}} + $$ + \end{solution} + \begin{proof} + + 根据特征函数的性质, + $$ + \psi_{\frac{Y_n}{\sqrt{n}}}(t)=\psi_{Y_n}\left( \frac{t}{\sqrt{n}} \right) + % =e^{-\frac{n \left( \frac{t}{\sqrt{n}} \right) ^{2}}{2}}=e^{-\frac{t^{2}}{2}} + = \sum_{k=1}^{\infty}e^{-\frac{\left( \frac{t}{\sqrt{n}} \right) ^{2} \cdot k}{2}} \frac{n^{k}}{k!}e^{-n} = e^{- n} \sum_{k=1}^{\infty} \frac{n^{k} e^{- \frac{k t^{2}}{2 n}}}{k!} + $$ + 当$n \to +\infty$时上式$\to e^{-\frac{t^{2}}{2}}$,即$\frac{Y_n}{\sqrt{n}}$的特征函数收敛到标准正态分布的特征函数。根据特征函数的唯一性,则$n \to +\infty$时$\frac{Y_n}{\sqrt{n}}$依分布收敛到一个服从标准正态分布的随机变量。 + + \end{proof} + } + \questionandanswerSolution[7]{ + 若随机变量$X$的分布列为$P(X=n)=\frac{n}{2^{n+1}},n\geqslant 1$,求$X$的概率母函数$\phi(s)$。 + }{ + $$ + \phi(s)=E s^{X}=\sum_{n=1}^{\infty}s^{n} \cdot \frac{n}{2^{n+1}} = \frac{s}{(s - 2)^{2}}\ , \quad s \in [-1,1] + $$ + } + \questionandanswerSolution[8]{ + 已知概率母函数$\phi(s)=s+ \frac{1}{1+\gamma}(1-s)^{1+\gamma}, \gamma\in (0,1]$,求对应的概率分布列。 + }{ + $$ + P(X=k)=\frac{\phi^{(k)}(0)}{k!} + $$ + \begin{minipage}{0.6\linewidth} + 对$\phi(s)$求各阶导数: + $$ + \phi^{(k)}(x)=\begin{cases} + s+ \frac{1}{1+\gamma}(1-s)^{1+\gamma},\quad & k=0 \\ + 1-(1-s)^{\gamma},\quad & k=1 \\ + \displaystyle (-1)^{k}(1-s)^{\gamma-k+1} \prod_{i=0}^{k-2} (\gamma-i),\quad & k\geqslant 2 \\ + \end{cases}; + $$ + \end{minipage} + \begin{minipage}{0.4\linewidth} + 所以 + $$ + \phi^{(k)}(0)=\begin{cases} + \frac{1}{1+\gamma},\quad & k=0 \\ + 0,\quad & k=1 \\ + \displaystyle (-1)^{k}\prod_{i=0}^{k-2} (\gamma-i),\quad & k\geqslant 2 \\ + \end{cases} + $$ + \end{minipage} + + 所以对应的概率分布列为 + $$ + P(X=k)=\begin{cases} + \frac{1}{1+\gamma},\quad & k=0 \\ + 0,\quad & k=1 \\ + \displaystyle \frac{(-1)^{k}}{k!}\prod_{i=0}^{k-2}(\gamma-i) ,\quad & k\geqslant 2 \\ + \end{cases} + $$ + } +\end{enumerate} +\pagebreak[4] % 不知道为什么这行如果强度改成4会导致页码问题 +\subsection{练习题\thechapter.\thesubsection} +\begin{enumerate} + \questionandanswerProof[1]{ + 若存在随机变量$X$使得随机序列$\dfrac{S_n}{n}\xlongrightarrow{a.s.}X$成立,而且非负整数值随机序列$N_n \xlongrightarrow{a.s.}\infty$成立。证明$\dfrac{S_{N_n}}{N_n}\xlongrightarrow{a.s.}X$。 + }{ + 对于$\forall \varepsilon>0$,由$\frac{S_n}{n} \xlongrightarrow{a.s.} X$的等价定义,$\exists A \in \Omega$满足$P(A)=0$,对$\forall \omega \in \Omega A$以及$\forall \varepsilon>0$,$\exists N=N(\varepsilon,\omega)$,使得当$n>N$时$\left\vert \frac{S_n(\omega)}{n}-X(\omega) \right\vert <\varepsilon$ + + 对于上述的$N$,由$N_n\xlongrightarrow{a.s.}\infty$的等价定义,$\exists A'\in \Omega$满足$P(A')=0$,对$\forall \omega' \in \Omega A$,$\exists M=M(\varepsilon,\omega)$,使得当$n>M$时$N_n(\omega')> N$,再由上述叙述可知$\left\vert \displaystyle \frac{S_{N_n(\omega')}(\omega)}{N_n(\omega')}-X(\omega) \right\vert <\varepsilon$ + + 因此$\displaystyle \frac{S_{N_n}}{N_n}\xlongrightarrow{a.s.}X$ + } + \questionandanswer[2]{ + 证明:若对任意$\varepsilon>0$,存在$N$使得当$ n>N$时$P(\left\vert X_n-X \right\vert <\varepsilon)=1$,那么$X_n\xlongrightarrow{a.s.}X$。举例说明逆命题不成立。 + }{ + + \begin{proof} + + 由于$P(\left\vert X_n-X \right\vert <\varepsilon)=1 \Rightarrow P(\left\vert X_n-X \right\vert \geqslant \varepsilon)=0$, + 题中条件可转换为 + $$ + \text{对}\forall \varepsilon>0, P\left( \bigcap_{N=1} ^{\infty}\bigcup_{n=N} ^{\infty}\{ \left\vert X_n-X \right\vert \geqslant \varepsilon \}\right)=0 + $$ + 所以$X_n\xlongrightarrow{a.s.}X$。 + + \end{proof} + 当$P(\left\vert X_n-X \right\vert \geqslant \varepsilon)=0$但$P(\left\vert X_n-X \right\vert <\varepsilon)\neq 1$时,逆命题不成立。 + } + \questionandanswerProof[4]{ + 设$f(x)$在$[0,+\infty)$上连续有界,单调上升且$f(0)=0$,证明随机变量$X_n$依概率收敛于0当且仅当$\displaystyle \lim_{n \to \infty}E(f(\left\vert X_n \right\vert ))=0$。 + }{ + 若$X_n \xrightarrow{P} 0$,则$\forall \varepsilon>0, P(\left\vert X_n \right\vert >\varepsilon) \to 0$,由于$f(x)$的单调性,$P(f(\left\vert X_n \right\vert )>f(\varepsilon)) \to 0$。 + 令$\varepsilon \to 0$,则$f(\varepsilon)\to f(0)=0$,所以$P(f(\left\vert X_n \right\vert )>0)\to 0$。 + + 因为$\left\vert X_n \right\vert \geqslant 0$,且$f(x)$单调上升且$f(0)=0$,所以$f(\left\vert X_n \right\vert )\geqslant 0$,因此$P(f(\left\vert X_n \right\vert )=0)\to 1$。 + + $f(\left\vert X_n \right\vert )$在0处的概率趋向于1,所以$\displaystyle \lim_{n \to \infty}E(f\left\vert X_n \right\vert )=0$。 + + 另一方向: + + 若$\displaystyle \lim_{n \to \infty}E(f(\left\vert X_n \right\vert ))=0$,由于$f(\left\vert X_n \right\vert )$是非负随机变量,所以期望为0等价于在0处的概率为1,即$\displaystyle \lim_{n \to \infty}P(f(\left\vert X_n \right\vert )=0)=1$,即$P(f(\left\vert X_n \right\vert )=0)\to 1$。 + + 由于$f(\left\vert X_n \right\vert )\geqslant 0$,所以$P(f(\left\vert X_n \right\vert )>0)\to 0$。 + + 再根据$f(x)$的单调性,$P(\left\vert X_n \right\vert >0) \to 0$。 + + 因此$\forall \varepsilon>0, P(\left\vert X_n \right\vert >\varepsilon) \to 0$,即$X_n$依概率收敛于0。 + } + \questionandanswerProof[5]{ + 设$\{ X_k;k\geqslant 1 \}$为一列相互独立随机变量,而且对任意$k\geqslant 1$,$E(X_k)=0$,$\operatorname{Var}(X_k)=k$。对任意$n\geqslant 1$,令$\displaystyle Y_n=\sum_{k=1}^{n}\frac{X_k}{k}$。 + 证明对任意$r>\dfrac{1}{2}$,当$n \to \infty$时$\dfrac{Y_n}{n^{r}}$几乎必然收敛到0。 + }{ + 要证$\dfrac{Y_n}{n^{r}}\xrightarrow{a.s.}0$,即证$\forall \varepsilon>0, \displaystyle \sum_{n=1}^{\infty}P\left( \left\vert \frac{Y_n}{n^{r}}\right\vert>\varepsilon \right) <\infty $。 + + 由马尔可夫不等式, + $$ + \displaystyle P\left( \left\vert \frac{Y_n}{n^{r}} \right\vert >\varepsilon \right) <\frac{E\left\vert \frac{Y_n}{n^{r}} \right\vert }{\varepsilon}=\frac{E\left\vert \displaystyle \sum_{k=1}^{n}\frac{X_k}{k} \right\vert }{n^{r}\varepsilon} + $$ + + 由于$\operatorname{Var}(X_k)=k, std(X_k)=\sqrt{k}$且$E(X_k)=0$,所以$std(\frac{X_k}{k})=\frac{1}{\sqrt{k}}$,所以$\operatorname{Var}(\frac{X_k}{k})=\frac{1}{k}$。 + + $$ + E\left\vert \sum_{k=1}^{n}\frac{X_k}{k} \right\vert \leqslant \left\vert \sum_{k=1}^{n}\frac{1}{\sqrt{k}} \right\vert \leqslant \left\vert \sum_{k=1}^{n}\frac{1}{\sqrt{n}} \right\vert = \frac{n}{\sqrt{n}}=\sqrt{n} + $$ + 所以 + $$ + P\left( \left\vert \frac{Y_n}{n^{r}} \right\vert >\varepsilon \right) < \frac{\sqrt{n}}{n^{r}\varepsilon}=n^{\frac{1}{2}-r}\varepsilon + $$ + + 对$\forall r>\frac{1}{2}$,当$n \to \infty$时$n^{\frac{1}{2}-r} \to 0$。 + 所以$\forall \varepsilon>0, \displaystyle \sum_{n=1}^{\infty}P\left( \left\vert \frac{Y_n}{n^{r}} \right\vert >\varepsilon \right) $收敛。 + + 因此$\forall r>\frac{1}{2}$,当$n \to \infty$时$\displaystyle \frac{Y_n}{n^{r}}$几乎必然收敛到0。 + + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第五周作业.tex b/随机过程/作业/第五周作业.tex new file mode 100644 index 0000000..32b7490 --- /dev/null +++ b/随机过程/作业/第五周作业.tex @@ -0,0 +1,113 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{2} +\section{《随机过程》3月25日作业} +(以下总假设$N=\{ N(t)\ ;\ t\geqslant 0 \}$是强度为$\lambda$的Poisson过程。) +\begin{enumerate} + \questionandanswerSolution[]{ + 已知$T$服从参数为$\mu$的指数分布,且与过程$N$相互独立。求$N(T)$的分布列。 + }{ + $T$的概率密度函数为$P(T=t)=\mu e^{-\mu t}$,$N(t)$的分布列为$P(N(t)=k)=\displaystyle \frac{(\lambda t)^{k}}{k!} e^{-\lambda t}$,所以$N(T)$的分布列为 + $$ + \begin{aligned} + P(N(T)=k)&= \int_{0}^{+\infty} P(N(t)=k)P(T=t) \mathrm{d}t=\int_{0}^{+\infty} \frac{(\lambda t)^{k}}{k!}e^{-\lambda t} \mu e^{-\mu t} \mathrm{d}t \\ + &=\frac{\mu\lambda^{k}}{(\lambda+\mu)^{k+1}} \int_{0}^{+\infty} \frac{(\lambda+\mu)^{k+1}}{\Gamma (k+1)} t^{k} e^{-(\lambda+\mu)t} \mathrm{d}t \\ + &=\frac{\mu \lambda^{k}}{(\lambda+\mu)^{k+1}} \\ + \end{aligned} + $$ + } + \questionandanswerSolution[]{ + 对任意$00$,证明$N(t+s)-N(s)\sim \mathrm{Poi}(\lambda t)$,且与$N(s)$独立。 + }{ + 因为$N(t)$是平稳独立增量过程,所以$N(t+s)-N(s)$与$N(t)-N(0)$同分布,又由于$N(0)=0$,$N(t)-N(0)=N(t)\sim \mathrm{Poi}(\lambda t)$,所以$N(t+s)-N(s)\sim \mathrm{Poi}(\lambda t)$。 + + 同样,因为$N(t)$是平稳独立增量过程,所以$N(t+s)-N(s)$与$N(s)$独立。 + } + \questionandanswer[]{ + 已知到达某航运公司办公室的客户服从平均速率为每小时3个的Poisson过程。公司职员应当早晨8点开始办公,但是David睡过了头,早晨10点才到办公室。问: + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 在这两个小时期间没有客户到达的概率是多少? + }{ + 设$N=\{ N(t)\ ;\ t\geqslant 0 \}$表示在$t+8$时到达某航运公司办公室的客户数量,则$N$为强度$\lambda = 3$的泊松过程。($t$以小时为单位) + + 因为 + $$ + P(N(t)=k)=\frac{(\lambda t)^{k}}{k!}e^{-\lambda } + $$ + 所以所求概率为 + $$ + P(N(2)=0)=\frac{(3\times 2)^{0}}{0!}e^{- 3\times 2}=e^{-6} + $$ + + 也可以用$T$来刻画,已知$T_n\sim \operatorname{Ga}(n,\lambda)$,从而$P(T_1=t)=\lambda e^{-\lambda t}$,所以 + $$ + P(T_1\geqslant 2)=\int_{2}^{+\infty} P(T_1=t) \mathrm{d}t=\int_{2}^{+\infty} 3e^{-3t} \mathrm{d}t = e^{-6} + $$ + 同样可以得到结果$e^{-6}$。 + } + \questionandanswerSolution[]{ + 直到他的第一个客户到达,David需要等待时间的分布是什么? + }{ + 即$T_1\sim \operatorname{Ga}(1,\lambda)$,即$W_1 \sim \operatorname{Exp}(\lambda)$,也就是需要等待的时间服从参数为$\lambda$的指数分布。 + } + \end{enumerate} + \questionandanswer[]{ + 对$t\geqslant 0$,定义$A(t)=t-T_{N(t)}$, $R(t)=T_{N(t)+1}-t$, $L(t)=T_{N(t)+1}-T_{N(t)}$,其中$T_k=\inf\{ t\geqslant 0\ ;\ N(t)\geqslant k \} (k\in \mathbb{N})$。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求$(A(t),R(t))$的联合分布函数与各个分量的边际分布函数,并判断$A(t)$与$R(t)$是否相互独立; + }{ + 可以从定义看出$A(t)$表示当前时刻与上一次发生事件的时刻之差,而$R(t)$表示下一次发生新的事件的时刻与当前时刻之差。$L(t)$表示下一次发生新的事件的时刻与上一次发生事件的时刻之差。$(A(t),R(t))$的联合分布函数涉及到随机变量的嵌套,较为复杂,$A(t)$与$R(t)$应该不相互独立。 + } + \questionandanswerSolution[]{ + 对任意$x>0$,计算$P(L(t)>x)$,并说明其严格大于$P(W_1>x)$。 + }{ + 比较定义可知$L(t)=W_{N(t)+1}$,所以$P(L(t)>x)=P(W_{N(t)+1}>x)>P(W_1>x)$。 + } + \end{enumerate} + \questionandanswerProof[]{ + (\textbf{Poisson过程的强大数定律})证明:当$t \to \infty$时有$\dfrac{N(t)}{t} \xrightarrow{a.s.} \lambda$。 + }{ + 由于$N(t)$服从强度为$\lambda t$的泊松分布,所以 + $$ + P(N(t)=k)=\frac{(\lambda t)^{k}}{k!}e^{-\lambda t} + $$ + 所以 + $$ + P\left(\frac{N(t)}{t}=\frac{k}{t}\right)= \frac{(\lambda t)^{t\cdot \frac{k}{t}}}{\left( t \cdot \frac{k}{t} \right) !}e^{-\lambda t} + $$ + 令$n=\dfrac{k}{t}$,则 + $$ + P\left( \frac{N(t)}{t}=n \right) =\frac{(\lambda t)^{tn}}{(tn)!}e^{-\lambda t} + $$ + 当$t \to \infty$时,应该能据此证明$\displaystyle P\left( \frac{N(t)}{t} \to \lambda \right) =1 $,从而$\displaystyle \frac{N(t)}{t} \xrightarrow{a.s.} \lambda$。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第六周作业.tex b/随机过程/作业/第六周作业.tex new file mode 100644 index 0000000..4a6e4ab --- /dev/null +++ b/随机过程/作业/第六周作业.tex @@ -0,0 +1,268 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{3} +\section{《随机过程》4月1日作业} +\begin{enumerate} + \questionandanswerSolution[]{ + 假设$N=\{ N(t)\ :\ t\geqslant 0 \}$是强度为$\lambda$的Poisson过程,且$T_k=\inf\{ t\geqslant 0\ :\ N(t)\geqslant k \} (k\in \mathbb{N})$。分别计算条件期望$E(T_{2024}|N(2024)=2024)$和$E(T_{2025}|N(2024)=2024)$。 + }{ + 由于$N(2024)=2024 \iff T_{2024}\leqslant 2024i)$离开电梯,$\displaystyle \sum_{j>i} p_{ij}=1$。用$O_j$表示在第$j$层离开电梯的人数。求$O_j$的分布列。 + }{ + 在第$i$层进入电梯的人数为$N_i$且各个人相互独立地一概率$p_{ij}$在第$j$层$(j>i)$离开电梯,因此在第$j$层离开电梯的人数的期望为 + $ + \displaystyle \sum_{i=1}^{j} N_i p_{ij} =O_j + $ + + 根据泊松过程的性质,$N_ip_{ij}\sim \operatorname{Poi}(\lambda_ip_{ij})$,$\displaystyle \sum_{i=1}^{j} N_ip_{ij}=O_j\sim \operatorname{Poi}\left(\sum_{i=1}^{j} \lambda_ip_{ij}\right)$。 + + 所以$O_j$的分布列为 + $$ + P(O_j=k)=\frac{\lambda^{\sum_{i=1}^{j} \lambda_ip_{ij}}}{k!}e^{-\sum_{i=1}^{j} \lambda_ip_{ij}} + $$ + } + \questionandanswerSolution[]{ + (冲击模型)记$X(t)$为某系统截至时刻$t$受到的冲击次数。$X=\{ X(t)\ :\ t\geqslant 0 \}$是强度为$\lambda$的Poisson过程。设$Y_k$为第$k$次冲击对系统的损害值,满足$Y_1,Y_2, \cdots \overset{\text{i.i.d.}}{\sim}\operatorname{Exp}(\mu)$。以$Z(t)$记截至时刻$t$系统所受到的总损害值。当总损害超过一定的指标$\alpha$时系统不能运行下去,寿命终止。记$T$为系统寿命,求$E(T)$。 + }{ + % 总损害值是每次损害值求和 + % $$ + % Z(t)=\sum_{i=1}^{X(t)} Y_i + % $$ + % 这是随机个随机变量求和,由于$X(t)\sim \operatorname{Poi}(\lambda)$且$Y_1,Y_2, \cdots \overset{\text{i.i.d.}}{\sim}\operatorname{Exp}(\mu)$,所以 + % $$ + % Z(t)\sim \operatorname{Ga}(\lambda t, \mu) + % $$ + 由于泊松过程本身和它的停时有良好的互转关系,所以可以按照如下方式转化原问题:注意到此问题中有三个指标:时刻、冲击次数、损害值,于是 + + 设$A_k$表示第$k$次冲击后系统所受到的总损害值,由于$Y_1,Y_2, \cdots \overset{\text{i.i.d.}}{\sim}\operatorname{Exp}(\mu)$,则 + $$ + A_k=\sum_{i=1}^{k} Y_k \sim \operatorname{Ga}(k,\mu) + $$ + 与之对应,设$B(x)$表示总损害值为$x$时受到的冲击次数,则 + $$ + B(x)\sim \operatorname{Poi}(\mu) + $$ + 再设$C_k$表示冲击次数为$k$时的时刻,由于$X(t)\sim \operatorname{Poi}(\lambda)$,所以 + $$ + C_k\sim \operatorname{Ga}(k,\lambda) + $$ + 所以所求的$E(T)$可以表述为总损害值为$\alpha$时对应的冲击次数对应的时刻,使用重期望公式可得 + $$ + E(T)=E(C_{B(\alpha)})=E(E(C_{B(\alpha)}|B(\alpha))) + $$ + 由于$E(C_{B(\alpha)}|B(\alpha)=k)=E(C_{k})=\frac{k}{\lambda}$,所以 + $$ + E(T)=E\left( \frac{B(\alpha)}{\lambda} \right) =\frac{1}{\lambda}E(B(\alpha))=\frac{\alpha \mu}{\lambda} + $$ + } + \questionandanswerSolution[]{ + 考虑速率函数为$\lambda(t)>0(\forall t\geqslant 0)$的非齐次Poisson过程$X=\{ X(t)\ :\ t\geqslant 0 \}$。令 + $$ + m(t)=\int_{0}^{t} \lambda(u) \mathrm{d}u \qquad (t\geqslant 0), + $$ + $m(t)$的反函数记为$l(t)$。对$t\geqslant 0$,记$Y(t)=X(l(t))$。证明$Y=\{ Y(t)\ :\ t\geqslant 0 \}$是经典Poisson过程,并求它的强度。 + }{ + 由题意可知$X(t)\sim \operatorname{Poi}(m(t))$,又知$m(t)$和$l(t)$互为反函数,所以 + $$ + Y(t)=X(l(t))\sim \operatorname{Poi}(m(l(t)))=\operatorname{Poi}(t) + $$ + 所以$T=\{ Y(t)\ :\ t\geqslant 0 \}$是经典Poisson过程,它的强度为1。 + } + \questionandanswerSolution[]{ + 重复地抛掷一枚均匀硬币,抛掷结果为$Y_0,Y_1,Y_2, \cdots $,它们取值为1(表示正面)或0(表示反面)的概率均为$\frac{1}{2}$。用$X_n=Y_{n-1}+Y_n$表示第$n-1$次和第$n$次抛掷出正面的总次数$(n\geqslant 1)$。问$X=\{ X_n\ :\ n\in \mathbb{Z}^{+} \}$是否是马氏链?并说明理由。 + }{ + $ + \forall n\in \mathbb{Z}^{+},\forall i_1, \cdots ,i_{n-1},i,j\in S=\{ 0,1 \} + $, + $$ + \begin{aligned} + &P(X_{n+1}=j|X_n=i,X_{n-1}=i_{n-1}, \cdots ,X_{1}=i_1) \\ + =&P(Y_n+Y_{n+1}=j|Y_{n-1}+Y_n=i, \cdots ,Y_0+Y_1=i_1) \\ + \end{aligned} + $$ + 因为$Y_0,Y_1,Y_2, \cdots $相互独立,所以条件概率中与$Y_n$和$Y_{n+1}$无关的条件都可以不考虑,即 + $$ + \text{上式}=P(Y_n+Y_{n+1}=j|Y_{n-1}+Y_n=i)=P(X_{n+1}=j|X_n=i) + $$ + 所以$X=\{ X_n\ :\ n\in \mathbb{Z}^{+} \}$是马氏链。 + } + \questionandanswerSolution[]{ + 一个出租车司机在机场、宾馆A、宾馆B之间按照如下方式行车:如果他在机场,那 + 么下一时刻他将以等概率到达两个宾馆中的任意一个;如果他在其中一个宾馆,那么下 + 一时刻他将以概率3/4返回到机场,而以概率1/4开往另一个宾馆. 假设在时刻0时 + 司机在机场,求在时刻3时他在宾馆A的概率。 + }{ + 设机场、宾馆A、宾馆B分别用0、1、2表示,设一步转移概率矩阵为A,则 + $$ + A=\begin{bmatrix} + 0 & \frac{1}{2} & \frac{1}{2} \\ + \frac{3}{4} & 0 & \frac{1}{4} \\ + \frac{3}{4} & \frac{1}{4} & 0 \\ + \end{bmatrix}\qquad + A^{3} = \begin{bmatrix}\frac{3}{16} & \frac{13}{32} & \frac{13}{32}\\\frac{39}{64} & \frac{3}{16} & \frac{13}{64}\\\frac{39}{64} & \frac{13}{64} & \frac{3}{16}\end{bmatrix} + $$ + 所求的概率为经过3个时刻(时间齐次)从机场到宾馆A的概率,即$\dfrac{13}{32} = 0.40625$。 + } + \questionandanswer[]{ + (天气链)已知当昨天和前天都晴天时,今天将下雨的概率是$0.3$;而当昨天和前天中至少有一天下雨时,今天将下雨的概率是$0.6$。用$W_n$表示第$n$天的天气,它取值为$R$(表示下雨)或$S$(表示晴天)。尽管$W=\{ W_n\ :\ n\in \mathbb{N} \}$不是一个马氏链,但由$X_n=(W_{n-1},W_n)$定义的$X=\{ X_n\ :\ n\in \mathbb{Z}^{+} \}$是一个时齐马氏链,其状态空间为$\{RR, RS, SR, SS\}$。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 写出$X$的一步转移概率矩阵。 + }{ + % 将$RR, RS, SR, SS$分别用$0,1,2,3$表示,则 + \begin{tabular}{c|cccc} + % \hline + \diagbox{昨天今天}{今天明天} & $RR$ & $RS$ & $SR$ & $SS$ \\ + \hline + $RR$ & $0.6$ & $0.4$ & $0$ & $0$ \\ + $RS$ & $0$ & $0$ & $0.6$ & $0.4$ \\ + $SR$ & $0.6$ & $0.4$ & $0$ & $0$ \\ + $SS$ & $0$ & $0$ & $0.3$ & $0.7$ \\ + % \hline + \end{tabular} + + 所以$X$的一步转移概率矩阵为 + $$ + \begin{bmatrix} + 0.6 & 0.4 & 0 & 0 \\ + 0 & 0 & 0.6 & 0.4 \\ + 0.6 & 0.4 & 0 & 0 \\ + 0 & 0 & 0.3 & 0.7 \\ + \end{bmatrix} + $$ + } + \questionandanswerSolution[]{ + 求当给定某周的周一和周二都晴天的条件下,该周周四下雨的概率。 + }{ + 题意也就是经过两步从$SS$转移到$RR$或$SR$的概率, + $$ + \begin{bmatrix} + 0.6 & 0.4 & 0 & 0 \\ + 0 & 0 & 0.6 & 0.4 \\ + 0.6 & 0.4 & 0 & 0 \\ + 0 & 0 & 0.3 & 0.7 \\ + \end{bmatrix}^{2} = \begin{bmatrix}0.36 & 0.24 & 0.24 & 0.16\\0.36 & 0.24 & 0.12 & 0.28\\0.36 & 0.24 & 0.24 & 0.16\\0.18 & 0.12 & 0.21 & 0.49\end{bmatrix} + $$ + 所以该周周四下雨的概率为$0.18+0.21 = 0.39$。 + } + \end{enumerate} + \questionandanswer[]{ + (信号传递之“愚人节说谎版”)设在愚人节这天,姚老师以40\%的可能性把“下周的课考试”的消息(以60\%的可能性把“下周的课不考试”的消息)传给路上偶遇的陈雨杭同学,之后的每位同学(从陈雨杭开始)逐次以70\%的可能性把刚听到的消息(以30\%的可能性把刚听到的消息的对立面)传给遇到的下一位同学(每次只传给一位同学).假设第20位收到消息的是曾凡晔同学. + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 计算条件概率 + $$ + P(\text{姚老师一开始说“下周的课考试”}|\ \text{曾凡晔收到“下周的课考试”的消息}). + $$ + }{ + \begin{table} + \centering + \begin{tabular}{c|cc} + \diagbox{初始}{传出} & 考试 & 不考试 \\ + \hline + 未知 & 0.4 & 0.6 \\ + \end{tabular} + \hfil + \begin{tabular}{c|cc} + \diagbox{收到}{传出} & 考试 & 不考试 \\ + \hline + 考试 & 0.7 & 0.3 \\ + 不考试 & 0.3 & 0.7 \\ + \end{tabular} + \caption{左:第一次消息传递;右:后续消息传递} + \end{table} + 根据贝叶斯公式, + $$ + \begin{aligned} + &P(\text{姚老师一开始说“下周的课考试”}|\ \text{曾凡晔收到“下周的课考试”的消息}) \\ + &=\frac{ + \begin{split} + P(\text{曾凡晔收到“下周的课考试”的消息}|\ \text{姚老师一开始说“下周的课考试”})\\ + \times P(\text{姚老师一开始说“下周的课考试”}) + \end{split} + }{P(\text{曾凡晔收到“下周的课考试”的消息})} \\ + \end{aligned} + $$ + 从第1位同学到第20位同学,经过了19次信号传递,所以19步概率转移矩阵为 + $$ + \begin{bmatrix} + 0.7 & 0.3 \\ + 0.3 & 0.7 \\ + \end{bmatrix}^{19} = \begin{bmatrix}0.500000013743895 & 0.499999986256105\\0.499999986256105 & 0.500000013743895\end{bmatrix} + \approx \begin{bmatrix} + 0.5 & 0.5 \\ + 0.5 & 0.5 \\ + \end{bmatrix} + $$ + 所以 + $$ + P(\text{曾凡晔收到“下周的课考试”的消息}|\ \text{姚老师一开始说“下周的课考试”})=0.5 + $$ + $$ + P(\text{曾凡晔收到“下周的课考试”的消息})=0.4\times 0.5+0.6\times 0.5 = 0.5 + $$ + 所以 + $$ + P(\text{姚老师一开始说“下周的课考试”}|\ \text{曾凡晔收到“下周的课考试”的消息})=\frac{0.5\times 0.4}{0.5} = 0.4000 + $$ + } + \questionandanswerSolution[]{ + 又设在上述传递消息的过程中,第10位收到消息的是李墨涵同学,计算条件概率 + $$ + P(\text{姚老师一开始说“下周的课考试”}|\ \text{上述三位同学全都传出“下周的课考试”的消息}). + $$ + }{ + 设$A_i$表示事件“第$i$位同学传出‘下周的课考试’的消息”,$A_0$表示事件“姚老师一开始说‘下周的课考试’”,再根据贝叶斯公式和条件概率的性质,则所求的问题可转换为 + $$ + \begin{aligned} + P(A_0|A_1, A_{10}, A_{20})&=\frac{P(A_1 , A_{10}, A_{20}|A_0)\times P(A_0)}{P(A_1, A_{10}, A_{20})} \\ + &=\frac{P(A_{20}|A_{10},A_1,A_0)P(A_{10}|A_1,A_0)P(A_1|A_0)P(A_0)}{P(A_{20}|A_{10},A_1)P(A_{10}|A_1)P(A_1)} \\ + \end{aligned} + $$ + 显然此模型是马氏链,所以根据马氏链的性质, + $$ + \begin{aligned} + \text{上式}&=\frac{P(A_{20}|A_{10})P(A_{10}|A_1)P(A_1|A_0)P(A_0)}{P(A_{20}|A_{10})P(A_{10}|A_1)P(A_1)} \\ + &=\frac{P(A_1|A_0)P(A_0)}{P(A_1)} \qquad (=P(A_0|A_1)) \\ + &=\frac{0.7\times 0.4}{0.4\times 0.7+0.6\times 0.3} \\ + &= \frac{14}{23} \approx 0.6087 \\ + \end{aligned} + $$ + } + \end{enumerate} +\end{enumerate} +(要求答案均保留四位有效数字.提示:方阵的幂可用数学软件如Matlab计算.) +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第十一周作业.tex b/随机过程/作业/第十一周作业.tex new file mode 100644 index 0000000..dfde1e3 --- /dev/null +++ b/随机过程/作业/第十一周作业.tex @@ -0,0 +1,144 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{4} +\section{练习题\thesection} +\begin{enumerate} + \questionandanswerSolution[2]{ + 总共$m$个白球和$m$个黑球分别放在A,B两个坛子中,每个坛子有$m$个球,每次从这两个坛子中各随机地取一个球并把它们交换后放回。以$X_n$表示经过$n$次后A坛中黑球个数。求$X_n$的平稳分布。 + }{ + 当$X=i$时,此时的球的数量为 \qquad + \begin{tabular}{ccc} + \toprule + & A & B \\ + \midrule + 黑 & $i$ & $m-i$ \\ + 白 & $m-i$ & $i$ \\ + \bottomrule + \end{tabular} + + 则下一时刻的情况为 + \begin{center} + \begin{tabular}{ccccc} + \toprule + & A黑B黑 & A白B白 & A黑B白 & A白B黑 \\ + \midrule + 概率 & $\frac{i(m-i)}{m^{2}}$ & $\frac{i(m-i)}{m^{2}}$ & $\frac{i^{2}}{m^{2}}$ & $\frac{(m-i)^{2}}{m^{2}}$ \\ + $X$的变化 & $0$ & $0$ & $-1$ & $+1$ \\ + \bottomrule + \end{tabular} + \end{center} + + 所以一步转移概率为 $p_{i,i-1}=\frac{i^{2}}{m^{2}}$, $p_{i,i+1}=\frac{(m-i)^{2}}{m^{2}}$, $p_{ii} = \frac{2i(m-i)}{m^{2}}$。 + + 根据细致平衡条件,$\pi_i p_{i,i-1} = \pi_{i-1} p_{i-1, i}$,可得 $\pi_i \frac{i^{2}}{m^{2}}=\frac{(m-i+1)^{2}}{m^{2}} \pi_{i-1}$,所以$\frac{\pi_i}{\pi_{i-1}} = \frac{(m-i+1)^{2}}{i^{2}}$。所以 + $$ + \pi_j = \pi_0 \prod_{i=0}^{j} \frac{\pi_i}{\pi_{i-1}} = \pi_0 \prod_{i=0}^{j} \frac{(m-i+1)^{2}}{i^{2}} = \pi_0 \left( \mathrm{C}_{m}^{j} \right) ^{2} + $$ + 根据 + $$ + \sum_{j=0}^{m} \left( \mathrm{C}_{m}^{j} \right) ^{2} \pi_0 = 1 + $$ + 可得$\pi_0 = \frac{1}{\sum_{j=0}^{m} \left( \mathrm{C}_{m}^{j} \right) ^{2}}$,所以$\pi_j = \frac{(\mathrm{C}_{m}^{j})^{2}}{\sum_{j=0}^{m} (\mathrm{C}_{m}^{j})^{2}}$。所以$X_n$的平稳分布为 + $$ + \left\{ \frac{\left( \mathrm{C}_{m}^{j} \right) ^{2}}{\sum_{j=0}^{m} \left( \mathrm{C}_{m}^{j} \right) ^{2}}\ \middle|\ j=0,1, \cdots ,m \right\} + $$ + } + \questionandanswerProof[3]{ + 证明当$q>p$时带一个反射壁的简单随机游动是可逆的,并由此求$m_{00}$。 + }{ + 题目中只交代了带一个反射壁,没说反射壁在左侧还是右侧,根据后面要求的$m_{00}$来看,这里就认为在$0$的左侧吧。 + 首先写出转移概率$p_{01} = 1$, $\forall i \in \mathbb{N}^{+}$, $p_{i,i+1}=p$, $p_{i, i-1}=p$。根据细致平衡条件,$\pi_{i}p_{i,i+1}=\pi_{i+1}p_{i+1,i}$,所以 + $$ + \pi_1 q = \pi_0 \cdot 1, \qquad \forall i \in \mathbb{N}^{+}, \pi_i p =\pi_{i+1}q + $$ + 所以 + $$ + \pi_0 = \pi_1 q, \qquad \forall i \in \mathbb{N}^{+}, \pi_{i+1} = \frac{p}{q} \pi_i + $$ + 所以$\displaystyle \forall j \in \mathbb{N}^{+}, \pi_j = \pi_1\prod_{i=1}^{j-1} \frac{p}{q}$,再根据$\displaystyle \sum_{j=0}^{\infty} \pi_j = 1$可得 + $$ + 1 = \left( \sum_{j=1}^{\infty} \left( \frac{p}{q} \right)^{j-1} +q \right) \pi_1 = \left( \frac{1}{1-\frac{p}{q}} + q\right) \pi_1 = \frac{q^{2}-pq+q}{q-p} \pi_1 + $$ + 所以$\displaystyle \pi_1 = \frac{q-p}{q^{2}-qp+q}$,$\displaystyle \pi_0 = \pi_1q = \frac{q-p}{q-p+1}$。 + 所以 + $\displaystyle m_{00} = \frac{1}{\pi_0} = \frac{q-p+1}{q-p}$。 + } + \questionandanswerProof[4]{ + 若$X$的转移概率矩阵为$(p_{i,j})$,$\pi=(\pi_i, i \in S)$是$X$的可逆分布。证明对任意$n\geqslant 1$,$\pi_i p_{ij}^{(n)} = \pi_j p_{ji}^{(n)}$。 + }{ + 对$n$进行数学归纳法,当$n=1$时,由于$pi$是$X$的可逆分布,根据可逆分布的定义可知成立。 + + 当$n > 1$时,假设$n-1$时结论成立,即$\pi_i p_{ij}^{(n-1)} = \pi_j p_{ji}^{(n-1)}$,则对于$n$, + $$ + \begin{aligned} + \pi_i p_{ij}^{(n)} &= \pi_i \sum_{k \in S} p_{ik}^{(n-1)} p_{kj} = \sum_{k \in S} \pi_i p_{ik}^{(n-1)} p_{kj} = \sum_{k \in S} \pi_k p_{ki}^{(n-1)} p_{kj} \\ + &=\sum_{k \in S} \pi_k p_{kj} p_{ki}^{(n-1)} = \sum_{k \in S} \pi_j p_{jk} p_{ki}^{(n-1)} = \pi_j p_{ji}^{(n)} \\ + \end{aligned} + $$ + 所以对任意$n \geqslant 1$,$\pi_i p_{ij}^{(n)} =\pi_j p_{ji}^{(n)}$。 + } + \questionandanswer[5]{ + 设不可约马氏链$X$的转移概率矩阵$\textbf{P}$是双随机的,即每行元素之和为1,每列元素之和也为1。证明 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + $X$是正常返的当且仅当$X$是有限状态马氏链; + }{ + “$\impliedby $”:由于$P$是双随机的,且状态有限,所以离散均匀分布为$X$的平稳分布,又因为$X$不可约,所以$X$是正常返的。 + + “$\implies $”:由于$X$是正常返的,所以$X$存在唯一的平稳分布。由于$P$是双随机的,所以$(1,1,1, \cdots )$是一个不变测度。又因为平稳分布是不变测度的倍数且唯一,即$\exists a>0, \ \ \text{s.t.} \ (a,a,a, \cdots )$是平稳分布,所以$a+a+a+ \cdots =1$,所以$X$一定是有限状态马氏链。 + } + \questionandanswerProof[]{ + $X$是可逆的当且仅当$\textbf{P}$是有限阶的对称矩阵。 + }{ + “$\impliedby $”:由于$P$是有限阶的对称矩阵,设为$n$阶,即$P = (p_{ij})_{n\times n}$,则$\forall i,j =1,2, \cdots ,n$,$p_{ij} =p_{ji}$,所以当$\pi = (\frac{1}{n},\frac{1}{n}, \cdots , \frac{1}{n})$时,$\pi_i p_{ij} = \pi_j p_{ji}$,即$\pi$满足细致平衡条件,从而$\pi$是$X$的可逆分布,所以$X$是可逆的。 + + “$\implies $”:因为$X$是可逆的且不可约,所以$X$正常返,根据上一小题的结论,$X$状态有限(设为$n$个状态),且平稳分布为$\pi=(\frac{1}{n},\frac{1}{n}, \cdots ,\frac{1}{n})$。根据细致平衡条件有$\forall i, j = 1,2, \cdots , \pi_i p_{ij} = \pi_j p_{ji}$,又因为$\pi_i =\pi_j$,所以$p_{ij}=p_{ji}$,即$P$是有限阶的对称矩阵。 + } + \end{enumerate} + \questionandanswerProof[6]{ + 若对任意$i, j \in S$,$p_{ij}>0$,那么以$\left( p_{i,j} \right) _{i,j \in S}$为转移概率矩阵的正常返马氏链是可逆的当且仅当对任意的$i,j,k \in S$,$p_{ij} p_{jk} p_{ki} = p_{ik} p_{kj} p_{ji}$。 + }{ + “$\implies $”:根据定理4.1.4,从任意一状态触发回到改状态的路径与它的反向路径有相同的概率,所以$p_{ij} p_{jk} p_{ki} = p_{ik} p_{kj} p_{ji}$。 + + “$\impliedby $”: + } + \questionandanswer[8]{ + 给定整数$N>1$。设$X=\{ X_n\ :\ n=0,1, \cdots ,N \}$是转移概率矩阵为$P=\left( p_{ij} \right) _{i,j \in S}$的时齐马氏链。对任意$n = 0,1, \cdots ,N$,定义$Y_n = X_{N-n}$。 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 证明:$Y=\{ Y_n\ :\ n=0,1, \cdots ,N \}$是马氏链,但未必时齐。 + }{ + $$ + \begin{aligned} + &\forall n = 0,1, \cdots ,N-1,\quad i_0, i_1, \cdots i_{N} \in S, \\ + &P(Y_{n+1}=i_{n+1}|Y_n=i_{n}, \cdots , Y_0=0) \\ + =&P(X_{N-n-1}=i_{n+1}|X_{N-n}=n, \cdots , X_{N}=0) \\ + =& \frac{P(X_{N-n-1}=i_{n+1}, X_{N-n}=i_n, \cdots , X_{N}=0)}{P(X_{N-n}=i_n, \cdots ,X_{N}=0)} \\ + =& \frac{P(X_{N-n-1}=i_{n+1}) P(X_{N-n}=i_n|X_{N-n-1}=i_{n+1})\cdots P(X_{N}=i_0|X_{N-1}=i_1)}{P(X_{N-n}=i_{N-n})P(X_{N-n+1} =i_{n-1}|X_{N-n}=i_{n})\cdots P(X_{N}=i_0| X_{N-1}=i_1)} \\ + =&\frac{P(X_{N-n-1}=i_{n+1})P(X_{N-n}=i_{n}|X_{N-n-1}=i_{n+1})}{P(X_{N-n}=i_{n})} \\ + =&P(X_{N-n-1}=i_{n+1}|X_{N-n}=i_{n}) \\ + =&P(Y_{n+1}=i_{n+1}|Y_{n}=i_{n}) \\ + \end{aligned} + $$ + 所以$Y$是马氏链,但未必时齐。 + } + \questionandanswerProof[]{ + 证明:当$X$的初始分布是$X$的平稳分布时,$Y$是时齐马氏链。并写出$Y$的一步转移概率。 + }{ + 设$X$的平稳分布为$\pi=\{ \pi_i\ ;\ i \in S \}$,则 + $$ + p'_{ij} = P(Y_{n+1}=j|Y_{n}=i) = \frac{P(X_{N-n-1}=j)P(X_{N-n}=i|X_{N-n-1}=j)}{P(X_{N-n}=i)} = \frac{\pi_{j} p_{ji}}{\pi_{i}} + $$ + 这就是$Y$的一步转移概率,并且与$n$无关,所以$Y$是时齐马氏链。 + } + \questionandanswerProof[]{ + 证明:当$X$的初始分布是$X$的可逆分布时,两个过程$X$与$Y$同分布。 + }{ + 设$X$的初始分布是$\mu$,也是$X$的可逆分布。由于$X$的可逆分布必定是$X$的平稳分布,所以由上一小题,$\displaystyle p'_{ij} = \frac{\mu_j p_{ji}}{\mu_i} = \frac{\mu_i p_{ij}}{\mu_{i}} = p_{ij}$,所以$Y$的一步转移概率与$X$相同,所以$X$与$Y$同分布。 + } + \end{enumerate} +\end{enumerate} +\end{document} diff --git a/随机过程/作业/第十三周作业.tex b/随机过程/作业/第十三周作业.tex new file mode 100644 index 0000000..9cf5535 --- /dev/null +++ b/随机过程/作业/第十三周作业.tex @@ -0,0 +1,102 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{4} +\setcounter{section}{2} +\section{练习题\thesection} +\begin{enumerate} + \questionandanswerProof[2]{ + 证明,只要$\eta_1<1$,Galton-Watson过程所有非零状态都是非常返的。 + }{ + 根据$\eta_0$的情况分类讨论,当$\eta_0>0$时,则对于任意状态$i \in \mathbb{N}^{+}$,$i \to 0$但$0 \not \to i$($0$是吸收态),所以$i$非常返。 + + 当$\eta_0=0$时,则$\forall n \in \mathbb{N}$,$X_{n+1}\geqslant X_n$(所有个体都至少产生一个后代),则当$j > i$时$p_{ji}=0, \ f_{ji}=0$,所以对于状态$i\in \mathbb{N}^{+}$, + $$ + f_{ii}=p_{ii} + \sum_{j=i+1}^{\infty} p_{ij} f_{ji} = p_{ii} + $$ + 设$Y_{k}$表示服从后代分布的随机变量,则 + $$ + p_{ii} = P\left( \sum_{k=1}^{i} Y_k =i \right) = P(Y_{k}=1,\ k=1,2, \cdots ,i) = (\eta_1)^{i} < 1 + $$ + 所以$f_{ii}<1$,即$i$非常返。 + } + \questionandanswer[3]{ + 假设在红细胞培养试验中红细胞的生存时间是1分钟,一个红细胞死亡时以1/4的概率生成两个红细胞,以2/3的概率产生一个红细胞一个白细胞,以1/12的概率产生两个白细胞,白细胞死亡后不会再生。再生的红细胞又按前面的概率再生,且彼此互不干扰。初始时只有一个红细胞。 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 求在$n+0.5$分钟的培养过程中都没有白细胞的概率。 + }{ + 设$X = \{ X_n\ ;\ n \geqslant 0 \}$为在第$n+0.5$分钟的时刻红细胞的数量,则$X$是G-W分支过程,后代分布为$\eta = (\eta_0=\frac{1}{12}, \eta_1=\frac{2}{3}, \eta_2=\frac{1}{4})$。因为每一时刻的白细胞都由上一时刻的红细胞产生,所以在$n+0.5$分钟的培养过程中都没有白细胞也即在$n-1+0.5$分钟的培养过程中产生的所有红细胞死亡时都没有产生白细胞,那么这些红细胞死亡时都产生了两个红细胞,所以所求的概率为 + $$ + \prod_{k=1}^{n-1} \left( \frac{1}{4} \right) ^{\left( 2^{k} \right) } = 2^{4 - 2^{n + 1}} + $$ + } + \questionandanswerSolution[]{ + 在整个细胞培养过程中,细胞最终灭绝。求该现象发生的概率。 + }{ + 由于白细胞死亡后不会再生,所以只需要考虑红细胞的灭绝概率,即分支过程$X$的灭绝概率。后代分布的概率母函数为$\eta(s)=\frac{1}{4}s ^{2}+\frac{2}{3}s+\frac{1}{12}$,解$\eta(s)=s$得:$s_1=\frac{1}{3},s_2=1$。所以该分支过程的灭绝概率为$\bm{\frac{1}{3}}$。 + } + \end{enumerate} + \questionandanswerSolution[4]{ + 假设分支过程$X$的初值为$m\geqslant 1$,后代分布的概率母函数为$\eta(s)=1-p+ps$,其中$0 t) = P(B(u)>-z, 0\leqslant u\leqslant t) \xlongequal{对称性}P(B(u)t) + $$ + 即$\tau_z$与$\tau_{-z}$同分布。 + } + \questionandanswerProof[6]{ + 证明当$00$和$z>0$有 + $$ + 0\leqslant P(\tau_z\leqslant t) = \int_{0}^{t} \frac{z}{\sqrt{2 \pi s^{3}}} e^{- \frac{z^{2}}{2s}} \mathrm{d}s \xlongequal{\text{令} s=\frac{z^{2}}{u^{2}}} \sqrt{\frac{2}{\pi}} \int_{\frac{z}{\sqrt{t}}}^{+\infty} e^{- \frac{u^{2}}{s}} \mathrm{d}u \xrightarrow{z \to +\infty} 0 + $$ + 所以 $\displaystyle \lim_{z \to +\infty} P(\tau_z\leqslant t)=0 (\forall t>0)$,又因为$\tau_z$关于$z$单调增,所以事件$\{ \tau_z\leqslant t \}$关于$z$单调减,从而对任意$t >0$有 + $$ + 0 = \lim_{n \to \infty} P(\tau_n\leqslant t) = P\left( \bigcap_{n = 1} ^{\infty} \{ \tau_n\leqslant t \} \right) =P\left( \lim_{n \to \infty} \tau_n\leqslant t \right) =P\left( \lim_{z \to +\infty} \tau_z\leqslant t \right) + $$ + 进而由 + $$ + 0\leqslant P\left( \lim_{n \to +\infty} \tau_z<+\infty \right) =P\left( \bigcup_{m=1} ^{\infty} \left\{ \lim_{z \to +\infty} \tau_z\leqslant m \right\} \right) \leqslant \sum_{m=1}^{\infty} P \left( \lim_{z \to +\infty} \tau_z\leqslant m \right) =0 + $$ + 知$\displaystyle P\left( \lim_{z \to +\infty} \tau_z = +\infty \right) =1$,于是当$z \to +\infty$时有$\tau_z \xrightarrow{a.s.} +\infty$。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第十周作业.tex b/随机过程/作业/第十周作业.tex new file mode 100644 index 0000000..5bb7577 --- /dev/null +++ b/随机过程/作业/第十周作业.tex @@ -0,0 +1,248 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{3} +\setcounter{section}{3} +\section{练习题\thesection} +\begin{enumerate} + \questionandanswerProof[1]{ + 对有限状态马氏链$X$,证明 (1) $X$没有状态零常返,(2)若$X$不可约,那么$X$是正常返的。 + }{ + 假设状态$i$零常返,则$f_{ii}=1, m_{ii}=+\infty$,又由于$m_{ii}=f_{ii}+\sum_{j\neq i} p_{ij} f_{ji}$。根据性质3.2.19,因为$i$常返且$i \to j$,所以$f_{ji} =1$,从而$+\infty = 1+\sum_{j\neq i} p_{ij}$,而$\sum_{j\neq i} p_{ij} $为有限个有限的数求和,所以不可能为$+\infty$,产生矛盾,所以状态$i$不是零常返,即$X$没有状态零常返。 + + 若$X$不可约,则$X$是本质类,又因为$X$的状态有限,所以$X$是常返类;又因为$X$没有状态零常返,所以$X$是正常返的。 + } + \questionandanswerSolution[3]{ + 设$X$是一个不可约非常返的马氏链,令 + $$ + l_j = \sup \{ n\geqslant 0, X_n=j, X_k \neq j, k>n \}, + $$ + 即$l_j$是$X$最后一次到达状态$j$的时间。假定$X$从$j$出发,求$l_j$的分布和均值。 + }{ + $$ + P(l_j = n) = P_j(X_n=j, X_k \neq j, \forall k>n) = p_{jj}^{(n)} \cdot \sum_{k\neq j} e_{jk} + $$ + $$ + E(l_j) = \sum_{n=1}^{\infty} n P(l_j=n) = \sum_{n=1}^{\infty} n p_{jj}^{(n)} \sum_{k\neq j} e_{jk} + $$ + } + \questionandanswerSolution[4]{ + 设$X$的转移概率矩阵为$\begin{bmatrix} + 0 & 1 & 0 \\ + \frac{1}{4} & \frac{1}{2} & \frac{1}{4} \\ + 0 & 1 & 0 \\ + \end{bmatrix}$,求$X$的平稳分布。 + }{ + 设$M = (\pi_1, \pi_2, \pi_3)$,$P$为转移概率矩阵,则根据$M=MP$以及$\pi_1+\pi_2+\pi_3=1$可以列出方程组如下: + $$ + \begin{cases} + \pi_1=\frac{1}{4}\pi_2 \\ + \pi_2=\pi_1+\frac{1}{2}\pi_2+\pi_3 \\ + \pi_3=\frac{1}{4}\pi_2 \\ + \pi_1+\pi_2+\pi_3=1 \\ + \end{cases} + $$ + 解得$(\pi_1,\pi_2,\pi_3)=\left(\frac{1}{6},\frac{2}{3},\frac{1}{6}\right)$,此即为$X$的平稳分布。 + } + \questionandanswerSolution[5]{ + 一个月后小明有两天假期,他就打算只要假期里有一天的天气晴朗就出去 +旅行. 为此他查阅了气象资料,发现每日天气晴朗(0)与非晴朗(1)之间的 +变化可以近似用时齐马氏链来刻画,转移概率矩阵为$\begin{pmatrix} +\frac{1}{2} & \frac{1}{2} \\ +\frac{1}{4} & \frac{3}{4} \\ +\end{pmatrix}$。试估计小明能出去旅行的概率。 + }{ + 设这两天假期的天气为$X_0$和$X_1$,状态空间为$S=\{ 0,1 \}$,则小明能出去旅行的概率为 + $$ +\begin{aligned} +P(X_0=0)+P(X_0=1, X_1=0) & = P(X_0=0)+P(X_0=1)P(X_1=0|X_0=1) \\ +& = P(X_0=0)+P(X_0=1)p_{10} \\ +\end{aligned} + $$ + + 由于每日天气之间的变化可以近似用时齐马氏链来刻画,且天气是一个稳定的系统,所以可以认为天气的初始分布为平稳分布,即$P(X_0=0)$和$P(X_0=1)$可以使用平稳分布的概率来计算。 + + 设$M=(\pi_1,\pi_2)$,$P$为转移概率矩阵,则根据$M=MP$以及$\pi_1+\pi_2=1$可以列出方程组如下: + $$ + \begin{cases} + \pi_0=\frac{1}{2}\pi_0+\frac{1}{4}\pi_1 \\ + \pi_1=\frac{1}{2}\pi_0+\frac{3}{4}\pi_1 \\ + \pi_0+\pi_1=1 \\ + \end{cases} + $$ + 解得$(\pi_0,\pi_1)=\left( \frac{1}{3},\frac{2}{3} \right) $,此即为天气的平稳分布,所以$P(X_0=0)=\frac{1}{3}$, $P(X_0=1)=\frac{2}{3}$,所以小明能出去旅行的概率为$\displaystyle \frac{1}{3}+\frac{2}{3}\times \frac{1}{4} = \frac{1}{2}$。 + } + \questionandanswerSolution[6]{ + 某人有$M$把伞并在办公室和家之间往返:出门上班时下雨并家里有伞就 +带把伞去办公室;下班回家时下雨且办公室有伞就带把伞回家。其它时候 +都不带伞。假设每天上下班时是否下雨是独立同分布的,下雨的概率为$p$, +不下雨的概率为$1-p$,问此人出门上班时碰到下雨且没有雨伞的概率。 + }{ + 设$X=\{ X_i\ :\ i \in \mathbb{Z} \}$表示某天上班之前家里的伞的数量,则显然$X$是时齐马氏链。为了求出转移概率矩阵,可以梳理出下表: + \begin{center} + \begin{tabular}{ccccc} + \toprule + 上班 & \multicolumn{2}{c}{下雨} & \multicolumn{2}{c}{不下雨} \\ + \midrule + 下班 & 下雨 & 不下雨 & 下雨 & 不下雨 \\ + \midrule + 概率 & $p^{2}$ & $p(1-p)$ & $p(1-p)$ & $(1-p)^{2}$ \\ + $X$的变化 & $0$ & $-1$ & $+1$ & $0$ \\ + \bottomrule + \end{tabular} + \end{center} + 需要注意的是,$0$和$M$为$X$的边界,即当$X=0$时不能再减少,当$X=M$时不能再增加,所以转移概率矩阵为: + $$ + P = \begin{bmatrix} + 1-p+p^{2} & p(1-p) & 0 & \cdots & 0 & 0 & 0 \\ + p(1-p) & p^{2}+(1-p)^{2} & p(1-p) & \cdots & 0 & 0 & 0 \\ + 0 & p(1-p) & p^{2}+(1-p)^{2} & \cdots & 0 & 0 & 0 \\ + \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots \\ + 0 & 0 & 0 & \cdots & p^{2}+(1-p)^{2} & p(1-p) & 0 \\ + 0 & 0 & 0 & \cdots & p(1-p) & p^{2}+(1-p)^{2} & p(1-p) \\ + 0 & 0 & 0 & \cdots & 0 & p(1-p) & 1-p+p^{2} \\ + \end{bmatrix} + $$ + 根据$\begin{bmatrix} + \pi_0 & \pi_1 & \cdots & \pi_{M} \\ + \end{bmatrix}P = \begin{bmatrix} + \pi_0 & \pi_1 & \cdots & \pi_{M} \\ + \end{bmatrix}$以及$\pi_0+\pi_1+ \cdots +\pi_{M}=1$可以解得 + $$ + \pi_0=\pi_1=\cdots=\pi_{M}=\frac{1}{M+1} + $$ + (直观上这么复杂的一个系统,竟然处于任何一个状态的概率都是相同的!) + + 此即为$X$的平稳分布,所以$P(X=0) = \dfrac{1}{M+1}$。 + $$ + P(\text{此人出门上班时碰到下雨且没有雨伞}) = p P(X=0) = \frac{p}{M+1} + $$ + } + \questionandanswer[7]{ + 设$X$的状态空间$S=\mathbb{N}$,对任意$n\geqslant 0$,转移概率$p_{n,n+1}=p_{n}$, $p_{n,0}=1-p_n$,其中$p_n\in (0,1)$。求 + }{} + \begin{enumerate} + \questionandanswerSolution[]{ + 能保证$0$是常返状态的条件; + }{ + 只需要考虑$f_{00} = \sum_{n=1}^{\infty} f_{00}^{(n)}=1$的条件。由于 + $$ + \begin{cases} + f_{00}^{(1)}=p_{00}=1-p_0 \\ + f_{00}^{(2)}=p_{01} p_{10} = p_0(1-p_1)=p_0-p_0p_1 \\ + f_{00}^{(3)}=p_{01}p_{12}p_{20}=p_0p_1(1-p_2)=p_0p_1-p_0p_1p_2 \\ + \cdots \\ + \end{cases} + $$ + 所以 $\displaystyle \sum_{n=0}^{m} f_{00}^{(n)}=1-\prod_{n=0}^{m-1} p_{i}$, \quad $\displaystyle \sum_{n=0}^{\infty} f_{00}^{(n)}= \lim_{m \to \infty} \sum_{n=0}^{m} f_{00}^{(n)}=\lim_{m \to \infty}\left( 1- \prod_{n=0}^{m-1} p_{i} \right) = 1$,所以能保证$0$是常返状态的条件为 + $$ + \prod_{n=0}^{\infty} p_i = 0, \quad \text{即}\ p_0p_1p_2\cdots = 0 + $$ + } + \questionandanswerSolution[]{ + 能保证$0$是正常返状态的条件; + }{ + $0$是正常返状态即$m_{00}<\infty$,所以 + $$ + \begin{cases} + m_{00} = 1+p_0 m_{10} <\infty \implies p_0 = 0 \text{或} m_{10}<\infty \\ + m_{10} = 1+p_1m_{20}<\infty \implies p_1=0\text{或} m_{20}<\infty \\ + m_{20}=1+p_2m_{30}<\infty \implies p_2=0 \text{或}m_{30}<\infty \\ + \cdots \\ + \end{cases} + $$ + 所以能保证$0$是正常返状态的条件为$\exists n_0 \in \mathbb{N}, \ \ \text{s.t.} \ p_{n_0}=0$。也就是当$p_0, p_1,p_2, \cdots $中首次出现$0$的时候,在这个$0$前面的部分构成有限状态的本质类,从而构成正常返类,从而$0$是正常返状态。 + } + \questionandanswerSolution[]{ + 平稳分布。 + }{ + 转移概率矩阵为 + $$ + P = \begin{bmatrix} + 1-p_0 & p_0 & 0 & 0 & \cdots \\ + 1-p_1 & 0 & p_1 & 0 & \cdots \\ + 1-p_2 & 0 & 0 & p_2 & \cdots \\ + \vdots & \vdots & \vdots & \vdots & \ddots \\ + \end{bmatrix} + $$ + 根据$\begin{bmatrix} + \pi_0 & \pi_1 & \pi_2 & \cdots \\ + \end{bmatrix} P = \begin{bmatrix} + \pi_0 & \pi_1 & \pi_2 & \cdots \\ + \end{bmatrix}$以及$\pi_0+\pi_1+\pi_2+ \cdots =1$可以解得 + $$ + \begin{cases} + \pi_0=\frac{1}{1+p_0+p_0p_1+p_0p_1p_2+ \cdots } \\ + \pi_1=\frac{p_0}{1+p_0+p_0p_1+p_0p_1p_2+ \cdots } \\ + \pi_2=\frac{p_0p_1}{1+p_0+p_0p_1+p_0p_1p_2+ \cdots } \\ + \cdots \\ + \end{cases} + $$ + 即 $\forall i\in \mathbb{N}, \ \displaystyle \pi_i = \frac{\prod_{j=1}^{i} p_i}{\sum_{n=1}^{\infty} \prod_{j=1}^{n} p_i}$,此即为$X$的平稳分布。 + } + \end{enumerate} + \questionandanswer[8]{ + 设$X$的转移概率满足:对任意$i,j \in S=\mathbb{N}, p_{i,i}=\lambda_i+(1-\lambda_i)u_i$;而$i\neq j$时,$p_{i,j}=(1-\lambda_i)u_j$,其中$u_j>0$,$\displaystyle \sum_{j=0}^{\infty} u_j=1, 0<\lambda_i<1$。证明 + }{} + \begin{enumerate} + \questionandanswerProof[]{ + $X$是常返的; + }{ + 首先写出转移概率矩阵: + $$ + P=\begin{bmatrix} + \lambda_0+(1-\lambda_0)u_0 & (1-\lambda_0)u_1 & (1-\lambda_0)u_2 & \cdots \\ + (1-\lambda_1)u_0 & \lambda_1+(1-\lambda_1)u_1 & (1-\lambda_1)u_2 & \cdots \\ + (1-\lambda_2)u_0 & (1-\lambda_2)u_1 & \lambda_2+(1-\lambda_2)u_2 & \cdots \\ + \vdots & \vdots & \vdots & \vdots \\ + \end{bmatrix} + $$ + 观察后可以发现 + $$ + P=\begin{bmatrix} + 1-\lambda_0 \\ + 1-\lambda_1 \\ + 1-\lambda_2 \\ + \vdots \\ + \end{bmatrix} \begin{bmatrix} + u_0 & u_1 & u_2 & \cdots \\ + \end{bmatrix} + \operatorname{diag}(\lambda_0,\lambda_1,\lambda_2, \cdots ) + $$ + 所以$\forall i \in \mathbb{N}, p_{ii}^{(n)}=P^{n}(i, i)$,计算后可以发现$n \to \infty$时,$p_{ii}^{(n)}$不以$0$为极限,所以$i$常返,从而$X$是常返的。 + } + \questionandanswerProof[]{ + $X$是正常返当且仅当$\displaystyle \sum_{i=0}^{\infty} \frac{u_i}{1-\lambda_i}<\infty$。 + }{ + $\forall i \in \mathbb{N}$,由于$X$常返,所以$f_{ii}=1$,从而有 + $$ + \begin{aligned} + X_i \text{正常返} &\iff m_{ii}=f_{ii}+\sum_{j\neq i} p_{ij} m_{ji} = 1+\sum_{j\neq i} (1-\lambda_i)u_j m_{ji}<\infty \\ + &\iff\forall j \in \mathbb{N}, (1-\lambda_i)u_j <\infty \\ + \end{aligned} + $$ + 对$i$求和可知上式$\iff \displaystyle \sum_{i=0}^{\infty} \frac{u_i}{1-\lambda_i}<\infty$,因此$X$是正常返当且仅当$\displaystyle \sum_{i=0}^{\infty} \frac{u_i}{1-\lambda_i}<\infty$。 + } + \end{enumerate} + \questionandanswerProof[10]{ + 设不可约正常返马氏链$X$的转移概率矩阵为$(p_{i,j})_{i,j \in S}$,$\pi=(\pi_i, i \in S)$为平稳分布。令$Y_n=(X_n,X_{n+1})$。证明$Y=\{ Y_n\ ;\ n\geqslant 0 \}$是状态空间为$\mathcal{M} = \{ (i,j)\ ;\ i,j \in S, p_{i,j} >0 \}$的不可约正常返马氏链,平稳分布为$(\pi_i p_{i,j}, (i,j) \in \mathcal{M})$。 + }{ + 因为$X$是不可约正常返马氏链,所以$\forall i,j,k,l \in S \text{且满足} p_{ij}>0, p_{kl}>0$(即 $\forall (i,j), (k,l) \in \mathcal{M}$), $\exists n_0 \in \mathbb{N}, \ \ \text{s.t.} \ p_{ik}^{(n_0)} >0$,从而 + $$ + p_{(i,j)(k,l)}^{(n_0)} = p_{ik}^{(n_0)} p_{kl}>0 + $$ + 即$Y$的任意两个状态都可互通,所以$Y$是不可约的。 + + 因为$X$是正常返的,所以对于$\forall (i,j)\in \mathcal{M}$, $\sum_{n=1}^{\infty} p_{ii}^{(n)}<\infty$,所以 + $$ + p_{(i,j)(i,j)}^{(n)} = p_{ii}^{(n)} p_{ij} \implies \sum_{n=1}^{\infty} p_{(i,j)(i,j)}^{(n)} = \sum_{n=1}^{\infty} p_{ii}^{(n)} p_{ij} <\infty + $$ + 所以$Y$是正常返的。 + + 因为$\pi=(\pi_i, i \in S)$为$X$的平稳分布,所以对于$\forall (i,j), (j,k)\in \mathcal{M}$,$\pi_i p_{ij} = \pi_j$,所以 + $$ + \pi_i p_{ij} p_{(i,j)(j,k)} = \pi_i p_{ij} p_{jk} = \pi_j p_{jk} + $$ + 所以$(\pi_i p_{ij}, (i,j) \in \mathcal{M})$为$Y$的平稳分布。 + } +\end{enumerate} +\end{document} \ No newline at end of file diff --git a/随机过程/作业/第十四周作业.tex b/随机过程/作业/第十四周作业.tex new file mode 100644 index 0000000..63191ce --- /dev/null +++ b/随机过程/作业/第十四周作业.tex @@ -0,0 +1,258 @@ +\documentclass[全部作业]{subfiles} +\input{mysubpreamble} +\begin{document} +\setcounter{chapter}{6} +\section{布朗运动及其分布} +\subsection{练习题\thesection} +(\textcolor{red}{若无特别说明},以下总设$B=\{ B(t)\ ;\ t\geqslant 0 \}$为标准布朗运动。) +\begin{enumerate} + \questionandanswerSolution[2]{ + 对任意$00$为常数。证明对任意$0\leqslant t0,W_2>0, \cdots ,W_5>0,W_6=2)$。 + }{ + % $$ + % \frac{\mathrm{d}}{\mathrm{d}x}\frac{\mathrm{d}}{\mathrm{d}x}\frac{\mathrm{d}}{\mathrm{d}x}\frac{\mathrm{d}}{\mathrm{d}x}\frac{\mathrm{d}}{\mathrm{d}x}(x^{3}+x+1)^{5} = 360360 x^{10} + 772200 x^{8} + 475200 x^{7} + 554400 x^{6} + 604800 x^{5} + 302400 x^{4} + 201600 x^{3} + 88200 x^{2} + 21600 x + 3720 + % $$ + 根据反射原理, + $$ + \begin{aligned} + &P(W_1>0,W_2>0, \cdots ,W_5>0,W_6=2) \\ + =&P(W_1=1)P(W_2>0, \cdots ,W_5>0,W_6=2) \\ + =&P(W_1=1)P(W_2>0, \cdots ,W_5>0,W_6=2) \\ + =&P(W_1=1)p_5(-1,2) = P(W_1=1)p_5(0,3) \\ + \end{aligned} + $$ + 继续同上方法 + $$ + \begin{cases} + m+n+k=5 \\ + -2m-n+k=3 \\ + \end{cases} \Longrightarrow (m,n,k)=(0,1,4) + $$ + $$ + p_5(0,3)=\mathrm{C}_{5}^{1}\left( \frac{1}{3} \right) ^{5} = \frac{5}{243} + $$ + 所以 + $$ + \text{原式}=P(W_1=1)p_5(0,3)=\frac{1}{3}\times \frac{5}{243} = \frac{5}{729} + $$ + } + \end{enumerate} + \questionandanswerSolution[5]{ + 分别记甲乙两种药物对某种疾病的治愈率为$p_1,p_2$。为了比较它们的治愈率 + 大小, 安排了一系列如下的临床对比试验: 每次试验同时治疗两个病人,一 + 个接受甲药治疗,另一个接受乙药治疗。观察每次治疗效果。假设每次试验 + 是独立的; 病人对药物的疗效无本质影响。试用恰当的整数值随机游动模型 + 对这样一系列的试验中治愈病人数差异的变化建模。 对任意$x\in \mathbb{Z}$,试写该 + 模型的一步转移概率$p(x)$。 + }{ + 设随机变量$X_0=1$,随机变量序列$\{ X_n\ ;\ n\geqslant 1 \}$表示每次试验增加的治愈病人数,而随机过程$W=\{ \sum_{k=0}^{n} X_k\ ;\ n\geqslant 0 \}$表示这样一系列的试验中总治愈病人数,则$\{ X_n\ ;\ n\geqslant 0 \}$相互独立且只能取整数值,且对$\forall n\geqslant 1$,$X_n$的分布相同,从而$W$是整数值的随机游动。则该模型的一步转移概率为 + $$ + p(x)=\begin{cases} + (1-p_1)(1-p_2),\quad & x=0 \\ + p_1(1-p_2)+p_2(1-p_1),\quad & x=1 \\ + p_1p_2,\quad & x=2 \\ + \end{cases}\quad =\begin{cases} + 1-p_1-p_2+p_1p_2,\quad & x=0 \\ + p_1+p_2-2p_1p_2,\quad & x=1 \\ + p_1p_2,\quad & x=2 \\ + \end{cases} + $$ + } + % $$ + % 1-\sum_{i=1}^{n} \frac{1}{2i-1}\binom{2i}{i}\left( \frac{1}{2} \right) ^{2i} - \binom{2n}{n}\left( \frac{1}{2} \right) ^{2n} = 0 = = - \frac{\Gamma(n + \frac{1}{2})}{\sqrt{\pi} \Gamma(n + 1)} + 1 + % $$ + \questionandanswer[6]{ + 对初值为$0$的简单对称随机游动$W$, + }{} + \begin{enumerate} + \questionandanswerProof[]{ + 对任意$n\geqslant 1$,证明$P(W_1\neq 0, W_2\neq 0, \cdots ,W_{2n}\neq 0)=P(W_{2n}=0)$。 + }{ + $$ + \text{左边}=P(\tau_0>2n), \quad \text{右边}=\mathrm{C}_{2n}^{n}\left( \frac{1}{2} \right) ^{n}\left( \frac{1}{2} \right) ^{n} + $$ + $$ + \begin{aligned} + P(\tau_0>2n)=1-P(\tau_0\leqslant 2n)=1-\sum_{m=1}^{2n} P(\tau_0=m) + \end{aligned} + $$ + 由于$P(\tau_0 \text{为奇数})=0$,所以 + $$ + \begin{aligned} + P(\tau_0>2n)=1-\sum_{i=1}^{n} P(\tau_0=2i)=1-\sum_{i=1}^{n} \frac{1}{2i-1}\mathrm{C}_{2i}^{i} \left( \frac{1}{2} \right) ^{2i} =\frac{\Gamma(n + \frac{1}{2})}{\sqrt{\pi} \Gamma(n + 1)} + \end{aligned} + $$ + 使用Python计算可得 + $$ + \frac{\Gamma(n + \frac{1}{2})}{\sqrt{\pi} \Gamma(n + 1)} - \binom{2n}{n}\left( \frac{1}{2} \right) ^{2n} = 0 + $$ + 即 + $$ + P(\tau_0>2n)=\frac{\Gamma(n + \frac{1}{2})}{\sqrt{\pi} \Gamma(n + 1)} = \binom{2n}{n}\left( \frac{1}{2} \right) ^{2n} = \mathrm{C}_{2n}^{n}\left( \frac{1}{2} \right) ^{n}\left( \frac{1}{2} \right) ^{n} + $$ + 因此 + $$ + \text{左边}=\text{}右边 + $$ + } + \questionandanswerSolution[]{ + 令$F_1(s)=\sum_{k=1}^{\infty} P(\tau_1=k|W_0=0)s^{k}$,其中$\left\vert s \right\vert <1$,求$F_1(s)$。 + }{ + % $$ + % \sum_{k=1}^{\infty} \binom{k}{\frac{k-1}{2}}\left( \frac{1}{2} \right) ^{2k} s^{k} = \frac{\sum_{k=1}^{\infty} \frac{2^{- k} s^{k} \Gamma(\frac{k}{2} + 1)}{\Gamma(\frac{k + 3}{2})}}{\sqrt{\pi}} + % $$ + $$ + \begin{aligned} + F_1(s)&=\sum_{k=1}^{\infty} P_0(\tau_1=k)s^{k}=\sum_{k=1}^{\infty} P(\tau_1=k,W_k=1)s^{k} \\ + &=\sum_{k=1}^{\infty} P(\tau_1=k|W_k=1)P(W_k=1)s^{k} \\ + \end{aligned} + $$ + 根据对称原理,从$0$经过$k$步到$1$中间不碰$1$,相当于从$0$经过$k$步到$1$中间不碰$0$。 + $$ + \begin{aligned} + \text{上式}&=\sum_{k=1}^{\infty} P(\tau_0>k|W_k=1)P(W_k=1)s^{k} \\ + &=\sum_{k=1}^{\infty}\frac{1}{k}\mathrm{C}_{k}^{\frac{k-1}{2}} \left( \frac{1}{2} \right) ^{2k} s^{k} \\ + &=\sum_{k=1}^{\infty}\frac{1}{k}\left( \frac{1}{2} \right) ^{2k} \frac{k!s^{k}}{\frac{k+1}{2}! \frac{k-1}{2}!}\\ + \end{aligned} + $$ + 而$\sqrt{1-x}$在$x=0$点的幂级数展开为 + $$ + \sqrt{1-x}=\sum_{n=1}^{\infty} (-1)^{n}\left( \frac{1}{2} \right) ^{n}n! + $$ + 所以 + $$ + F_1(s) = \frac{\sum_{k=1}^{\infty} \frac{2^{- k} s^{k} \Gamma(\frac{k}{2})}{\Gamma(\frac{k + 3}{2})}}{2 \sqrt{\pi}} + $$ + } + \end{enumerate} + \questionandanswerProof[7]{ + 对初值为$0$的简单随机游动$W$,证明:对任意正整数$N$以及与$N$同奇偶的整数$a\in [-N,N]$, + $$ + P(W_k