二维线性拟合程序的Java实现
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("非法数据");
}
}



