首页 > 解决方案 > 最小二乘回归线和误差的 C 程序

问题描述

我想创建一个程序来计算一些给定数据的回归线以及错误,这样我就可以在我的大学作业中使用。这是以下程序:

#include <stdio.h>
#include <math.h>
int main(void)
{
    int i,n,N;
    double x[n],y[n],a=0.0,b=0.0,c=0.0,d=0.0,D,P=0.0,p,Sx,A,B,dA,dB;
    printf("Give the number of data you want to input for x : ");
    scanf("\n%d", &N);
    printf("\nGive the values of x : ");
    for (i=1; i<=N; i++);
    {
        printf("\n Enter x[%d] = ", i);
        scanf("%lf", &x[i]);
        a+=x[i];
        b+=pow(x[i],2);
    }
    printf("\nGive the values of y : ");
    for (i=1; i<=N; i++);
    {
        printf("\n Enter y[%d] = ", i);
        scanf("%lf", &y[i]);
        c+=y[i];
    } 
    D=N*b-pow(a,2);
    A=(b*c-a*d)/D;
    B=(N*d-a*c)/D;
    for (i=1; i<=N; i++);
    {
        d+=x[i]*y[i];
        p=y[i]-A-B*x[i];
        P+=pow(p,2);
    }
    Sx=sqrt(P/N-2);
    dA=Sx*sqrt(b/D);
    dB=Sx*sqrt(N/D);
    printf("\n x \t \t \t y");
    for (i=1; i<=N; i++);
        printf("\nx[%d] = %lf\t%lf = y[%d]", x[i],y[i]);
    printf("\nA = %lf\t B = %lf", A,B);
    printf("\nThe errors of A & B are dA = %lf and dB = %lf", dA,dB);
    printf("\nThe equation of the regression line is y=%lfx+(%lf)", B,A);
    return 0;
} 

我有两个问题。

  1. 尽管给 N 一个值,程序运行,所以我只能给 x 一个值,给 y 一个值。为什么以及错误在哪里?
  2. 打印 "Enter x[%d]" 时,显示 x[11],最后打印 "x[%d] = %lf\t%lf = y[%d]" 时,显示 x[0 ]。再次为什么以及错误在哪里?

谢谢您的帮助!

标签: cleast-squares

解决方案


发布几天后,我发现了这个程序的主要问题,修复方法是删除 ; 来自 for 命令,以及其他一些小改动。我想我可以添加这个评论让你知道,现在它就像一个魅力。即使是训练有素的眼睛,最简单的错误也会愚弄。在我发现这个之后,我很震惊,没有人注意到这个错误。


推荐阅读