在Matlab中求解给定截距的分段函数

时间:2015-04-07 20:24:18

标签: matlab piecewise

我正在尝试解决分段函数,但我收到错误。以下是代码。


脚本:

syms x
y_intercept = 2;
answerr = solve(pw_f(x) == y_intercept, x);

分段函数(在同一文件夹中的单独文件中):

function y = pw_f(x)

if x < 0
    y = x;
elseif (x >=0) && (x <= 20)
    y = 2*x;
elseif x > 20
    y = 4*x - 40;
else
end

end

运行脚本后我得到的错误是:

Conversion to logical from sym is not possible.

Error in pw_f (line 3)
if x < 0

Error in solve_test
answerr = fsolve(pw_f(x) == y_intercept, x);

我知道错误是因为Matlab无法执行比较x&lt; 0因为x是一个符号变量,所以它不知道x是什么。我也尝试过使用fsolve和vpasolve,但我仍然遇到同样的错误。你知道如何在Matlab中解决这个问题或者解决这个错误吗?

当然,这是一个我可以在脑海中轻松解决的问题(x = 1是解决方案),所以Matlab应该可以做到这一点!但是,我想让我选择的任何y-intercept(也许是一些不是很好的整数)的随机数这个通用。请帮忙!!!!谢谢:))

仅供参考,我正在使用Matlab R2013a。

1 个答案:

答案 0 :(得分:0)

在名为pw_f.m

的文件中
function y = pw_f(x)

if x < 0
    y = x;
elseif (x >=0) && (x <= 20)
    y = 2*x;
elseif x > 20
    y = 4*x - 40;
else
end

end

在命令窗口中

>> y_intercept = 2; % set object value
>> x0 = 0;          % initial guess
>> answerr = fzero(@(x)pw_f(x) - y_intercept, x0) % solve

answerr =

     1

>> pw_f(answerr)  % test solution

ans =

     2