0% au considerat acest document util (0 voturi)
1 vizualizări3 pagini

Codproblema 8

Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
1 vizualizări3 pagini

Codproblema 8

Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd

Table of Contents

Initializare si constante (Unitati in MPa si metri) ....................................................................................... 1


Algoritmul Newton-Raphson ................................................................................................................. 1
Generare Grafic .................................................................................................................................. 2

Initializare si constante (Unitati in MPa si metri)


clear; clc; close all;

P = 20; % MPa (200 bar)


r = 0.25; % m (raza interioara)
sigma_adm = 400; % MPa (tensiunea admisibila)

% Definirea functiei f(t) si a derivatei analitice df(t)


f = @(t) P * (r + t/2) ./ (2*t) + P/2 - sigma_adm;
df = @(t) - (P * r) ./ (2 * t.^2);

% Parametrii metodei Newton-Raphson


t0 = 0.01; % m (grosimea initiala de pornire: 10 mm)
tol = 1e-10; % Toleranta impusa
max_iter = 100; % Numar maxim de iteratii

Algoritmul Newton-Raphson
fprintf('--- Rulare Metoda Newton-Raphson ---\n');
fprintf('%-5s %-15s %-15s %-15s\n', 'Iter', 't [m]', 'f(t)', 'Eroare');

t_curent = t0;
iter = 0;
eroare = Inf;

fprintf('%-5d %-15.10f %-15.5e %-15s\n', iter, t_curent, f(t_curent), '-');

while eroare > tol && iter < max_iter


iter = iter + 1;

% Calculam valoarea functiei si a derivatei la pasul curent


ft = f(t_curent);
dft = df(t_curent);

% Verificare sa nu impartim la zero


if dft == 0
error('Derivata este zero. Metoda Newton-Raphson a esuat.');
end

% Formula de aproximare
t_nou = t_curent - ft / dft;

% Eroarea absoluta intre doua iteratii consecutive

1
eroare = abs(t_nou - t_curent);

% Actualizam valoarea curenta


t_curent = t_nou;

fprintf('%-5d %-15.10f %-15.5e %-15.5e\n', iter, t_curent, f(t_curent),


eroare);
end

t_solutie = t_curent;

fprintf('\n--- REZULTAT FINAL ---\n');


fprintf('Grosimea optima a peretelui: t = %.6f m (%.2f mm)\n', t_solutie,
t_solutie * 1000);
fprintf('Numar total de iteratii: %d\n', iter);

--- Rulare Metoda Newton-Raphson ---


Iter t [m] f(t) Eroare
0 0.0100000000 -1.35000e+02 -
1 0.0046000000 1.58478e+02 5.40000e-03
2 0.0059413600 3.57791e+01 1.34136e-03
3 0.0064465572 2.80390e+00 5.05197e-04
4 0.0064931670 2.01272e-02 4.66099e-05
5 0.0064935065 1.05211e-06 3.39435e-07
6 0.0064935065 0.00000e+00 1.77451e-11

--- REZULTAT FINAL ---


Grosimea optima a peretelui: t = 0.006494 m (6.49 mm)
Numar total de iteratii: 6

Generare Grafic
figure('Name', 'Dimensionare Rezervor CNG', 'NumberTitle', 'off');
set(gcf, 'Color', 'w');

% Generam un vector pentru grosimi intre 2 mm si 15 mm


t_plot = linspace(0.002, 0.015, 500);
y_plot = f(t_plot) + sigma_adm; % Re-aducem la graficul tensiunii efective
pentru claritate fizica

% Plot curba tensiunii din perete


plot(t_plot * 1000, y_plot, 'LineWidth', 2, 'Color', [0 0.5 0.8]);
hold on; grid on;

% Linie orizontala pentru tensiunea admisibila (limita materialului)


line([2 15], [sigma_adm sigma_adm], 'Color', 'r', 'LineStyle', '--',
'LineWidth', 1.2, 'DisplayName', '\sigma_{adm}');

% Marcare punct solutie optima


plot(t_solutie * 1000, sigma_adm, 'ro', 'MarkerFaceColor', 'r',
'MarkerSize', 8);

% Configurare etichete si axe

2
xlabel('Grosime perete, t [mm]', 'FontSize', 11, 'FontWeight', 'bold');
ylabel('Tensiune in perete, \sigma [MPa]', 'FontSize', 11, 'FontWeight',
'bold');
title('Determinarea grosimii optime pentru rezervorul sferic', 'FontSize',
12, 'FontWeight', 'bold');
legend('Tensiune efectiva \sigma(t)', 'Limita \sigma_{adm} = 400 MPa',
'Grosime Optima', 'Location', 'NorthEast');

% Adaugare text explicativ langa punct


text(t_solutie * 1000 + 0.4, sigma_adm + 20, sprintf('t = %.3f mm',
t_solutie * 1000), ...
'FontSize', 10, 'FontWeight', 'bold', 'Color', 'r');

Published with MATLAB® R2025b

S-ar putea să vă placă și