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