楼主: lihuang
13961 11

[下载]免费数据软件SCILAB(初学者示例) 中文教程 [推广有奖]

  • 2关注
  • 1粉丝

教授

54%

还不是VIP/贵宾

-

威望
0
论坛币
54 个
通用积分
128.3208
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
13414 点
帖子
419
精华
0
在线时间
2467 小时
注册时间
2005-5-20
最后登录
2024-4-28

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

36919.rar (6.33 KB, 需要: 2 个论坛币) 本附件包括:

  • SCILAB(初学者示例).htm

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:scilab 免费数据 中文教程 费数据 SCI 教程 软件 初学者 示例 scilab

沙发
lihuang 发表于 2006-1-7 11:46:00 |只看作者 |坛友微信交流群

是数学软件,与matlab 很相似

使用道具

藤椅
qingchun05 发表于 2006-2-22 16:09:00 |只看作者 |坛友微信交流群
同学 我这里不能下载scilab的书,可不可以发给我 ,oybp1979@163.com多谢

使用道具

板凳
taikongfr 发表于 2009-2-22 17:53:00 |只看作者 |坛友微信交流群

是数学软件,与matlab 很相似

本文来自: 人大经济论坛(http://www.pinggu.org) 详细出处参考:http://www.pinggu.name/bbs/b5i64533.html

使用道具

报纸
ts_xjw 发表于 2009-4-22 19:28:00 |只看作者 |坛友微信交流群
多多感谢!

使用道具

地板
arti81 发表于 2009-7-14 21:26:02 |只看作者 |坛友微信交流群
初学者示例

  
我们下面给出一些简单的命令。所有的命令输入完都要回车,因为最后一个提示符被解释。
  
-->a=1;
  
-->A=2;
  
-->a+A
ans  =
  
    3.   
  
-->//两条命令写在同一行
  
-->c=[1 2];b=1.5
b  =
  
    1.5   
  
-->//一条命令分几行
  
-->u=1000000.000000*(a*sin(A))^2+...
-->     2000000.000000*a*b*sin(A)*cos(A)+...
-->     1000000.000000*(b*cos(A))^2
u  =
  
    81268.994
先将值1和2赋给变量a和A。一条命令结束如用了分号,表示不显示结果。注意,Scilab中区分大小写。接着处理两条命令,并将第二条命令的结果显示出来,因为其后没跟分号。最后一条命令示意如何用"…"把一条命令写成几行。这一标记只有在线键入时才需要,是为了闭开回车键的影响。//后面的字符串不被解释(它不是命令行)。
  
-->a=1;b=1.5;
  
-->2*a+b^2
ans  =
  
    4.25   
  
-->//至此我们已经定义了一些变量,通过键入下面命令来列出这些变量:
  
-->who
your variables are...
  
ans       b         a         bugmes    MSDOS     home      PWD        
TMPDIR    percentlib          fraclablib          soundlib  xdesslib   
utillib   tdcslib   siglib    s2flib    roblib    optlib    metalib   
elemlib   commlib   polylib   autolib   armalib   alglib    mtlblib   
SCI       %F        %T        %z        %s        %nan      %inf      
old       newstacksize        $         %t        %f        %eps      
%io       %i        %e        %pi                  
using       3975 elements  out of    1000000.
          and         43 variables out of       1023
我们得到已定义变量列表,包括变量a,b,c,A和由不同的库组成的初始环境变量以及一些特定的"永久"变量。
下面是表达式的例子,式中包含了常量和已定义的变量。结果被保存到标准的缺省变量ans中。
  
-->I=1:3
I  =
  
!   1.    2.    3. !
  
-->W=rand(2,4);
  
-->W(1,I)
ans  =
  
!   0.2113249    0.0002211    0.6653811 !
  
-->W(:,I)
ans  =
  
!   0.2113249    0.0002211    0.6653811 !
!   0.7560439    0.3303271    0.6283918 !
  
-->W($,$-1)
ans  =
  
    0.6283918
定义向量下标I,W是随机产生的一个2x4矩阵,从W中抽取子矩阵。符号$表示矩阵或向量的最后一行或最后一列的下标。冒号代表"所有的行"或"所有的列"。
  
-->sqrt([4  -4])
ans  =
  
!   2.    2.i !
用向量作为参数来调用一个函数(或基元),结果是一个复杂的向量。
  
-->p=poly([1 2 3],'z','coeff')
p  =
  
               2   
    1 + 2z + 3z   
  
-->//p是z的多项式,系数分别为1, 2, 3
  
-->//p也可以定义为:
  
-->s=poly(0,'s');p=1+2*s+s^2
p  =
  
              2   
    1 + 2s + s
下面是生成一个多项式更复杂的命令。
-->M=[p, p-1; p+1 ,2]
M  =
  
!             2          2 !
!   1 + 2s + s     2s + s  !
!                          !
!             2            !
!   2 + 2s + s     2       !
  
-->det(M)
ans  =
  
          2    3   4   
    2 - 4s - 4s - s
定义一个多项式矩阵。多项式矩阵的语法规范与定义常数矩阵的相同。用函数det来计算多项式矩阵的行列式值。
-->F=[1/s    ,(s+1)/(1-s)
-->      s/p    ,   s^2  ]
F  =
  
!   1              1 + s  !
!   -              -----  !
!   s              1 - s  !
!                         !
!                   2     !
!       s          s      !
!   ---------      -      !
!             2           !
!   1 + 2s + s     1      !
  
-->F('num')
ans  =
  
!   1     1 + s  !
!                !
!          2     !
!   s     s      !
  
-->F('den')
ans  =
  
!   s              1 - s  !
!                         !
!             2           !
!   1 + 2s + s     1      !
  
-->F('num')(1,2)
ans  =
  
    1 + s
定义一个关系多项式矩阵。(F的内部表达式是表格tlist的分类列表('the type',num,den) ,这里num和den是两个多项式矩阵)。通过对分类列表的抽取操作可以获得矩阵F的分子矩阵和分母矩阵。最后一条命令是直接抽取分子矩阵F('num')的第(1,2)项。
-->pause
  
-1->pt=return(s*p)
  
-->pt
pt  =
  
          2   3   
    s + 2s + s
我们用pause命令进入新的工作环境,出现提示符-1->,表示新环境的级别(级别1)。前一环境中已有的所有变量在新环境中仍有效。新环境产生的变量也可以通过return命令返回给以前的工作环境。用不带参数的return命令,是在返回旧环境前清除所有在新环境中产生的变量。pause功能对于调试非常有用。  
-->F21=F(2,1);v=0:0.01:%pi;frequencies=exp(%i*v);
  
-->response=freq(F21('num'),F21('den'),frequencies);
  
-->plot2d(v',abs(response)',[-1],'011',' ',[0,0,3.5,0.7],[5,4,5,7]);
  
-->xtitle(' ','radians','magnitude');
从前面定义的矩阵F中抽取一项,来定义一个关系多项式,后跟关系多项式的赋值,为复杂的频率值由frequencies定义的向量。关系多项式的赋值由freq来完成。F12('num')和F12('den')分别是关系多项式的分母多项式和分子多项式。注意,多项式F12('num')也可以用F('num')(1,2)来抽取矩阵F的方式获得。用基本绘图命令plot2d可对赋值结果进行可视化(见图 1.1)。
-->w=(1-s)/(1+s);f=1/p
f  =
  
        1         
    ---------     
              2   
    1 + 2s + s   
  
-->horner(f,w)
ans  =
  
              2   
    1 + 2s + s   
    ----------   
        4
函数horner是对多项式进行(可能是符号的)变量变换(如这里是进行双线性变换f(w(s))).  
-->A=[-1,0;1,2];B=[1,2;2,3];C=[1,0];
  
-->Sl=syslin('c',A,B,C);
  
-->ss2tf(Sl)
ans  =
  
!     1         2    !
!   -----     -----  !
!   1 + s     1 + s  !
在状态空间体系定义一个线性系统。这里通过状态空间矩阵(A,B,C)函数syslin定义了连续('c')系统Sl。函数ss2tf将Sl转换到传递函数矩阵体系。  
-->s=poly(0,'s');
  
-->R=[1/s,s/(1+s),s^2]
R  =
  
!                    2 !
!   1       s       s  !
!   -     -----     -  !
!   s     1 + s     1  !
  
-->Sl=syslin('c',R);
  
-->tf2ss(Sl)
ans  =
  
  
       ans(1)   (state-space system:)
  
!lss  A  B  C  D  X0  dt  !
  
       ans(2) = A matrix =  
  
! - 0.5  - 0.5 !
! - 0.5  - 0.5 !
  
       ans(3) = B matrix =  
  
! - 1.    1.    0. !
!   1.    1.    0. !
  
       ans(4) = C matrix =  
  
! - 1.    0. !
  
       ans(5) = D matrix =  
  
!               2 !
!   0    1     s  !
  
       ans(6) = X0 (initial state) =  
  
!   0. !
!   0. !
  
       ans(7) = Time domain =  
  
c
定义关系矩阵R,Sl是具有(不合适的)传递函数矩阵R的连续线性系统。tf2ss将Sl转换到状态空间体系中。注意,线性系统用分类列表(共7项)来表示。  
-->sl1=[Sl;2*Sl+eye()]
sl1  =
  
!                        2  !
!   1           s       s   !
!   -         -----     -   !
!   s         1 + s     1   !
!                           !
!                         2 !
!   2 + s      2s       2s  !
!   -----     ----     ---  !
!     s       1 + s     1   !
  
-->size(sl1)
ans  =
  
!   2.    3. !
  
-->size(tf2ss(sl1))
ans  =
  
!   2.    3. !
在传递函数矩阵体系中sl1是一个由Sl和(2*Sl+eye())并联(parallel inter-connection)而构成的线性系统,在状态空间体系中S1具有同样的语法描述。
-->deff('[Cl]=compen(Sl,Kr,Ko)',[ '[A,B,C,D]=abcd(Sl);';
-->       'A1=[A-B*Kr ,B*Kr; 0*A ,A-Ko*C]; Id=eye(A);';
-->       'B1=[B; 0*B];';
-->       'C1=[C ,0*C];Cl=syslin(''c'',A1,B1,C1)' ])
在线定义一个名为compen的函数,该函数用于计算线性系统(S1)的状态空间表达式(C1)。S1包括一个增益为Ko的观测器和一个增益为Kr的控制器。注意,这里的矩阵是由其它矩阵构造而成的分块矩阵。
-->A=[1,1 ;0,1];B=[0;1];C=[1,0];Sl=syslin('c',A,B,C);
  
-->Cl=compen(Sl,ppol(A,B,[-1,-1]),...
-->                     ppol(A',C',[-1+%i,-1-%i])');
  
-->Aclosed=Cl('A'),spec(Aclosed)
Aclosed  =
  
!   1.    1.    0.    0. !
! - 4.  - 3.    4.    4. !
!   0.    0.  - 3.    1. !
!   0.    0.  - 5.    1. !
ans  =
  
! - 1.       !
! - 1.       !
! - 1. + i   !
! - 1. - i   !
调用前面定义的函数compen,其中增益计算调用了基元ppol,基元ppol用于极点配置。显示结果矩阵Aclosed,并调用基元spec来检查其极点的配置情况。Spec用于计算矩阵的特征值。(这里由deff在线定义的函数compen,也是函数接收线性系统(Sl)作为输入、返回线性系统(Cl)作为输出的一个例子。一般情况Scilab函数在文件中定义并用getf装载入Scilab)。  
-->//将主机环境保存到myfile文件中
  
-->save('myfile')
  
-->//请求主机系统执行一条系统命令
  
-->unix_s('rm myfile')
  
-->//请求主机系统输出信息到该Scilab窗口
  
-->unix_w('date')
Thu Nov 12 15:54:58 MET 1998
与Unix环境的关系。
-->foo=['void foo(a,b,c)';
-->     'double *a,*b,*c;'
-->      '{ *c = *a + *b;}']
foo  =
  
!void foo(a,b,c)   !
!                  !
!double *a,*b,*c;  !
!                  !
!{ *c = *a + *b;}  !
  
-->write('foo.c',foo);
  
-->unix_s('make foo.o')
  
-->link('foo.o','foo','C');
  
-->deff('[c]=myplus(a,b)',...
-->   'c=fort(''foo'',a,1,''d'',b,2,''d'',''out'',[1,1],3,''d'')')
  
-->myplus(5,7)
ans  =
  
    12.

定义一个字符串类型的列向量,所含字符串用于定义一个C函数文件。程序经编译 (需要编译器)后通过link命令动态地链接到Scilab,再被函数myplus交互地调用。  

-->deff('[ydot]=f(t,y)','ydot=[a-y(2)*y(2) -1;1 0]*y')
  
-->a=1;y0=[1;0];t0=0;instants=0:0.02:20;
  
-->y=ode(y0,t0,instants,f);
  
-->plot2d(y(1,:)',y(2,:)',[-1],'011',' ',[-3,-3,3,3],[10,2,10,2])
  
-->xtitle('Van der Pol')

定义一个函数用来计算一阶向量的微分f(t,y),接着定义函数中使用的常量,再由基元ode集成由Scilab的函数f(t,y)定义的微分方程。y0=[1;0],当t=0,且方程的解以时间值序列 给出。(函数f可以定义成C/Fortran程序。)结果绘制在图1.2中,反映了集成向量的第一个元素与向量的第二个元素之间的关系。

使用道具

7
arti81 发表于 2009-7-14 21:26:20 |只看作者 |坛友微信交流群
-->m=['a' 'cos(b)';'sin(a)' 'c']
m  =
  
!a       cos(b)  !
!                !
!sin(a)  c       !
  
-->//m*m'   --> 错误信息: 不在scilab中实现
  
-->deff('[x]=%c_m_c(a,b)',['[l,m]=size(a);[m,n]=size(b);x=[];';
-->  'for j=1:n,y=[];';
-->  'for i=1:l,t='' '';';
-->  'for k=1:m;';
-->  'if k>1 then t=t+''+(''+a(i,k)+'')*''+''(''+b(k,j)+'')'';';
-->  'else t=''('' + a(i,k) + '')*'' + ''('' + b(k,j) + '')'';';
-->  'end,end;';
-->  'y=[y;t],end;';
-->  'x=[x y],end,'])
  
-->m*m'
ans  =
  
!(a)*(a)+(cos(b))*(cos(b))  (a)*(sin(a))+(cos(b))*(c)  !
!                                                      !
!(sin(a))*(a)+(c)*(cos(b))  (sin(a))*(sin(a))+(c)*(c)  !
定义一个包含字符串的矩阵。缺省情况下,两个字符串矩阵的乘法操作在Scilab中没作定义。但在线函数定义%cmc定义了两个字符串矩阵的乘法(注意,必须加双引号,因为deff内包含了引号)。函数定义%cmc以%打头,表示允许定义目前Scilab中还不存在的操作,而名字cmc是"chain multiply chain"(字串乘以字串)的意思。这个例子不是很有用,它只是简单地说明了操作符operations如*,是如何通过某些Scilab函数来定义复杂的数据结构的。
-->deff('[y]=calcul(x,method)','z=method(x),y=poly(z,''x'')')
  
-->deff('[z]=meth1(x)','z=x')
  
-->deff('[z]=meth2(x)','z=2*x')
  
-->calcul([1,2,3],meth1)
ans  =
  
                2   3   
  - 6 + 11x - 6x + x   
  
-->calcul([1,2,3],meth2)
ans  =
  
                  2   3   
  - 48 + 44x - 12x + x
下面举一简单例子来说明一个函数的输出作为另一函数的输入。Scilab的函数同其它对象(如矩阵,列表)一样,都是可被定义、加载和操作的。
-->quit
退出Scilab。

使用道具

8
任建超 学生认证  发表于 2009-8-25 00:17:32 |只看作者 |坛友微信交流群
小青年,人可不能太贪了,你这个东西我下载了,说实话真的不值两个论坛币!!

使用道具

9
carol421 发表于 2011-2-26 16:06:31 |只看作者 |坛友微信交流群
楼主的东西不值2币

使用道具

10
jimmyhan 发表于 2011-5-17 04:46:01 |只看作者 |坛友微信交流群
谢谢楼主啊!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 15:23