C语言实现求导求积分
之前一直奇怪为什么c++只有Eigen这个库用来处理矩阵,为什么没有高等数学的库呢?今天我明白了,因为自己实现非常简单!
app.c
#include <math.h>
#include <stdio.h>
typedef double (*fun)(double x);
double Δx = 0.00000001;
double derivative(fun f, double x) {
double Δy = f(x + Δx) - f(x);
return Δy / Δx;
}
double integrate(fun f, double x1, double x2) {
double y = 0;
// 这个循环次数很多,需要使优化
// scipy计算的速度就特别块
for (double x = x1; x <= x2; x += Δx) {
y += (f(x + Δx) - f(x));
}
return y;
}
double f1(double x) {
// x * * 3 + 3 * *x
return pow(x, 3) + pow(3, x);
}
int main() {
double d = derivative(f1, 1.0);
printf("Δy/Δx (x=1.0): %lf\n", d); // Δy/Δx (x=1.0): 6.295837
double i = integrate(f1, 1.0, 5.0);
printf("i: %lf\n", i); // i: 364.000002
return 0;
}
makefile
app: app.c
gcc -o $@ $^ -lm
run:
./app
作者 :秋时
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。