求指导matlab变量写入矩阵
E2(1) = 50;
for i = 1:1:9;
V1(i) = 3*E1(i);
E1(i) = V1(i).*E1(i) + 1./V1(i);
E1(i +1) = 500 - E2(i);
end
只有将E1(i)。E2(i)i.V1(i)变为矩阵for才进入循环,求高手指教 展开
你是刚学matlab吧,matlab基本的语法你好像还不太明白呢
我给你解释下
E1(1)=100 首先这样声明变量很不可取,如果你想声明一个标量请写成E1=100的形式。
如果声明为矩阵这样写E1=[1,2;3,4],逗号表示同一行,分好数据换行。
写成如 i=1:9这样的语句默认步长就是1,没有必要写成1:1:9。
矩阵中的元素引用格式为M(i,j),表示矩阵M中第i行j列元素。向量引用可以直接用V(i),表示向量中的第i个元素。
.*和./表示向量对应元素相乘或相除,运算要求两个向量长度一致。
如[1;2].*[3;4]=[3;8]
好了,现在来看你的代码:
E1(1) = 100;
E2(1) = 50;
这两步的意思是将向量E1,E2的第一个元素置为100,50。如果运行这段脚本之前你的workspace中包含名为E1,E2两个向量,那么将对你的程序造成很大影响。
再来看循环
for i = 1:1:9;
V1(i) = 3*E1(i);
E1(i) = V1(i).*E1(i) + 1./V1(i);
E1(i +1) = 500 - E2(i);
end
i=1的时候循环内部是没有问题的,可以运行。但是当i=2的时候,循环中最后一条语句会执行
E1(3) = 500 - E2(2);
这时候问题就出现了,因为根据之前的定义E2是一个标量,因此当程序执行到这一步就会报错,E2数组下标越界。
好了,那么还有什么不明白的吗?
PS:建议你找本matlab的书看看,《高等应用数学问题的MATLAB求解》这本书就不错,我当初开始学的时候是看的这本。希望对你有帮助
谢谢您的回答,我确实是一个初学者,所以有好多地方看不太明白,我定义E1(1)和E2(1)是因为这只是我的程序的一部分,因为E1和E2代表不同物品的同一性质。那个for的步长1:1:9只是为了自己阅读方便而已。
最终要的是我知道E2(2)被我定义成为了一个标量,但是我还不知道怎么改,所以我认为如果E2(i)和E1(i)都变成矩阵应该问题就解决了,只是我不知道怎么改
循环共执行9次,每次执行循环分别需要E2(1),E2(2),E2(3),E2(4),E2(5),E2(6),E2(7),E2(8),E2(9)。
然后你的程序中E2(2),E2(3),E2(4),E2(5),E2(6),E2(7),E2(8),E2(9)这些元素都是缺失的。
循环根据需要可以做如下修改:
将向量E2根据算法定义补充完整。
如果每次循环中所需要的E2中的元素是一样的,那么直接将循环中第三句改为
E1(i +1) = 500 - E2;
就可以了。
2024-08-07 广告