matlab有效生成范德蒙多矩阵.doc

matlab有效生成范德蒙多矩阵.doc

ID:55928803

大小:21.00 KB

页数:5页

时间:2020-06-15

matlab有效生成范德蒙多矩阵.doc_第1页
matlab有效生成范德蒙多矩阵.doc_第2页
matlab有效生成范德蒙多矩阵.doc_第3页
matlab有效生成范德蒙多矩阵.doc_第4页
matlab有效生成范德蒙多矩阵.doc_第5页
资源描述:

《matlab有效生成范德蒙多矩阵.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、有很多线性代数问题都需要生成范德蒙多矩阵,对于一个向量x,它的范德蒙多矩阵具有如下的形式:V=[x1^mx1^(m-1)…x1,1;x2^m,x2^(m-1),…1;….;xn^m,xn^(m-1)…1]如上所示,V的各列对x的元素逐个进行了乘方.下面我们将讨论生成此种矩阵的多种方法.首先想到的第一种方法就是直接使用For循环,具体情况如下面给出的脚本M文件所示.%vander1.m%constructaVandermondematrixx=(1:6)';%conlumnvectorforinputdatam=5;%highestpowertocomputeV=[];forI=1

2、:m+1%buildVconlumnbycolumnV=[Vx..^(m+1-i)];end在上面给出的方法中,矩阵V是逐列构建起来的,在最开始矩阵v是一个空矩阵.这种方法存在许多缺点,最明显的缺点就是在每次进入循环的时候都要对V重新分配内存.因为向量化的第一步应该是预先为V分配内存,如下面给出的M文件所示.%vander2.m%constructaVandermondematrix.x=(1:6)';%conlumnvectorforinputdatam=5;%highestpowertocomputen=length(x);%numberofelementsinxV=ones

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

4、一个问题.%vander3.m%constructaVandermondematrix.x=(1:6)';%conlumnvectorforinputdatam=5;%highestpowertocomputen=length(x);%numberofelementsinxV=ones(n,m+1);%preallocatememoryforresultfori=m:-1:1%buildVcolumnbycolumnV(:,i)=x.*V(:,i+1);end现在是从矩阵V的第二列元素开始逆向计算V的各个列,直到第一列为止.之所以可以这样做是因为V的第i列等于第i+1列按元素乘以

5、x.这种方法可以在Matlab的polyfit函数中找到.此时如果不消除For循环,则无法进一步对算法进行优化.要消除For循环需要一些灵活性,并要对Matlab中的函数非常熟悉.通过使用本章前面曾经提到过的数组操作表格,函数repmat和cumprod可以提供一些有用的功能.下面给出的脚本M文件展示了repmat函数的用法.%vander4.m%constructaVandermondematrix.x=(1:6)';%conlumnvectorforinputdatam=5;%highestpowertocomputen=length(x);%numberofelements

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

7、ectorforinputdatam=5;%highestpowertocomputen=length(x);%numberofelementsinxV=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文件函数----repmat.可

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。