案例高数留学生20道题目用Matlab实现Code代做演示第0节
当前位置:以往案例 > >案例高数留学生20道题目用Matlab实现Code代做演示第0节
2018-02-04


0.1 非线性函数f(x)及其导数f¢(x)有根区间[a,b]参数编写二分法Newton法、简化Newton法和割线法的通用程序。其中Newton法和简化Newton法的迭代初值x0取为有根区间的中点,割线法x0x1分别取为ab。误差ε=10-6

编程思路

二分法

1c=(a+b)/2

2、若f(x)=0x0=c程序终止;

3f(a) f(c)>0,令a=c否则令b=c

4对新的ab重复上述三步。

通用程序:

function [x,n,eps1]=solve_x0_dichotomy(f,a,b,x0,N,eps)

% 二分法求根

% f为函数表达式,a为下限,b为上限,N为迭代次数,

% eps为计算误差,x0为迭代的初值

n=1;

eps1=2*eps;

while eps1>eps

if n>N

x=x0;

break;

end

if f(x0)==0

x=x0;

break;

end

if f(a)*f(x0)>0

a=x0;

n=n+1;

else

b=x0;

n=n+1;

end

x0=(a+b)/2;

eps1=abs(x0-a);

x=x0;

end

Newton

编程思路:

通用程序:

function [x,n,eps1]=solve_x0_Newton(f,df,x0,N,eps)

% Newton法求根

% f为函数表达式,df为函数的偏导,,x0为迭代的初值

% a为下限,b为上限,N为迭代次数,eps为计算误差

n=1;

eps1=2*eps;

while eps1>eps

if n>N

x=x0;

break;

end

x=x0-f(x0)/df(x0);

eps1=abs(x0-x);

x0=x;

n=n+1;

end

简化Newton法:

编程思路

通用程序:

function [x,n,eps1]=solve_x0_simple_Newton(f,df,a,b,x0,N,eps)

% 简化Newton法求根

% f为函数表达式,df为函数的偏导,

% a为下限,b为上限,N为迭代次数,eps为计算误差,x0为迭代的初值

n=1;

eps1=2*eps;

while eps1>eps

if n>N

x=x0;

break;

end

x=x0-f(x0)/df((a+b)/2);

eps1=abs(x0-x);

x0=x;

n=n+1;

end

割线法:

编程思路:

通用程序:

function [x,n,eps1]=solve_x0_Secant(f,a,b,x1,x0,N,eps)ac

% 割线法法求根

% f为函数表达式,a为下限,b为上限,N为迭代次数,eps为计算误差

% x0x1为迭代的两个初值

n=1;

eps1=2*eps;

while eps1>eps

if n>N

x=x0;

break;

end

x=x0-f(x0)/((f(x0)-f(x1))/(x0-x1));

eps1=abs(x0-x);

x1=x0;

x0=x;

n=n+1;

end

0.2 先用作图的办法确定有根区间[a,b]然后应用上的通用程序下列方程所示的根。比较几种方法的迭代步数

1x=1+0.3 cos x根;

2cos x=0.5 + sin x最小正根;

3ex=sin x最小正根。

编程思想

0.1相同。

1x=1+0.3 cos x根;

a-6b10

计算程序:

clear,clc

[email protected](x)x-1-0.3*cos(x);

[email protected](x)1+0.3*sin(x);

N=200;

a=-6;

b=10;

eps=1e-6;

x0=(a+b)/2;

%二分法

disp('二分法')

[x,n,eps1]=solve_x0_dichotomy(f,a,b,x0,N,eps)

%Newton

disp('Newton')

[x,n,eps1]=solve_x0_Newton(f,df,x0,N,eps)

%简化Newton

disp('简化Newton')

[x,n,eps1]=solve_x0_simple_Newton(f,df,a,b,x0,N,eps)

%割线法

disp('割线法')

x0=a;

x1=b;

[x,n,eps1]=solve_x0_Secant(f,a,b,x0,x1,N,eps)

计算结果x=1.1284

计算方法

二分法

Newton

简化Newton

割线法

迭代步数

24

5

5

6

2cos x=0.5 + sin x最小正根;

a0b1

计算程序

clear,clc

[email protected](x)cos(x)-0.5-sin(x);

[email protected](x)-sin(x)-cos(x);

N=200;

a=0;

b=1;

eps=1e-6;

x0=(a+b)/2;

%二分法

disp('二分法')

[x,n,eps1]=solve_x0_dichotomy(f,a,b,x0,N,eps)

%Newton

disp('Newton')

[x,n,eps1]=solve_x0_Newton(f,df,x0,N,eps)

%简化Newton

disp('简化Newton')

[x,n,eps1]=solve_x0_simple_Newton(f,df,a,b,x0,N,eps)

%割线法

disp('割线法')

x0=a;

x1=b;

[x,n,eps1]=solve_x0_Secant(f,a,b,x0,x1,N,eps)

计算结果x=0.4240

计算方法

二分法

Newton

简化Newton

割线法

迭代步数

20

4

5

6

3ex=sin x最小正根。

a0b1

计算程序

clear,clc

[email protected](x)exp(-x)-sin(x);

[email protected](x)-exp(-x)-cos(x);

N=200;

a=0;

b=1;

eps=1e-6;

x0=(a+b)/2;

%二分法

disp('二分法')

[x,n,eps1]=solve_x0_dichotomy(f,a,b,x0,N,eps)

%Newton

disp('Newton')

[x,n,eps1]=solve_x0_Newton(f,df,x0,N,eps)

%简化Newton

disp('简化Newton')

[x,n,eps1]=solve_x0_simple_Newton(f,df,a,b,x0,N,eps)

%割线法

disp('割线法')

x0=a;

x1=b;

[x,n,eps1]=solve_x0_Secant(f,a,b,x0,x1,N,eps)

计算结果x=0.5885

计算方法

二分法

Newton

简化Newton

割线法

迭代步数

20

5

6

7

0.3 利用你教学号的后三位为小数点后三位构造区间[5,6]的数af(x)=x3a

其中

初值x0=2,误差ε=10-6,分别Newton法和迭代格式

求解比较二者的收敛速度

计算程序

clear,clc

a0=5.504;

[email protected](x)x.^3-a0;

[email protected](x)3*x.^2;

[email protected](x)1./(3*x.^2);

[email protected](x)0.5*6*x./(3*x.^2).^3;

N=200;

eps=1e-6;

x0=2;

[x,n,eps1]=solve_x0_Newton(f,df,x0,N,eps)

eps1=2*eps;

n=1;

while eps1>eps

if n>N

x=x0;

break;

end

x=x0-p(x0)*f(x0)-q(x0)*f(x0)^2;

eps1=abs(x0-x);

x0=x;

n=n+1;

end

x

n

eps1

计算结果:

=1.7656Newton法的迭代步数为5迭代的迭代步数为4.



在线提交订单