我试图找到依赖于几个符号变量和符号函数的非线性函数的根。为了保证解决方案的存在,我需要对符号函数b(x)
设置一些假设。
通过使用Matlab函数assume
,我可以设置简单的假设,如
syms b(x) d
assume(b(0)==0 & b(x)>=0);
现在我正在寻找一种方法来包含这个假设:(符号函数b(x)
,符号变量d
)
值为y
,b(x) < d*x
为x < y
,b(x) > d*x
为x > y
。
为了方便起见,我们可以修复d=0.1
和b(10)=1
,例如y=10
。不过,我希望保留d
和y
符号。
我尝试编写一个检查假设的函数,但不出所料,Matlab似乎不接受符号函数作为输入变量。
你知道这个问题的解决方案还是有想法?
更新2017-01-03:
修复了d=0.1
,b(10)=1
和y=10
后,我试图通过
syms b(x)
d=0.1;
assume(x, 'real');
assume(x>=0);
assume(b(0)==0 & b(x)>=0 & b(10)==1);
checkAssumption(x)= mySign(x)*(d*x-b(x));
assume(checkAssumption(x)>=0);
其中
function sign=mySign(x)
if x<10
sign=-1;
else if x==10
sign=0;
else if x>10
sign=-1;
end
end
end
然后我收到错误“无法从sym转换为逻辑”。在mySign中。使用double(x)
作为mySign的输入变量会导致错误“DOUBLE无法将输入表达式转换为双数组”。
您是否知道如何评估mySign
和checkAssumptions
或了解如何采用上述假设?