Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function solveNonlinearEq_full
- a = 1;
- b = 2;
- x = [-10:1:10];
- printf('Uravnenie:\nf(x) = 4^x - 5x - 2, f(x) = 0\n');
- %f(%i)*f(%i) = %i < 0 => a = %i, b = %i\n\n-----------\nProverka:\n', a, b, f(a)*f(b), a, b);
- printf('\nMetod polovinnogo delenia:\n');
- x = bisection(a, b);
- printf('\nf(%i) = %i\n', x, round(f(x)));
- printf('\nMetod prostoy iteracii:\n');
- x = simpleIteration;
- printf('\nf(%i) = %i\n', x, round(f(x)));
- printf('\nMetod Newtona:\n');
- x = newton;
- printf('\nf(%i) = %i\n', x, round(f(x)));
- printf('\nMetod sekuschih:\n');
- x = secant(a, b);
- printf('\nf(%i) = %i\n', x, round(f(x)));
- printf('\n-----------\nOtvet:\n\nx = %i\n', x);
- endfunction
- function x = bisection(a, b)
- %метод половинного деления
- c = 0;
- q = 0;
- e = 0.0001;
- error = 1;
- while error > e
- a;
- b;
- c = (a+b)/2
- if sign(f(c)) == 0
- break
- elseif sign(f(c)) == sign(f(a))
- a = c;
- else
- b = c;
- endif
- q = q+1;
- error = (b - a)/2; % выбираем самое большое число из всех абсолютных отклонений
- endwhile
- x = c;
- printf('Iteracii: %i', q);
- endfunction
- function x = simpleIteration
- %метод простой итерации
- a = 1;
- b = 2;
- c = g(1, -1); % первый парметр на вход равен единице, так как тут мы считаем, чему равна константа в условии
- q = 0;
- error = 1;
- e = 0.000000001;
- x = c;
- if (g(x, 1) < 1)
- x = g(x, 0);
- endif
- while (error > e)
- x_old = x;
- x = g(x, 0)
- q += 1;
- error = abs(x - x_old);
- endwhile
- printf('Iteracii: %i', q);
- endfunction
- function x = newton
- %метод Ньютона
- error = 1;
- e = 0.01;
- q = 0;
- x = 1;
- while (error > e)
- x_old = x;
- x = x - f(x)/(g(x, 1))
- f(x)
- q += 1;
- error = abs(x - x_old);
- endwhile
- printf('Iteracii: %i', q);
- endfunction
- function x = secant
- %метод секущих
- error = 1;
- e = 0.00001;
- q = 0;
- x = 2.1769;
- x_old = 2.7844;
- while (error > e)
- x_old_old = x_old;
- x_old = x;
- x = x - f(x)/(f(x)-f(x_old_old))*(x-x_old_old)
- q += 1;
- error = abs(x - x_old);
- endwhile
- printf('Iteracii: %i', q);
- endfunction
- function y = f(x)
- y = 4^x - 5*x -2;
- endfunction
- function x = g(x, n)
- %преобразованная часть функции f(x) и производная этой части для метода простой итерации
- if n == 0
- x = 4^x/5 - 2/5;
- elseif n == 1
- x = 4^x*log(4) - 5;
- endif
- endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement