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

使用MuPAD求解差分方程组遇变量定义问题,求正确解法

解决MuPAD中求解该线性方程组的问题

首先得指出你之前代码的核心问题:没有把两个边界条件(x[1]=1和x[50]-x[49]=h)加入到方程列表eqs中,导致方程数量(48个递推式)远少于变量数量(50个),自然无法得到唯一解。下面给你两种可行的解决方法:

方法一:直接构建完整线性方程组,用数值解法求解

这种方法不需要推导通解,直接把所有约束条件整合起来交给MuPAD的线性求解器处理,步骤很直观:

# 定义步长h
h := 0.1;

# 构建完整的方程列表:边界条件1 + 递推方程(i=2到49) + 边界条件2
eqs := [x[1] = 1] 
       + [x[i-1] - (2 - h^2)*x[i] + x[i+1] = 0 $ i = 2..49] 
       + [x[50] - x[49] = h];

# 定义所有待求解的变量
vars := [x[i] $ i = 1..50];

# 调用数值线性求解器
sol := numeric::linsolve(eqs, vars);

这里用MuPAD的$符号快速生成序列,把三个部分的方程合并成包含50个方程的列表,刚好对应50个变量,求解器就能返回每个x[i]的数值结果了。

方法二:先求递推关系的通解,再代入边界条件计算

如果你想理解解的解析形式,可以先推导递推方程的通解,再用边界条件确定常数,最后计算每个x[i]:

步骤1:推导递推方程的通解

你的递推方程是二阶线性齐次递推:x[n+1] - (2 - h²)x[n] + x[n-1] = 0,对应的特征方程为:
r² - (2 - h²)r + 1 = 0

代入h=0.1计算,特征根是一对共轭复数,可以表示为r = e^(±iθ),其中θ = arccos(1 - h²/2),因此通解形式为:
x[n] = A·cos((n-1)θ) + B·sin((n-1)θ)

步骤2:用边界条件确定常数A和B

  • 由x[1]=1,代入n=1得:A·cos(0) + B·sin(0) = 1,直接得到A=1
  • 由x[50]-x[49]=h,代入通解并利用三角恒等式化简,可解出B的表达式:
    B = [h/(2·sin(θ/2)) + sin(97θ/2)] / cos(97θ/2)

步骤3:在MuPAD中实现计算

h := 0.1;
# 计算θ的值
theta := arccos(1 - h^2/2);
# 确定常数A和B
A := 1;
B := (h/(2*sin(theta/2)) + sin(97*theta/2)) / cos(97*theta/2);
# 定义通解函数
x := n -> A*cos((n-1)*theta) + B*sin((n-1)*theta);
# 生成x[1]到x[50]的所有值
values := [x(n) $ n = 1..50];

两种方法得到的结果是一致的,第一种适合快速求解大规模问题,第二种能帮你理解解的数学性质。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:46:56