I have adajacency matrix B. Now ,I want to write a matlab code for time series .I have written some part of the code
5 views (last 30 days)
Show older comments
clc;
clear all;
n = 10;
C= zeros(n, n);
C(1,n)=1;
C(1,n-1)=1;
C(2,n)=1;
A = zeros(n, n);
for i = 1:n
for j = 1:n
if j==i+1 || j == i + 2
A(i,j) = 1;
else
A(i, j) = 0;
end
end
end
B1=A+C;
B=B1+B1';
% Parameters
% matrixSize = 10; % Size of the matrix
numEdgesToRewire = 3; % Number of edges to rewire
% Create an initial matrix
% Y = B;
matrixSize=10;
% Randomly select two edges to rewire
edgesToRewire = randperm(matrixSize, numEdgesToRewire);
% Iterate through the edges to rewire
for i = 1:numEdgesToRewire
node1 = edgesToRewire(i);
node2 = randi([1, matrixSize]);
% Avoid rewiring to the same node or existing edges
while node2 == node1 || B(node1, node2) == 1
node2 = randi([1, matrixSize]);
end
% Rewire the edge
B(node1, node2) = 1;
B(node2, node1) = 1;
end
% Display the rewired matrix
disp(B);
%%
function xprime = kau(t,x,B)
theta=0.3;dh=2^-9;dp=2^-7;phi=3;ita=1;
n=10;
% nn=n*d;
f=[];
for i=1:n;
y1=[x(1);x(3);x(5);x(7);x(9);x(11);x(13);x(15);x(17);x(19)];
y2=[x(2);x(4);x(6);x(8);x(10);x(12);x(14);x(16);x(18);x(20)];
f= [f; x(2i-1)*(1-theta*x(2i-1))-(x(2i))-(x(2i-1)*x(2i))/(1+x(2i))+dh*B*y1;...,
(phi*x(2i-1)*x(2i))/(1+x(2i))-ita*x(2i)+dp*B*y2];
end
end
xprime=f-B*y
x0=[h0,p0];
h0=rand(10,1);
p0=rand(10,1);
[t,xsol]=ode45(kau,[0 100],x0);
solutions=[];
% h=rand(10,1);
% p=rand(10,1);
H=sum(y1);
P=sum(y2);
plot(t,H,'b');
plot(t,P,'r');
0 Comments
Answers (1)
Divyam
on 19 Nov 2024 at 4:05
The code uses a deterministic method for rewiring the adjacency matrix and can cause issues such as self looping and duplication of edges. Rewiring the edges randomly will fix this issue. Here is a sample code that can be modified as per your specific requirements:
clc;
clear all;
% Parameters
n = 10;
numEdgesToRewire = 3; % Number of edges to rewire
% Create adjacency matrix B
C = zeros(n, n);
C(1, n) = 1;
C(1, n-1) = 1;
C(2, n) = 1;
A = zeros(n, n);
for i = 1:n
for j = 1:n
if j == i + 1 || j == i + 2
A(i, j) = 1;
end
end
end
B1 = A + C;
B = B1 + B1';
% Rewire edges
edgesToRewire = randperm(n, numEdgesToRewire);
for i = 1:numEdgesToRewire
node1 = edgesToRewire(i);
node2 = randi([1, n]);
% Avoid rewiring to the same node or existing edges
while node2 == node1 || B(node1, node2) == 1
node2 = randi([1, n]);
end
% Rewire the edge
B(node1, node2) = 1;
B(node2, node1) = 1;
end
% Display the rewired matrix
disp('Rewired adjacency matrix B:');
disp(B);
% Initial conditions
h0 = rand(n, 1);
p0 = rand(n, 1);
x0 = [h0; p0];
% Solve the differential equations
[t, xsol] = ode45(@(t, x) kau(t, x, B), [0 100], x0);
% Extract solutions
H = sum(xsol(:, 1:n), 2);
P = sum(xsol(:, n+1:end), 2);
% Plot the results
figure;
plot(t, H, 'b', 'DisplayName', 'H(t)');
hold on;
plot(t, P, 'r', 'DisplayName', 'P(t)');
xlabel('Time');
ylabel('Population');
legend;
title('Time Series of H and P');
hold off;
% Function defining the differential equations
function xprime = kau(t, x, B)
theta = 0.3;
dh = 2^-9;
dp = 2^-7;
phi = 3;
ita = 1;
n = 10;
y1 = x(1:n);
y2 = x(n+1:end);
f = zeros(2*n, 1);
for i = 1:n
f(i) = y1(i) * (1 - theta * y1(i)) - y2(i) - (y1(i) * y2(i)) / (1 + y2(i)) + dh * (B(i, :) * y1);
f(n+i) = (phi * y1(i) * y2(i)) / (1 + y2(i)) - ita * y2(i) + dp * (B(i, :) * y2);
end
xprime = f;
end
Here, using the "randperm" method, you can randomly select the number of edges to rewire and remove the possibility of self looping, for more information about the "randperm" function refer to this documentation: https://www.mathworks.com/help/matlab/ref/randperm.html
0 Comments
See Also
Categories
Find more on Loops and Conditional Statements 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!