Setting up vector function
이전 댓글 표시
I write a function SetUp to set up three vectors from an input vector k. Vector c = (-k(2); -k(3); ..... -k(n)) where I have n-1 elements. Vector d = (k(1)+k(2); k(2)+k(3); ...... k(n-1)+k(n); k(n)) where there are n elements And vector e = vector c.
Here is the code I wrote:
function [c,e,d] = SetUp
k = input('Enter k vector');
n = size(k,2);
for k1 = 1:n
c = -k(k1)*ones(n-1,1);
d = (k(k1)+k(k1+1))*ones(n,1); d(n) = k(n);
e = c;
end
end
By running this code I get an error: Index exceeds matrix dimensions.
Problem is in this line: d = (k(k1)+k(k1+1))*ones(n,1); d(n) = k(n);
In my opinion the problem is in indexing as the last term when Matlab runs d = (k(k1)+k(k1+1))*ones(n,1); is d = k(n)+k(n+1), where the program does not recognize k(n+1) as there is no such term in vector k.
So, the question is, how to overcome this problem as I don't even need the last term as the last term is d(n) = k(n)???
Thanks in advance!
댓글 수: 1
Guillaume
2017년 11월 9일
You have to ask yourself several questions:
- What is the purpose of the loop in your code? Note that at each iteration, you're completely overwriting the previous value of c, d and e.
- Is a loop required to do what you want? (Hint: No)
- How can you have a different equation for the last term? (Hint: calculate all the other terms from 1 to n-1 instead of up to n)
- What happens with your code if the user enters a column vector instead of a row vector? (Hint: use numel instead of size(x, 2))
채택된 답변
추가 답변 (1개)
c = -k(2:end); %EDITED
d = k+[k(2:end);0];
e = c;
in case, k is row vector,
c = -k(2:end); %EDITED
d = k+[k(2:end),0];
e = c
that's all you need. No need for a loop!
카테고리
도움말 센터 및 File Exchange에서 Performance and Memory에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!