用fortran编写求解一元线性回归方程的b和r(y为1951-2010年160站的降雨数据x为时间t的序号1.2.3....)

用fortran编写求解一元线性回归方程的b和r(y为1951-2010年160站的降雨数据x为时间t的序号1.2.3....),第1张

不知道你要算什么,所以不知道你的是否正确,表面上看程序能编译和运行,但结果必然是错的。

错误有以下几点:

f1=f1+a(t,m)*i 这句中,i没有赋值。有的编译器会初始化变量,则i默认为0,有的不搜拍慧会,就会出现贺孝一个很奇怪的值。

b(m)=((f1)-(1/60)*(f2)*(f3))/((f4)-(1/60)*(f3)*(f3))这句中,在运算1/60时,由于分子和分母都是整型,其运算结果世答也会是整型,则1/60的值是0,所以该句等效于b(m)=((f1)

只能帮你到这了,至于数据读入是否正确或者逻辑是否正确,由于没有数据,也不知道你要算什么,所以无法判断。

(1)用Matlab程序:

x=[9 13 15 17 18 20 22 23 26 30]'

y=[6 8 9 10 11 13 14 13 15 20]'

p=polyfit(x,y,1)

p1=polyval(p,x)

p2=polyval(p,20)

p2

plot(x,y,'k*',x,p1)

X=[ones(10,1),x]

[b,bint,r,rint,stats]=regress(y,X)

可得结果

y=0.6285x-0.2303

在显著性水平0.05下

统计量检验:R2=0.9599,F=191.5279,p=0.0000

说明线性关系良好,回归通过检验。

(2)x=20时,y的估计值为程序中p2的结果,

即为12.3400

附录:运行结果(如图为拟合曲线)

p =

0.6285   -0.2303

p2 =

12.3400

b =

-0.2303

0.6285

bint =

-2.3449    1.8843

0.5238    0.7332

r =

0.5737

0.0596

-0.1974

-0.4544

-0.0829

0.6600

0.4030

-1.2255

-1.1110

1.3749

rint =

-0.9730    2.1204

-1.8037    1.9229

-2.1237    1.7289

-2.3906    1.4818

-2.0693    1.9034

-1.2465    2.5666

-1.5354    2.3414

-2.8563    0.4053

-2.6832    0.4611

0.3256    2.4242

stats =

0.9599  191.5279    0.0000    0.7262

p =

0.6285   -0.2303

p2 =

12.3400

b =

-0.2303

0.6285

bint =

-2.3449    1.8843

0.5238    0.7332

r =

0.5737

0.0596

-0.1974

-0.4544

-0.0829

0.6600

0.4030

-1.2255

-1.1110

1.3749

rint =

-0.9730    2.1204

-1.8037    1.9229

-2.1237    1.7289

-2.3906    1.4818

-2.0693    1.9034

-1.2465    2.5666

-1.5354    2.3414

-2.8563    0.4053

-2.6832    0.4611

0.3256    2.4242

stats =

0.9599  191.5279    0.0000    0.7262

一元线性回归的C语言程序是:利用最小二乘法来估计线性回归方程的参数,然后用这些参数来预测因变量的值1。例如,你可以参考下面的代码:

#include <stdio.h>#include <math.h>//定义一个函数,计算一元线性回归方程的参数a和bvoid linear_regression(double x[], double y[], int n, double *a, double *b){//定义变量

double sum_x = 0//x的和

double sum_y = 0//y的和

double sum_xy = 0//xy的和

double sum_x2 = 0//x平方的和

//遍历数组,计此丛绝算各项和

for (int i = 0i <ni++)

{

sum_x += x[i]

sum_y += y[i]

sum_xy += x[i] * y[i]

sum_x2 += x[i] * x[i]

}//根据最小二乘法公式,郑困计算a和b

*a = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - pow(sum_x, 2))

*b = (sum_y - (*a) * sum_x) / n

}//主函数int main(){//定义一个自变量数组x,存放观测值

double x[] = {1.0, 2.0, 3.0, 4.0} //定义一个因变量数组y,存放观测值

double y[] = {3.1, 4.9, 7.2, 8.9} //定义数组长度n

int n = sizeof(x) / sizeof(x[0]) //定义两个指森姿针变量a和b,用来存放线性回归方程的参数

double a double b


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12340915.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存