微分方程数值解求uu解答

用连续分片线性有限元方法求解下列方程

-d(k(x)du/dx)/dx=f,,0 < 𝑥 <π/2
𝑢(0) = 0, 𝑢 (π/2) = 0
其中,k(x) = 𝑒^(𝑥)
, 𝑓 = −𝑒^(𝑥)[cos(𝑥) − 2 sin(𝑥) − 𝑥𝑐𝑜𝑠(𝑥) − 𝑥𝑠𝑖𝑛(𝑥)],精确解为
u(x) = xcos(x)。给出有限元方法,并进行数值实验分别给出在 N=4,8,16,32,64 等
分下的最大误差(附程序,体现局部单元的节点与整体节点的映射关系)
需要程序,需要程序,需要程序

% 定义网格
N = 64;  % 单元数
h = pi/2 / N;  % 单元长度
x = 0:h:pi/2;  % 节点坐标

% 定义系数矩阵和右端项
A = zeros(N+1);
b = zeros(N+1, 1);
for i = 2:N
    A(i, i-1) = 1/h^2;
    A(i, i) = -2/h^2;
    A(i, i+1) = 1/h^2;
    b(i) = -exp(x(i)) * (-cos(x(i)) + 2*sin(x(i)) + x(i)*cos(x(i)) + x(i)*sin(x(i)));
end

% 在边界处添加约束条件
A(1,1) = 1;
b(1) = 0;
A(N+1,N+1) = 1;
b(N+1) = 0;

% 求解线性方程组
u = A\b;

% 计算精确解
uexact = x .* cos(x);

% 计算最大误差
error = max(abs(u - uexact));

% 输出最大误差
disp(error);

望采纳。

在连续分片线性有限元方法中,我们通常先将区间 [0, π/2] 划分为若干个相邻的小区间,称为分片。然后在每个分片上使用一次函数来近似 u(x) 的值。

我们设小区间的个数为 N,并设第 i 个分片的左端点为 xi,右端点为 xi+1。对于第 i 个分片,我们假设 u(x) 在该分片上可以表示为一次函数:

u(x) = ai + bi(x - xi)

我们设 ki(x) = k(x),则方程可以写成如下形式:

-d(ki(x)du/dx)/dx=f

由于 u(x) 在第 i 个分片上可以表示为一次函数,所以 du/dx 在第 i 个分片上也可以表示为一次函数。我们设 du/dx = bi,则上式可以化为:

-d(ki(x)bi)/dx=f

积分两边得:

∫k(x)bi dx = ∫f dx

左式中的积分可以近似为:

∫k(x)bi dx ≈ (ki(xi) + ki(xi+1))/2 * (xi+1 - xi) * bi

右式中的积分可以近似为:

∫f dx ≈ (f(xi) + f(xi+1))/2 * (xi+1 - xi)

将上式带入得:

(ki(xi) + ki(xi+1))/2 * (xi+1 - xi) * bi = (f(xi) + f(xi+1))/2 * (xi+1 - xi)

移项得:

bi = (f(xi) + f(xi+1))/2 * (xi+1 - xi) / ((ki(xi) + ki(xi+1))/2 * (xi+1 - xi))