【发布时间】:2015-12-19 15:47:50
【问题描述】:
我有以下代码
/*
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 dough) => 正确的运算符是使用 pow() 函数
【问题讨论】:
-
int x0 = 1.5;你的意思是double?并使用pow()而不是^(^在 C 中表示按位异或)
标签: c computer-science newtons-method