matlab中分段函数矩阵乘法维数不正确

rsaldnfx  于 2023-03-30  发布在  Matlab
关注(0)|答案(2)|浏览(400)

这是我试图在Matlab中实现的:

其中vi = sin(2*pi*1000*t)VD = 0.72
以下是我的命令:

t = 1:1000;
t/1000;
vi = sin(2*pi*1000*t);
vo = piecewise(vi<0.72, 0, vi>0.72, (vi-0.72)*exp(-t));

但是,我得到这个错误:Error using * Incorrect dimensions for matrix multiplication. Check that the number of columns in the first matrix matches the number of rows in the second matrix. To perform elementwise multiplication, use '.*'.
我不知道我做错了什么,有帮助吗?

hrysbysz

hrysbysz1#

你的问题是在表达式(vi-0.72)*exp(-t)中。由于tvi都是大小为(1,1000)的矩阵,Matlab的*运算符假设你试图执行1x 1000矩阵与1x 1000矩阵的*矩阵乘法,这是不可能的-因此错误。
你需要告诉Matlab你想把(vi-0.72)的每个元素乘以exp(-t)的每个元素,你可以用.*来做。

>>> vo = piecewise(vi<0.72, 0, vi>0.72, (vi-0.72).*exp(-t))
sczxawaw

sczxawaw2#

有两个问题。
第一个较小的问题在@Anthony Evans的回答中描述,并详细说明了*.*运算符之间的差异。
更大的问题(以及为什么提供的代码仍然不起作用-它返回一个与piecewise相关的错误)是因为piecewise的输入应该是符号函数。如果我们看到piecewise page上的用法,在每次使用函数function之前,我们会看到使用syms关键字创建一个新的符号变量。
因此,使用piecewise的最佳方式是使用symbolic变量t,并注意vi是一个函数(因此应表示为函数句柄)。然后,我们可以使用piecewise,输出可以使用subs访问。

syms t; % symbolic variable
vi = @(x) sin(2*pi*1000*x); % function handle
vo = piecewise(vi(t)<0.72, 0, vi(t)>0.72, (vi(t)-0.72).*exp(-t)); % also returns a function
figure; plot(0:1e-5:1e-2, subs(vo, t, 0:1e-5:1e-2)); % access data using plot
figure; fplot(vo); % another example visualisation

相关问题