public void Sum()
        {
            Complex actual   = number1.Sum(number2);
            Complex expected = new Complex(number1.re + number2.re, number1.im + number2.im);

            Assert.True(actual.Equals(expected));
        }
Example #2
0
        public void TestMethod1() //тестирование класса Complex
        {
            Complex c1 = Complex.Create(4.5, -5.6);

            Assert.AreEqual(c1.r, 4.5);
            Assert.AreEqual(c1.i, -5.6);
            Complex c2  = Complex.Create(5.5, 6.6);
            Complex sum = Complex.Sum(c1, c2);

            Assert.AreEqual(sum.r, 10);
            Assert.AreEqual(sum.i, 1);
            Complex c3   = Complex.Create(2, 3);
            Complex c4   = Complex.Create(-1, 4);
            Complex mult = Complex.Multiplication(c3, c4);

            Assert.AreEqual(mult.r, -14);
            Assert.AreEqual(mult.i, 5);
            Complex c5  = Complex.Create(1, 2);
            Complex pow = Complex.Pow(c5, 3);

            Assert.AreEqual(pow.r, -11);
            Assert.AreEqual(pow.i, -2);
            Complex.Print(pow);
            Complex.Print(c3);
            Complex.PrintLine(pow);
            Complex.PrintLine(c3);
        }
Example #3
0
        public static void ExportMemoryUsage(string resultPath, Mpi mpi, INativeMemoryProvider memoryProvider, double frequency)
        {
            Complex localNativeMemory = (memoryProvider as MemoryProvider)?.GetAllocatedMemorySizeInBytes() / (1024 * 1024.0) ?? 0;
            var     nativeMemory      = new Complex[mpi?.Size ?? 1];

            Complex localManagedMemory = GC.GetTotalMemory(false) / (1024 * 1024.0);
            var     managedMemory      = new Complex[mpi?.Size ?? 1];

            Complex localLinuxMemory = (double)LinuxMemoryFileReader.GetTotalMemoryInMiB();
            var     linuxMemory      = new Complex[mpi?.Size ?? 1];

            mpi?.Gather(nativeMemory, localNativeMemory);
            mpi?.Gather(managedMemory, localManagedMemory);
            mpi?.Gather(linuxMemory, localLinuxMemory);

            if (mpi?.IsMaster ?? true)
            {
                string path = Path.Combine(resultPath, $"mem_info_mpi{mpi?.Size:0000}_freq{frequency}.dat");

                Func <Complex, string> pr = v => $"{v.Real / 1024:######0.0000} GiB".PadLeft(16);

                using (var sw = new StreamWriter(path))
                {
                    sw.WriteLine($"MPI_proc\t\tNATIVE\t\tMANAGED\t\tSUMM\t\tLINUX");

                    sw.Write($"Total".PadRight(16));
                    sw.Write(pr(nativeMemory.Sum(c => c.Real)));
                    sw.Write(pr(managedMemory.Sum(c => c.Real)));
                    sw.Write(pr(nativeMemory.Sum(c => c.Real) + managedMemory.Sum(c => c.Real)));
                    sw.Write(pr(linuxMemory.Sum(c => c.Real)));
                    sw.WriteLine();


                    for (int i = 0; i < nativeMemory.Length; i++)
                    {
                        sw.Write($"{i}".PadRight(16));
                        sw.Write(pr(nativeMemory[i]));
                        sw.Write(pr(managedMemory[i]));
                        sw.Write(pr(nativeMemory[i] + managedMemory[i]));
                        sw.Write(pr(linuxMemory[i]));
                        sw.WriteLine();
                    }
                }
            }
        }
Example #4
0
        /// <summary>
        /// Сумма частичного ряда
        /// </summary>
        /// <param name="n0">Начальный номер члена ряда</param>
        /// <param name="nmax">Конечный номер члена ряда</param>
        /// <param name="f">Функция, сопоставляющая член ряда по номеру</param>
        /// <returns></returns>
        public static Complex Sum(int n0, int nmax, Func <int, Complex> f)
        {
            int tmp = nmax - n0 + 1;

            Complex[] mas = new Complex[tmp];
            for (int i = 0; i < tmp; i++)
            {
                mas[i] = f(n0 + i);
            }
            Array.Sort(mas);
            return(mas.Sum());
        }
Example #5
0
        private void button1_Click(object sender, EventArgs e)
        {            
            Complex comp = new Complex();

            _rp1 = comp.GetRealPart(realTB1.Text);
            _rp2 = comp.GetRealPart(realTB2.Text);
            _ip1 = comp.GetImaginaryPart(imagTB1.Text);
            _ip2 = comp.GetImaginaryPart(imagTB2.Text);
            
            if (comboBox1.SelectedIndex == 0)
            {
                _resofreal = comp.Sum(_rp1, _rp2);
                _resofimag = comp.Sum(_ip1, _ip2);
                _result = "а="+_resofreal+"+"+_resofimag+"i";
            }
            else
                if (comboBox1.SelectedIndex == 1)
                {
                    _resofreal = comp.Raznost(_rp1, _rp2);
                    _resofimag = comp.Raznost(_ip1, _ip2);
                    _result = "а=" + _resofreal + "+" + _resofimag + "i";
                }
                else
                    if (comboBox1.SelectedIndex == 2)
                    {                        
                        _result = comp.umnozhenie(_rp1, _rp2, _ip1, _ip2);
                    }
                    else
                        if (comboBox1.SelectedIndex == 3)
                        {
                            _result = comp.delenie(_rp1, _rp2, _ip1, _ip2);
                        }
                        else
                            if (comboBox1.SelectedIndex == 4)
                            {
                                _result = comp.sravnenie(_rp1, _rp2, _ip1, _ip2);
                            }
            MessageBox.Show("1е комплексное число: а="+realTB1.Text+"+"+imagTB1.Text+"i\n2е комплексное число: а="
                            +realTB2.Text+"+"+imagTB2.Text+"i\nРезультат операции: "+ _result);
        }
Example #6
0
        public void WriteResults()
        {
            string m1 = string.Empty;
            string m2 = string.Empty;

            foreach (Element el in circuit.elements)
            {
                m1 += el.number;
            }
            circuit.elements.Sort(delegate(Element el1, Element el2) { return(el1.number.CompareTo(el2.number)); });

            foreach (Element el in circuit.elements)
            {
                m2 += el.number;

                el.setResistance(w, el.type);
            }
            // MessageBox.Show(m1 + "      \n" + m2);

            circuit.Resistance1 = ((Complex.Sum(circuit.elements[0].Resistance, circuit.elements[1].Resistance))
                                   * circuit.elements[2].Resistance) /
                                  (Complex.Sum(circuit.elements[0].Resistance, circuit.elements[1].Resistance, circuit.elements[2].Resistance));

            Resistanse_1.Text += circuit.Resistance1.ToString();

            circuit.Resistance2 = ((circuit.elements[3].Resistance * circuit.elements[4].Resistance) /
                                   (Complex.Sum(circuit.elements[3].Resistance, circuit.elements[4].Resistance)));

            Resistanse_2.Text += circuit.Resistance2.ToString();

            circuit.Resistance3 = ((Complex.Sum(circuit.elements[5].Resistance, circuit.elements[6].Resistance))
                                   * circuit.elements[7].Resistance) /
                                  (Complex.Sum(circuit.elements[5].Resistance, circuit.elements[6].Resistance, circuit.elements[7].Resistance));

            Resistanse_3.Text += circuit.Resistance3.ToString();

            //Расчёт амплитуды контурных токов
            //I(I)max = E / Zэкв  Zэкв - tempResistance1
            //I(II)max = E / Zдел Zдел - tempResistance2

            Complex tempResistance1 = new Complex();

            tempResistance1 = circuit.Resistance3 + circuit.Resistance1 +
                              ((circuit.Resistance1 * circuit.Resistance3) / circuit.Resistance2);

            Complex tempResistance2 = new Complex();
            Complex Constant1       = new Complex(1, 0); // 1 в виде комплексного числа (1+0i)

            tempResistance2 = (circuit.Resistance1 + circuit.Resistance2) / (Constant1 + (circuit.Resistance2 / tempResistance1));


            double Emax = circuit.power.Amplitude;

            //Ток вo 2 контуре
            circuit.I3       = new PowerSupply(Emax / Complex.Abs(tempResistance1), circuit.power.w / (2 * System.Math.PI), circuit.power.Phase + System.Math.Atan2(tempResistance1.Imaginary(), tempResistance1.Real()));
            Amperage_3.Text += circuit.I3.getValue();

            //Ток в первом контуре
            circuit.I1       = new PowerSupply(Emax / Complex.Abs(tempResistance2), circuit.power.w / (2 * System.Math.PI), circuit.power.Phase + System.Math.Atan2(tempResistance2.Imaginary(), tempResistance2.Real()));
            Amperage_1.Text += circuit.I1.getValue();

            //Ток во второой ветви I2=I1-I3;
            double a1, b1, a2, b2, a3, b3, Imax2, phase2;

            a1 = System.Math.Sqrt((circuit.I1.Amplitude * circuit.I1.Amplitude) / (1 + System.Math.Tan((circuit.I1.Phase * System.Math.PI) / 180) * System.Math.Tan((circuit.I1.Phase * System.Math.PI) / 180)));
            b1 = a1 * System.Math.Tan((circuit.I1.Phase * System.Math.PI) / 180);

            a3 = System.Math.Sqrt((circuit.I3.Amplitude * circuit.I3.Amplitude) / (1 + System.Math.Tan((circuit.I3.Phase * System.Math.PI) / 180) * System.Math.Tan((circuit.I3.Phase * System.Math.PI) / 180)));
            b3 = a3 * System.Math.Tan((circuit.I3.Phase * System.Math.PI) / 180);

            a2 = a1 - a3;
            b2 = b1 - b3;

            Complex temp = new Complex(a2, b2);

            Imax2  = Complex.Abs(temp);
            phase2 = System.Math.Atan2(b2, a2);

            circuit.I2       = new PowerSupply(Imax2, circuit.power.w / (2 * System.Math.PI), phase2);
            Amperage_2.Text += circuit.I2.getValue();
        }