i got this differential equation:
function xdot=tresorden(t,x)
xdot=zeros(3,1);
Vp=5;
Vi=Vp*square(2*pi*t)+5;
xdot(1)=x(2);
xdot(2)=x(3);
xdot(3)=6*Vi-6*x(1)-11*x(2)-6*x(3);
xdot=[xdot(1);xdot(2);xdot(3)];
how can i represent x(1)?

댓글 수: 2

Jan
Jan 2018년 5월 21일
편집: Jan 2018년 5월 21일
BY the way, omit the last line, because it only replaces xdot by itself.
And if he wanted to use the last vector, to be entered in another function he could do it like this? :
xdot(3)=6*Vi-6*x(1)-11*x(2)-6*x(3);
x_dot=[xdot(1);xdot(2);xdot(3)]; (I chance the name of vector, for no replaces xdot)

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

 채택된 답변

jose luis guillan suarez
jose luis guillan suarez 2018년 5월 29일
편집: jose luis guillan suarez 2018년 5월 29일

0 개 추천

i'm going to collect what i have so far. this is the function:
function xdot=tresorden(t,x)
xdot=zeros(3,1);
Vp=5;
Vi=Vp*square(2*pi*t)+5
xdot = [x(2, :);
x(3, :);
6 * Vi - 6 * x(1, :) - 11 * x(2, :) - 6 * x(3, :)];
those are the commands:
%to evaluate the function
[t,x]=ode45('tresorden',[0,10],[0,0,0])
%to plot the x''
plot(t, x(:, 2));
hold on
%to plot the x'''
xdot = tresorden(t,x.').';
plot(t, xdot(:, 3));
%this should plot the x''' but it doesn't, as you can check in the graphics
in the graphics you can see that in the matlab plot the blue graphic (x''') is not the derivative of the red graphic (x'')
in the simulink output you can see that the blue graphic (x''') IS the derivative of the red graphic (x'')
i can't uderstand what is happening, perhaps there is a mistake on the definition of the function in matlab.

댓글 수: 6

Jan
Jan 2018년 5월 29일
편집: Jan 2018년 5월 29일
Running your code fails with an undefined function square(). I asked 9 days ago already... Assuming that it is the elementwise square of the input creates a completely different output:
So, Jose, please post running code. And even if someone like me suggests some code, it is your interest to debug it. It is strange, that after xdot = tresorden(t,x.').' the size of xdot is 185x187. It should be 185x3. So you have to provide the time t as row vector also:
xdot = tresorden(t.', x.').';
Then you can see, that xdot(:, 3) is the derivative of x(:, 3):
plot(t, gradient(x(:, 3), t), 'o')
hold on
plot(t, xdot(:, 3), '+')
Of course it is. Sorry for the forgotten transposition of the time vector. Using the debugger is strongly recommended in case of unexpected results.
in my system runs perfectly, perhaps is the version of matlab. It's a square wave.
Jan
Jan 2018년 5월 29일
Ah, thanks. You have the Signal Processing Toolbox installed in opposite to me.
After installing it, I get the expected results: xdot(:, 3) is the same as gradient(x(:, 3), t). I've fixed the code in my answer. Is your problem solved now?
now is fixed , thank you very much.
Jan
Jan 2018년 5월 31일
You are welcome. You can mark the question as solved by accepting an answer.
KARTHIK
KARTHIK 2023년 11월 15일
편집: KARTHIK 2023년 11월 15일
Please guide for this problem by ode45
I need to plot amplitude vs velocity

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

추가 답변 (3개)

Jan
Jan 2018년 5월 20일
편집: Jan 2018년 5월 29일

0 개 추천

This integrates the function from the start point x=[1,2,3] over the time 0 to 7:
[EDITED - bug concerning t.' fixed]
function main
[t, x] = ode45(@tresorden, [0, 7], [1,2,3]);
plot(t, x(:, 1));
xdot = tresorden(t.', x.').';
end
function xdot = tresorden(t, x)
Vp = 5;
Vi = Vp * (2*pi*t)^2 + 5; % Or what is square() ?
xdot = [x(2, :); ...
x(3, :); ...
6 * Vi - 6 * x(1, :) - 11 * x(2, :) - 6 * x(3, :)];
end
Note: Due to square you are integrating a non-smooth system. This causes numerical instabilities. See http://www.mathworks.com/matlabcentral/answers/59582#answer_72047.
jose luis guillan suarez
jose luis guillan suarez 2018년 5월 21일

0 개 추천

and that's how i obtain the code from the equation:

댓글 수: 1

Sure? I'd expect:
xdot(1) = x(2);
xdot(2) = x(3);
xdot(3) = Vi - 6*x(3) - 11*x(2) - 6*x(1);
if you convert the 3rd order equation to a system of 1st order.
But even then: ODE45 is used to solve initial value problems numerically. If you want the values of x(1), you need to run the integration from an initial value.
Please do not post parts of the question in the section for answer. And explain, what "represent differencital equation with ode45" means exactly.

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

jose luis guillan suarez
jose luis guillan suarez 2018년 5월 22일
편집: jose luis guillan suarez 2018년 5월 22일

0 개 추천

excuse if i didn't explained myself well: what i want to represent the variable selected in the picture. (if possible) and plot it with:
[t,x]=ode45('tresorden',[0,10],[0,0,0]
plot(t,x)

댓글 수: 11

Sigh. Stop adding answers every time you want to make a comment.
Jan
Jan 2018년 5월 23일
@jose luis guillan suarez: And I still repeat, that the only way to get the trajectory to x(1) is the solution of the initial value problem.
i can't understand how to solve it with initial values. I just want to represent the output of this system, represented with a differential equation. thanks.
i think that is the x''' the variable that is not plotted.
yes, i compared with the graphics from simulink and the variable not plotted is xdot(3)
I cannot follow you. Which graphics did you compare with what? You did not post any code for plotting yet. ODE45 replies a matrix of [x, x', x''] (where the quote means the derivative here!). If you want the value of the 3rd derivative, you need:
function main
[t, x] = ode45(@tresorden, [0, 7], [1,2,3]);
xdot = tresorden(t,x.').';
plot(t, x(:, 1));
hold on;
plot(t, x(:, 2));
plot(t, x(:, 3));
plot(t, xdot(:, 3));
end
function xdot = tresorden(t, x)
Vp = 5;
Vi = Vp * (2*pi*t) .^ 2 + 5;
xdot = [x(2, :); ...
x(3, :); ...
6 * Vi - 6 * x(1, :) - 11 * x(2, :) - 6 * x(3, :)];
end
But this is still an initial value problem...
yes is the 3rd derivative what i need, but i checked numerically and the
xdot = tresorden(t,x.').';
plot(t, xdot(:, 3));
it's not the 3rd derivative.
Jan
Jan 2018년 5월 26일
편집: Jan 2018년 5월 27일
@jose: Is this a serious question? xdot(:,3) is the 3rd component of the equation you have posted. You had posted an ODE of order 3, which was not equivalent to the converted system of order 1, but the original equation was deleted later. As I have written above, the 3rd component of the original ODE of order 3 would differ by a factor 6 for Vi.
xdot(3) = Vi - 6*x(1, :) - 11*x(2, :) - 6*x(3, :)
So please check your conversion of the ODE again.
Simply mentioning "it's not the 3rd derivative" is not useful in the forum. We cannot read your mind, your screen or the original equation. You have to provide the information.
the original equation is this. ¿is it possible to obtain the 3rd derivative?
@jose: You have posted and removed another equation formerly. The solution of how to get the 3rd derivative has been given repeatedly and it even occurs in the original question.
Currently my best assumption is that your "numerical checking" contains a mistake.
i checked numerically and the [...] it's not the 3rd derivative.
My best assumption is that your "numerical check" contains a mistake.
After 6 days it could not be clarified, what the actual question is or why the obvious and already posted solution does not satisfy you. Therefore I will leave this thread now.
i checked it numerically, and i compared with the result of the simulation of the system in simulink. The outputs of x'',x' and x match with the ones from matlab but x''' doesn't match. I checked it numerically and the righ output is the one from simulink. I attached the scheme of simulink.

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

카테고리

도움말 센터File Exchange에서 General Applications에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by