欢迎光临散文网 会员登陆 & 注册

二维线性拟合程序的Java实现

2022-01-09 18:32 作者:集批  | 我要投稿

    Java编程的一个期末作业,写完了留在机子上也没怎么用(毕竟现在大家都直接用excel了),就发出来希望帮到有需要的人。因为B站专栏的排版问题,直接复制代码可能无法正常运行,建议根据实际情况学习。

软件:eclipse

代码:

package qi_mo;

//期末作业:用Java编写程序实现以下功能:用户输入x,y值,程序自动转换为坐标并获得二维线性拟合的表达式

//版本v1.0

//未来可添加计算相关系数r的方法至程序中,用以判断线性相关方程是否合理

import java.util.*;

public class UserIO {

@SuppressWarnings("resource")

/*程序写完以后看到“0 error(s),1 warning(s)”,强迫症患者表示不能忍受,百度了一下原来是reader会申请内

* 存调用,但是程序结束后不会自动释放内存,容易造成资源浪费,所以加上这个就好啦!有借有还,再借不难:)

*/

public static void main(String args[])

{ System.out.println("这是一个二维线性拟合程序,输入x,y坐标以获得其线性拟合表达式");

System.out.println("请输入坐标数目:");

int n; //定义坐标数目

Scanner reader=new Scanner(System.in);

n=reader.nextInt();

if(n>0) //判断n是否合理

{ double[] x=new double[n];

double[] y=new double[n];

int i; //定义循环变量

for(i=0; i<n; i++) //获取所有坐标

{ System.out.print("请输入第"+(i+1)+"个坐标的x值:");

x[i]=reader.nextDouble();

System.out.print("请输入第"+(i+1)+"个坐标的y值:");

y[i]=reader.nextDouble();

}

System.out.println("已完成坐标录入");

//可于此处加入计算相关系数r的方法

double a, b; //定义线性回归方程的纵截距和斜率

double fenzi, fenmu;

double xba, yba; //定义x和y各自的平均值

for(xba=yba=0, i=0; i<n; i++) //计算x和y各自的平均值

{ xba=(xba*i+x[i])/(i+1);

yba=(yba*i+y[i])/(i+1);

}

for(fenzi=fenmu=0, i=0; i<n; i++) //计算b的分子和分母

{ fenzi=x[i]*y[i]+fenzi;

fenmu=x[i]*x[i]+fenmu;

}

fenzi=fenzi-n*xba*yba; //继续计算b的分子和分母

fenmu=fenmu-n*xba*xba;

b=fenzi/fenmu; //求a和b

a=yba-b*xba;

if(a>=0) //判断纵截距是否大于等于零以确定输出的方式

System.out.print("待求的线性回归方程是:y="+b+"x+"+a);

else

System.out.print("待求的线性回归方程是:y="+b+"x"+a);

}

else System.out.print("非法数据");

}

}


二维线性拟合程序的Java实现的评论 (共 条)

分享到微博请遵守国家法律