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

Как в for задать 2 условия одновременно?!

10.12.2017, 07:48. Показов 1877. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Суть проги: даны 2 отрезка под неким углом (разным), они пересекаются. Каждую прямую разбить на (пусть) 10 участков и первый участок соединить с последним участком другой. Полученное множество отрезков и есть то, что мне нужно - так сказать некий контур или профиль.


Вот ошибка (Но суть не вней): In an assignment A(I) = B, the number of elements in B and I must be the same.

Error in linspace (line 34)
y(end) = d2;

Error in proba (line 29)
x_s=linspace(x_1, x_2, x_kyskov);


Вот кусок вырезанной и нормально оформленной проги:
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
clc
clear
close all
K=0.53;
b_kas =-0.0118;
K_s =0.1228;
b_s =0.0408;
x0_s =0.1287;
x0_kas = 0.0606;
L_za=0.231253;
t_1=0;
t_2=0;
x_kyskov=10;
for hag_s1=linspace(0, x0_s-x0_kas, x_kyskov), hag_s2=linspace(0, L_za-x0_s, x_kyskov);
x_1=x0_kas+hag_s1;
y_1=K*x_1+b_kas;
 
x_2=x0_s+hag_s2;
y_2=K_s*x_2+b_s;
 
% Соединим точки на графике
% Уравнение прямой через 2 точки
%(y1-y2)x+(x2-x1)y+(x1y2-x2y1)=0
% Ax+By+C=0
A_s=y_1-y_2;
B_s=x_2-x_1;
C_s=x_1.*y_2-x_2.*y_1;
x_s=linspace(x_1, x_2, x_kyskov);
 
% y=-Ax/B-C/B
y_s=-A_s.*x_s./B_s-C_s./B_s;
plot(x_s, y_s, '-b')
end
И так почему hag_s2 ищется массивом, а не участвует в цикле - если это исправить всё заработает как надо.
Если я убираю hag_s2 и заменяю его в x_2 на hag_s2 - то всё работает, но тк длины отрезков разные, то получается кусок 2-го отрезка не участвует
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2017, 07:48
Ответы с готовыми решениями:

Как задать условия?
<script type="text/javascript"> $(document).ready(function(){ $(".up").click(function(){ ...

Как задать оператору if 3 условия
Как дать оператору if 3 условия (if r1=1 and r3=2 and r2<>3 then begin r4=3; end; не срабатывает) причем r1 r3 ТОЛЬКО integer.

Как задать в формуле три условия?
Всем доброго дня! Задача стоит такая. Есть значение в ячейке, нужно проверить следующие условия, и если значение попадает хоть под...

15
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 10:14
Лучший ответ Сообщение было отмечено bogdaniil как решение

Решение

Цитата Сообщение от bogdaniil Посмотреть сообщение
почему hag_s2 ищется массивом, а не участвует в цикле
Потому что для неё не прописан цикл. Для каждой переменной следует писать свой цикл for.

Добавлено через 23 минуты
Но лучше обойтись без цикла:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear,clc
p1=[0.53 -0.0118]; % коэффициенты уравнения первой линии
p2=[0.1228 0.0408]; % коэффициенты уравнения второй линии
x0_s =0.1287;
x0_kas = 0.0606;
L_za=0.231253;
n=10; % количество отрезков
x1=linspace(x0_kas,x0_s,n+1);
x2=linspace(x0_s,L_za,n+1);
y1=polyval(p1,x1);
y2=polyval(p2,x2);
A=y1-y2;
B=x2-x1;
C=x1.*y2-x2.*y1;
D=[x1;repmat(B/n,n,1)];
x_s=cumsum(D);
y_s=-(A.*x_s+C)./B;
plot(x_s',y_s','-b')
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 20:11  [ТС]
И того - не получается.
Вот вывел все данные которые получаются - там проблема с y_s.
По x все значения сходятся (x_s)!!! А по y_s - нет!!!?

x1 = 0.0606 0.0946 0.1287
x2 = 0.1287 0.1800 0.2313
y1 = 0.0204 0.0385 0.0566
y2 = 0.0566 0.0629 0.0692
D =
0.0606 0.0946 0.1287
0.0341 0.0427 0.0513
0.0341 0.0427 0.0513
x_s =
0.0606 0.0946 0.1287
0.0946 0.1373 0.1800
0.1287 0.1800 0.2313


y_s = 0.0781 0.1174 0.1575

Вот код мб в нём что-то не так, пробовал с n=2):

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
p1=[K b_kas]; % коэффициенты уравнения первой линии
p2=[K_s b_s]; % коэффициенты уравнения второй линии
n=2;
 
x1=linspace(x0_kas,x0_s,n+1)
x2=linspace(x0_s,L_za,n+1)
y1=polyval(p1,x1)
y2=polyval(p2,x2)
A=y1-y2;
B=x2-x1;
C=x1.*y2-x2.*y1;
D=[x1;repmat(B/n,n,1)]
x_s=cumsum(D)
y_s=-(A*x_s+C)./B
plot(x_s',y_s','-b')
И ещё вопрос - зачем апострофы в plot(x_s',y_s','-b')?
Миниатюры
Как в for задать 2 условия одновременно?!  
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 20:18  [ТС]
Извините ответил себе... Вопрос выше

Добавлено через 5 минут
Centurio,
Извините, но я не знаю - как правильно отправить сообщение, поэтому извините ответил опять возможно себе... Вопрос выше
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 20:38
Цитата Сообщение от bogdaniil Посмотреть сообщение
По x все значения сходятся (x_s)!!! А по y_s - нет!!!?
Сходятся и не сходятся с чем?
Цитата Сообщение от bogdaniil Посмотреть сообщение
зачем апострофы в plot(x_s',y_s','-b')?
Транспонирует матрицы, чтобы правильно строился график.
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 20:41  [ТС]
Сходятся и не сходятся с картинкой, скрин которой я скинул - по оси у координаты не сходятся с прямыми. А по оси х - сходятся
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 20:43
bogdaniil, эта картинка у вас после запуска вашего кода получилась? Или такая должна быть?
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 20:46  [ТС]
Мне надо построить такие отрезки к сиреневой и коричневой прямым соответственно. По оси у значения на рисунке лежат на одной прямой, параллельной оси х (те при фиксированном значении у), а не на прямых

Добавлено через 1 минуту
Цитата Сообщение от Centurio Посмотреть сообщение
bogdaniil, эта картинка у вас после запуска вашего кода получилась? Или такая должна быть?
после запуска кода кода получилась

Добавлено через 1 минуту
Цитата Сообщение от Centurio Посмотреть сообщение
bogdaniil, эта картинка у вас после запуска вашего кода получилась? Или такая должна быть?
Я сейчас примерно попробую изобразить что должно быть из этого
Цитата Сообщение от bogdaniil Посмотреть сообщение
Если я убираю hag_s2 и заменяю его в x_2 на hag_s2 - то всё работает, но тк длины отрезков разные, то получается кусок 2-го отрезка не участвует
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 20:53
Вот что получилось у меня:
Миниатюры
Как в for задать 2 условия одновременно?!  
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 20:59  [ТС]
Вот моя предыдущая наработка - но длина 2-го отрезка не совпадает с действительной.
Цитата Сообщение от Centurio Посмотреть сообщение
Вот что получилось у меня:
Это ваш код или мой(переделанный ваш)?
Миниатюры
Как в for задать 2 условия одновременно?!  
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 21:01
Цитата Сообщение от bogdaniil Посмотреть сообщение
Это ваш код или мой(переделанный ваш)?
Это мой код, только вместо n=10 я поставил n=2.
Крайняя картинка - это у вас в конце концов получилось?
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 21:03  [ТС]
Нет - это с for
Цитата Сообщение от bogdaniil Посмотреть сообщение
Вот моя предыдущая наработка - но длина 2-го отрезка не совпадает с действительной.
Но в качестве примера - то, что должно получится

Вот, что у меня ваш код выдаёт:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear,clc
p1=[0.53 -0.0118]; % коэффициенты уравнения первой линии
p2=[0.1228 0.0408]; % коэффициенты уравнения второй линии
x0_s =0.1287;
x0_kas = 0.0606;
L_za=0.231253;
n=10; % количество отрезков
x1=linspace(x0_kas,x0_s,n+1);
x2=linspace(x0_s,L_za,n+1);
y1=polyval(p1,x1);
y2=polyval(p2,x2);
A=y1-y2;
B=x2-x1;
C=x1.*y2-x2.*y1;
D=[x1;repmat(B/n,n,1)];
x_s=cumsum(D);
y_s=-(A*x_s+C)./B;
plot(x_s',y_s','-b')
Миниатюры
Как в for задать 2 условия одновременно?!  
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 21:12
Лучший ответ Сообщение было отмечено bogdaniil как решение

Решение

Возможно, у вас более старая версия Матлаба.
Попробуйте вставить между 15 и 16 строками моего кода
Matlab M
1
2
3
4
k=size(D,1);
A=repmat(A,k,1);
B=repmat(B,k,1);
C=repmat(C,k,1);
1
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 21:14  [ТС]
Цитата Сообщение от Centurio Посмотреть сообщение
Вот что получилось у меня:
Миниатюры
Как в for задать 2 условия одновременно?!
Забыл добавить - если ваш код ctrl+с ctrl+v - то матлаб выдаёт ошибку:
Error using .*
Matrix dimensions must agree.

Error in proba (line 81)
y_s=-(A.*x_s+C)./B;

Соответсвенно я изменил на y_s=-(A*x_s+C)./B; и работает, но видимо некорректно?
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
10.12.2017, 21:16
Цитата Сообщение от bogdaniil Посмотреть сообщение
Соответсвенно я изменил на y_s=-(A*x_s+C)./B; и работает, но видимо некорректно?
Ещё точку надо после А поставить.
0
0 / 0 / 0
Регистрация: 18.05.2016
Сообщений: 21
10.12.2017, 21:17  [ТС]
ДА, ДА, ДА. Очень сильно благодарю, всё заработало.

Это помогло
Цитата Сообщение от Centurio Посмотреть сообщение
k=size(D,1); A=repmat(A,k,1); B=repmat(B,k,1); C=repmat(C,k,1);
В итоге код:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear,clc
p1=[0.53 -0.0118]; % коэффициенты уравнения первой линии
p2=[0.1228 0.0408]; % коэффициенты уравнения второй линии
x0_s =0.1287;
x0_kas = 0.0606;
L_za=0.231253;
n=10; % количество отрезков
x1=linspace(x0_kas,x0_s,n+1);
x2=linspace(x0_s,L_za,n+1);
y1=polyval(p1,x1);
y2=polyval(p2,x2);
A=y1-y2;
B=x2-x1;
C=x1.*y2-x2.*y1;
D=[x1;repmat(B/n,n,1)];
k=size(D,1);
A=repmat(A,k,1);
B=repmat(B,k,1);
C=repmat(C,k,1);
x_s=cumsum(D);
y_s=-(A.*x_s+C)./B;
plot(x_s',y_s','-b')
Миниатюры
Как в for задать 2 условия одновременно?!  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2017, 21:17
Помогаю со студенческими работами здесь

Как задать разные условия ввода?
В форме ввода используется радиокнопка и обычный ввод в строку. И когда я задаю параметры input, то поле радиокнопки тоже увеличивается. ...

Цикл: как задать 2 условия для for
как задать 2 условия для for???

Как задать цвет всем Label одновременно
Надо задать цвет всем Label одновременно? Например если Label много, то писать код для каждой не вариант. Label1.BackColor =...

Многомерный массив: как задать 3 матрицы одновременно?
Как задать три действительные квадратные матрицы размерностью n х n, содержащие отрицательные элементы в c++?

Как элементу задать и цвет и градиент одновременно?
Типа такого, чтобы градиент был над цветомbackground: red, linear-gradient(to top, black, white);


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru