函数文件:

 function [x,n,flag]=sor(A,b,eps,M,max1)
%sor函数为用松弛迭代法求解线性方程组
%A为线性方程组的系数矩阵
%b为线性方程组的常数向量
%eps为精度要求
%M为超弛因子
%max1为最大迭代次数
%u为线性方程组的解
%n为迭代次数
%flag为指标变量,flag='OK!'表示迭代收敛达到指标要求
%flag='fail!'表示迭代失败
if nargin<5
max1=10000;
end
if nargin<4
M=1;
end
if nargin<3
eps=1e-11;
end
k=length(A);
n=0;
x=zeros(k,1);
y=zeros(k,1);
flag='OK!';
while 1
y=x;
for i=1:k
z=b(i);
for j=1:k
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10 | n==max1
flag='fail!';
return;
end
z=z/A(i,i);
x(i)=(1-M)*x(i)+M*z;
end
if norm(y-x,inf)<eps
break;
end
n=n+1;
end

脚本文件:

 tic;
clear
clc
N=100;
h=1/N;
x=0:h:1;
for i=1:length(x)
Accurate(i)=sin(4*pi*x(i));
end
Accurate=Accurate';%精确解
A=diag(2/h^2*ones(N+1,1))+diag(-1/h^2*ones(N,1),1)+diag(-1/h^2*ones(N,1),-1);
A(1,1)=1;
A(1,2)=0;
A(N+1,N+1)=1;
A(N+1,N)=0;
b=zeros(N+1,1);
for i=1:N-1
b(i+1,1)=16*pi^2*sin(4*pi*x(i+1)); %右端函数
end
u0=zeros(N+1,1);
[u,n]=GaussSeid(A,b,u0)
numerial=u;%数值解 toc;
figure(1)
plot(x,Accurate,'r *',x,numerial,'g v');
legend('Accurate','numerial');
xlabel('x');
ylabel('y');
grid on;
toc;
figure(2)
plot(x,numerial-Accurate,'r *');
legend('error');
xlabel('x');
ylabel('y');
grid on;

最新文章

  1. PowerShell脚本自动设置安卓手机wifi代理
  2. ftp put本地文件至ubuntu服务器报错
  3. Mybatis中 sequence不能自增长
  4. JavaScript Promise API
  5. 校内OJ 1128 词链(link)(Trie+DFS)
  6. Android禁止横屏竖屏切换
  7. Error: The VPN client agent was unable to create the interprocess communication depot.
  8. Qt增加webp格式支持
  9. 依赖注入与Unity(一) 介绍
  10. 启动外部exe程序
  11. WPF、WinForm(C#)多线程编程并更新界面(UI)(转载积累)
  12. 个推 Spark实践教你绕过开发那些“坑”
  13. Apache指南:CGI动态页面
  14. win8.1去掉鼠标右键回收站固定到开始菜单的方法
  15. FTP配置的一些笔记
  16. 使用netty的第一个Hello World
  17. Django基础(二):环境配置
  18. 海量数据挖掘MMDS week3:流算法Stream Algorithms
  19. App Store10大被拒理由
  20. Ubuntu MariaDB PhpMyAdmin

热门文章

  1. Python实现机器学习算法:逻辑回归
  2. Linux命令2——b
  3. Linux命令1——a
  4. eclipse创建springBoot项目
  5. 使用 node 创建代码服务器
  6. vim命令详解
  7. [0406]学习一个——Unit 1 Html、CSS与版本控制
  8. bash:command not found解决方法
  9. 副本死亡传送(_instance_die_tele)
  10. IPC 之 ContentProvider 的使用