matlab -1,matlab(1)

MATLAB 特色举例

考虑两个矩阵 A 和 B 的乘积问题,在 C 语言中要实现两个矩阵的乘积并不仅仅是一组双重循环的问题。双重循环当然是矩阵乘积所必需的,除此之外要考虑的问题很多。例如:A 和 B 有一个是复数矩阵怎么考虑;其中一个是复数矩阵时怎么考虑;全部是实系数矩阵时又怎么管理;这样就要在一个程序中有 4 个分支,分别考虑这 4 种情况。然后还得判断这两个矩阵是否可乘。而考虑两个矩阵是否可乘也并不仅仅是判断 A 的列数是否等于 B 的行数这么简单。其中一个若为标量,则它们可以无条件地相乘。其中有标量时又得考虑实数与复数的问题等。所以说,没有几十分钟的时间,用 C 语言并不可能编写出考虑各种情况的子程序。有了 MATLAB 这样的工具,A 和 B 矩阵的乘积用 A*B 这样简单的算式就能表示了。

〖例 1-1〗矩阵生成与运算。考虑金庸作品中经常提及的一个“数学问题”, 该问题用半数学语言描述就是:如何生成一个 3x3 矩阵, 并将自然数 1, 2, ..., 9 分别置成这 9 个矩阵元素,才能使得每一行、每一列、且主、反对角线上元素相加都等于一个相同的数。

这样的矩阵称为“魔方矩阵”。用 MATLAB 的 magic() 函数,我们可以由下面的命令立即生成这样的矩阵:

>>  A=magic(3)

A =

8   1   6

3   5   7

4   9   2

还可以由 B=magic(10) 一次生成 10x10 的魔方矩阵。如果想求出矩阵的行列式和特征值,可以分别由 det(B) 与 eig(B) 立即得出结果,而同样的工作在 C 下并不是很简单就可以得出的,算法选择不好,还可能得出错误的结果。

〖例 1-2〗考虑一个二元函数

eq_1_1.gif

如何用三维图形的方式表现出这个曲面?

用 C 这类语言,绘制图形是一个难点,且从一个机器移植程序到另一个机器,大部分调试程序时间都花在这上。但使用 MATLAB 这类高级语言,完成这样的工作就是几个直观语句的事。且得出的图形美观准确、可以将语句毫不变化地移植到另外的机器上,得出完全一致的结果,如下所示。

>> [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), shading interp; colorbar

fig1_1.gif

〖例 1-3〗微分方程的数值解法是在科学与工程计算中经常遇到的问题。假设著名的 Lorenz 模型的状态方程表示为:

eq_1_2.gif

若令

eq_1_3.gif 且初值为

eq_1_4.gif,e 为一个小常数,假设

eq_1_5.gif 则我们可以由下面的几个语句就可以描述微分方程:xdot = 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; plot3(x(:,1),x(:,2),x(:,3)); axis([10 40 -20 20 -20 20]);

fig_1_2.gif

〖例 1-5 〗(注,这里的编号采用作者书中的序号) 设有解析函数

eq_1_7.gif,利用 MATLAB 的符号运算工具箱可以对该函数进行解析推导,得出诸如高阶导数、积分、Taylor 幂级数展开等。>> syms x; f='x^2*(sin(x))^2';

diff(f); f1=simple(ans)

f1 =

x-x*cos

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值