matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 01:54:45
matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法?

matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法?
matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法?

matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法?
1、预置(preallocation)是编写MATLAB程序比较重要的一个因素,在数组比较大的时候,是否进行预置程序运行时间相差几十倍甚至几百几千倍都很常见.所以使用
A=zero(1,n);
或者
A=zero(n,1);
进行预置通常很重要(如果n不大倒可以不做).
2、提高MATLAB程序效率的另一个要点是向量化(Vectorization)代替显式循环.向量化表达式主要使用点运算操作符.例如,就楼主的问题而言,可以很简单的写成
A=x.^(1:n);
省略了 for 循环,对于程序效率也会有很大提升.关于点运算更详细的介绍,可以看一下参考资料的链接中我以前回答的问题.
下面的例子简单对比了两种代码的效率:
>> tic,n=100000;x=0.9;A=[];for i=1:n,b=x^i; A=[A,b];end,toc
Elapsed time is 29.920198 seconds.
>> tic,n=100000;x=0.9;B=x.^(1:n);,toc
Elapsed time is 0.020975 seconds.
>> isequal(A,B)
ans =
1
两种做法的结果相同,但时间相差了近1500倍.二者的差别主要由预置引起,向量化表达式简化了程序代码,但对于效率提升并不是非常明显.以下把n进一步加大做了对比(否则时间太短,几乎看不出差别):
>> tic,n=1000000;x=0.9;A=zeros(1,n);for i=1:n,b=x^i; A(i)=b;end,toc
Elapsed time is 0.203902 seconds.
>> tic,n=1000000;x=0.9;B=x.^(1:n);,toc
Elapsed time is 0.120953 seconds.
可见,时间相差不到一倍,但使用点运算的向量化表达式显然更简练.
3、关于另外的疑问:
(1)如果使用楼上的循环方式,A=[];是必要的,相当于对数组进行初始化.否则后面的A=[A,b];会在原来数组A基础上进一步增加元素,既花费更多瞬间,结果也不正确.
(2)A=[A,b];这是最基本的数组拼接操作(Concatenation),没有错,但属于在循环场合不推荐的做法.

matlab 怎么样定义一个向量或者矩阵来存储 for循环得出的函数呢? 比如A(i)=x^i? 还有什么更有效的方法? matlab定义一个矩阵 怎么样用MATLAB求矩阵的线性无关向量? 如何计算一个向量的自相关矩阵?matlab有现成的命令么?或者有程序也行 如何在MATLAB里面定义一个6*6的矩阵,其中元素均为0或者1? matlab 符号向量的表示例如我要定义 一个符号向量A,而A长度为n.n 的长度已知的情况下如何定义呢 一个矩阵是个2*3 的符号矩阵怎么表示呢 MATLAB中怎样将多个行向量合并为一个矩阵 matlab 如何将字符变量以向量形式输出输出了一个变量 nm=‘A1BG’我想把‘A1BG’这个字符放入一个矩阵N中作为其中一个元素并且显示,请问这个矩阵N应该怎么样来定义?完整的语句应该怎么写 matlab编程求出一个矩阵所有由该矩阵几列列向量组成的非零子矩阵 Maple/Matlab 符号运算求助有个问题困扰好久了:请问在Matlab或者Maple中,有没有办法定义一个n维向量(或矩阵),但n不需要赋值,然后进行符号运算?例如我需要对一个函数求导:L=0.5*w(T)·V·w,其 MATLAB怎么定义特殊矩阵 matlab中的矩阵怎么定义 matlab里定义了一个A=[]的空矩阵,自动往里面存储数据时,是不是默认nx1的列向量存储的? matlab定义未知矩阵要定义一个未知元素矩阵,已知行和列怎么定义,比如一个1*3的矩阵~就是要一个空矩阵~ 证明:由一个矩阵定义的向量集合{x|Ax matlab矩阵定义问题想在matlab里边定义一个n维3乘3矩阵的矩阵,并全部初始化为0,怎么定义啊? matlab向量定义怎么在matlab中定义一个空向量再用for循环给它赋值? matlab中怎么定义一个5*6的矩阵,矩阵元素全为c?