Solve equation with 2 variables being vectors

2 Ansichten (letzte 30 Tage)
Nicole
Nicole am 8 Mai 2014
Kommentiert: Justin am 12 Mai 2014
Example C=@(A,B) A+B*A A=[1 2 3] B=[4 2 6]
I want C to be a matrix of all possible solutions
Right now I have C as a function and A and B as user inputs
Is there any easier way than writing a loop?
Clarification: C is a very complicated equation with a 2 variables that can have multiple inputs. I want to know all possible solutions. Is there a way to get all possible solutions without nesting loops. I'm making a contour map of 2 inputs and 2 outputs.
  3 Kommentare
Nicole
Nicole am 9 Mai 2014
bsxfun does not work because I have 4 variables, c and a are system dependent constants, Ff and Xi are inputs.
Xf=solve(Ff==2*c*a*(Xf/Xi-Xi^2/Xf^2),Xf);
Xf=Xf(1);
Xfs=matlabFunction(Xf);
where Xfs=@(Ff,Xi,a,c)
Justin
Justin am 12 Mai 2014
You should be able to put an array into a symbolic variable and solve for each value of that array. That means you could define Ff and Xi using the meshgrid method in my answer below. You could:
[Xi, Ff] = meshgrid(Xi, Ff)
and then solve with the values of Xi and Ff that are returned which should give you every possible combination.

Melden Sie sich an, um zu kommentieren.

Antworten (2)

Justin
Justin am 8 Mai 2014
Bearbeitet: Justin am 8 Mai 2014
Edited for clarification:
This may do the trick. It has a loop but only one for implementing the function. After it is run the a, b, and c should hopefully be everything you need.
A=[1 2 3];
B=[4 2 6];
[a, b] = meshgrid(A, B);
for i = 1:length(p)
c(i) = C(a(i), b(i));
end
Let me know how that works.
_______________________________________________
OLD STUFF:
I'm not sure if I understand the question right but bsxfun may be useful. bsxfun automatically extends an array along a singleton dimension to match the other array's size. You could use it to get the results you want (I think).
A=[1 2 3];
B=[4 2 6];
bsxfun(@plus, A, B')
ans =
5 6 7
3 4 5
7 8 9

Matt J
Matt J am 9 Mai 2014
Bearbeitet: Matt J am 9 Mai 2014
C=bsxfun(@(A,B) A+B.*A, A(:),B(:).')

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by