我怎么返回一个额外的参数使用Matlab的颂歌解决吗?

12个视图(30天)
我想返回一个参数,r, ode的解决方案,但该参数不能整合。然而,重要的是结果和后处理。我想让r是一个向量的长度匹配t所以我能做的
情节(t, r)
棘手的部分对我来说似乎脱颖而出的例子我看过论坛是与时间有关的变量及其衍生品依赖r反过来依赖于一个布尔变量状态。这意味着很难计算r从ode解决方案基于输出结果变量。
我的代码是
清晰;关闭所有;clf;clc
t_span = [0 1];
y_0 = (0, 2);
env。g = 9.81;
图(101);持有
选择= odeset (“AbsTol”1 e-6“RelTol”1 e-6“统计数据”,“上”);
[t、y] =数值(@my_ode_fcn、t_span y_0,选项,env);
图(1)
情节(t, y (: 1))
包含(“时间t [s]”)
ylabel (的位置,x [m])
图(2)
情节(t、y (:, 2))
包含(“时间t [s]”)
ylabel (“速度,u (m / s)”)
函数dydt = my_ode_fcn (t y env)
持续的state_flag
如果isempty (state_flag);state_flag = 0;结束
x = y (1);
u = y (2);
g = env.g;
如果~ state_flag
r = 20 + 50 * t;
其他的
r = 20 + 10 * t;
结束
如果(r > 30) & & ~ state_flag
state_flag = 1;
sprintf (“州旗= % d 'state_flag)
结束
如果(r > 27)
xdot = 2 * u;
ydot = - g * x;
其他的
xdot = 3 * u;
ydot = 2 * g * x;
结束
图(101)
情节(t, r,‘*’)
dydt = 0(长度(y), 1);
dydt (1) = xdot;
dydt (2) = ydot;
结束
我试过了所有的建议在这个线程,但是都没用到目前为止:
syggestions吗?
1评论
1月
1月 2019年11月20日
编辑:1月 2019年11月20日
你是采用数值积分non-mooth函数。Matlab的颂歌集成商不指定积分不连续。由于步长控制器驱动疯了。不幸的是你可能会最终值,但这不是一个科学计算,积累的舍入误差轨迹可以主宰轨迹。 数值不连续性
使用事件处理不连续的函数。你必须重新启动集成后的每个变化的功能。
内设置stateflag功能集成和使用一个持久的变量来存储一个错误也:记住,ODE积分器可以拒绝步骤,如果当地的舍入误差超出公差。这意味着,国家migt切换在拒绝了一步,下面的短时间步是无效的。
使用匿名函数提供参数: 答案:匿名为参数

登录置评。

接受的答案

1月
1月 2019年11月20日
如果我的评论中提到的问题是固定的,解决方案很简单:运行集成。然后提供calcualted时间和轨迹作为输入 my_ode_fcn 和出口希望值为2的输出。因此这个函数必须矢量化,或者在一个循环中呼吁每个时间点。
看到
1评论
oski89
oski89 2019年11月20日
谢谢你1月的疯狂快回复!
明天我一定会仔细看。

登录置评。

更多的答案(0)

类别

找到更多的在编程帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!