matlab - 在matlab中将符号变量分配给数值变量

标签 matlab ode differential-equations

我有符号变量:

[q dq ddq n]

q=[q1; q2];
dq=[dq1; dq2];
ddq=[ddq1; ddq2];

变量n

 n=[2*dq1 + (83*dq1*dq2)/400;
   (83*dq1^2)/800 + 2*dq2]

我正在尝试使用变量获取 ODE 函数的值:

state=[q; dq];
u=[5;5];

q1=state(1);
q2=state(2);
dq1=state(3);
dq2=state(4);

dxdt1=dq1;
dxdt2=dq2;
ddxdt=inv(B)*(u-n);  %which is 2x1 matrix
                     %B is a 2x2 numeric matrix
dstate=[dxdt1; dxdt2; ddxdt];

使用这个变量我尝试获得方程的解

t0=0;
tf=1;
N=10;
tspan=linspace(t0,tf,N);

x0=[0.5; 0.5;zeros(2,1)];
function_q=@(tspan,state)ode_system(tspan,state,B,n,u);

odesystem 在哪里

function dydt=ode_system(time, state,B,n_t,u)
q1=state(1);
q2=state(2);
dq1=state(3);
dq2=state(4);

dxdt1=dq1;
dxdt2=dq2;
ddxdt=inv(B)*(u-n_t);
dydt=[dxdt1; dxdt2; ddxdt]

end

最后我尝试计算

[tout,xout]=ode45(function_q, tspan, x0)

当我运行代码时,它给出一个错误并说

Error using odearguments (line 110) Inputs must be floats, namely single or double.

Error in ode45 (line 115) odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

Error in mainfunc (line 140) [tout,xout]=ode45(function_q, tspan, x0) try open('Error using odearguments (line 110) ↑ Error: String is not terminated properly.

我认为问题是由于将符号变量放入 ode45 函数引起的。我怎么解决这个问题?如何以数值形式定义 n 矩阵

最佳答案

问题在于 ode_system 返回值的类型。因为 n_t 是符号性的,所以 dydt 也是符号性的,而 ode45 不喜欢这样。在 ode_system 中,尝试使用 subsn_t 中的变量替换为相应的值。然后使用 double 将符号数字转换为“常规”数字。如果你制作一个更大的系统,这会很慢,但现在应该没问题。

function dydt=ode_system(time, state,B,n_t,u)
q1=state(1);
q2=state(2);
dq1=state(3);
dq2=state(4);

dxdt1=dq1;
dxdt2=dq2;
free_vars = sym({'dq1','dq2'});
free_values = [dq1,dq2];
n_t = subs(n_t, free_vars, free_values);
n_t = double(n_t);
ddxdt=inv(B)*(u-n_t);
dydt=[dxdt1; dxdt2; ddxdt]

end

关于matlab - 在matlab中将符号变量分配给数值变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33689787/

相关文章:

matlab - 线条霍夫变换

python - 多维欧拉法python

python - 在Python中求解具有时间相关系数的常微分方程(odeint)

python - 如何将 GEKKO 解决方案转换为浮子

python - Scipy:实现微分方程的两种方法:两种不同的解决方案:已回答

matlab - 如何获取文件名的路径部分?

图像的Matlab大小

r - 求解 ODE - 只有正解

python - 需要帮助解决 python 中的二阶非线性 ODE

Java LinkedList 到 matlab 数组