حل یک معادله با استفاده از متلب و یا پایتون - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

حل یک معادله با استفاده از متلب و یا پایتون

0 امتیاز

سلام

 

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

ممنون میشم اگر راهنمایی فرمایید و یا اگر نمونه ای مشابه در اینترنت هست لینکش رو بگذارید تو جواب.

 

Ln(t) -2t=A

A  یک عدد ثابت هست و هدف پیداکردن t هست.

سوال شده فروردین 13, 1400  بوسیله ی داود (امتیاز 259)   4 11 19

2 پاسخ

0 امتیاز
 
بهترین پاسخ

با توجه به فرم معادله می‌تونند از تکنیک Fixed-point استفاده کنند. در‌واقع f(t) = (ln(t) – A)/2 هستش و کافیه که با یک t اولیه‌ی غیر منفی f(t) رو حساب کنند (البته برای Aهای مثبت کمی دقت لازمه) و چند بار خروجی رو به ورودی تابع بدند و نتیجه به جواب معادله همگرا می‌شه:

import math


def f(t, A):
    return (math.log(t) - A) / 2


A = -10
INITIAL_T = 2
ITERATIONS_COUNT = 10

last_t = INITIAL_T
for _ in range(ITERATIONS_COUNT):
    last_t = f(last_t, A)
    
print('t = {}, f(t) = {}'.format(last_t, f(last_t, A)))

 

پاسخ داده شده فروردین 14, 1400 بوسیله ی 7khatcode (امتیاز 228)   2 4
انتخاب شد فروردین 14, 1400 بوسیله ی داود
0 امتیاز

در اینجا یک راه حل کد در پایتون برای یافتن t برای یک مقدار A داده شده است:

import numpy as np

def solve_ln_eq(A):
    t_guess = 1 # starting guess for t
    tolerance = 1e-6 # desired tolerance level
    max_iter = 1000 # maximum number of iterations
    i = 0
    while i < max_iter:
        func = np.log(t_guess) - 2*t_guess - A
        if abs(func) < tolerance:
            break
        t_guess = t_guess - func / (-2 + 1/t_guess)
        i += 1
    return t_guess

A = 2 # example value for A
t = solve_ln_eq(A)
print(t)

 

و در اینجا یک راه حل کد مشابه در MATLAB وجود دارد:

function t = solve_ln_eq(A)
    t_guess = 1; % starting guess for t
    tolerance = 1e-6; % desired tolerance level
    max_iter = 1000; % maximum number of iterations
    i = 0;
    while i < max_iter
        func = log(t_guess) - 2*t_guess - A;
        if abs(func) < tolerance
            break;
        end
        t_guess = t_guess - func / (-2 + 1/t_guess);
        i = i + 1;
    end
    t = t_guess;
end

A = 2; % example value for A
t = solve_ln_eq(A);
disp(t);

 

پاسخ داده شده بهمن 10, 1401 بوسیله ی roshanak (امتیاز 267)   3 10 16
...