my rand operation is applied correctly, I think but it's not working.

2 次查看(过去 30 天)
clear
ti = 0;
tf = 10E-3;
tspan=[ti tf];
y0=[1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 0; 0 ; 0; 0; 0]*10E-4;
yita_mn = [0 1 0 0 1; 1 0 1 0 0; 0 1 0 1 0; 0 0 1 0 1; 1 0 0 1 0]*(1E-3);
N = 5;
tp = 5.4E-9;
[T,Y]= ode45(@(t,y) rate_eq(t,y,yita_mn,N),tspan,y0);
Unable to perform assignment because the left and right sides have a different number of elements.

Error in solution>rate_eq (line 42)
dOdt(i) = o(1,:);

Error in solution (line 9)
[T,Y]= ode45(@(t,y) rate_eq(t,y,yita_mn,N),tspan,y0);

Error in odearguments (line 92)
f0 = ode(t0,y0,args{:}); % ODE15I sets args{1} to yp0.

Error in ode45 (line 107)
odearguments(odeIsFuncHandle,odeTreatAsMFile, solver_name, ode, tspan, y0, options, varargin);
% time =T./tp done, because to measure the time in unit of tp
plot(T./tp,Y(:,16));
function dy = rate_eq(t,y,yita_mn,N)
dy = zeros(4*N,1);
dGdt = zeros(N,1);
dAdt = zeros(N,1);
dOdt = zeros(N,1);
P = 16.7;
a = 0.1;
tc = 230E-6;
tp =5.4E-9;
o = [1 2 32 421 2]*10E2;
k_c = 1/tp;
Gt = y(1:3:3*N-2);
At = y(2:3:3*N-1);
Ot = y(3:3:3*N-0);
%A is the amplitude
%G is the gain
%O is the phase
for i = 1:N
dGdt(i) = (P - Gt(i).*((abs(At(i)))^2 +1))./tc ;
dAdt(i) = (Gt(i)-a).*((At(i))./tp);
dOdt(i) = o(1,:);
for j = 1:N
dAdt(i) = dAdt(i)+yita_mn(i,j)*k_c*(At(j))*cos(Ot(j)-Ot(i));
dOdt(i) = dOdt(i)+yita_mn(i,j)*k_c*((At(j)/At(i)))*sin(Ot(j)-Ot(i));
end
end
dy(1:3:3*N-2) = dGdt;
dy(2:3:3*N-1) = dAdt;
dy(3:3:3*N-0) = dOdt;
dy(16)= dy(6) - dy(3);
dy(17)= dy(9) - dy(6);
dy(18)= dy(12) - dy(6);
dy(19)= dy(15) - dy(12);
dy(20)= dy(3) - dy(15);
end

采纳的回答

Chunru
Chunru 2022-8-29
Check out the line:
dOdt(i) = o(i); %o(1,:);
ti = 0;
tf = 10E-3;
tspan=[ti tf];
y0=[1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 0; 0 ; 0; 0; 0]*10E-4;
yita_mn = [0 1 0 0 1; 1 0 1 0 0; 0 1 0 1 0; 0 0 1 0 1; 1 0 0 1 0]*(1E-3);
N = 5;
tp = 5.4E-9;
[T,Y]= ode45(@(t,y) rate_eq(t,y,yita_mn,N),tspan,y0);
plot(T./tp,Y(:,16));
function dy = rate_eq(t,y,yita_mn,N)
dy = zeros(4*N,1);
dGdt = zeros(N,1);
dAdt = zeros(N,1);
dOdt = zeros(N,1);
P = 16.7;
a = 0.1;
tc = 230E-6;
tp =5.4E-9;
o = [1 2 32 421 2]*10E2;
k_c = 1/tp;
Gt = y(1:3:3*N-2);
At = y(2:3:3*N-1);
Ot = y(3:3:3*N-0);
%A is the amplitude
%G is the gain
%O is the phase
for i = 1:N
dGdt(i) = (P - Gt(i).*((abs(At(i)))^2 +1))./tc ;
dAdt(i) = (Gt(i)-a).*((At(i))./tp);
dOdt(i) = o(i); %o(1,:);
for j = 1:N
dAdt(i) = dAdt(i)+yita_mn(i,j)*k_c*(At(j))*cos(Ot(j)-Ot(i));
dOdt(i) = dOdt(i)+yita_mn(i,j)*k_c*((At(j)/At(i)))*sin(Ot(j)-Ot(i));
end
end
dy(1:3:3*N-2) = dGdt;
dy(2:3:3*N-1) = dAdt;
dy(3:3:3*N-0) = dOdt;
dy(16)= dy(6) - dy(3);
dy(17)= dy(9) - dy(6);
dy(18)= dy(12) - dy(6);
dy(19)= dy(15) - dy(12);
dy(20)= dy(3) - dy(15);
end
  2 个评论
SAHIL SAHOO
SAHIL SAHOO 2022-8-29
clear
ti = 0;
tf = 10E-3;
tspan=[ti tf];
y0=[1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 0; 0 ; 0; 0; 0]*10E-4;
yita_mn = [0 1 0 0 1; 1 0 1 0 0; 0 1 0 1 0; 0 0 1 0 1; 1 0 0 1 0]*(1E-3);
N = 5;
tp = 5.4E-9;
[T,Y]= ode45(@(t,y) rate_eq(t,y,yita_mn,N),tspan,y0);
plot(T./tp,Y(:,20));
function dy = rate_eq(t,y,yita_mn,N)
dy = zeros(4*N,1);
dGdt = zeros(N,1);
dAdt = zeros(N,1);
dOdt = zeros(N,1);
P = 16.7;
a = 0.1;
tc = 230E-6;
tp =5.4E-9;
o = rand(1,5)*10E2
k_c = 1/tp;
Gt = y(1:3:3*N-2);
At = y(2:3:3*N-1);
Ot = y(3:3:3*N-0);
%A is the amplitude
%G is the gain
%O is the phase
for i = 1:N
dGdt(i) = (P - Gt(i).*((abs(At(i)))^2 +1))./tc ;
dAdt(i) = (Gt(i)-a).*((At(i))./tp);
dOdt(i) = o(1,i); %o(1,:);
for j = 1:N
dAdt(i) = dAdt(i)+yita_mn(i,j)*k_c*(At(j))*cos(Ot(j)-Ot(i));
dOdt(i) = dOdt(i)+yita_mn(i,j)*k_c*((At(j)/At(i)))*sin(Ot(j)-Ot(i));
end
end
dy(1:3:3*N-2) = dGdt;
dy(2:3:3*N-1) = dAdt;
dy(3:3:3*N-0) = dOdt;
dy(16)= dy(6) - dy(3);
dy(17)= dy(9) - dy(6);
dy(18)= dy(12) - dy(6);
dy(19)= dy(15) - dy(12);
dy(20)= dy(3) - dy(15);
end
I have a doubt here, why I'm getting lots of random value, i use rand(1,5) so i should get 1 cross 5 matrix with random value, but i got lots of random value.
Chunru
Chunru 2022-8-29
It seems that "o = rand(1,5)*10E2" should be a variable outside of function rate_eq.
ti = 0;
tf = 10E-3;
tspan=[ti tf];
y0=[1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 1; 1; 0; 0; 0 ; 0; 0; 0]*10E-4;
yita_mn = [0 1 0 0 1; 1 0 1 0 0; 0 1 0 1 0; 0 0 1 0 1; 1 0 0 1 0]*(1E-3);
N = 5;
o = rand(1,5)*10E2 % <==============
o = 1×5
999.7924 590.6161 103.2922 271.9314 209.2086
tp = 5.4E-9;
[T,Y]= ode45(@(t,y) rate_eq(t,y,yita_mn,N, o),tspan,y0);
plot(T./tp,Y(:,20));
function dy = rate_eq(t,y,yita_mn,N, o) % o as parameters
dy = zeros(4*N,1);
dGdt = zeros(N,1);
dAdt = zeros(N,1);
dOdt = zeros(N,1);
P = 16.7;
a = 0.1;
tc = 230E-6;
tp =5.4E-9;
k_c = 1/tp;
Gt = y(1:3:3*N-2);
At = y(2:3:3*N-1);
Ot = y(3:3:3*N-0);
%A is the amplitude
%G is the gain
%O is the phase
for i = 1:N
dGdt(i) = (P - Gt(i).*((abs(At(i)))^2 +1))./tc ;
dAdt(i) = (Gt(i)-a).*((At(i))./tp);
dOdt(i) = o(1,i); %o(1,:);
for j = 1:N
dAdt(i) = dAdt(i)+yita_mn(i,j)*k_c*(At(j))*cos(Ot(j)-Ot(i));
dOdt(i) = dOdt(i)+yita_mn(i,j)*k_c*((At(j)/At(i)))*sin(Ot(j)-Ot(i));
end
end
dy(1:3:3*N-2) = dGdt;
dy(2:3:3*N-1) = dAdt;
dy(3:3:3*N-0) = dOdt;
dy(16)= dy(6) - dy(3);
dy(17)= dy(9) - dy(6);
dy(18)= dy(12) - dy(6);
dy(19)= dy(15) - dy(12);
dy(20)= dy(3) - dy(15);
end

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by