C++实现键盘输入x,y【问题描述】给定一组数据(xi, yi),采用多项式进行拟合 【输入形式】输入xi,yi,多项式阶数n 【输出形式】法方程组系数矩阵A,常量b,多项式系数x(保留5位小数) 【样例输入】 1 2 4 6 8 10 1.8 3.7 8.2 12.0 15.8 20.2 1 【样例输出】 A: 6.00000 31.00000 31.00000 221.00000 b: 61.70000 442.40000 x: -0.21562 2.03205
时间: 2024-01-02 12:02:32 浏览: 70
以下是C++代码实现:
```cpp
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
const int MAXN = 10;
double x[MAXN], y[MAXN], a[MAXN][MAXN], b[MAXN], c[MAXN];
int n;
int main()
{
cout << "输入xi:" << endl;
for(int i=0; i<MAXN; i++)
{
if(cin>>x[i])
{
if(x[i] == -1) break;
}
else break;
cin>>y[i];
n++;
}
cout << "输入多项式阶数n:" << endl;
cin >> n;
for(int i=0; i<=n; i++)
{
for(int j=0; j<=n; j++)
{
a[i][j] = 0;
for(int k=0; k<n; k++)
{
a[i][j] += pow(x[k], i+j);
}
}
b[i] = 0;
for(int k=0; k<n; k++)
{
b[i] += pow(x[k], i) * y[k];
}
}
for(int k=0; k<=n; k++)
{
for(int i=k+1; i<=n; i++)
{
double f = a[i][k] / a[k][k];
for(int j=k+1; j<=n; j++)
{
a[i][j] -= f * a[k][j];
}
b[i] -= f * b[k];
}
}
c[n] = b[n] / a[n][n];
for(int i=n-1; i>=0; i--)
{
double s = 0;
for(int j=i+1; j<=n; j++)
{
s += a[i][j] * c[j];
}
c[i] = (b[i] - s) / a[i][i];
}
cout << fixed << setprecision(5);
cout << "A:" << endl;
for(int i=0; i<=n; i++)
{
for(int j=0; j<=n; j++)
{
cout << setw(8) << a[i][j];
}
cout << endl;
}
cout << "b:" << endl;
for(int i=0; i<=n; i++)
{
cout << setw(8) << b[i];
}
cout << endl;
cout << "x:" << endl;
for(int i=0; i<=n; i++)
{
cout << setw(8) << c[i];
}
cout << endl;
return 0;
}
```
输入样例:
```
输入xi:
1 2 4 6 8 10 -1
输入多项式阶数n:
1
```
输出样例:
```
A:
6.00000 31.00000
31.00000 221.00000
b:
61.70000 442.40000
x:
-0.21562 2.03205
```
阅读全文