这些方程式可以在这里找到。如您所见,它由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系统相关推荐

  1. matlab非同秩矩阵相乘_MATLAB中的矩阵与向量运算

    4.1 数组运算和矩阵运算 从外观形状和数据结构来看 , 二维数组和数学中的矩阵没有区别 . 但是 , 矩阵作为一种变换或 映射算符的体现 , 矩阵运算有着明确而严格的数学规则 . 而数组运算是 MA ...

  2. matlab因子载荷矩阵正交旋转,因素分析中的矩阵旋转

    因素分析中的矩阵旋转 因素分析法 因素分析是一种统计技术,目的是从众多的可观测的"变量"中,概括和推论少数"因素".用最少数的"因素"来概括 ...

  3. python矩阵转置_Python中的矩阵转置

    Python中的矩阵转置 我试图为python创建一个矩阵转置函数,但我似乎无法使它工作.说我有theArray = [['a','b','c'],['d','e','f'],['g','h','i' ...

  4. 杨辉三角c语言用矩阵,C语言中杨氏矩阵与杨辉三角的实现方法

    一.杨氏矩阵 1.杨氏矩阵的概念 在数学中,杨表(英语:young tableau),又称杨氏矩阵.是对组合表示理论和舒伯特演算很有用的工具.它提供了一种方便的方式来描述对称和一般线性群的群表示,并研 ...

  5. python 有限域函数库_python – Sympy:在有限域中求解矩阵

    sympy的Matrix类支持模块化反转.这是模5的示例: from sympy import Matrix, pprint A = Matrix([ [5,6], [7,9] ]) #Find in ...

  6. 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 ...

  7. 用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] ...

  8. python矩阵操作_Python中的矩阵操作

    Numpy 通过观察Python的自有数据类型,我们可以发现Python原生并不提供多维数组的操作,那么为了处理矩阵,就需要使用第三方提供的相关的包. NumPy 是一个非常优秀的提供矩阵操作的包.N ...

  9. MATLAB矩阵画法,MATLAB矩阵与数组

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 MATLAB既然以矩阵实验室命名,就说明该软件在矩阵计算方面具有非常优异的表现.在MATLAB中,一般情况下一个矩阵就是指一个长方形的数组.特殊情况有两个 ...

  10. matlab迭代求解,[基于matlab平台的三种迭代法求解矩阵方程]matlab迭代法求方程的根...

     数值分析第二次作业 学院:电子工程学院 基于matlab平台的三种迭代法求解矩阵方程组 求解系数矩阵由16阶Hilbert方程组构成的线性方程组的解,其中右端项为[2877/851,3491/14 ...

最新文章

  1. linux查看CPU利用率与负载,Linux CPU负载利用率统计
  2. 再谈C#中的委托和事件
  3. 根据字符串自动构造对应类
  4. [css] 如果css文件过大时,如何异步加载它?
  5. 什么是嵌入式视觉、行业应用、目前挑战
  6. 公差基本偏差代号_508/f7:基本偏差怎么查,标准公差又怎么查?
  7. Spring4 SpringMVC Hibernate4 Freemaker 集成示例
  8. 大数据技术平台主要分为哪几类
  9. codeforces gym 100187M Heaviside Function
  10. 24. 二叉搜索树的后续遍历序列(c++版本)
  11. redis新数据类型-HyperLogLog
  12. lxml简单用法 解析网页
  13. js分页组件laypage
  14. 软件项目管理1:开发计划和版本计划举例
  15. R语言数据可视化案例(世界杯球员信息数据可视化)
  16. 服务器被恶意攻击可以报警吗?
  17. 2022 年需要掌握的 5 种嵌入式技术
  18. 计算机桌面文件如何发送给qq好友,QQ怎么与好友分享屏幕 如何共享电脑屏幕给好友...
  19. Lux 安装以及使用
  20. 安卓SSL证书格式:pfx转换BKS格式证书

热门文章

  1. Hive实战之视频网站数据分析
  2. 这2个PDF转Word免费不限页数工具很多人没用过
  3. 聊聊HotSpot VM的Native Memory Tracking
  4. 洛谷 P1035 级数求和【二分||枚举】
  5. 关于部分积分,动能公式另一种推导
  6. python的ols_看懂python3 之statsmodels包的OLS
  7. linux 监控微信通知,Prometheus + Altermanager实现告警微信通知
  8. 微信限制收付款怎么解决_解决付款处理问题
  9. 《计算机视觉工程师养成计划》·开篇
  10. 计算机ip地址是指什么作用是什么,ip地址的作用是什么