与Matlab不同,Octave Symbolic没有分段功能。有工作吗?我想做这样的事情:
syms x y = piecewise(x0, 1)
相关地,如何获得分段函数?我运行了以下内容:
>> int (exp(-a*x), x, 0, t)
显示以下正确答案并存储在变量中:
t for a = 0 -a*t 1 e - - ----- otherwise a a
但是现在我想访问答案的“其他”部分,以便我可以考虑它。我怎么做?
(是的,我可以把它考虑在脑子里,但我正在练习更复杂的表达方式。我也只是在寻找一种使用符号表达式的方法 - 即使在任何一种情况下,数字也可以正常工作,我想了解符号方法。)
谢谢!
答案 0 :(得分:0)
Matlab的piecewise
函数似乎相当新(在2016b中引入),但它基本上看起来像一个美化的三元运算符。不幸的是,我没有2016年检查它是否对输入执行任何检查,但一般情况下,您可以通过使用逻辑索引索引到单元格来重新创建八度音程中的“三元”运算符。 E.g。
{@() return_A(), @() return_B(), @() return_default()}([test1, test2, true]){1}()
<强>解释强>
以下是在函数中实现的上述步骤(为简洁起见,此处省略了适当的健全性检查),遵循与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