c - C 中的代数运算

标签 c algebraic-data-types computer-algebra-systems

现在我正在寻找一个可以进行基本线性代数的程序,其中我有2个常数:A和B,我可以简单地输入它们的系数并在其中添加其他值。

示例:

假设我想找到斐波那契数列的项

A
B

我想获取 A + B 并将其附加到文件中。

A
B
A+B

现在我想添加第二项和第三项

A
B
A + B
A + 2B

等等。

我有一个程序可以对所有数值执行此操作,但是,我希望看到它以代数方式上升,而不使用二元组公式。

我唯一的猜测是将 A 和 B 的系数存储到 2 个单独的文件中,以便计算它们,然后打印出来,但是,如果线性代数在 C 中可用,那就容易多了。

编辑:没关系,我忘了这是计算机迷的地方,而不是数学迷的地方

最佳答案

作为传统的命令式语言,C 没有对代数表达式的内置支持。要计算斐波那契数列的系数,您可以编写如下程序:

#include <stdio.h>

int main() {
    int i;
    int coeff_a_1 = 1;
    int coeff_b_1 = 0;
    int coeff_a_0 = 0;
    int coeff_b_0 = 1;

    printf("A\n");
    printf("B\n");

    for (i = 0; i < 15; i++) {
        int coeff_a = coeff_a_0 + coeff_a_1;
        int coeff_b = coeff_b_0 + coeff_b_1;

        printf("%dA + %dB\n", coeff_a, coeff_b);

        coeff_a_1 = coeff_a_0;
        coeff_b_1 = coeff_b_0;
        coeff_a_0 = coeff_a;
        coeff_b_0 = coeff_b;
    }

    return 0;
}

这将打印:

A
B
1A + 1B
1A + 2B
2A + 3B
3A + 5B
5A + 8B
8A + 13B
13A + 21B
21A + 34B
34A + 55B
55A + 89B
89A + 144B
144A + 233B
233A + 377B
377A + 610B
610A + 987B

对于更复杂的问题,我建议使用 computer algebra system提供 C 绑定(bind)。

关于c - C 中的代数运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29074021/

相关文章:

c - 错误: "an array may not have elements of this type"

c - 验证签名/证书的最佳方法是什么?

haskell - 将记录语法与具有多个构造函数的代数数据类型结合使用

像 SymPy 这样的 Haskell 库?

c - 避免 POSIX 线程中的内存泄漏

C、string和int的sprintf和 "sum"

types - 在调用函数和回调之间对齐多态变体类型

haskell - 代数类型 - Haskell

为自己的 CAS 应用程序进行类似 Mathematica (LaTeX) 的排版

lisp - 用 maxima 语言编码 vs lisp