Matlab一维边值问题有限元程序-代码

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
单元刚度阵ke推导:
在这里插入图片描述
计算结果:
在这里插入图片描述
代码:

clc;clear

p = @(x) 1+0.*x;
q = @(x) 0.*x;
N = 10;f = @(x) sin(pi/2.*x);
% N = 4; f = @(x) 2+0.*x;
a = 0;
b = 1;
h = (b-a)/N; % 单元长度
n = N+1; % 节点个数
X = a:h:b;
[K,F] = globalstiffness(a,b,N,h,p,q,f);
% 施加边界条件 u(a)=0;
Kr = K(2:end,2:end);
Fr = F(2:end);
x = Kr\Fr;
Xsol = [0;x]; % 添加边界条件到解向量

%% 画出解
figure('position',[300 200 600 350]); hold on; box on% 指定图片位置和尺寸
plot(X,Xsol,'k-','linewidth',2)
xlabel x
ylabel u(x)
title(sprintf('N=%d\n',N))
saveas(gcf,sprintf('N=%d.png',N))

function [K,F]= globalstiffness(a,b,N,h,p,q,f)
% 生成总体刚度阵
n = N+1; % 节点个数
X = a:h:b;
K = zeros(n);
F = zeros(n,1);
for i = 1:N
    % 从单元刚度阵形成整体刚度阵
    k=localstiffness(X(i),X(i+1),h,p,q);
    K(i:i+1,i:i+1) = K(i:i+1,i:i+1) + k;
    % 从单元力向量形成整理力向量
    lf = localforce(X(i),X(i+1),h,f);
    F(i:i+1) = F(i:i+1)+lf;
end
end

猜你喜欢

转载自blog.csdn.net/huangzhywin/article/details/89162572