天道酬勤,学无止境

C# library for algebra simplification and solving [closed]

There are quite a few algebra solvers and simplifiers on the web (for example, the decent one at algebra.com). However, I'm looking for something I can plug into C# as part of a larger project (I'm making my own calculator, but obviously I'd ask permission etc.).

Ideally, I'd use code like:

String s = MathLib.Simplify("5x*(500/x^2*(sqrt(3)/4)+1)+2x^2+(sqrt(3)/2)*x^2");

And 's' would simplify down to: "1082.532/x+5*x+2.866*x^2"

(3dp accuracy there, but one could change that if need be).

Solving for a particular variable would be nice too. I need something lightweight, and fast too (calculations such as the above would preferably be under 5ms or so including the startup latency).

After some research, programs like Sage, Octave or Mathematica are probably overkill (my app will only be a small <200k exe probably). Dotnumerics.com or Mathdotnet.com may be suitable, but the former doesn't seem to mention algebraic simplification, and the lack of documentation and examples in the latter is a turn off. I'm wondering if there are any appropriate alternatives as well. A large list can be found here: http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems

评论

I've managed to successfully call into SymPy to get this done from C#. SymPy provides a relatively robust simplify function that I've had good success with. Now I'm not entirely sure how to package this nicely yet (not having to install ironpython), or even how hard a direct port of the code might be.

  1. Install IronPython
  2. Get SymPy
  3. Add these resources to your project
    • IronPython.dll
    • IronPython.Modules.dll
    • Microsoft.Dynamic.dll
    • Microsoft.Scripting.dll
  4. C# code as follows:

    var engine = Python.CreateEngine();
    var paths = engine.GetSearchPaths();
    paths.Add(@"c:\program files (x86)\ironpython 2.7\lib");
    paths.Add(@"c:\Development\sympy");
    engine.SetSearchPaths(paths);
    
    // expression to simplify
    var expr = "0 + 1 * 1 * (x - 2) / (1 - 2) * (x - 3) / (1 - 3) * (x - 4) / (1 - 4) + 8 * 1 * (x - 1) / (2 - 1) * (x - 3) / (2 - 3) * (x - 4) / (2 - 4) + 27 * 1 * (x - 1) / (3 - 1) * (x - 2) / (3 - 2) * (x - 4) / (3 - 4) + 64 * 1 * (x - 1) / (4 - 1) * (x - 2) / (4 - 2) * (x - 3) / (4 - 3)";
    
    var scope = engine.CreateScope();
    var script = engine.CreateScriptSourceFromString(@"
    from sympy import *
    import clr
    from System import String
    
    expr = simplify('" + expr + @"')
    result = clr.Convert(expr, String)
    ");
    
    script.Execute(scope);
    
    // prints "x**3"
    Console.WriteLine(scope.GetVariable("result"));
    

Symbolism is a C# library which implements automatic simplification of algebraic expressions.

Going with your example expression, the following program:

var x = new Symbol("x");

(5 * x * (500 / (x ^ 2) * (sqrt(3.0) / 4) + 1) + 2 * (x ^ 2) + (sqrt(3.0) / 2) * (x ^ 2))
    .AlgebraicExpand()
    .Disp();

displays this at the console:

1082.5317547305483 / x + 5 * x + 2.8660254037844384 * (x ^ 2)

There is a flurry of answers to be found in a related SO question. Though none, other that mathdotnet, fall at the intersection of symbolics (the kind of simplificaiton you are asking for above), lightweight-ishness, and accessibility on .Net.

I see you have already found the mathdotnet forum. Note a couple of its developers are SO users:

  • Christoph Rüegg
  • Joannes Vermorel (though ohloh tells me he's more attached to the numerics section)

That might supplement the support you ask for.

Have you tried creating a few simple classes implementing the Shunting Yard Algorithm(Reverse Polish Notation) than process the postfix notation using stack processingstack processing?

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Java or scala Library to parse latex or MathML string [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 6 years ago. Improve this question I need to store a lot of equation and mathematical formula into database for my simulation experimentations, and i think it's better to use some mathML or latex string... but ... I make some googling request, and i'm very surprised because i don't find any eval library in java or scala to transform string latex or string mathML expression into equation in java /
  • Calculate the algebraic expression in C# [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 7 years ago. Improve this question Calculate the algebraic expression Z, for which n is inputted by user. Use 2 for loops to solve the problem. My code so far: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int n, k = 1; double z; float sum, p; n = Console
  • 吴恩达机器学习(二十二)—— 大规模机器学习
    吴恩达机器学习系列内容的学习目录 → \rightarrow →吴恩达机器学习系列内容汇总。1. 大型数据集的学习2. 随机梯度下降3. 小批量梯度下降4. 随机梯度下降收敛5. 在线学习6. 映射化简和数据并行1. 大型数据集的学习  " It’s not who has the best algorithm that wins. It’s who has the most data. " 所以说,要想得到一个高效的机器学习系统的最好方式之一,就是用一个低偏差的学习算法,然后用很多数据来训练它。   但是用很大的数据集也有自己的问题,特别是计算量的问题。假设训练集大小为 m = 100 , 000 , 000 m=100,000,000 m=100,000,000,要训练一个线性回归模型或逻辑回归模型,根据梯度下降公式计算仅仅下一步的梯度下降,计算量就已经是巨大的,所以我们首先应该做的事是去检查一下这么大规模的训练集是否真的必要。在我们用算法训练大数据的模型前,可以先随机从上亿条的数据集里选一个1000条的子集,看是否值得扩大数据集的引入。也许我们只用1000个训练集也能获得较好的效果,这可以通过绘制学习曲线来帮助判断,如下图所示。   左图的高方差情况可以通过增加训练集的大小来提高算法性能,右图的高偏差情况就没有必要再增加数据集的规模了。   有两种方法可以用来处理海量的数据集
  • A-01 最小二乘法
    目录最小二乘法一、最小二乘法——代数法二、最小二乘法——矩阵法三、最小二乘法优缺点3.1 优点3.2 缺点更新、更全的《机器学习》的更新网站,更有python、go、数据结构与算法、爬虫、人工智能教学等着你:https://www.cnblogs.com/nickchen121/p/11686958.html最小二乘法最小二乘法,可以理解为最小平方和,即误差的最小平方和,在线性回归中,\(误差=真实值-预测值\)。最小二乘法的核心思想就是——通过最小化误差的平方和,使得拟合对象无限接近目标对象,最小二乘法一般解决线性问题。一、最小二乘法——代数法假设线性回归的假设函数为\[\begin{align} h_\omega(x_0,x_1,\cdots,x_n) & = \omega_0x_0+\omega_1x_1+\cdots+\omega_nx_n \\ & = \sum_{i=0}^n \omega_ix_i \end{align} \]其中\(n-1\)是特征数。如果针对所有的\(\omega_i\quad(i=1,2,\cdots,n)\)而言,假设函数是非线性的,但是针对某一个\(\omega_i\)的话,由于变量只剩下一个\(\omega_i\),假设函数就是线性的,既可以使用最小二乘法求解。通过线性回归的假设函数既可以得到目标函数为\[\begin{align} J(
  • C ++的稀疏矩阵库(sparse matrix library for C++ [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 2年前关闭。 改善这个问题 是否有可以执行以下操作的稀疏矩阵库: 求解线性代数方程支持矩阵-矩阵/数乘法/加法/减法,矩阵转置,获取矩阵的行/列等操作矩阵大小可以是40k * 40k或更大,例如250k * 250k 快速地可以在Windows中使用 有人可以为我推荐一些图书馆吗? 如果您推荐,请告诉我它的优缺点,以及推荐它的原因。 顺便说一句,我已经在互联网上搜索了许多稀疏矩阵库并对其进行了测试。 我发现它们每个仅支持很少的运算(其中许多只能求解线性代数方程式并执行矩阵矢量乘法)。最后,我找到了一个名为SparseLib ++的运算符。 它也不支持很多操作,因此我添加了很多基本的矩阵操作。 现在可以了。 但是,我只是听说SparseLib ++太旧了而且不够快。 但是我的项目基于SparseLib ++,我在SparseLib ++上花费了很多工作。 所以我想知道是否尝试另一个稀疏矩阵库。 回答1 http://www.mcs.anl.gov/petsc/具有大量内置的线性代数,并且在数据变大时可以在整个群集上分布矩阵。 遇到技术问题时,https://scicomp.stackexchange.com/上还会有活跃的关注者。
  • 什么是使用最广泛的C ++向量/矩阵数学/线性代数库,以及它们的成本和收益之间的取舍? [关闭](What are the most widely used C++ vector/matrix math/linear algebra libraries, and their cost and benefit tradeoffs? [closed])
    问题 关闭。 此问题不符合堆栈溢出准则。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使它成为Stack Overflow的主题。 3年前关闭。 改善这个问题 似乎许多项目慢慢地需要进行矩阵数学运算,并陷入了以下陷阱:首先构建一些矢量类,然后缓慢地添加功能,直到被困于建立一个半确定的自定义线性代数库并依赖它。 我想避免这种情况,同时又不依赖于某些切向相关的库(例如OpenCV,OpenSceneGraph)。 那里最常用的矩阵数学/线性代数库是什么,为什么会决定使用另一个? 有什么建议不建议使用的吗? 我专门在几何/时间上下文*(2,3,4 Dim)*中使用它,但将来可能会使用更高维度的数据。 我正在寻找以下方面的差异:API,速度,内存使用,广度/完整性,狭窄性/特异性,可扩展性和/或成熟度/稳定性。 更新 我最终使用了我非常满意的Eigen3。 回答1 为此,有很多项目已经选择了通用图形工具包。 那里的GMTL很不错-它非常小,非常实用,并且被广泛使用以使其非常可靠。 OpenSG,VRJuggler和其他项目都已转而使用此方法,而不是使用自己的手动Vertor /矩阵数学方法。 我发现它非常不错-它可以通过模板完成所有操作,因此非常灵活且非常快。 编辑: 在讨论讨论和进行编辑之后,我想我会抛出更多有关特定实现的优点和缺点的信息
  • 如何输出分数而不是十进制数?(How to output fraction instead of decimal number?)
    问题 在C ++中,当我计算2/3时,它将输出十进制值,我如何才能获得原始格式(例如2/3)而不是0.66666667 谢谢 回答1 你不能您将需要编写一个专门用于保存有理数(即分数)的类。 或者也许只是使用Boost Rational Number库。 回答2 如果我理解正确,则您有一个浮点数(一个float或double float型变量),并且您希望将此值输出为小数。 在这种情况下,您需要进一步指定您的问题: 根据定义,FP编号是一个分数:FP编号由两个整数组成,一个尾数m和一个指数e (和一个符号,但这在此无关紧要)。 因此,每个FP数实际上是一对(m,e) ,它表示的值f是f = mb ^ e (其中b是固定的整数基数,通常为2)。 因此,自然表示为分数的简单表示为m / b ^(-e)且e <0 (如果e> = 0 ,则f仍是整数)。 但是,您可能希望获得具有最小合理除数的分数。 这是一个不同的问题。 要获得,您可以例如使用Pari / GP库中的bestappr函数。 在您的情况下,您可能会使用bestappr(x, A) ,输入x ,而A是您想尝试的最大分母。 bestappr将为您提供最接近x的分母仍小于A的分数。 回答3 编写自己的Rational类以计算除法 class Rational { public: int numerator, denominator
  • c# - solving complexed ODE set
    Introduction Some sets od ODE can't be solved analytically. In this case there are plenty of well-know methods, especially in typical scientific software like MATLAB. As long as you stay with it, all is fine. But the problem starts if you try to port this functionality to other environment. In my case I need it in C#. Some details Of course, there are some C# libs for ODE's but in most cases (at least in this which i'm familiar with), there are quite limited. Let's look at OSLO library, here's an example query: var sol = Ode.RK547M(0, new Vector(5.0, 1.0), (t, x) => new Vector( x[0] - x[0] * x
  • C# linear algebra library
    Is there stable linear algebra (more specifically, vectors, matrices, multidimensional arrays and basic operations on them) library for C#? Search yielded a few open source libraries which are either not updated for couple of years or are in an early beta stage - and Centerspace NMath. Which alternatives are worth checking?
  • 四阶行列式直接展开_线性代数——n阶行列式的计算
    n阶行列式需要思考的点 判断是不是符合范德蒙行列式看看各行(列)之间的差是不是一个常数,若是,逐行相加或相减(推进的方向和加的方向是相反的)看看每一行(列)之间是不是成等差数列,若是就利用加边法进行求解看看行列式是不是符合递推式的特点,递推式中的行列式的特点就是直观看起来是按某个角一层一层的叠加,这时如果式子中有比较多的0,最好是每行(列)只有两个元素,这时果断用展开式求递推式,展开的位置选择和非零元素最多的那一行(列)垂直的那一列展开。用一行减去所有行 用逐行递减 用一行均为1的元素减去各行 对角线只有一条非零元素的,这种可以直接利用逐行相加直接化简,这种行列式叫做爪形行列式(李永乐说的) 对角线只有两条非零元素,且符合递推规律,所以采用递推式,滞后一项 注意采用递推式的行列式一定是这个形式,或者化简后是这个形式 中间有3条的,这种的递推式中会滞后两项 对于上述这三种类型可以统称为对角型矩阵,一般都是要结合展开式来确定递推关系的,这就涉及了在哪展开比较好的问题了,这种类型题最好的展开处是对角所在两个角的其中一个,然后就看看同一行或列上有没有在角上的元素即可,再在那里展开即可 这种出现递推式的,要马上想到差分方程,这样可以快速计算出通解,当然也存在差分方程计算不出来的,这时再直接累步计算就好(方浩(1)1:15:00) 综合型 这个通过观察其实可以发现每一行都是有公共因子的
  • sparse matrix library for C++ [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 2 years ago. Improve this question Is there any sparse matrix library that can do these: solve linear algebraic equations support operations like matrix-matrix/number multiplication/addition/subtraction,matrix transposition, get a row/column of a matrix,and so on matrix size could be 40k*40k or bigger,like 250k*250k fast can be used in Windows Can someone recommend some libraries for me? If you
  • 如何在Python中求解方程式? [关闭](How can I solve equations in Python? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 想要改善这个问题吗? 更新问题,使其仅通过编辑此帖子即可将重点放在一个问题上。 5年前关闭。 改善这个问题 假设我有一个方程: 2x + 6 = 12 使用代数,我们可以看到x = 3 。 如何使用Python编写可以解决x ? 我是编程的新手,我查看了eval()和exec()但我不知道如何使它们执行我想要的操作。 我不想使用外部库(例如SAGE),我只想在纯Python中执行此操作。 回答1 SymPy呢? 他们的求解器看起来像您所需要的。 如果您想自己构建库,请查看它们的源代码… 回答2 有两种方法可以解决此问题:数字方式和符号方式。 要用数字方式解决它,您必须首先将其编码为“可运行”功能-插入一个值,取出一个值。 例如, def my_function(x): return 2*x + 6 解析一个字符串来自动创建这样的函数是很有可能的。 假设您将2x + 6解析为一个列表[6, 2] (其中列表索引对应于x的幂-因此6 * x ^ 0 + 2 * x ^ 1)。 然后: def makePoly(arr): def fn(x): return sum(c*x**p for p,c in enumerate(arr)) return fn my_func = makePoly([6, 2]) my_func(3)
  • 在C ++中评估数学表达式的最佳方法是什么?(What is the best way to evaluate mathematical expressions in C++?)
    问题 例如,评估任何自定义数学表达式的最佳方法是什么? 3+sqrt(5)+pow(3)+log(5) 我知道将Python嵌入C ++可以做到这一点。 有什么更好的办法吗? 谢谢! 回答1 Boost.Spirit是一个C ++解析器库。 例子: 在其发行版本中:经典版本和当前版本(查找“ calc”); 在Rosetta Wiki上; 一些使用它的应用程序。 回答2 不确定为什么“ pow”只有一个参数,但是使用ExprTk库可以得出以下简单的解决方案: #include <cstdio> #include <string> #include "exprtk.hpp" int main() { typedef exprtk::expression<double> expression_t; typedef exprtk::parser<double> parser_t; std::string expression_string = "3 + sqrt(5) + pow(3,2) + log(5)"; expression_t expression; parser_t parser; if (parser.compile(expression_string,expression)) { double result = expression.value(); printf(
  • y = Ax的Boost线性代数解决方案(Boost's Linear Algebra Solution for y=Ax)
    问题 助推器有一个吗? 其中A,y和x分别是一个矩阵(稀疏,可能非常大)和向量。 y或x可以是未知的。 我似乎在这里找不到它:http://www.boost.org/doc/libs/1_39_0/libs/numeric/ublas/doc/index.htm 回答1 线性求解器通常是LAPACK库的一部分,它是BLAS库的高级扩展。 如果您使用的是Linux,则英特尔MKL拥有一些很好的求解器,它们针对密集和稀疏矩阵都进行了优化。 如果您在Windows上,MKL可以免费试用一个月。。。老实说,我还没有尝试过其他任何一种。 我知道Atlas软件包具有免费的LAPACK实现,但不确定在Windows上运行有多困难。 无论如何,到处搜索适用于您的系统的LAPACK库。 回答2 是的,您可以使用boost的ublas库求解线性方程。 这是使用LU分解和反替换得到逆的一种简短方法: using namespace boost::ublas; Ainv = identity_matrix<float>(A.size1()); permutation_matrix<size_t> pm(A.size1()); lu_factorize(A,pm) lu_substitute(A, pm, Ainv); 因此,要求解线性系统Ax = y,您可以通过将(trans(A)A)^
  • What are the most widely used C++ vector/matrix math/linear algebra libraries, and their cost and benefit tradeoffs? [closed]
    Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers. Want to improve this question? Update the question so it's on-topic for Stack Overflow. Closed 3 years ago. Improve this question It seems that many projects slowly come upon a need to do matrix math, and fall into the trap of first building some vector classes and slowly adding in functionality until they get caught building a half-assed custom linear algebra library, and depending on it. I'd like to avoid that while not building in a dependence on some tangentially related library (e.g
  • 用Python解决数学方程式的最简单方法(Simplest way to solve mathematical equations in Python)
    问题 我想求解一组线性或有时是二次方程式。 我没有特定的问题,但是通常,我经常遇到这种情况。 使用Wolframalpha.com(相当于Mathematica的网络版)来解决问题很简单。 但这不能提供iPython shell的舒适性和便利性。 是否有一个简单的库可用于处理来自python shell的线性和二次方程式? 就个人而言,我发现使用Casio 991 MS科学计算器极为方便。 我知道如何设置变量,求解方程式以及做很多事情。 我希望最好在ipython shell中使用这样的工具。 没发现任何东西我感到很惊讶。 圣人没有给我足够的印象。 也许我缺少了一些东西。 回答1 sympy正是您要找的东西。 回答2 您认为最好的答案是无法接受的。 您的问题是“我想要一个可以在Python中使用的免费计算机代数系统”。 答案是“ SAGE做到了”。 您是否看过最大值/骨质疏松症? SAGE为此提供了绑定,这是功能更强大的免费版本之一。 http://maxima.sourceforge.net/ 回答3 这是使用Python(通过Sage)解决原始问题的方法。 这从根本上澄清了保罗·麦克米兰(Paul McMillan)的上述言论。 sage: a,b,c = var('a,b,c') sage: solve([a+b+c==1000, a^2+b^2==c^2], a,b,c)
  • C ++中的线性方程组? [关闭](System of linear equations in C++? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我需要在程序中求解线性方程组。 是否有一个简单的C ++线性代数库,最好只包含几个头文件? 我一直在寻找将近一个小时,发现的所有东西都需要弄乱Linux,在MinGW中编译DLL等,等等。(我正在使用Visual Studio2008。) 回答1 我认为Eigen是您要找的东西。 http://eigen.tuxfamily.org/index.php?title=Main_Page 它是仅标头的库,可以在许多编译器上进行编译。 它甚至使用奇异的汇编来加快数学速度。 这是展示线性求解器API的页面。 http://eigen.tuxfamily.org/dox-2.0/TutorialAdvancedLinearAlgebra.html 它有一些带有简单api的求解器。 回答2 Boost具有一些基本的线性代数内容。 回答3 您可以使用LAPACK的C ++绑定。 一个快速的谷歌打开了这个链接到Windows库的一些LAPACK。 但是,根据您系统的大小,这可能会显得有些过时。 回答4 我是Armadillo的忠实拥护者
  • C library for linear algebra [closed]
    Closed. This question is opinion-based. It is not currently accepting answers. Want to improve this question? Update the question so it can be answered with facts and citations by editing this post. Closed 6 years ago. Improve this question Please, give me some tips for a HIGH PERFORMANCE C library for linear algebra (matrix algebra, eigenvalues, eigenvectors etc.). Can be both open-source or closed-source.
  • 【视觉SLAM十四讲】李群与李代数
    本文为视觉 SLAM 学习总结,讲解对观测方程中 x x x 该如何优化。欢迎交流 😃 本讲内容概要 李群与李代数的概念, S O ( 3 ) , S E ( 3 ) SO(3),SE(3) SO(3),SE(3) 与对应李代数的表示方法李代数上的求导方式和意义使用 Sophus 对李代数进行运算 李群和李代数基础 旋转矩阵自身带有约束(正交且行列式为 1)。作为优化变量,会引入额外的约束,使优化变得困难。而在李代数上可以变成无约束优化。 三维旋转矩阵构成了特殊正交群: S O ( n ) = { R ∈ R n × n ∣ R R T = I , d e t ( R ) = 1 } SO(n)=\{R∈R^{n×n}|RR^T=I,det(R)=1\} SO(n)={R∈Rn×n∣RRT=I,det(R)=1} 三维变换矩阵构成了特殊欧式群: 关于什么是群,见《离散数学》。群需要满足的性质为:封闭性、结合律、幺元、逆(凤姐咬你)。群结构保证了群上的运算具有良好的性质。 可以验证,旋转矩阵集合和矩阵乘法构成群,变换矩阵和矩阵乘法构成群。因此称它们为旋转矩阵群和变换矩阵群。 李群 李群是一个连续的群,刚体运动也是连续的,故 S O ( 3 ) , S E ( 3 ) SO(3),SE(3) SO(3),SE(3) 都是李群。 S O ( 3 ) , S E ( 3 ) SO(3)
  • 程序员最大的遗憾:在大学时忽略了数学
    可以忽略数学,你可能只想成为一名高薪的程序员。编程是一个十分广泛的领域,你可以选择你想要关注的领域(其中一些不需要数学知识),并且仍然能够取得成功。但从另外一个角度来看:数学是用来解决特殊问题的工具;编程就是在做数学。我想给你们举两个例子,希望能够激励你们给自己一个学习数学的机会。为此,我挑了一些简短(平均 10 分钟)但可能会让你们感到兴奋的视频,用它们来解释这些概念。但首先请允许我说一些与数学无关的东西……如果你不想学,就不会去学在我上大学的时候,我真的不明白学习数学有什么意义。大学的数学和我们在高中学的数学有很大的不同,而我真正想学的是编程。数学似乎只是我获得学位的必经之路,只是为了考试,对我的编程生涯似乎没有任何价值。我固执地认为事实就是这样,所以拒绝在数学上投入很多时间,这导致我第一年被分到一个表现不佳的小组。我太骄傲(应该说是愚蠢)了,但考试有 40% 与数学证明有关,我也只是勉强通过考试。第二年我仍然没有改变之前的看法,到最后不得不去参加补考。在补考的时候,我终于妥协了,然后用暑假的大部分时间来学习数学。花了一个暑假,我还是没有学透数学,仍然不明白为什么它这么重要。你可能会认为我会从这次巨大的失败中学到一些教训,但实际上我仍然被固执所蒙蔽。我只想说,如果数学只是一门选修课时,我是不会选它的!但在事后看来,这是我最大的遗憾之一:五年后