急!哪位大哥会matlab 帮忙写个程式,用牛顿迭代法求方程X^3-3*x-1=0在2附近的解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
急!哪位大哥会matlab 帮忙写个程式,用牛顿迭代法求方程X^3-3*x-1=0在2附近的解
syms x
x0=2;
f=x^3-3*x-1;
eps=1e-6;
maxt=1000;
fx=diff(f,x);
x1=x0;
t=1;
while t<=maxt
x2=x1-subs(f/fx,x,x1);
if abs(x1-x2)
break;
end
[t,x1,x2] %迭代次数,迭代前,迭代后
x1=x2;
t=t+1;
end
subs(f,x,x2)
用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根
#include
#include
#include
#define N 100
#define PS 1e-5定义精度
#define TA 1e-5定义精度
float Newton(float (*f)(float),float(*f1)(float),float x0 )
{ float x1,d=0;
int k=0;
do
{ x1= x0-f(x0)/f1(x0);
d=(fabs(x1)<1?x1-x0:(x1-x0)/x1);
x0=x1;
printf("x(%d)=%f\n",k,x0);
}
while((fabs(d))>PS&&fabs(f(x1))>TA) ;
return x1;
}
float f(float x)
{ return 2*x*x*x-4*x*x+3*x-6; }
float f1(float x)
{ return 6*x*x+8*x+3; }对方程求导
void main()
{ float f(float);
float f1(float);
float x0,y0;
printf("Input x0: ");输入x0为1.5即求1.5附近的根
scanf("%f",&x0);
printf("x(0)=%f\n",x0);
y0=Newton(f,f1,x0);
printf("\nThe root is x=%f\n",y0);
getch();
}
方程求根牛顿迭代法 求方程 f(x)=x3+x2-3x-3=0在1.5附近的根
f(x)=x^3+x^2-3x-3
f'(x)=3x^2+2x-3
x(n+1)=xn-f(xn)/f'(xn)
令x1=1.5
x2=1.777778
x3=1.733361
x4=1.732052
x5=1.732051
x6=1.732051
如果精确到0.000001,则x=1.732051
准确值=根号3
matlab编x^3-3x-1=0在2附近的根 要求用牛顿迭代法
源程式如下:
clear
clc
N=100;
x=2;
for ii=0:N
xl=x;
num=ii;
x=x-(x^3-3*x+1)/(3*x^2-3);
if abs(x-xl)<=0.0001%此为迭代结果精度,可调。
break
end
end
fprintf('答案:x=%f\n',x)
fprintf('迭代次数:%f\n',num)
执行结果:
答案:x=1.532089
迭代次数:4.000000
用牛顿迭代法求方程2X³-4X²+3X-6=0在1.5附近的根
化简方程:2m=5x+4y-1,2m=4x+6y(1)。
联立5x+4y-1=4x+6y得出x-1=2y(2)。因为x>0,y<0 所以0
由方程(1)(2)得2m=7x-3,所以-3<2m<4,得出-1.5
因为m为整数,所以m=-1,0,1
matlab牛顿迭代法求方程根程式
syms x
f=x^x-10;
df=diff(f,x);
eps=1e-6;
x0=10;
t=0;
MAXCNT=200; %最大回圈次数
while t
x1=x0-subs(f,x,x0)/subs(df,x,x0); %去掉这个分号,可以看到迭代过程.
if (abs(x1-x0)
break;
end
x0=x1;
t=t+1;
end
if t==MAXCNT
disp '不收敛'
else
vpa(x1,8)
end
用程式编写 牛顿迭代法求下面方程在1.5附近的根 2*x*x*x-4*x*x+3*x+6=0
#include
#include
#include
#define MAX_DIEDAI_TIME 200
main()
{
int n=0;
double x=1.5;
double jingdu=1e-6;
double function(double x);
double d2function(double x);
double newton_diedai(double x0,int *n,double jingdu);
system("cls");
x=newton_diedai(x,&n,jingdu);
printf("x=%.7lf\ty=%.7lf\n",x,function(x));
getch();
return 0;
}
/*====================
想要求解的方程的表示式
======================*/
double function(double x)
{
return 2*x*x*x-4*x*x+3*x+6;
}
/*===========================
想要求解的方程的表示式的导数
=============================*/
double d2function(double x)
{
return 6*x*x-8*x+3;
}
/*=============================================
牛顿迭代法解方程组的解
x0为迭代的初值,n为迭代次数,jingdu为精度
function为求根代数式,d2functoin为其导数
返回最终符合一定精度的根
*/
double newton_diedai(double x0,int *n,double jingdu)
{
double x,temp;
temp=d2function(x0);
if (fabs(temp)>1e-10) /*防止除数为0*/
{
x=x0-function(x0)/temp;
printf("n=%d\tx=%.5lf\n",*n,x);
}
else
{
printf("error:div 0:\nPress any key to exit:");
getch();
exit(1);
}
if (++(*n)>MAX_DIEDAI_TIME)
{
printf("diedai time:%d > MAX_DIEDAI_TIME:\nPress any key to exit:",*n);
getch();
exit(1);
}
temp=function(x);
if (fabs(temp)
return x;
else
return newton_diedai(x,n,jingdu);
}
得到x=-0.8012075
用牛顿迭代法求下面方程在1.5附近的根。 2x^3-4x^2+3x-6=0
f(x)=2x^3-4x^2+3x-6
f'(x)=6x^2-8x+3
x(n+1)=xn-(2xn^3-4xn^2+3xn-6)/(6xn^2-8xn+3)
x1=1.5
x2=2.3333
x3=2.0610
x4=2.0026
x5=2.0000
x6=2.0000
所以x=2
用牛顿迭代法求方程3*x*x*x-4x^2-5x+13=0在x=1附近的根,要求精度为10^-6
迭代公式x(k+1)=x(k)-f'(x(k))/f''(x(k))
k=1,2.....,直到你要的精度
x(1)=1
当|x(k+1)-x(k)|<10^-6,时,迭代结束
如果你要的是程式,就不应该在这提问
怎么用VB编写这么一个程式:用牛顿迭代法求方程x^5-3*x^2+2*x+1=0在x0 = 0附近的根(要求用Do语句)
x1= 0
Do
x0 = X1
f1 = x0 ^ 5 - 3 * x0 ^ 2 + 2 * x0 + 1
f2 = 5 * x0 ^ 4 - 6 * x0 + 2
X1 = x0 - f1 / f2
Loop While Abs(X1 - x0) > 0.000001
Print X1
分页:123