【问题标题】:C program to compute estimated root via Newtons Method [closed]通过牛顿法计算估计根的 C 程序 [关闭]
【发布时间】: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


【解决方案1】:
 int x0 = 1.5;   // you want double or float I think . prefer double

在这个表达式中 -

 x = (4*x0^3 + x0^2 - 1)/(3*x0^2 + 2*x0 + 1);

^ 并不代表您的想法(或您期望从中获得的内容)。它是 C 语言中的二元异或运算符。

要么像这样手动编写 - x0 的立方体 -> x0*x0*x0

或者使用来自标头&lt;math.h&gt;的函数pow

1.x0x 声明为double

2.计算x0的立方体为

pow(x,3);     

【讨论】:

    【解决方案2】:

    ^ 是 C 中的二进制 XOR 运算符。

    对于功率计算,您可以使用pow()。但在使用前包括math.h

    【讨论】:

      【解决方案3】:
      1. 将所有int 替换为doubleint 将截断为整数值。

      2. x0 ^ 3 重写为x0 * x0 * x0 等(我不喜欢将pow 用于小整数幂,而是手动编码乘法)。 c 中的^ 是 XOR 运算符,不是求幂。

      3. 一旦您更改了x类型,将printf("%d",x); 重写为printf("%f",x);。如果您不这样做,那么您的程序行为将是未定义

      【讨论】:

        猜你喜欢
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        • 1970-01-01
        • 2021-10-28
        • 2017-06-11
        • 2019-06-27
        相关资源
        最近更新 更多