gpt4 book ai didi

C# 应用求解二次虚根

转载 作者:行者123 更新时间:2023-11-30 15:46:46 27 4
gpt4 key购买 nike

我构建了一个极其简单但功能齐全且非常有用的 WinForms C# 应用程序,用于求解二次方程的实根。

这是我目前的编程逻辑:

   string noDivideByZero = "Enter an a value that isn't 0";
txtSolution1.Text = noDivideByZero;
txtSolution2.Text = noDivideByZero;

decimal aValue = nmcA.Value;
decimal bValue = nmcB.Value;
decimal cValue = nmcC.Value;

decimal solution1, solution2;
string solution1String, solution2String;

//Quadratic Formula: x = (-b +- sqrt(b^2 - 4ac)) / 2a

//Calculate discriminant
decimal insideSquareRoot = (bValue * bValue) - 4 * aValue * cValue;

if (insideSquareRoot < 0)
{
//No real solution
solution1String = "No real solutions!";
solution2String = "No real solutions!";

txtSolution1.Text = solution1String;
txtSolution2.Text = solution2String;
}
else if (insideSquareRoot == 0)
{
//One real solution
decimal sqrtOneSolution = (decimal)Math.Sqrt((double)insideSquareRoot);
solution1 = (-bValue + sqrtOneSolution) / (2 * aValue);
solution2String = "No real solution!";

txtSolution1.Text = solution1.ToString();
txtSolution2.Text = solution2String;
}
else if (insideSquareRoot > 0)
{
//Two real solutions
decimal sqrtTwoSolutions = (decimal)Math.Sqrt((double)insideSquareRoot);
solution1 = (-bValue + sqrtTwoSolutions) / (2 * aValue);
solution2 = (-bValue - sqrtTwoSolutions) / (2 * aValue);

txtSolution1.Text = solution1.ToString();
txtSolution2.Text = solution2.ToString();
}

txtSolution1txtSolution2是不允许接收输入但输出计算结果的文本框

nmcA , nmcBnmcC是NumericUpDown控件,用于终端用户输入的a、b、c值

好的,所以,我希望更进一步,也可能求解虚数值。考虑到我已经设置了条件,只有当判别式等于 0 时,我才需要考虑虚值。或小于 0 .

但是,我想不出解决这个问题的好方法。当一个人试图取负数的平方根时,会出现复杂的解决方案,导致 i无处不在。 i = sqroot(-1)i^2 = -1 .

有谁知道如何解决这个问题,或者是否不值得花时间?

编辑

通过更多的谷歌搜索,我发现 C# 4.0(或 .NET 4.0,我不确定是哪个)可以在 System.Numerics.Complex 中提供内置的复数支持。 .我现在正在检查这个。

最佳答案

例如你正在尝试计算

(-b + sqrt(inside)) / (2*a)

Math.Sqrt不知道虚数,所以如果 inside < 0 .但是我们总是可以乘以 1 而不会改变答案。请注意,i2 = -1。 -1 * i2 = 1。所以让我们乘以 -1 * i2 并简化:

(-b + sqrt(inside * -1 * i**2)) / (2*a)
(-b + sqrt(-inside) * sqrt(i**2)) / (2*a)
(-b + sqrt(-inside) * i) / (2*a)
-b/(2*a) + sqrt(-inside)/(2*a) * i

所以下面的 C# 代码:

solution1String = (-b/(2*a)).ToString() +
" + " + (Math.Sqrt(-inside)/(2*a)).ToString() + " i";

关于C# 应用求解二次虚根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4128880/

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