编写C程序以数字方式求解方程

时间:2016-10-09 03:24:30

标签: linux math

我试图用数字解决 x-cos(x)= 0 我需要程序在命令行上接受一个参数,该参数成为解决方案所需的准确度 当评估等式 x-cos(x)时,解决方案应该在一定的+/-指定精度(epsilon)0内产生答案。
最大迭代次数应设置为100. 该程序应以x = 0的第一个猜测值开始 所需的准确度应接受浮动和科学记谱法格式 如果提供的参数太少或太多,应该有一条警告消息,因此退出程序 如果在最大迭代中找到解决方案,则应该打印解决方案,准确度和迭代次数 如果在最大迭代中没有实现解决方案,程序应该打印一条消息来指示,然后关闭。

找出在10次幂的最大迭代中可以达到的最小精度。

我知道有涉及循环。我已经这样开始了:`

#include<stdio.h>
#include<math.h>

int
main(void)
{
    int MAX_ITERATIONS[100],x=0;
    float epsilon;
    double epsilon;

    x=cos[x];
    for (x=0; x<MAX_ITERATIONS; ++x) 
        if (MAX_ITERATIONS < x)
            x=MAX_ITERATIONS[100];
}

我不知道从哪里开始,或者我是否走在正确的轨道上。

1 个答案:

答案 0 :(得分:0)

以下是一些可帮助您入门的代码。我的理念是只进行微小的改动,并始终保留以前工作的副本。当我打破某些东西的时候,我确切地知道我在哪里打破它。此代码并不能满足您的所有需求,但您可以自行进行这些更改。为了编译代码,我使用了cc -lm progname.c。为了执行它,我使用了./a.out 0.002

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[]) {
    double delta, x;
    double epsilon=0.001;
    double previous = 1.0;

    if (argc > 1)
        epsilon = strtof(argv[1], NULL);

    printf("Using epsilon = %12.8f\n", epsilon);

    for (x=0.1; x<1.0; x+=epsilon) {
        delta = fabs(x-cos(x));
        if (delta < previous)
            previous = delta;
        else
            break;
    }
    printf("%12.8f  %12.8f  %12.8f\n", x, cos(x), delta);

}