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