
展开全部
下面是我写的,放心用去啦~~~
%超松弛迭代(SOR方法)
function [x k flag]=SOR(A, b, eps ,w,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%w为超松弛因子,默认值为1
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<5 maxl=100;end
if nargin<4 w=1;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while true
y=x; %y,z均为辅助变量
for i=1:n
z=b(i);
for j=1:n
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;
end
if norm(y-x,inf)<eps
break;
end
k=k+1;
end
%Jacobi迭代法解线性方程组
function [x k flag]=Jacobi(A, b, eps ,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<4 maxl=100;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf)<eps
break;
end
x=y; k=k+1;
end
稍微调试肯定可以通过,都是经过测试的,记得给我分数呦,谢啦~~~
%超松弛迭代(SOR方法)
function [x k flag]=SOR(A, b, eps ,w,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%w为超松弛因子,默认值为1
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<5 maxl=100;end
if nargin<4 w=1;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while true
y=x; %y,z均为辅助变量
for i=1:n
z=b(i);
for j=1:n
if j~=i
z=z-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
z=z/A(i,i);x(i)=(1-w)*x(i)+w*z;
end
if norm(y-x,inf)<eps
break;
end
k=k+1;
end
%Jacobi迭代法解线性方程组
function [x k flag]=Jacobi(A, b, eps ,maxl)
%A为方程组的系数矩阵
%b为方程组的右端向量
%eps为精度要求
%maxl为最大迭代次数,缺省值为100
%x为方程组的解
%k为迭代次数
%flag为指标变量
%赋初值:
if nargin<4 maxl=100;end
if nargin<3 eps=1e-5;end
n=length(b); k=0;
x=zeros(n,1); y=zeros(n,1); flag='OK';
%开始迭代:
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10|k==maxl
flag='failure';return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf)<eps
break;
end
x=y; k=k+1;
end
稍微调试肯定可以通过,都是经过测试的,记得给我分数呦,谢啦~~~
展开全部
可以先看看《精通matlab7.0》,把上半册看完,就差不多够用了,然后再去学数值分析,边学边动手操作,很有趣的
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个人经验:
我个人认为重要的还是对数值分析方法本身的学习和理解,也就是把自己的数学底子打牢。而对于matlab,仅仅是个工具。
不谦虚的说,只要知道一种程序语言的基本知识,在比较好的数学功底下,大多数的程序都是可以自己编代码解决的,而matlab之所以好用是因为提供了很多方便使用的函数、仿真之类的。举例来讲,学信号分析的人都要学fft,matlab中也提供了该函数,但如果你不知道fft本身的数学基础,何谈对该函数的理解应用?这也是我自己的感受,在遇到某些以前未用的函数时,就总会去理解和学习,甚至查找这个函数实际的计算方法是什么,也就是数学基础咯。
所以,工具的掌握在于练,只是武功招式,而内功是数学基础,把数学基础和程序的算法能合二为一时,你就算是打通了任督二脉,必是高手。
个人经验,仅供参考。
我个人认为重要的还是对数值分析方法本身的学习和理解,也就是把自己的数学底子打牢。而对于matlab,仅仅是个工具。
不谦虚的说,只要知道一种程序语言的基本知识,在比较好的数学功底下,大多数的程序都是可以自己编代码解决的,而matlab之所以好用是因为提供了很多方便使用的函数、仿真之类的。举例来讲,学信号分析的人都要学fft,matlab中也提供了该函数,但如果你不知道fft本身的数学基础,何谈对该函数的理解应用?这也是我自己的感受,在遇到某些以前未用的函数时,就总会去理解和学习,甚至查找这个函数实际的计算方法是什么,也就是数学基础咯。
所以,工具的掌握在于练,只是武功招式,而内功是数学基础,把数学基础和程序的算法能合二为一时,你就算是打通了任督二脉,必是高手。
个人经验,仅供参考。
来自:求助得到的回答

你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询