已知一组数据,用JAVA JFRAME利用最小二乘法求出该组数据的多项式拟合公式
/**
创新互联公司服务项目包括向阳网站建设、向阳网站制作、向阳网页制作以及向阳网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,向阳网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到向阳省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
* 最小二乘法计算类
*
* @author Administrator
*
*/
public class LeastSquareMethod {
private double[] x;
private double[] y;
private double[] weight;
private int m;
private double[] coefficient;
public LeastSquareMethod(double[] x, double[] y, int m) {
if (x == null || y == null || x.length 2 || x.length != y.length
|| m 2)
throw new IllegalArgumentException("无效的参数");
this.x = x;
this.y = y;
this.m = m;
weight = new double[x.length];
for (int i = 0; i x.length; i++) {
weight[i] = 1;
}
}
public LeastSquareMethod(double[] x, double[] y, double[] weight, int m) {
if (x == null || y == null || weight == null || x.length 2
|| x.length != y.length || x.length != weight.length || m 2)
throw new IllegalArgumentException("无效的参数");
this.x = x;
this.y = y;
this.m = m;
this.weight = weight;
}
public double[] getCoefficient() {
if (coefficient == null)
compute();
return coefficient;
}
public double fit(double v) {
if (coefficient == null)
compute();
if (coefficient == null)
return 0;
double sum = 0;
for (int i = 0; i coefficient.length; i++) {
sum += Math.pow(v, i) * coefficient[i];
}
return sum;
}
private void compute() {
if (x == null || y == null || x.length = 1 || x.length != y.length
|| x.length m || m 2)
return;
double[] s = new double[(m - 1) * 2 + 1];
for (int i = 0; i s.length; i++) {
for (int j = 0; j x.length; j++)
s[i] += Math.pow(x[j], i) * weight[j];
}
double[] f = new double[m];
for (int i = 0; i f.length; i++) {
for (int j = 0; j x.length; j++)
f[i] += Math.pow(x[j], i) * y[j] * weight[j];
}
double[][] a = new double[m][m];
for (int i = 0; i m; i++) {
for (int j = 0; j m; j++) {
a[i][j] = s[i + j];
}
}
coefficient = Algorithm.multiLinearEquationGroup(a, f);
}
/**
* @param args
*/
public static void main(String[] args) {
LeastSquareMethod l = new LeastSquareMethod(
new double[] { 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 },
new double[] { 37.84, 44.55, 45.74, 63.8, 76.67, 105.59, 178.48, 355.27, 409.92 },
new double[] { 11, 12, 13, 14, 15, 16, 17, 18, 19 },
2);
double[] x = l.getCoefficient();
for (double xx : x) {
System.out.println(xx);
}
System.out.println(l.fit(2009));
}
}
如何在java中使用R语言进行参数拟合
int i; 这里的i就是一个变量。它是对应于常量来说的。
在java里不是叫函数,是叫方法。
比如public String getHelloWorld(String str);这就是一个方法。
函数的自变量就是函数内部定义的一个变量。也叫局部变量,它只在函数的内部被使用。
比如public void getHelloWorld(String str){
String strHelloWorld = str;这里定义的strHelloWorld就是一个自变量
}
上面的str就是函数的参数。
2.分别用2,3,4,6阶多项式拟合函数y=cosx,作出拟合曲线并与函数曲线y=cosx进行比较.
你好!
以下是我的代码:
clc
x=linspace(0,4*pi,30);
N=[2,3,4,6];
hold on
y=cos(x);
plot(x,y,'r.')
p2=polyfit(x,y,2);
y2=polyval(p2,x);
plot(x,y2,'color','b')
hold on
p3=polyfit(x,y,3);
y3=polyval(p3,x);
plot(x,y3,'color','g')
p4=polyfit(x,y,4);
y4=polyval(p4,x);
plot(x,y4,'color','m')
p6=polyfit(x,y,6);
y6=polyval(p6,x);
plot(x,y6,'color','c')
legend('原函数','N=2','N=3','N=4','N=6')
我的计算图片:
N=2,N=3重合了!!!
Java 如何拟合幂函数
package mainjava;
import java.util.Scanner;
public class mihanshu {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int x = sc.nextInt();
int n = sc.nextInt();
System.out.println(mihanshu(x,n));
}
public static int mihanshu(int x,int n)
{
if(n == 0)
{
return 1;
}
return x*mihanshu(x,n-1);
}
}
用递归解决,诸如y = x^n 每次调用n都减一,当n = 0时,返回1。即可 如果还有不懂,可追问,我现在给你编写一下,稍等。
网页题目:多项式拟合java代码 多项式拟合java代码
URL网址:http://scgulin.cn/article/dddegdc.html