0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 13
1

Не ясно, в чем ошибка. Застрял на активации

23.05.2019, 13:28. Показов 681. Ответов 3

Сначала код был с таким условием: step=0.01; x=x+step и все работало.
Потом я заменила таким образом: x=x+eps
но что-то пошло не так... Матлаб завис на "паузе" при компиляции.
Подскажите, пожалуйста, в чем ошибка. Спасибо!
Вот конечная версия кода
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
clc; % очистка экрана
% Пользователь задает массив значений х
a=input('Введите левую границу интервала a=');
b=input('Введите правую границу интервала b=');
 
% Ограничим корневой отрезок, не позволяя пользователю вводить
% отрицательные числа (т.к. среди функций есть корень)
 
if (a<0)| (b<0)
     disp ('Ошибка!');
 
else
    
 %Обнуляем переменные N1, N2, N3 - количество точек пересечения для
 % трех пар функций соответственно
 
N1=0;
N2=0;
N3=0;
 
% Присваиваем переменной х начальное значение "а" и задаем шаг табуляции=0,01
 
x=a;
 
% Цикл "while": пока x меньше или равен b, для функций y1, которая
% представляет из себя разность исходных двух функций: cos(x) и sin(x), и
% y2 = y1 c аргументом на 0,01 больше, выполняется цикл "if": если
% произведение y1*y2 меньше нуля, инкрементируем переменную N1. Так, по
% всему интервалу [a;b] ищем сколько раз функция y1 меняет знак, т.е.
% пересекает ось абсцисс (по теореме теореме о промежуточных значениях и определяем количество пересечений функций cos(x)
% и sin(x). Выводим результат на экран.
 
while x <= b
    y1=cos(x)-sin(x);
    y2=cos(x+eps)-sin(x+eps);
  
    if y1*y2<0 
        N1=N1+1;
    end
    x=x+eps;
end
 
disp ('Количество пересечений функций cos(x) и sin(x): ');
disp (N1); 
 
% Аналогично для двух других пар функций:
 
x=a;
     
while x<=b
   
    y3=cos(x)- real(sqrt(x))+ 3;
    y4=cos(x+eps)-sqrt(x+eps)+ 3;
    
    if y3*y4<0 
        N2=N2+1;
    end
    x=x+eps;
end
disp ('Количество пересечений функций cos(x) и sqrt(x)-3 : ');
disp (N2);
 
x=a;
 
while x<= b
    
    y5=sin(x)-sqrt(x)+ 3;
    y6=sin(x+eps)-sqrt(x+eps)+ 3;
   
  if y5*y6<0 
        N3=N3+1;
    end
    x=x+eps;
end
 
disp ('Количество пересечений функций sin(x) и sqrt(x)-3 : ');
disp (N3); 
 
end
 
% Повторяем условие для выполнения задачи, чтобы не выводились графики при
% отрицательных a и b
  
if (a<0)| (b<0)
     
    disp ('Нельзя вводить отрицательные значения!');
 
else  
 
% Вводим данные функций
 
f1=@(x) cos(x);
f2=@(x) sqrt(x)-3;
f3=@(x) sin(x);
 
% Создаем графики в одном графическом окне
 
fplot(f1,[a,b],'r')
hold on
fplot(f2,[a,b],'b')
hold on
fplot(f3,[a,b],'g')
grid on
 
% Определим пару функций, которая будет иметь большее количество точек пересечения на интервале [a;b]:
if N1>N2&&N1>N3
    disp ('Больше точек пересечения на интервале [a;b] имеет пара функций cos(x) и sin(x)');
    
elseif N2>N1&&N2>N3
        disp ('Больше точек пересечения на интервале [a;b] имеет пара функций cos(x) и sqrt(x)-3');
else
    disp ('Больше точек пересечения на интервале [a;b] имеет пара функций sin(x) и sqrt(x)-3');
end
end
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2019, 13:28
Ответы с готовыми решениями:

Застрял, не знаю в чем загвоздка.
Задание: Реализовать программу игры в кости. Два игрока бросают по очереди костяшки, выигрывает...

Решение примера, не ясно где ошибка
Здравствуйте. Помогите,решаю пример. X=6*(A-2B+C/4)+10 Вот код: org 100h MOV AX, A MOV BX, B ...

Ошибка активации
сегодня активировал винду по телефону, всё нормально, всё шикарно думаю, но не тут то было, сделал...

Ошибка активации виндовс7
Здравствуйте! Купил ключ на виндовс 7 проф. На 3 пк На одном пошла на остальных ошибка...

3
996 / 719 / 340
Регистрация: 21.10.2012
Сообщений: 2,139
23.05.2019, 13:51 2
Alexandrasss, не запускал, но, возможно, программа работает, просто долго считает, так как в цикле while очеь маленький шаг x=x+eps;

Добавлено через 1 минуту
a = 1, b = 2 => будет 4.5036e+15 операций на один while
0
Эксперт по математике/физике
3364 / 1889 / 569
Регистрация: 09.04.2015
Сообщений: 5,297
23.05.2019, 15:41 3
А если одна из границ будет по модулю больше 2 то вообще никогда не будет получен результат.
Кликните здесь для просмотра всего текста
>> a=1.99999;
>> c=a+eps;
>> d=(c>a)

d =

1

>> a=2;
>> c=a+eps;
>> d=(c>a)

d =

0

>> c=a-eps;
>> d=(c<a)

d =

1

Правда 4.5036e+15 циклов тоже скорей всего не в этом десятилетии завершит расчет
0
Модератор
1298 / 1216 / 364
Регистрация: 13.09.2015
Сообщений: 4,233
23.05.2019, 21:59 4
Alexandrasss, зачем дублируете темы? Какую тему удалить? Эту или Найти ВСЕ точки пересечения пары функций на ЗАДАННОМ интервале?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2019, 21:59

Ошибка активации Windows
Недавно выскочила такая проблема: Активировать через интернет не получается. Ввожу этот ключ ...

Ошибка активации второго дисплея
Здравствуйте! У меня есть камера (вид от первого лица), а также другая камера для вида сбоку. Опция...

Ошибка при активации ADOQuery
при нажатии activ&gt;true вылазиет табличка (ADOQuery1:Field'Температура'not found.) уже все...

Ошибка при активации tomcat в Linux
Дано: 1 j2SE (build Blackdown-1.3.1-02b-FCS) 2 tomcat 4.0.4 release В точности следую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.