matlab solve 矩阵,在Matlab中求解矩阵DAE系统
这些方程式可以在这里找到。如您所见,它由8个标量方程组组成,接近3个矩阵方程组。为了让Matlab知道方程是矩阵式的,我将可变时间相关向量函数声明为:
syms t p1(t) p2(t) p3(t)
p(t) = symfun([p1(t);p2(t);p3(t)], t);
p = formula(p(t)); % allows indexing for vector p
% same goes for w(t) and m(t)...
已知矩阵声明如下:
A = sym('A%d%d',[3 3]);
Fq = sym('Fq%d%d',[2 3]);
Im = diag(sym('Im%d%d',[1 3]));
现在可以根据指南对系统进行建模:
eqs = [diff(p) == A*w + Fq'*m,...
diff(w) == -Im*p,...
Fq*w == 0];
vars = [p; w; m];
此时,当我尝试减少索引(因为它等于2)时,出现以下错误:
[DAEs,DAEvars] = reduceDAEIndex(eqs,vars);
Error using sym/reduceDAEIndex (line 95)
Expecting as many equations as variables.
如果我们将所有变量都声明为标量,则不会出现该错误:
syms A Im Fq real p(t) w(t) m(t)
引用symfun文档(提示部分):
Symbolic functions are always scalars, therefore, you cannot index into a function.
但是,我很难相信不可能矩阵式地求解这些方程。显然,可以将其扩展为8个标量方程,但是此处涉及的多体系统非常简单,目标是能够求解复杂的方程组-因此,问题是:是否可以在Matlab中求解矩阵DAE,如果可以的话-要使其正常工作,必须解决什么问题?
附言Matlab DAE求解器还有另一个问题:模型的输入变量(已知系数函数)是时变的。就示例而言,它们在所有域中都是恒定的,但是对于我的问题,它们随时间变化。这个问题已经在这里提出了。如果您有任何解决方案,请参考。
最后,我设法找到了解决此问题的正确语法。 我将矩阵变量(例如A,Fq)视为单个实体时犯了一个错误。 下面,我介绍利用矩阵方法并解决此特定DAE的代码:
% Define symbolic variables.
q = sym('q%d',[3 1]); % state variables
a = sym('a'); k = sym('k'); % constant parameters
t = sym('t','real'); % independent variable
% Define system variables and group them in vectors:
p1(t) = sym('p1(t)'); p2(t) = sym('p2(t)'); p3(t) = sym('p3(t)');
w1(t) = sym('w1(t)'); w2(t) = sym('w2(t)'); w3(t) = sym('w3(t)');
m1(t) = sym('m1(t)'); m2(t) = sym('m2(t)');
pvect = [p1(t); p2(t); p3(t)];
wvect = [w1(t); w2(t); w3(t)];
mvect = [m1(t); m2(t)];
% Define matrices:
mass = diag(sym('ms%d',[1 3]));
Fq = [0 -1 a;
0 0 1];
A = [1 0 0;
0 1 a;
0 a -q(1)*a] * k;
% Define sets of equations and aggregate them into one set:
set1 = diff(pvect,t) == A*wvect + Fq'*mvect;
set2 = mass*diff(wvect,t) == -pvect;
set3 = Fq*wvect == 0;
eqs = [set1; set2; set3];
% Close all system variables in one vector:
vars = [pvect; wvect; mvect];
% Reduce index of the system and remove redundnat equations:
[DAEs,DAEvars] = reduceDAEIndex(eqs,vars);
[DAEs,DAEvars] = reduceRedundancies(DAEs,DAEvars);
[M,F] = massMatrixForm(DAEs,DAEvars);
对于两个变量p1(t)和w1(t),我们收到非常简单的2x2 ODE。 请记住,减少冗余后,我们摆脱了状态向量q中的所有元素。 这意味着所有剩余的变量(k和mass(1,1))都与时间无关。 如果系统中某些变量存在时间依赖性,那么这种情况将很难解决。
% Replace symbolic variables with numeric ones:
M = odeFunction(M, DAEvars,mass(1,1));
F = odeFunction(F, DAEvars, k);
k = 2000; numericMass = 4;
F = @(t, Y) F(t, Y, k);
M = @(t, Y) M(t, Y, numericMass);
% set the solver:
opt = odeset('Mass', M); % Mass matrix of the system
TIME = [1; 0]; % Time boundaries of the simulation (backwards in time)
y0 = [1 0]'; % Initial conditions for left variables p1(t) and w1(t)
% Call the solver
[T, solution] = ode15s(F, TIME, y0, opt);
% Plot results
plot(T,solution(:,1),T,solution(:,2))
matlab solve 矩阵,在Matlab中求解矩阵DAE系统相关推荐
- matlab非同秩矩阵相乘_MATLAB中的矩阵与向量运算
4.1 数组运算和矩阵运算 从外观形状和数据结构来看 , 二维数组和数学中的矩阵没有区别 . 但是 , 矩阵作为一种变换或 映射算符的体现 , 矩阵运算有着明确而严格的数学规则 . 而数组运算是 MA ...
- matlab因子载荷矩阵正交旋转,因素分析中的矩阵旋转
因素分析中的矩阵旋转 因素分析法 因素分析是一种统计技术,目的是从众多的可观测的"变量"中,概括和推论少数"因素".用最少数的"因素"来概括 ...
- python矩阵转置_Python中的矩阵转置
Python中的矩阵转置 我试图为python创建一个矩阵转置函数,但我似乎无法使它工作.说我有theArray = [['a','b','c'],['d','e','f'],['g','h','i' ...
- 杨辉三角c语言用矩阵,C语言中杨氏矩阵与杨辉三角的实现方法
一.杨氏矩阵 1.杨氏矩阵的概念 在数学中,杨表(英语:young tableau),又称杨氏矩阵.是对组合表示理论和舒伯特演算很有用的工具.它提供了一种方便的方式来描述对称和一般线性群的群表示,并研 ...
- python 有限域函数库_python – Sympy:在有限域中求解矩阵
sympy的Matrix类支持模块化反转.这是模5的示例: from sympy import Matrix, pprint A = Matrix([ [5,6], [7,9] ]) #Find in ...
- python numpy矩阵索引_Numpy中的矩阵索引
索引后查看形状:In [295]: A=np.matrix([1,2,3]) In [296]: A.shape Out[296]: (1, 3) In [297]: A[0] Out[297]: m ...
- 用c 语言中 矩阵乘法,C中实现矩阵乘法的一种高效的方法
如何计算矩阵乘法,这个大家都知道.通常情况下,我们都是用以下代码实现的: for(i=0;i for(j=0;j sum=0; for(k=0;k sum+=A[i][k]*B[k][j]; C[i] ...
- python矩阵操作_Python中的矩阵操作
Numpy 通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包. NumPy 是一个非常优秀的提供矩阵操作的包.N ...
- MATLAB矩阵画法,MATLAB矩阵与数组
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个 ...
- matlab迭代求解,[基于matlab平台的三种迭代法求解矩阵方程]matlab迭代法求方程的根...
数值分析第二次作业 学院:电子工程学院 基于matlab平台的三种迭代法求解矩阵方程组 求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/14 ...
最新文章
- linux查看CPU利用率与负载,Linux CPU负载利用率统计
- 再谈C#中的委托和事件
- 根据字符串自动构造对应类
- [css] 如果css文件过大时,如何异步加载它?
- 什么是嵌入式视觉、行业应用、目前挑战
- 公差基本偏差代号_508/f7:基本偏差怎么查,标准公差又怎么查?
- Spring4 SpringMVC Hibernate4 Freemaker 集成示例
- 大数据技术平台主要分为哪几类
- codeforces gym 100187M Heaviside Function
- 24. 二叉搜索树的后续遍历序列(c++版本)
- redis新数据类型-HyperLogLog
- lxml简单用法 解析网页
- js分页组件laypage
- 软件项目管理1:开发计划和版本计划举例
- R语言数据可视化案例(世界杯球员信息数据可视化)
- 服务器被恶意攻击可以报警吗?
- 2022 年需要掌握的 5 种嵌入式技术
- 计算机桌面文件如何发送给qq好友,QQ怎么与好友分享屏幕 如何共享电脑屏幕给好友...
- Lux 安装以及使用
- 安卓SSL证书格式:pfx转换BKS格式证书
热门文章
- Hive实战之视频网站数据分析
- 这2个PDF转Word免费不限页数工具很多人没用过
- 聊聊HotSpot VM的Native Memory Tracking
- 洛谷 P1035 级数求和【二分||枚举】
- 关于部分积分,动能公式另一种推导
- python的ols_看懂python3 之statsmodels包的OLS
- linux 监控微信通知,Prometheus + Altermanager实现告警微信通知
- 微信限制收付款怎么解决_解决付款处理问题
- 《计算机视觉工程师养成计划》·开篇
- 计算机ip地址是指什么作用是什么,ip地址的作用是什么