function [eigf,eigv,dof]=laplaceeig(node,elem,problem)

 1 function [eigf,eigv,dof]=laplaceeig(node,elem,problem)
 2 % 0-boundary eigenvalue problem
 3 % problem=‘0-boundary‘
 4 [bdNode,Dirichet,inNode]=findboundary(elem);
 5 %找出边界节点、边界边的节点编号、内部节点
 6 N=size(node,1); %节点个数
 7 NT=size(elem,1); %单元个数
 8 Nin=N-size(bdNode,1); %内部节点个数
 9 ve1=node(elem(:,3),:)-node(elem(:,2),:);
10 %单元第三个节点坐标减去第二个坐标
11 ve2=node(elem(:,1),:)-node(elem(:,3),:);
12 %单元第一个节点坐标减去第三个坐标
13 ve3=node(elem(:,2),:)-node(elem(:,1),:);
14 %单元第二个节点坐标减去第一个坐标
15 area=0.5*(ve3(:,1).*ve2(:,2)+ve3(:,2).*ve2(:,1)) %求每个单元的面积
16 Dlambda(1:NT,:,1)=[-ve1(:,2)./(2*area),ve1(:,1)./(2*area)];
17 % 求 dlambda1/dx,dlambda1/dy
18 Dlambda(1:NT,:,2)=[-ve2(:,2)./(2*area),ve2(:,1)./(2*area)];
19 % 求 dlambda2/dx,dlambda2/dy
20 Dlambda(1:NT,:,3)=[-ve3(:,2)./(2*area),ve3(:,1)./(2*area)];
21 % 求 dlambda3/dx,dlambda3/dy
22 clear ve1,ve2,ve3
23 A=sparse(N,N); %生成N*N的零矩阵
24 B=sparse(N,N); %生成N*N的零矩阵
25 for i=1:3
26     for j=i:3
27         Aij=(Dlambda(:,1,i).*Dlambda(:,1,j)+Dlambda(:,2,i).*Dlambda(:,2,j)).*area;
28         % 求出去 Aij的出去对角的上三角剖分
29         if(j==i)
30             A=A+sparse(elem(:,i),elem(:,j),Aij,N,N);% 求Aij的对角元
31             B=B+sparse(elem(:,i),elem(:,j),area/6,N,N); % lambda^2在边上的积分
32         else
33             A=A+sparse([elem(:,i);elem(:,j)],[elem(:,j);elem(:,i)],[Aij;Aij],N,N);
34             B=B+sparse([elem(:,i);elem(:,j)],[elem(:,j);elem(:,i)],[area;area]/12,N,N);
35             %lambda_i*lambda_j在单元的积分
36         end
37     end
38
39 end
40 clear Aij
41 % 0-boundary 注意节点个数不够需要进行一致加密
42 A(bdNode,:)=[];A(:,bdNode)=[];
43 B(bdNode,:)=[];B(:,bdNode)=[]; %去掉边界节点
44 [eigf,eigv]=eigs(A,B,1,‘sm‘); %按模最小求第一个特征值及对应的特征向量
45 eigf=eigf/(eigf‘*A*eigf)^0.5; %按1模把特征值向量规范化 u/(u‘*A*u)
46 eigf=accumarray([inNode,ones(Nin,1)],eigf,[N,1]);% 表 u 组装成与节点个数大小
47 dof=Nin;
时间: 2024-08-27 13:41:29

function [eigf,eigv,dof]=laplaceeig(node,elem,problem)的相关文章

[A,D]=solverAdini(node,elem,bdEdge,h1,h2)

>> [A,D]=solverAdini(node,elem,bdEdge,h1,h2) A = (1,1) 14.5000 (2,1) 11.0000 (3,1) 11.5000 (4,1) 12.0000 (5,1) 11.0000 (6,1) 10.5000 (7,1) 12.0000 (8,1) 11.5000 (9,1) 11.5000 (10,1) 11.0000 (11,1) 10.5000 (12,1) 11.0000 (13,1) 12.0000 (14,1) 12.0000

jQuery.data() 与 jQuery(elem).data()源码解读

之前一直以为 jQuery(elem).data()是在内部调用了 jQuery.data(),看了代码后发现不是.但是这两个还是需要放在一起看,因为它们内部都使用了jQuery的数据缓存机制.好吧,重点就是data_user对象,跟另一个data_priv是姐妹~~ 先来看下jQuery.data(): 它调用了data_user.access( elem, name, data ); 那么data_user到底是什么鬼呢?? 我们看到,它是由Data构造的实例,Data构造器都做了一些什么呢

Node.js面试题:侧重后端应用与对Node核心的理解

Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. node开发技能图解 node 事件循环机制 起源 node正风生火起,很多介绍却停留在入门阶段,无法投入生产 node相关的高质量面试题更是少之又少,很难全面考查应聘者的node能力 许多文章在讲第三方类库,可是这些库质量差距较大,一旦遇到问题怎么办 必需的,全面了解node核心才能成为一名合格的node开发人员 目标与原则 前后端兼顾,更侧重

node.js面试题大全-侧重后端应用与对Node核心的理解

Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. github地址: https://github.com/jimuyouyou/node-interview-questions 注: 这人本人历时一星期完成的小作品,github里面对一些关键代码还有js源文件.直接node filename.js就可查看效果. 第一个版本,写的匆忙,能力有限,欢迎拍砖补充!后面持续更新会及时发布到github

jQuery源码06-jQuery = function(){};给JQ对象,添加一些方法和属性,extend : JQ的继承方法,jQuery.extend()

/*! * Includes Sizzle.js 选择器,独立的库 * http://sizzlejs.com/ */ (function( window, undefined ) { //"use strict"; var // rootjQuery = jQuery(document) = $();压缩有用 rootjQuery, // dom是否加载完 readyList, // core_strundefined == 'undefined' core_strundefined

JavaScript简明教程之Node.js

Node.js是目前非常火热的技术,但是它的诞生经历却很奇特. 众所周知,在Netscape设计出JavaScript后的短短几个月,JavaScript事实上已经是前端开发的唯一标准. 后来,微软通过IE击败了Netscape后一统桌面,结果几年时间,浏览器毫无进步.(2001年推出的古老的IE 6到今天仍然有人在使用!) 没有竞争就没有发展.微软认为IE6浏览器已经非常完善,几乎没有可改进之处,然后解散了IE6开发团队!而Google却认为支持现代Web应用的新一代浏览器才刚刚起步,尤其是浏

Node路由简单的处理

看过node很多例子,都是将路由直接放到入口文件中处理,使得文件显得很大很乱,特别是当一个项目变大,有上百甚至上千的路由,那该怎么办? 最近在想如何将一个个的路由放到一个单独的模块中处理,比如'/users'对于users模块.根据构想,写了个简单的实现,当然还有很多问题没有考虑到,后面再补充. 目录结构: 项目目录 |-- routers |-- about.js |-- contact.js |-- index.js |-- router.js |-- server.js 入口文件:serv

Node.js 事件循环

原文:https://github.com/nodejs/node/blob/master/doc/topics/event-loop-timers-and-nexttick.md 什么是事件循环(Event Loop) 事件循环能让 Node.js 执行非阻塞 I/O 操作 -- 尽管JavaScript事实上是单线程的 -- 通过在可能的情况下把操作交给操作系统内核来实现. 由于大多数现代系统内核是多线程的,内核可以处理后台执行的多个操作.当其中一个操作完成的时候,内核告诉 Node.js,

深入理解JavaScript系列(49):Function模式(上篇)

介绍 本篇主要是介绍Function方面使用的一些技巧(上篇),利用Function特性可以编写出很多非常有意思的代码,本篇主要包括:回调模式.配置对象.返回函数.分布程序.柯里化(Currying). 回调函数 在JavaScript中,当一个函数A作为另外一个函数B的其中一个参数时,则函数A称为回调函数,即A可以在函数B的周期内执行(开始.中间.结束时均可). 举例来说,有一个函数用于生成node var complexComputation = function () { /* 内部处理,