function find_roots_transcendental() % Нахождение корней уравнения f(x)=0 на отрезке [-2.1, 2.3] % f(x) = 3*sin(4x) + 0.5*exp(cos(3x)) - 1.4*x^4 % Используется fsolve из Optimization Toolbox %% 1. Определение функции и построение графика f = @(x) 3*sin(4*x) + 0.5*exp(cos(3*x)) - 1.4*x.^4; x_min = -2.1; x_max = 2.3; x_plot = linspace(x_min, x_max, 2000); y_plot = f(x_plot); figure('Name', 'Поиск корней', 'Position', [100, 100, 1200, 600]); plot(x_plot, y_plot, 'b-', 'LineWidth', 2); grid on; xlabel('x'); ylabel('f(x)'); title('f(x) = 3sin(4x) + 0.5e^{cos(3x)} - 1.4x^4'); hold on; yline(0, 'k--', 'LineWidth', 1.5); hold off; legend('f(x)', 'y=0', 'Location', 'best'); %% 2. Выбор начальных приближений disp('Кликните мышью вблизи каждого корня, затем нажмите Enter.'); [x_guess, ~] = ginput(); if isempty(x_guess) error('Не выбрано ни одного корня.'); end fprintf('Выбрано %d начальных приближений:\n', length(x_guess)); for i = 1:length(x_guess) fprintf(' Приближение %d: x = %.6f\n', i, x_guess(i)); end %% 3. Уточнение корней с помощью fsolve disp('Уточнение корней с помощью fsolve...'); options = optimoptions('fsolve', ... 'Display', 'off', ... 'FunctionTolerance', 1e-12, ... 'StepTolerance', 1e-12, ... 'MaxFunctionEvaluations', 10000); roots = zeros(size(x_guess)); f_values = zeros(size(x_guess)); for i = 1:length(x_guess) [roots(i), f_values(i)] = fsolve(f, x_guess(i), options); end % Проверка сходимости valid = abs(f_values) < 1e-6; roots = roots(valid); f_values = f_values(valid); if isempty(roots) error('Не удалось найти корни.'); end %% 4. Сортировка и удаление дубликатов [roots, idx] = sort(roots); f_values = f_values(idx); tol = 1e-8; unique_roots = roots(1); unique_values = f_values(1); for i = 2:length(roots) if abs(roots(i) - unique_roots(end)) > tol unique_roots(end+1) = roots(i); unique_values(end+1) = f_values(i); end end roots = unique_roots; f_values = unique_values; %% 5. Вывод результатов fprintf('\nНайденные корни:\n'); for i = 1:length(roots) fprintf('x%d = %.10f, f(x) = %e\n', i, roots(i), f_values(i)); end %% 6. Построение финального графика figure('Name', 'Корни уравнения', 'Position', [150, 150, 1200, 600]); plot(x_plot, y_plot, 'b-', 'LineWidth', 2); hold on; plot(roots, f_values, 'r*', 'MarkerSize', 12, 'LineWidth', 2); yline(0, 'k--', 'LineWidth', 1.5); grid on; xlabel('x'); ylabel('f(x)'); title('График функции с найденными корнями'); legend('f(x)', 'Корни', 'y=0', 'Location', 'best'); hold off; %% 7. Сохранение графиков и данных saveas(gcf, 'roots_plot.png'); disp('График сохранен в roots_plot.png'); fileID = fopen('roots_info.txt', 'w'); fprintf(fileID, 'Уравнение: f(x) = 3*sin(4*x) + 0.5*exp(cos(3*x)) - 1.4*x^4 = 0\n'); fprintf(fileID, 'Интервал: [%.2f, %.2f]\n', x_min, x_max); fprintf(fileID, 'Найденные корни:\n'); for i = 1:length(roots) fprintf(fileID, 'x%d = %.12f\n', i, roots(i)); fprintf(fileID, 'f(x%d) = %e\n\n', i, f_values(i)); end fclose(fileID); disp('Информация о корнях сохранена в roots_info.txt'); end