gpt4 book ai didi

octave - Octave符号包中的分段函数?

转载 作者:行者123 更新时间:2023-12-04 08:54:20 32 4
gpt4 key购买 nike

与Matlab不同, Octave 符号没有分段功能。有没有解决的办法?我想做这样的事情:

符号x
y =分段(x0,1)

相关地,如何获得分段函数呢?我执行以下操作:

>> int(exp(-a * x),x,0,t)

并显示了以下正确答案,并将其存储在变量中:


t代表a = 0

-在
1 e
- - - - - 除此以外
一个

但是现在我想访问答案的“其他”部分,以便我可以将其分解。我怎么做?

(是的,我可以考虑一下,但是我正在练习何时出现更复杂的表达式。我也只是在寻找一种使用符号表达式的方法,即使在任何情况下,数字都可以正常工作,我想了解符号化方法。)

谢谢!

最佳答案

Matlab的 piecewise 函数似乎是一个相当新的函数(于2016b中引入),但它基本上看起来像是一个荣耀的三元运算符。不幸的是,我没有2016检查它是否对输入执行任何检查,但是通常您可以通过使用逻辑索引索引到单元格中来重新创建 Octave 中的“三进制”运算符。例如。

{@() return_A(), @() return_B(), @() return_default()}([test1, test2, true]){1}()

说明:
  • 步骤1:您将所有感兴趣的值放入单元格数组中。如果要防止在解析时对它们进行包装(例如,如果您希望三元运算符的输出产生错误),请将它们包装在函数句柄中。
  • 步骤2:使用逻辑索引对该单元数组进行索引,其中在每个索引处执行逻辑测试
  • 步骤3:如果需要“默认”大小写,请对最后一个元素使用“true”测试。
  • 步骤4:从上面产生的单元(子)数组中,选择第一个元素并“运行”结果函数句柄。选择第一个元素的效果是,如果多个测试成功,则仅选择第一个结果;否则,请选择第一个结果。鉴于“默认”测试将始终成功,因此还可以确保除非是第一个也是唯一成功的测试(默认情况下会成功),否则不要选择此项。

  • 这是实现到函数中的上述步骤(为简洁起见,此处省略了适当的健全性检查),遵循与matlab的 piecewise相同的语法:

    function Out = piecewise (varargin)
    Conditions = varargin(1:2:end); % Select all 'odd' inputs
    Values = varargin(2:2:end); % Select all 'even' inputs
    N = length (Conditions);
    if length (Values) ~= N % 'default' case has been provided
    Values{end+1} = Conditions{end}; % move default return-value to 'Values'
    Conditions{end} = true; % replace final (ie. default) test with true
    end

    % Wrap return-values into function-handles
    ValFuncs = cell (1, N);
    for n = 1 : N; ValFuncs{n} = @() Values{n}; end

    % Grab funhandle for first successful test and call it to return its value
    Out = ValFuncs([Conditions{:}]){1}();
    end

    使用示例:

    >> syms x t;
    >> F = @(a) piecewise(a == 0, t, (1/a)*exp(-a*t)/a);

    >> F(0)
    ans = (sym) t

    >> F(3)
    ans = (sym)

    -3⋅t

    ─────
    9

    关于octave - Octave符号包中的分段函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44857247/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com