PDA

View Full Version : ریشه سوم اعداد مختلط



zarabela
دوشنبه 10 فروردین 1394, 01:14 صبح
سلام دوستان
راستش من این مدت بیچاره شدم از دست این اعداد مختلط:ناراحت: ، من کد زیر رو برای کار با اعداد مختلط پیدا کردم(میگم پیدا کردم چون خودم ننوشتمش) ،یه قسمت از محاسبات نیاز داره به گرفتن ریشه سوم از یه عدد ، الان نمیدونم چطوری میتونم ریشه سوم یه عدد رو به وسیله کد زیر به دست بیارم ، تابع به توان رسوندنش هم فقط به توان اعداد طبیعی میرسونه و نمیشه ریشه گرفت
کسی میتونه کمکم کنه؟واقعا کلافه شدم از دستش:عصبانی++:

public class ComplexNumber
{

public static final int XY = 0;

public static final int RCIS = 1;


private double real;


private double imaginary;


public ComplexNumber()
{
real = 0.0;
imaginary = 0.0;
}



public ComplexNumber(double real, double imaginary)
{
this.real = real;
this.imaginary = imaginary;
}



public void add(ComplexNumber z)
{
set(add(this,z));
}



public void subtract(ComplexNumber z)
{
set(subtract(this,z));
}



public void multiply(ComplexNumber z)
{
set(multiply(this,z));
}



public void divide(ComplexNumber z)
{
set(divide(this,z));
}



public void set(ComplexNumber z)
{
this.real = z.real;
this.imaginary = z.imaginary;
}


public ComplexNumber add(ComplexNumber z1, ComplexNumber z2)
{
return new ComplexNumber(z1.real + z2.real, z1.imaginary + z2.imaginary);
}


public ComplexNumber subtract(ComplexNumber z1, ComplexNumber z2)
{
return new ComplexNumber(z1.real - z2.real, z1.imaginary - z2.imaginary);
}

public ComplexNumber multiply(ComplexNumber z1, ComplexNumber z2)
{
double _real = z1.real*z2.real - z1.imaginary*z2.imaginary;
double _imaginary = z1.real*z2.imaginary + z1.imaginary*z2.real;
return new ComplexNumber(_real,_imaginary);
}

public ComplexNumber divide(ComplexNumber z1, ComplexNumber z2)
{
ComplexNumber output = multiply(z1,z2.conjugate());
double div = Math.pow(z2.mod(),2);
return new ComplexNumber(output.real/div,output.imaginary/div);
}


//زوج مرتب
public ComplexNumber conjugate()
{
return new ComplexNumber(this.real,-this.imaginary);
}



public double mod()
{
return Math.sqrt(Math.pow(this.real,2) + Math.pow(this.imaginary,2));
}



public ComplexNumber square()
{
double _real = this.real*this.real - this.imaginary*this.imaginary;
double _imaginary = 2*this.real*this.imaginary;
return new ComplexNumber(_real,_imaginary);
}


//***********************************
@Override
public String toString()
{
String re = this.real+"";
String im = "";
if(this.imaginary < 0)
im = this.imaginary+"i";
else
im = "+"+this.imaginary+"i";
return re+im;
}


//نمایش به صورت زوج مرتب
public ComplexNumber exp(ComplexNumber z)
{
double a = z.real;
double b = z.imaginary;
double r = Math.exp(a);
a = r*Math.cos(b);
b = r*Math.sin(b);
return new ComplexNumber(a,b);
}


public ComplexNumber pow(ComplexNumber z, int power)
{
ComplexNumber output = new ComplexNumber(z.getRe(),z.getIm());
for(int i = 1; i < power; i++)
{
double _real = output.real*z.real - output.imaginary*z.imaginary;
double _imaginary = output.real*z.imaginary + output.imaginary*z.real;
output = new ComplexNumber(_real,_imaginary);
}
return output;
}

public ComplexNumber sin(ComplexNumber z)
{
double x = Math.exp(z.imaginary);
double x_inv = 1/x;
double r = Math.sin(z.real) * (x + x_inv)/2;
double i = Math.cos(z.real) * (x - x_inv)/2;
return new ComplexNumber(r,i);
}

public ComplexNumber cos(ComplexNumber z)
{
double x = Math.exp(z.imaginary);
double x_inv = 1/x;
double r = Math.cos(z.real) * (x + x_inv)/2;
double i = -Math.sin(z.real) * (x - x_inv)/2;
return new ComplexNumber(r,i);
}

public ComplexNumber tan(ComplexNumber z)
{
return divide(sin(z),cos(z));
}

public ComplexNumber cot(ComplexNumber z)
{
return divide(new ComplexNumber(1,0),tan(z));
}

public ComplexNumber sec(ComplexNumber z)
{
return divide(new ComplexNumber(1,0),cos(z));
}

public ComplexNumber cosec(ComplexNumber z)
{
return divide(new ComplexNumber(1,0),sin(z));
}

public double getRe()
{
return this.real;
}

public double getIm()
{
return this.imaginary;
}

public double getArg()
{
return Math.atan2(imaginary,real);
}

public ComplexNumber parseComplex(String s)
{
s = s.replaceAll(" ","");
ComplexNumber parsed = null;
if(s.contains(String.valueOf("+")) || (s.contains(String.valueOf("-")) && s.lastIndexOf('-') > 0))
{
String re = "";
String im = "";
s = s.replaceAll("i","");
s = s.replaceAll("I","");
if(s.indexOf('+') > 0)
{
re = s.substring(0,s.indexOf('+'));
im = s.substring(s.indexOf('+')+1,s.length());
parsed = new ComplexNumber(Double.parseDouble(re),Double.parseD ouble(im));
}
else if(s.lastIndexOf('-') > 0)
{
re = s.substring(0,s.lastIndexOf('-'));
im = s.substring(s.lastIndexOf('-')+1,s.length());
parsed = new ComplexNumber(Double.parseDouble(re),-Double.parseDouble(im));
}
}
else
{
// Pure imaginary number
if(s.endsWith("i") || s.endsWith("I"))
{
s = s.replaceAll("i","");
s = s.replaceAll("I","");
parsed = new ComplexNumber(0, Double.parseDouble(s));
}
// Pure real number
else
{
parsed = new ComplexNumber(Double.parseDouble(s),0);
}
}
return parsed;
}




@Override
public final boolean equals(Object z)
{
if (!(z instanceof ComplexNumber))
return false;
ComplexNumber a = (ComplexNumber) z;
return (real == a.real) && (imaginary == a.imaginary);
}

public ComplexNumber inverse()
{
return divide(new ComplexNumber(1,0),this);
}

public String format(int format_id) throws IllegalArgumentException
{
String out = "";
if(format_id == XY)
out = toString();
else if(format_id == RCIS)
{
out = mod()+" cis("+getArg()+")";
}
else
{
throw new IllegalArgumentException("Unknown Complex Number format.");
}
return out;
}
}

gjmkdyttyhujk
دوشنبه 10 فروردین 1394, 01:48 صبح
سلام. اینا محاسبات ریاضی هست. تا جایی که من میدونم کار خاصی نباید داشته باشه، فقط باید مفاهیم ریاضی به منطق های برنامه نویسی تبدیل بشه. با کدوم قسمت کد مشکل دارید؟

zarabela
دوشنبه 10 فروردین 1394, 12:58 عصر
حقیقتش من با همش مشکل دارم:ناراحت: تا جایی که میدونم برای پیدا کردن ریشه n ام باید به روش زیر عمل کرد:
http://daneshnameh.roshd.ir/mavara/img/daneshnameh/math/d6d238263fcd9c68f62fb4c973067c1c.png
الان نه میدونم تتا رو چطور به دست بیارم ،نه میدونم عدد پی رو چطور تعریف کنم ، از یه طرفم یه عدد مختلط n تا ریشه nام داره درصورتیکه من فقط یک ریشه رو میخوام

gjmkdyttyhujk
دوشنبه 10 فروردین 1394, 13:20 عصر
حقیقتش من با همش مشکل دارم:ناراحت: تا جایی که میدونم برای پیدا کردن ریشه n ام باید به روش زیر عمل کرد:
http://daneshnameh.roshd.ir/mavara/img/daneshnameh/math/d6d238263fcd9c68f62fb4c973067c1c.png
الان نه میدونم تتا رو چطور به دست بیارم ،نه میدونم عدد پی رو چطور تعریف کنم ، از یه طرفم یه عدد مختلط n تا ریشه nام داره درصورتیکه من فقط یک ریشه رو میخوام

دوست عزیز به نظر من باید تو اینجور مسائل باید قدم به قدم جلو برید. در مورد مثلا (مقادیر)isin که نوشتید باید اول i رو بدست بیارید. بعد پی و تتا کار خاصی نداره. پی که مقدارش ثابت هست و برابر 3.14159 قرار بدید. تتا رو هم که فکر کنم از کاربر می گیرید. تابع sin و cos هم که توی اکلیپس هست. جز صحیح رو هم خودتون میتونید تابعش رو بنویسید که عدد رو به عنوان پارامتر تابع ارسال کنید. بعد اونو تبدیل به int کنید که در این صورت قسمت اعشاری حذف میشه.

rezashiri88
دوشنبه 10 فروردین 1394, 14:24 عصر
دوست عزیز به نظر من باید تو اینجور مسائل باید قدم به قدم جلو برید. در مورد مثلا (مقادیر)isin که نوشتید باید اول i رو بدست بیارید. بعد پی و تتا کار خاصی نداره. پی که مقدارش ثابت هست و برابر 3.14159 قرار بدید. تتا رو هم که فکر کنم از کاربر می گیرید. تابع sin و cos هم که توی اکلیپس هست. جز صحیح رو هم خودتون میتونید تابعش رو بنویسید که عدد رو به عنوان پارامتر تابع ارسال کنید. بعد اونو تبدیل به int کنید که در این صورت قسمت اعشاری حذف میشه.

یه چند تا گیر الکی بهت بدم :)) :0 :O
اولا تتا رو از کاربر نمیگیره ... خودش باید محاسبه کنه !
دوما ثابت پی هم در جاوا(و نه اکلیپس!!!) تعریف شده!
سوما اون براکت هم جز صحیح نیست :))
همین دیگه :))

دوست عزیزیم که این سوال رو پرسیده ... اینو برا چی می خوای ؟! :)) ... اگه یکم ... فقط یکم برنامه نویسی بلد باشی باید بتونی اینو حساب کنی ...
مگه اینکه رشته ات چیز دیگه ای باشه و این پروژت باشه مثلا !؟ :))

gjmkdyttyhujk
دوشنبه 10 فروردین 1394, 14:46 عصر
یه چند تا گیر الکی بهت بدم :)) :0 :O
اولا تتا رو از کاربر نمیگیره ... خودش باید محاسبه کنه !
دوما ثابت پی هم در جاوا(و نه اکلیپس!!!) تعریف شده!
سوما اون براکت هم جز صحیح نیست :))
همین دیگه :))

دوست عزیزیم که این سوال رو پرسیده ... اینو برا چی می خوای ؟! :)) ... اگه یکم ... فقط یکم برنامه نویسی بلد باشی باید بتونی اینو حساب کنی ...
مگه اینکه رشته ات چیز دیگه ای باشه و این پروژت باشه مثلا !؟ :))

سلام. در مورد گیرهات، اولی و سومی شاید جا برای گیر دادن داشته باشه ولی دومی جایز نیست. چون حتما کسی که تو اکلیپس برنامه مینویسه میدونه که زبان برنامه نویسی اش جاوا هست.

rezashiri88
دوشنبه 10 فروردین 1394, 14:55 عصر
سلام. در مورد گیرهات، اولی و سومی شاید جا برای گیر دادن داشته باشه ولی دومی جایز نیست. چون حتما کسی که تو اکلیپس برنامه مینویسه میدونه که زبان برنامه نویسی اش جاوا هست.

بدترش کردی که :))
کی گفته ؟! من خودم پروژه سی پلاس پلاس ام رو با اکلیپس زدم :)) ... اینم لینک اثبات (https://eclipse.org/cdt/) :))

gjmkdyttyhujk
دوشنبه 10 فروردین 1394, 15:08 عصر
بدترش کردی که :))
کی گفته ؟! من خودم پروژه سی پلاس پلاس ام رو با اکلیپس زدم :)) ... اینم لینک اثبات (https://eclipse.org/cdt/) :))

شما چرا گیر دادی به من. این جا انجمن اندروید هست دوست عزیز. کسی که اینجا از اکلیپس حرف می زنه منظورش هم جاوا هست دیگه. شما تمرکزت رو بزار رو سوال دوستمون:))

rezashiri88
دوشنبه 10 فروردین 1394, 15:32 عصر
شما چرا گیر دادی به من. این جا انجمن اندروید هست دوست عزیز. کسی که اینجا از اکلیپس حرف می زنه منظورش هم جاوا هست دیگه. شما تمرکزت رو بزار رو سوال دوستمون:))

بهله :)) ...
اینجا انجمن اندرویده ... پس جواب دادن به این سوال مگه به اینجا مربوطه ؟! :)) ... سوال برنامه نویسیه (حالا مثلا جاوا ) ...
سوال ایشون هم ربطی به این انجمن نداره :))

gjmkdyttyhujk
دوشنبه 10 فروردین 1394, 16:44 عصر
بهله :)) ...
اینجا انجمن اندرویده ... پس جواب دادن به این سوال مگه به اینجا مربوطه ؟! :)) ... سوال برنامه نویسیه (حالا مثلا جاوا ) ...
سوال ایشون هم ربطی به این انجمن نداره :))

شما خیلی خاص هستی ها. خیلی با بقیه فرق میکنی. سوال ایشون در مورد نحوه پیاده سازی هست. کاملا هم به این انجمن ربط داره. اینکه چطوری پی و تتا رو پیاده سازی کنه رو جایی نیست که بپرسه. باید تو اینجا بپرسه. اگر بلدید یه راهنمایی کنید اگرهم نه با این پاسخ هاتون فضای هاست رو پر نکنید. گناه داره.:لبخند:

zarabela
سه شنبه 11 فروردین 1394, 18:52 عصر
یه چند تا گیر الکی بهت بدم :)) :0 :O
اولا تتا رو از کاربر نمیگیره ... خودش باید محاسبه کنه !
دوما ثابت پی هم در جاوا(و نه اکلیپس!!!) تعریف شده!
سوما اون براکت هم جز صحیح نیست :))
همین دیگه :))

دوست عزیزیم که این سوال رو پرسیده ... اینو برا چی می خوای ؟! :)) ... اگه یکم ... فقط یکم برنامه نویسی بلد باشی باید بتونی اینو حساب کنی ...
مگه اینکه رشته ات چیز دیگه ای باشه و این پروژت باشه مثلا !؟ :))

ممنونم که وقت گذاشتی جواب دادی ، تابعش رو هم نوشتم فقط همونطور که گفتم چون چند روزه درگیر این اعداد مختلطم دیگه اصلا تمرکز نداشتم و اعصابمو خورد کردن
محض اطلاع هم رشتم مرتبطه (مهندسی IT) هم برنامه نویسی کار کردم فقط برنامه محاسباتی ننوشتم اونم به خاطر سابقه کمی هست که دارم:چشمک: