作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于我的作业,我必须为区间 [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/
我是一名优秀的程序员,十分优秀!