Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/21: Рейтинг темы: голосов - 21, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 13

Найти ВСЕ точки пересечения пары функций на ЗАДАННОМ интервале

20.05.2019, 20:18. Показов 4098. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Попалась вот такая задача:
Даны три функции:
1
y1(x)= cos(х)

y2(x) = sqrt(x)−3

y3(x)= sin(x )
Написать программу на языке MatLab для
определения пары функций, которая будет иметь большее количество точек пересечения
на интервале [a;b]. Интервал задается пользователем с клавиатуры.

Код не привожу,потому что, что я только не попробовала: и через fzero, и через fsolve, и с помощью метода бисекции решить - ничего не работает. Либо ищет всего один корень, либо ищет корень вне интервала. Я весь интернет обыскала, голову ломаю, не знаю, как быть. Нужно найти именно все корни на заданном интервале.
Помогите, пожалуйста, бедному студенту!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.05.2019, 20:18
Ответы с готовыми решениями:

Построить график двух функций в Chart и найти точки пресечения их на заданном интервале
Здравствуйте, столкнулся с затруднением,поставлена задача: построить график 2х функций cos(x) и sin(x) и найти точки пресечения их на...

Использование стандартных функций (найти все корни уравнения на заданном интервале [a;b] с заданной точностью)
Необходимо создать программу, которая находит все корни уравнения на заданном интервале с заданной точностью (задается пользователем)....

Найти точки пересечения функций 2 переменных
Есть программа: program lab_6; Uses Crt, Graph; var GraphDriver, GraphMode, ErrorCode : Integer; Center_x, Center_y, ...

8
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
21.05.2019, 00:23
Лучший ответ Сообщение было отмечено Alexandrasss как решение

Решение

Alexandrasss, не обязательно вычислять корни уравнений, достаточно посчитать, сколько раз меняет знак разность значений функций, взятых попарно.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
U={'@(x)cos(x)','@(x)sqrt(x)-3','@(x)sin(x)'};
a=input('Введите левую границу интервала a=');
b=input('Введите правую границу интервала b=');
v=linspace(a,b,100*(b-a))';
Y=zeros(length(v),3);
for I=1:3
    f=str2func(U{I});
    Y(:,I)=f(v);
end
R=Y;
R(:,1:2)=Y(:,1)-Y(:,2:3);
R(:,3)=Y(:,2)-Y(:,3);
D=diff(sign(R));
S=sum(D~=0)-sum(R==0);
[k,p]=max(S);
m=1+(p==3);
n=m+p-2*(p==3);
disp(['Наибольшее число точек пересечения - между функциями ',...
extractAfter(U{m},4),' и ',extractAfter(U{n},4),': ',num2str(k)]);
plot(v,Y)
1
574 / 363 / 186
Регистрация: 11.01.2019
Сообщений: 1,220
21.05.2019, 11:22
Centurio, можно обойтись без extractAfter ? и еще:
Error using -
Matrix dimensions must agree.

Error in (line 11)
R(:,1:2)=Y(:,1)-Y(:,2:3);


Добавлено через 3 часа 32 минуты
с ошибкой понятно, более новая версия матлаб
0
 Аватар для nuHrBuH
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
21.05.2019, 13:14
Цитата Сообщение от Centurio Посмотреть сообщение
S=sum(D~=0)-sum(R==0);
Зачем мы здесь отнимаем R==0?

Добавлено через 5 минут
Цитата Сообщение от tokrab Посмотреть сообщение
можно обойтись без extractAfter
Можно так:
Matlab M
1
2
U{n}(5:end)     % или U{n}
n=2-(p==1);    % можно проще
0
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 13
22.05.2019, 03:52  [ТС]
Centurio,
Спасибо большое, все работает!
Однако...
Прошу меня извинить, если вам не сложно, не могли бы вы пояснить каждое действие?
И можно ли как-то обойтись без функции max? (преподаватель запрещает ее использовать)
Alexandrasss на форуме Обратить внимание администрации на это сообщение 0
0
574 / 363 / 186
Регистрация: 11.01.2019
Сообщений: 1,220
22.05.2019, 13:31
Цитата Сообщение от Alexandrasss Посмотреть сообщение
можно ли как-то обойтись без функции max?
прошу извинить, что встрял, коряво, но как-то работает
Matlab M
1
if S(1)>S(2)&& S(1)>S(3) k=S(1);p=1; elseif S(2)>S(3) k=S(2);p=2; else k=S(3);p=3; end
1
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
22.05.2019, 13:54
Цитата Сообщение от nuHrBuH Посмотреть сообщение
Зачем мы здесь отнимаем R==0?
Вполне возможно, что попадётся значение разности функций, равное 0. Функция сменит здесь знак один раз, но программа посчитает, что знак сменился 2 раза (между положительным значением и 0 и между 0 и отрицательным значением). Поэтому и нужно учитывать этот момент.

Добавлено через 5 минут
Цитата Сообщение от Alexandrasss Посмотреть сообщение
можно ли как-то обойтись без функции max? (преподаватель запрещает ее использовать)
А почему не запретить использовать все функции Матлаб? Глупо требовать делать задачу в какой-либо среде, запрещая пользоваться всеми возможностями этой среды. Как требовать перевезти груз на машине, запрещая заправлять её бензином. Претензия, понятно, не к вам, а к таким вот преподавателям.

Добавлено через 3 минуты
Цитата Сообщение от Alexandrasss Посмотреть сообщение
не могли бы вы пояснить каждое действие?
Какие действия вам непонятны? Не думаю, например, что команда input вам непонятна.
1
0 / 0 / 0
Регистрация: 20.02.2019
Сообщений: 13
23.05.2019, 13:31  [ТС]
Centurio, не очень понятно, что такое I - матрица из трех столбцов? Каково ее назначение?
И совсем не понятно, по какому принципу выводились "m" и "n"
m=1+(p==3);
n=m+p-2*(p==3);

R мы высчитываем как разницу функций, насколько я понимаю
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
23.05.2019, 16:18
Цитата Сообщение от Alexandrasss Посмотреть сообщение
что такое I
Это параметр цикла for. Используется также в теле цикла в качестве индекса для массива U.
Цитата Сообщение от Alexandrasss Посмотреть сообщение
И совсем не понятно, по какому принципу выводились "m" и "n"
Получается три пары функций: 1-я и 2-я, 1-я и 3-я и 2-я и 3-я (номера функций определяются по их месту в массиве ячеек U). Соответственно, получится три группы точек пересечения. Определяется, в какой группе максимальное количество этих точек (переменная p). В соответствии со значением р вычисляется номера функций в паре с наибольшим количеством точек пересечения. Если это 1-я пара, то номера функций в ней m=1+(1==3)=1 и n=1+1-2*(1==3)=2. Для второй и третьей пары значения m и n можете посчитать сами. Потом согласно этим значениям из массива U извлекаются нужные функции для вывода их на дисплей.
Цитата Сообщение от Alexandrasss Посмотреть сообщение
R мы высчитываем как разницу функций, насколько я понимаю
Да,правильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.05.2019, 16:18
Помогаю со студенческими работами здесь

Найти значения функций на заданном интервале
найти значения функций F(x) и G(x) на интервале с шагом h при F=ctgx+Inx, G={e}^{tg(x-2)} , a=1, b=4,4 , h=0,3. нужно найти массив не...

Построить графики функций и найти точки их пересечения
требуется построить графики функций и найти точки их пересечения y=2+x, y=2/(x-1) Помогите пожалуйста написать, нашел похожую тут но не...

Построить графики функций и найти точки их пересечения
1.построить графики функций и найти точки их пересечения y=sqrt(2x-7), y=x-8

Построить графики функций и найти точки их пересечения
1. Построить графики функций и найти точки их пересечения : a) y=x^4, b) y=2*x-16

Построить графики функций и найти точки их пересечения
построить графики функций и найти точки их пересечения y=1-x, y=2x|x-1|. вот эта программа вроде подходит,нужно лишь поменять...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru