Избавиться от неявного преобразования
Я полез в математическую теорию и на основе этой теории
Получился метод reverstrans(тоже использую формулу Эйлера)
Как я понял что U'(w) и U''(w) нужно найти и потом вычислить по формуле для дальнейшей подстановки в формулу обратного преобразования Фурье
Собственно это я и реализовал в методе.
{
//здесь методы,поля всё работает
}
class TrapezoidalRule : NumericalIntegrationRule
{
public double Calculate(Func<double, double> func, double min, double max, double subintervalsCount)
{
double result = 0;
double step = (max - min) / subintervalsCount;
for (double i = min; i < max; i += step)
result += ((func(i) + func(i + step)) / 2) * step;
return result;
}
}
public static Complex reverstrans(double U, double anguarFrequency, double T)
{
NumericalIntegration integration = new NumericalIntegration();
double u1 = U * integration.Calculate(t => Math.Cos(anguarFrequency), 0, T);//U'(w)
double u2 = U * integration.Calculate(t => Math.Sin(anguarFrequency), 0, T);//U''(w)
double ValFurieTrans = u1 - Complex.ImaginaryOne * u2;//U'(w) - U''(w) = U(w)e^-j*fi(w)––––Ошибка Неявное преобразование
return (1 / (2 * Math.PI)) * integration.Calculate(w => Math.Cos(ValFurieTrans), 0, T) + Complex.ImaginaryOne * (1 / (2 * Math.PI)) * integration.Calculate(w => Math.Sin(ValFurieTrans), 0, T);
}
Изменить на возвращаемый тип double не решает мою проблему,а лишь только усугубляет её.
Спасибо я читаю MSDN но там из double в Complex,а у меня же всё наоборот я должен из Complex в double
Тоже это заметил, но комплексное число — это выражение вида a + bi, где a, b — действительные числа, а i — так называемая мнимая единица, и как вы себе представляете преобразование "a + bi" в обычное вещественное число? потому вам нужно решить, что из комплексного числа вам надо a или bi, вот собственно это число и преобразуется в double.
System.Numerics.Complex uu1 = u1; // преобразуем дубл u1 в комплексное uu1(u1,0)
System.Numerics.Complex uu2 = u2; // преобразуем дубл u2 в комплексное uu2(u2,0)
complex samevalue = Complex.ImaginaryOne; // инициализируем новый экземпляр объекта complex samvalue(1,0)
Complex ValFurieTrans = uu1 - samevalue * uu2; //делаем U'(w) - U''(w)
но ValFurieTrans уже будет не double, а комплексным числом.
System.Numerics.Complex uu1 = u1; // преобразуем дубл u1 в комплексное uu1(u1,0)
System.Numerics.Complex uu2 = u2; // преобразуем дубл u2 в комплексное uu2(u2,0)
complex samevalue = Complex.ImaginaryOne; // инициализируем новый экземпляр объекта complex samvalue(1,0)
Complex ValFurieTrans = uu1 - samevalue * uu2; //делаем U'(w) - U''(w)
но ValFurieTrans уже будет не double, а комплексным числом.
Да да вы правы,теперь проблема перешла из тех строк в return ,где у меня собственно и происходит вычисление формулы.
Как можно обойти это неявное преобразование?
Я изменял Complex.Sin,Complex.Cos но тут уже более другая проблема, метод подсчётов интегралов Calculate работает с double и весь класс подсчёта интегралов объявлен double.
И компилятор выдаёт такую ошибку
Не удается преобразовать "лямбда-выражение" в делегат "System.Func<double,double>", поскольку некоторые из типов результатов, возвращаемых блоком, не могут быть неявно преобразованы в тип результата, возвращаемого делегатом
Или мне нужно весь свой класс и интерфейс переделывать из double в Complex?
{
NumericalIntegration integration = new NumericalIntegration();
double u1 = U * integration.Calculate(t => Math.Cos(anguarFrequency), 0, T);//U'(w)
double u2 = U * integration.Calculate(t => Math.Sin(anguarFrequency), 0, T);//U''(w)
System.Numerics.Complex uu1 = u1; // преобразование u1 в комплексное число uu1(u1,0)
System.Numerics.Complex uu2 = u2; // преобразование u2 в комплексное число uu2(u2,0)
Complex img = Complex.ImaginaryOne;
Complex ValFurieTrans = uu1 - img * uu2; //Вычисляем U(w)e^-j*fi(w)= U'(w) - U''(w)
return (1 / (2 * Math.PI)) * integration.Calculate(w => Math.Cos(ValFurieTrans), 0, T) + Complex.ImaginaryOne * (1 / (2 * Math.PI)) * integration.Calculate(w => Math.Sin(ValFurieTrans), 0, T);
}
Пробовал несколько вариантов
-Если я напишу
Код:
Код:
-Если я напишу
Код:
Код:
Дополнительные сведения: Не удалось привести тип объекта "System.Numerics.Complex" к типу "System.IConvertible"
Спасибо я читаю MSDN но там из double в Complex,а у меня же всё наоборот я должен из Complex в double