440 likes | 628 Views
科学计算软件 第二章. 基本概念 ( 上 ). 初学者易犯的错误. 大小写错误 括号错误 :三种括号的不同用途,注意括号要匹配 函数使用错误 : Sinx 空格符号错误 :相乘时要加空格或用乘号 未清除某些变量的先前定义或赋值 建议 检查 语法、拼写错误 出错时 重启内核. 更改 notbook 中的字号. edit 菜单 —— 属性命令 (Preferences)—Formatting Options—Font Options. 2.1 常数. Pi 或 π :圆周率 E 或 e :自然对数的底
E N D
科学计算软件 第二章 基本概念 (上)
初学者易犯的错误 • 大小写错误 • 括号错误:三种括号的不同用途,注意括号要匹配 • 函数使用错误:Sinx • 空格符号错误:相乘时要加空格或用乘号 • 未清除某些变量的先前定义或赋值 • 建议 • 检查语法、拼写错误 • 出错时重启内核
更改notbook中的字号 • edit菜单——属性命令(Preferences)—Formatting Options—Font Options
2.1 常数 • Pi或π:圆周率 • E或e:自然对数的底 • Degree:Pi/180,可用于将角度转化为弧度(mathematica中三角函数以弧度为单位) • GoldenRatio:黄金分割比,系统中默认的二维图形的宽高比 • Infinity或 ∞:无穷大,系统中作为一个特殊的常数 • EulerGamma:欧拉常数
2.1 常数 • 例1 计算出Pi的50位有效数字的近似值 N[Pi,50] • 例2
2.2 内置函数 • 函数可以用函数名表示,也可采用基本输入模板,如:Sqrt[x]或 表示x的平方根。 • 注意下述语句的区别 2^(0.5) 2^(1/2) 2^(1/2.0) • 例3 Sqrt[1521]
2.2 内置函数 • 例4 高次方根 8^(1/3) (-8)^(1/3) • 例5 N[Sqrt[2]] N[Sqrt[2],50]
2.2 内置函数 • Abs[x]:求实数x的绝对值或复数x的模 • 例6 Abs[5] Abs[-5] Abs[5+12I]
2.2 内置函数 • Sign[x]:返回x的符号,0的符号为0 • 例7 Sign[-27.5] Sign[0] Sign[6.254] • Plot[Sign[x],{x,-2,2}]
2.2 内置函数 • 对正整数n,阶乘定义为n!=1*2*…*(n-1)*n,通常小数没有阶乘,像0.5!,0.65!都是错误的。 • 将Gamma函数定义为非整数的阶乘,因为当x是正整数n的时候,Gamma函数的值是n-1的阶乘。 • Γ(x)=∫e^(-t)*t^(x-1)dt (积分下限是零,上限是+∞) (x<>0,-1,-2,-3,……) • 可以证明Γ(x)=(x-1)*Γ(x-1),所以当x是整数n时,Γ(n)=(n-1)(n-2)……=(n-1)!,这样Gamma 函数实际上就是阶乘的延拓。
2.2 内置函数 • Factorial[n]或n!给出n的阶乘 • 特别地,0的阶乘定义为0!=1 • 例8 5! 0! Factorial[3.5]
2.2 内置函数 • 随机数生成器在概率论与统计分析中非常有用 • Random[ ]:给出区间[0,1]上均匀分布的伪随机数 • Random[类型]:给出指定类型的均匀分布的伪随机数。类型包括Interger,Real和Complex。对整型和实型,返回值的范围为0到1,对复型,返回值范围为0和1+i确定的矩形内。 • Random[类型,范围]:返回指定范围内均匀分布的伪随机数 • Random[类型,范围,n]:返回指定范围内均匀分布的有n位有效数字的伪随机数
2.2 内置函数 • 例9 Random[Integer] Random[Real] Random[Complex] Random[Real,5] Random[Real,{3,5}] Random[Real,{3,5},10] Random[Integer,{1,10}] Random[Complex,{2+I,5+6I}]
2.2 内置函数 • prime [praim] • n. 最初, 青春, 精华 • adj. 主要的, 最初的, 有青春活力的, 最好的, 第一流的, 根本的, [数]素数的 • v. 预先准备好, <口>让人吃(喝)足, 灌注, 填装 • Prime[n]:给出第n个素数 • 例10 求出第7个素数 Prime[7]
2.2 内置函数 • Fibonacci • numbers[复][数]斐波纳契数列(一种整数数列, 其中每数等于前面两数之和) • 1,1,2,3,5,8,13,21 • Fibonacci[n]:给出第n个斐波纳契数 • 例 11 Fibonacci[7]
2.2 内置函数 • Mathematica中有三种对实数取整的方式 • Round[x]:返回最靠近x的整数,若小数部分恰好为0.5,则返回最靠近的偶数 • round vt. 弄圆, 使成圆形, 绕行, 四舍五入 • Floor[x]:返回不超过x的最大整数,或称为向负无穷方向取整 • floor n. (房间, 走廊等的)地面, 地板, 基底, (室内的)场地, 层, 海底, 议员席
2.2 内置函数 • Mathematica中有三种对实数取整的方式 • Ceiling[x]:返回不小于x的最小整数,又称为向正无穷方向取整 • ceiling n.天花板, 最高限度 • 例 12 Round[5.75] Floor[5.75] Ceiling[5.75]
2.2 内置函数 • IntegerPart[x]:返回x的整数部分 • integer n. 整数 • FractionalPart[x]:返回x的小数部分 • fractional adj. 部分的, 碎片的, 分数的, 小数的 • IntegerPart[x]+FractionalPart[x]=x • 例 13 IntegerPart[4.67] FractionalPart[4.67] IntegerPart[4.67]+ FractionalPart[4.67]
2.2 内置函数 • Quotient[m,n]:返回m除以n得到的商 • quotient n. 商, 份额 • Mod[m,n]:返回m除以n得到的余数 • 例14 Quotient[17,3] Mod[17,3]
2.2 内置函数 • GCD[m,n]:返回m与n的最大公约数 • LCM[m,n]:返回m与n的最小公倍数 • FactorInteger[n]:给出n的素数分解 • 自行练习
2.2 内置函数 • Timing[表达式]:计算表达式,并返回内核所花费的CPU时间 • 例18 为了计算第1 000 000个素数,内核需要花费多少时间? • Prime[1000000]//Timing • Timing的结果与具体机器性能有关
2.2 内置函数 • Log[x]:求x的自然对数;Log[b,x]: 求x以b为底的对数 • Exp[x]:自然指数函数 • 例 20 计算log2100 Log[100] Log[2,100] Log[2,100]//N • 注:Mathematica总是给出精确的答案
2.2 内置函数 • 基本三角函数 • 正弦、余弦、正切、正割、余割、余切 • Sin,Cos,Tan,Sec,Csc,Cot • 双曲函数 • Sinh,Cosh,Tanh,Sech,Csch,Coth • 反双曲函数 • 以上内容请同学们自学
2.2 内置函数 • 注:Mathematica中三角函数的参数以弧度为单位,可通过基本输入模板上的按钮输入角度,或者用角度乘内置常数Degree(Pi/180)以转换为弧度。 • 例23 计算sin 60o的平方 Sin[60 Degree]^2
2.2 内置函数 • Print[表达式]:显示表达式,后接分行符 • Print[表达式1,表达式2,…]:显示表达式1,表达式2,…,然后只接一个分行符 • 例27 输出字符 Print["This prints a line of text."] • 看看去掉引号会怎样?Mathematica支持中文吗
2.2 内置函数 • 例28 a=1;b=2;c=3;d=4;e=5; Print[a,b,c,d,e] • 试试将a、b、c、d、e写成列表再用Print输出
2.2 内置函数 • Mathematica中有一类函数以字母Q结尾,这些函数用来检测特定的条件,并返回逻辑值 • DigitQ • EvenQ • OddQ • SameQ • SrtingQ • IntegerQ
2.2 内置函数 • 例 29 ? PrimeQ PrimeQ[5] PrimeQ[6] • 例 30 多项式的判断 ? PolynomialQ PolynomialQ[x^2 y+x+Sqrt[y],x] PolynomialQ[x^2 y+x+Sqrt[y],y]
2.3 基本的算术操作 • 加:Plus[a,b,……]; • 乘:Times[a,b,……]; • 减:Subtract[a,b]; • 除:Divide[a,b] • 相反数:Minus[a] • 幂:Power[a,b],Power[a,b,c]等价于a^(b^c)
2.3 基本的算术操作 • 例31 Plus[2,3,4] Times[2,3,4] Power[2,3,4]
2.3 基本的算术操作 • FullForm[表达式]:显示表达式的内部形式 • 例32 FullForm[a+b+c] FullForm[a-b] FullForm[(a*b)^c]
2.3 基本的算术操作 • 几个在特殊场合(常见于循环控制)非常有用的命令 • Increment[x]或x++:x的值自加1,返回x的原值 • Decrement[x]或x--:x的值自减1,返回x的原值 • PreIncrement[x]或++ x : x的值自加1,返回新值 • PreDecrement[x]或--x:x的值自减1,返回新值 • AddTo[x,y]或x+=y:使x的值增加y,返回x的新值 • SubtractFrom[x,y]:使x的值减少y,返回x的新值 • TimeBy[x,y]或x*=y:将x*y的结果存入x中 • DivideBy[x,y]或x/=y:将x/y的结果存入x中
2.3 基本的算术操作 • 例33 x=3; x++ x=3 ++x 等价于 x=3; x x=x+1; 等价于 x=x+1
2.3 基本的算术操作 • 例 34 x=3;y=4; x+y x x=3;y=4; x+=y x 等价于 x=x+y
2.4 字符串 • StringLength[字符串]:求字符串长度 • StringJoin[字符串1,字符串2......]:连接字符串 • StringTake[字符串,{m,n}]:从第m个字符开始取n个字符 • StringDrop[字符串,{m,n}]:删除字符串中从第m个字符开始的n个字符 • StringInsert[字符串1,字符串2,n]:将字符串2插入字符串1的第n个字符前生成一个新字符串 • 自学
2.5 赋值、替换与逻辑关系 • Mathematica提供了两种类型的赋值 • lhs = rhs:即时赋值语句,在进行赋值时计算rhs • lhs : = rhs:延时赋值语句,以后调用时才计算rhs • 例 38 用递归定义函数时(第2.9节),必须用“:=” f[0] = 1; f[n_] := n f[n-1] • 此处使用“=”会出错,因为这时函数还没有定义完
计算过程 f[5] ? 5 f[4] ->f[4] ? 4 f[3] ->f[3] ? 3 f[2] ->f[2] ? 2 f[1] ->f[1]=1 f[0] = 1; f[n_] := n f[n-1]
2.5 赋值、替换与逻辑关系 • 例 39 定义分段函数时(第2.9节),必须使用“:=” g[x_] := x^2/;x>=0 g[x_] := -x^2/;x<0 • 定义时并不计算,只有具体代入x的值后才计算 • 第一章的例子 x=3 f[x_]=Sin[x] Plot[f[x],{x,0,2 Pi}] • 问题出现在哪里?
2.5 赋值、替换与逻辑关系 • 替换:要计算表达式的值,而又不想给某个符号赋值,可以使用替换符号/. • 例 41 假设要计算x=3时表达式x^2+5x+6的值,而又不想给x赋值 x^2+5x+6/. x->3 ?x • 如果x之前有值,这样处理可不可行?
2.5 赋值、替换与逻辑关系 • /.也可以用来把一个表达式替换为另一个表达式 • 例 42 Sqrt[2x+3]+(2x+3)^2/.2x+3->3y+5 • 例 43 一次进行多个替换 2x+3y/.{y->x,x->y}
2.5 赋值、替换与逻辑关系 • 逻辑关系(比较关系) • Equal[x,y]或x==y:等值判断 • Unequal[x,y]或x!=y:不等值判断 • Less[x,y]或x<y:小于关系判断 • Greater[x,y]或x>y:大于关系判断 • LessEqual[x,y]或x<=y:小于等于关系判断 • GreaterEqual[x,y]或x>=y :大于等于关系判断 • 注1:Equal和Unequal可用于非数值量的比较 • 注2:“=”表示赋值或定义,“==”表示判断
2.5 赋值、替换与逻辑关系 • 例 44 1 == 2 1 != 2 1 <= 2 a+a == 2a 2 == 2 2 != 2 2 <= 2 a < a
2.5 赋值、替换与逻辑关系 • 逻辑运算 • And[p,q]或p&&q或p∧q:逻辑与 • Or[p,q]或p||q或p∨ q:逻辑或 • Xor[p,q]或p:逻辑异或 • Not[p]或 !p 或 ¬p:逻辑非 • Implies[p,q] p ⇒ q:逻辑蕴含
2.5 赋值、替换与逻辑关系 • 例 45 利用Mathematica验证逻辑分配律 p ∧ (q ∨ r)=(p ∧ q) ∨ (p ∧ r) lhs=p&&(q || r); rhs=(p&&q)||(p&&r); lhs == rhs *逻辑表达式可使用LogicalExpand命令进行比较* LogicalExpand[lhs] ŠLogicalExpand[rhs]