Minimizing a tri-variate function
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello!
I have the following task - I need to find the minimum of the following function (using only fminsearch) F(X,Y,Z)=(X-a*Y)^2+(X-a*Z)^2 , by parametre a
The problem is that X, Y, Z are stored in arrays (one dimentional per each variable).
I've written the following code
function F= F_linear(M,F,SP,a) F = (M-a*F)^2 + (M-a*SP)^2; end
But, when I try to use fminsearch (like this:x = fminsearch(@(x) myfun(X,Y,Z,a))) the following error-message occures:
Inputs must be a scalar and a square matrix. To compute elementwise POWER, use POWER (.^) instead.
Error in ==> F_linear at 2 F = (X-a*Y)^2 + (X-a*Z)^2;
Error in ==> @(x)F_linear(X,Y,Z,a)
Error in ==> fminsearch at 191 fv(:,1) = funfcn(x,varargin{:});
How can I fix this problem? Thank you for your reply!
0 Kommentare
Antworten (1)
nick
am 16 Apr. 2025
Bearbeitet: nick
am 16 Apr. 2025
Hello terance,
To resolve this error, kindly use element wise operators in the function F_linear, as shown below:
function F = F_linear(M, F, SP, a)
F = sum((M - a .* F).^2 + (M - a .* SP).^2);
end
You may refer to the documentation by executing the following command in MATLAB Command Window to know more about element-wise operations:
doc power
2 Kommentare
Sam Chak
am 16 Apr. 2025
Hi @nick

Looking at the tri-variate function, the minimum value must occur when
.

Since there are two quadratic components, one must solve the equations
and
.


It is evident that the solutions represent two straight lines. However, I am currently unsure how to implement this in MATLAB and display the results in a 3D projection.
nick
am 16 Apr. 2025
The two equations
and
represent planes in 3D space and for the minimum value of f(x,y,z), these equations gives the following result :



These set of coordinates represents a straight line in the 3D space when
and the y-z plane when
. The code below shows the intersection region between these 2 equations :


Y = linspace(-10, 10, 100);
Z = linspace(-10, 10, 100);
[Y_grid, Z_grid] = meshgrid(Y, Z);
% parameter a
a_values = [-2, -1, 0, 1, 2];
figure;
for i = 1:length(a_values)
a = a_values(i);
% Calculate X for each line
X_Y = a * Y_grid;
X_Z = a * Z_grid;
subplot(2, 3, i);
hold on;
% Plot the line X = aY
surf(X_Y, Y_grid, Z_grid, 'FaceAlpha', 0.5, 'EdgeColor', 'none', 'FaceColor', 'r');
% Plot the line X = aZ
surf(X_Z, Y_grid, Z_grid, 'FaceAlpha', 0.5, 'EdgeColor', 'none', 'FaceColor', 'b');
xlabel('X');
ylabel('Y');
zlabel('Z');
title(sprintf('a = %.1f', a));
grid on;
view(3);
hold off;
end
sgtitle('3D Projection of Lines X = aY and X = aZ for Different a Values');
figure;
for i = 1:length(a_values)
a = a_values(i);
subplot(2, 3, i);
hold on;
if a == 0
% Special case for a = 0, the solution is the plane X = 0
X_plane = zeros(size(Y_grid));
surf(X_plane, Y_grid, Z_grid, 'FaceAlpha', 0.5, 'EdgeColor', 'none', 'FaceColor', 'g');
title('Solution Plane for a = 0');
else
X_line = a * Y;
Z_line = Y;
plot3(X_line, Y, Z_line, 'k', 'LineWidth', 2);
title(sprintf('a = %.1f', a));
end
xlabel('X');
ylabel('Y');
zlabel('Z');
grid on;
view(3);
hold off;
end
sgtitle('3D Solution Line for X = aY = aZ with Y = Z for Different a Values');
Siehe auch
Kategorien
Mehr zu Performance and Memory finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!