变分差分法绘图异常:函数图形反转问题排查求助
变分差分法绘图反转问题排查求助
我用以下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
相关产品推荐
相关产品推荐

