资源描述:
《《matlab举例》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Matlab特色举例(2009-03-1116:05:31)标签:杂谈 分类:科学研究考虑两个矩阵A和B的乘积问题,在C语言中要实现两个矩阵的乘积并不仅仅是一组双重循环的问题。双重循环当然是矩阵乘积所必需的,除此之外要考虑的问题很多。例如:A和B有一个是复数矩阵怎么考虑;其中一个是复数矩阵时怎么考虑;全部是实系数矩阵时又怎么管理;这样就要在一个程序中有4个分支,分别考虑这4种情况。然后还得判断这两个矩阵是否可乘。而考虑两个矩阵是否可乘也并不仅仅是判断A的列数是否等于B的行数这么简单。其中一个若为标量,则它们可以无条件地相乘。其中有标量时
2、又得考虑实数与复数的问题等。所以说,没有几十分钟的时间,用C语言并不可能编写出考虑各种情况的子程序。有了MATLAB这样的工具,A和B矩阵的乘积用A*B这样简单的算式就能表示了。〖例1-1〗矩阵生成与运算。考虑金庸作品中经常提及的一个“数学问题”,该问题用半数学语言描述就是:如何生成一个3x3矩阵,并将自然数1,2,...,9分别置成这9个矩阵元素,才能使得每一行、每一列、且主、反对角线上元素相加都等于一个相同的数。 这样的矩阵称为“魔方矩阵”。用MATLAB的magic()函数,我们可以由下面的命令立即生成这样的矩阵: >> A=ma
3、gic(3) A= 8 1 6 3 5 7 4 9 2还可以由B=magic(10)一次生成10x10的魔方矩阵。如果想求出矩阵的行列式和特征值,可以分别由det(B)与eig(B)立即得出结果,而同样的工作在C下并不是很简单就可以得出的,算法选择不好,还可能得出错误的结果。〖例1-2〗考虑一个二元函数如何用三维图形的方式表现出这个曲面? 用C这类语言,绘制图形是一个难点,且从一个机器移植程序到另一个机器,大部分调试程序时间都花在这上。但使用MATLAB这类高级语言,完成这样的工作就是几个直观语句的事。且得出的图
4、形美观准确、可以将语句毫不变化地移植到另外的机器上,得出完全一致的结果,如下所示。 >>[x,y]=meshgrid(-3:1/8:3); z=3*(1-x).^2.*exp(-(x.^2)-(y+1).^2)-10*(x/5-x.^3-y.^5)... .*exp(-x.^2-y.^2)-1/3*exp(-(x+1).^2-y.^2); surf(x,y,z),shadinginterp;colorbar〖例1-3〗微分方程的数值解法是在科学与工程计算中经常遇到的问题。假设著名的Lorenz模型的状态方程表示为:若令且
5、初值为,e为一个小常数,假设则我们可以由下面的几个语句就可以描述微分方程:functionxdot=lorenzeq(t,x)xdot=[-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)];这样下面几个语句就能求解该微分方程,绘制出时间曲线与相空间曲线,如下所示。>>t_final=100;x0=[0;0;1e-10]; [t,x]=ode45('lorenzeq',[0,t_final],x0); plot(t,x), figure;pl
6、ot3(x(:,1),x(:,2),x(:,3));axis([1040-2020-2020]);〖例1-5〗(注,这里的编号采用作者书中的序号)设有解析函数,利用MATLAB的符号运算工具箱可以对该函数进行解析推导,得出诸如高阶导数、积分、Taylor幂级数展开等。>>symsx;f='x^2*(sin(x))^2';diff(f);f1=simple(ans)f1= x-x*cos(2*x)+x^2*sin(2*x)>>diff(f,x,2);f2=simple(ans)f2= 1-cos(2*x)+4*x*sin(2*x)+2
7、*x^2*cos(2*x)>>diff(f,x,3);f3=simple(ans)f3= 6*sin(2*x)+12*x*cos(2*x)-4*x^2*sin(2*x)>>diff(f,x,4);f4=simple(ans)f4= 24*cos(2*x)-32*x*sin(2*x)-8*x^2*cos(2*x)>>int(f4,x)ans= 6*sin(2*x)+12*x*cos(2*x)-4*x^2*sin(2*x)>>taylor(x^2*(sin(x))^2,15,x)ans= x^4-1/3*x^6+2/45*x^8-1/3
8、15*x^10+2/14175*x^12-2/467775*x^14 Matlab支持的数据结构 MATLAB语言的赋值语句有两种:·变量名=运算表达式·[返回变量列表]=函数名(输入变量列表) MAT