Borrar filtros
Borrar filtros

Perms output as trials to solve an equation

2 visualizaciones (últimos 30 días)
B
B el 30 de Abr. de 2014
Comentada: Image Analyst el 3 de Mayo de 2014
Is there a way to use the perms output as the variable values of an equation and identify a unique solution?
For example, perms(1:2) gives [2 1; 1 2]
If I have an equation 4x + 2y, can I use the different values (x=2, y=1 and x=1, y=2) in an equation to determine a desired solution (i.e. 10)?
If I wanted to have a final value of 10, the identified values would x=2 and y=1.

Respuestas (2)

Image Analyst
Image Analyst el 30 de Abr. de 2014
I would not think so. What makes you think that you would happen to have the solution already in your list of numbers that you're going to make permutations of? If you want to do it numerically, you could use linspace() to make a list of values for x and y, then use meshgrid() to get every (x,y) coordinate in the space, then plug those x,y into your equation, then search for the coordinate that has a value closest to your desired value (10) with min() and ind2sub.
% Make x and y axes.
x=linspace(1,10,100);
y = linspace(1, 20, 100);
% Get x and y over the entire grid.
[xg, yg] = meshgrid(x, y);
% Make the equation for every x and y.
z = 4*xg + 2* yg
% Display it.
image(z);
colormap(gray);
colorbar
% Find where target value lives.
targetValue = 10;
diffMatrix = abs(z - targetValue);
[minDiff, linearIndex] = min(diffMatrix(:))
[row, col] = ind2sub(size(z), linearIndex)
  7 comentarios
B
B el 1 de Mayo de 2014
Editada: B el 1 de Mayo de 2014
That FAQ section makes perfect sense. I'm great with the conceptualization of what needs to be done, I just don't know how to implement it. Also, all of the numbers I'm using (both variables and coefficients) are integers, so I'm not worried about issues with floating point numbers.
My equation is -402u^6 + 67v^5 + 48w^4 + 295x^3 - 720y^2 + 1145z - 14648, and the values of u, v, w, x, y, z can only be 1-6.
Image Analyst
Image Analyst el 3 de Mayo de 2014
At the very inside of the 6 for loops, do this:
value = -402u^6 + 67v^5 + 48w^4 + 295x^3 - 720y^2 + 1145z - 14648;
if value == 10
foundAnswer = true;
message = sprintf('It is 10 for u=%d, v=%d, w=%d, x=%d, y=%d, z=%d',...
u,v,w,x,y,z);
uiwait(helpdlg(message));
break;
end
Before the 6 for loops have
foundAnswer = false;
and then at the end of each for loop, just before its end statement, you'll have:
if foundAnswer = true;
break;
end

Iniciar sesión para comentar.


B
B el 3 de Mayo de 2014
Any help would be appreciated.

Categorías

Más información sobre Loops and Conditional Statements en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by