上次的式子:符号计算第一步做什么?
一条一条点。每点一条之前,先问学生:“屏幕上会出来什么?”
(命令窗口:点上面的命令)
数值计算 vs 符号计算
上次说:数值计算和符号计算,最大的区别是什么?
数值计算:算出一个近似的数(如 0.6667)。
符号计算:保留精确的式子(如 2/3、(x + 1)*(x + 2))。
符号计算:保留精确的式子(如 2/3、(x + 1)*(x + 2))。
今天要干的事
今天整节课都在对“式子”动手:
换个样子写(expand / factor / horner)→ 代入(subs)→ 反过来(finverse)→ 求极限(limit)。
先把“精度”这件事弄清楚:同一个数,MATLAB 有三种算法。点上面 ②。
同一个 2/3,三种算法(P18)
先问:“三个结果里,哪个最精确?”再点“揭晓”。
数值型
a1 = 2/3
?
最快 · 近似
有理数型
a2 = sym(2/3)
?
最精确 · 最慢
VPA 型
a3 = vpa('2/3', 32)
?
要几位给几位
VPA 的位数:
a2 最精确(就是分数 2/3)。a3 最后一位是 7:后面全是 6,四舍五入进上来的。
位数改小试试:位数越少,越“近似”。
位数改小试试:位数越少,越“近似”。
PPT 上写的 “Maple” 是老版本的说法,现在不用管。
有效数字从哪里开始数?(P19—P20)
a = sym('2*sqrt(5)+pi'); % 2倍根号5加π
vpa(a, 20)
vpa(a, 20)
每个数字下面的小号数字是第几位。橙色是最后一位(四舍五入后的)。
vpa(a, 20) 说要 20 位,这 20 位从哪里开始数?
从第一个数字 7 开始数:小数点前 1 位 + 小数点后 19 位 = 20 位。
这叫“有效数字”,不是只数小数点后面。
这叫“有效数字”,不是只数小数点后面。
vpa(a, n) 和 digits(n) 的区别
现在的默认位数:32
(按顺序点:vpa(a,20) → digits(15) → vpa(a) → digits(32) → vpa(a))
vpa(a, n):只管这一次(这一次点小份)。
digits(n):改默认值,之后一直有效(把菜单上的默认份量改了)。
digits(n):改默认值,之后一直有效(把菜单上的默认份量改了)。
digits 用完记得改回 digits(32),不然会影响后面的结果。
算完了想要一个普通的数:double(P22)
(先点 a = …,再点 b = double(a),最后点 whos)
PPT 上还有 numeric 和 eval,是老写法,我们只用 double。whos 的显示以屏幕为准,重点看 Class 一栏。
一张表记住(就是板书)
2/3 → 0.6667 % 数值:快、近似
sym(2/3) → 2/3 % 精确
vpa(a,n) → n 位有效数字
digits(n) → 改默认位数,用完改回 32
double(a) → 变回普通的数
任务1 最后一题(自己写):求 π 的 50 位有效数字,再变回 double。
vpa(pi, 50)
→ 3.1415926535897932384626433832795028841971693993751
double(vpa(pi, 50))
→ 3.1416
→ 3.1415926535897932384626433832795028841971693993751
double(vpa(pi, 50))
→ 3.1416
三个快问(复习收尾,或者课中随时抽查)
1. 写了
f = (x+1)*(x+2) 却报错 “Undefined function or variable 'x'”,漏了哪一步?漏了 syms x。用符号计算之前,先把字母定义成符号变量。
2. 先执行了
digits(15),后面忘了改回。再输入 vpa(pi),会显示几位?15 位有效数字:3.14159265358979。digits 改的是默认值,一直有效,直到再改。
3.
vpa(a, 20) 的结果还是“符号”,想拿去和普通数组一起算,用哪个函数变回普通的数?double:b = double(vpa(a, 20)),b 就是普通的 double 型数值,显示 7.6137。