필터 지우기
필터 지우기

Wrong,all the time(Equation(6) is y(i,6), not dy(6))

조회 수: 2 (최근 30일)
jixie zhuangbei
jixie zhuangbei 2015년 7월 22일
댓글: jixie zhuangbei 2015년 7월 23일
Equation:
dy(1)=-1.918298553*y(3)*y(4)-121.6697369*y(5)*y(2)+0.006472085*y(2)*y(2)+15.25250926*y(5)*y(5)-0.518363603*sin(2.047*t)+0.001124759;
dy(2)=0.007229182*y(5)*y(1)-0.013867729*y(3)-0.005151943*sin(2.047*t)+33.43424564*y(4)*y(5)-0.092169794*y(3)*y(2)-0.698266828;
dy(3)=72.10986245*y(2)+0.52129529*y(4)*y(1)+0.025471074*y(3)+921.886526*y(4)/y(1)-0.47870471*y(4)+0.025471074*y(1)*t-0.38220722*cos(2.047*t)-4.62279911;
dy(4)=-57.37263009*y(5)+0.001053501*y(3)*y(1)+20.28825016/y(1)-0.001053501*y(3)+0.064741605*y(4)+20.28825016*t-0.006201915*sin(2.047*t)-3651.885374303154;
dy(5)=0.017284293*y(4)+0.00278644*y(1)*y(2)-0.551218454*y(2)*y(5)*y(5)+0.010839281*y(2)*y(2)*y(5)+0.020353114*cos(2.047*t)+0.110594984;
y(i,6) = -178075801.6*y(i,4)*y(i,5)+X*y(i,3)*y(i,2)+1119396.815471592+7481.104004*sin(2.047*t(i));
In order to solve the equations, I edited 2 M files. In equation (6), X is coefficient which varies with t(t is time)
【ODE451_main】
clc;clear
tspan=[0,180];
y0=[1e-5;0;0;0;0];
[t,y]=ode23('ODE45_fun',tspan,y0);
[m,n]=size(y);
for i=1:m
t=[0 25 50 70 80 100 180];
x=[0 5 7 9 10 11 14];
k = 3;
p=polyfit(t,x,k);
syms t;%syms t Y;
X = [t^3 t^2 t 1]* p';
z =-178075801.6*y(i,4)*y(i,5)+X*y(i,3)*y(i,2)+1119396.815471592+7481.104004*sin(2.047*t(i));
Z = matlabFunction(z);
end
data=[t,y];
save ODE45_data.txt data -ascii
subplot(2,3,1),plot(t,y(:,1)),title('y(1)')
xlabel('t');ylabel('y');
subplot(2,3,2),plot(t,y(:,2)),title('y(2)')
xlabel('t');ylabel('y');
subplot(2,3,3),plot(t,y(:,3)),title('y(3)')
xlabel('t');ylabel('y');
subplot(2,3,4),plot(t,y(:,4)),title('y(4)')
xlabel('t');ylabel('y');
subplot(2,3,5),plot(t,y(:,5)),title('y(5)')
xlabel('t');ylabel('y');
subplot(2,3,6),plot(t,Z),title('Z')
xlabel('t');ylabel('Z');
grid on
【ODE45_fun】
function dy=ODE45_fun(t,y)
dy(1)=-1.918298553*y(3)*y(4)-121.6697369*y(5)*y(2)+0.006472085*y(2)*y(2)+15.25250926*y(5)*y(5)-0.518363603*sin(2.047*t)+0.001124759;
dy(2)=0.007229182*y(5)*y(1)-0.013867729*y(3)-0.005151943*sin(2.047*t)+33.43424564*y(4)*y(5)-0.092169794*y(3)*y(2)-0.698266828;
dy(3)=72.10986245*y(2)+0.52129529*y(4)*y(1)+0.025471074*y(3)+921.886526*y(4)/y(1)-0.47870471*y(4)+0.025471074*y(1)*t-0.38220722*cos(2.047*t)-4.62279911;
dy(4)=-57.37263009*y(5)+0.001053501*y(3)*y(1)+20.28825016/y(1)-0.001053501*y(3)+0.064741605*y(4)+20.28825016*t-0.006201915*sin(2.047*t)-3651.885374303154;
dy(5)=0.017284293*y(4)+0.00278644*y(1)*y(2)-0.551218454*y(2)*y(5)*y(5)+0.010839281*y(2)*y(2)*y(5)+0.020353114*cos(2.047*t)+0.110594984;
dy=[dy(1);dy(2);dy(3);dy(4);dy(5)];
  댓글 수: 1
Stephen23
Stephen23 2015년 7월 22일
편집: Stephen23 2015년 7월 22일
Please format your code properly to make it readable. This means doing all of these steps:
  1. edit your question.
  2. remove all empty lines form the code
  3. select the code
  4. click the {} Code button that you will find above the textbox.
Currently your code is unreadable. Also you might like to actually ask a question.

댓글을 달려면 로그인하십시오.

채택된 답변

Torsten
Torsten 2015년 7월 22일
Instead of your for-loop, use
t0=[0 25 50 70 80 100 180];
x=[0 5 7 9 10 11 14];
k = 3;
p=polyfit(t0,x,k);
X=polyval(p,t);
y(:,6)=-178075801.6*y(:,4).*y(:,5)+X.*y(:,3).*y(:,2)+1119396.815471592+7481.104004*sin(2.047*t(:));
Best wishes
Torsten.
  댓글 수: 5
Torsten
Torsten 2015년 7월 23일
Technically, your code works, but ODE23 is not able to integrate your equations properly (only up to t=1e-23 s). You should check them again for errors.
I guess that the division by y(1) in equations 3 and 4 causes the trouble.
Best wishes
Torsten.
jixie zhuangbei
jixie zhuangbei 2015년 7월 23일
Thank you very much!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Equation Solving에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by