(1)程序设计programming:abort: 中断计算说明:abort命令中断当前计算并给出Scilab的提示符(“-->”)。
如果用户使用pause命令进入高层界面,可使用abort命令回到初始层界面,出现Scilab的提示符(“-->”)。
Ans: 计算结果说明:如果表达式的值没有被赋与任何变量,那么Scilab自动产生一个变量Ans,用来存储当前表达式的值。
backslash (\):矩阵左除调用格式:如x=A\b说明:backslash (\)代表矩阵左除,x=A\b是方程A*x=b的解。
如果A是一个方阵或者可逆矩阵(nonsingular或者invertible),那么x=A\b是方程A*x=b的唯一确定的解,且等于x=inv(A)*b.(通俗的说,就是方程数目等于未知数个数,所以解唯一。
如A=[1 2 1;3 2 2;2 3 1],b=[8;13;11])如果A不是一个方阵,那么x是最小二乘解,此时,该解x使norm(A*x-b)最小。
(通俗的说,就是方程数目不等于未知数个数。
如果方程数目大于未知数个数,本来是没有准确解的,但可以根据最小二乘法原理拟合出最佳解。
如A=rand(3,2);b=[1;1;1]。
此时,由于A不是一个方阵,无法使用inv(A)命令,因此x=A\b 等效于x=pinv(A)*b.如果方程数目小于未知数个数,应该有无穷个解,用x=A\b命令得出的解只是其中的一个解,而用pinv(A)*b命令得出的解则比较粗糙,没有用x=A\b命令得出的解精确。
)如果A是一个列满秩矩阵(矩阵的秩等于列数),那么此最小二乘解x=A\b是唯一能使norm(A*x-b)最小的解。
如果A不是一个列满秩矩阵,那么此最小二乘解x=A\b不能使norm(A*x-b)最小,使norm(A*x-b)最小的解应该是x=pinv(A)*b)。
inv(A)要求A是方阵,pinv(A)则不要求A是方阵bool2s :将布尔矩阵转化为0、1矩阵调用格式:bool2s(x)参数:x是一个布尔向量或者布尔矩阵或者常数矩阵。
说明:如果x是一个布尔矩阵,bool2s(x)返回一个0、1矩阵,1代表真,0代表假。
如果x 是一个普通矩阵,bool2s(x)也返回一个0、1矩阵,1代表非0的数字。
boolean:它表示Scilab对象或者布尔型变量和操作符与或非& | ~说明:布尔型变量为%T(代表真)%F (代表假)。
这些变量可以用来定义矩阵。
布尔型型矩阵可以像普通矩阵操作,如元素的抽取、插入与连接,但不能进行如( +, *, -, ^, )等运算,布尔型型矩阵有三个特殊的操作符号:与或非& | ~brackets括号:包括左右圆括号(),左右方括号[].方括号调用格式:[a11,a12,...;a21,a22,...;...]圆括号调用格式: [s1,s2,...]=func(...)参数a11,a12,... : 任何合适的矩阵(实数, 多项式, 有理数等);参数s1,s2,... : 任何变量名;说明:[ ]用于向量定义或者矩阵连接或者用在调用函数的左边存储变量,而()用于函数调用。
[ ]在用于矩阵连接时,空格、逗号用来隔开每“行”中的元素,分号、回车则用来隔开各“行”。
[ ] 用在调用函数的左边存储变量时,必须用逗号隔开个变量。
break -结束循环说明:在for 或者while 循环中,break命令强制结束循环试试看k=0; while 1==1, k=k+1; if k > 100 then break, end; endcall-Fortran or C 用户程序调入调用格式有两种长型[y1,...,yk]=call("ident",x1,px1,"tx1",...,xn,pxn,"txn","out",[ny1,my1],py1,"ty1",...,[nyl,myl],pyl,"tyl" )短型[y1,....,yk]=call("ident",x1...,xn)参数说明:ident:字符串,代表所要调用的子程序的名字。
Xi:实数矩阵或者字符串,代表输入变量pxi,pyi:整数,代表各输入变量在调入ident程序时的相对位置txi,tyi:字符”d””r”“c”“i”,代表输入变量的数据类型,d代表双精度型,r代表实型(浮点型),c代表字符型,I代表整型。
Out:关键词,用来格开输入变量于输出变量。
当有Out时,表明是长型调入,而没有Out是短型调入.[ny1, my1]是输出变量的大小功能说明:call命令用于在scilab于调入Fortran or C 用户程序,所要调入的程序应该预先与scilab链接,链接的方法如下:1.软链接:在scilab进程中使用命令link链接2.硬链接:先用scilab下已有的程序(default/Ex-fort.f)作为调入程序,再在文件(default/Flist)中增加一个入口,然后再使用命令make bin/scilex与scilab连接.call语句有两种调用形式,长型与短型.短型调用语法简单,能够很快地编译代码,但必须写一个小小的C或者F接口程序.长型调用则不需要,但语法复杂,代码解释速度也比较慢.例子:C语言//简单的C语言f1=['#include <math.h>''void fooc(c,a,b,m,n)''double a[],*b,c[];''int *m,*n;''{'' int i;'' for ( i =0 ; i < (*m)*(*n) ; i++) '' c[i] = sin(a[i]) + *b; ''}'];//定义一个字符串矩阵,9行1列mputl(f1,'fooc.c')//将字符串矩阵f1写成一个ascii文件fooc.cilib_for_link('fooc','fooc.o',[],"c")//创建一个共享库(含gateway, Makefile 和loader)exec loader.sce// 载入共享库a=[1,2,3;4,5,6];b= %pi;[m,n]=size(a);//变量初赋值// 输入变量// a is in position 2 and double// b 3 double// n 4 integer// m 5 integer// 输出变量// c is in position 1 and double with size [m,n]c=call("fooc",a,2,"d",b,3,"d",m,4,"i",n,5,"i","out",[m,n],1,"d");注意:运行以上程序,无论是在window下还是在linux下都会出错,在语句ilib_for_link('fooc','fooc.o',[],"c")处出错.case-判断语句的关键词说明:用在选择语句select...case中的关键词:用法如下:select 表达式0case 表达式1 then 程序1,case 表达式2 then 程序2,...case 表达式3 then 程序3,[else 程序],end例子:while %t don=round(10*rand(1,1)) //产生一个随机数n,select ncase 0 then //如果该随机数为0,则显示0disp(0)case 1 thendisp(1) //如果该随机数为1,则显示1elsebreak //如果该随机数为其他值,则中断程序endendclearglobal -清除全局变量调用格式:clearglobal() 该命令清除所有全局变量clearglobal nam1 .. namn 该命令清除指定全局变量clearglobal('nam1', ..,'namn') 该命令清除指定全局变量其中nam1 .. namn为有效的全局变量例子:global a b ca=1;b=2;c=3;who('global')clearglobal bwho('global')clear -清除变量调用格式clear a说明:这个命令用来清除不受保护的变量.clear a清除指定变量a,而clear 清楚所有不受predef保护的变量.正常情况下,受保护的变量是指标准库程序和带有百分号的变量,如%pi,%t等.注意语法格式.是clear a而不是clear(a).也要注意a=[]并没有清楚a,而是把a置空.colon - (:) 冒号操作符说明:该操作符可以用来生成implicit vectors(不好翻译,看下面的例子就明白了)j:k生成一个向量[j, j+1,...,k](如果j>k则为空集).j:d:k生成一个向量[j, j+d, ..., j+m*d].该操作符可以用来挑选向量或者矩阵中的某一行,某一列或者某一个元素A(:) 是指A中的元素按从左到右从上到下的顺序排成的一列.A(:,j) 是指A中的第j列元素.A(j:k) 是指[A(j),A(j+1),...,A(k)]A(:,j:k) 是指[A(:,j),A(:,j+1),...,A(:,k)]A(:)=w 是指用w将矩阵A填满.comma - (,) 列,指令与参数分隔符说明:该操作符用来分隔函数中的参数,或者用来分隔单行矩阵中的列,空格也可以用来分隔单行矩阵中的列,但用逗号更加合适.另外也可以用来分隔指令,分号;也可以用来分隔指令,但不会将结果显示在屏幕上.例子:a=[1,2,3;4,5,6];a=1,b=1;c=2comments -注释注释行以//开始,它不会为scilab所编译continue -控制语句中的关键词,使程序转向下一个循环.说明:在for和while循环中,命令continue使程序转向下一个循环,而忽略该次循环中continue语句和end语句之间的指令.例子1:for k=1:10,K=k;if k>2&k<=8 then continue,disp('hello'),end,k,end例子2:for j=1:2x=[];for k=1:10,if k>j+1&k<=8 then continue,end,x=[x,k];endxendDate –显示当前时间命令调用格式:date或者date() 或者date () 或者dt=date()说明:dt=date()返回一个以格式dd-mmm-yyyy 表明时间的字符串。