
第一个问题: .* 是用来表示两个数组对应元素相乘,比如
a = [1 2 3];
b = [2 2 2];
a .* b
结果为
[2 4 6]
用 .* 的时候 a 和 b 并不要求是一维数组,但相乘的两个数组必须一样大。像上面的那个例子,b 里每个元素都是 2,因此也可以写成 2.*a 或 2*a。这里不区分 .* 和 * 是因为后者那个 * 在数学里表示“数乘”运算,数乘的意思正好和 matlab 里的 .* 一样。
但如果 a 和 b 都是矩阵的话,.* 和 * 的意思就不一样了,* 表示矩阵乘法。这时要求 a 的列数和 b 的行数要相等。即使是 1*n 或者 n*1 这种感觉是向量的变量,用 * 时也会作为矩阵对待。
但 1/x 和 1./x 不能混用,除非 x 是一个数。因为无论分子是不是矩阵,作为分母的 x 已经是矩阵了,所以必然涉及矩阵除法(即逆矩阵)。由于矩阵的乘法不满足交换律,所以有左逆矩阵也有右逆矩阵,matlab 里分别用 x\1 和 1/x 这两种方法表示。
为避免误解和保持一致,一个好习惯是数乘矩阵时也写成 2.*x 来明确表示不是矩阵乘法。
第二个问题,因为
syms x
声明 x 为一个符号变量,这是符号运算包里的一个功能。这之后对 x 作运算调用的都是符号运算包里的函数,和 matlab 本来的那些功能就一些区别了。比如后面调用的那个 int() 就是符号运算包里求定积分或不定积分的函数。如果感兴趣可以具体百度 matlab 符号运算相关的内容。
对于符号变量没有 .* .^ 之些区别,因为这时 matlab 认为它们都是一个“数”。从 fy1 的返回值也可以看出来,matlab 自己并不再用 ./ .^ .* 这些运算符了。
哇哇哇哇非常感谢 那我把y1改成1/(x^3-2*x-5)就能返回不定积分的值了么?
emmm 返回定积分的值。。

2023-08-25 广告
2018-10-30 · 知道合伙人互联网行家

第二个问题,因为这个积分没法给出显式表达式,这个返回值也不是一个函数,就是一个一般的表达式而已。如果你想要一个数值,可以用double(fy1)。如果你觉得精度不够高,可以用vpa(fy1)