我是一名熟悉Python,Ruby和C的程序员,他们正试图决定是否学习GNU Octave或Matlab.我知道它们有很多共同点,但我不清楚语法是多么相似甚至数据结构.每个人都说他们"相似",但没有人说他们实际上是多么相似.上面的链接显示了几个在语法上相似或相同的例子,这对于整个语言是否正确?
我正在尝试学习一般语言以进行更多的科学计算,可能使用一些图像分析库.我知道我可以编写很多其他语言,但我的顾问说,了解MATLAB或Octave在科学中至关重要.
另外,Matlab值得花费吗?我没有很多钱,但如果图书馆或其他地方存在重大差异,我相信我能找到钱.
我通过Homebrew安装了Octave和gnuplot,并下载了AquaTerm.dmg.当我尝试绘图时,我收到以下消息:
octave:4> plot(x,y)
gnuplot> set terminal aqua enhanced title "Figure 1" font "*,6"
^
`line 0: unknown or ambiguous terminal type; type just 'set terminal' for a list`
Run Code Online (Sandbox Code Playgroud)
在bash终端set terminal,set Terminal,set term,(和相同的,其次是"AQUA"太)等给予什么.我已经尝试从八度音阶再次绘制"AquaTerm"已经打开,但没有.我已经尝试直接从gnuplot绘图,但同样的问题..我怎么能这样做"设置终端aqua"?
Gnuplot启动消息说" Terminal type set to 'x11'"但不知道如何更改它,以前的命令也不起作用.
由于AquaTerm没有从Homebrew安装,也许octave/gnupot找不到它......但不知道.有什么猜测?谢谢!
有没有办法通过使矢量重复来扩展矢量?
>v = [1 2];
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl
Run Code Online (Sandbox Code Playgroud)
然后v10将是:
>v10
1 2 1 2 1 2 1 2 1 2
Run Code Online (Sandbox Code Playgroud)
这应该适用于一般情况,而不仅仅是[1 2]
在我们的鞋带操作中,我们需要在一些更高级语言中对算法进行原型设计,然后才能在嵌入式硬件上实现C实现.
到目前为止,我们一直在使用MATLAB来做到这一点,但许可成本开始受到影响.我们正在考虑将我们的MATLAB代码移植到Octave.
有什么特别的理由不这样做吗?我们是否会破坏任何兼容性,特别是如果我们有外部合作伙伴坚持使用MATLAB?我们可以期待任何表现惩罚吗?
在Stanford的Andrew Ng在Coursera的机器学习入门讲座中的一篇幻灯片中,他给出了以下一行Octave解决方案,因为音频源由两个空间分离的麦克风录制:
[W,s,v]=svd((repmat(sum(x.*x,1),size(x,1),1).*x)*x');
Run Code Online (Sandbox Code Playgroud)
幻灯片的底部是"来源:Sam Roweis,Yair Weiss,Eero Simoncelli",而在之前幻灯片的底部则是"音频片段由Te-Won Lee提供".在视频中,吴教授说,
"所以你可能会看到这样无监督的学习,并问,'实现这个有多复杂?' 看起来为了构建这个应用程序,似乎要做这个音频处理,你会写大量的代码,或者可能链接到一堆处理音频的C++或Java库.看起来它真的是真的执行此音频的复杂程序:分离出音频等等.事实证明算法可以完成您刚刚听到的内容,只需一行代码即可完成...此处显示.确实需要研究人员很长时间想出这一行代码.所以我并不是说这是一个容易出问题的问题.但事实证明,当你使用正确的编程环境时,很多学习算法都会成为很短的程序."
在视频讲座中播放的分离音频结果并不完美,但在我看来,令人惊叹.有没有人知道这一行代码如何表现如此之好?特别是,有没有人知道有关这一行代码的Te-Won Lee,Sam Roweis,Yair Weiss和Eero Simoncelli的工作的参考资料?
UPDATE
为了演示算法对麦克风间隔距离的敏感度,以下模拟(在Octave中)将音调与两个空间分离的音调发生器分开.
% define model
f1 = 1100; % frequency of tone generator 1; unit: Hz
f2 = 2900; % frequency of tone generator 2; unit: Hz
Ts = 1/(40*max(f1,f2)); % sampling period; unit: s
dMic = 1; % distance between microphones centered about origin; unit: m
dSrc = 10; % distance between tone generators centered about origin; unit: m
c = 340.29; % speed …Run Code Online (Sandbox Code Playgroud) for i=1:N
f(i) = 'f'+i;
end
Run Code Online (Sandbox Code Playgroud)
在MatLab中给出错误.使用模式fi的N个字符串初始化数组的正确语法是什么?
似乎即使这不起作用:
for i=1:4
f(i) = 'f';
end
Run Code Online (Sandbox Code Playgroud) 有一个向量x,我必须添加一个元素(newElem).
之间有什么区别 -
x(end+1) = newElem;
Run Code Online (Sandbox Code Playgroud)
和
x = [x newElem];
Run Code Online (Sandbox Code Playgroud)
?
我想每个人都会同意MATLAB语言不漂亮或特别一致.但是不要紧!我们仍然必须用它来完成任务.
你最喜欢的技巧是什么?我们每个答案都有一个,所以如果他们同意,人们可以投票.另外,尝试用一个例子来说明你的答案.
我正在使用Windows 7 64位.每次,我都在使用绘图功能,绘图窗口会成功显示和绘制,但之后它会停止响应并且必须关闭它.
例如 :
x = linspace(0,1,10)
y = x.^2
plot(x,y);
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当情节窗口冻结并且我必须关闭八度窗口时,它们也会没有响应.如果我不使用绘图功能,这将不会发生.
我不知道为什么.是因为我使用的是64位版本吗?请告诉我如何解决这个问题.
当我尝试在GNU Octave上绘制图形并尝试使用plot时,它给出了以下输出
set terminal aqua enhanced title "Figure 1" size 560 420 font "*,6" dashlength 1
^
line 0: unknown or ambiguous terminal type; type just 'set terminal' for a list
Run Code Online (Sandbox Code Playgroud)
我使用的是Mac OS X 10.9.2.我试过用
octave:79> setenv("GNUTERM","X11")
Run Code Online (Sandbox Code Playgroud)
但我仍然得到同样的错误.