2016-10-09 2 views
0

Я пытаюсь решить x-cos (x) = 0 численно.
Мне нужна программа, чтобы принять один аргумент в командной строке, который становится желаемой точностью решения.
Решение должно давать ответ в пределах некоторой +/- заданной точности (эпсилон) 0, когда оценивается уравнение x-cos (x).
Максимальное количество итераций должно быть установлено равным 100.
Программа должна начинаться с первого значения предположения x = 0.
Требуемая точность должна принимать как плавающие, так и научные обозначения.
Должно быть предупреждающее сообщение, если задано слишком мало или слишком много аргументов, и, следовательно, выйдите из программы.
Если решение найдено в максимальных итерациях, оно должно печатать решение, точность и количество итераций.
Если в максимальных итерациях не достигнуто никакого решения, программа должна распечатать сообщение, чтобы указать как таковое, а затем закрыть.Написание программы C для решения уравнения численно

Найти наименьшее точность, которая может быть достигнута в максимальных итераций по степеням 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]; 
} 

Я не уверен, куда идти отсюда или если я даже на правильном пути.

+0

Вы можете рассмотреть переполнение стека, так как это более программ, связанные –

+0

Метод исследования Bisection, Ложный метод позиции, метод секущего, метод Ньютона. Вероятно, один из них был упомянут до того, как вы получили эту задачу, используйте ее. – LutzL

+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); 

} 
+0

Я знаю, что заманчиво ответить на любой вопрос, который вы можете, но, пожалуйста, не отвечайте на вопросы, которые, очевидно, грубо не по теме для этого сайта. –

Смежные вопросы