MATLAB Answers

Eric
0

Making my function run for multiple input values

Asked by Eric
on 14 Nov 2019
Latest activity Commented on by Walter Roberson
on 14 Nov 2019
function t = TrueThickness(strike,dip,pTop,pBase)
% transformatiion matrix
a = [sin(strike) cos(strike) 0;...
cos(strike)*cos(dip) -sin(strike)*cos(dip) -sin(dip);...
-cos(strike)*sin(dip) sin(strike)*sin(dip) -cos(dip)];
% transform points
p3n = zeros(3);
p4n = zeros(3);
for i = 1:3
for j = 1:3
p3n(i) = a(i,j)*pTop(j) + p3n(i);
p4n(i) = a(i,j)*pBase(j) + p4n(i);
end
end
% compute thicknessess
tt = abs(p3n(3) - p4n(3))
end
saved file as test12414!!
Here I make new matlab file and try running my function
-----------------------------------------------------------------------------------------------------------------------------------
pTop= [724277 4944457 1270]
pBase = [ 724371 4944506 1299]
strike = 161.5651
dip = 16.0389
test12414(strike,dip,pTop,pBase)
the code works and is great but I want to be able to have several values for my strike,
dip ,pTop and pBase. for example lets say i want to use the script 3 times for different values.
Then pTop and pBase will be 3x3 vectors so have 9 numbers and strike and dip will have 3 values
how would I do this?

  0 Comments

Sign in to comment.

1 Answer

Answer by ME
on 14 Nov 2019
Edited by ME
on 14 Nov 2019

You could call the function inside a ‘for’ loop. That would enable you to feed in the different input values. For example:
In1=[val1 val2 val3];
In2=[val1 val2 val3];
for i=1:3
[out1(i) out2(i)]=function(In1(i) in2(i))
end
Obviously, adjust for your particular application.

  2 Comments

Thank you for you answer this makes sense but I ran into a small problem (I think).
test12414(strike,dip,pTop,pBase) I replaced this with:
for b=1:3
out(b,:) = test12414(strike(b), dip(b),pTop(b,:),pBase(b,:))
end
gives error:
Output argument "t" (and maybe others) not assigned during call to "test12414".
Error in svarararada (line 12)
out(b,:) = test12414(strike(b), dip(b),pTop(b,:),pBase(b,:))
any idea how to fix this?
And my function is supposed to output 1 value but since I have b=1:3 it should give 3 values
You define
function t = TrueThickness(strike,dip,pTop,pBase)
but you never assign anything to t . You do, however, assign to tt but do not use tt after the assignment.

Sign in to comment.