吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1085|回复: 23
收起左侧

[求助] 两元一次方程求解

[复制链接]
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网页   以后直接填写数   点击按钮直接出结果   但结果有报错    微信图片_20240227151549.png   不知道是不是方法不对  我把我的代码贴到下面   烦请大神帮我看看啥问题

下面是代码
<!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[0];
            const Y = variables[1];

            const eq1 = coefficients[0] * X + coefficients[1] * Y - coefficients[2];
            const eq2 = (coefficients[3] - coefficients[0] * X) / (coefficients[4] * X) - (coefficients[5] - coefficients[6] * Y) / (coefficients[7] * Y);

            return [eq1, eq2];
        };

        // 设置初始猜测值
        const initialGuess = [1.0, 1.0];

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

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

</body>
</html>

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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

[HTML] 纯文本查看 复制代码
<!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 [  
        [A, B],  
        [(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[0][0] * J[1][1] - J[0][1] * J[1][0];  
        if (Math.abs(det) < 1e-6) { // 检查雅可比矩阵是否奇异  
            console.error("Jacobian matrix is singular. No solution found.");  
            return null;  
        }  
        var J_inv = [[J[1][1], -J[0][1]], [-J[1][0], J[0][0]]]; // 计算雅可比矩阵的逆  
        var invDet = 1 / (det);  
        J_inv[0][0] *= invDet;  
        J_inv[0][1] *= invDet;  
        J_inv[1][0] *= invDet;  
        J_inv[1][1] *= invDet;  
          
        var f = [f1(X, Y), f2(X, Y)];  
        var delta = [J_inv[0][0] * f[0] + J_inv[0][1] * f[1],  
                     J_inv[1][0] * f[0] + J_inv[1][1] * f[1]];  
          
        X -= delta[0];  
        Y -= delta[1];  
          
        if (Math.sqrt(delta[0] * delta[0] + delta[1] * delta[1]) < 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>

免费评分

参与人数 1吾爱币 +2 热心值 +1 收起 理由
zaqw0001 + 2 + 1 谢谢大佬分享!!!

查看全部评分

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

回帖奖励 +2 CB吾爱币

matlab里面有fsolve函数,h5里面也自带吗
kittylang 发表于 2024-2-27 15:29

回帖奖励 +2 CB吾爱币

本帖最后由 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

回帖奖励 +2 CB吾爱币

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

回帖奖励 +2 CB吾爱币

JavaScript里没有这个函数 可以引入一些第三方脚本
[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里没有这个函数 可以引入一些第三方脚本
[mw_shl_code=javascript,true]

后面我编辑了,看了下mathjs没有这个方法
jinmouyuzhao 发表于 2024-2-27 15:39

回帖奖励 +2 CB吾爱币

刚好需要,谢谢分享!

免费评分

参与人数 3吾爱币 -12 收起 理由
李玉风我爱你 -3 请勿灌水,提高回帖质量是每位会员应尽的义务!
苏紫方璇 -5 请勿灌水,提高回帖质量是每位会员应尽的义务!
落红护花 -4 请勿灌水,提高回帖质量是每位会员应尽的义务!

查看全部评分

 楼主| 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里没有这个函数 可以引入一些第三方脚本
[mw_shl_code=javascript,true]

我引入了  还是不行  提示没有solve  我应该怎么定义solve
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 14:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表