牛顿法求解非线性方程组的论文
2023-07-13阅读(448)
问:牛顿迭代法解非线性方程组
- 答:一元非线性方程的牛顿迭代公式和原理
以一元非线性方程 f(x)=0 为例,对函数 f(x)进行Taylor级数展开(只展开至线性项)得
f(x) = f(x0)+f'(x0)(x-x0)
所以方程可写成
f(x0)+f'(x0)(x-x0) = 0
其中x0是给定的已知值,肆胡源则不难推导出方程的解(当然,只是近似解,毕竟Taylor展开过程中只取了线性项)
x = x0 - f(x0) / f'(x0)
其中x不是真实解,但是相比之前的x0更靠近真实解了,因此可以多重复几次上述过做脊程,裂态从而使得到的解非常接近准确值。所以,对于一元非线性方程,牛顿拉夫逊迭代公式为:
x(k+1) = x(k) - f(x(k))/ f'(x(k))
根据Taylor级数的几何意义我们可以从几何上形象的看牛顿迭代法的求解f(x)=0的过程。
第一次迭代x1 = x0 - f(x0)/ f'(x0),其中f(x0)/ f'(x0)的几何意义很明显,就是x0到x1的线段长度(这可以从直角三角形的知识得到)。第二次迭代x2= x1 - f(x1)/ f'(x1),其中f(x1)/ f'(x1)的几何意义很明显,就是x1到x2的线段长度。同理可以进行第三次迭代第四次迭代,可以明显的看出x的取值在不断逼近真实解x*。
问:跪求用牛顿迭代法解非线性方程组,急!!
- 答:下面的是用MATLAB的
牛顿迭代~
%manewton.m
function x=manewton(fun,dfun,x0,ep,N)
%用途:用牛顿法求解旦卜非线性方程f(x)=0
%格式:x=manewton(fun,dfun,x0,ep,N) fun和dfun分别为表示f(x)的
%函指衫数句唯迟腔柄,x0为迭代初值,ep为精度(默认1e-4),N为最大迭代
%次数(默认为500),x返回近似根
if nargin<5,N=500;end
if nargin<4,ep=1e-4;end
k=0;
while k<N
x=x0-feval(fun,x0)/feval(dfun,x0);
if abs(x-x0)<ep
break;
end
x0=x; k=k+1;
end
if k==N, warning('已达迭代次数上限'); end
disp(['k=',num2str(k)])
问:求解非线性方程组的牛顿迭代法的具体思想及方法并附有matlab 源程序
- 答:function x=Newton(fname,dfname,x0,e,N)
%用途:Newton迭代法解非线性方程f(x)=0
%fname和dfname分州扮神缺姿别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
%x0为迭代初值,e为精度(默认值1e-7)
%x为返回数值解,并显示计算过程,设置迭代册亏次数上限N以防发散(默认500次)
%实例:解方程ln(x+sin(x))=0
%在matlab窗口中输入:Newton(@(x)log(x+sin(x)),@(x)(1+cos(x))/(x+sin(x)),0.1)
if nargin<5,N=500;end
if nargin<4,e=1e-7;end
x=x0;x0=x+2*e;k=0;
fprintf('x[%d]=%12.9f\n',k,x)
while abs(x0-x)>e&&k<N
k=k+1;
x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);
fprintf('x[%d]=%12.9f\n',k,x)
end
if k==N
fprintf('已达到迭代次数上限');
end
上面的程序段只是一个思路,你可以自己再理解一下,其实matlab中有一个内部函数fsolve,就可以直接求解非线性方程组的,很简单好用的!
祝你解决问题! - 答:# include <姿槐stdio.h>搜册薯
# include <math.h>
int main ()
{
double x1,x0,f,f1;
x1 = 1.5;
do
{
x0 = x1;
f = ((2 * 0 - 4) * x0 + 3)* x0 - 6;
f1 = (6 * x0 - 8) * x0 + 3;
x1 = x0 - f /世者 f1;
}while (fabs(x1 - x0) >= 1e-5);
printf ("%5.2f\n",x1);
return 0;
}