[已解决] 为什么这里一个数组可以等于一个数

[复制链接]
搞机的壮丁 发表于 2021-3-11 14:39:15
20 财富积分
[size=13.3333px]代码如上,为什么u和e都是两三个数而已,为什么一个xe ,ye,see,w,v,这些数组可以等于一个数,其中规律是什么?这些数组都有1301个元素,搞不懂
微信图片_20210311141043.png

最佳答案


Leedear 发表于 2021-3-17 14:59:33
搞机的壮丁 发表于 2021-3-17 14:55
那为啥u(3)就索引超出数组元素的数目了呢。明明有那么多元素,结果只算出2个元素,这样的话不就只有两 ...

程序里面的u是每次循环中的一个临时变量,它是一个2x1的向量或者说数组。他没有第三个元素。就是说,本来a是2x1的数组,你定义a(3)=1,那么a会扩展为3x1的数组,但是对于开始的a,如果直接去取a(3),那是会报错的,因为他没有第三个元素。

16 条回复


Leedear 发表于 2021-3-13 16:36:13
循环里面不都是把数组里面第i个元素取出来用的吗?没什么问题,u和e开始定义的是一个空的量,在程序中每次赋值也只是改变一个值,却用到了其中第二个甚至是第三个值,有些奇怪,这个地方应该是没有值的。

搞机的壮丁 发表于 2021-3-15 15:17:00
Leedear 发表于 2021-3-13 16:36
循环里面不都是把数组里面第i个元素取出来用的吗?没什么问题,u和e开始定义的是一个空的量,在程序中每次 ...

循环确实每次都是取一个数来用,但是就是,看不懂这里的u(1)u(2),这里应该只是两个数而已吧,但是w和V却是对应循环中1301个数据,同理e也是,明明就等于指定的第一第二第三个数据,但是为啥左边就是一个数组了

Leedear 发表于 2021-3-15 16:26:07
本帖最后由 Leedear 于 2021-3-15 16:34 编辑
搞机的壮丁 发表于 2021-3-15 15:17
循环确实每次都是取一个数来用,但是就是,看不懂这里的u(1)u(2),这里应该只是两个数而已吧,但是w ...

左边都是带索引的哈,比如w(i+1) 是数组w中第i+1个元素,所以左边其实也是数组中的一个数而已。

搞机的壮丁 发表于 2021-3-16 20:01:44
Leedear 发表于 2021-3-15 16:26
左边都是带索引的哈,比如w(i+1) 是数组w中第i+1个元素,所以左边其实也是数组中的一个数而已。 ...

我知道左边是索引呀,关键是右边,没学过可以一个数可以赋值给一组(左边)数的

搞机的壮丁 发表于 2021-3-16 20:03:51
Leedear 发表于 2021-3-15 16:26
左边都是带索引的哈,比如w(i+1) 是数组w中第i+1个元素,所以左边其实也是数组中的一个数而已。 ...

我不明白的是右边

Leedear 发表于 2021-3-16 20:09:04

?额,你能不能标一下你说的哪一行?

搞机的壮丁 发表于 2021-3-16 20:13:21
微信图片_20210316200755.png 这是运行后的结果

搞机的壮丁 发表于 2021-3-16 20:14:49
Leedear 发表于 2021-3-16 20:09
?额,你能不能标一下你说的哪一行?

25行和27行,明明是两个数,咋赋值给了一个数组,怎么做到的?

Leedear 发表于 2021-3-16 20:21:13
搞机的壮丁 发表于 2021-3-16 20:14
25行和27行,明明是两个数,咋赋值给了一个数组,怎么做到的?

额,这不就是正常的赋值吗?你的i在每次循环中是一个固定的值,假设是1,那么25行xe(i)=e(1)不就是把e的第一个元素赋值给了xe中的第1个元素吗?改变了原来数组xe中的第一个元素的值,没有问题的吧?
再说第27行,w(i+1)=u(2)不就是把u的第二个值赋值给了w中的第二个元素吗?这都是改变数组中某个元素的值的赋值操作,哪有你说的把单个值赋值给一组数的?
再说比如初始化了一个1x2的数组a,如果令a=1;那么就是让a中所有元素都变成1,语法上也没问题的。

搞机的壮丁 发表于 2021-3-16 20:37:35
Leedear 发表于 2021-3-16 20:21
额,这不就是正常的赋值吗?你的i在每次循环中是一个固定的值,假设是1,那么25行xe(i)=e(1)不就是把e的 ...

你如果运行了这段代码就明白了,w和v,是1301个不同的数,不是1301个u(2)的第二个元素

搞机的壮丁 发表于 2021-3-16 20:38:33
Leedear 发表于 2021-3-16 20:21
额,这不就是正常的赋值吗?你的i在每次循环中是一个固定的值,假设是1,那么25行xe(i)=e(1)不就是把e的 ...

t=0:0.1:130;
n=length(t);
af=2;bf=1.5;
kx=1;ky=124;ks=9;
e=[];u=[];se=[];
ser=[];see=[];seo=[];
x=[];y=[];
w=[];
xe=[];ye=[];
v=[];vc=[];
p=[];se(1)=pi/4;tz=0.1;
x(1)=0.5;y(1)=-0.6;w(1)=0.3;v(1)=0.5;
wc=0.05;
for i=1:1300
    seo(i)=tz*i*wc;
    ser(i)=pi/2+seo(i);
    p(i)=af*bf/sqrt(bf^2*cos(seo(i))^2+af^2*sin(seo(i))^2);
    vc(i)=0.05;
    se(i+1)=se(i)+tz*w(i);
    x(i+1)=x(i)+tz*v(i)*cos(se(i));
    y(i+1)=y(i)+tz*v(i)*sin(se(i));
e=[cos(se(i))*(p(i)*cos(seo(i))-x(i))+sin(se(i))*(p(i)*sin(seo(i))-y(i));
    -sin(se(i))*(p(i)*cos(seo(i))-x(i))+cos(se(i))*(p(i)*sin(seo(i))-y(i));
    ser(i)-se(i)];
xe(i)=e(1);ye(i)=e(2);see(i)=e(3);
u=[vc(i)*cos(see(i))+kx*xe(i);wc+vc(i)*ky*ye(i)+vc(i)*ks*sin(see(i))];
w(i+1)=u(2);v(i+1)=u(1);
end

Leedear 发表于 2021-3-16 20:48:12
搞机的壮丁 发表于 2021-3-16 20:38
t=0:0.1:130;
n=length(t);
af=2;bf=1.5;

我打断点运行了一下。以w为例,开始是一个空的数组,然后先定义其中第一个值为0.3,这个时候w长度为1,然后进入循环,w(i+1)=u(2);就是w增加长度,增加的数就是u(2),此时w长度为2,第二个值就是u(2)。也是可以这么用的,这个有什么问题?

搞机的壮丁 发表于 2021-3-17 10:14:41
Leedear 发表于 2021-3-16 20:48
我打断点运行了一下。以w为例,开始是一个空的数组,然后先定义其中第一个值为0.3,这个时候w长度为1,然 ...

微信图片_20210316205231.png 微信图片_20210316205114.png ,你明白我的困惑了吗,只有第一个和最后一个数据是w(1)和u(2),不是全都是u2

Leedear 发表于 2021-3-17 12:44:13
搞机的壮丁 发表于 2021-3-17 10:14
,你明白我的困惑了吗,只有第一个和最后一个数据是w(1)和u(2),不是全都是u2
...

u的数据也是在每次迭代中会更新的呀,怎么说只有最后一个才是u(2),你看的u是最后一次的u而已。

搞机的壮丁 发表于 2021-3-17 14:55:18
Leedear 发表于 2021-3-17 12:44
u的数据也是在每次迭代中会更新的呀,怎么说只有最后一个才是u(2),你看的u是最后一次的u而已。 ...

那为啥u(3)就索引超出数组元素的数目了呢。明明有那么多元素,结果只算出2个元素,这样的话不就只有两次迭代?

Leedear 发表于 2021-3-17 14:59:33
搞机的壮丁 发表于 2021-3-17 14:55
那为啥u(3)就索引超出数组元素的数目了呢。明明有那么多元素,结果只算出2个元素,这样的话不就只有两 ...

程序里面的u是每次循环中的一个临时变量,它是一个2x1的向量或者说数组。他没有第三个元素。就是说,本来a是2x1的数组,你定义a(3)=1,那么a会扩展为3x1的数组,但是对于开始的a,如果直接去取a(3),那是会报错的,因为他没有第三个元素。
回复此楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表