矩阵和向量之运算
简单的开始
-->a=1
a =
1.
-->a=1; //在运算式最后加上分号 (;),就不会显示运算结果
--> // 两个(/)后面为注解说明
-->a=1; b=2; //同一行里可以连续给指令
-->c=a+b;
-->c
c =
3.
矩阵的运算
-->//定义一个3X3的矩阵 ,每一列以分号(;)区隔,一列中以逗号(,)区隔个别元素
-->//也可以空白区隔 个别元素
-->A=[ 1 , 3 , 6 ; 2 , 7 , 8 ; 0 , 3 , 9 ] //一个3x3的矩阵 ,每一列以分号(;)区隔
A =
! 1. 3. 6. !
! 2. 7. 8. !
! 0. 3. 9. !
-->size(A) //若无指定计算结果名称则以 ans 储存其结果
ans =
! 3. 3. !
转置矩阵
-->A'
ans =
! 1. 2. 0. !
! 3. 7. 3. !
! 6. 8. 9. !
行向量(column vector)及列向量(row vector)
-->A(:,3) //第3行的所有元素;行向量
ans =
! 6. !
! 8. !
! 9. !
-->A(1,:) //第1列的所有元素;列向量
ans =
! 1. 3. 6. !
-->A(1,:)+A(1,:) //第1列加第2列
ans =
! 1. 6. 15. !
矩阵相加
-->B=[3 4 5;6 7 2;8 1 0]; //另一个3x3的矩阵
-->C=A+B //矩阵A加矩阵B
C =
! 4. 7. 11. !
! 8. 14. 10. !
! 8. 4. 9. !
矩阵相减
-->C=A-B //矩阵A减矩阵B
C =
! -2. -1. 1. !
! -4. 0. 6. !
! -8. 2. 9. !
矩阵相乘
-->C=A*B //矩阵A乘矩阵B
C =
! 69. 31. 11. !
! 112. 65. 24. !
! 90. 30. 6. !
矩阵函数
逆矩阵
-->A=[ 1 , 3 , 6 ; 2 , 7 , 8 ; 0 , 3 , 9 ];
-->inv(A) //A的逆矩阵
ans =
! 1.8571429 - .4285714 - .8571429 !
! - .8571429 .4285714 .1904762 !
! .2857143 - .1428571 .0476190 !
矩阵的行列式值
-->det(A)
ans =
21.
矩阵的秩
-->rank(A) //第3行的所有元素;行向量
ans =
3.
单位矩阵
-->eye(3,4) //产生一个3x4的矩阵,其对角线各元素全为1,其他各元素全为0
! 1. 0. 0. 0. !
! 0. 1. 0. 0. !
! 0. 0. 1. 0. !
所有元素全为0的矩阵
-->zeros(3,4) //产生一个3x4的矩阵,其所有元素全为0
! 0. 0. 0. 0. !
! 0. 0. 0. 0. !
! 0. 0. 0. 0. !
所有元素全为1的矩阵
-->ones(3,4) //产生一个3x4的矩阵,其所有元素全为1
! 1. 1. 1. 1. !
! 1. 1. 1. 1. !
! 1. 1. 1. 1. !
矩阵的特徵值(eigenvalue)
-->A=diag([1,2,3]); //产生一个3x3的矩阵,其主对角线上元素分别为1、2、3
-->X=rand(3,3); //产生一个3x3的乱数矩阵
-->A=inv(X)*A*X; //产生一个3x3的矩阵
-->spec(A)
ans =
! 2. !
! 1. !
! 3. !
LU分解
-->A=[1 3 5;2 4 8;4 7 3]; //产生一个3x3的矩阵
-->[l,u]=lu(A) //矩阵A的LU分解
u =
! 4. 7. 3. !
! 0. 1.25 4.25 !
! 0. 0. 4.8 !
l =
! .25 1. 0. !
! .5 .4 1. !
! 1. 0. 0. !
-->l*u-A //验算
ans =
! 0. 0. 0. !
! 0. 0. 0. !
! 0. 0. 0. !
资料分析函数
最小值
-->v=[ 11 23 73 25 49 92 28 23];
-->min(v) //向量v中所有元素的最小值
ans =
11.
最大值
-->min(v) //向量v中所有元素的 最大值
ans =
92.
向量中所有元素的总和
-->sum(v) //向量v中所有元素的总和
ans =
324.
标准差
-->stdev([1 4 10 -5 6 9 -20]) //向量[1 4 10 -5 6 9 -20]的标准差
ans =
10.451703
排序
-->sort([1 4 10 -5 6 9 -20]) //向量[1 4 10 -5 6 9 -20]的元素由大排序到小
ans =
! 10. 9. 6. 4. 1. - 5. - 20. !
平均值
-->mean([1 4 10 -5 6 9 -20]) //向量[1 4 10 -5 6 9 -20]的平均值
ans =
.7142857
向量中各元素间之运算
-->v1=[ 1 5 6 7]; v2=[0 2 3 5];
-->v3=v1.*v2 //向量v1,v2中所有对应之元素相乘
v3 =
! 0. 10. 18. 35. !
-->v4=v2./v1 //向量v2,v1中所有对应之元素相除
v4 =
! 0. .4 .5 .7142857 !
多项式工具
由多项式係数来定义多项式
-->p=poly([-9 6 -5 4 1],'z','coeff') //p是z的多项式係数为1,2,3
p =
2 3 4
- 9 + 6z - 5z + 4z + z
多项式方程式的根
-->roots(p) //多项式方程式p的 所有的根
ans =
! 1.2007909 !
! .0177876 + 1.1962571i !
! .0177876 - 1.1962571i !
! - 5.2363662 !
由根来定义多项式方程式
-->poly([-1 -2+2*%i -2-2*%i -5+7*%i -5-7*%i],'z','root')
ans =
2 3 4 5
592 + 968z + 498z + 136z + 15z + z
多项式的值
-->y=poly([-5 4 3 1],'x','coeff');
-->horner(y,2) //x=2时,y的数值
ans =
23.
多项式的处理
-->s=poly(0,'s'); //poly内定为使用根来描述多项式
-->p=1+2*s+s^2 //重新定义多项式p
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) //多项式矩阵M的行列式值
ans =
2 3 4
2 - 4s - 4s - s
複数的计算
使用複数
-->2+3*%i //%i是-1的开根号
ans =
2. + 3.i
複数的绝对值
-->abs(-1+%i) //-1+%i的绝对值
ans =
1.4142136
複数的实部(real part)和虚部(imaginary part)
-->c=-10+9*%i;
-->[real(c),imah(c)]
ans =
! - 10. 9. !
共轭複数
-->x=[1+%i,-%i;%i,2*%i];
-->conj(x) //x的矩阵内各元素的共轭複数
ans =
! 1. - i i !
! - i -2.i !
非线性代数方程式
第一个例子
-->function y=fct1(x),y=x+exp(x)-10,endfunction //定义函数fct1
-->fsolve(1,fct1) //求解fct1=0的解,1为起始值
ans =
2.0705799
第二个例子
-->function y=fct2(x),y=x^3+x*cos(x)-4*x,endfunction //定义函数fct2
-->fsolve(-5,fct2) //求解fct2=0的解,-5为起始值
ans =
- 2.1281265
微分方程式
第一个例子,dy/dt=y^2-y sin(t)+cos(t), y(0)=0
-->function ydot=f(t,y),ydot=y^2-y*sin(t)+cos(t),endfunction //定义微分方程式dy/dt=f(t,y)
-->t0=0;y0=0; //起始值条件
-->t=0:0.1:%pi; //计算范围t由0开始到%pi(=3.1415927)间隔为0.1
-->y=ode(y0,t0,t,f); //呼叫ode函数求解微分方程式
-->plot(t,y) //绘出y对t的图形
第二个例子
-->function y=fct2(x),y=x^3+x*cos(x)-4*x,endfunction //定义函数fct2
-->fsolve(-5,fct2) //求解fct2=0的解,-5为起始值
ans =
- 2.1281265
数值积分
第一个例子
-->function y=f(x),y=x*sin(30*x)/sqrt(1-((x/(2*%pi))^2)),endfunction //定义函数f
-->intg(0,2*%pi,f) //对函数f积分,由0积分到2p
ans =
- 2.5432596
第二个例子
-->integrate('1/(1+(230*x-30)^2)','x',0,1) //对'1/(1+(230*x-30)^2)'作0到1之积分
ans =
.0134925
内插与样线函数
第一个例子
-->x=[0 1 2 3 4]; y=[3 1 0 2 4]; //定义一组离散资料(x,y)
-->d=splin(x,y); //离散资料(x,y)对应之样条函数
-->xval=1.5; //欲内插之x座标值xval
-->yval=interp(xval,x,y,d) //相对应xval之内插函数值yval
yval =
.171875
第二个例子
-->x=0:0.1:1;f=rand(x); //定义离散资料(x,f)
-->d=splin(x,f); //离散资料(x,f)对应之样条函数
-->s=0:0.01:1;p=interp(s,x,f,d); //对于间隔更小(s)的内插离散资料(s,p)
-->xset("mark size",16) //设定离散资料(x,f)之标志大小
-->plot2d(x,f,style=-6) //绘製离散资料(x,f),style=-6代表仅画出标志
-->plot2d(s,p,2,"081") //绘製离散资料(s,p),2代表线条之颜色
二维平面绘图
绘製简单的2d图形
-->x=[0:0.1:2*%pi];
-->plot2d(x,sin(x))
绘製较複杂的2d图形
-->plot2d(x,[sin(x) sin(2*x) sin(3*x)],rect=[0,-1.5,7,1.5])
闲暇、偶然,杂乱、零碎、等等
『特注:此博客以转贴为主,大部分文章来自网络搜索,如果涉及版权,请及时告知,博主会及时撤下内容。』
2007年9月12日星期三
Scilab基本教材
订阅:
博文评论 (Atom)

没有评论:
发表评论
愿与大家多交流分享。芸芸众生,相识即缘。。。 ^_^