丢翻图方程组 最小解 计算机 数值求解
Posted ksongking
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了丢翻图方程组 最小解 计算机 数值求解相关的知识,希望对你有一定的参考价值。
我写了一个 程序 DiophantusMin , 用 数值方法 求解 丢翻图方程组 的 最小解 。
算法 是 跨越逼近法, 算法 和 原理 见 《二元隐函数 数值求解》 https://www.cnblogs.com/KSongKing/p/12109699.html 。
丢番图方程组 是 不定方程组, 求 整数解 。 DiophantusMin 只 求 最小解 , 因为是 数值方法, 所以 严格的说, 是 未知数 绝对值 尽可能小 的 近似解 。
程序 会用 很多组 整数 去 代入 方程 尝试匹配, 每组整数 代入方程 后 计算 方程等式左边和右边 的 差 的 绝对值, 这个 差 的 绝对值 称为 diff, 表示 该组 整数 对 方程 的 满足程度, diff 越小, 满足方程 的 程度 越高, diff 越大, 满足方程 的 程度 越低 。
程序 会 将 diff 最小 的 一组 整数 作为 最终输出 的 解 。
因为是 方程组, 所以这里说的 diff 是 综合 方程组 中 各个 方程 的 diff 得出 的 diff, 规则 是 取 各个方程 的 diff 中 最大的 一个 diff 作为 方程组 的 diff 。
至于 最小解 的 “最小”, 这里并没有 去 求 多组 解 来 排序 得出 最小解, 这里的 做法 很简单, 就是 把 代入方程 尝试匹配 的 整数 的 范围 设定在 ( -100 , 100 ) 区间 内, 取 这个 区间 内 diff 最小 的 整数组合, 这样 差不多 就是 最小解 了 , 当然, 这是 近似 的 。
把 代入方程 尝试匹配 的 整数 的 范围 设定在 ( -100 , 100 ) 区间 内 这个 是 通过 匹配设定 设定 的 , 程序界面 上 默认 的 匹配设定 是 2 轮 匹配, 第 1 轮 步长 10, 步数 10, 第 2 轮 步长 1, 步数 10 。 这个 运行程序以后, 在 程序界面 上可以看到 。
匹配 的 初始值 是 0, 这是 写死 在 程序 里的, 用 初始值 加上 步长 * 步数 就得到 每一次 匹配 的 整数 。
因为 不同 的 方程(组) 的 解 的 分布规律 不一样, 所以 , 需要 设定 适当 的 步长 、步数 、进行多少轮匹配 , 才能 求得 足够 精确 的 解 。
方程组 用 javascript 表示, 每个 方程 用 一个 函数 表示, 函数间 用 逗号隔开, 程序界面 里 默认 设定 了一个 方程组, 可以 直接 求解 试试 。
以上是关于丢翻图方程组 最小解 计算机 数值求解的主要内容,如果未能解决你的问题,请参考以下文章
[数值计算-17]:最小二乘法的求解2- 链式求导与多元线性方程组求解
[数值计算-5]:一元二次非线性方程求解 - 解析法直接求解