محاسبه لگاریتم
- ehsan.helli1
نام: احسان
محل اقامت: تهران
عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰
پست: 1688-
سپاس: 624
- جنسیت:
تماس:
Re: محاسبه لگاریتم
تعریف لگاریتم طبیعی اینه
مساحت زیر نمودار 1/x از 1 تا x
تابع exp معکوس تابع لگاریتم طبیعی هستش
مساحت زیر نمودار 1/x از 1 تا x
تابع exp معکوس تابع لگاریتم طبیعی هستش
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
خوب منم می گم چرا از 1 تا x؟
اثبات این که چرا از 1 تا x رو می خوام.
درسته شکل یک هذلولی هستش و قرنه است و مساخت این ور و اون ورش یکیه پس باید از 1 به بعدو حساب کنیم. ولی این اثبات هردمبیلی رو دوست ندارم.
اثبات این که چرا از 1 تا x رو می خوام.
درسته شکل یک هذلولی هستش و قرنه است و مساخت این ور و اون ورش یکیه پس باید از 1 به بعدو حساب کنیم. ولی این اثبات هردمبیلی رو دوست ندارم.
- ehsan.helli1
نام: احسان
محل اقامت: تهران
عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰
پست: 1688-
سپاس: 624
- جنسیت:
تماس:
- ehsan.helli1
نام: احسان
محل اقامت: تهران
عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰
پست: 1688-
سپاس: 624
- جنسیت:
تماس:
Re: محاسبه لگاریتم
double power(double x, int p);//x^p
double ln(double z)
{
double t =(z-1)/(z+1);
double result=0,oldResult=1;
int n=0;
double temp=0;
while((oldResult < result?result - oldResult:oldResult - result) > 0.00000000001)
{
oldResult = result;
temp =(2*n+1);
result =result + 2*( (1 / temp )* (power(t,2*n+1)) );
n=n+1;
}
return result;
}
double log(double x,double a)
{
return ln(x)/ln(a);
}
اینم الان پیدا کردم!فک کنم درست نوشته
double ln(double z)
{
double t =(z-1)/(z+1);
double result=0,oldResult=1;
int n=0;
double temp=0;
while((oldResult < result?result - oldResult:oldResult - result) > 0.00000000001)
{
oldResult = result;
temp =(2*n+1);
result =result + 2*( (1 / temp )* (power(t,2*n+1)) );
n=n+1;
}
return result;
}
double log(double x,double a)
{
return ln(x)/ln(a);
}
اینم الان پیدا کردم!فک کنم درست نوشته
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
چه جالب اتفاقا همین الان منم داشتم با matlab به زبان java همینو می نوشتم ولی اینی که شما اوردی خیلی اضافه نویسی داره.
- ehsan.helli1
نام: احسان
محل اقامت: تهران
عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰
پست: 1688-
سپاس: 624
- جنسیت:
تماس:
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
n=1000000;
x=2.718;
p=0;
for i=0:1:n
p=p+( (1/2i+1)* power( ((x-1)/(x+1)),(2i+1) ) );
end
p=p*2;
من اینو نوشتم ولی lne رو نشون می ده :
q =
-4.3720e+005 -9.3618e+005i
یعنی کجای کار ایراد داره!!!
x=2.718;
p=0;
for i=0:1:n
p=p+( (1/2i+1)* power( ((x-1)/(x+1)),(2i+1) ) );
end
p=p*2;
من اینو نوشتم ولی lne رو نشون می ده :
q =
-4.3720e+005 -9.3618e+005i
یعنی کجای کار ایراد داره!!!
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
مشکلشو درست کردم نباید می نوشتم 2i+1 این فکر کرده عدد غیر حقیقیه.
ولی مشکلو درست کردم می گه جواب بی نهایته.
پس یا اون بسطی که نوشتین غلطه یا من اشتباه کردم!!!n=1000000;
x=2.718;
p=0;
for j=0:1:n
p=p+( (1/(2*j+1))*power( ((x+1)/(x-1)),(2*j+1) ) );
end
p=p*2;
>> p
p =
Inf
>>
ولی مشکلو درست کردم می گه جواب بی نهایته.
پس یا اون بسطی که نوشتین غلطه یا من اشتباه کردم!!!n=1000000;
x=2.718;
p=0;
for j=0:1:n
p=p+( (1/(2*j+1))*power( ((x+1)/(x-1)),(2*j+1) ) );
end
p=p*2;
>> p
p =
Inf
>>
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
خودم فهمیدم چرا انتگرال 1/x می شه از 1 تا x و x>1 دلیلش اینه که درسته که انتگرال 1/x می شه خود تابع lnx ولی همون طور که می دونیم مشتق انتگرال یک تابع خودش نمی شه و کم درجه ترین جمله حذف می شه و تو اینجا هم انتگرال گیری از مشتق lnx خود تابعو نمی ده و این انتگرال مساحت نموداری رو می ده که ابتداش از محور مختصات باشه. در نتیجه به دلیل این که lnx در صفر مثیت به منفی بی نهایت میل می کنه در نتیجه مثل اینه که نمودار lnx زو اونقدر بیاریم بالا که ابتداش بشه ابتدای محور مختصات که امکان نا پذیره و اونوقت مقدار تابع همواره بی نهایت می شه.
ولی اگه انتگرال 1/x+1 رو از مبدا مختصات بگیریم می شه مقدار تابع lnx از نقطه x=1 به بعد که چون 1/x همواره مثبته پس انتگرالشم همواره مثبت و مقدار تابع lnx رو از y=0 به ما تحویل می ده.
در ضمن اون روشی که گفتم برای پیدا کردن مقدار تابع یعنی بیایم مشتق تابع رو به صورت پله پله بگیریم و ارتفاه این پله هارو جمع کنیم تا به مقدار خود تابع برسیم این چیز جدیدی نست بلکه انتگرال گیری از مشتق تابع است.
برای بدست اوردن لگاریتم یک عدد فقط کافیه انتگرال 1 تا x رو به ازای x>1 بگیریم می شه لگاریتم طبیعی .
بسیار سادست شاید یکی از ساده ترین سیگما هایی که دیده باشید :
lim┬(n→∞)∑_(i=0)^n▒1/(i+n/x)
اینو بندازین تو wrod نشون می ده.
البته برای آسونی محاسبه کامپیتور من سادش کردم وگرنه اصل معادله این شکلیه:
lim┬(n→∞)〖x/n ∑_(i=0)^n▒1/(i/n x+1)〗
اینم کدش که لگاریتم طبیعی 2.718 رو به ازای n=10000 نشون داد 1.313086546919802 :
n=10000;
n=double(n);
x=0;
x=double(x);
x=2.718;
p=0;
p=double(p);
for j=1:1:n
p=p+( 1/(j+(n/x)) );
end
نمی دونم برنامه نویسیش چه مشکلی داره که دقیق حساب نمی کنه!
هرچی مقدار x بزرگتر باشه عدد دقیق تری می ده و عدد n تاثیر چندانی در دقت جواب نداره و فقط سرعتو میاره پایین.
مثلا لگاریتم 1000 رو نشون می ده 6.8596 که با ماشین حساب کامپیوتر بزنیم نشون می ده :6.9077
لگاریتم 1000000 رو برنامه من نشون می ده 13.3927 و ماشین حساب کامپیوتر می ده : 13.8155
ولی وقتی n رو می زارم 100000000 برنامه من می ده : 13.8105 که البته محاسبش 3 ثانیه طول می کشه.
از نظر دیفرانسیلی که مشکلی نداره ولی نمی دونم چرا با matlab که اینو نوشتم ایراد می گیره!
شاید فرمولای بهتری برای محاسبه دقیق تر و سریع تر لگاریتم باشه.
کسی فرمول بهتر می دونه؟
این فرمول زتایی که آقای احسان.هلی نوشتند رو کسی می تونه بررسی کنه؟ چون من برنامشو نوشتم و جوابش همیشه واگرا و بی نهایته.
ولی اگه انتگرال 1/x+1 رو از مبدا مختصات بگیریم می شه مقدار تابع lnx از نقطه x=1 به بعد که چون 1/x همواره مثبته پس انتگرالشم همواره مثبت و مقدار تابع lnx رو از y=0 به ما تحویل می ده.
در ضمن اون روشی که گفتم برای پیدا کردن مقدار تابع یعنی بیایم مشتق تابع رو به صورت پله پله بگیریم و ارتفاه این پله هارو جمع کنیم تا به مقدار خود تابع برسیم این چیز جدیدی نست بلکه انتگرال گیری از مشتق تابع است.
برای بدست اوردن لگاریتم یک عدد فقط کافیه انتگرال 1 تا x رو به ازای x>1 بگیریم می شه لگاریتم طبیعی .
بسیار سادست شاید یکی از ساده ترین سیگما هایی که دیده باشید :
lim┬(n→∞)∑_(i=0)^n▒1/(i+n/x)
اینو بندازین تو wrod نشون می ده.
البته برای آسونی محاسبه کامپیتور من سادش کردم وگرنه اصل معادله این شکلیه:
lim┬(n→∞)〖x/n ∑_(i=0)^n▒1/(i/n x+1)〗
اینم کدش که لگاریتم طبیعی 2.718 رو به ازای n=10000 نشون داد 1.313086546919802 :
n=10000;
n=double(n);
x=0;
x=double(x);
x=2.718;
p=0;
p=double(p);
for j=1:1:n
p=p+( 1/(j+(n/x)) );
end
نمی دونم برنامه نویسیش چه مشکلی داره که دقیق حساب نمی کنه!
هرچی مقدار x بزرگتر باشه عدد دقیق تری می ده و عدد n تاثیر چندانی در دقت جواب نداره و فقط سرعتو میاره پایین.
مثلا لگاریتم 1000 رو نشون می ده 6.8596 که با ماشین حساب کامپیوتر بزنیم نشون می ده :6.9077
لگاریتم 1000000 رو برنامه من نشون می ده 13.3927 و ماشین حساب کامپیوتر می ده : 13.8155
ولی وقتی n رو می زارم 100000000 برنامه من می ده : 13.8105 که البته محاسبش 3 ثانیه طول می کشه.
از نظر دیفرانسیلی که مشکلی نداره ولی نمی دونم چرا با matlab که اینو نوشتم ایراد می گیره!
شاید فرمولای بهتری برای محاسبه دقیق تر و سریع تر لگاریتم باشه.
کسی فرمول بهتر می دونه؟
این فرمول زتایی که آقای احسان.هلی نوشتند رو کسی می تونه بررسی کنه؟ چون من برنامشو نوشتم و جوابش همیشه واگرا و بی نهایته.
- Aryan_M
نام: آرین مخدومی
محل اقامت: مشهد
عضویت : یکشنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶
پست: 343-
سپاس: 84
- جنسیت:
Re: محاسبه لگاریتم
لگاریتم طبیعی توسط معکوس تابع نمایی (exp) به روش عددی، مثلا نیوتون رافسون، محاسبه می شود.
تاب نمایی هم با بست تیلور.
روش های دقیق تر هم موجود است.
https://en.wikipedia.org/wiki/Natural_logarithm
تاب نمایی هم با بست تیلور.
روش های دقیق تر هم موجود است.
https://en.wikipedia.org/wiki/Natural_logarithm
- assarzadeh
نام: امیر عصارزاده
عضویت : جمعه ۱۳۹۳/۱۰/۱۲ - ۲۱:۱۹
پست: 160-
سپاس: 88
- جنسیت:
تماس:
Re: محاسبه لگاریتم
دوستان سلام
با دیدن موضوع این جستار لازم دیدم با توجه به اینکه سالها پیش به روشی برای محاسبه لگاریتم اعداد دست یافته بودم، شما را با آن آشنا کنم. هر چند که من هنوز تمام نظرات بیان شده در این موضوع را نتوانستم بخوانم.
با استفاده از روشی که من به آن دست پیدا کردم، میتوان لگاریتم هر عددی را در هر پایه مثبت و مخالف $1$ فقط با یک ماشین حساب معمولی با دقت بسیار خوبی به دست آورد. من سالها پیش کدی هم به زبان $\mathrm{C}$ نوشته بودم که به کمک این روش لگاریتم اعداد را محاسبه میکرد. اما الان آن را پیدا نمیکنم؛ وگرنه آن را در همین جستار قرار میدادم. در این روش شما باید ابتدا قسمت صحیح حاصل لگاریتم را به دست بیاورید و سپس یک عدد صحیح بزرگتر از $1$ به عنوان مبنای محاسبات انتخاب نمایید که به نظر من $2$ و $10$ اعداد مناسبی هستند. در ادامه توجه شما را به طریقه محاسبه لگاریتم عدد $1000$ در پایه عدد $π$ با انتخاب $10$ به عنوان مبنای محاسبه جلب میکنم (در ماشین حساب مهندسی برای محاسبه این مقدار کافیست حاصل لگاریتم عدد $1000$ در یک پایه دلخواه را بر لگاریتم عدد $π$ در همان پایهای که انتخاب کردیم تقسیم کنیم).
امیدوارم این متن مفید باشد.
با دیدن موضوع این جستار لازم دیدم با توجه به اینکه سالها پیش به روشی برای محاسبه لگاریتم اعداد دست یافته بودم، شما را با آن آشنا کنم. هر چند که من هنوز تمام نظرات بیان شده در این موضوع را نتوانستم بخوانم.
با استفاده از روشی که من به آن دست پیدا کردم، میتوان لگاریتم هر عددی را در هر پایه مثبت و مخالف $1$ فقط با یک ماشین حساب معمولی با دقت بسیار خوبی به دست آورد. من سالها پیش کدی هم به زبان $\mathrm{C}$ نوشته بودم که به کمک این روش لگاریتم اعداد را محاسبه میکرد. اما الان آن را پیدا نمیکنم؛ وگرنه آن را در همین جستار قرار میدادم. در این روش شما باید ابتدا قسمت صحیح حاصل لگاریتم را به دست بیاورید و سپس یک عدد صحیح بزرگتر از $1$ به عنوان مبنای محاسبات انتخاب نمایید که به نظر من $2$ و $10$ اعداد مناسبی هستند. در ادامه توجه شما را به طریقه محاسبه لگاریتم عدد $1000$ در پایه عدد $π$ با انتخاب $10$ به عنوان مبنای محاسبه جلب میکنم (در ماشین حساب مهندسی برای محاسبه این مقدار کافیست حاصل لگاریتم عدد $1000$ در یک پایه دلخواه را بر لگاریتم عدد $π$ در همان پایهای که انتخاب کردیم تقسیم کنیم).
$\boldsymbol{\log}{1000}=\boldsymbol{\log}{(π^6×\frac{1000}{π^6})}=6+\boldsymbol{\log}{\frac{1000}{π^6}}=6+\boldsymbol{\log}1.040161...=6+0.1\boldsymbol{\log}1.482544...=$
$6.0+0.01\boldsymbol{\log}51.295159...=6.03+0.01\boldsymbol{\log}1.654347...=6.03+0.001\boldsymbol{\log}153.556305...=$
$6.034+0.001\boldsymbol{\log}1.576406...=6.034+0.0001\boldsymbol{\log}94.772347...=6.0343+0.0001\boldsymbol{\log}3.056553...=~...$
توضیح: پایه لگاریتمهای فوق عدد $π$ است. در ابتدا ممکن است روش پیچیدهای به نظر برسد. اما یک روند منظم و سرراست دارد و با چند بار تمرین به راحتی به خاطر سپرده میشود. کلید این روش استفاده از رابطه $\boldsymbol{\log_b}x=\frac1n\boldsymbol{\log_b}{x^n}$ است که در آن $n$ همان مبناییست که انتخاب کردهایم. بر این اساس ابتدا قسمت صحیح حاصل لگاریتم را به دست میآوریم. برای این کار کافیست اگر عدد جلوی لگاریتم بزرگتر از $1$ باشد، آن را آنقدر بر پایه لگاریتم یعنی $π$ تقسیم کنیم تا به عددی بزرگتر یا مساوی با $1$ و کوچکتر از $π$ برسیم (یعنی عددی که جزء صحیح لگاریتم آن صفر باشد). در این صورت تعداد تقسیماتی که انجام دادهایم همان جزء صحیح لگاریتم عدد مورد نظر است. اگر هم عدد جلوی لگاریتم کوچکتر از $1$ باشد، آن را آنقدر در پایه لگاریتم ضرب میکنیم تا به عددی در محدوده گفته شده برسیم. در این حالت تعداد ضربهای انجام شده با علامت منفی بیانگر جزء صحیح لگاریتم عدد است. در این مثال اگر عدد $1000$ را شش بار بر $π$ تقسیم کنیم به عددی بین $1$ و $π$ خواهیم رسید. بنابراین جزء صحیح لگاریتم $1000$ در پایه $π$ عدد $6$ است. طبق قاعده تبدیل ضرب به جمع، لگاریتم $1000$ عبارتست از حاصل جمع عدد $6$ و لگاریتم آن عددی که در نتیجه تقسیمات متوالی به آن دست یافتیم. حالا همین کار را برای محاسبه لگاریتم عدد جدید نیز انجام میدهیم؛ منتها ابتدا باید از رابطه کلیدی فوق استفاده کنیم و عدد جدید را به توان مبنای انتخابی ($10$) برسانیم و معکوس مبنا یعنی $0.1$ را به عنوان ضریب بر حاصل لگاریتم اعمال نماییم. با تکرار این عمل میتوانیم لگاریتم مورد نظرمان را تا دقت دلخواه محاسبه کنیم. این روش را میتوان برای پایههای لگاریتم کوچکتر از $1$ هم به کار بست. در این حالت باید تقسیمات (یا ضربهای) متوالی روی عدد مورد لگاریتم گیری را هر بار آنقدر انجام دهیم تا به مقداری کوچکتر یا مساوی با $1$ و بزرگتر از پایه لگاریتم دست یابیم.امیدوارم این متن مفید باشد.
Email: [email protected]