首页 > 其他分享 >二维有限元,线性插值

二维有限元,线性插值

时间:2024-05-26 12:59:20浏览次数:27  
标签:yi 有限元 xi ym xm %% 线性插值 二维 yj

设置u=-(x*x+y*y),c=(x+y),可得f=6*(x+y),设置所有边界条件为dirichlet边界条件,其他条件应该也不复杂。boundaryedge矩阵是自己对着生成网格给出来的。感觉最难的地方就是在计算单元刚度矩阵的时候,因为使用了坐标变换,变成\zeta \eta平面的标准三角形。(xi,yi),(xj,yj),(xm,ym)分别对应到(0,0),(1,0),(0,1)。

clc
clear all
n=10;
m=10;
%%计算一个二维网格,长度,宽度都为1,均分成10份,一共200个单元,121格节点,采用线性插值
%%P矩阵
for i=1:n+1
    for j=1:m+1
        p(1,(i-1)*(m+1)+j)=1/m*(i-1);
        p(2,(i-1)*(m+1)+j)=(j-1)*1/m;
    end
end
%%T矩阵
a=1;
b=2;
for i=1:n
    for j=1:m
        T(:,2*((i-1)*n+j)-1)=[a,a+11,a+12];
        T(:,2*((i-1)*n+j))=[b,b-1,b+11];
        a=a+1;
        b=b+1;
    end
    a=a+1;
    b=b+1;
end
%%边界边矩阵
    boundaryedge=[1,1,1,12;1,21,12,23;1,41,23,34;1,61,34,45;1,81,45,56;1,101,56,67;1,121,67,78;
        1,141,78,89;1,161,89,100;1,181,100,111;1,181,111,112;1,183,112,113;1,185,113,114;1,187,114,115;
        1,189,115,116;1,191,116,117;1,193,117,118;1,195,118,119;1,197,119,120;1,199,120,121;
        1,200,121,110;1,180,110,99;1,160,99,88;1,140,88,77;1,120,77,66;1,100,66,55;1,80,55,44;1,60,44,33;1,40,33,22;1,20,22,11;
        1,20,11,10;1,18,10,9;1,16,9,8;1,14,8,7;1,12,7,6;1,10,6,5;1,8,5,4;1,6,4,3;1,4,3,2;1,2,2,1];
%%构造基函数
K=zeros((n+1)*(m+1),(n+1)*(m+1));
F=zeros((n+1)*(m+1),1);
for  element=1:2*n*m
    i=T(1,element);
    j=T(2,element);
    m=T(3,element);  
    xi=p(1,i);
    yi=p(2,i);
    xj=p(1,j);
    yj=p(2,j);
    xm=p(1,m);
    ym=p(2,m);
    %%单元面积
    delta=[xi,yi,1;xj,yj,1;xm,ym,1];
    delta_s=det(delta);
    s=0.5; 
    DELTA_S=(xi-xm)*(yj-ym);
%%    
syms x y

fun_c =@(x,y) (xi-xm)*x+(xj-xm)*y+xm+(yi-ym)*x+(yj-ym)*y+ym;

fun_ni= @(x, y)  6*((xi-xm)*x+(xj-xm)*y+xm+(yi-ym)*x+(yj-ym)*y+ym).*(x)/(2*s);  

fun_nj = @(x, y) 6*((xi-xm)*x+(xj-xm)*y+xm+(yi-ym)*x+(yj-ym)*y+ym).*(y)/(2*s); 

fun_nm = @(x, y) 6*((xi-xm)*x+(xj-xm)*y+xm+(yi-ym)*x+(yj-ym)*y+ym).*(-x - y + 1)/(2*s);

% 定义形状函数 (线性形状函数)
N1 = 1 - x - y;
N2 = x;
N3 = y;
% 计算形状函数的梯度
B = [diff(N1, x), diff(N2, x), diff(N3, x); 
     diff(N1, y), diff(N2, y), diff(N3, y)];

% 定义雅可比矩阵及其行列式
J = [xj - xi, xm - xi; yj - yi, ym - yi];
%J = [xi - xm, xj - xm; yi - ym, yj - ym];
detJ = det(J);
invJ = inv(J);

ymax=@(x) 1-x;
% 计算Ke (使用局部坐标系)
Ke = detJ * integral2(fun_c, 0, 1, 0,ymax)* B'*invJ'*invJ*B;

% 计算Fe
f1 = detJ * integral2(fun_ni, 0, 1, 0, ymax);
f2 = detJ * integral2(fun_nj, 0, 1, 0, ymax);
f3 = detJ * integral2(fun_nm, 0, 1, 0,ymax);
    
    %%
    Fe = [f1, f2, f3];
    K(T(:,element),T(:,element))= K(T(:,element),T(:,element))+Ke;
    F(T(:,element)) = F(T(:,element))+ Fe';

end
%%
for i=1:40
    if boundaryedge(i,1)==1
        j=boundaryedge(i,3);
        k=boundaryedge(i,4);
        K(j,:)=0;
        K(k,:)=0;
        K(j,j)=1;
        K(k,k)=1;
        F(j)=-p(1,j)^2-p(2,j)^2;
        F(k)=-p(1,k)^2-p(2,k)^2;
    end
end
u=K\F;
%%
matrix = reshape(u, 11, 11);
clear x,y
x=0:0.1:1;
y=0:0.1:1;
subplot(1,2,1);
[x,y]=meshgrid(x,y);
mesh(x,y,matrix);
hold on 
yy=-x.^2-y.^2;
subplot(1,2,2);
mesh(x,y,yy);

不知道是什么原因,计算结果有些误差

下面是数据第一个是计算结果,第二张是精确解

欢迎讨论。

标签:yi,有限元,xi,ym,xm,%%,线性插值,二维,yj
From: https://blog.csdn.net/kerbalXspace/article/details/139213337

相关文章

  • 【智能算法应用】白鲸优化算法求解二维路径规划问题
    目录1.算法原理2.路径规划数学模型3.结果展示4.参考文献5.代码获取1.算法原理【智能算法】白鲸优化算法(BWO)原理及实现2.路径规划数学模型优化目标路径规划问题需要考虑三点:全局总路径最优避免碰撞到障碍物路径平滑性全局总路径最优考虑路径规划问题的全局最......
  • C语言中二维数组和数组名的二意性
    1.二维数组二维数组的本质,也是一维数组,一维数组中的每个元素,又是一个一维数组声明/定义:int[4]array[3]=>intarray[3][4];intmain(){inta[3][4];printf("&arr[0][0]=%p\n",&a[0][0]);//0x16f38b2e8printf("&arr[0]=%p\n",&a[0]);//0......
  • 二维码生成器,一个支持多文件在线转二维码的的工具,免费二维码生成器
    随着科技的飞速发展,二维码已成为我们生活中不可或缺的一部分。从支付到信息分享,再到活动报名,二维码以其独特的优势,为我们带来了极大的便利。在众多二维码生成器平台中,易易二维码凭借其丰富的功能和卓越的性能,逐渐崭露头角,成为众多用户的首选。本文将对易易二维码生成器平台工具的......
  • 二维码生成器,连接物理与数字世界的桥梁
    在这个数字化时代,二维码作为信息传递的桥梁,已悄然渗透到我们生活的方方面面,从支付交易、信息查询到社交互动,无所不在。易易二维码生成器,正是这样一款集多功能于一体的在线工具,它不仅简化了从链接、图文到文件的转化过程,还融入了设计美学与数据分析功能,成为了企业和个人高效传播信......
  • 自定义可移动点二维坐标轴控件
    自定义可移动点二维坐标轴控件目录路由参数坐标轴控件定义Demo路由参数X_YResultCollection为当前X轴对应Y轴值存储字典publicclassResultCollectionChangedEventArgs(RoutedEventroutedEvent,objectsource,IDictionary<double,double>resultCollection):Route......
  • 生成二维码
    需要的依赖<!--生成二维码所需依赖--><!--https://mvnrepository.com/artifact/com.google.zxing/core--><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId&g......
  • 二维CAD二次开发
         CAD二次开发语言主要有VBA,Lisp,C#,C++。Lisp是内置语言,和二维CAD本身交换容易,在实现开发中,一般先用C#语言,满足大部分功能,C++objectarx功能最为强大,C++本身难学,只是对于大型程序有用。这里主要介绍C#语言。C#主要通过以下方式进行开发。1, 编译为dll的方式,启动CAD......
  • 二维数组排序
    为了更灵活地控制排序字段和排序顺序,可以修改DataSorter类,使其能够通过参数指定排序字段和排序顺序。以下是实现方法:DataSorter类<?phpclassDataSorter{/***按指定字段和顺序排序二维数组**@paramarray$data要排序的二维数组*@param......
  • 创建二维动态数组
    1//#include<bits/stdc++.h>2#include<iostream>3#include<vector>4usingnamespacestd;5intmain(){6intn;7cin>>n;8//writeyourcodehere......910////1.使用一维数组模拟11//int*num=......
  • 使用ZXing.Net生成二维码
    所需依赖组件从工程安装的ZXing.NetNuget包查看,ZXing.Net不依赖其他组件。查看package包内容,发现内部就zxing.dll和zxing.presentation.dll两个动态库文件。ZXing.Net生成的二维码形式生成的二维码形式为内存Bitmap图像对象,如果需保存为文件或Base64字符串需另外书写代码实......