Программа выводит слишком большие числа - C (СИ)
Формулировка задачи:
Здесь реализован метод наименьших квадратов для нахождения коэффициентов уравнений
сама лаба № 3 посмотрите пожалуйстаааа
#include <stdio.h> #include <math.h> #include <conio.h> double f(double A, double B, double x) { return (x/(A*x+B)); } int main() { float A,B; const int N=10; int n=10,i; float t,c,v,k,g; float x[N]= {12,8.5,34,12.1,17.9,22.4,1.7,34,15.1,17.4}; float y[N]= {0.1,12.5,35.2,5.6,16.6,24.6,0.3,1.9,10.1,16.6}; float z[N]; float q[N]; t=c=v=k=0; for (i=0; i<N; i++) { q[i]=x[i]/y[i]; z[i]=x[i]; t+=z[i]; c+=q[i]; v+=z[i]*z[i]; k+=q[i]*z[i]; A=(n*k-t*c)/(n*v-t*t); B=(c-A*t)/n; g+=(f(x[i],A,B)-y[i])*(f(x[i],A,B)-y[i]); } printf("\ny=x/(%f*x+%f)\n g=%f",A,B,g); getch(); }
Решение задачи: «Программа выводит слишком большие числа»
textual
Листинг программы
#include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <conio.h> #define N 10 double f(double A, double B, double x) { return (x/(A*x+B)); } int main(void) { float A, B; int n = 10, i; float t, c, v, k, g; float z[N]; float q[N]; // float x[N] = { 12, 8.5, 34, 12.1, 17.9, 22.4, 1.7, 34, 15.1, 17.4 }; // float y[N] = { 0.1, 12.5, 35.2, 5.6, 16.6, 24.6, 0.3, 1.9, 10.1, 16.6 }; // float x[N] = { 18.1, 15.1, 15.5, 17.9, 29.3, 38.4, 16.8, 34.1, 10.0, 23.6 }; // float y[N] = { 29.2, 36.0, 33.3, 16.6, 35.1, 44.2, 9.4, 35.7, 24.2, 24.8 }; float x[N]; float y[N]; srand(time(NULL)); for (i = 0; i < N; ++i) { x[i] = rand() / (1.0 + RAND_MAX) * 50; y[i] = f(0.2, 0.7, x[i]) + rand() / (1.0 + RAND_MAX) * 0.05; } t = c = v = k = g = 0; for (i = 0; i < N; i++) { q[i] = x[i]/y[i]; z[i] = x[i]; t += z[i]; c += q[i]; v += z[i] * z[i]; k += q[i] * z[i]; } A = (n*k - t*c) / (n*v - t*t); B = (c - A*t) / n; for (i = 0; i < N; i++) { float e; e = f(A, B, x[i]) - y[i]; printf("x=%f, y=%f, f=%f, e^2=%f\n", x[i], y[i], f(A, B, x[i]), e*e); g += e * e; } printf("\ny = x / (%f*x + %f)\ng = %f\n", A, B, g); getch(); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
, , , , . - Определяем массив z и q, а также переменные A, B, t, c, v, k, g. Значения переменных A и B пока не определены.
- Задаем размер массива N = 10.
- Определяем функцию f(double A, double B, double x), которая будет использоваться в основной программе.
- В основной программе инициализируем переменные A, B, n, i, а также массивы x и y размером N.
- Задаем начальные значения для x и y, либо позволяем компьютеру сгенерировать их случайным образом.
- Используем цикл for для заполнения массива x и y значениями.
- Вычисляем значения t, c, v, k, g и инициализируем их нулями.
- Используем второй цикл for для вычисления значений q и z, а также для обновления значений t, c, v, k, g.
- Вычисляем значения A и B, используя формулы из постановки задачи.
- Используем цикл for для вычисления значений e для каждого элемента массива x и y, а также для обновления значения g.
- Выводим результаты на экран.
- Выводим значения A, B, g.
- Ждем нажатия клавиши для завершения программы.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д