Simplify Matlab for/if statements further

  • Context: MATLAB 
  • Thread starter Thread starter bugatti79
  • Start date Start date
  • Tags Tags
    Matlab Simplify
Click For Summary

Discussion Overview

The discussion revolves around simplifying a MATLAB code snippet that involves a loop for substituting values into a matrix. Participants explore ways to reduce redundancy in the code and improve its efficiency.

Discussion Character

  • Technical explanation, Debate/contested, Exploratory

Main Points Raised

  • One participant seeks assistance in simplifying a MATLAB loop that redundantly calls the `subs` function multiple times with the same arguments.
  • Another participant points out the issue of repeated calls to `subs` and suggests using a loop for the first index of the matrix `k` to streamline the code.
  • A suggestion is made to define variables for the parameters used in the `subs` function before the loop to avoid repetition.
  • A later reply indicates that the original poster successfully reduced the code to a single line using a double if loop, implying a resolution to their initial concern.

Areas of Agreement / Disagreement

While there is agreement on the need for simplification, the discussion includes varying approaches to achieve this, and it remains open whether one method is definitively better than another.

Contextual Notes

Some assumptions about the structure of the matrix and vector, as well as the specific requirements for the substitutions, are not fully detailed, which may affect the applicability of proposed solutions.

bugatti79
Messages
786
Reaction score
4
Hi Folks,

This loop code is working fine but I would like to simplify it further. Can anyone help?

Basically, i need syntax to automate the numbers highlighted in bold.

k is a 3*3 matrix, SE_ans is a 3*1 vector, A is a 3*3 identify matrix. The rests are just constants.

Code:
  for i=1:size(k,1)
 
k([B]1[/B],i)=subs(SE_ans([B]1[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]1[/B],i)=subs(SE_ans([B]1[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]1[/B],i)=subs(SE_ans([B]1[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])

k([B]2[/B],i)=subs(SE_ans([B]2[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]2[/B],i)=subs(SE_ans([B]2[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]2[/B],i)=subs(SE_ans([B]2[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])

k([B]3[/B],i)=subs(SE_ans([B]3[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]3[/B],i)=subs(SE_ans([B]3[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
k([B]3[/B],i)=subs(SE_ans([B]3[/B],:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,[B]1[/B]), A(i,[B]2[/B]), A(i,[B]3[/B]),1,2,3])
  end

Thanks
 
Physics news on Phys.org
The [ code ] tags are preventing the bold tags from being rendered correctly. Normally it's a good thing to put your code inside code tags, but not in this case.

for i=1:size(k,1)

k(1,i)=subs(SE_ans(1,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(1,i)=subs(SE_ans(1,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(1,i)=subs(SE_ans(1,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])

k(2,i)=subs(SE_ans(2,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(2,i)=subs(SE_ans(2,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(2,i)=subs(SE_ans(2,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])

k(3,i)=subs(SE_ans(3,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(3,i)=subs(SE_ans(3,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
k(3,i)=subs(SE_ans(3,:),[theta_1, theta_2, theta_3, k_t1,k_t2,k_t3],[A(i,1), A(i,2), A(i,3),1,2,3])
end
 
Why do you call subs 3 times with the same arguments? Also, why not add a loop for the first index of k? I would also set
Code:
tk = [theta_1, theta_2, theta_3, k_t1,k_t2,k_t3];
AA = [A(i,1), A(i,2), A(i,3),1,2,3];
before the loop, and use that inside the loop.
 
Hi DrClaude,

yes, you are right. I reduced it down to one line and use a double if loop. Works fine now

Thanks
 

Similar threads

  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 7 ·
Replies
7
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 5 ·
Replies
5
Views
1K
  • · Replies 6 ·
Replies
6
Views
2K