【问题标题】:Determining degree of polynomial equation确定多项式方程的次数
【发布时间】:2019-11-21 23:35:32
【问题描述】:

我正在编写一个多项式最佳拟合求解器,作为一个学期中断项目来取乐。

给定输入:多项式的次数(即 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.13369276445428113)x^0

现在,我想在以后使用这个等式。

但是,我可以用 n 个度数写出这些方程式吗?

目前coefs存储在一个

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

y = A[5]*x*x*x*x*x + A[4]*x*x*x*x + A[3]*x*x*x + A[2]*x*x + A[1]*x + A[0]

有什么方法可以根据多项式的次数来制定方程。我不想硬编码每个 coef 的学位。基于给定的输入输出。

谢谢

【问题讨论】:

  • “有没有什么特殊的检查可以让我做需要 n 度数的检查?”我不明白你在问什么。你的意思是给一个系数数组,你能确定度数吗?如果您需要多项式中每个项的所有系数,那将非常简单。对于n 系数,度数为n-1
  • 如果用户输入一个 3 作为度数并且 coefs = 3 , 2 ,1 等式应该是y = 3*x*x + 2*x + 1。如何在不对每种情况进行硬编码的情况下制定该等式。
  • 多项式的次数为 2,而不是次数为 3。
  • “如何在不对每个案例进行硬编码的情况下制定该方程式。”每种情况是什么?你能用一个简单的规则来定义它们吗?例如,系数总是递减整数吗?

标签: c polynomial-math best-fit-curve


【解决方案1】:

我不确定这是否是您要问的,但如果您想知道数组的大小,您可以执行以下操作:

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

不确定“以后再使用该等式”是什么意思如果您只是希望能够评估该函数,我认为最有效的方法是使用 horner 算法:

#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;
}

改编自:https://www.geeksforgeeks.org/horners-method-polynomial-evaluation/

如果有帮助,我也会把它放在一个 repl 中:https://repl.it/repls/CumbersomeLeanEquipment

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 2016-12-05
    相关资源
    最近更新 更多