C 多项式方程阶的确定
我写了一个多项式线的最佳拟合解算器作为一个学期休息项目的乐趣 给定输入:多项式的阶数,即2和一组他们想要使用的点C 多项式方程阶的确定,c,polynomial-math,best-fit-curve,C,Polynomial Math,Best Fit Curve,我写了一个多项式线的最佳拟合解算器作为一个学期休息项目的乐趣 给定输入:多项式的阶数,即2和一组他们想要使用的点 167, 563 264, 429 410, 562 使用最小二乘近似法,在求解矩阵时,可以得到系统的以下系数: x^0 = 1270.1336927645 x^1 = -5.9573736115 x^2 = 0.0103176055 方程为 y= (0.01031760552017095)x^2 + (-5.95737361147607913)x^1 + (1270.13369
167, 563
264, 429
410, 562
使用最小二乘近似法,在求解矩阵时,可以得到系统的以下系数:
x^0 = 1270.1336927645
x^1 = -5.9573736115
x^2 = 0.0103176055
方程为
y= (0.01031760552017095)x^2 + (-5.95737361147607913)x^1 + (1270.13369276445428113)x^0
现在,我想在以后使用这个等式
然而,我可以用n次数写出这些方程吗
目前,COEF存储在
double A[];
如果我有一个4度的多项式,我知道方程是
y = A[4]x^4 + A[3]x^3 + A[2]x^2 + A[1]x^1 + A[0]x^0
**或**
y = A[4]*x*x*x*x + A[3]*x*x*x + A[2]*x*x + A[1]*x + A[0]
如果我有一个5度的多项式,我的方程是
y = A[5]x^5 + A[4]x^4 + A[3]x^3 + A[2]x^2 + A[1]x^1 + A[0]x^0
或
有没有办法,我可以根据多项式的阶数来建立方程。我不想硬编码每个coef的学位。基于给定的inout
谢谢你我不确定这是否是你要问的,但是如果你想知道阵列的大小,你可以这样做:
size_t n = sizeof(A)/sizeof(A[0]);//size of list divided by size of first element (should be 8 for double)
degree = (int)n - 1; //degree of the poly is one minus this
如果你只是想计算函数,我不确定你以后使用这个方程的意思,我认为最有效的方法是使用霍纳算法:
#include <stdio.h>
double horner(double *poly, double x,int degree)
{
double result = poly[0]; // Initialize result (poly[0] should be coeff of x^(degree))
// Evaluate value of polynomial using Horner's method
for (int i=1; i<=degree; i++){
result = result*x + poly[i];
}
return result;
}
int main(void) {
double poly[] = {1.0,2.0,-1.0,5.0};
//x^3+2x^2-1x+5 @ 3.0 should get 47.0
// use the n we found earlier
int n = sizeof(poly)/sizeof(poly[0]) - 1;
double x = 3.0;
printf("%f",horner(poly, x,n));
//should print 47
return 0;
}
改编自:
如果有帮助的话,我也会把它放在一个repl中:我能做的任何特殊检查需要n个学位吗?我不明白你在问什么。你的意思是给出一个系数数组,你能确定度吗?如果你需要多项式中每个项的所有系数,那就很简单了。对于n个系数,阶数是n-1。就像如果用户为阶数输入3,并且coefs=3,2,1,那么等式应该是y=3*x*x+2*x+1。如果不对每种情况进行硬编码,我怎样才能建立方程呢?多项式的阶数是2,而不是3。如果不对每种情况进行硬编码,我怎样才能建立方程呢。每种情况是什么?你能用一个简单的规则来定义它们吗?例如,系数总是递减整数吗?
#include <stdio.h>
double horner(double *poly, double x,int degree)
{
double result = poly[0]; // Initialize result (poly[0] should be coeff of x^(degree))
// Evaluate value of polynomial using Horner's method
for (int i=1; i<=degree; i++){
result = result*x + poly[i];
}
return result;
}
int main(void) {
double poly[] = {1.0,2.0,-1.0,5.0};
//x^3+2x^2-1x+5 @ 3.0 should get 47.0
// use the n we found earlier
int n = sizeof(poly)/sizeof(poly[0]) - 1;
double x = 3.0;
printf("%f",horner(poly, x,n));
//should print 47
return 0;
}