MATLAB迭代法? matlab迭代法举例
MATLAB简单迭代法
1)for循环那里x=1.4后面应为冒号
2)for 少了对应的end
3)for循环里x_derivative为sym类型,不能直接运算,需用subs代入数值
4)迭代算法需要大改,n没有定义
MATLAB迭代法
展开全部
牛顿法
fx=inline('x^3-x^2-1','x');
dfx=inline('3*x^2+2*x','x');
x0=1;
e=1e-8;
N=500;
x=x0;
x0=x+2*e;
k=0;
while abs(x0-x)>e&k k=k+1;x0=x;x=x0-feval(fx,x0)/feval(dfx,x0);
disp(x);
end
if k==N,warning('已达到迭代次数上限');
end
用matlab做,牛顿迭代法
function [ A ] = cal( a,b,v )%a,b表示区间,v是精度
i=1;
x = (a+b)/2;
A=[i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
while(abs(t-x)>v)
i=i+1;
x = t;
A = [A;i x];
t = x-(x^3-x-1)/(3*x^2-1);%迭代函数
end
A = [A;i+1 t];
end
运行结果:
>> format long;
>> cal(1,2,0.00001)
ans =
1.000000000000000 1.500000000000000
2.000000000000000 1.347826086956522
3.000000000000000 1.325200398950907
4.000000000000000 1.324718173999054
5.000000000000000 1.324717957244790
牛顿迭代法(Newton's method)又称为牛顿-拉夫逊(拉弗森)方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收敛。另外该方法广泛用于计算机编程中。
已经证明,如果是连续的,并且待求的零点是孤立的,那么在零点周围存在一个区域,只要初始值位于这个邻近区域内,那么牛顿法必定收敛。 并且,如果不为0, 那么牛顿法将具有平方收敛的性能. 粗略的说,这意味着每迭代一次,牛顿法结果的有效数字将增加一倍。[1]
迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。迭代算法是用计算机解决问题的一种基本方法。它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:
一、确定迭代变量
在可以用迭代算法解决的问题中,至少存在一个可直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。不能让迭代过程无休止地执行下去。迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析得出可用来结束迭代过程的条件。
matlab中迭代法求最值
function [n,x]=sor22(a,b,x,nm,w,ww)
%用超松弛迭代法求解方程组ax=b
%输入:a为方程组的系数矩阵,b为方程组右端的列向量,x为迭代初值构成的列向量,nm为最大迭代次数,w为误差精度,ww为松弛因子
%输出:x为求得的方程组的解构成的列向量,n为迭代次数
n=1;
m=length(a);
d=diag(diag(a)); %令a=d-l-u,计算矩阵d
l=tril(-a)+d; %令a=d-l-u,计算矩阵l
u=triu(-a)+d; %令a=d-l-u,计算矩阵u
m=inv(d-ww*l)*((1-ww)*d+ww*u); %计算迭代矩阵
g=ww*inv(d-ww*l)*b; %计算迭代格式中的常数项
%下面是迭代过程
while n<=nm
x=m*x+g; %用迭代格式进行迭代
if norm(x-x,'inf') disp('迭代次数为');n disp('方程组的解为');x return; %上面:达到精度要求就结束程序,输出迭代次数和方程组的解 end x=x;n=n+1; end %下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并不是方程组的解) disp('在最大迭代次数内不收敛!'); disp('最大迭代次数后的结果为');x 上面是完整的超松弛迭代法