举出这一题为例子
图中可见连接exp与sin函数之间的乘号*前面如果没有“.”则会报错内部矩阵维度必须一致
明显MATLAB把输入的式子当作矩阵处理了,而其实只要作为数组处理即可(矩阵在定义中看作数组的特殊形式),而数组的乘法是需要点乘
继续做完这道题
t=[0:0.1*pi:2*pi];
>> z=0.707;
>> f=10*(1/sqrt(1-z^2))*exp(-2*t).*sin(4*t)
f =
1 至 5 列
0 7.174315708291667 2.365470700067633 -1.261950448311017 -1.089317979230833
6 至 10 列
-0.000000000000000 0.310030292616613 0.102221257488071 -0.054533823526243 -0.047073698117739
11 至 15 列
-0.000000000000000 0.013397623724428 0.004417381065910 -0.002356620192474 -0.002034238942833
16 至 20 列
-0.000000000000000 0.000578963816556 0.000190892344322 -0.000101838792376 -0.000087907435405
21 列
-0.000000000000000
>> logi=logical(f>=0)
logi =
1×21 logical 数组
1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0
>> f1=logi.*f
f1 =
1 至 6 列
0 7.174315708291667 2.365470700067633 0 0 0
7 至 12 列
0.310030292616613 0.102221257488071 0 0 0 0.013397623724428
13 至 18 列
0.004417381065910 0 0 0 0.000578963816556 0.000190892344322
19 至 21 列
0 0 0
这里比较有趣的一点在于条件输出部分,因为要输出大于零的部分,所以先定义了一个变量logical类型的变量logi储存函数大于等于零的元素,真为1,假为0,再与相乘消除小于零的部分