powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Избавиться от неявного преобразования в C#
5 сообщений из 5, страница 1 из 1
Избавиться от неявного преобразования в C#
    #39249588
otars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть метод подсчёта интегралов.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
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;
            }
        }



А есть метод обратного преобразования Фурье
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
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);
        }



Строка указанная выше ругается на неявное преобразование между Complex в double
Данную формулу я взял на основе теории
...
Рейтинг: 0 / 0
Избавиться от неявного преобразования в C#
    #39249592
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
otarsСтрока указанная выше ругается на неявное преобразование между Complex в double
Данную формулу я взял на основе теорииЗначит надо читать более раннюю теорию. Что такое комплексные числа и как они взаимодействуют с реальными.
Комплексное число умноженное на реальное получается комплексное число. А ты почему-то ждешь реальное...
...
Рейтинг: 0 / 0
Избавиться от неявного преобразования в C#
    #39249715
otars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 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)
           System.Numerics.Complex uu1 = u1; // преобразование u1 в комплексное число uu1(u1,0)
           System.Numerics.Complex uu2 = u2; // преобразование u2 в комплексное число uu2(u2,0)
           Complex img = Complex.ImaginaryOne;// инициализируем новый экземпляр объекта complex samvalue(1,0)
           //Complex ValFurieTrans = u1 - Complex.ImaginaryOne * u2;//U'(w) - U''(w) = U(w)e^-j*fi(w)
           Complex ValFurieTrans = uu1 - img * uu2; //Вычисляем U(w)e^-j*fi(w)= U'(w) - U''(w) 
           return (1 / (2 * Math.PI)) * integration.Calculate(w => Complex.Cos(ValFurieTrans), 0, T) + Complex.ImaginaryOne * (1 / (2 * Math.PI)) * integration.Calculate(w => Complex.Sin(ValFurieTrans), 0, T);              
        }



Теперь эта проблема Complex->double меня настигла в этой строке

Код: c#
1.
 return (1 / (2 * Math.PI)) * integration.Calculate(w => Complex.Cos(ValFurieTrans), 0, T) + Complex.ImaginaryOne * (1 / (2 * Math.PI)) * integration.Calculate(w => Complex.Sin(ValFurieTrans), 0, T); 



При изменении с Math.Sin,Math.Cos на Complex.Sin,Complex.Cos будет более другая проблема,так как метод подсчётов интегралов Calculate(и его класс) работают только с double.
Следовательно компилятор выдаст такую ошибку

Не удается преобразовать "лямбда-выражение" в делегат "System.Func<double,double>", поскольку некоторые из типов результатов, возвращаемых блоком, не могут быть неявно преобразованы в тип результата, возвращаемого делегатом

Или мне нужно весь свой класс и интерфейс переделывать из double в Complex?
...
Рейтинг: 0 / 0
Избавиться от неявного преобразования в C#
    #39249729
otars
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

я не тот код написал

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
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)
           System.Numerics.Complex uu1 = u1; // преобразование u1 в комплексное число uu1(u1,0)
           System.Numerics.Complex uu2 = u2; // преобразование u2 в комплексное число uu2(u2,0)
           Complex img = Complex.ImaginaryOne;// инициализируем новый экземпляр объекта complex samvalue(1,0)
           //Complex ValFurieTrans = u1 - Complex.ImaginaryOne * u2;//U'(w) - U''(w) = U(w)e^-j*fi(w)
           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" в "double" невозможно	
            
        }
...
Рейтинг: 0 / 0
Избавиться от неявного преобразования в C#
    #39251031
Naf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
otars,

Код: c#
1.
Complex ValFurieTrans = Complex.Zero + u1 - Complex.ImaginaryOne * u2;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Избавиться от неявного преобразования в C#
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]