MATLAB爱好者论坛-LabFans.com

MATLAB爱好者论坛-LabFans.com (https://www.labfans.com/bbs/index.php)
-   资料存档 (https://www.labfans.com/bbs/forumdisplay.php?f=72)
-   -   Matlab / Octave中的向量/矩阵成员上的无环函数调用 (https://www.labfans.com/bbs/showthread.php?t=23219)

poster 2019-12-10 20:30

Matlab / Octave中的向量/矩阵成员上的无环函数调用
 
我从循环世界(C等)进入矩阵世界

我想在向量/矩阵的每个单独成员上调用一个函数,并返回结果向量/矩阵。

这是我目前的做法:

function retval = gauss(v, a, b, c) for i = 1:length(v) retval(i) = a*(e^(-(v(i)-b)*(v(i)-b)/(2*c*c))); endfor endfunction 用法示例:

octave:47> d=[1:1000]; octave:48> mycurve=gauss(d, 1, 500, 100); 现在,关于MATLAB / Octave的所有建议都说:每当您发现自己使用循环并想出一种更好的方法时,就停止。

因此,我的问题是:是否[B]可以在不使用显式循环的情况下一次调用向量/矩阵的每个成员上的函数,并将结果立即返回到新的向量/矩阵中?[/B]

那就是我在寻找这样的东西:

function retval = newfun(v) retval = 42*(v^23); endfunction 也许仅仅是语法糖,仅此而已,但仍然有用。



[B]回答:[/B]

该函数应如下所示:

function retval = gauss(v, a, b, c) retval = a*exp(-(vb).^2/(2*c^2)); 我建议您阅读MATLAB文档,了解如何矢量化代码并避免循环:

[URL="http://www.mathworks.com/support/tech-notes/1100/1109.html"]代码向量化指南[/URL]

[URL="http://www.mathworks.com/access/helpdesk/help/techdoc/matlab_prog/f8-784135.html"]提高性能的技术[/URL]

还请记住,有时带有循环的代码可以比矢量化的代码更清晰,并且在最近引入的JIT编译器MATLAB可以很好地处理循环。



[url=https://stackoverflow.com/questions/2470844]更多&回答...[/url]


所有时间均为北京时间。现在的时间是 05:06

Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.