在MATLAB中求解涉及数十个ceil和floor函数的方程式?

时间:2014-07-30 16:22:45

标签: matlab

我正在处理一个问题,该问题使用了以下形式的许多方程:

enter image description here

其中q_i(x)是唯一未知的,c_i,C_j,P_j总是正的。我们有两种情况,第一种是c_i,C_j,P_j是整数,还有它们是真实的情况。 C_j<所有j的P_j

  1. 如何在MATLAB中有效地解决这类问题,特别是当迭代次数N在20 - 100之间时?
  2. 我正在做的是q_i(x) - c_i(x)必须等于整数的总和。所以我正在对q_i(x)进行详尽的搜索,以满足等式的两端。显然,这在计算上是详尽无遗的。

    1. 如果c_i(x)是一个浮点数,这甚至会使问题更难以找到真正的q_i(x)?
    2. 更多信息: 这些公式来自论文"将抢占阈值集成到固定优先级DVS调度算法"杨和林。

      由于

2 个答案:

答案 0 :(得分:0)

总和是阶梯函数。您可以通过计算楼层函数跳转到下一个值的位置来离散化问题;这是每个j的周期性。然后你叠加N'节奏'''' (每个都有自己的速度由Pj指定)并获得总和跳跃的所有位置。每个段可以与qi(x)精确地具有0或1个交点。您应该直观地理解问题,如下所示:

f = @(q) 2 + (floor(q/3)*0.5 + floor(q/4)*3 + floor(q/2)*.3);
xx = -10:0.01:10;
plot(xx,f(xx),xx,xx)

Step function visualization

对于每个步骤,可以分析检查是否存在交叉点。

jumps = unique([0:3:10,0:4:10,0:2:10]); % Vector with position of jumps
lBounds = jumps(1:end-1); % Vector with lower bounds of stairs
uBounds = jumps(2:end); % Vector with upper bounds of stairs
middle = (lBounds+uBounds)/2; % center of each stair
fStep = f(middle); % height of the stairs
intersection = fStep; % Solution of linear function q=fStep
% Check if intersection is within the bounds of the specific step
solutions = intersection(intersection>=lBounds & intersection<uBounds)

2.3000    6.9000

答案 1 :(得分:0)

您可以使用bisection method以数字方式查找几乎所有行为良好函数的零。

  1. 通过将所有内容移动到等号的一侧,将等式问题转换为零发现问题。然后找x: f(x)=0
  2. 应用二分法方程求解器。
  3. 就是这样!或者可能是......

    • 如果您有特定的根部应该落入的范围,那么只需对每个范围执行二分法。如果没有,你仍然需要给出一个最大估计值(你不想尝试一些大于此值的数字),并将其作为范围。
    • 此方法的问题是,对于每个给定范围,它只能找到一个根,因为它总是选择范围的左半部分(或右半部分)。如果P_j是整数,那就没问题,因为你总能找到函数的最小步长。假设P_j = 1,那么只有大于1 的q_i 的变化才会导致另一个段(因此可能是不同的根)。否则,在小于1的每个范围内,将存在至多一个解决方案。
    • 如果P_j是一个任意数字(例如1e-10),除非你对P_j有一个下限,否则很可能你不幸运,因为你无法判断该函数跳得有多快,这实际上意味着f(x)不是一个行为良好的函数,因此很难解决。