用 c# 下一下
时间: 2023-07-27 09:14:48 浏览: 82
以下是用 C# 实现傅里叶级数的示例代码:
```csharp
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
//定义周期函数
Func<double, double, double> square_wave = (x, T) =>
{
if (x % T < T / 2)
{
return 1.0;
}
else
{
return -1.0;
}
};
//定义计算傅里叶级数的函数
Func<double, double, int, Tuple<double, double[], double[]>> fourier_series = (x, T, n_max) =>
{
double a0 = Enumerable.Range(0, 1000).Select(i => square_wave(x + i * T, T)).Average();
double[] an = new double[n_max];
double[] bn = new double[n_max];
for (int n = 1; n <= n_max; n++)
{
an[n - 1] = 2 / T * Enumerable.Range(0, 1000).Select(i => square_wave(x + i * T, T) * Math.Cos(2 * Math.PI * n * (x + i * T) / T)).Sum();
bn[n - 1] = 2 / T * Enumerable.Range(0, 1000).Select(i => square_wave(x + i * T, T) * Math.Sin(2 * Math.PI * n * (x + i * T) / T)).Sum();
}
return Tuple.Create(a0, an, bn);
};
//生成 x 轴上的点
double[] x = Enumerable.Range(0, 1000).Select(i => -5 + i * 10.0 / 999).ToArray();
//计算傅里叶级数
double T = 2 * Math.PI;
int n_max = 10;
var result = fourier_series(x[0], T, n_max);
double a0 = result.Item1;
double[] an = result.Item2;
double[] bn = result.Item3;
//绘制傅里叶级数的图像
double[] f = Enumerable.Range(0, 1000).Select(i =>
{
double sum = a0 / 2;
for (int n = 1; n <= n_max; n++)
{
sum += an[n - 1] * Math.Cos(2 * Math.PI * n * x[i] / T) + bn[n - 1] * Math.Sin(2 * Math.PI * n * x[i] / T);
}
return sum;
}).ToArray();
Console.WriteLine("Press any key to show the plot...");
Console.ReadKey();
Plot(x, f, square_wave);
}
static void Plot(double[] x, double[] y1, Func<double, double, double> y2)
{
var plt = new ScottPlot.Plot(600, 400);
plt.PlotScatter(x, y1);
plt.PlotFunction(y2, -5, 5);
plt.Title("Fourier series");
plt.XLabel("x");
plt.YLabel("f(x)");
plt.Axis(-5, 5, -1.2, 1.2);
plt.Grid(false);
plt.SaveFig("FourierSeries.png");
Console.WriteLine("Plot saved to FourierSeries.png");
}
}
```
在这个示例中,我们定义了一个周期函数(方波),然后使用 `fourier_series` 函数计算了傅里叶级数的系数,最后使用这些系数绘制了傅里叶级数的图像。由于 C# 缺少科学计算库,因此我们使用了 ScottPlot 库来绘图。如果您的计算机上没有安装 ScottPlot 库,请使用 NuGet 包管理器安装它。
阅读全文