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

供稿:hz-xin.com     日期:2025-01-14
matlab中双重for循环得到一组数据,如何存储到一个向量中

例子:
for i=1:100 %for循环,循环100次 x(i)=randn(); %获得一个随机数存入x数组end %结束循环

matlab最擅长矩阵运算,你应该用矩阵的公式去表示你要实现的结果,而不是循环逐个数字去拼接。理解我的意思不。你走入误区了。。。行18×24是几个意思

你要每次循环都输出的话,直接value就行了,或者去掉分号
for h=1:m
a1=a(h,:);
for h2=1:i
b1=b(h2,:);
c(i,:)=[a1,b1];
value
end
value=[value,c]
end

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),没有错,但属于在循环场合不推荐的做法。

希望对楼主有帮助。

A=[];
for i=1:n
b=x^i;
A=[A,b];
end
都存到A里了。

新人求助matlab安装包做毕设要用
ATLAB 工具和附加产品提供了一系列开发和部署应用程序的选项。您既可以与其他 MATLAB 用户共享各个算法和应用程序,也可以向其他没有 MATLAB 的用户实施免特许费的部署。1、设计图形用户界面 使用 GUIDE(图形用户界面开发环境),可以布置、设计和编辑自定义图形用户界面。既可以 含带常用控件,如列表框、...

简述idl功能?idl 与matlab有何异同点
matlab和IDL的精神都是矩阵,一切都是矩阵,一个常数也是1*1的矩阵,一个向量是1*n的矩阵,一切的一切都是矩阵。所以用m www.hbbz08.com atlab做计算的时候,需要思维上把需要循环的程序改成矩阵运算,这就是matlab的长项了。IDL也是这样,矩阵操作比matlab逊色,但也是基于矩阵的。我的经验觉得IDL...