How do I create a for loop for the this example?
조회 수: 1 (최근 30일)
이전 댓글 표시
ehsan
2017년 12월 18일
댓글: Kaushik Lakshminarasimhan
2017년 12월 18일
Dear all, I have a code as follow:
for i = 1:5
syms (['X_' , num2str(i)])
end
J = (X_2 - X_1)^2 + (X_3 - X_2)^2 + (X_4 - X_3)^2 + (X_5 - X_4)^2 ;
B_1 = diff(J,X_1)/2 ; B_2 = diff(J,X_2)/2 ; B_3 = diff(J,X_3)/2 ; ...
B_4 = diff(J,X_4)/2 ; B_5 = diff(J,X_5)/2 ;
unknown = [X_1 X_3 X_4 X_5];
Now I would like to do the below operation for all from B_1 until B_5 in a loop
B_1sorted = collect(B_1,unknown); %Sort symbols from Psi_1 to Psi_100
[c,t] = coeffs(B_1,unknown);
index = 0;
newc = zeros(1,length(unknown));
for k = 1:length(unknown)
if any(t==unknown(k))
index = index + 1;
newc(k) = c(index);
end
end
any help would be greatly appreciated,
댓글 수: 3
Kaushik Lakshminarasimhan
2017년 12월 18일
I agree with Stephen. I suggested eval only because your set up used symbolic variables and I assumed you were simply looking for a quick hack. This solution is not sustainable if you have many more variables.
채택된 답변
Kaushik Lakshminarasimhan
2017년 12월 18일
You can use eval. Something like this should work, although you need to take care of saving your variables at the end of each iteration.
for i=1:5
eval(['B_' num2str(i) 'sorted = collect(B_1,unknown)']);
[c,t] = coeffs(eval(['B_' num2str(i)]),unknown);
index = 0;
newc = zeros(1,length(unknown));
for k = 1:length(unknown)
if any(t==unknown(k))
index = index + 1;
newc(k) = c(index);
end
end
%%save your variables from the i^th iteration
end
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrix Indexing에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!