matlab范德蒙,matlab有效生成范德蒙多矩阵

《matlab有效生成范德蒙多矩阵》由会员分享,可在线阅读,更多相关《matlab有效生成范德蒙多矩阵(7页珍藏版)》请在人人文库网上搜索。

1、有很多线性代数问题都需要生成范德蒙多矩阵,对于一个向量x,它的范德蒙多矩阵具有如下的形式:V=x1m x1(m-1)x1,1;x2m,x2(m-1),1;.;xnm,xn(m-1)1如上所示,V的各列对x的元素逐个进行了乘方.下面我们将讨论生成此种矩阵的多种方法.首先想到的第一种方法就是直接使用For 循环,具体情况如下面给出的脚本M文件所示.%vander1.m%construct a Vandermonde matrix x=(1:6); %conlumn vector for input data m=5; %highest power to compute V=;for I=1:m+1。

2、 %build V conlumn by column V=V x.(m+1-i);end在上面给出的方法中,矩阵V是逐列构建起来的,在最开始矩阵是一个空矩阵.这种方法存在许多缺点,最明显的缺点就是在每次进入循环的时候都要对V重新分配内存.因为向量化的第一步应该是预先为V分配内存,如下面给出的M文件所示.%vander2.m%construct a Vandermonde matrix.x=(1:6); %conlumn vector for input data m=5; %highest power to compute n=length(x); %number of elements i。

3、n xV=ones(n,m+1); %preallocate memory for result for i=1:m %build V column by columnV(:,i)=x.(m+1-i);end在这里V被作为一个全1的矩阵进行初始化.然后在For 循环中对的各个列进行赋值.在For 循环中,最后一列未被赋值.这是因为最后一列的元素已经都是1了,没有必要在进行x.0的计算.上面给出的代码可以在Matlab中的vander函数里找到.但是上面的代码依旧存在着两个问题.首先,v的各列是直接进行计算的,在计算过程中没有能够利用对前一列进行计算的结果.其次,应该尽量避免使用For 循环.下。

4、面给出的脚本M文件解决了第一个问题.%vander3.m%construct a Vandermonde matrix.x=(1:6); %conlumn vector for input data m=5; %highest power to compute n=length(x); %number of elements in xV=ones(n,m+1); %preallocate memory for result for i=m:-1:1 %build V column by column V(:,i)=x.*V(:,i+1);end现在是从矩阵V的第二列元素开始逆向计算V的各个列,。

5、直到第一列为止.之所以可以这样做是因为V的第i列等于第i+1列按元素乘以x.这种方法可以在Matlab 的polyfit 函数中找到.此时如果不消除For循环,则无法进一步对算法进行优化.要消除For循环需要一些灵活性,并要对Matlab中的函数非常熟悉.通过使用本章前面曾经提到过的数组操作表格,函数repmat 和cumprod 可以提供一些有用的功能.下面给出的脚本M文件展示了repmat 函数的用法.%vander4.m%construct a Vandermonde matrix.x=(1:6); %conlumn vector for input data m=5; %highest。

6、 power to compute n=length(x); %number of elements in xp=m:-1:0; %column powersV=repmat (x,1,m+1).repmat (p,n,1);在这种方法中两次使用了repmat ,一次用于复制x以创建一个每一列都包含x的m+1列的矩阵;另一次用于创建一个含有应用到包含x的矩阵中的每个元素乘方的矩阵.给定这样的两个矩阵,则可以按逐个元素乘幂的方法生成所希望的结果.和vander2.m一样,此方法直接计算每一列,而没有使用其他列的信息.cumprod函数可以解决这个问题,如下面给出的脚本M文件所示.%vander5。

7、.m%construct a Vandermonde matrix.x=(1:6); %conlumn vector for input data m=5; %highest power to compute n=length(x); %number of elements in xV=ones(n,m+1);V(;,2:end)=cumprod(repmat(x,1,m),2);V=V(:,m+1:-1:1);在这里,在使用了repmat 复制了x 后,使用了cumprod函数来计算V的列.因为cumprod 是从左向右执行的,所以最后的结果需要将V的各列反向.这种方法只使用了一个M文件函数。

8、-repmat.可以通过数组寻址来避免使用此函数,这会加速程序的运行速度.使用数组寻址的方法如下面给出的脚本M文件所示.%vander6.m%construct a Vandermonde matrix.x=(1:6); %conlumn vector for input data m=5; %highest power to compute n=length(x); %number of elements in xV=ones(n,m+1);V(;,2:end)=cumprod(x(:,ones(1,m),2);V=V(;,m+1:-1:1);上面一共给出了6种方法.下面我们使用tic和to。

9、c函数来测试一下他们的速度.首先先要删除上面6种方法中的前两行:x(1:6);和m=5;.然后就可以使用下面的脚本M文件测试他们的执行速度了.%testvander.m%script file to test vandermonde implementationsx=randan(10000,1); %column vector for input datam=100; %highest power to computetimes=zeros(1,5);ticvander1times(1)=toc;ticvander2times(2)=toc;ticvander3times(3)=toc;ti。

10、cvander4times(4)=toc;ticvander5times(5)=toc;relspeed=times/min(times) %relative speed results在笔者的计算机上运行上面的脚本文件会生成如下的结果.relspeed=24.194 1.632 1 7.2114 2.057 2.0563大家一定认为最后一种方法将是最快的,这是因为它使用了最为向量化的解决方法.但出乎我们的意料,vander3.m是最快的方法,即使它使用了一个For循环也是如此!这些结果很重要,因为他们指出了这样一个事实-消除所有的For 循环不一定会生成执行速度最快的代码.有时预先分配内存并。

11、小心使用For 循环,从而最大限度的减少内存的使用机会反而会生成最优的代码.在消除For 循环的过程中,后三种方法都使用了更多的内存.前两种最快的方法是vander2.m 和vander3.m,他们都使用了预先分配内存和For循环.vander5.m和vander6.m之间的区别仅仅是使用x(;,ones(1,m)代替了repmat(x,1,m),从他们的测试结果中可以看出,调用repmat不会对执行速度产生很大的影响.testvander.m中的x和m的值可以选择,可以选择适当的参数让方法的运行时间长一些,这样才可以得到足够可靠的时间测试结果.因此,我们选择了非常大的数组来测试这些方法.同样。

12、,也可以使用较小的数组来进行测试,这就需要运行多次才能得到可靠的测试结果.下面给出的方法就使用了For循环来多次运行各种方法.%testvander2.m%scipt file to test vandermonde implementations x=randan(100,1); %column vector for input datam=10; %highest power to computeN=1:500;times=zeros(1,6);ticfor i=N,vander1,endtimes(1)=toc;ticfor i=N,vander2,endtimes(2)=toc;tic。

13、for i=N,vander3,endtimes(3)=toc;ticfor i=N,vander4,endtimes(4)=toc;ticfor i=N,vander5,endtimes(5)=toc;ticfor i=N,vander6,endtimes(6)=toc;relspeed=times/min(times) %relative speed results现在范德蒙多矩阵共有100行,11列,比testvander.m中10000乘以101的矩阵要小很多.在笔者的计算机上运行此脚本文件会生成下面的结果.relspeed=2.5123 1.209 1.1444 3.8932 1.5。

14、075 1我们可以发现结果有了变化.在计算较小的数组的时候,向量化的解决方法vander6.m成为了执行速度最快的方法.另外,使用M文件repmat的vander5.m的执行速度要比vander6.m慢50%左右.最优使用For循环的vander3.m仍旧很有竞争力,它只比最快的vander6.m慢了14%.即使是程序结构最差的vander1.m也只比最快的vander6.m慢了2.5倍.而在使用了大型数组的testvander.m中,最快与最慢的方法在执行速度之间的差距可以达到24倍之多.那么上面给出的6种方法中,到底哪一种方法才是最佳的呢?对于非常大型的数组而言,vander3.m是最快的,而对于一般的数组而言,vaner6.m则是最快的.在Matlab的polyfit函数中使用了vander3.m.如果向量化对内存的要求没有对计算机平台的内存管理能力带来更大需求,那么完全向量化将是最优的解决方法.而另一方面,如果问题的尺寸非常巨大,那么为变量预先分配内存并小心地使用For 循环以减少对内存的需求将是最好的办法.随着范德蒙多矩阵的维数的增长,它的计算将变得越来越复杂,但范德蒙多矩阵通常都用于矩阵尺寸相对较小的应用中.综上所述,在通常情况下,vander6.m是最佳的算法.(注:可编辑下载,若有不当之处,请指正,谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305132.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员快来看!经典代码替你省去多少时间?

作为一名程序员,每天坐在电脑前敲敲打打那些重复重复再重复的语句,习惯性的思维总是被套进去,有些时候很容易把简单的事情想复杂了!不过,我们反其道而行之,新手们只要是把下面的语句牢记,很多情…

python如何使用geotools_基于GeoTools实现道路结点的提取

最近公司的地图业务数据换了供应商,由于在进行路径规划的时候需 要使用到道路结点进行图的构建,因而需要根据道路图层提取出道路的节点。因为经常使用arcpy,所以先用python写了个版本,通常将数据放在地理数据库中会有更高的运行效…

VMware:为中国中小企业建立“外部云计算”

在11月4日举行的VMware 2008用户大会上,记者了解到,VMware正在致力为中小企业提供“外部云计算”平台。据VMware公司大中华区技术总监张振伦介绍,目前云计算是最受用户关注的理念之一,这样的计算到底怎么实现,怎么落地…

php中sql删除,学习猿地-php sql删除语句是什么

php sql删除语句是“DELETE FROM”,该语句用于从数据库表中删除行,其语法是“DELETE FROM table_name WHERE column_name some_value”。PHP MySQL Delete FromDELETE FROM 语句用于从数据库表中删除行。删除数据库中的数据DELETE FROM 语句用于从数据库…

一张图看懂新一代人工智能知识体系

关于人工智能的前世今生、内涵意义,下图可以说是相当清楚全面了。人工智能是未来一大热点,连腾讯、阿里、百度这些科技公司都各自成立了人工智能实验室,如果你也看好这一趋势,不妨把这张图收藏起来慢慢看。 来源:智能…

IA-32系统编程指南 - 第三章 保护模式的内存管理【2】

第三章 保护模式的内存管理【2】【作者:lion3875 原创文章 参考文献《Intel 64 and IA-32 system programming guide》】 3.6分页概述在IA-32架构的保护模式中,处理器要么将线性地址空间直接映射至物理内存空间(当拥有4GB物理内存时&#xff…

android java 面试题,Android java 高级面试题库

(一) java基础面试知识点1,java中和equals和hashCode的区别?1、“”是运算符,用来比较两个值、两个对象的内存地址是否相等。2、“equals()”:equals是Object类的方法,默认情况下比较两个对象是否是同一个对象&#xf…

促进新一代人工智能产业发展三年行动计划_工信部新一代人工智能产业创新重点揭榜任务——中国联通智能化网络基础设施及开放平台启动会成功召开...

4月2日,工信部新一代人工智能产业创新重点揭榜任务(下称“人工智能重点揭榜任务”)——中国联通智能化网络基础设施及开放平台在线启动会成功召开。来自中国联通网络技术研究院、联通集团智能网络中心网络AI中心、中国联通智能城市研究院、广东联通、中讯邮电咨询设…

数学家破解婚恋网站配对程序,90天找到灵魂伴侣

找个合适或者善良的另一半比什么都强,谁说搞技术的情商低?他们可以靠高超的技能来弥补,照样能找到优秀的灵魂伴侣! 凌晨三点,在加州大学洛杉矶分校(UCLA)数学系大楼五楼的一个拥挤小隔间里&…

Appointment over SMS on Windows Mobile

设想这样一个场景,早上出门的时候,手机里一个Appointment提醒弹了出来,恰好昨天还没有来得及通知参与该会议的几个重要成员,而这时候身边又没有可以接入的Wi-Fi。这时,给成员们发送一条短信提醒一下,也算是…

oracle grid需要安装,Oracle 11g Grid for Linux安装指南

Oracle 11g Grid for Linux安装指南1、创建oracle用户及用户组groupadd oinstallgroupadd dbauseradd -g oinstall -G dba -m oracle设置oracle用户的口令:passwd oracle我这里设置为oracle2、创建相关目录mkdir -p /u01chown -R oracle.oinstall /u013、修改oracle用户环境变量…

uc3842开关电源电路图_UC3842 的原理及应用详解 (上)

▲ 点击上方 21Dianyuan 关注我们本文是 21Dianyuan 社区 原创 技术文章,作者伟林电源,感谢作者的辛苦付出。 UC3842内部工作原理图1 示出了 UC3842 内部框图和引脚图。图1 UC3842 内部原理框图UC3842 采用固定工作频率脉冲宽度可控调制方式,…

谁的代码注释我都不服,就服你的!

什么是代码注释,如何在代码中添加注释,相信每一位了解编程的人并不陌生。注释里往往有很多有趣的脑洞和「真心话」。今天我们一起去看看那些6到飞起,被玩坏了的幽默注释吧。 信息量太大的注释系列—— 01 你造么?我是菜鸟&#xf…

为自己打气

最近觉得自己有点气馁。 为自己打气用的,Just go ahead! 有很多东西需要三思而后行,真的一定需要三思,三思!!!!!! 转载于:https://www.cnblogs.com/Carrie_Liang/archive…

墨迹天气语音包_小米有品“智能AI翻译机”评测,还内置了语音助手,随身WiFi功能...

出国旅游时,我们需要面对的最大问题应该就是言语沟通了,毕竟想要掌握一门新的语言不是什么容易的事情。近期,小米科技旗下的小米有品平台上线了一款新品:Langogo智能AI翻译机,对于想出国游玩或工作的朋友们而言&#x…

如何解读决策树和随机森林的内部工作机制?

随机森林在过去几年里得到了蓬勃的发展。它是一种非线性的基于树的模型,往往可以得到准确的结果。但是,随机森林的工作过程大都处于黑箱状态,往往难以解读和完全理解。近日,Pivotal Engineering Journal 网站发表了一篇文章&#…

sql datetime 排序_超全的数据库建表/SQL/索引规范,建议贴在工位上!

作者:浮雷来源:juejin.im/post/6871969929365553165「背景」因为工作岗位的原因,负责制定了关于后端组数据库的规约规范,作为所有产品线的规范,历经几版的修改,最终形成下边的文本。规范在整个后端执行也有…

大一的时候我上铺一哥们天天说梦话,一夜,他羞涩的说:“我怀孕了。”我们全体晕倒。...

大一的时候我上铺一哥们天天说梦话,一夜,他羞涩的说:“我怀孕了。”我们全体晕倒。转载于:https://blog.51cto.com/275007/115108

Oracle选择填空题中英文,oracle中英文分开排序

中英文分开排序http://hi.baidu.com/flowerhacker/blog/item/dfb0961e383662154034174f.html我同事问了个问题:是将中文和英文分开排序。是先排中文,再排英文的,都按照拼音abc那样排的;字段都是英文打头算作英文,中文打…

有了它,从此成为自带BGM的主角~

有了它 自带BGM不是事儿 这还是一篇卖货的文章 welcome 炎热的夏天,一场雷阵雨也浇灭不了的躁动,何不来点音乐啤酒,点燃内心的蠢蠢欲动, 放肆的音乐节奏,张扬的夏日心情。 然而单独用手机音乐播放器听,单薄…