如何在 Matlab 中使用变化的输入/时间相关的输入函数求解 DAE?

2024-04-21

我正在使用 ode15i 求解器求解 DAE 问题。我有 8 个变量和 8 个方程,系统很复杂,到目前为止唯一可用的求解器是 ode15i。

我使用过该指南:http://se.mathworks.com/help/symbolic/set-up-your-dae-problem.html http://se.mathworks.com/help/symbolic/set-up-your-dae-problem.html。但是,本指南无法帮助我解决不同输入的问题。

我的系统有一个与时间相关的输入,一个函数。函数本身很简单,但问题是DAE系统中的时间t是符号形式的,而我的输入函数无法求解相应的输入值,因为它无法计算符号时间值t。

这是我的 DAE 系统的输入函数:

    function [delta] = delta(t)
    t=vpa(t)
       if t <= 1.01
       delta = 0;
       elseif t <= 3.61
       delta = 0.1222;
       elseif t <= 4.33
       delta = 0;
       elseif t <= 7.21
       delta = -0.1222;
       else
       delta = 0;
    end

戴伊问题:

syms v1(t) r1(t) r2(t) r3(t) r4(t) fii(t) sig(t) psi(t);
tspan = 0:0.01:10;
....
a11 = delta(t)-(v1(t)+r1(t)*l_1_1)/u;
....
eqs = [...]
vars [...]
f = daeFunction(eqs,vars);
y0est = zeros(8,1);
yp0est = zeros(8,1);
opt = odeset('RelTol',10.0^(-7),'Abstol',10.0^(-7));
[y0,yp0] = decic(f,0,y0est, [], yp0est, [], opt);
[t,y] = ode15i(f,tspan, y0, yp0, opt);

我收到的错误如下:

Conversion to logical from sym is not possible.
 Error in delta (line 3)
    if t <= 1.01
 Error in Nonlin_painonsiirto_DUO2 (line 181)
 a11 = delta(t)-(v1(t)+r1(t)*l_1_1)/u;

如果 delta 输入是常数或 (t) 的三角函数,则系统可以工作,例如:

delta = 0.0175;
delta = sin(t)*0.0175;

我也尝试过不使用 vpa(t) 命令和使用命令 double(t) 的 delta 函数,但它什么也没做。我还尝试使用系统的时间向量 tspan=0:0.01:10 作为输入,它作为 ode15i 的时间跨度给出:

delta(tspan)

但是,然后它尝试计算整个向量 tspan,这会导致错误,因为矩阵维度不一致。

希望这里的问题是可以理解的,谢谢。

-Jere


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Matlab 中使用变化的输入/时间相关的输入函数求解 DAE? 的相关文章

  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • Matlab 和 Python 中的优化算法(dog-leg trust-region)

    我正在尝试使用 Matlab 和 Python 中的狗腿信赖域算法求解一组非线性方程 在Matlab中有fsolve https www mathworks com help optim ug fsolve html其中此算法是默认算法 而
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 读入 Julia 中的数组

    我对 Julia 比较陌生 正在寻找一种有效的方法来从文本文件中读取并将每个 列 存储在数组中 我有 2 列 但通用解决方案也很棒 例如 我想要输入 1 2 3 4 5 6 被读入两个数组 例如 x 和 y 使得 x 1 3 5 和 y 2
  • 在 Angularjs 中格式化输入值

    我正在尝试编写一个指令 自动格式化数字
  • 我需要转义该 MATLAB 字符串中的字符吗?

    我想在 MATLAB 中调用以下 bash 命令 grep Up to test linux vision1 1 log awk print 7 I use system 在MATLAB中 但结果有错误 gt gt status strin
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 检测植物图片中的所有分支

    我想知道有什么可以检测下图中的所有绿色树枝 目前我开始应用 Frangi 过滤器 options struct FrangiScaleRange 5 5 FrangiScaleRatio 1 FrangiBetaOne 1 FrangiBe
  • 通过 Matlab 访问 Physionet 的 ptbdb 中的数据库

    我首先设置系统 old path which rdsamp if isempty old path rmpath old path 1 end 8 end wfdb url http physionet org physiotools ma
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • 从开始/结束索引列表创建向量化数组

    我有一个两列矩阵M包含一堆间隔的开始 结束索引 startInd EndInd 1 3 6 10 12 12 15 16 如何生成所有区间索引的向量 v 1 2 3 6 7 8 9 10 12 15 16 我正在使用循环执行上述操作 但我想
  • @(t)在Matlab中是什么意思? [复制]

    这个问题在这里已经有答案了 正如标题所示 考虑到下面的上下文 t 在 Matlab 中到底意味着什么 computeNumericalGradient 是一个函数 cofiCostFunc 也是一个接受一堆参数的函数 问题是 t 对 cof
  • 无法在 Visual Studio Code 的 C# 输出上键入任何内容

    所以我试图在 vscode 上运行一个非常基本的 C 程序 代码如下 using System namespace HelloWorld class Program static void Main string args string N
  • 快速有效地计算已知特征值的特征向量

    我的问题的简短版本 计算矩阵特征向量的最佳方法是什么A 如果我们已经知道属于特征向量的特征值呢 更长的解释 我有一个很大的随机矩阵A由于它是随机的 因此具有非负左特征向量x 这样A Tx x 我正在寻找快速有效的方法来数值计算这个向量 最好
  • Javascript:更改输入值时设置光标位置

    当您输入公式时 我试图在我的应用程序中重现类似于 Microsoft Excel Google Sheets 的用户体验 并且您可以使用不同的公式和变量来自动完成下拉菜单 为此 在验证自动完成功能后 我希望能够控制光标的位置 例如 如果我输
  • Python:如何使用列表作为用户输入的选择源?

    任何人都可以检查此代码并让我知道出了什么问题吗 input list One Two Three P1 input Select the input input list 0 input list 1 input list 2 print
  • Python 检查整数输入

    我试图允许用户输入我的程序 但是当他们输入字符串时我的程序失败 这是一个更大的程序 但正在尝试纠正问题 到目前为止我已经 data raw input Enter a number number eval data if type numb
  • 如何将用户输入与枚举值映射?

    我有一个基本的enum宣言 enum Title Prof Dr Mr Mdm Mrs Miss NA 我正在尝试将用户输入 0 1 2 3 4 5 AnyNumber 映射为正确的值enum像这样 std map
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB

随机推荐