查看: 143|回复: 5|关注: 0

[已答复] 【MATLAB】求代码,基于二位坐标的面积加权平均值计算

[复制链接]

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
发表于 2020-11-17 15:10:26 | 显示全部楼层 |阅读模式
我通过有限元分析得到了平面上一个区域的应力云图,已知该平面区域内各个节点的应力值和节点对应的二维坐标,怎样用MATLAB计算此区域内的面积加权平均值?
有没有人做过类似的计算,求代码......
回复主题 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 2020-11-17 19:49:53 | 显示全部楼层
因为网格是不均匀的,所以所求区域内的平均应力不是算术平均值,而是需要给各个节点应力附加一个面积权重,有做过类似计算的大佬吗?
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

26

主题

1215

帖子

161

最佳答案
  • 关注者: 49
发表于 5 天前 | 显示全部楼层
你这说的是不是二维卷积?
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
caicaibi 发表于 2020-11-21 18:48
你这说的是不是二维卷积?

可以这么理解,但在这个问题上没有那么理想的数学模型。我把我的实现方法贴在楼下吧。
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
input = xlsread('V_BL01.xlsx');
x = input(:,5);
y = input(:,6);
sigma = input(:,3);
% epsilon = input(:,4);
Num_nodes = length(x);
Sum_weight = 0;
Sum_sigma = 0;
% Sum_epsilon = 0;
for i = 1: Num_nodes
    A=[];
    B=[];
    for j = 1:Num_nodes
        distance2(j) = ( x(j)-x(i) )^2 + ( y(j)-y(i) )^2;
    end
    order1 = sort(distance2);
    len1 = sqrt(order1(2));  
    for j = 1:Num_nodes
        if j-i==0
            A = A;
        else
            if   abs(x(j)-x(i))<1/2000
                 A = [A,abs(y(j)-y(i))];
            else
                 A = [A,0.05];
            end
        end
    end
        order2 = sort(A);
        L1 = order2(1);
    for j = 1:Num_nodes
        if j-i==0
            B = B;
        else
            if   abs(y(j)-y(i))<1/2000
                 B = [B,abs(x(j)-x(i))];
            else
                 B = [B,0.05];
            end
        end
    end
        order3 = sort(B);
        L2 = order3(1);
    len3 = min(L1,L2);
    Sum_weight = Sum_weight + len1*len3;
    Sum_sigma = Sum_sigma + sigma(i)*len1*len3;
%     Sum_epsilon = Sum_epsilon + epsilon(i)*len1*len3;
    clear distance2
    clear A
    clear B
    clear order1
    clear order2
    clear order3
end

sigma_avrg = Sum_sigma/Sum_weight
% epsilon_avrg = Sum_epsilon/Sum_weight
回复此楼 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


1

主题

5

帖子

0

最佳答案
 楼主| 发表于 5 天前 | 显示全部楼层
xlsgssss 发表于 2020-11-21 19:05
input = xlsread('V_BL01.xlsx');
x = input(:,5);
y = input(:,6);

由于网格是四边形的,每一个节点有四个相邻点,取此点与其余各点距离的最小值a为权重矩形的短边,再取与该点在同一横线或竖线上的点,求距离并取最小值b,即为权重矩形的长边,权重矩形的面积S=a*b,如此嵌套两层循环即可求得面积权重应力(应变)均值。当然,这是个简化的算法,所谓的“权重矩形”实际并不存在,只是代替节点周围的面积大小而已,也就是量化某一节点周围的稀疏程度,得到的加权均值精度不是特别高。
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

快速回复 返回顶部 返回列表