محاسبه لگاریتم

مدیران انجمن: parse, javad123javad

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

exp دیگه چیه؟

نمایه کاربر
ehsan.helli1

نام: احسان

محل اقامت: تهران

عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰


پست: 1688

سپاس: 626

جنسیت:

تماس:

Re: محاسبه لگاریتم

پست توسط ehsan.helli1 »

تعریف لگاریتم طبیعی اینه
مساحت زیر نمودار 1/x از 1 تا x
تابع exp معکوس تابع لگاریتم طبیعی هستش

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

خوب منم می گم چرا از 1 تا x؟
اثبات این که چرا از 1 تا x رو می خوام.
درسته شکل یک هذلولی هستش و قرنه است و مساخت این ور و اون ورش یکیه پس باید از 1 به بعدو حساب کنیم. ولی این اثبات هردمبیلی رو دوست ندارم.

نمایه کاربر
ehsan.helli1

نام: احسان

محل اقامت: تهران

عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰


پست: 1688

سپاس: 626

جنسیت:

تماس:

Re: محاسبه لگاریتم

پست توسط ehsan.helli1 »

مساحت اونور نمودار که واگرا هستش!
از 1 تا 0

نمایه کاربر
ehsan.helli1

نام: احسان

محل اقامت: تهران

عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰


پست: 1688

سپاس: 626

جنسیت:

تماس:

Re: محاسبه لگاریتم

پست توسط ehsan.helli1 »

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);
}
اینم الان پیدا کردم!فک کنم درست نوشته

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

چه جالب اتفاقا همین الان منم داشتم با matlab به زبان java همینو می نوشتم ولی اینی که شما اوردی خیلی اضافه نویسی داره.

نمایه کاربر
ehsan.helli1

نام: احسان

محل اقامت: تهران

عضویت : جمعه ۱۳۹۰/۱۰/۳۰ - ۲۱:۳۰


پست: 1688

سپاس: 626

جنسیت:

تماس:

Re: محاسبه لگاریتم

پست توسط ehsan.helli1 »

متاسفانه جاوا بلد نیستم!

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

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
یعنی کجای کار ایراد داره!!!

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

مشکلشو درست کردم نباید می نوشتم 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

>>

نمایه کاربر
Aryan_M

نام: آرین مخدومی

محل اقامت: مشهد

عضویت : یک‌شنبه ۱۳۹۱/۱۰/۱۷ - ۲۰:۳۶


پست: 343

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

خودم فهمیدم چرا انتگرال 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 بگیریم می شه لگاریتم طبیعی . smile084
بسیار سادست شاید یکی از ساده ترین سیگما هایی که دیده باشید :
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

سپاس: 97

جنسیت:

Re: محاسبه لگاریتم

پست توسط Aryan_M »

لگاریتم طبیعی توسط معکوس تابع نمایی (exp) به روش عددی، مثلا نیوتون رافسون، محاسبه می شود.
تاب نمایی هم با بست تیلور.
روش های دقیق تر هم موجود است.
https://en.wikipedia.org/wiki/Natural_logarithm

نمایه کاربر
assarzadeh

نام: امیر عصارزاده

عضویت : جمعه ۱۳۹۳/۱۰/۱۲ - ۲۱:۱۹


پست: 118

سپاس: 63

جنسیت:

تماس:

Re: محاسبه لگاریتم

پست توسط assarzadeh »

دوستان سلام
با دیدن موضوع این جستار لازم دیدم با توجه به اینکه سالها پیش به روشی برای محاسبه لگاریتم اعداد دست یافته بودم، شما را با آن آشنا کنم. هر چند که من هنوز تمام نظرات بیان شده در این موضوع را نتوانستم بخوانم.
با استفاده از روشی که من به آن دست پیدا کردم، می‌توان لگاریتم هر عددی را در هر پایه مثبت و مخالف $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$ و بزرگتر از پایه لگاریتم دست یابیم.
امیدوارم این متن مفید باشد.

ارسال پست