MatLab中的逐元素指数乘法
我试图在MatLab中执行一个自定义函数,这样作为向量的MatLab中的逐元素指数乘法,matlab,Matlab,我试图在MatLab中执行一个自定义函数,这样作为向量的x实际上是常数e的指数。我曾尝试在许多地方放置点,但它不断抛出一个错误,告诉我在^之前使用,这不是我在这种情况下想要做的Y需要返回向量而不是常量 x = [0:0.1:1]; function y = hyperT(x) e = exp(1); y = ((e^x*2)-1)/((e^x*2)+1); end 为了这个线程,我已经取出了。要获得向量,可以使用(): 操作符基本上表示“元素方面”。
x
实际上是常数e
的指数。我曾尝试在许多地方放置点
,但它不断抛出一个错误,告诉我在^
之前使用
,这不是我在这种情况下想要做的Y
需要返回向量而不是常量
x = [0:0.1:1];
function y = hyperT(x)
e = exp(1);
y = ((e^x*2)-1)/((e^x*2)+1);
end
为了这个线程,我已经取出了
。要获得向量,可以使用():
操作符基本上表示“元素方面”。例如,如果将两个向量相乘,x=[x1,x2,x3]
和y=[y1,y2,y3]
,则使用*
操作符将每个元素乘以另一个向量中的对应元素,而使用*
操作符(不带
执行内积():
请注意,上面的“
转置了向量
一些运营商自动广播,因为他们的使用是不含糊的。因此,您不需要使用带有+
和-
运算符的
。奇怪的是,除法操作符没有自动广播,所以您需要在那里使用/
)。我不确定当您省略
时它在做什么,但它似乎定义得很好,至少是一致的
通常,通过使用bsxfun
(),可以在两个向量之间或常量和向量之间执行任意元素操作(即使是您定义的操作)。例如,要执行您询问的电源操作,您可以执行以下操作:
bsxfun(@power, e, x)
或
这实际上是一种非常高效的方法,可以完成很多整洁的事情,但是在您的例子中,该功能已经内置于^
编辑:添加了一些链接您可以使用:
expm(x)
这是矩阵指数。这会起作用吗-y=((e.^x.*2)-1)。/(e.^(x.*2)+1)
?它只返回一个常量0.5770
@user1574598:如果我使用x=[0.1:1];e=exp(1);y=((e.^x.*2)-1)。/(e.^(x.*2)+1);我得到的是向量,不是常数。请解释您的问题。对不起,我没有意识到我需要这么多
。我错过了除法符号之前的那个。谢谢,我知道两个向量相乘会产生点或叉积(只有在尺寸一致的情况下)。在除法符号之前我需要一个
,这有点让人困惑。尽管如此,这似乎生成了我需要的图形y=((e.^x.*2)-1)。/((e.^x.*2)+1)
@user1574598在/
之前的
表示您对执行元素除法而不是矩阵除法感兴趣。不知道有什么困惑。我刚刚看到你的编辑,是的,bsxfun
似乎是一种更有效的方法。不管怎么说,这并不严重,因为我只是想从我正在学习的一本书中的双曲正切方程中创建一个图。@Divakar矩阵除法在MATLAB中是如何定义的?文件对我来说不清楚。但是是的,/
显然是我们想要的。@Divaker-很抱歉,我完全理解,现在没有混淆。谢谢你的帮助:-)
x.*y = [x1y1, x2y2, x3y3]
x*y = error (inner matrix dimensions must agree)
x'*y = [x1y1, x2y1, x3y1;
x2y1, x2y2, x3y2;
x1y3, x2y3, x3y3]
x*y' = x1y1 + x2y2 + x3y3
bsxfun(@power, e, x)
bsxfun(@power, e, x*2)