方程求根
一、目的和意义
非线性方程在科学研究与工程实践中广泛出现,例如,优化问题、特征值问题、微分方程问题等。但是,除少量方程外,大多数非线性方程求根相当困难,常见的几个简单、有效的数值求根方法,包括二分法、迭代法、牛顿法、割线法等,本实验旨在比较各种算法的计算性能和使用范围。
二、计算公式 1.二分法 2.不动点迭代法 三、结构程序设计代码 1.二分法
1).定义所求解函数
function [ y ] = f( x ) y = x^3 + 4*x^2 - 10; end
2).执行算法
%初始化,设置区间端点a、b,误差限tol a = 1; b = 2; tol = 0.5*10^(-6); k = 0; fa = f(a); %设置最大二分次数为30 for k = 1:50
p = (a + b)/2; fp = f(p); if(fp == 0 || (b - a)/2 < tol) break end
if(fa * fp < 0) b = p; else a = p;
end
disp('近似解p = ');disp(vpa(p,10)); disp('迭代次数k = ');disp(k); end
2.不动点迭代法
1).定义不动点方程g(x)
function [ y ] = g( x )
y = x^3 + 4*x^2 + x - 10; end
2).执行算法
%初始化,设置误差限,设置初值p0 tol = 0.5*10^(-6); k = 1; p0 = 1.5; %迭代次数为10次 while k <= 10 p = g(p0);
if abs(p - p0) < tol break end
disp('近似解p = ');disp(vpa(p,10)); disp('迭代次数k = ');disp(k); k = k + 1; p0 = p; end
四、结果及其讨论 1.二分法结果
由于结果较长,只取了一部分,从图中可以看出,迭代20次可得到误差限范围内的近似解p=1.36522。
2.不动点迭代法结果
由结果可以看出,函数不收敛,当迭代次数为6时,已经近似趋向于无穷大。
3.讨论
上面实验通过两种方法近似计算了函数的解,二分法可在迭代20次的情况下求出近似解,而由于所设的不动点方程发散,所以使用不动点迭代法无法求出近似解。因此,在实际计算过程中,使用不动点迭代法时,在建立不动点方程后,要分析其收敛性。