parameters - 如何在 Scilab 的 ode-solver 中包含时间相关变量?
问题描述
我目前正在解决一个非线性 ODE 系统。这是一组运动学运动方程,我需要计算给定角速度的位置角
我发现了如何使用列表添加依赖于时间的函数,但问题是,如何添加一个也依赖于时间但作为向量给出的参数。
简化是用以下代码编写的。c(t) 是时间函数。
function dx = f(t, x, c)
dx(1) = x(1)*sin(x(2))
dx(2) = c*x(2)*cos(x(1))
dx(3) = t*cos(x(3))
endfunction
c = 1:32; // values from measured signal, here simplyfied
y0 = [0.1;0.1;0.1];
t0 = 0;
t = 0:0.1:%pi;
y = ode(y0, t0, t, list (f, c));
解决方案
看
- https://help.scilab.org/doc/5.5.2/en_US/interp1.html和
- https://help.scilab.org/doc/5.5.2/en_US/interpln.html
关于如何将函数表转换为插值函数。
使用interpln
线性插值
dx=f(t,x,tc_arr)
本质上,在您评估的右侧函数中
function dx=f(t,x,tc_arr)
c = interpln(tc_arr, t)
dx(1) = x(1)*sin(x(2))
dx(2) = c*x(2)*cos(x(1))
dx(3) = t*cos(x(3))
endfunction
其中tcarr
包含采样时间和采样值的数组。
用于测试的示例信号
作为示例信号,取
t_sam = -1:0.5:4;
c_sam = sin(2*t_sam+1);
tc_arr = [ t_sam; c_sam ];
请注意,您总是需要采样时间来了解输入时间t
与值数组的关系。
t = 1.23;
c = interpln(tc_arr, t)
返回c = - 0.2719243
。
使用interp1
一维插值(带样条)
您也可以使用其他功能,它在插值方法方面有更多选择。
function dx=f(t,x,t_sam,c_sam)
c = interp1(t_sam, c_sam, t, "spline", "extrap")
dx(1) = x(1)*sin(x(2))
dx(2) = c*x(2)*cos(x(1))
dx(3) = t*cos(x(3))
endfunction
推荐阅读
- anaconda-cluster - 安装 Anaconda 重力时出现错误。请参阅以下错误
- python - 决策树中的路径
- javascript - 外部链接在动态模板 Blogger 中不起作用
- c++ - now() 无法转换为 sys_days!我需要今天的日期从现在开始()
- c# - 如何从异常处理中排除当前选定的项目
- mysql - MySQL选择哪里/喜欢
- ruby-on-rails - rails,相关字段在提交时未保存
- python - TensorFlow 版本的 Pytorch 变换
- python - Selenium 和验证码 - Python
- binary-tree - (最大)堆什么时候可以成为 BST?