<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>鬼の领地 &#187; 物理</title>
	<atom:link href="http://blog.upsuper.org/tag/%e7%89%a9%e7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.upsuper.org</link>
	<description>the place where there are some ghost appearing...</description>
	<lastBuildDate>Thu, 17 Jun 2010 08:12:24 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Python 物理实验数据处理类</title>
		<link>http://blog.upsuper.org/python-class-for-physics-experimentation-data-statistics/</link>
		<comments>http://blog.upsuper.org/python-class-for-physics-experimentation-data-statistics/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 09:06:09 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[小程序]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[同济大学]]></category>
		<category><![CDATA[物理]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=866</guid>
		<description><![CDATA[非常无语的，同济大一什么物理理论都没学，需要的高数基础也都没有学过，竟然要我们先学物理实验，而且要处理数据，计算平均值和标准误差什么的，十分麻烦……
上次处理数据弄了个零碎的小程序来，很麻烦，这次就把他统一编为一个模块，方便以后使用……这个模块里面的说有公式依据是同济大学出版社《物理实验教程》第1版第二章的内容。
如何使用这个模块呢？首先，作为一个 Python 模块，肯定要用 Python……
然后我用我第一次做实验的部分数据演示一下：

直接输入数据，标准格式输出~
最后是代码：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#!/usr/bin/env python
# -*- coding: utf-8 -*-
&#160;
import math
sqrt = math.sqrt
&#160;
def gen_imet&#40;func&#41;:
  def retfunc&#40;self, other&#41;:
    ret = func&#40;self, other&#41;
    self.ave = ret.ave
    self.u = ret.u
    self.digs = ret.digs
    return self
  return retfunc
&#160;
def get_digs&#40;a, b&#41;:
  if a [...]]]></description>
			<content:encoded><![CDATA[<p>非常无语的，同济大一什么物理理论都没学，需要的高数基础也都没有学过，竟然要我们先学物理实验，而且要处理数据，计算平均值和标准误差什么的，十分麻烦……</p>
<p>上次处理数据弄了个零碎的小程序来，很麻烦，这次就把他统一编为一个模块，方便以后使用……这个模块里面的说有公式依据是同济大学出版社《物理实验教程》第1版第二章的内容。</p>
<p>如何使用这个模块呢？首先，作为一个 Python 模块，肯定要用 Python……</p>
<p>然后我用我第一次做实验的部分数据演示一下：<br />
<a href="http://blog.upsuper.org/wp-content/uploads/2009/10/Screenshot-upsuper@upsuper-netbook-external-tju.png"><img src="http://blog.upsuper.org/wp-content/uploads/2009/10/Screenshot-upsuper@upsuper-netbook-external-tju.png" alt="Screenshot-upsuper@upsuper-netbook: ~-external-tju" title="Screenshot-upsuper@upsuper-netbook: ~-external-tju" width="588" height="303" class="alignnone size-full wp-image-867" /></a></p>
<p>直接输入数据，标准格式输出~</p>
<p>最后是代码：</p>

<div class="wp_codebox"><table><tr id="p8662"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
</pre></td><td class="code" id="p866code2"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># -*- coding: utf-8 -*-</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">math</span>
sqrt = <span style="color: #dc143c;">math</span>.<span style="color: black;">sqrt</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> gen_imet<span style="color: black;">&#40;</span>func<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">def</span> retfunc<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>:
    ret = func<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> = ret.<span style="color: black;">ave</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">u</span> = ret.<span style="color: black;">u</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">digs</span> = ret.<span style="color: black;">digs</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span>
  <span style="color: #ff7700;font-weight:bold;">return</span> retfunc
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> get_digs<span style="color: black;">&#40;</span>a, b<span style="color: black;">&#41;</span>:
  <span style="color: #ff7700;font-weight:bold;">if</span> a == <span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">return</span> b
  <span style="color: #ff7700;font-weight:bold;">elif</span> b == <span style="color: #ff4500;">0</span>: <span style="color: #ff7700;font-weight:bold;">return</span> a
  <span style="color: #ff7700;font-weight:bold;">else</span>: <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">min</span><span style="color: black;">&#40;</span>a, b<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> PhyStat:
  <span style="color: #483d8b;">&quot;&quot;&quot;
  物理实验数据
&nbsp;
  PhyStat(ave, u = 0.0, digs = 0)
  ave   表示平均值，如果传入一列数则自动计算平均值及其标准误差
  u     表示标准误差，如果 ave 传入数据列表则此处表示仪器精度
  digs  表示有效数字个数，0 表示不限制
  &quot;&quot;&quot;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__init__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, ave, u = <span style="color: #ff4500;">0.0</span>, digs = <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>:
    <span style="color: #483d8b;">&quot;&quot;&quot;
    对于 ave 为数据列表的情况，使用下面公式计算平均值：
    ave = Σx[i] / n
    根据下面公式计算标准误差：
    S = Sqrt(Σ(x[i]-ave)^2 / (n - 1))
    u = Δinst / Sqrt(3)
    U = Sqrt(S^2 + u^2)
    &quot;&quot;&quot;</span>
    <span style="color: #008000;">self</span>.<span style="color: black;">digs</span> = digs
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>ave, <span style="color: #008000;">tuple</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">or</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>ave, <span style="color: #008000;">list</span><span style="color: black;">&#41;</span>:
      data = ave
      n = <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>data<span style="color: black;">&#41;</span>
      ave = <span style="color: #dc143c;">math</span>.<span style="color: black;">fsum</span><span style="color: black;">&#40;</span>ave<span style="color: black;">&#41;</span> / n
      <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> = ave
&nbsp;
      s = <span style="color: #ff4500;">0.0</span>
      <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> data:
        s += <span style="color: black;">&#40;</span>i - ave<span style="color: black;">&#41;</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span>
      s = sqrt<span style="color: black;">&#40;</span>s / <span style="color: black;">&#40;</span>n - <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
      u /= sqrt<span style="color: black;">&#40;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#41;</span>
      <span style="color: #008000;">self</span>.<span style="color: black;">u</span> = sqrt<span style="color: black;">&#40;</span>s <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span> + u <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
      <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> = <span style="color: #008000;">float</span><span style="color: black;">&#40;</span>ave<span style="color: black;">&#41;</span>
      <span style="color: #008000;">self</span>.<span style="color: black;">u</span> = <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span><span style="color: #008000;">float</span><span style="color: black;">&#40;</span>u<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__repr__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
    ave = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span>
    exp = <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">math</span>.<span style="color: black;">floor</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">math</span>.<span style="color: black;">log10</span><span style="color: black;">&#40;</span>ave<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    exp10 = <span style="color: #ff4500;">10</span> <span style="color: #66cc66;">**</span> exp
    ave = ave / exp10
    u = <span style="color: #008000;">self</span>.<span style="color: black;">u</span> / exp10
    digs = <span style="color: #008000;">self</span>.<span style="color: black;">digs</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> digs == <span style="color: #ff4500;">0</span>:
      ret = <span style="color: #483d8b;">'%f ±%f'</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
      ret = <span style="color: #483d8b;">'%%.%df ±%%.%df'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>digs, digs<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> exp:
      ret = <span style="color: #483d8b;">'(%s) E %d'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>ret, exp<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> ret <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span>ave, u<span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #0000cd;">__neg__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: PhyStat<span style="color: black;">&#40;</span>-<span style="color: #008000;">self</span>.<span style="color: black;">ave</span>, <span style="color: #008000;">self</span>.<span style="color: black;">u</span>, <span style="color: #008000;">self</span>.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__pos__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: <span style="color: #008000;">self</span>
  <span style="color: #0000cd;">__abs__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: PhyStat<span style="color: black;">&#40;</span><span style="color: #008000;">abs</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">ave</span><span style="color: black;">&#41;</span>, <span style="color: #008000;">self</span>.<span style="color: black;">u</span>, <span style="color: #008000;">self</span>.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__add__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>other, PhyStat<span style="color: black;">&#41;</span>:
      ave = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> + other.<span style="color: black;">ave</span>
      u = sqrt<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">u</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span> + other.<span style="color: black;">u</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
      digs = get_digs<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">digs</span>, other.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">return</span> PhyStat<span style="color: black;">&#40;</span>ave, u, digs<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
      ave = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> + other
      <span style="color: #ff7700;font-weight:bold;">return</span> PhyStat<span style="color: black;">&#40;</span>ave, <span style="color: #008000;">self</span>.<span style="color: black;">u</span>, <span style="color: #008000;">self</span>.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #0000cd;">__radd__</span> = <span style="color: #0000cd;">__add__</span>
  <span style="color: #0000cd;">__sub__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> + <span style="color: black;">&#40;</span>-other<span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__rsub__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: other + <span style="color: black;">&#40;</span>-<span style="color: #008000;">self</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__mul__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>other, PhyStat<span style="color: black;">&#41;</span>:
      a = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span>
      b = other.<span style="color: black;">ave</span>
      ave = a <span style="color: #66cc66;">*</span> b
      u = ave <span style="color: #66cc66;">*</span> sqrt<span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">u</span> / a<span style="color: black;">&#41;</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span> + <span style="color: black;">&#40;</span>other.<span style="color: black;">u</span> / b<span style="color: black;">&#41;</span> <span style="color: #66cc66;">**</span> <span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span>
      digs = get_digs<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">digs</span>, other.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
      <span style="color: #ff7700;font-weight:bold;">return</span> PhyStat<span style="color: black;">&#40;</span>ave, u, digs<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
      ave = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span> <span style="color: #66cc66;">*</span> other
      u = <span style="color: #008000;">self</span>.<span style="color: black;">u</span> <span style="color: #66cc66;">*</span> other
      <span style="color: #ff7700;font-weight:bold;">return</span> PhyStat<span style="color: black;">&#40;</span>ave, u, <span style="color: #008000;">self</span>.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #0000cd;">__rmul__</span> = <span style="color: #0000cd;">__mul__</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__div__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">isinstance</span><span style="color: black;">&#40;</span>other, PhyStat<span style="color: black;">&#41;</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">self</span> <span style="color: #66cc66;">*</span> other <span style="color: #66cc66;">**</span> -<span style="color: #ff4500;">1</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
      <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: black;">&#40;</span><span style="color: #ff4500;">1.0</span> / other<span style="color: black;">&#41;</span> <span style="color: #66cc66;">*</span> <span style="color: #008000;">self</span>
&nbsp;
  <span style="color: #0000cd;">__rdiv__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: other <span style="color: #66cc66;">*</span> <span style="color: #008000;">self</span> <span style="color: #66cc66;">**</span> -<span style="color: #ff4500;">1</span>
&nbsp;
  <span style="color: #ff7700;font-weight:bold;">def</span> <span style="color: #0000cd;">__pow__</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, other<span style="color: black;">&#41;</span>:
    a = <span style="color: #008000;">self</span>.<span style="color: black;">ave</span>
    ave = a <span style="color: #66cc66;">**</span> other
    u = <span style="color: #008000;">abs</span><span style="color: black;">&#40;</span>other <span style="color: #66cc66;">*</span> <span style="color: #008000;">self</span>.<span style="color: black;">u</span> / a <span style="color: #66cc66;">*</span> ave<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> PhyStat<span style="color: black;">&#40;</span>ave, u, <span style="color: #008000;">self</span>.<span style="color: black;">digs</span><span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #0000cd;">__iadd__</span> = gen_imet<span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> + other<span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__isub__</span> = gen_imet<span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> - other<span style="color: black;">&#41;</span>
  __imul__ = gen_imet<span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> <span style="color: #66cc66;">*</span> other<span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__idiv__</span> = gen_imet<span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> / other<span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__ipow__</span> = gen_imet<span style="color: black;">&#40;</span><span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>, other: <span style="color: #008000;">self</span> <span style="color: #66cc66;">**</span> other<span style="color: black;">&#41;</span>
&nbsp;
  <span style="color: #0000cd;">__int__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: <span style="color: #008000;">int</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">ave</span><span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__long__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: <span style="color: #008000;">long</span><span style="color: black;">&#40;</span><span style="color: #008000;">self</span>.<span style="color: black;">ave</span><span style="color: black;">&#41;</span>
  <span style="color: #0000cd;">__float__</span> = <span style="color: #ff7700;font-weight:bold;">lambda</span> <span style="color: #008000;">self</span>: <span style="color: #008000;">self</span>.<span style="color: black;">ave</span></pre></td></tr></table></div>

<p>如果大家发现什么 bug，或者有什么改进建议，欢迎提哈~<span id="more-866"></span></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/python-class-for-physics-experimentation-data-statistics/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>增透膜与半波损失</title>
		<link>http://blog.upsuper.org/reflection-reducing-coating-and-half-wave-loss/</link>
		<comments>http://blog.upsuper.org/reflection-reducing-coating-and-half-wave-loss/#comments</comments>
		<pubDate>Thu, 03 Apr 2008 16:23:36 +0000</pubDate>
		<dc:creator>upsuper</dc:creator>
				<category><![CDATA[越学越多]]></category>
		<category><![CDATA[物理]]></category>

		<guid isPermaLink="false">http://blog.upsuper.org/?p=4</guid>
		<description><![CDATA[前几天学了增透膜，但是开始一直不明白，一边的光没了，能量为什么就跑到另一边去了呢？
查找了相关的资料以后，发现其实很简单，因为光从光疏介质射向光密介质发生反射时会发生半波损失，而厚度为光波的λ/4的增透膜其折射率介于空气与玻璃之间。设入射光线相位为0：对于空气这面，当光从空气射向增透膜反射时，因为空气对增透膜为光疏介质，发生了一次半波损失，于是相位变为π；随后这束光折射入增透膜，在增透膜和镜面之间又发生一次反射，此时增透膜对镜片为光疏介质，因此又发生了一次相位突变，又当光线再次到达空气和增透膜的界面时，光在增透膜中走过了一个π，再加上在增透膜-玻璃界面上发生的半波损失，回到空气的光的相位为2π，和第一次反射的相位π正好差了一个π，发生相消干涉，于是光没了。从玻璃这面看，第一次透射的光线因为经过了λ/4的光程，相位应该为π/2，另一部分经过增透膜-玻璃界面的反射再经过空气-增透膜界面的二次反射，重新进入玻璃时，因为增透膜-玻璃界面上反射发生了半波损失，随后又经过λ/2的光程，因此第二次透射的光线相位变为5π/2，正好和第一次透射的光线相差2π，发生相涨干涉。因此便增投了！
如果把增透膜玻璃的那一面变成一个折射率比它低的透明材料（如空气），则增透膜就变成了增反膜。很明显，增透膜和增反膜仅决定于其两面的介质的折射率和其厚度。
至于半波损失，似乎要用到某个神奇的被称作菲涅耳公式的东西证明。其实就是说，当光线从光疏介质（折射率小的介质）进入光密介质（折射率大的）时，垂直或琼射（入射角接近90°）入，则其反射光线会与入射光线发生π的相位突变，因为这相当于光线多走了（或少走了）半个波长，因此被称作半波损失。
]]></description>
			<content:encoded><![CDATA[<p>前几天学了增透膜，但是开始一直不明白，一边的光没了，能量为什么就跑到另一边去了呢？</p>
<p>查找了相关的资料以后，发现其实很简单，因为光从光疏介质射向光密介质发生反射时会发生半波损失，而厚度为光波的λ/4的增透膜其折射率介于空气与玻璃之间。设入射光线相位为0：对于空气这面，当光从空气射向增透膜反射时，因为空气对增透膜为光疏介质，发生了一次半波损失，于是相位变为π；随后这束光折射入增透膜，在增透膜和镜面之间又发生一次反射，此时增透膜对镜片为光疏介质，因此又发生了一次相位突变，又当光线再次到达空气和增透膜的界面时，光在增透膜中走过了一个π，再加上在增透膜-玻璃界面上发生的半波损失，回到空气的光的相位为2π，和第一次反射的相位π正好差了一个π，发生相消干涉，于是光没了。从玻璃这面看，第一次透射的光线因为经过了λ/4的光程，相位应该为π/2，另一部分经过增透膜-玻璃界面的反射再经过空气-增透膜界面的二次反射，重新进入玻璃时，因为增透膜-玻璃界面上反射发生了半波损失，随后又经过λ/2的光程，因此第二次透射的光线相位变为5π/2，正好和第一次透射的光线相差2π，发生相涨干涉。因此便增投了！</p>
<p>如果把增透膜玻璃的那一面变成一个折射率比它低的透明材料（如空气），则增透膜就变成了增反膜。很明显，增透膜和增反膜仅决定于其两面的介质的折射率和其厚度。</p>
<p>至于半波损失，似乎要用到某个神奇的被称作菲涅耳公式的东西证明。其实就是说，当光线从光疏介质（折射率小的介质）进入光密介质（折射率大的）时，垂直或琼射（入射角接近90°）入，则其反射光线会与入射光线发生π的相位突变，因为这相当于光线多走了（或少走了）半个波长，因此被称作半波损失。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.upsuper.org/reflection-reducing-coating-and-half-wave-loss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
