Field reference for multiple structure elements that is followed by more reference blocks is an error. and undefined function histogram
Ältere Kommentare anzeigen
Field reference for multiple structure elements that is followed by more reference blocks is an error.
Error in (line 71)
scatter([vehicles.position(:,1)], [vehicles.position(:,2)], 'filled', 'MarkerFaceColor', 'b');
Undefined function 'histogram' for input arguments of type 'double'.
Error in (line 176)
histogram(vehicleProcessingTime, 'BinWidth', 1, 'Normalization', 'probability', 'FaceColor', 'b',
'EdgeColor', 'w');
clear;
clc;
close all;
% Parameters
numVehicles = 50; % Number of vehicles
numEdges = 3; % Number of edge computing nodes
numClusters = 5; % Number of clusters in the Things layer
cloudCapacity = 1000; % Cloud computing capacity
edgeCapacity = [100, 150, 200]; % Edge computing capacity
taskRate = 0.1; % Task generation rate per vehicle (tasks/second)
communicationDelayEdge = 1;% Communication delay for edge offloading (seconds)
communicationDelayCloud = 5;% Communication delay for cloud offloading (seconds)
distanceThreshold = 100; % Maximum distance for edge offloading (meters)
clusterRadius = 200; % Radius for clustering in the Things layer (meters)
vehicleComputingPower = 50;% Computing power of each vehicle (arbitrary units)
% Initialize vehicles
vehicles = struct('position', num2cell(rand(numVehicles, 2)*1000, 2), 'tasks', [], 'ip', '', 'computingPower', vehicleComputingPower);
% Initialize edge nodes
edges = struct('position', num2cell(rand(numEdges, 2)*1000, 2), 'tasks', [], 'capacity', edgeCapacity, 'ip', '');
% Cloud initialization
cloud = struct('tasks', [], 'capacity', cloudCapacity, 'ip', '8.8.8.8');
% Initialize clusters in the Things layer
clusters = struct('center', num2cell(rand(numClusters, 2)*1000, 2), 'members', []);
% Form clusters in the Things layer
for i = 1:numVehicles
minDist = inf;
nearestCluster = 0;
for j = 1:numClusters
dist = norm(vehicles(i).position - clusters(j).center);
if dist < minDist
minDist = dist;
nearestCluster = j;
end
end
clusters(nearestCluster).members = [clusters(nearestCluster).members, i];
end
% Assign IP addresses for vehicles in each cluster
for i = 1:numClusters
clusterSize = length(clusters(i).members);
clusterIPRange = 10 * (i - 1) + (1:clusterSize);
for j = 1:clusterSize
vehicles(clusters(i).members(j)).ip = ['192.168.', num2str(i), '.', num2str(clusterIPRange(j))];
end
end
% Initialize arrays to store processing times
vehicleProcessingTime = [];
edgeProcessingTime = [];
cloudProcessingTime = [];
% Simulation loop
figure;
for t = 1:100
% Generate tasks for vehicles
for i = 1:numVehicles
if rand < taskRate
vehicles(i).tasks = [vehicles(i).tasks; t];
end
end
clf; % Clear figure for each time step
% Plot vehicles
scatter([vehicles.position(:,1)], [vehicles.position(:,2)], 'filled', 'MarkerFaceColor', 'b');
hold on;
% Plot edge nodes
scatter([edges.position(:,1)], [edges.position(:,2)], 'filled', 'MarkerFaceColor', 'g');
% Plot cloud
scatter(cloud.position(1), cloud.position(2), 'filled', 'MarkerFaceColor', 'r');
% Plot clusters
for i = 1:numClusters
scatter(clusters(i).center(1), clusters(i).center(2), 'x', 'MarkerEdgeColor', 'k', 'LineWidth', 2);
end
% Offload tasks from vehicles to either edge nodes or cloud
for i = 1:numVehicles
% Determine if edge offloading is possible
edgeOffload = false;
for j = 1:numEdges
if norm(vehicles(i).position - edges(j).position) <= distanceThreshold && ~isempty(edges(j).tasks)
edgeOffload = true;
break;
end
end
% Offload task to edge node if possible, otherwise to cloud
if edgeOffload
for j = 1:numEdges
if norm(vehicles(i).position - edges(j).position) <= distanceThreshold && ~isempty(edges(j).tasks)
task = vehicles(i).tasks(1);
vehicles(i).tasks(1) = [];
edges(j).tasks = [edges(j).tasks; task];
disp(['Task from vehicle ', num2str(i), ' offloaded to edge ', num2str(j)]);
break;
end
end
else
if ~isempty(cloud.tasks)
task = vehicles(i).tasks(1);
vehicles(i).tasks(1) = [];
cloud.tasks = [cloud.tasks; task];
disp(['Task from vehicle ', num2str(i), ' offloaded to cloud']);
end
end
end
% Process tasks at edge nodes
for j = 1:numEdges
if ~isempty(edges(j).tasks)
completedTasks = edges(j).tasks(edges(j).tasks <= t - communicationDelayEdge);
edges(j).tasks = setdiff(edges(j).tasks, completedTasks);
disp(['Edge ', num2str(j), ' processed ', num2str(length(completedTasks)), ' tasks']);
% Record processing time
edgeProcessingTime = [edgeProcessingTime, t - completedTasks];
end
end
% Process tasks at the cloud
if ~isempty(cloud.tasks)
completedTasks = cloud.tasks(cloud.tasks <= t - communicationDelayCloud);
cloud.tasks = setdiff(cloud.tasks, completedTasks);
disp(['Cloud processed ', num2str(length(completedTasks)), ' tasks']);
% Record processing time
cloudProcessingTime = [cloudProcessingTime, t - completedTasks];
end
% Process tasks on vehicles (for simplicity, assume immediate processing)
for i = 1:numVehicles
if ~isempty(vehicles(i).tasks)
completedTasks = vehicles(i).tasks(vehicles(i).tasks <= t);
vehicles(i).tasks = setdiff(vehicles(i).tasks, completedTasks);
disp(['Vehicle ', num2str(i), ' processed ', num2str(length(completedTasks)), ' tasks']);
% Record processing time
vehicleProcessingTime = [vehicleProcessingTime, zeros(1, length(completedTasks))]; % Assuming immediate processing
end
end
% Move vehicles (random movement for visualization)
for i = 1:numVehicles
vehicles(i).position = vehicles(i).position + randn(1, 2)*5; % Random movement
end
% Respond to neighbor requests (for visualization, no actual communication)
for i = 1:numVehicles
% Find neighbors of vehicle i
neighbors = [];
for j = 1:numVehicles
if i ~= j && norm(vehicles(i).position - vehicles(j).position) <= distanceThreshold
neighbors = [neighbors, j];
end
end
% Display neighbors
disp(['Vehicle ', num2str(i), ' has neighbors: ', num2str(neighbors)]);
end
hold off;
axis([0 1000 0 1000]); % Set axis limits
title(['Time Step: ', num2str(t)]);
xlabel('X Position');
ylabel('Y Position');
grid on;
pause(0.5); % Pause to visualize each time step
end
% Plot processing time for each processing entity
figure;
histogram(vehicleProcessingTime, 'BinWidth', 1, 'Normalization', 'probability', 'FaceColor', 'b', 'EdgeColor', 'w');
hold on;
histogram(edgeProcessingTime, 'BinWidth', 1, 'Normalization', 'probability', 'FaceColor', 'g', 'EdgeColor', 'w');
histogram(cloudProcessingTime, 'BinWidth', 1, 'Normalization', 'probability', 'FaceColor', 'r', 'EdgeColor', 'w');
hold off;
title('Processing Time Distribution');
xlabel('Processing Time (time steps)');
ylabel('Probability');
legend('Vehicle', 'Edge', 'Cloud');
5 Kommentare
Walter Roberson
am 22 Mär. 2024
which MATLAB version are you using?
Catherine
am 22 Mär. 2024
"Matlab R2013a"
Check the documentation of your installed MATLAB version and you will find that HISTOGRAM() does not exist. It was first introduced in R2014b.
For an approximate replacement your installed version has the HIST() function, but note that it may have a different syntax and it does not support any name-value input arguments like your code uses.
Catherine
am 22 Mär. 2024
"i got the following error after changing from histogram to hist"
Which is why I already told you that HIST supports no name-value input arguments. If you then call HIST with many name-value input arguments (as your quoted error message clearly shows), what do you expect to happen?
You should read the documentation of every function that you use. And follow it.
Akzeptierte Antwort
Weitere Antworten (0)
Kategorien
Mehr zu Data Distribution Plots finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!