牛顿迭代
求方程,在 x0 = 1.5附近的近似实根。准确到小数点后4位数字
为了方便计算函数值和函数的导数值,编制函数float function(float x)用于计算函数值,编制float derivative(float x)计算函数的一阶导数值。
#include "stdio.h"
#include "math.h"
float function(float x)
{
float f;
f= x*((2*x-4)*x+3)-6;
return f;
}
float derivative(float x)
{
float f;
f= (6*x-8)*x+3;
return f;
}
void main()
{
float x,x0,fx,f;
x=1.5;
do
{
x0=x;
fx=function(x0);
f=derivative(x);
x=x0-fx/f;
}
while(fabs(x-x0)>=1e-6);
printf("The root is %f",x0);
}
求方程,在 x0 = 2附近的近似实根。准确到小数点后4位数字
计算步骤如下:
(1)选x0=2,按照迭代公式计算x1;
(2)若|x1-x0|<=0.00001,终止迭代;否则,x0=x1;转(1);
(3)输出迭代次数和近似根
写牛顿迭代法的程序:
function [fun,dfun]=fun0(x)
fun=x^3-3*x-1;%求原函数的值
dfun=3*x^2-3;%求一阶导数的值;
x0=2;
[fun,dfun]=fun0(x0);
x1=x0-fun/dfun;i=1;
while abs(x1-x0)>0.00001
x0=x1;
[fun,dfun]=fun0(x0);
x1=x0-fun/dfun;
i=i+1;
end
disp('the solution is x1=')
x1
disp('the iter time is ')
i
1 牛顿迭代法
下面给出了Newton迭代法的计算程序.
function x=newton(fname,dfname,x0,e)
%用途:Newton迭代法解非线性方程f(x)=0
%格式:x=nanewton( fname,dfname,x0,e) x返回数值解,
%fname和dfname分别表示f(x)及其导函数c语言牛顿迭代法求根
%f'(x),x0为迭代初值,e精度要求(默认为1e-4)
if nargin<4,e=1e-4; %精度默认为1e-4
end
x=x0;x0=x+2*e; %使while成立,进入while后x0得到赋值
while abs(x0-x)>e
x0=x;
x=x0-feval(fname,x0)/feval(dfname,x0);
end
2 牛顿迭代法的实现及应用
2.1 Newton迭代法具体例子的实现
用Newton迭代法解方程 在1.5附近的根.
解:当时,,即恒正,所以根在[0,2].我们先用图解法初值,在用Newton法程序newton.m求解.
fun= inline('x^3+x^2-3*x-3');
fplot(fun,[0,2]);
grid on;
图 2.1 的函数图像
由图可知方程有唯一正根在[1.6,1.8]之间,我们取初值1.5代入Newton程序中.
dfun=inline('3*x^2+2*x-3');
format long;
newton(fun,dfun,1.5,1e-4);
format short;
ans =
1.73205080756888
而用Matlab本身的函数fzero求出来的结果为:
format long;
fzero(inline('x^3+x^2-3*x-3'),1.5);
format short
ans =
1.73205080756888
下面用牛顿迭代法解决一些实际问题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论