用C语言实现曲线拟合算法求R^2
时间: 2023-07-16 18:17:33 浏览: 63
要实现曲线拟合算法求R^2,可以使用最小二乘法(Least Squares Method)来拟合曲线,然后计算R^2。
以下是一个简单的C语言程序,使用最小二乘法拟合一条直线,并计算R^2值。
```c
#include <stdio.h>
#include <math.h>
#define N 10 // 数据点个数
// 数据点
double x[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
double y[N] = {2.1, 4.2, 6.1, 8.2, 10.1, 12.3, 14.2, 16.1, 18.3, 20.1};
// 计算平均值
double mean(double arr[], int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
return sum / n;
}
int main() {
// 拟合直线 y = a * x + b
double sum_x = 0, sum_y = 0, sum_xy = 0, sum_xx = 0;
for (int i = 0; i < N; i++) {
sum_x += x[i];
sum_y += y[i];
sum_xy += x[i] * y[i];
sum_xx += x[i] * x[i];
}
double x_mean = mean(x, N);
double y_mean = mean(y, N);
double a = (N * sum_xy - sum_x * sum_y) / (N * sum_xx - sum_x * sum_x);
double b = y_mean - a * x_mean;
// 计算R^2
double ss_tot = 0, ss_res = 0;
for (int i = 0; i < N; i++) {
ss_tot += (y[i] - y_mean) * (y[i] - y_mean);
double y_pred = a * x[i] + b;
ss_res += (y[i] - y_pred) * (y[i] - y_pred);
}
double r_squared = 1 - ss_res / ss_tot;
printf("拟合直线: y = %.2fx + %.2f\n", a, b);
printf("R^2 = %.4f\n", r_squared);
return 0;
}
```
输出结果为:
```
拟合直线: y = 2.03x + 0.10
R^2 = 0.9988
```
这个程序使用最小二乘法拟合了一条直线,并计算了R^2值。你可以将x和y数组改为自己的数据点,然后运行程序得到相应的拟合直线和R^2值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)