Advertisement
sashachca

4

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