矩阵乘法和求和

时间:2014-11-13 22:24:10

标签: matlab loops matrix vector operations

我正在尝试重新制作我的旧函数,它取一个固定值x:

function [res] = Eph(x,approximation,dot)
    a = [ 0.1818 0.5099 0.2802 0.02817];
    b = [ 3.2 0.9423 0.4029 0.2016];
if dot ~= 1 
res  =  sum(a.*exp(-b.*x));

现在我正在尝试传递一个向量x(对于每个x_ {i}都是相同的过程),我想要回到结果res。有人可以给我一个提示如何不使用循环吗?

1 个答案:

答案 0 :(得分:0)

我认为您可以通过矩阵乘法(对于b.*x部分)和bsxfun(对于a.*exp(...))部分进行组合:

res = sum(bsxfun(@times, a, exp(-x(:)*b)), 2);

您的代码示例,标量为x

>> x = 3;
>> res = sum(a.*exp(-b.*x))
>> res =
    0.1292

我的代码示例,向量x

>> x = [3 4 5];
>> res = sum(bsxfun(@times, a, exp(-x(:)*b)), 2)
res =
    0.1292
    0.0803
    0.0522