У меня есть следующий кодпрограммы C, чтобы вычислить оценочный корень с помощью метода Ньютонов
/*
KENDALL WEIHE
CS321 HW2 PROBLEM 3
PURPOSE: COMPUTE THE 5TH STEP OF NEWTONS METHOD TO ESTIMATE THE ROOT OF A FUNCTION
INTPUTS: INITIAL X0 = 1.5
OUTPUTS: ESTIMATED ROOT AFTER 5 ITERATIONS
*/
#include <stdio.h>
int main(int argc, char *argv[]) {
//f(x) = -x^3 + x^2 + x + 1
//f'(x) = -3x^2 + 2x + 1
//l(x) = f'(x)(x - x0) + f(x)
//l(x) = (-3x0^2 + 2x0 + 1)(x - x0) + (-x0^3 + x0^2 + x0 + 1)
//where x0 = x sub 0 || x nought
//substitute x0, solve for x
//x becomes new x0, iterate 5 times
//solving for the root we find
//0 = l(x)
//x = [4x0^3 + x0^2 - 1]/[3x0^2 + 2x0 + 1]
int i;
int x0 = 1.5;
int x;
for (i=0;i<5;i++){
x = (4*x0^3 + x0^2 - 1)/(3*x0^2 + 2*x0 + 1);
x0 = x;
}
printf("%d",x);
}
Это довольно прямо вперед программа до тех пор, как вы понимаете, метод ньютона (слайд 16) http://www.cs.uky.edu/~jzhang/CS321/lecture2.pdf
я получаю 0 в качестве выхода. Есть идеи?
РЕШЕНИЕ
Я сделал глупую ошибку, думая, что оператор ^
был экспонент (Homer Simpson тесто) => правильный оператор с помощью pow()
функции
'int x0 = 1.5;' вы имеете в виду 'double'?И используйте 'pow()' вместо '^' ('^' означает побитовое xor в C) –
int x0 = 1.5; !! –