can i use more than 1 function in same m. file ? because i want to use multiple function for adapting frequency
1 回表示 (過去 30 日間)
古いコメントを表示
Hello
i want to simulate using multiple oscillators.
following figure is showing what i want to do ..
the following code is having only one oscillator. I want to simulate using 2 or more oscillators. anyone is having idea how to do simulate with multiple oscillator ?
///////////////////////////////////////////
adaptive hopf oscillator function (instead of 1 i want to use 2 same function)
///////////////////////////////////////////
function dz = myeqd(t,y,ti,xd)
dz = zeros(3,1);
mu=0.2;
r= sqrt(y(1)^2 + y(2)^2);
K=100;
F=interp1(ti,xd,t);
dz(1)= (mu - r^2)*y(1) - y(3)*y(2) +K*F;
dz(2) = (mu - r^2)*y(2) + y(3)*y(1);
dz(3) = (-K*F) * (y(2)/sqrt(y(1)^2 + y(2)^2));
///////////////////////////////////////////////////
main code
///////////////////////////////////////////////////
Tspan= 0:0.001:20; % time vector
f0=100;
f1=400;
fi = chirp(Tspan,f0,20,f1,'quadratic');
ti=Tspan;
[T,Y]=ode45(@(t,y) myeqd1(t,y,ti,fi),Tspan,[1;1;90]);
plot (T,Y(:,3));
2 件のコメント
ChristianW
2013 年 2 月 10 日
編集済み: ChristianW
2013 年 2 月 11 日
Just curious, why not use 1 ODE y' = f(t,y) with all states in statevector y?
% Osci#1
mu = 0.2; K = 100;
r = sqrt(y(1)^2 + y(2)^2);
dz(1) = (mu - r^2)*y(1) - y(3)*y(2) +K*F;
dz(2) = (mu - r^2)*y(2) + y(3)*y(1);
dz(3) = (-K*F) * (y(2)/r);
% Osci#2
mu2 = 0.2; K2 = 100;
r2 = sqrt(y(4)^2 + y(5)^2);
dz(4) = (mu2 - r2^2)*y(4) - y(6)*y(5) +K2*F;
dz(5) = (mu2 - r2^2)*y(5) + y(6)*y(4);
dz(6) = (-K2*F) * (y(5)/r2);
採用された回答
ChristianW
2013 年 2 月 11 日
- The attempt having myeqd1, myeqd2, myeqd3, ... and then solve them with ode45(myeqd1,...); ode45(myeqd2,...); ... etc is bad in general.
- At your figure the oscillators are connected. If they influence each other, you need all oscillators in one ODE.
- Whats the difference between Osci#1 and #2? Only mu and K?
- My example above only shows that possibility. If you try it, you should still use "multiple functions":
function dy = myeqd(t,y,ti,xd)
dy = zeros(size(y));
F = interp1(ti,xd,t);
dy(1:3) = Osci(y(1:3),F,0.2,100); % Osci#1, Osci(y,F,mu,K)
dy(4:6) = Osci(y(4:6),F,0.1,120); % Osci#2
function dz = Osci(z,F,mu,K)
r = sqrt(z(1)^2 + z(2)^2);
dz = [ (mu - r^2)*z(1) - z(3)*z(2) + K*F
(mu - r^2)*z(2) + z(3)*z(1)
-K*F * z(2)/r ];
3 件のコメント
その他の回答 (1 件)
Walter Roberson
2013 年 2 月 10 日
Yes, it is quite valid to have more than one function in a .m file.
Only the first of the functions (the one the file is named with) will be directly callable from outside the .m file; other .m files would need to somehow have been given a function handle before they could call the other functions.
In your situation where you are passing in an anonymous function, that is sufficient for ode45 to get the function handle to be able to call the function referred to in the anonymous function.
2 件のコメント
Walter Roberson
2013 年 2 月 10 日
What error did you encounter when you tried to put multiple functions in the same file?
参考
カテゴリ
Help Center および File Exchange で Numerical Integration and Differential Equations についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!