文章目录
一、求一元多次方程
求解2x^5 -3x3+71x2-9x+13=0
第一行命令是建立多项式系数向量,第二行是调用roots函数求方程的全部根
二、求解线性方程组
2x+3y-z=2
8x+2y+3z=4
45x+3y+9z=23
前两条命令建立系数矩阵a和向量b,第三条命令求线性方程组的解,inv(a)用于求a的逆矩阵。第三条命令也可以用命令x=a\b等价表示。
三、求定积分
对xln(1+x)dx进行定积分0到1
f=@(x) x.*log(1+x);
这一行定义了一个匿名函数 f(x)
其中,x.*log(1+x) 表示对 x 进行逐元素操作,即对于输入的每一个 x 值,计算
@ 符号用于定义匿名函数,后面跟的是函数的变量(x),然后是函数体。
integral(f,0,1):
integral 是 MATLAB 用来计算数值积分的函数。
第一个参数 f 是要进行积分的函数,这里传入的是之前定义的匿名函数 f(x)。
第二个和第三个参数 0 和 1 分别表示积分的下限和上限
在 MATLAB 中,使用点运算符(如 .*
、./
、.^
)是为了进行逐元素操作(element-wise operation)。也就是说,点运算符的作用是对向量或矩阵中的每个元素分别进行操作,而不是执行矩阵运算。
具体到你的代码中:
f = @(x) x.*log(1+x);
这里用到了 .*
,表示对于输入的 x
,我们逐元素地计算 x
和 log(1+x)
的乘积。如果你输入的是一个向量或矩阵,那么 x.*log(1+x)
会对向量或矩阵的每个元素进行逐元素计算。
为什么需要用点运算符:
-
向量化计算:
- MATLAB 中的很多操作都是基于矩阵和向量的。假如你输入的
x
是一个向量,像x = [0.1, 0.2, 0.3]
,那么x.*log(1+x)
就会分别计算每个元素的乘积, 这就是逐元素操作,而不是矩阵乘法。
- MATLAB 中的很多操作都是基于矩阵和向量的。假如你输入的
-
避免错误:
- 如果你只使用
*
(没有点),MATLAB 会尝试进行矩阵乘法。对于标量来说,这不会出问题,但对于向量或矩阵来说,这会导致错误,因为矩阵乘法要求矩阵的维度匹配,而逐元素乘法没有这个限制。
- 如果你只使用
例子对比:
-
逐元素乘法(正确方式):使用
.*
A = [1, 2, 3]; B = [4, 5, 6]; C = A .* B; % 对应元素相乘,结果为 [4, 10, 18]
-
矩阵乘法(错误方式,如果维度不符合会报错):使用
*
A = [1, 2, 3]; B = [4, 5, 6]; C = A * B; % 这会报错,因为 A 和 B 不是合适的矩阵维度来进行矩阵乘法
总结:
在 f = @(x) x.*log(1+x);
中使用 .*
是为了确保当 x
是一个向量或矩阵时,计算会按逐元素操作进行,而不是进行矩阵乘法。