21世纪是数字时代与信息的时代,信息技术的基础是计算机,而计算机的重要基础又是算法,算法是数学的重要的组成部分,因而将算法放进中学的课程来学习是时代对数学的呼唤,是数学教育改革中充满挑战、充满活力的新内容,它将给我们学习数学、应用数学开辟广阔的天地。
一般地,我们把进行某一工作的方法和步骤称为算法。数学里,我们研究的算法是用计算机来解决问题的程序或步骤,即用计算机的程序表示,可在计算机上执行的算法。
Scilab是一个科学计算软件,它主要有两个功能:数值计算和计算结果可视化。在高中数学人教B版的教材有关“算法初步”部分使用Scilab语言来体现算法。这种语言简单直观且容易学习。比C语言及其它语言中要求对变量类型加以定义、主函数的调用以及运行环境等都方便许多。下面我就对Scilab在“算法初步”教学中的应用谈一些自己的经验和体会。
1.软件的安装、汉化和运行:
Scilab的不同版本,在互联网上可以找到,如(图1)所示:最后一个为汉化软件。本文以Scilab-4.0版本为例进行介绍。先安装Scilab软件程序,然后运行汉化软件chinese即可。
安装完毕后,Scilab不需要在系统中设置任何选项即可运行,因此即使重新安装系统之后也不用重新安装。双击桌面图标“scilab-4.0”即可打开如(图2)所示程序。也可以双击"C:\Program Files\scilab-4.0\bin\WScilex.exe"中的“WScilex.exe”图标,特别是电脑系统重新安装后,可按此法打开。

(图1)

(图2) (图3)
2.对Scilab软件字号的调整:
在利用Scilab软件进行多媒体演示时,如果字号太小,在教室后面的同学就很难看清楚屏幕上的文字,这样会大大降低多媒体演示的效果。我们可以单击“参数选择/选择字体”打开字体调节对话框,选择字体、字形、大小。
3.运用编辑器编写程序实例:
3.1求一元二次方程
的根
运行Scilab软件后单击Scilab主程序窗口(图2)菜单栏中的“编辑器”,打开如(图3)所示的编辑器并输入求解一元二次方程的如图(4)所示:
|
|
|
|
|
a=input("a=");
b=input("b=");
c=input("c=");
d=b*b-4*a*c;
if d<0
disp("no solution");
else
t=sqrt(d);
x1=(-b+t)/(2*a);
x2=(-b+t)/(2*a);
print(%io(2),x2,x1);
end
图(4)
| |
|
clear //清除已有变量//
n=input('n='); //数据组数//
x=zeros(1,n); //生成1行n列全0矩阵并用变量x存储//
y=zeros(1,n);
sx=0;sx2=0;sy=0;sxy=0;
for i=1:1:n
x(i)=input('x(i)='); //通过n次for循环分别对矩阵x,y中的元素赋值//
y(i)=input('y(i)=');
sx=sx+x(i);
sx2=sx2+x(i)*x(i);
sy=sy+y(i);
sxy=sxy+x(i)*y(i);
end
sx=sx/n //计算x的平均数//
sy=sy/n //计算y的平均数//
b=(sxy-n*sx*sy)/(sx2-n*sx*sx)//
a=sy-b*sx
图(5)
| |
|
编辑完成后单击编辑器中的“File/Save as…”存盘,文件名为“yiyuanercifangcheng.sce”。这里需要说明一点,在Scilab3.1以下版本程序中该文件需要存放在纯英文路径下才能运行,在4.0以上版本则无此要求。运行时单击编辑器(图3)中“Execute”中的“Load into Scilab”运行所编写的程序,也可以用快捷组合键“Ctrl+l”运行所编写的程序,然后回到Scilab主程序窗口(图2)中。如果输入a=1,b=2,c=3则返回“no solution”,再次运行程序,如果输入a=2,b=3,c=1则返回“x1= -0.5,x2= -1”。通过实例可以发现利用Scilab软件中的编辑器给我们的教学带来很大的方便,比在Scilab主程序窗口中直接输入程序进行演示要方便,且编辑器内的程序可以调试和存盘,极大地方便了我们的使用和教学。
3.2利用最小二乘法求回归直线方程的系数a,b
在我们学完了用Scilab语言表示“秦九韶方法求多项式的值”的算法后,在学习“统计”一章中,利用最小二乘法求回归系数的公式:
可编写如图(5)所示程序,为了更好的理解该程序,下面对有关矩阵的操作出简要说明:
zeros(m,n):生成一个大小为m行n列的全0矩阵
例如我们在Scilab主程序窗口中:
输入“x=zeros(2,3)”
结果为:x =
0. 0. 0.
0. 0. 0.
生成一个大小为2行3列的全0矩阵;
再输入“x (1,2)=2 ;x(2,1)=5”
结果为:
x =
0. 2. 0.
5. 0. 0.
对矩阵x中的元素
和
进行赋值;
再输入“x (1,2),x(2,1)”
结果为:
ans =
2.
ans =
5.
读取矩阵x中的元素
和
的值;
再输入“x (1,2)+x(2,1)”
结果为:
ans =
7.
对矩阵x中的元素
,
的值求和;
这样就不难理解教参中用Scilab语言表示“秦九韶方法求多项式的值”的算法的程序了。
通过利用最小二乘法求直线方程的系数a,b的这一程序,既加深了学生对学习算法的必要性和实用性的理解,又增强了他们自主学习的兴趣,引导他们去探索。在教材中只提到了用函数型计算器和工作表软件求回归直线方程,而没有提示学生利用求直线方程的系数a,b的公式设计算法程序,这里可以作为补充。
4.对输出命令print和disp的进一步介绍:
4.1.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;print(%io(2),a,b)
结果为:
b =
2.
a =
1.
此为课本中的输入方式,输出时先输出b后输出a
4.2.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;print(%io(2),"a",’b’)
结果为:
b
a
这说明若print(%io(2),a,b)改为print(%io(2),"a",’b’)则输出的为a,b为字符,同时还可以看出" "与’ ’有着相同的作用,在Scilab语言不加以区分。
4.3.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;disp(a,b)
结果为:
2.
1.
输出时先输出b后输出a
4.4.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;a,b
结果为:
a =
1.
b =
2.
输出时先输出a后输出b
通过对比4.1、4.3与4.4的结果,我们不难发现三者的区别。
4.5.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;disp("a","b")
结果为:
b
a
输出时先输出b后输出a
4.6.若我们在Scilab主程序窗口中输入如下内容:
-->a=1;b=2;disp a b
结果为:
b
a
通过对比4.2、4.5与4.6的结果,我们会发现三者具有相同的功用。
4.7.若我们在Scilab主程序窗口中输入如下内容:
-->a=1,b=2
结果为:
a =
1.
b =
2.
通过对比4.4与4.7的结果,我们发现当“;”用“,”替换后,会立即返回结果。
5.取整命令floor和求余命令modulo:
5.1 floor命令
格式为:floor(a)
它和我们在必修Ⅰ中所学的“在数轴上向左取整 [ ]”意义相同。
例如我们在Scilab主程序窗口中输入如下内容:
-->floor(2.1),floor(-2.1)
ans =
2.
ans =
- 3.
5.2 modulo命令
格式为:modulo(a,b)
作用为求a除以b的余数。
例如我们在Scilab主程序窗口中输入如下内容:
-->modulo(5,4)
结果为:
ans =
1.
若输入:
-->modulo(4,5)
结果为:
ans =
4.
此命令在解决展转相除法(欧几里得算法)求两个正整数最大公约数、韩信点兵和判断闰年等问题中经常用到
6. int命令和rand命令:
6.1 int 命令
格式为:int(a)
作用为向0方向取整。
例如我们在Scilab主程序窗口中输入如下内容:
-->int(2.1),int(-2.1)
ans =
2.
ans =
- 2.
注意floor命令与int命令的区别与联系,不要把二者混淆。
6.2 rand 命令
格式为:rand( )
作用为产生开区间(0,1) 上的随机数。
变换1:rand( ) *(b-a)+a
作用为产生开区间(a,b)上的随机数。
变换2:floor(rand( ) *(b-a+1)+a)
作用为产生闭区间[a,b]上的随机整数。
若我们在Scilab主程序窗口中输入“for i=1:1:100,a=floor(rand()*6+1),end”,则返回[1,6]上的100个整数,这样就可以模拟100次掷骰子实验。
新一轮课程改革就是要力图改变把课程功能从单一地传授知识,转变成全方位地培养人。新课程在内容上是强调精选终身学习必备的基础知识和技能,强调教育内容应与学生生活以及现代社会和科技发展的联系;在学习方式上强调培养学生主动参与、探究和动手的能力,搜集和处理信息的能力,获取新知识的能力,分析和解决问题的能力以及交流与合作的能力。
利用学生对计算机特别感兴趣这个特点,引导他们利用计算机完成算法初步一章的学习,对算法思想由感性认识上升到理性认识。著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:
数据结构+算法=程序
算法是程序的灵魂。这充分体现了算法在未来科学技术发展中的地位和作用。
Scilab软件与算法教学相结合,提供了一个用计算机语言体现算法思想的良好平台,这样不但能激发他们的学习和探索的积极性,也培养了他们主动参与、探究和动手的能力,搜集和处理信息的能力,获取新知识的能力,分析和解决问题的能力以及交流与合作的能力,而且也有效地完成了教学任务。
注:1:scilab下载网址http://www.scilab.org/;
2:汉化文件下载网址http://maxianling.gbaopan.com/files/8eed8d2907fc449c98d53bca94e2fd05.gbp;
3:scilab-3.1.1、scilab-4.1也可以汉化。