matlab用牛顿迭代法求解方程,急!哪位大哥会matlab 帮忙写个程式,用牛顿迭代法求方程X^3-3*x-1=0在2附近的解...

本文介绍了使用牛顿迭代法在MATLAB和C语言中求解方程根的方法。MATLAB示例展示了如何解决方程`x^3-3*x-1=0`在2附近的解,而C语言代码则用于求解方程`2x^3-4x^2+3x-6=0`在1.5附近的根。文章提供了完整的MATLAB和C语言代码示例,详细解释了迭代过程,并给出了程序运行结果。
摘要由CSDN通过智能技术生成

急!哪位大哥会matlab 帮忙写个程式,用牛顿迭代法求方程X^3-3*x-1=0在2附近的解以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

1b212c6bc6b79fb99ef7e87669ee7b7a.png

急!哪位大哥会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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值