idl的matlab 矩阵相乘乘计算结果和matlab结果不一致

我来给普及一下matlab、IDL、fortran神马的区别吧(转,非常有用)
看到有人纠结这些东西,我来说说我的经验吧。不保证客观,个人观点而已,欢迎批判。
1.我要讨论的是matlab、IDL、fortran、C这4件事。因为他们能够共同地干一件事:计算。
2.实际上把他们四个放在一起说很诡异的,因为这完全不是一码事,就有点像拿word和pdf作比较一样不明真相。但是大家都这么说,那我也勉强比比看。
3.前两者可以归为一个子类,matlab和idl都是一种交互式、可视化语言系统;后两者算一类,是一种算法语言,有人说算高级语言,fortran我同意,C在广义上说可以直接对内存和堆栈进行操作,可能不如fortran级别高,但是针对科学计算的话,也可以勉强算高级语言。(补充提示:编程语言中说的高级语言、中级语言、低级语言、机器语言的四个级别是针对人的理解里,越接近人的语言习惯的就是高级语言,越难以阅读但是机器方便也读的就是低级语言。不是说高级语言比低级语言更好。)
4.先说画图:
matlab和IDL本身可以画图,这一点是fortran和C不具备的。虽然fortran和C也有图形库可以调用,但基本上很难用,这么说吧,就好比猫狗也有哺乳的功能,但是指望喝它们那点奶实在是。。。
所以fortran和C仅仅可以编程序做运算,生成文件之后,再交给第三方软件去画图。执行画图任务的可以是origin、gnuplot、pgplot,甚至是matlab和IDL。
就matlab和IDL本身来说,图像也有些区别。它们都有自己的一套图形编码系统,都可以生成eps文件方便插入到latex论文中去,但是它们的eps文件编码方式很不一样。以我的经验,同等分辨率的情况下,IDL的图要小一些、轻巧很多。matlab的图有点笨重。(不过说到轻巧,gnuplot笑了。gnuplot画的eps图竟然可以用记事本直接打开,在里面修改文字,保存,关闭,再看,图上的标度就变了。)matlab的图有一个很严重的缺点,就是边距设置有毛病,或者说与pdf本身的标准不一致。这就导致在linux下生成的latex文档图像有位移。不过也很容易纠正,增加位置参数就行了。其实这倒是一个培养使用完善参数习惯的好办法。IDL没有这个问题,出来的图很好,直接用就行,参数先天地与latex和pdf标准是一致的。
在色彩方面,这里不多说了,详见我过去的博文&
他们的颜色定义不同,但是很容易相互调用,这很正常,就看你的需要了。我用了这么多年,觉得matlab和IDL的画图功能不分彼此,都很强大,各自有自己的特色,不能笼统说谁更强。
5.说说程序语言设计
其实fortran和C相比,效率可能相当。针对超大规模的数值积分做测试的话会发现,C要更快一点。但是fortran的语言更好懂一点,这就弥补了速度的不足。因为买个大内存现在很便宜,想读懂程序却不容易。但说fortran,做数值积分的确非常非常好用。所以在宇宙学、恒星物理上用的很多,这就是为什么毕老师和张同杰都在用的原因。但是你指望一个处理恒星光谱的人用fortran就有点不给力了,这个后面再说。说到数值积分,其实说白了就是一个累加,反反复复地做加法,做到头大为止。这就需要用到循环甚至迭代,甚至递归。大循环的运算是这兄弟俩的长相。用matlab和IDL做循环,你会感觉想死,他们根本就不是干这个用的。不过也有个小小的好处,如果你想看到每一步循环的过程的话,那就用matlab和IDL吧,保证你看得很清楚。但要是用fortran和C,屏幕显示一闪而过,啥也没有了。
程序=算法+数据结构
算法没啥好说的,无论你用什么,算法是通用的,靠自己提高吧。数据结构就是他们直接最大的区别了。matlab和IDL的精神都是矩阵,一切都是矩阵,一个常数也是1*1的矩阵,一个向量是1*n的矩阵,一切的一切都是矩阵。所以用matlab做计算的时候,需要思维上把需要循环的程序改成矩阵运算,这就是matlab的长项了。IDL也是这样,矩阵操作比matlab逊色,但也是基于矩阵的。我的经验觉得IDL的矩阵操作更适合对大量数据文件的读取。
fortran虽然也可以定义向量和矩阵,但是你知道,这很恐怖的,比如向量的大小在计算过程中不能改变,这就很伤心(这也是造成运算速度快的原因之一)。而matlab可以进行类似这样的
A=[A; A] 这就方便多了。
6.基本用途
终于说到关键的了。我接触的大量做天文的人,都绝对不仅仅只会用一种东西,因为太不够了。但是不同的工具真的有它的独到之处和用途。比如做观测的话,原始观测数据的处理raw
data要用IDL很方便。IDL提供一个astro包,专门针对fits文件也有很好的函数,效率也不低。无论是CCD拍一批测光,还是光谱抽取,用IDL再方便不过了(如果你不想折腾天煞的IRAF的话)。举个例子吧,08年春天张超同学需要把针对同一个天区的上百张测光底片做处理,然后找到某颗星的星等变化曲线。问题在于这些底片都并不是完全重合的,他们的位置都有偏差。所以首先需要让这些底片上的同样的星重合在一起再说。这件事我倒是想问问,用fortran和C咋玩?恐怕只能摊手了。IDL就有很好的办法。
所以我们普遍认为,处理最原始的观测数据,IDL推荐!
得到处理之后的结果了,下一步就是研究这些数据的内在联系,看看曲线图啊,看看相关性分析啊,做做统计啊,拟合拟合模型啊,这些事也很重要,这些工作,matlab推荐!
那么如果你要做的是理论本身。你需要从无到有构建一个框架,肯定要用到一些经验公式的积分、迭代神马的,这就需要fortran或者C语言了。比如我用的银河系模型的生成就是C写的。而星表是fortran写的。但我用观测数据和模型作比较做拟合的时候,就只有靠IDL和matlab了。
任何一种东西都很有用途,只不过用途和特点不一样。都忽视不得。学天文的话,想做好,多会一些是很有必要的。另外要注意,linux将来很有用,所以上面那些东西在linux下的表现也要引起注意。
最后补充一个matlab的优点:程序最后不用写end。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。苹果/安卓/wp
积分 4, 距离下一级还需 6 积分
权限: 设置帖子权限
道具: 彩虹炫, 雷达卡, 热点灯, 雷鸣之声, 涂鸦板下一级可获得
道具: 金钱卡
购买后可立即获得
权限: 隐身
道具: 金钱卡, 雷鸣之声, 彩虹炫, 雷达卡, 涂鸦板, 热点灯
最近在进行一个加权最小二乘法计算时候发现的:
+对于同样的输入,Matlab使用lscov语句
+R语言使用lm语句
+C#使用Alglib计算包
+都是很基本的加权最小二乘法
当数据量较小时,计算得到的结果是一致;但当数据量较大(矩阵左右),三个方法得到的结果就有出入了,而且差别不小。我猜是不是算法在进行SVD的时候采用了不同的方法、或是在对不满秩的情况处理有不同(比如R语言有时候干脆就对某一列输出个NA)?板上有哪位大神了解?
那么请问在这种情况下究竟怎么选择方法?程序最后还是要落脚在C#上的。
载入中......
同样问题,我在用matlab和R线性约束极小话时,也遇到了结果不一致的问题,结果是matlab结果要好一点
论坛好贴推荐
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
京ICP证090565号
京公网安备号
论坛法律顾问:王进律师君,已阅读到文档的结尾了呢~~
IDL与MATLAB的比较分析IDL与
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
IDL与MATLAB的比较分析
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口工具类服务
编辑部专用服务
作者专用服务
基于MATLAB的给水管网可视化模型和仿真计算
探讨并建立了具有用户图形界面(GUI)的任意形状给水管网的可视化微观计算模型.在Matlab平台下,使管网建模、经济管径确定、平差计算、数据存取和结果分析达到一体化.由于引入Matlab可视化计算思想及其工具箱,使管网的计算和程序的编制过程得到简化,提高了工作效率.
YU Guo-ping
HU Shao-hua
作者单位:
同济大学,环境科学与工程学院,上海,200092
武汉大学,土木建筑工程学院,湖北,武汉,430072
年,卷(期):
机标分类号:
在线出版日期:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社matlab中长度可变的数组保存起来我想每次计算的结果一个一个的存入矩阵中,不过这组数的长度是变化的,就是每次加入一行新计算出的数组,但是每次加的数组的长度不一定相同,
可以考虑用元胞数组,示例如下:a=[1 2 3];>> b=[13 5];>> c=[1 2 3 4 5 6];>> base=cell(1,5);>> base{1}=a;>> base{2}=b;>> base{3}=c;>> celldisp(base) base{1} =
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 matlab 矩阵元素相乘 的文章

 

随机推荐