while solving coupled differential equation getting this problem.

2 次查看(过去 30 天)
"Unable to perform assignment because the left and right sides have a different number of elements.
Error in laser2 (line 54)
A1(i+1) = A1(i) + (h/6)*(k1+(2*(k2+k3))+k4); "
I'm having this problem in this program
format short
a = 0;
b = 30;
h = 0.1;
o = 3.5;
tc = 3.0;
tf = 2.3;
a1 = 0.1;
a2 = 0.1;
P1 = 0.2;
P2 = 0.2;
k= 1.2;
V = 1;
A1(1) = 10E-4;
A2(1) = 10E-5;
G1(1) = 10E-6;
G2(1) = 10E-6;
O(1) = 0;
n = (b-a)/h ;
t = ((a) + (0:n)*h).*10E-6;
func1 = @(G1,A1,A2,O) (1/tc).*(G1- a1).*(A1./V) +(k./tc).*(A2./V).*cos(O);
func3 = @(G2,A2,A1,O) (1/tc).*(G2- a2).*(A2./V) +(k./tc).*(A1./V).*cos(O);
func2 = @(G1) (1/tf).*(P1 - G1.*(A1.^2+1));
func4 = @(G2) (1/tf).*(P2 - G2.*(A2.^2+1));
func5 = @(A1,A2,O) o - (k./tc).*((A1./A2) + (A2./A1)).*sin(O);
for i = 1:n
k1 = feval(func1,G1(i),A1(i),A2(i),O(i));
l1 = feval(func2, G1(i));
m1 = feval(func3, G2(i),A1(i),A2(i),O(i));
n1 = feval(func4, G2(i));
q1 = feval(func5,A1(i),A2(i),O(i));
k2 = feval(func1, A2(i)+(m1/2)*h, A1(i)+(k1/2)*h, G1(i)+(l1/2)*h, O(i)+(q1/2)*h);
l2 = feval(func2, G1(i)+(l1*h/2));
m2 = feval(func3, A2(i)+(m1/2)*h, A1(i)+(k1/2)*h, G2(i)+(n1/2)*h, O(i)+(q1/2)*h);
n2 = feval(func4, G2(i)+(n1/2)*h);
q2 = feval(func5, A2(i)+(m1/2)*h, A1(i)+(k1/2)*h, O(i)+(q1/2)*h);
k3 = feval(func1, A2(i)+(m2/2)*h, A1(i)+(k2/2)*h, G1(i)+(l2/2)*h, O(i)+(q2/2)*h);
l3 = feval(func2, G1(i)+(l2*h/2));
m3 = feval(func3, A2(i)+(m2/2)*h, A1(i)+(k2/2)*h, G2(i)+(n2/2)*h, O(i)+(q2/2)*h);
n3 = feval(func4, G2(i)+(n2/2)*h);
q3 = feval(func5, A2(i)+(m2/2)*h, A1(i)+(k2/2)*h, O(i)+(q2/2)*h );
k4 = feval(func1, A2(i)+(m3*h), A1(i)+(k3*h), G1(i)+(l3*h), O(i)+(q3*h));
l4 = feval(func2, G1(i)+(l3*h));
m4 = feval(func3, A2(i)+(m3*h), A1(i)+(k3*h), G2(i)+(n3*h), O(i)+(q3*h));
n4 = feval(func4, G2(i)+(n3*h));
q4 = feval(func5, A2(i)+(m3*h), A1(i)+(k3*h), O(i)+(q3*h));
A1(i+1) = A1(i) + (h/6)*(k1+(2*(k2+k3))+k4);
G1(i+1) = G1(i) + (h/6)*(l1+(2*(l2+l3))+l4);
A2(i+1) = A2(i) + (h/6)*(m1+(2*(m2+m3))+m4);
G2(i+1) = G2(i) + (h/6)*(n1+(2*(n2+n3))+n4);
O(i+1) = O(i) + (h/6)*(q1+(2*(q2+q3))+q4);
end
subplot 211
plot(t,A1)
grid on
subplot 212
plot(t,O)
why this is happening, let me know how to solve this one?
  3 个评论
SAHIL SAHOO
SAHIL SAHOO 2022-7-6
why this is terminate in 3*10^-4, could you explain this? and how to resolve this and go further ?
because by chnaging b= 40 still it's terminate in 3

请先登录,再进行评论。

回答(1 个)

Ishan
Ishan 2022-10-28
The dimension mismatch you get is because A1(i+1) = A1(i) + (h/6)*(k1+(2*(k2+k3))+k4); in this equation on the LHS you have allocated A1 to be of size 1 times 1 while the RHS is 1 times 301(that too if the loop iterates all the way through without throwing an error).
So basically, you assigned the value of A1 as 10e-4 which is a ‘double’ value of 1*1 size. Now when you index within the for loop what is happening is that for each iteration a new Value is being appended to all the variables (thereby increasing their dimension on each iteration). As far as the graph stopping before the expected end point, that is because your loop runs for 300 iterations so the value of the variables you want to plot are calculated for the corresponding number of times. A simple fix would be to plot for over 300 values only. Although the exact coupled differential equation is unknown to me to be able to validate the results, this code should be able to resolve your current issue: -
a = 0;
b = 30;
h = 0.1;
o = 3.5;
tc = 3.0;
tf = 2.3;
a1 = 0.1;
a2 = 0.1;
P1 = 0.2;
P2 = 0.2;
k= 1.2;
V = 1;
A1(1) = 10E-4;
A2(1) = 10E-5;
G1(1) = 10E-6;
G2(1) = 10E-6;
O(1) = 0;
n = (b-a)/h ;
t = ((a) + (0:n)*h).*10E-6;
func1 = @(G1,A1,A2,O) (1/tc).*(G1- a1).*(A1./V) +(k./tc).*(A2./V).*cos(O);
func3 = @(G2,A2,A1,O) (1/tc).*(G2- a2).*(A2./V) +(k./tc).*(A1./V).*cos(O);
func2 = @(G1) (1/tf).*(P1 - G1.*(A1.^2+1));
func4 = @(G2) (1/tf).*(P2 - G2.*(A2.^2+1));
func5 = @(A1,A2,O) o - (k./tc).*((A1./A2) + (A2./A1)).*sin(O);
for i = 1:n
k1 = feval(func1,G1,A1,A2,O);
%do not use l1(i), instead you can store value of l1 in each iteration
%in that same variable
l1 = feval(func2, G1);
m1 = feval(func3, G2,A1,A2,O);
n1 = feval(func4, G2);
q1 = feval(func5,A1,A2,O);
k2 = feval(func1, A2+(m1/2)*h, A1+(k1/2)*h, G1+(l1/2)*h, O+(q1/2)*h);
l2 = feval(func2, G1+(l1*h/2));
m2 = feval(func3, A2+(m1/2)*h, A1+(k1/2)*h, G2+(n1/2)*h, O+(q1/2)*h);
n2 = feval(func4, G2+(n1/2)*h);
q2 = feval(func5, A2+(m1/2)*h, A1+(k1/2)*h, O+(q1/2)*h);
k3 = feval(func1, A2+(m2/2)*h, A1+(k2/2)*h, G1+(l2/2)*h, O+(q2/2)*h);
l3 = feval(func2, G1+(l2*h/2));
m3 = feval(func3, A2+(m2/2)*h, A1+(k2/2)*h, G2+(n2/2)*h, O+(q2/2)*h);
n3 = feval(func4, G2+(n2/2)*h);
q3 = feval(func5, A2+(m2/2)*h, A1+(k2/2)*h, O+(q2/2)*h );
k4 = feval(func1, A2+(m3*h), A1+(k3*h), G1+(l3*h), O+(q3*h));
l4 = feval(func2, G1+(l3*h));
m4 = feval(func3, A2+(m3*h), A1+(k3*h), G2+(n3*h), O+(q3*h));
n4 = feval(func4, G2+(n3*h));
q4 = feval(func5, A2+(m3*h), A1+(k3*h), O+(q3*h));
size((h/6)*(k1+(2*(k2+k3))+k4));
A1 = A1 + (h/6)*(k1+(2*(k2+k3))+k4);
G1 = G1 + (h/6)*(l1+(2*(l2+l3))+l4);
A2 = A2 + (h/6)*(m1+(2*(m2+m3))+m4);
G2 = G2 + (h/6)*(n1+(2*(n2+n3))+n4);
O = O + (h/6)*(q1+(2*(q2+q3))+q4);
%store A1 and O in separate variables and plot it w.r.t t (300 length)
y(i) = O;
x(i) = A1;
end
subplot 211
t = 1:1:300;
plot(t,x)
grid on
subplot 212
plot(t,y)
Note: You can also scale the axis as per your requirements

类别

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

标签

Community Treasure Hunt

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

Start Hunting!

Translated by