How to solve nonlinear equation?
1 次查看(过去 30 天)
显示 更早的评论
采纳的回答
Sam Chak
2022-12-21
Hi @GUANGHE HUO
The nonlinear matrix ODE with time-varying stiffness matrix K can be transformed into a nonlinear state-space model. See example below.
tspan = [0 40];
x0 = [1 0.5 0 0];
[t, x] = ode45(@odefcn, tspan, x0);
plot(t, x), grid on, xlabel('t')
function xdot = odefcn(t, x)
xdot = zeros(4, 1);
M = diag([3 5]);
C = 2*eye(2);
K = [1+0.5*sin(2*pi/40*t) 0; 0 1+0.5*sin(2*pi/40*t)]; % time-varying K
A = [zeros(2) eye(2); -M\K -M\C];
B = [zeros(2); eye(2)];
F = [0; 0]; % Requires your input
u = M\F;
xdot = A*x + B*u;
end
4 个评论
Sam Chak
2022-12-23
Hi @GUANGHE HUO
I use ordinary numeric array in my simulations. Perhaps you can try using the cell2mat() command to convert the selected cell array into the desired numeric array.
If your Force vector
and the Stiffness matrix
are time series data (cannot be expressed in any fundamental mathematical form), then you need to use the interp1() function to interpolate
and
to obtain the value of the time-dependent terms at the specified time.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1241362/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1241367/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1241372/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1241377/image.png)
Here is an example of using a data-driven Force to stabilize the Double Integrator system:
% Force data set recorded over some intervals of time
ft = linspace(0, 20, 2001);
f = 2*exp(-ft).*ft - exp(-ft).*(1 + ft); % made-up to generate the data
tspan = [0 20];
y0 = [1 0];
opts = odeset('RelTol', 1e-4, 'AbsTol', 1e-8);
[t, y] = ode45(@(t, y) doubleInt(t, y, ft, f), tspan, y0, opts);
plot(t, y), grid on, xlabel('t'), ylabel('Y(t)')
legend('y_{1}(t)', 'y_{2}(t)')
% Double Integrator system
function dydt = doubleInt(t, y, ft, f)
dydt = zeros(2, 1);
f = interp1(ft, f, t); % Interpolate the data set (ft, f) at time t
dydt(1) = y(2);
dydt(2) = f;
end
更多回答(1 个)
另请参阅
类别
在 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!