avatar
Switch from Matlab to C(C++)?# Programming - 葵花宝典
z*u
1
大侠们能不能评价一下C(C++)跟Matlab相比,主要的优点是什么?我的兴趣主要在科学
计算。
从使用Matlab以来,也没有觉得它有太大的缺陷。因为很多科学计算的问题,最终都是
化为距阵的运算,而这点Matlab似乎并不弱,而且自从有了64位的R2007b,对于内存
的使用几乎没有限制了。我的感觉Matlab有这些缺点:
1。在做很大的循环,而且循环的每一部里面也比较复杂的情况下,Matlab似乎会很慢
。是不是这样,还是程序写的有问题?在这种情形下,我就一般用C++代替。
2。如果遇到更复杂的问题,需要用到并行计算,Matlab就没有用武之地了。这时候,
就必须要用程序语言,C或者Fortran了。
大侠们在多多补充。我一直想从Matlab过渡到C++,但是迄今为止动力还不够--主要
是没遇到足够复杂的问题吧。恳请大家帮我加强加强动力。多谢多谢!
avatar
t*t
2

vectorize your program as much as possible. matlab's (matrix) computing
engine is very fast, almost as fast as you can get; however, the interpreter
is slow. so you have to vectorize your program and let matlab to do the
loop in one go.
try distributed computing toolbox. i have no experience with that so no
comment.

【在 z****u 的大作中提到】
: 大侠们能不能评价一下C(C++)跟Matlab相比,主要的优点是什么?我的兴趣主要在科学
: 计算。
: 从使用Matlab以来,也没有觉得它有太大的缺陷。因为很多科学计算的问题,最终都是
: 化为距阵的运算,而这点Matlab似乎并不弱,而且自从有了64位的R2007b,对于内存
: 的使用几乎没有限制了。我的感觉Matlab有这些缺点:
: 1。在做很大的循环,而且循环的每一部里面也比较复杂的情况下,Matlab似乎会很慢
: 。是不是这样,还是程序写的有问题?在这种情形下,我就一般用C++代替。
: 2。如果遇到更复杂的问题,需要用到并行计算,Matlab就没有用武之地了。这时候,
: 就必须要用程序语言,C或者Fortran了。
: 大侠们在多多补充。我一直想从Matlab过渡到C++,但是迄今为止动力还不够--主要

avatar
j*g
3
MPI is a good start for distributed computation.
avatar
z*u
4
Could u give a simple example how to vectorize a loop? Thanks a lot!

interpreter

【在 t****t 的大作中提到】
:
: vectorize your program as much as possible. matlab's (matrix) computing
: engine is very fast, almost as fast as you can get; however, the interpreter
: is slow. so you have to vectorize your program and let matlab to do the
: loop in one go.
: try distributed computing toolbox. i have no experience with that so no
: comment.

avatar
z*u
5
Thanks a lot! There does exist a 'MatlabMPI' which I didn't hear of before!

【在 j****g 的大作中提到】
: MPI is a good start for distributed computation.
avatar
a*l
6
have you considered thing like mex ?

【在 z****u 的大作中提到】
: 大侠们能不能评价一下C(C++)跟Matlab相比,主要的优点是什么?我的兴趣主要在科学
: 计算。
: 从使用Matlab以来,也没有觉得它有太大的缺陷。因为很多科学计算的问题,最终都是
: 化为距阵的运算,而这点Matlab似乎并不弱,而且自从有了64位的R2007b,对于内存
: 的使用几乎没有限制了。我的感觉Matlab有这些缺点:
: 1。在做很大的循环,而且循环的每一部里面也比较复杂的情况下,Matlab似乎会很慢
: 。是不是这样,还是程序写的有问题?在这种情形下,我就一般用C++代替。
: 2。如果遇到更复杂的问题,需要用到并行计算,Matlab就没有用武之地了。这时候,
: 就必须要用程序语言,C或者Fortran了。
: 大侠们在多多补充。我一直想从Matlab过渡到C++,但是迄今为止动力还不够--主要

avatar
h*o
7
matlab is a simulation environment, not a language at all...

【在 z****u 的大作中提到】
: 大侠们能不能评价一下C(C++)跟Matlab相比,主要的优点是什么?我的兴趣主要在科学
: 计算。
: 从使用Matlab以来,也没有觉得它有太大的缺陷。因为很多科学计算的问题,最终都是
: 化为距阵的运算,而这点Matlab似乎并不弱,而且自从有了64位的R2007b,对于内存
: 的使用几乎没有限制了。我的感觉Matlab有这些缺点:
: 1。在做很大的循环,而且循环的每一部里面也比较复杂的情况下,Matlab似乎会很慢
: 。是不是这样,还是程序写的有问题?在这种情形下,我就一般用C++代替。
: 2。如果遇到更复杂的问题,需要用到并行计算,Matlab就没有用武之地了。这时候,
: 就必须要用程序语言,C或者Fortran了。
: 大侠们在多多补充。我一直想从Matlab过渡到C++,但是迄今为止动力还不够--主要

avatar
t*t
8
why would you say that? the core matlab is a complete computer language in
every sense. it even provides some simple OO functionality! on the other
hand, simulink, is a simulation environment which uses matlab (and other
components).

【在 h**o 的大作中提到】
: matlab is a simulation environment, not a language at all...
avatar
t*y
9
Matlab no help for looking for job. Turn to C+++ ASAP.
avatar
z*i
10
Matlab can be very fast if you write the code correctly. A trick I just
learnt from coworker.
If you want to change all negative numbers in matrix to 0.
My old way to do this
for i=1:length(a)
if a(i) < 0
a(i) = 0
end
end
The better way to do it
index = find(a<0);
a(index) = 0
You can always use c->mex if there is core algorithm you want to run
as fast as possible. You don't need to change to C/C++ totally.

【在 z****u 的大作中提到】
: Could u give a simple example how to vectorize a loop? Thanks a lot!
:
: interpreter

avatar
k*f
11
这个是基本技巧吧
a(a<0)=0
a(a<0)=[]就是删除所有负值

【在 z******i 的大作中提到】
: Matlab can be very fast if you write the code correctly. A trick I just
: learnt from coworker.
: If you want to change all negative numbers in matrix to 0.
: My old way to do this
: for i=1:length(a)
: if a(i) < 0
: a(i) = 0
: end
: end
: The better way to do it

avatar
s*e
12
nod

【在 k****f 的大作中提到】
: 这个是基本技巧吧
: a(a<0)=0
: a(a<0)=[]就是删除所有负值

avatar
A*e
13
you can compile m-file to .exe file, even stand-along .exe file.

科学
都是
内存
很慢
候,
主要

【在 h**o 的大作中提到】
: matlab is a simulation environment, not a language at all...
avatar
A*e
14
这个不属于技巧,属于对错问题。不这么用 matlab,严格说,就是错误使用 matlab。

【在 k****f 的大作中提到】
: 这个是基本技巧吧
: a(a<0)=0
: a(a<0)=[]就是删除所有负值

avatar
i*l
15
这个有必要么,matlab作为商业软件,的确有它的过人之处,就跟MS差不多,很好用,
很容易上手,基本的函数都有了,直接调用就可以了。
但是c++还不是那么规范,好比Linux, 在没有必要的情况下,没有必要强迫自己从MS转化
到LINUX吧,除非楼主主观意愿很强,非要学这个不可,那就学把
没有必要非要别人来调动你的积极性阿

【在 z****u 的大作中提到】
: 大侠们能不能评价一下C(C++)跟Matlab相比,主要的优点是什么?我的兴趣主要在科学
: 计算。
: 从使用Matlab以来,也没有觉得它有太大的缺陷。因为很多科学计算的问题,最终都是
: 化为距阵的运算,而这点Matlab似乎并不弱,而且自从有了64位的R2007b,对于内存
: 的使用几乎没有限制了。我的感觉Matlab有这些缺点:
: 1。在做很大的循环,而且循环的每一部里面也比较复杂的情况下,Matlab似乎会很慢
: 。是不是这样,还是程序写的有问题?在这种情形下,我就一般用C++代替。
: 2。如果遇到更复杂的问题,需要用到并行计算,Matlab就没有用武之地了。这时候,
: 就必须要用程序语言,C或者Fortran了。
: 大侠们在多多补充。我一直想从Matlab过渡到C++,但是迄今为止动力还不够--主要

avatar
t*t
16
没必要强迫转换当然是对的,不过有两点你搞错了
C++从98年标准出台以后,已经很规范了,就连最土的VC++都已经比较规范了。
MS的确很好用,但说到规范,linux比MS遵守规范得多

转化

【在 i*****l 的大作中提到】
: 这个有必要么,matlab作为商业软件,的确有它的过人之处,就跟MS差不多,很好用,
: 很容易上手,基本的函数都有了,直接调用就可以了。
: 但是c++还不是那么规范,好比Linux, 在没有必要的情况下,没有必要强迫自己从MS转化
: 到LINUX吧,除非楼主主观意愿很强,非要学这个不可,那就学把
: 没有必要非要别人来调动你的积极性阿

avatar
i*l
17
嗯,那我把规范换成成熟好了

【在 t****t 的大作中提到】
: 没必要强迫转换当然是对的,不过有两点你搞错了
: C++从98年标准出台以后,已经很规范了,就连最土的VC++都已经比较规范了。
: MS的确很好用,但说到规范,linux比MS遵守规范得多
:
: 转化

avatar
t*t
18
C++从98年标准出台以后,已经很成熟了,就连最土的VC++都已经比较成熟了。

【在 i*****l 的大作中提到】
: 嗯,那我把规范换成成熟好了
avatar
i*l
19
哦,那为什么我写一个QR分解还要到处找代码?而matlab只需要一行就搞定了?
还有最基本的稀疏矩阵的乘法,c++下面就可找到好几种不同的写法。这个时候怎么决
定那个最好?
为了不同的目的,需要不同的数据结构,往往搜索需要的程序或者库函数就需要好久,
当然
如果你啥都自己写,那我就没话说了。

【在 t****t 的大作中提到】
: C++从98年标准出台以后,已经很成熟了,就连最土的VC++都已经比较成熟了。
avatar
t*t
20
成熟和方便好象是两个概念吧。

【在 i*****l 的大作中提到】
: 哦,那为什么我写一个QR分解还要到处找代码?而matlab只需要一行就搞定了?
: 还有最基本的稀疏矩阵的乘法,c++下面就可找到好几种不同的写法。这个时候怎么决
: 定那个最好?
: 为了不同的目的,需要不同的数据结构,往往搜索需要的程序或者库函数就需要好久,
: 当然
: 如果你啥都自己写,那我就没话说了。

avatar
r*t
21
为什么总有人这么搞?

【在 z******i 的大作中提到】
: Matlab can be very fast if you write the code correctly. A trick I just
: learnt from coworker.
: If you want to change all negative numbers in matrix to 0.
: My old way to do this
: for i=1:length(a)
: if a(i) < 0
: a(i) = 0
: end
: end
: The better way to do it

avatar
z*e
22
matlab那一行的实现是谁去做的?什么做的?

【在 i*****l 的大作中提到】
: 哦,那为什么我写一个QR分解还要到处找代码?而matlab只需要一行就搞定了?
: 还有最基本的稀疏矩阵的乘法,c++下面就可找到好几种不同的写法。这个时候怎么决
: 定那个最好?
: 为了不同的目的,需要不同的数据结构,往往搜索需要的程序或者库函数就需要好久,
: 当然
: 如果你啥都自己写,那我就没话说了。

avatar
t*t
23
多半是FORTRAN了……

【在 z***e 的大作中提到】
: matlab那一行的实现是谁去做的?什么做的?
avatar
d*q
24
标准库又不包括这种数值计算用的库
用lapack倒是不错
avatar
c*z
25
好像底层还是调样lapack

【在 z***e 的大作中提到】
: matlab那一行的实现是谁去做的?什么做的?
avatar
c*z
26
侧重点不同把,vc下面数据库,多媒体都做的很强,很好使的阿
它好像不太重视科学计算和可视化这块,可能因为挣不到钱把

【在 i*****l 的大作中提到】
: 哦,那为什么我写一个QR分解还要到处找代码?而matlab只需要一行就搞定了?
: 还有最基本的稀疏矩阵的乘法,c++下面就可找到好几种不同的写法。这个时候怎么决
: 定那个最好?
: 为了不同的目的,需要不同的数据结构,往往搜索需要的程序或者库函数就需要好久,
: 当然
: 如果你啥都自己写,那我就没话说了。

avatar
A*e
27
matlab 用惯了,真觉得用 C++ 是种折磨啊。matlab 相比之下,虽然有 pascal 的
憨态可掬,但是还是比 c/c++ 要 elegent 多了。
C# 也是这个优点:elegent。

么决
久,

【在 c*****z 的大作中提到】
: 侧重点不同把,vc下面数据库,多媒体都做的很强,很好使的阿
: 它好像不太重视科学计算和可视化这块,可能因为挣不到钱把

avatar
t*t
28
看你怎么定义elegant了. 做点矩阵运算, 当然elegant. 做个叠代, 奇慢无比.
我用了6年matlab, 觉得matlab用起来真是折磨啊. matlab我好歹也算是专家了, 里面
的汇编我也拆开来大致看过的.
C#没用过.
我倒是觉得perl写起来elegant呢. 虽然很多人抱怨perl写的程序让人看不懂, 其实我
觉得那是写程序的人故意的. 我用matlab或者C++一样可以把程序写得让人看不懂.

【在 A**********e 的大作中提到】
: matlab 用惯了,真觉得用 C++ 是种折磨啊。matlab 相比之下,虽然有 pascal 的
: 憨态可掬,但是还是比 c/c++ 要 elegent 多了。
: C# 也是这个优点:elegent。
:
: 么决
: 久,

avatar
r*y
29
matlab is good
but matlab really sucks in drawing
the speed is too damn slow

【在 A**********e 的大作中提到】
: matlab 用惯了,真觉得用 C++ 是种折磨啊。matlab 相比之下,虽然有 pascal 的
: 憨态可掬,但是还是比 c/c++ 要 elegent 多了。
: C# 也是这个优点:elegent。
:
: 么决
: 久,

avatar
A*e
30
对。我用 matlab 在三维空间里求三维向量间的组合距离并统计的那几行,我自己
写了一堆注释,还经常冷不丁看不懂。那个复杂无比又特简洁的向量化,呵呵。

【在 t****t 的大作中提到】
: 看你怎么定义elegant了. 做点矩阵运算, 当然elegant. 做个叠代, 奇慢无比.
: 我用了6年matlab, 觉得matlab用起来真是折磨啊. matlab我好歹也算是专家了, 里面
: 的汇编我也拆开来大致看过的.
: C#没用过.
: 我倒是觉得perl写起来elegant呢. 虽然很多人抱怨perl写的程序让人看不懂, 其实我
: 觉得那是写程序的人故意的. 我用matlab或者C++一样可以把程序写得让人看不懂.

avatar
A*e
31
我用 matlab 画过外围线,优化过之后还是慢得惊人。凡是牵扯到 strel 的都贼慢。

【在 r*******y 的大作中提到】
: matlab is good
: but matlab really sucks in drawing
: the speed is too damn slow

avatar
g*g
32
这东西要看average joe写出来的程序是否看得懂了。
matlab的还行,perl的我真是看不懂。还是java最好,哈哈。

【在 t****t 的大作中提到】
: 看你怎么定义elegant了. 做点矩阵运算, 当然elegant. 做个叠代, 奇慢无比.
: 我用了6年matlab, 觉得matlab用起来真是折磨啊. matlab我好歹也算是专家了, 里面
: 的汇编我也拆开来大致看过的.
: C#没用过.
: 我倒是觉得perl写起来elegant呢. 虽然很多人抱怨perl写的程序让人看不懂, 其实我
: 觉得那是写程序的人故意的. 我用matlab或者C++一样可以把程序写得让人看不懂.

avatar
L*r
33
我觉得Perl里面有的人为了表现自己的水平,往往把一般人写个十行八行的写成一句就
搞定,一般水平不够的自然看不明白,看得明白的,自己也不会那么去写,因为维护起
来有时候真的很吃力。


【在 t****t 的大作中提到】
: 看你怎么定义elegant了. 做点矩阵运算, 当然elegant. 做个叠代, 奇慢无比.
: 我用了6年matlab, 觉得matlab用起来真是折磨啊. matlab我好歹也算是专家了, 里面
: 的汇编我也拆开来大致看过的.
: C#没用过.
: 我倒是觉得perl写起来elegant呢. 虽然很多人抱怨perl写的程序让人看不懂, 其实我
: 觉得那是写程序的人故意的. 我用matlab或者C++一样可以把程序写得让人看不懂.

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。