Advertisement
sashachca

Untitled

Oct 24th, 2018
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 2.60 KB | None | 0 0
  1. function solveNonlinearEq_full
  2. a = 1;
  3. b = 2;
  4. x = [-10:1:10];
  5. printf('Uravnenie:\nf(x) = 4^x - 5x - 2, f(x) = 0\n');
  6. %f(%i)*f(%i) = %i < 0 => a = %i, b = %i\n\n-----------\nProverka:\n', a, b, f(a)*f(b), a, b);
  7.  
  8. printf('\nMetod polovinnogo delenia:\n');
  9. x = bisection(a, b);
  10. printf('\nf(%i) = %i\n', x, round(f(x)));
  11.  
  12. printf('\nMetod prostoy iteracii:\n');
  13. x = simpleIteration;
  14. printf('\nf(%i) = %i\n', x, round(f(x)));
  15.  
  16. printf('\nMetod Newtona:\n');
  17. x = newton;
  18. printf('\nf(%i) = %i\n', x, round(f(x)));
  19.  
  20. printf('\nMetod sekuschih:\n');
  21. x = secant(a, b);
  22. printf('\nf(%i) = %i\n', x, round(f(x)));
  23.  
  24. printf('\n-----------\nOtvet:\n\nx = %i\n', x);
  25.  
  26. endfunction
  27.  
  28.  
  29. function x = bisection(a, b)
  30. %метод половинного деления
  31.  
  32. c = 0;
  33. q = 0;
  34. e = 0.0001;
  35. error = 1;
  36.  
  37.   while error > e
  38.     a;
  39.     b;
  40.     c = (a+b)/2
  41.     if sign(f(c)) == 0
  42.       break
  43.     elseif sign(f(c)) == sign(f(a))
  44.       a = c;
  45.     else
  46.       b = c;
  47.     endif
  48.    
  49.     q = q+1;
  50.     error = (b - a)/2; % выбираем самое большое число из всех абсолютных отклонений
  51.   endwhile
  52.  
  53.   x = c;
  54.   printf('Iteracii: %i', q);
  55.  
  56. endfunction
  57.  
  58.  
  59. function x = simpleIteration
  60. %метод простой итерации
  61. a = 1;
  62. b = 2;
  63. c = g(1, -1); % первый парметр на вход равен единице, так как тут мы считаем, чему равна константа в условии
  64. q = 0;
  65. error = 1;
  66. e = 0.000000001;
  67.  
  68. x = c;
  69. if (g(x, 1) < 1)
  70.     x = g(x, 0);
  71. endif
  72.  
  73. while (error > e)
  74.   x_old = x;
  75.  
  76.   x = g(x, 0)
  77.  
  78.   q += 1;
  79.   error = abs(x - x_old);
  80. endwhile
  81.  
  82. printf('Iteracii: %i', q);
  83.  
  84. endfunction
  85.  
  86.  
  87. function x = newton
  88. %метод Ньютона
  89. error = 1;
  90. e = 0.01;
  91. q = 0;
  92. x = 1;
  93. while (error > e)
  94.   x_old = x;
  95.  
  96.   x = x - f(x)/(g(x, 1))
  97.   f(x)
  98.  
  99.   q += 1;
  100.   error = abs(x - x_old);
  101. endwhile
  102.  
  103. printf('Iteracii: %i', q);
  104.  
  105. endfunction
  106.  
  107.  
  108. function x = secant
  109. %метод секущих
  110. error = 1;
  111. e = 0.00001;
  112. q = 0;
  113. x = 2.1769;
  114. x_old = 2.7844;
  115. while (error > e)
  116.   x_old_old = x_old;
  117.   x_old = x;
  118.  
  119.   x = x - f(x)/(f(x)-f(x_old_old))*(x-x_old_old)
  120.  
  121.   q += 1;
  122.   error = abs(x - x_old);
  123. endwhile
  124. printf('Iteracii: %i', q);
  125. endfunction
  126.  
  127.  
  128. function y = f(x)
  129.  
  130. y = 4^x - 5*x -2;
  131.  
  132. endfunction
  133.  
  134.  
  135. function x = g(x, n)
  136. %преобразованная часть функции f(x) и производная этой части для метода простой итерации
  137.  
  138.   if n == 0
  139.     x = 4^x/5 - 2/5;
  140.   elseif n == 1
  141.     x = 4^x*log(4) - 5;
  142.   endif
  143.  
  144. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement