浮点数误差 数学公式上的准确,在数值计算中未必准确 double x=0.3*3+0.1; double y=1.0; if(x==y)cout<<“Equal"; else cout<<"Not equal"; A common fix:使用abs(x-y)<eps作为浮点数相等的测试 5
浮点数误差 数学公式上的准确,在数值计算中未必准确 double x=0.3*3 + 0.1; double y=1.0; if (x==y) cout<<“Equal”; else cout<<“Not equal”; A common fix: 使用 abs(x-y)<eps 作为浮点数相等的测试 5
浮点数误差 浮点数误差可能积累 以计算向量x[的欧氏长度为例 for (int i=0;i<n;i++)sum+=x[i]*x[i]; return sqrt(sum); 更好的做法: maxElement=max(x[i]);y[i]=x[i]/maxElement; for (int i=0;i<n;i++)sum+=y[i]*y[i]; return sqrt(sum)*maxElement; 更一般地,可以使用Kahan summation(compensated summation) 6
浮点数误差 浮点数误差可能积累 以计算向量x[i]的欧氏长度为例 for (int i=0; i < n; i++) sum+=x[i]*x[i]; return sqrt(sum); 更好的做法: 令maxElement=max(x[i]); y[i]=x[i]/maxElement; for (int i=0; i < n; i++) sum+=y[i]*y[i]; return sqrt(sum) * maxElement; 更一般地,可以使用Kahan summation (compensated summation) 6
浮点数误差 "Z-fighting"Source:Microsoft Azure remote rendering 7
浮点数误差 7 “Z-fighting” Source: Microsoft Azure remote rendering
计算方法 ·计算方法并不仅仅是这些“小技巧” ·作为一门学科,它有着一系列的核心思想: 一收敛性:能合理近似的算法,至少需要收敛 一复杂性 -条件性(鲁棒性) 一压缩性 一正交性 误差与偏差,也不仅仅来源于浮点数或离散化处理 8
计算方法 • 计算方法并不仅仅是这些“小技巧” • 作为一门学科,它有着一系列的核心思想: – 收敛性:能合理近似的算法,至少需要收敛 – 复杂性 – 条件性 (鲁棒性) – 压缩性 – 正交性 – …… • 误差与偏差,也不仅仅来源于浮点数或离散化处理 8
数学建模与计算建模 回顾:物理中的理想气体、光滑表面等等假设 All models are wrong,but some are useful 2.3 Parsimony Since all models are wrong the scientist cannot obtain a"correct"one by excessive elaboration.On the contrary following William of Occam he should seek an economical description of natural phenomena.Just as the ability to devise simple but evocative models is the signature of the great scientist so overelaboration and overparameteriza- tion is often the mark of mediocrity. 2.4 Worrying Selectively Since all models are wrong the scientist must be alert to what is importantly wrong.It is inappropriate to be con- cerned about mice when there are tigers abroad. Box,George E.P.(1976),"Science and statistics"(PDF),Journal of the American Statistical Association 如何定量地研究这些偏差? 9
数学建模与计算建模 • 回顾:物理中的理想气体、光滑表面等等假设 • All models are wrong, but some are useful Box, George E. P. (1976), "Science and statistics" (PDF), Journal of the American Statistical Association 9 如何定量地研究这些偏差?
一个定量分析的简单例子 。 给定函数f ·输入:x+△x 计算:f(x) f(x+△x)-f(x)≈△xf'(x) (中值定理) 设f∈C1[x,x+△x],则]ξ∈(x,x+△x), f(x+△x)-f(x)=△x·f'(ξ) 10
一个定量分析的简单例子 • 给定函数� • 输入: � + Δ� • 计算:�(�) � � + Δ� − � � ≈ Δ� �′(�) (中值定理) 设� ∈ �![�, � + Δ�], 则∃� ∈ �, � + Δ� , � � + Δ� − � � = Δ� ⋅ �′(�) 10
一个定量分析的简单例子 给定函数f 。 绝对误差 输入:x+△x 计算:f(x) f(x+△x)-f(x)≈△xf'(x) (中值定理) 设f∈C1[x,x+△x],则]ξ∈(x,x+△x), f(x+△x)-f(x)=△x·f'() 11
一个定量分析的简单例子 • 给定函数� • 输入: � + Δ� • 计算:�(�) � � + Δ� − � � ≈ Δ� �′(�) (中值定理) 设� ∈ �![�, � + Δ�], 则∃� ∈ �, � + Δ� , � � + Δ� − � � = Δ� ⋅ �′(�) 11 绝对误差
一个定量分析的简单例子 ·给定函数f ·输入:x+△x 。 计算:f(x) f(x+△x)-f(x)≈△xf'(x) 绝对误差的放大比例≈f'(x) ·f'(x)引>1? ·f'(x)川<1? ·数值稳定性,既可能来自于的选取,也取决于问题本 身的性质(混沌) 12
一个定量分析的简单例子 • 给定函数� • 输入: � + Δ� • 计算:�(�) � � + Δ� − � � ≈ Δ� �′(�) 绝对误差的放大比例 ≈ �′(�) • �! � > 1? • �! � < 1? • 数值稳定性,既可能来自于f的选取,也取决于问题本 身的性质(混沌) 12
一个定量分析的简单例子 ·给定函数f ·输入:x+△x 相对误差: Ax 。计算:f(x) f(x+△x)-f(x)≈△xf'(x) 相对误差的放大比例≈条件数:=' f(x) ·如果f不可导呢?或者f'(x)难以直接控制? 13
一个定量分析的简单例子 • 给定函数� • 输入: � + Δ� • 计算:�(�) � � + Δ� − � � ≈ Δ� �′(�) 相对误差的放大比例 ≈ 条件数:= !"#(!) "(!) • 如果�不可导呢?或者�′(�) 难以直接控制? 13 相对误差: !"
吸 现代科学与工业界中的计算任务 一、插值与拟合 ·预测天体运动轨迹 ·工业设计 ·计算机动画 Source:Wikipedia CC BY-SA
现代科学与工业界中的计算任务 一、插值与拟合 • 预测天体运动轨迹 • 工业设计 • 计算机动画 Source: Wikipedia CC BY-SA