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

作者&投稿:油琬 (若有异议请与网页底部的电邮联系)
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里了。


乌尔禾区13914338742: matlab中如何定义向?matlab中如何定义向量
泣亲前列: matlab向量定义方法:1.向量的普通定义方法向量的常见格式有以下三种:v1=1:N; %格式1 v2=x1:dx:x2 ; %格式2v3=x4:-dx:x3; %格式3参数说明:v1,v2,v3是返回的向...

乌尔禾区13914338742: 如何在matlab中建立向量和矩阵 -
泣亲前列: 1、向量的创建1)直接输入:行向量:a=[1,2,3,4,5]列向量:a=[1;2;3;4;5]2)用“:”生成向量a=J:K 生成的行向量是a=[J,J+1,…,K]a=J:D:K 生成行向量a=[J,J+D,…,J+m*D],m=fix((K-J)/D)3)函数linspace 用来生成数据按等差形式排列的行...

乌尔禾区13914338742: matlab 怎么样定义一个向量或者矩阵来存 -
泣亲前列: matlab其实是不需要确切的定义步骤的.比如:x=5; x="hjdgj"; 一个是数字一个是字符,但是是没问题的.所以你直接 p=矩阵就好

乌尔禾区13914338742: matalab编程中如何定义新的变量 -
泣亲前列: 在matlab中定义变量不需要事先声明. 比如你想定义一个行向量a,可以直接输入 a=[1,2,3]; 或者你想定义一个3乘以3的矩阵B B=[1,3,5;1,2,3;3,5,5]; 如果定义的新的变量名与之前的变量名一样,将会覆盖之前变量.

乌尔禾区13914338742: 如何在matlab中定义n维向量? -
泣亲前列: 目标:随机产生一个长度为n的,以0或1为元素的一维索引向量L 程序如下:clear; n=input('请输入向量的长度n:') L=zeros(1,n); for i=0:(n-2) m=round(rand(1)); L(i+1)=[m]; i=i+1; end L 运行后:请输入向量的长度n:12 n =12 L =0 1 0 0 0 0 1 0 1 1 1 0 该向量L为得到的随机0-1向量 注:运行的时候会让你输入向量的长度n.你就根据自己的需要输入一个正整数即可.

乌尔禾区13914338742: matlab中怎样定义一个n维未知向量 -
泣亲前列: 首先确定xyz的范围,比如说xyz都是从1到10,那么 [x,y,z]=meshgridx=x(:);y=y(:);z=z(:);这样将xyz变成向量.就可以像平时一样定义

乌尔禾区13914338742: 如何用matlab创建向量? -
泣亲前列: n=input('please input n=') A=ones(n,1)

乌尔禾区13914338742: matlab 怎样定义一个数组,它的每个元素是一个向量,且向量长度不等? -
泣亲前列: 定义一个结构体变量 C = struct(field1,value1,field2,value2,...), 其中field标识字段字符串 比如 a = [1 2 3 4]; b = [5 6]; 则令 c = struct('a',a,'b',b); 结果就是: c =a: [1 2 3 4]b: [8 7] 也可以用cell数组实现,见cell和cell2mat的matlab帮助

乌尔禾区13914338742: matlab 定义向量 -
泣亲前列: 从你的描述看,曲线p是由两列组成,不能定义为向量,只能定义为矩阵.

乌尔禾区13914338742: 我想在matlab中定义一个符号向量,例如:y=[x1,x2,x3, ... ,x99],该怎么办啊? -
泣亲前列: 直接的方法还没有找到,不过有一个间接的方法,编程,在一个文件中写入“y=[x1,x2,x3, ... ,x99]”,然后再复制出来.结果如下: y=[x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26,...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网