Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function full_solveNonlinearSys
- % Решение систем нелинейных уравнений
- printf('Systema Uravneniy:\n x1 - cos(x2) = 3\n x2 - sin(x1) = 3\n\n-----------\n');
- printf('\nMetod prostyh iteraciy:\n');
- X = simpleIterations;
- Y = round(F(X));
- printf('\nF(%i, %i) = (%i, %i)\n-----------\n', X(1), X(2), Y(1), Y(2));
- %
- printf('\nMetod Zeidelya:\n');
- X = seidel;
- Y = round(F(X));
- printf('\nF(%i, %i) = (%i, %i)\n-----------\n', X(1), X(2), Y(1), Y(2));
- printf('\nMetod Newtona:\n');
- X = newton;
- Y = round(F(X));
- printf('\nF(%i, %i) = (%i, %i)\n-----------\n', X(1), X(2), Y(1), Y(2));
- fprintf('\n\nOtvet:\n');
- for i = 1:length(X)
- fprintf('x%i = %i\n', i, X(i));
- end
- endfunction
- function X = simpleIterations
- % метод простых итераций
- X = X_old = [];
- error = 1;
- e = 0.0001;
- q = 0;
- X = zeros(2, 1);
- while error > e
- X_old = X;
- X = G(X, ' ');
- q = q+1;
- error = max(abs(X - X_old));
- endwhile
- X
- printf('Iteracii: %i\n', q);
- endfunction
- function X = seidel
- % метод Зейделя
- X = X_old = [];
- error = 1;
- e = 0.0001;
- q = 0;
- X = zeros(2, 1);
- while error > e
- X_old = X;
- X = G(X, 'seidel');
- q = q+1;
- error = max(abs(X - X_old));
- endwhile
- X
- printf('Iteracii: %i\n', q);
- endfunction
- function X = newton
- %метод Ньютона
- error = 1;
- e = 0.0001;
- q = 0;
- X = [0; 0];
- while (error > e)
- X_old = X;
- X = X.-inv(W(X))*F(X);
- q += 1;
- error = abs(X - X_old);
- endwhile
- X
- printf('Iteracii: %i\n', q);
- endfunction
- function W = W(X)
- W = [];
- W(1, 1) = 1;
- W(1, 2) = sin(X(2));
- W(2, 1) = -cos(X(1));
- W(2, 2) = 1;
- endfunction
- function F = F(X)
- f1 = X(1) - cos(X(2)) - 3;
- f2 = X(2) - sin(X(1)) - 3;
- F = [f1; f2];
- endfunction
- function G = G(X, method)
- %преобразованные части системы функций F(X) для метода простых итераций и Зейделя
- g1 = cos(X(2)) + 3;
- if method == 'seidel'
- t = g1; %сразу используем найденный x1, это уменьшает количество итераций
- else t = X(1); %используем старый x1
- endif
- g2 = sin(t) + 3;
- G = [g1; g2];
- endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement