s******e 发帖数: 841 | 1 有一个函数
A是一个n by 1的向量,当知道A(1)的时候用以下语句对A中的其他元素赋值
A(i+1)=(1+g)*A(i),g是一个常数
当调用这个函数的时候,运行这个语句的时候发生如下错误
In an assignment A(I) = B, the number of elements in B and I must be the
same.
后来发现这个语句的返回值不是A(i+1),而是A这个向量,我觉得这可能是造成这个错
误的原因,但是有什么方法可以实现对A中的元素一一赋值呢
谢谢 |
d***s 发帖数: 55 | 2 1.返回成变量B,然后再把B(i+1)赋给A(i+1)
2.修改函数
【在 s******e 的大作中提到】 : 有一个函数 : A是一个n by 1的向量,当知道A(1)的时候用以下语句对A中的其他元素赋值 : A(i+1)=(1+g)*A(i),g是一个常数 : 当调用这个函数的时候,运行这个语句的时候发生如下错误 : In an assignment A(I) = B, the number of elements in B and I must be the : same. : 后来发现这个语句的返回值不是A(i+1),而是A这个向量,我觉得这可能是造成这个错 : 误的原因,但是有什么方法可以实现对A中的元素一一赋值呢 : 谢谢
|
H***F 发帖数: 2501 | 3 use for loop
【在 s******e 的大作中提到】 : 有一个函数 : A是一个n by 1的向量,当知道A(1)的时候用以下语句对A中的其他元素赋值 : A(i+1)=(1+g)*A(i),g是一个常数 : 当调用这个函数的时候,运行这个语句的时候发生如下错误 : In an assignment A(I) = B, the number of elements in B and I must be the : same. : 后来发现这个语句的返回值不是A(i+1),而是A这个向量,我觉得这可能是造成这个错 : 误的原因,但是有什么方法可以实现对A中的元素一一赋值呢 : 谢谢
|
k**f 发帖数: 372 | 4
I think you did not provide the full context, in particular, what is the
value of i. The following runs just fine in MATLAB:
A=1; g=0.25; for i=1:5, A(i+1)=(1+g)*A(i); end
If your code was
A=1; i=1:5; A(i+1)=(1+g)*A(i);
the error message is
"Index exceeds matrix dimensions."
【在 s******e 的大作中提到】 : 有一个函数 : A是一个n by 1的向量,当知道A(1)的时候用以下语句对A中的其他元素赋值 : A(i+1)=(1+g)*A(i),g是一个常数 : 当调用这个函数的时候,运行这个语句的时候发生如下错误 : In an assignment A(I) = B, the number of elements in B and I must be the : same. : 后来发现这个语句的返回值不是A(i+1),而是A这个向量,我觉得这可能是造成这个错 : 误的原因,但是有什么方法可以实现对A中的元素一一赋值呢 : 谢谢
|
s******e 发帖数: 841 | 5 thank you all for the replies,
The error messege came up when I assigned a vector to the function variable.
If I assigned a scalor, it ran just fine.
for instance, my function is
function V=value(k)
x=zeros(10,1);
z=zeros(10,1);
x(1)=50000;
for i=1:9
z(i)=k*x(i);
x(i+1)=x(i)-z(i);
end
z(10)=k*x(10);
V=0;
for j=10:-1:1
V=400*z(j)-500*z(j)^2/x(j)+V/1.1;
end
V=-V;
end
If I write the following words in the command window, the error messege I
mentioned will pop up
x=0:0.1:1;
y=value(x);
I
【在 k**f 的大作中提到】 : : I think you did not provide the full context, in particular, what is the : value of i. The following runs just fine in MATLAB: : A=1; g=0.25; for i=1:5, A(i+1)=(1+g)*A(i); end : If your code was : A=1; i=1:5; A(i+1)=(1+g)*A(i); : the error message is : "Index exceeds matrix dimensions."
|
k**f 发帖数: 372 | 6
variable.
No wonder. Your function can only take a scalar as parameter. Call it with a
vector doesn't work for z(i) = k*x(i).
You will have to run a loop like this to get the intended result:
for x=0:0.1:1
y=value(x);
% now use y for this x value
end
【在 s******e 的大作中提到】 : thank you all for the replies, : The error messege came up when I assigned a vector to the function variable. : If I assigned a scalor, it ran just fine. : for instance, my function is : function V=value(k) : x=zeros(10,1); : z=zeros(10,1); : x(1)=50000; : for i=1:9 : z(i)=k*x(i);
|
s******e 发帖数: 841 | 7 got it,
thanks
a
【在 k**f 的大作中提到】 : : variable. : No wonder. Your function can only take a scalar as parameter. Call it with a : vector doesn't work for z(i) = k*x(i). : You will have to run a loop like this to get the intended result: : for x=0:0.1:1 : y=value(x); : % now use y for this x value : end
|