matlabFunction()生成中间条款将被积函数在积分()

4视图(30天)
我使用符号数学工具箱包含积分计算几个非常大的矩阵,然后将它们转换为普通(非象征性的)函数通过matlabFunction ()。问题是MATLAB生成一堆中间条款(200年~),其中大部分包含变量我整合,打破了脚本。例如:
M =积分(@ (s) f (et1、et2…, s)), <——et1、et2…= g (s)
我不确定这是绝对最好的方法把它,但是我需要找到一个方法来抑制所有的额外条款或额外条款包含年代回滚大的方程,由于年代没有定义外的积分。
到目前为止我已经试过:
  • 玩的设置matlabFunction()——关闭优化使其产生更多额外的条款,不帮助
  • 在Excel中导入数据并试图手动替换它,我不认为这是一个好主意,因为它不大约一个小时的设置和需要重做我每次修改代码(虽然这可能是因为我不够好VBA进入一个宏)
  • 创建一个全局符号变量和使用,使计算工作但也杀死了我的速度,使1/5的时间间隔我测试了6个多小时计算
有没有人有任何想法如何解决这个问题?有设置在MATLAB我失踪吗?
2的评论
Torsten
Torsten 2022年6月21日
@Alex B 评论搬到这里:
信谊q0年中s DφD L m g t
nSimplify = 1;
q = [q0;tht基金会);
α= s *阻+ (s ^ 2 * q0) / 2;
x = D * D * cos(α)- L * int(罪(α),s 0 s);
y = D * D * sin(α)+ L * int (cos(α),s 0 s);
dq =实际([梯度(x, q),梯度(y, q)]);
流(“建筑惯性矩阵…\ n”)
M = int (int (M * dq * dq, d, 1/2, 1/2),年代,0,1)
matlabFunction (M,“文件”inertiaMat)
这是我的意思的一个例子(竞选需要一分钟~我);M最终将包含积分与含d和d和年代年代里面,但是当matlabFunction返回文件结束时,它将生成中间条款包含s和d,找到那些,实现s和d不定义(因为我外面th积分调用)和崩溃。

登录置评。

接受的答案

保罗
保罗 2022年6月21日
几个建议代码。
一般的规则是国际海事组织,最好指定所有相关变量的假设之上。例如,我认为所有这些变量是真实的。
信谊q0年中s DφD L m g t真实
如果我们知道m(质量?)是积极的:
assumeAlso (m,“积极”)
使用任何其他假设assumeAlso反映变量。
nSimplify = 1;
q = [q0;tht基金会);
α= s *阻+ (s ^ 2 * q0) / 2;
我总是惊讶于Matlab允许集成的范围的变量表示的集成。我假设这段代码实际上是做所需的,但它可能是更好的使用潜艇(α)整合关于集成的哑变量
x = D * D * cos(α)- L * int(罪(α),年代,0,)
y = D * D * sin(α)+ L * int (cos(α),年代,0,)
注意苏为什么昔日的代码有一个需要使用真正的()下一行。
dq =[梯度(x, q),梯度(y, q)];
%流(“构建惯性矩阵…\ n”)
使用(注意点)。仅使用”意味着复杂的共轭转置,这并不是什么想让我不相信。
也很好的实践使用括号来确保对称。
M = int (int (M * (dq。* dq), d, 1/2, 1/2),年代,0,1)
@Walter罗伯森 强调使用优化/假在创建文件,所以这样做。
matlabFunction (M,“文件”,“inertiaMat”,“优化”假)
说,我清楚地看到问题,inertiaMat。m包含一行
et2 =(年中。* sqrt(π)。*菲涅耳1.0. /√(π)。* (tht. / 2.0 + (q0。* s) / 2.0)。* sqrt (1.0. / q0)。* 2.0)。*罪(年中。^ 2. / (q0。* 2.0))。* sqrt (1.0. / q0)) / q0;
在这种情况下应该:
et2 = @ (s)(年中。* sqrt(π)。*菲涅耳1.0. /√(π)。* (tht. / 2.0 + (q0。* s) / 2.0)。* sqrt (1.0. / q0)。* 2.0)。*罪(年中。^ 2. / (q0。* 2.0))。* sqrt (1.0. / q0)) / q0;
然后所有使用的et2积分()应该转化为et2(年代)。所有其他的变量。
我不知道为什么matlabFunction完成本职工作;也许有一个sympref控制这种行为。想不出一个编辑inertiaMat以外的工作。米之后创建的。
2的评论
亚历克斯·B
亚历克斯·B 2022年6月22日
抱歉迟到超级necro-reply但我可以确认MATLAB r2022a似乎并没有表现出这个bug并生成正常积分

登录置评。

答案(1)

沃尔特·罗伯森
沃尔特·罗伯森 2022年6月21日
你是正确的,这是一个已知的缺陷在你释放,释放和没有解决方案。

标签

s manbetx 845


释放

R2021a

社区寻宝

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

开始狩猎!