Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用MATLAB求解二阶微分方程组

用MATLAB求解二阶微分方程组
EN

Stack Overflow用户
提问于 2021-11-26 04:10:43
回答 1查看 61关注 0票数 0

我试图解决一个弹丸运动问题,在给定的初始条件下,确定起飞速度,这个问题被归结为一个由两个二阶微分方程组成的方程组。我的代码和问题在下面的图片中。问题方程中的常数的值被简化为常数abcd

代码语言:javascript
运行
AI代码解释
复制
(t)=-1/2m ρAC_d cos⁡(arctan⁡(((t))/((t) )))(〖x˙(t)^2+ 〖y˙(t)^2)
(t)=-1/2m(2mg+ρAC_d sin⁡(arctan⁡(((t))/((t) )))(〖x˙(t)^2+ 〖y˙(t)^2)

# With the initial conditions:

(0)=cosθ ∙ V_0

(0)=sinθ ∙ V_0

x(0)=0

y(0)=0

我的解决方案代码如下所示;

代码语言:javascript
运行
AI代码解释
复制
syms x(t) y(t) a b c d u theta
% Equations
% d2x = -a*cos(arctan(dy/dx))*(((dx)^2)+(dy)^2));
% d2y = -b*(c + d*sin(arctan(dy/dx))*(((dx)^2)+(dy)^2));

%Constants
dx=diff(x,t);
dy=diff(y,t);
d2x=diff(x,t,2);
d2y=diff(y,t,2);
a=1;
b=2;
c=3;
d=4;

%Initial Conditions

cond1 = x(0) == 0;
cond2 = y(0) == 0;
cond3 = dx(0) == u*cos(theta);
cond4 = dy(0) == u*sin(theta);

conds = [cond1 cond2 cond3 cond4];

eq1 = -a*cos(atan(dy/dx))*(((dx)^2)+(dy)^2);
eq2 = -b*(c + d*sin(atan(dy/dx))*(((dx)^2)+(dy)^2));

vars = [x(t); y(t)];
V = odeToVectorField([eq1,eq2]);
M = matlabFunction(V,'vars', {'t','Y'});
interval = [0 5];  %time interval    
ySol = ode23(M,interval,conds);

错误信息如下所示;

代码语言:javascript
运行
AI代码解释
复制
Error using mupadengine/feval (line 187)
System contains a nonlinear equation in 'diff(y(t), t)'. The system must be quasi-linear:
highest derivatives must enter the differential equations linearly.

Error in odeToVectorField>mupadOdeToVectorField (line 189)
T = feval(symengine,'symobj::odeToVectorField',sys,x,stringInput);

Error in odeToVectorField (line 138)
sol = mupadOdeToVectorField(varargin);

Error in velocity_takeoff (line 29)
V = odeToVectorField([eq1,eq2]);

为什么我会得到这些错误,我如何才能减轻这些错误?

EN

回答 1

Stack Overflow用户

发布于 2021-11-26 10:19:51

这看起来不太理想。没有必要使用三角函数,特别是在使用的形式中,它们可能会引入符号错误,请使用atan2来避免这种情况。方程是一种简化形式。

代码语言:javascript
运行
AI代码解释
复制
as vectors dv/dt = -g*e_2 - k*speed*v, where speed = |v| is the norm of the vector
and additionally dxy/dt=v,  xy=[x,y] being the position vector

在组件中实现,这给出了

代码语言:javascript
运行
AI代码解释
复制
function du_dt = motion(t,u)
  x=u(1); y=u(2); vx=u(3); vy=u(4);
  speed = hypot(vx,vy);
  ax = -k*speed*vx;
  ay = -k*speed*vy - g;
  du_dt = [vx; vy; ax; ay];
end%function

This direct implementation is shorter and better readable than the way via symbolic equations.

You can adapt this for the different constants used, but any change in the constant structure is unphysical, or would need to be justified with some uncommon physical arguments.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70124207

复制
相关文章
【(图) 旅游规划 (25 分)】【Dijkstra算法】
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int maxn = 500; const int INF = 0x3f3f3f3f; struct Road { int _len; int _cost; }road[maxn][maxn]; int vis[maxn]; struct City { int _len; in
_DIY
2019/09/29
3020
【(图) 旅游规划 (25 分)】【Dijkstra算法】
【图】Dijkstra算法
正文之前 好久没弄C++了,上学期颓废了半学期,这学期开学就搞课程设计快疯了。待会要考试CSP,所以弄点代码储备,待会到了考场说不定能省点功夫! 正文 #include<iostream> usin
用户1687088
2018/07/24
1.1K0
【图】Dijkstra算法
图算法|Dijkstra算法python实现
01 — Dijkstra算法的理论部分 关于Dijkstra算法的原理部分,请参考之前的推送: 图算法|Dijkstra最短路径算法 Dijkstra算法总结如下: 1. 此算法是计算从入度为0的起始点开始的单源最短路径算法,它能计算从源点到图中任何一点的最短路径,假定起始点为A 2. 选取一个中心点center,是S集合中的最后一个元素,注意起始点到这个点的最短距离已经计算出来,并存储在dist字典中了。 3. 因为已经求出了从A->center的最短路径,所以每次迭代只需要找出center->{有关
double
2018/04/02
3.3K0
图算法|Dijkstra算法python实现
图算法|Dijkstra最短路径算法
01 — 单源最短路径 首先解释什么是单源最短路径,所谓单源最短路径就是指定一个出发顶点,计算从该源点出发到其他所有顶点的最短路径。如下图所示,如果源点设为A,那么单源最短路径问题,就是求解从A到B,
double
2018/04/02
6.4K0
图算法|Dijkstra最短路径算法
Dijkstra双栈表达式求值算法
以表达式"(1+((2+3)*(4*5)))"为例: 算法分四个步骤: 将操作数压入操作数栈 将运算符压入运算符栈 忽略左括号 在遇到右括号时,弹出一个运算符并弹出所需数量的操作数,运算结果并将结果压入操作数栈 处理完最后一个右括号后,操作数栈中只剩下一个数,就是表达式的值。 public class expression { public static void main(String[] args) { Stack<Character> ops = new Stack<Character>();/
SuperHeroes
2018/05/30
6470
图算法之bfs、dfs、prim、Dijkstra
概述 在图算法中经常要执行遍历每个顶点和每条边的操作,即图搜索。许多图算法都以图搜索为基础,如2-着色问题、连通性计算基于深度优先搜寻(depth-first search, DFS),而无权最短路径则基于广度优先搜索(breadth-first search, BFS)。基于搜索的算法还包括计算最小生成树的Prim算法以及计算最短路径的Dijkstra算法。图实现算法在现实的算法结构中占据重要的部分。 图 图的定义 图G是由顶点的有穷集合,以及顶点之间的关系组成,顶点的集合记为V,顶点之间的关系构成边的集
xiangzhihong
2018/02/06
2.9K0
图算法之bfs、dfs、prim、Dijkstra
Dijkstra算法
nx.info: [1, 2, 3, 4, 6, 7, 8, 9, 10, 11] 顶点 v1 到 顶点 v11 的最短加权路径: [1, 2, 3, 7, 10, 9, 11] 顶点 v1 到 顶点 v11 的最短加权路径长度: 9
裴来凡
2022/05/29
4150
Dijkstra算法
有趣的算法(五) ——Dijkstra双栈四则运算
有趣的算法(五)——Dijkstra双栈四则运算 (原创内容,转载请注明来源,谢谢) 一、概念 近期看到算法书上,提到dijkstra双栈的方法,实现输入一个四则运算的字符串,输出结果。 其实质上,就是利用两个栈,一个存储数字,一个存储运算符,再通过括号进行判定是否需要取出内容。 二、分析 为方便说明,现假设运算的字符串为(3*(8-2))。其中,为简化算法,假定每两个数的运算都要加上括号(对于不加括号的算法,后面会讨论到)。 运算的过程如下: 1)初始化两个栈,分别用于存放运算
用户1327360
2018/03/07
2K0
Dijkstra算法
Dijkstra算法使用了广度优先搜索解决赋权有向图(或无向图)的单源最短路径问题。
mwangblog
2019/05/16
1.1K0
Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其它全部节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但因为它遍历计算的节点非常多,所以效率低。
全栈程序员站长
2021/12/05
4600
dijkstra算法原理是什么?dijkstra算法的缺点是什么?
dijkstra算法也被称为狄克斯特拉算法,是由一个名为狄克斯特拉的荷兰科学家提出的,这种算法是计算从一个顶点到其他各个顶点的最短路径,虽然看上去很抽象,但是在实际生活中应用非常广泛,比如在网络中寻找路由器的最短路径就是通过该种算法实现的。那么dijkstra算法原理是什么?dijkstra算法的缺点是什么?
用户8739990
2021/06/25
8.7K0
Dijkstra 算法的 python 实现
离散课上图论的时候讲了理论知识,但是还没实践过,于是拿python写了一下,顺便做个笔记防止忘记。
赤道企鹅
2022/08/01
7510
漫画:Dijkstra 算法的优化
在上一篇漫画中,小灰介绍了单源最短路径算法 Dijkstra,没看过的小伙伴可以看下:
小灰
2020/04/22
5940
带权二分图最优匹配(KM)
KM算法是在匈牙利算法的基础上衍生,在二分图匹配的问题上增加权重,变成了一个带权二分图匹配问题,求最优的二分图匹配。
AngelNH
2020/04/16
4.2K0
dijkstra算法python实现
MAX_value = 999999 def dijkstra(graph, s): # 判断图是否为空,如果为空直接退出 if graph is None: return None dist = [MAX_value]*len(graph) dist[s] = 0 S = [] Q = [i for i in range(len(graph))] dist_init = [i for i in graph[s]] whil
py3study
2020/01/06
8150
dijkstra算法python实现
Dijkstra算法例子
%d 输出 向量 路径长度,若t==[],则返回从起点到所有节点的路径长度
mwangblog
2019/05/16
9270
图论--Dijkstra算法总结
1.BFS转换Dijkstra: 对于一些路径的的问题及一些特殊的搜索题目,如果数据量很多但是处理边的复杂程度可以接受,就是说我们可以通过操作将原来要搜索的问题转化为Dijkstra能做的问题,这样可以提高效率,虽然介于BFS与Dijkstra之间有着A*,但是A*的题目我目前就看到了一类,第K短路,常用的还是转换。举个例子:在一个城堡中,有机关陷阱并且告知了其坐标,设城堡为一个二维平面,若这个二维有10000点,BFS最坏的情况是O(V^2)那么可能会超时,那么我们考虑,将每个点的作为节点建图,若有机关则他与上下左右都不连通,其他的每个点建立四联通边,那么时间复杂度为O(4*V),再加上Dijkstra为O(4*V+VlogV)可以将其解出,这个例子可能不太恰当,但是在这里给出解题的思想,BFS与Dijkstra同是单源最短路是可以转化的。
风骨散人Chiam
2020/10/28
7130
加权有向图----单点最短路径问题(Dijkstra算法)
单点最短路径问题是求解从s到给定顶点v之间总权重最小的那条路径的问题。Dijkstra算法可以解决边的权重非负的最短路径问题。 Dijkstra算法无法判断含负权边的图的最短路径,但Bellman-Ford算法可以。 在实现Dijkstra算法之前,必须先了解边的松弛: 松弛边v->w意味着检查从s到w的最短路径是否是先从s到v,再从v到w。如果是,则根据这个情况更新数据。下面的代码实现了放松一个从给定顶点的指出的所有的边: private void relax(EdgeWeightedDigraph G,
SuperHeroes
2018/05/30
2.5K0
Dijkstra的最短路径算法
给定图中的图形和源顶点,找到给定图形中从源到所有顶点的最短路径。 Dijkstra的算法与最小生成树的Prim算法非常相似。与Prim的MST一样,我们以给定的源为根生成SPT(最短路径树)。我们维护两组,一组包含最短路径树中包含的顶点,另一组包括最短路径树中尚未包括的顶点。在算法的每个步骤中,我们找到一个顶点,该顶点位于另一个集合中(尚未包括的集合)并且与源具有最小距离。
全栈程序员站长
2022/08/28
1.2K0
Dijkstra的最短路径算法
会一会改变世界的图算法——Dijkstra(狄克斯特拉)算法
狄克斯特拉算法是非常著名的算法,是改变世界的十大算法之一,用于解决【赋权】【有向无环图】的【单源最短路径】问题。
掘金安东尼
2022/09/22
1.1K0
会一会改变世界的图算法——Dijkstra(狄克斯特拉)算法

相似问题

Mediaelement.js在IE上倒带后隐藏控件

10

如果视频=持续时间停止和倒带

20

在电影XNA结束时停止视频播放

12

MediaElement.js (WordPress)设置YouTube视频的结束时间

116

在mediaelement.js中播放FLV视频

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档