- Define the breakpoints for the z-axis.
- For each z-axis breakpoint, define the corresponding breakpoints for the x- and y-axis.
- Store the data in a 3D cell array or structure where each cell contains a 2D matrix corresponding to the x- and y-breakpoints for a specific z-breakpoint.
Variable breakpoints in 3D-Lookup table?
20 views (last 30 days)
Show older comments
Hi guys,
I'm using a 3D-Lookup table. My problem is, that the the used range of the x- and y-axis varies very much with the z-axis. To avoid very big matrices, I'm looking for a way, to use variables for defining the breakpoints 1 and 2 depending on the actual value of breakpoint 3. I hope you understand what I mean.
Thanks, Benedikt
0 Comments
Answers (1)
BhaTTa
on 8 Aug 2024
Hi Benedikt,
It sounds like you want to create a 3D lookup table in MATLAB where the range of the x- and y-axis breakpoints depends on the value of the z-axis breakpoint. This can be achieved by using a combination of cell arrays or nested structures to store the varying breakpoints and the corresponding data.
Here's a step-by-step approach to implement this:
Here's an example to illustrate this:
% Define the breakpoints for the z-axis
z_breakpoints = [1, 2, 3];
% Define the corresponding breakpoints for the x- and y-axis for each z-breakpoint
x_breakpoints = {
[0, 1, 2], % x-breakpoints for z = 1
[0, 0.5, 1], % x-breakpoints for z = 2
[0, 1] % x-breakpoints for z = 3
};
y_breakpoints = {
[0, 1, 2, 3], % y-breakpoints for z = 1
[0, 1, 2], % y-breakpoints for z = 2
[0, 0.5, 1] % y-breakpoints for z = 3
};
% Define the data for each combination of breakpoints
data = {
[1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12], % Data for z = 1
[1, 2, 3; 4, 5, 6; 7, 8, 9], % Data for z = 2
[1, 2; 3, 4; 5, 6] % Data for z = 3
};
% Function to lookup data based on x, y, and z values
function value = lookup_data(x, y, z, z_breakpoints, x_breakpoints, y_breakpoints, data)
% Find the index of the closest z-breakpoint
[~, z_idx] = min(abs(z_breakpoints - z));
% Get the corresponding x- and y-breakpoints and data
x_bp = x_breakpoints{z_idx};
y_bp = y_breakpoints{z_idx};
data_matrix = data{z_idx};
% Interpolate the data
value = interp2(x_bp, y_bp, data_matrix, x, y, 'linear');
end
% Example usage:
x_val = 1.5;
y_val = 2.5;
z_val = 1.5;
result = lookup_data(x_val, y_val, z_val, z_breakpoints, x_breakpoints, y_breakpoints, data);
disp(result);
0 Comments
See Also
Categories
Find more on Data Import and Management in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!