这是我试图在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 '.*'.
我不知道我做错了什么,有帮助吗?
2条答案
按热度按时间hrysbysz1#
你的问题是在表达式
(vi-0.72)*exp(-t)
中。由于t
和vi
都是大小为(1,1000)的矩阵,Matlab的*
运算符假设你试图执行1x 1000矩阵与1x 1000矩阵的*矩阵乘法,这是不可能的-因此错误。你需要告诉Matlab你想把
(vi-0.72)
的每个元素乘以exp(-t)
的每个元素,你可以用.*
来做。sczxawaw2#
有两个问题。
第一个较小的问题在@Anthony Evans的回答中描述,并详细说明了
*
和.*
运算符之间的差异。更大的问题(以及为什么提供的代码仍然不起作用-它返回一个与
piecewise
相关的错误)是因为piecewise
的输入应该是符号函数。如果我们看到piecewise
page上的用法,在每次使用函数function
之前,我们会看到使用syms
关键字创建一个新的符号变量。因此,使用
piecewise
的最佳方式是使用symbolic
变量t
,并注意vi
是一个函数(因此应表示为函数句柄)。然后,我们可以使用piecewise
,输出可以使用subs
访问。