偏微分方程数值算法和matlab实验报告.docVIP

偏微分方程数值算法和matlab实验报告.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
WORD格式可编辑 专业知识分享 偏微分方程数值实验报告六 实验题目: 用Ritz-Galerkin方法求边值问题 的第n次近似,基函数为并用表格列出0.25,0.5,0.75三点处的真解和时的数值解。 实验算法: 将上述边值问题转化为基于虚功方程的变分问题为: 求 ,满足 其中 记,引入的n维近似子空间利用Ritz-Galerkin公式:,则问题关于下的近似变分问题解中的系数满足 程序代码: %主函数 pde=modeldata(); I=[0,1]; %积分精度 quadorder=10; n=[1,2,3,4]; fori=1:length(n) uh{i}=Galerkin(pde,I,n(i),quadorder); end showsolution(uh{1},-bo); holdon showsolution(uh{2},-rx); holdon showsolution(uh{3},-.ko); holdon showsolution(uh{4},--k*); holdoff title(the solution of the un); xlabel(x); ylabel(u); legend(n=1,n=2,n=3,n=4); %计算这三点的数值解 x=[1/4,1/2,3/4]; un=zeros(length(n),3); fori=1:length(n) [v, ]=basis(x,n(i)); un(i,:)=(v*uh{i}); end formatshorte disp(un); disp(un); %存储数据 functionpde=modeldata() pde=struct(f,@f); function z=f(x) z=x.*x; end end %Galerkin方法 function uh=Galerkin(pde,I,n,quadorder) h=I(2)-I(1); [lambda,weight]=quadpts1d(I,quadorder); nQuad=length(weight); A=zeros(n,n); b=zeros(n,1); for q=1:nQuad gx=lambda(q); w=weight(q); x=[0.25;0.5;0.75]; [phi,gradPhi]=basis(gx,n); A=A+(-gradPhi*gradPhi+phi*phi)*w; b=b+pde.f(gx)*phi*w; end A=h*A; b=h*b; uh=A\b; end %构造基函数 function [phi,gradPhi]=basis(x,n) m=length(x); w=sin(pi*x); v=ones(n,m); v(2:end,:)=bsxfun(@times,v(2:end,:),x); v=cumprod(v,1); phi=bsxfun(@times,v,w); gw=pi*cos(pi*x); gv=[zeros(1,m);v(1:end-1,:)]; gv(3:end,:)=bsxfun(@times,(2:n-1),gv(3:end,:)); gradPhi=bsxfun(@times,v,gw)+bsxfun(@times,gv,w); end %数值解的图像 functionshowsolution(u,varargin) x=0:0.01:1; n=length(u); [v, ]=basis(x,n); y=v*u; plot(x,y,varargin{:}); % varargin: an input variable in a function end %系数矩阵A function [lambda,weight] = quadpts1d(I,quadorder) numPts = ceil((quadorder+1)/2); ifnumPts 10 numPts = 10; end switchnumPts case 1 A = [0 2.0000000000000000000000000]; case 2 A = [0.5773502691896257645091488 1.0000000000000000000000000 -0.5773502691896257645091488 1.0000000000000000000000000]; case 3

文档评论(0)

smdh + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档