zaqw0001 发表于 2024-2-27 15:13

两元一次方程求解

本帖最后由 zaqw0001 于 2024-2-27 15:18 编辑

现在有一个表,里面有几组公式,先拿一组公式举例    1:289X+20Y=3522.6    2:(88278.28-289X)/1200/X=(34616.49-20Y)/500/Y   
想写一个h5网页   以后直接填写数   点击按钮直接出结果   但结果有报错   不知道是不是方法不对我把我的代码贴到下面   烦请大神帮我看看啥问题

下面是代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/11.7.0/math.min.js"></script>
    <title>Equation Solver</title>
    <style>
      input {
            width: 50px;
            margin: 5px;
      }
    </style>
</head>
<body>

<h2>方程组求解器</h2>

<label for="coefficients">输入方程组系数:</label>
<input type="text" id="coefficients" placeholder="例如: 289, 20, 3522.6, 88278.28, 1200, 34616.49, 20, 500">

<button>求解方程组</button>

<p id="result"></p>

<script>
    function solveEquations() {
      const coefficientsInput = document.getElementById("coefficients").value;
      const coefficients = coefficientsInput.split(',').map(parseFloat);

      // 定义方程组
      const equations = (variables) => {
            const X = variables;
            const Y = variables;

            const eq1 = coefficients * X + coefficients * Y - coefficients;
            const eq2 = (coefficients - coefficients * X) / (coefficients * X) - (coefficients - coefficients * Y) / (coefficients * Y);

            return ;
      };

      // 设置初始猜测值
      const initialGuess = ;

      // 使用 fsolve 进行数值求解
      const solution = math.fsolve(equations, initialGuess);

      // 输出结果到页面
      document.getElementById("result").innerText = `X 的解为: ${solution}, Y 的解为: ${solution}`;
    }
</script>

</body>
</html>

flyer_2001 发表于 2024-3-2 11:57

本帖最后由 flyer_2001 于 2024-3-2 11:59 编辑

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Nonlinear Equation Solver</title>
<script>
// 定义已知参数
/*
A*X+B*Y=C   (M*X-A*X*X)/O=(N*Y-B*Y*Y)/P
A B C M N O P 值已知   求X和Y的值
*/
var A = 289/* ... */;
var B = 20/* ... */;
var C = 3522.6/* ... */;
var M = 88278.28/* ... */;
var N =34616.49 /* ... */;
var O = 1200/* ... */;
var P = 500/* ... */;

// 定义方程组函数
function f1(X, Y) {
    return A * X + B * Y - C;
}

function f2(X, Y) {
    return (M * X - A * X * X) / O - (N * Y - B * Y * Y) / P;
}

// 定义雅可比矩阵函数
function jacobian(X, Y) {
    return [
      ,
      [(M - 2 * A * X) / O, -(N - 2 * B * Y) / P]
    ];
}

// 定义牛顿法迭代函数
function newtonMethod(X0, Y0, tolerance, maxIter) {
    var X = X0, Y = Y0;
    for (var iter = 0; iter < maxIter; iter++) {
      var J = jacobian(X, Y);
      var det = J * J - J * J;
      if (Math.abs(det) < 1e-6) { // 检查雅可比矩阵是否奇异
            console.error("Jacobian matrix is singular. No solution found.");
            return null;
      }
      var J_inv = [, -J], [-J, J]]; // 计算雅可比矩阵的逆
      var invDet = 1 / (det);
      J_inv *= invDet;
      J_inv *= invDet;
      J_inv *= invDet;
      J_inv *= invDet;
         
      var f = ;
      var delta = * f + J_inv * f,
                     J_inv * f + J_inv * f];
         
      X -= delta;
      Y -= delta;
         
      if (Math.sqrt(delta * delta + delta * delta) < tolerance) {
            return {X: X, Y: Y};
      }
    }
    console.error("Maximum iterations reached. No solution found.");
    return null;
}

// 页面加载完成后执行计算
window.onload = function() {
    var initialGuessX = 1/* ... */; // 初始猜测值X
    var initialGuessY =1 /* ... */; // 初始猜测值Y
    var tolerance = 1e-6; // 容差
    var maxIter = 100; // 最大迭代次数

    var result = newtonMethod(initialGuessX, initialGuessY, tolerance, maxIter);
    if (result) {
      document.getElementById('output').textContent = `X = ${result.X}, Y = ${result.Y}`;
    } else {
      document.getElementById('output').textContent = 'No solution found.';
    }
};
</script>
</head>
<body>

<h1>Nonlinear Equation Solver</h1>
<p>Results:</p>
<p id="output"></p> <!-- 这里将显示X和Y的值 -->

</body>
</html>

落红护花 发表于 2024-2-27 15:22

matlab里面有fsolve函数,h5里面也自带吗

kittylang 发表于 2024-2-27 15:29

本帖最后由 kittylang 于 2024-2-27 15:37 编辑

落红护花 发表于 2024-2-27 15:22
matlab里面有fsolve函数,h5里面也自带吗
js只有Math,fsolve也没有,,看到导入了mathjs,但是有这个方法吗他报错不会是说math.fsolve是undefined吧

zhaublitz 发表于 2024-2-27 15:30

CHATGPT的分析结果
注意:在实际运行该代码时,需要确保在点击按钮时调用 solveEquations 函数。这可以通过为按钮元素添加 onclick 属性来实现,如 <button onclick="solveEquations()">求解方程组</button>。

此外,代码中的方程组求解部分似乎有一个逻辑问题,因为它假设了一个方程是线性的,而另一个方程是两个函数的比值。这可能需要根据实际情况进行调整,以确保方程组有意义并且能被正确解决。此外,math.fsolve 在 Math.js 中并不是一个标准函数,这个函数可能需要一个自定义实现或者使用不同的方法来解决方程组。

kittylang 发表于 2024-2-27 15:30

kittylang 发表于 2024-2-27 15:29
js只有Math,fsolve也没有,他报错不会是说math是undefined吧

鼠标放报错上面

AITMPE 发表于 2024-2-27 15:31

JavaScript里没有这个函数 可以引入一些第三方脚本
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/10.4.0/math.min.js"></script>
<script>
    const solution = math.solve(equations, initialGuess);
    console.log(solution);
</script>

kittylang 发表于 2024-2-27 15:36

AITMPE 发表于 2024-2-27 15:31
JavaScript里没有这个函数 可以引入一些第三方脚本




后面我编辑了,看了下mathjs没有这个方法

jinmouyuzhao 发表于 2024-2-27 15:39

刚好需要,谢谢分享!

zaqw0001 发表于 2024-2-27 15:44

jinmouyuzhao 发表于 2024-2-27 15:39
刚好需要,谢谢分享!

大哥我是在求助找方法不是分享   不要灌水哈

zaqw0001 发表于 2024-2-27 15:49

AITMPE 发表于 2024-2-27 15:31
JavaScript里没有这个函数 可以引入一些第三方脚本




我引入了还是不行提示没有solve我应该怎么定义solve
页: [1] 2 3
查看完整版本: 两元一次方程求解