gpt4 book ai didi

c++ - 伯恩斯坦多项式插值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:43:29 26 4
gpt4 key购买 nike

对于我的作业,我必须为区间 [0,1] 上定义的 Bernstein 多项式实现一个算法。

我的实验需要包括以下函数:f(x) = |ax|,为了在我的代码中简单起见,我让 a = 1。在实现算法时,我使用了我们书中的这个 Matlab 代码(第一张图片)以及教授在他的笔记中定义的方式(第二张图片):matlab code professors defines in his notes

我的输出有所有相同的数字,我认为问题是我不确定 k 需要从公式中得到什么值。无论如何,这是我的代码:

#include <iostream>
#include <math.h>

using namespace std;

int combinations(int n, int k);
int fact(int n);

// Bernstein polynomial single precision
float Bernstein(float x[], float f[], int k, int n);

// Bernstein polynomial double precision
//float Bernstein(double x[], double k, int n);
//-------------------------------------------------------------

int main() {
int n,k;
cout << "Enter the degree: " << endl;
cin >> n;
cout << "Enter the k parameter: " << endl;
cin >> k;
float x[n];
double x_0[n];
// stepsize for interval [0,1]
double h = (1.0 - 0)/10.0;
for(int i = 0; i < n; i++){
x[i] = 0 + i*h;
x_0[i] = 0 + i*h;
}

// Compute the f(x_i) = y_i values single precision
float f_0[n], f_1[n], f_2[n];
float alpha = 1.0;
for(int i = 0; i < n; i++){
f_0[i] = fabs(alpha*x[i]);
f_1[i] = fabs(alpha*x[i]) + x[i]/2 - pow(x[i],2);
f_2[i] = 1/(1 + alpha*pow(x[i],2));
}

// Compute the f(x_i) = y_i values double precision
double alpha1 = 1.0;
double f0[n], f1[n], f2[n];
for(int i = 0; i < n; i++){
f0[i] = fabs(alpha1*x_0[i]);
f1[i] = fabs(alpha1*x_0[i]) + x_0[i]/2 - pow(x_0[i],2);
f2[i] = 1/(1 + alpha1*pow(x_0[i],2));
}

for(int i = 0; i < n; i++){
cout << Bernstein(x,f_0,k,n) << endl;
}

return 0;
}
//----------------------------------------------------------

float Bernstein(float x[], float f[], int k, int n){
int C;
float B;
if(k == 0){
C = 1;
}else{
C = combinations(n,k);
}
int t = n - k;
for(int i = 0; i < n; i++){
B = C*pow(x[i],k)*pow((1 - x[i]),t)*f[i];
}
return B;
}

int combinations(int n, int k){
return fact(n) / (fact(k) * fact(n - k));
}

int fact(int n){
int result = 1;
for (int i =1; i <= n; i++){
result = result*i;
}
return result;
}

问题:

为什么我的输出有所有相同的数字,可能是什么问题?

最佳答案

bernstein(f,n,t) 函数句柄 f 返回 n 阶 Bernstein 多项式 symsum(nchoosek(n,k)*t ^k*(1-t)^(n-k)*f(k/n),k,0,n),在点 t 计算。此多项式在区间 [0,1] 上逼近函数 f

例子:bernstein(g,n,t) 与符号表达式或函数 g 返回 n 阶 Bernstein 多项式,在点 t 计算。此语法将 g 视为由 symvar(g,1) 确定的变量的单变量函数。

如果任何参数是符号参数,bernstein 会将除函数句柄之外的所有参数转换为符号参数,并将函数句柄的结果转换为符号参数。

关于c++ - 伯恩斯坦多项式插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32977836/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com