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

变分差分法绘图异常:函数图形反转问题排查求助

变分差分法绘图反转问题排查求助

我用以下Maple代码实现变分差分法,原本想绘制目标绿色函数图形,但实际得到的红色图形存在反转问题,推测异常可能和二阶导数符号有关,现寻求错误排查方法:

restart;

N := 100;
h := 10/N;

xi := Vector(N+1);
for i to N+1 do
    xi[i] := (i-1)*h
end do;

X := proc (x) options operator, arrow; 8*sqrt(x) end proc;
Xi := Vector(N+1);
for i to N+1 do
    Xi[i] := evalf(X(xi[i]))
end do;

s0 := 1/2;
E := proc (x, i) options operator, arrow;
    piecewise(i <= x and x <= i+3/5, 3/5, i+3/5 < x and x <= i+1, 3.5, 0)
end proc;
E0 := E(xi[1], 0);

u := Vector(N+1);
u0 := 0;
for i to N+1 do for j to 10 do 
  if i = 1 then
      u[i] := 0 
  elif `and`(i = N+1, E(xi[i-1], j-1) <> 0) then 
      EN := (E(xi[i-1], j-1)+E(xi[i-2], j-1))*(1/2); 
      u[i] := (-E0*v[i]+EN*v[i-1])/h+(1/2)*h*Xi[i]+s0 
  else
      firstEi; secondEi; 
      if E(xi[i-1], j-1) <> 0 then
          firstEi := (E(xi[i], j-1)+E(xi[i-1], j-1))*(1/2)
      end if; 
      if E(xi[i], j-1) <> 0 then 
          secondEi := (E(xi[i+1], j-1)+E(xi[i], j-1))*(1/2) 
      end if;
      u[i] := (firstEi*v[i-1]-(firstEi+secondEi)*v[i]+secondEi*v[i+1])/h+h*Xi[i]
  end if 
end do;

A := Matrix(N+1, N+1);
for i to N+1 do
    for j to N+1 do
        if `and`(i = 1, j = 1) then
            A[i, j] := 0 else A[i, j] := coeff(u[i], v[j])
        end if
    end do
end do;

B := Vector(N+1);
for i to N+1 do
    B[i] := coeffs(u[i])[1]
end do;

triangleMatrix := gaussjord(concat(A, B));
solution := backsub(triangleMatrix);
R := [seq([xi[n], solution_reverse[n]], n = 1 .. N+1)];
listplot(R, color = red);

实际绘图与预期对比:
绘图对比图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:32:47