¡La jungla necesita ayuda! ¡Una pregunta sobre programación en c o matlab!
Tenga en cuenta que f(x)=lgx x-2, g(x)=f'(x)=1/( x* ln(10)) 1;
Y tenga en cuenta que f(1)=-1, f(2)=lg2, por lo que la única raíz está en .
Use matlab programación, consulte newton.m.
Escriba en la ventana de comandos de matlab
f=@(x)log10(x) x-2;
g=@(x)1/x /log(10) 1;
[x, it, hist, flag]=newton(2, f, g, 100, 1e-10, 0)
Si es necesario El el número máximo de iteraciones es 100, el valor inicial es 1 y la precisión es 10 ^ (-10). Luego, si se usa el método simple de Newton para resolver, el último parámetro es 0 si se usa el método cuesta abajo de Newton; , el último parámetro es 1.
El resultado es:
¡La iteración de Newton es exitosa!
x =
1.75557949926116
it =
4
hist =
2.0000000000 1.75267577698437 1.75557902212685 1.75557949926116
flag =
1
newton.m
función [x, it, hist, flag] = newton (x0, f, g, maxit, tol, dnhl)
lt; Matemáticas numéricas modernas y cálculo gt;206
Utilice el método de Newton para encontrar la función. f Punto cero
Uso: [x, it, hist, flag]=newton(x0, f, g, maxit, tol, dnhl)
Entrada:
x0 punto inicial
función f
g gradiente
maxit número máximo de iteraciones
tolerancia de convergencia tol
hnhl(1/0) búsqueda de línea descendente o no
Salida:
solución x
iteración
historial histórico de iteración
flag(1/0) itera exitosamente o no
if nargin lt; dnh1 = 1; Verifique la entrada predeterminada
if nargin lt; , tol = 1e-6;
if nargin lt; 4, maxit = 100;
if nargin lt; /p>
fin; fin; fin; fin;
bandera = 1; x;
fx = feval(f, x);
for it = 1: maxit, iteración principal
if norm(fx) lt; , Criterio de convergencia
disp('¡Éxitos de la iteración de Newton!')
Retorno
Fin
d = feval(g, x; )\fx Calcular la dirección de búsqueda de Newton
si dnhl == 1,
lambda = 1.0
xn = x - d
<; p> fn = feval(f, xn);mientras que noem (fn) gt; = norma(fx),
lambda = lambda * 0.5; > if lambda lt; tol,
flag = 0;
error('¡¡paso demasiado corto!!! )
Fin
xn = x - lambda * d;
fn = feval(f, xn
Fin
p> p>x = xn;
f
x = fn;
De lo contrario, el método de Newton no tiene ningún truco cuesta abajo
x = x-d
fo = fx
fx = feval; (f, x);
if norma(fx) gt; norma(fo),
advertencia('¡¡¡una dirección cuesta arriba!!!!!)
fin
fin
hist = [hist x];
fin
bandera = 0; >disp('¡¡La iteración de Newton falla!!') ;
fin de Newton