gpt4 book ai didi

java - 委托(delegate)帮助 java 到 c#

转载 作者:行者123 更新时间:2023-11-30 06:40:17 25 4
gpt4 key购买 nike

我试图通过将一些 java 转换为 c# 来获得一些乐趣,我有以下来自 java 的代码。

public void calculate() {
UnivariateFunction forceBalance = (double x) -> {
return Mu - k1 * fcu * b * x * (d - k2 * x);
};
BrentSolver biSolver = new BrentSolver(1e-6);
x = biSolver.solve(1000, forceBalance, 0, d / 2, 1);

As = Mu / (gamma_r * fy * (d - k2 * x));
}

我在 C# 中找不到的只是似乎可以解决这个 MathNet.Numerics,因为它包含 RootFinding.Brent.FindRoot。

我找到了其他可以解决这个问题的东西,但我没有 900 美元。

这是我想到的,但我认为我可能会遗漏一些东西,因为我对委托(delegate)的了解不是最好的。

class Program
{
public static double Mu = 100e6;
public static double K1 = 0.45 * (1 - (Math.Sqrt(fcu) / 52.5));
public static double fcu = 30.00;
public static double b = 300.00;
//public static double c = 0.00;
public static double d = 500.00;
public static double k2 = (Math.Pow(2 - Math.Sqrt(fcu) / 17.5, 2) + 2) / (4 * (3 - (Math.Sqrt(fcu) / 17.5)));

static void Main(string[] args)
{
Calculate();
}

public static void Calculate()
{
Func<double, double> abc = x => Mu - K1 * fcu * b * x * (d - k2 * x);

var a = MathNet.Numerics.RootFinding.Brent.FindRoot(abc, 0, 10000, 1e-6);

Console.WriteLine();
Console.ReadLine();
}

}

运行此命令会出现以下错误:失败、超出允许的迭代次数或在提供的范围内没有根。'

现在我假设这是因为 func 没有解析 x。

我错过了什么吗?

另请注意,这远远超出了我的技能水平,但我正在努力提高。

最佳答案

输入值

首先,如果您的问题是关于输入值,请查看 soton 发布的答案。您可能使用了错误的 FindRoot 输入值。 Brent Math.Net .

double FindRoot(Func<double, double> f, double lowerBound, double upperBound, double accuracy, int maxIterations)

委托(delegate)

现在,对于您的问题,我相信您是在问 C# 与 Java 中如何处理委托(delegate)。 (我不会破坏你的乐趣)。

委托(delegate)是与指定签名(对方法的引用)匹配的方法的占位符。

以下是与 Func<int, bool> 委托(delegate)类型匹配的变量示例这意味着它接受一个整数 (x) 作为参数并返回一个 boolean 值。此示例的声明方式(使用匿名方法主体)称为 Lambda 表达式。

Func<int, bool> greaterThanZero = (int x) =>
{
if (x > 0)
return true;
else
return false;
};

这里又是一样的,但是委托(delegate)变量是从方法声明中分配的。

Func<int, bool> greaterThanZero = SomeGreaterThanZeroMethod;

我们如何调用委托(delegate)?我们调用它!例如

bool isGreater = greaterThanZero(5);         // should be true
bool isGreater = greaterThanZero.Invoke(-1); // should be false

在许多情况下,您需要确保方法主体不为空,例如

bool isGreater = false;
if (greaterThanZero != null)
isGreater = greaterThanZero.Invoke(-1);

或者使用新奇的空条件运算符 (?)

bool isGreater = greaterThanZero?.Invoke(-1);

这里的内容超出了您在答案中所能概括的范围。一些资源: https://www.tutorialspoint.com/csharp/csharp_delegates.htm https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions

关于java - 委托(delegate)帮助 java 到 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44475582/

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