【问题标题】:Find integer solution to formula求公式的整数解
【发布时间】:2019-03-05 05:26:04
【问题描述】:

给定两个候选向量:

x = [1 3 5];
y = [1 2 3 4];

我想找出哪些候选人满足一个方程式或公式。这就是我想做的:

f = x + y - 6;
solve f;

然后,它吐出解决方案:

5  1
3  3

如果重要的话,我实际上使用的是 Octave,而不是 MatLab,因为我没有 Windows 机器。我知道我可以使用 for 循环来做到这一点:

for i=x  
    for j=y  
        if i+j-6==0 
            disp([i j]); 
    end 
end

这是一个简单的例子。我正在寻找可以处理更大示例的解决方案。

【问题讨论】:

  • 向我显示一个标记为 Octave 且答案很好的问题。我可以向您展示许多标记为 MatLab 的问题,这些问题不依赖于 MatLab 或 Octave,它们有很好的答案。通过将其重新标记为 Octave,可以保证没有人会看到问题并且不会回答。
  • @kainaw:给我看一个标记为 Octave 却没有答案的好问题!
  • 如果你不同意标签编辑,那么你可以把它放回去......没有规则反对适当的交叉标签。

标签: octave


【解决方案1】:

按“蛮力”求解此类方程通常是个坏主意,但你可以这样做:

x = [1 3 5];
y = [1 2 3 4];

## build grid (also works for n vars)
[xx, yy] = ndgrid (x, y);

## anonymous function
f = @(x,y) abs(x + y - 6) < 16*eps 

## true?
t = f (xx, yy);

## build result
[xx(t) yy(t)]

【讨论】:

  • 谢谢。我没用过ngrid。我使用 meshgrid 来获取所有两个向量对,例如: [xx yy]=meshgrid(x,y);对=[xx(:) yy(:)];为此,我认为最好然后做pairs(sum(pairs,2)-6==0,:);然后,我会得到所有符合条件的对。但是,正如我所提到的,实际问题要复杂得多,最多有 81 个自变量,每个变量最多有 20 个候选值。合并后的网格将变得非常大。所以,我看到了使用 ngrid 的好处。
  • @kainaw 20^81 = 2.4179e+105 这将远远超过所有超级计算机一生的计算能力。你考虑过这个吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2012-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多