You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Maxima求解线性回归方程组时无法处理含求和的方程求助

解决Maxima中线性回归方程组求解问题

看起来你在Maxima里计算线性回归时卡在了求解正规方程组这一步,我来一步步帮你搞定这个问题。

首先,你已经定义了误差平方和:

(%i1) e: sum((y[i] - (a*x[i]+b))^2, i, 1, n);

接下来我们需要对a和b分别求偏导,令导数为0得到线性回归的正规方程组,再让Maxima求解这个方程组。

步骤1:完成偏导数计算

先把对a的偏导计算完整:

(%i2) dea: diff(e, a);

Maxima会输出:

(%o2) -2*sum((y[i] - a*x[i] - b)*x[i], i, 1, n)

接着计算对b的偏导:

(%i3) deb: diff(e, b);

对应的输出是:

(%o3) -2*sum(y[i] - a*x[i] - b, i, 1, n)

步骤2:构造并整理正规方程组

令两个偏导数等于0(可以直接约掉系数-2,不影响解的结果):

(%i4) eq1: sum((y[i] - a*x[i] - b)*x[i], i, 1, n) = 0;
(%i5) eq2: sum(y[i] - a*x[i] - b, i, 1, n) = 0;

然后展开这两个方程,让Maxima把它们整理成标准的线性形式:

(%i6) expand(eq1);
(%i7) expand(eq2);

展开后会得到清晰的线性方程组:

(%o6) sum(x[i]*y[i], i, 1, n) - a*sum(x[i]^2, i, 1, n) - b*sum(x[i], i, 1, n) = 0
(%o7) sum(y[i], i, 1, n) - a*sum(x[i], i, 1, n) - b*n = 0

步骤3:求解方程组

现在用solve命令直接求解关于a和b的线性方程组:

(%i8) solve([eq1, eq2], [a, b]);

Maxima会给出a和b的解析解(用求和符号表示)。如果你的数据是具体数值(比如n是确定的数,x[i]和y[i]有实际值),可以先给这些变量赋值再执行上述步骤,就能得到具体的数值结果。

常见问题排查

如果还是无法求解,可能是这几个原因:

  • 未定义具体变量:如果是数值计算,要先给n赋值(比如n:5;),再给x[1]到x[n]、y[1]到y[n]设置具体数值。
  • 未展开表达式:一定要先执行expand命令把方程组整理成标准线性形式,再用solve。
  • 版本兼容性:你的Maxima版本是5.38.1,虽然这个功能旧版本也支持,但如果有条件升级到新版本,稳定性会更好。

举个数值示例,假设n=3,x=[1,2,3],y=[2,4,5],操作如下:

(%i1) n:3;
(%i2) x[1]:1; x[2]:2; x[3]:3;
(%i3) y[1]:2; y[2]:4; y[3]:5;
(%i4) e: sum((y[i] - (a*x[i]+b))^2, i, 1, n);
(%i5) dea: diff(e, a);
(%i6) deb: diff(e, b);
(%i7) eq1: dea=0;
(%i8) eq2: deb=0;
(%i9) solve([eq1, eq2], [a, b]);

执行后会得到具体解:[[a = 3/2, b = 1/2]],对应回归方程为y = 1.5x + 0.5。

内容的提问来源于stack exchange,提问作者Thomas Sablik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:23:20