请问你会用牛顿迭代法解这个问题么?
1个回答

但是牛顿法可能解不出来

function [r,n]=mulNewton(x0,eps)

if nargin==1

eps=1.0e-4;

end

r=x0-myf(x0)*inv(dmyf(x0));

n=1;

tol=1;

while tol>eps

x0=r;

r=x0-myf(x0)*inv(dmyf(x0));

tol=norm(r-x0);

n=n+1;

if(n>100000)

disp('迭代步数太多,方程可能不收');

return;

end

end

function f=myf(x)

x1=x(1);

x2=x(2);

f1=(15*x1+10*x2)/((40-30*x1-10*x2)^2*(15-15*x1))-5e-4;

f2=(15*x1+10*x2)/((40-30*x1-10*x2)*(10-10*x2))-4e-2;

f=[f1 f2];

function df=dmyf(x)

x1=x(1);

x2=x(2);

df=[ (60*(15*x1 + 10*x2))/((15*x1 - 15)*(30*x1 + 10*x2 - 40)^3) - 15/((15*x1 - 15)*(30*x1 + 10*x2 - 40)^2) + (15*(15*x1 + 10*x2))/((15*x1 - 15)^2*(30*x1 + 10*x2 - 40)^2),(20*(15*x1 + 10*x2))/((15*x1 - 15)*(30*x1 + 10*x2 - 40)^3) - 10/((15*x1 - 15)*(30*x1 + 10*x2 - 40)^2);...

15/((10*x2 - 10)*(30*x1 + 10*x2 - 40)) - (30*(15*x1 + 10*x2))/((10*x2 - 10)*(30*x1 + 10*x2 - 40)^2), 10/((10*x2 - 10)*(30*x1 + 10*x2 - 40)) - (10*(15*x1 + 10*x2))/((10*x2 - 10)*(30*x1 + 10*x2 - 40)^2) - (10*(15*x1 + 10*x2))/((10*x2 - 10)^2*(30*x1 + 10*x2 - 40))];

-----------------------------------------------

[r,n]=mulNewton([0.5 0.1],0.0001)

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 1.148287e-034.

> In mulNewton at 10

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 1.195848e-089.

> In mulNewton at 10

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 5.295160e-267.

> In mulNewton at 10

Warning: Matrix is singular to working precision.

> In mulNewton at 10

Warning: Matrix is singular, close to singular or badly scaled.

Results may be inaccurate. RCOND = NaN.

> In mulNewton at 10

r =

NaN NaN

n =

9