Matlab绘图In an assignment A(I) = B, the number of elements in B and I must be the same

自定义了一个函数X=F(t),函数里有一数组变量a[1]=t; a[2]=2*t; 要对a[1],a[2]做循环运算,当绘图时,t=1:50。t变成数组就出问题了。有解决办法吗?(注:函数里的数组变量是必须的)
要实现绘图功能
原函数:function r = solutionA(t)
a(:,1)=(1-exp(-0.02.*t)).^2;
a(:,2)=(1-exp(-0.02.*t)).^2;
a(:,3)=(1-exp(-0.02.*t)).^2;
a(:,4)=(1-exp(-1.*t./150)).^2;
a(:,5)=(1-exp(-1.*t./150)).^2;
a(:,6)=(1-exp(-1.*t./150)).^2;
a(:,7)=(1-exp(-1.*t./150)).^2;
a(:,8)=1-exp(-0.02.*t);
a(:,9)=1-exp(-0.02.*t);
a(:,10)=1-exp(-0.02.*t);
a(:,11)=1-exp(-0.02.*t);
a(:,12)=1-exp(-0.02.*t);
a(:,13)=1-exp(-0.02.*t);
r=0;
for i=1:13
r=r+a(i);
end
r=1-r;
p=0;
for i=1:12
for j=i+1:13
p=p+a(i)*a(j);
end
end
r=r+p;

是这样的,
t是一行多列的行向量.

a(:,1)=(1-exp(-0.02.*t)).^2;
等号右边与t是相同的结构,是一行多列的行向量,
而a(:,1)是一个列向量.
这样赋值会出错.
function r = solutionA(t)
t=t(:); %先把t弄成列向量,
a(:,1)=(1-exp(-0.02.*t)).^2;

这样就可以了.
不过r=r+a(i)
我不知道你这个用意是什么,注意a(i)仅仅只是第i行第一列的一个值,而不是第i行.因为不知道你的目的是什么,所以不知道有没有错.追问

我原来是将t值直接赋给一维数组a(i),然后对a(i)进行四则运算的,现在a变成二维了,不知道怎么处理,绘出的图也不大对。

追答

你以前怎么画图的?

追问

>> t=0:1:150;
>> y=solutionA(t);
>> plot(t,y)

追答

function r = solutionA(t)
t=t(:);
a(:,1)=(1-exp(-0.02.*t)).^2;
a(:,2)=(1-exp(-0.02.*t)).^2;
a(:,3)=(1-exp(-0.02.*t)).^2;
a(:,4)=(1-exp(-1.*t./150)).^2;
a(:,5)=(1-exp(-1.*t./150)).^2;
a(:,6)=(1-exp(-1.*t./150)).^2;
a(:,7)=(1-exp(-1.*t./150)).^2;
a(:,8)=1-exp(-0.02.*t);
a(:,9)=1-exp(-0.02.*t);
a(:,10)=1-exp(-0.02.*t);
a(:,11)=1-exp(-0.02.*t);
a(:,12)=1-exp(-0.02.*t);
a(:,13)=1-exp(-0.02.*t);

r=0;
for i=1:13
r=r+a(:,i);
end
r=1-r;
p=0;
for i=1:12
for j=i+1:13
p=p+a(:,i).*a(:,j);
end
end
r=r+p;

追问

t=0:1:150; 绘制出的t,y曲线是一条直线(这实际上是一条可靠性曲线,随时间增加而下降的), 你能绘出曲线吗?

追答

你还是把原始资料给我吧.
我不知道里面的细节.

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-28
意思就是说B大小跟I的大小不一样,如果想把B赋值给A(I),必须保证B和I的大小相同
a(:,1)=t;
a(:,2)=2*t;
意思是把t这个数组赋值给a的第一列,第二行同理
a(1,:)=t;
a(2,:)=2*t;
意思是把t这个数组赋值给a的第一行,第二行同理追问

按照以上赋值后,我想做a(1)*a(2)如何实现,直接写吗

追答

a(:,1).*a(:,2),用点乘就行了

追问

t=0:1:150; 绘出的是一条直线,还是不正确

第2个回答  2012-12-28
a(:,1)=t;
a(:,2)=2*t;追问

绘图失败,是一条直线,没有解决问题,a(i)如何进行加减运算?

追答

现在是a是二维的

相似回答
大家正在搜