Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95

Уравнение с заранее заданными константами

01.04.2018, 17:56. Показов 1682. Ответов 14

Студворк — интернет-сервис помощи студентам
Добрый вечер, ув. форумчане. Есть уравнение приблизительно вида
https://www.cyberforum.ru/cgi-bin/latex.cgi?delta=gamma*\frac{eps*sin(theta)+\sqrt{eps}}{eps*sin(phi)-\sqrt{eps}}
(почему приблизительно, потому что на деле гораздо длиннее). Все константы известны, кроме eps. Как решить ур-е, относительно eps? Пробовал solve('ур-e','eps'), но вместо численных значений gamma, theta и т.д. просто пишутся их название и уравнение не решается.

Вот что появляется
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
eps =
 
        [|
        [| atan(- 1/2 RootOf(8 %23 + 4 %22 - 4 %21 + 4 %8 - 4 %20 - 4 %19
        [|
 
         - 8 %18 - 4 %17 + 4 %7 - 8 %16 + 4 %15 + 4 %14 - 4 %13
 
              2          2          2            2              2
         + eps  gamma_g_2  + delta_g  + gamma_g_1  - 7 gamma_g_2  - 2 %12
 
         - 2 %11 + 2 %10 - 2 delta_g gamma_g_1 + 2 delta_g gamma_g_2
И еще много подобных строк. Как я понял, матлаб не хочет определять константы (gamma, theta, и др.), как числа, и поэтому решает уравнение, относительно eps, не подставляя числовые значения (я так думаю). Поэтому вопрос: что нужно сделать, чтобы в ответе появилось одно численное значение eps = ...? Заранее благодарен за помощь!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2018, 17:56
Ответы с готовыми решениями:

Дифференциальное уравнение с буквенными константами
Здравствуйте, комрады. Собственно, суть вопроса в теме. Имеется дифференциальное уравнение первого порядка с константами альфа и бета....

Объявление константы опеределнного типа с заранее заданными параметрами
Здравствуйте. Есть класс, определяющий параметры отображения ячейки в StringGrid TCellStyle = Class(TPersistent) private ...

Написать уравнение прямой, проходящей через начало координат и составляющей равные углы с заданными плоскостями
Написать уравнение прямой, проходящей через начало координат и составляющей равные углы с плоскостями 4y=3x, y =0, z =0 .

14
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 18:17
Цитата Сообщение от Zoops Посмотреть сообщение
Вот что появляется
Не помешало бы увидеть, результатом чего является то, что появляется.
0
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 19:00  [ТС]
ida2, вот весь код программы. Сначала я задаю все значения и нахожу E при определенном значение eps. Потом, зная это значение, хочу решить обратную задачу при уже известном E, но неизвестном 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
clc;                %Очищення командного вікна
clear;              %Очищення вікна змінних
%% Початкові дані для розрахунку
 
H = 20;              
h = 1;               
% delta = 0.01;     
x0 = 30;             
eps = 3;             
lambda = 0.02;       
% s = 8;             
d = 50;              
% N = 1;             
M = 2;               
% Dn = x0:s:s*N+x0;  
% Dm = 0:d:d*M;
% F_theta1 = 1;
% F_theta = 1;
A = 1;
k = 2*pi/lambda;     
 
%% Рохрахункова частина
 
r1_1 = sqrt(x0^2+H^2);           
r2_2 = sqrt((d-x0)^2+H^2);       
r_1 = sqrt(x0^2+(H+h)^2);        
r_2 = sqrt((d-x0)^2+(H+h)^2);    
 
theta_1 = pi/2-acos(((H+h)/(r_1)));     
theta_2 = pi/2-acos(((H+h)/(r_2)));     
 
%% Горизонтальна поляризація
R_g_1 = (sin(theta_1)-sqrt(eps-(cos(theta_1)).^2))./(sin(theta_1)+sqrt(eps-(cos(theta_1)).^2));
R_g_2 = (sin(theta_2)-sqrt(eps-(cos(theta_2)).^2))./(sin(theta_2)+sqrt(eps-(cos(theta_2)).^2));
 
alpha_1 = A/r1_1*exp(-1i*k*r1_1);
alpha_2 = A/r2_2*exp(-1i*k*r2_2);
beta_1 = A/r_1*exp(-1i*k*r_1);
beta_2 = A/r_2*exp(-1i*k*r_2);
 
E_g_1 = A/r1_1*exp(-1i*k*r1_1)+A/r_1*R_g_1*exp(-1i*k*r_1);
E_g_2 = A/r2_2*exp(-1i*k*r2_2)+A/r_2*R_g_2*exp(-1i*k*r_2);
% E_g_1 = abs(E_g_1);
% E_g_2 = abs(E_g_2);
 
%% Вертикальна поляризація
R_v_1 = (eps.*sin(theta_1)-sqrt(eps-(cos(theta_1)).^2))./(eps.*sin(theta_1)+sqrt(eps-(cos(theta_1)).^2));
R_v_2 = (eps.*sin(theta_2)-sqrt(eps-(cos(theta_2)).^2))./(eps.*sin(theta_2)+sqrt(eps-(cos(theta_2)).^2));
 
E_v_1 = A/r1_1*exp(-1i*k*r1_1)+A/r_1*R_v_1*exp(-1i*k*r_1);
E_v_2 = A/r2_2*exp(-1i*k*r2_2)+A/r_2*R_v_2*exp(-1i*k*r_2);
% E_v_1 = abs(E_v_1);
% E_v_2 = abs(E_v_2);
gamma_g_1 = beta_1*E_g_2;
gamma_v_1 = beta_1*E_v_2;
gamma_g_2 = beta_2*E_g_1;
gamma_v_2 = beta_2*E_v_1;
delta_g = alpha_2*E_g_1-alpha_1*E_g_2;
clearvars ('eps');
save('exampl.mat');
 
%%
syms eps;
 
eps=solve('0 = gamma_g_1*(sin(theta_1)-sqrt(eps-cos(theta_1)^2))/(sin(theta_1)+sqrt(eps-cos(theta_1)^2))-gamma_g_2*(sin(theta_2)-sqrt(eps-cos(theta_2)^2))/(sin(theta_2)+sqrt(eps-cos(theta_2)^2))-delta_g','eps');
Добавлено через 6 минут
ida2, вот вся функция
https://www.cyberforum.ru/cgi-bin/latex.cgi?delta = gamma_1*\frac{sin(theta_1)-\sqrt{eps-{cos(theta_1)}^{2}}}{sin(theta_1)+\sqrt{eps-{cos(theta_1)}^{2}}} - gamma_2*\frac{eps*sin(theta_2)-\sqrt{eps-{cos(theta_2)}^{2}}}{eps*sin(theta_2)+\sqrt{eps-{cos(theta_2)}^{2}}}

Добавлено через 18 минут
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 22:39
Попробуйте вместо последней (65-й) строки написать следующее:
Matlab M
1
2
3
4
eqn = gamma_g_1*(sin(theta_1)-sqrt(eps-cos(theta_1)^2))/(sin(theta_1)+sqrt(eps-cos(theta_1)^2))-gamma_g_2*(sin(theta_2)-sqrt(eps-cos(theta_2)^2))/(sin(theta_2)+sqrt(eps-cos(theta_2)^2))-delta_g == 0;
S=solve(eqn, eps);
NS = vpa(S);
DS = double(NS)
Выдает три комплексных корня.
1
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 22:46  [ТС]
ida2, Вот что выдало
Matlab M
1
2
3
4
5
6
Error using sym/double (line 43)
Error using maplemex
Error, (in MTM:-double) cannot handle unevaluated name `eps` in evalhf
 
Error in Patent (line 73)
DS=double(NS);
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 22:53
Лучший ответ Сообщение было отмечено Zoops как решение

Решение

Zoops, Вот весь код:
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
clc;                %Очищення командного вікна
clear;              %Очищення вікна змінних
%% Початкові дані для розрахунку
 
H = 20;              
h = 1;               
% delta = 0.01;     
x0 = 30;             
eps = 3;             
lambda = 0.02;       
% s = 8;             
d = 50;              
% N = 1;             
M = 2;               
% Dn = x0:s:s*N+x0;  
% Dm = 0:d:d*M;
% F_theta1 = 1;
% F_theta = 1;
A = 1;
k = 2*pi/lambda;     
 
%% Рохрахункова частина
 
r1_1 = sqrt(x0^2+H^2);           
r2_2 = sqrt((d-x0)^2+H^2);       
r_1 = sqrt(x0^2+(H+h)^2);        
r_2 = sqrt((d-x0)^2+(H+h)^2);    
 
theta_1 = pi/2-acos(((H+h)/(r_1)));     
theta_2 = pi/2-acos(((H+h)/(r_2)));     
 
%% Горизонтальна поляризація
R_g_1 = (sin(theta_1)-sqrt(eps-(cos(theta_1)).^2))./(sin(theta_1)+sqrt(eps-(cos(theta_1)).^2));
R_g_2 = (sin(theta_2)-sqrt(eps-(cos(theta_2)).^2))./(sin(theta_2)+sqrt(eps-(cos(theta_2)).^2));
 
alpha_1 = A/r1_1*exp(-1i*k*r1_1);
alpha_2 = A/r2_2*exp(-1i*k*r2_2);
beta_1 = A/r_1*exp(-1i*k*r_1);
beta_2 = A/r_2*exp(-1i*k*r_2);
 
E_g_1 = A/r1_1*exp(-1i*k*r1_1)+A/r_1*R_g_1*exp(-1i*k*r_1);
E_g_2 = A/r2_2*exp(-1i*k*r2_2)+A/r_2*R_g_2*exp(-1i*k*r_2);
% E_g_1 = abs(E_g_1);
% E_g_2 = abs(E_g_2);
 
%% Вертикальна поляризація
R_v_1 = (eps.*sin(theta_1)-sqrt(eps-(cos(theta_1)).^2))./(eps.*sin(theta_1)+sqrt(eps-(cos(theta_1)).^2));
R_v_2 = (eps.*sin(theta_2)-sqrt(eps-(cos(theta_2)).^2))./(eps.*sin(theta_2)+sqrt(eps-(cos(theta_2)).^2));
 
E_v_1 = A/r1_1*exp(-1i*k*r1_1)+A/r_1*R_v_1*exp(-1i*k*r_1);
E_v_2 = A/r2_2*exp(-1i*k*r2_2)+A/r_2*R_v_2*exp(-1i*k*r_2);
% E_v_1 = abs(E_v_1);
% E_v_2 = abs(E_v_2);
gamma_g_1 = beta_1*E_g_2;
gamma_v_1 = beta_1*E_v_2;
gamma_g_2 = beta_2*E_g_1;
gamma_v_2 = beta_2*E_v_1;
delta_g = alpha_2*E_g_1-alpha_1*E_g_2;
clearvars ('eps');
save('exampl.mat');
 
%%
syms eps;
eqn = gamma_g_1*(sin(theta_1)-sqrt(eps-cos(theta_1)^2))/(sin(theta_1)+sqrt(eps-cos(theta_1)^2))-gamma_g_2*(sin(theta_2)-sqrt(eps-cos(theta_2)^2))/(sin(theta_2)+sqrt(eps-cos(theta_2)^2))-delta_g == 0;
S=solve(eqn, eps);
NS = vpa(S);
DS = double(NS)
А вот результаты, которые я получаю у себя (R2016b):
Matlab M
1
2
3
4
5
DS =
 
   3.0000 - 0.0000i
  -0.1269 - 0.0973i
  -0.8650 + 0.2013i
1
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 22:58  [ТС]
ida2, странно, скопировал все - выдает такую же ошибку. У меня Maple установлен, так я помню он спрашивал при установке интегрироваться в матлаб, может из-за этого ошибка? У меня матлаб 2013b.

Добавлено через 2 минуты
ida2, ну, в любом случае, косяки где-то мои в программе, огромное Вам спасибо за помощь. И еще вопрос, при изменении eps в начальных условиях на, допустим, 4 - восстанавливает ли 4 в первом комплексном числе?
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 23:00
Цитата Сообщение от Zoops Посмотреть сообщение
может из-за этого ошибка?
Про это не скажу - не знаю.
В приведенных последних сообщениях об ошибках номера строк не совпадают с нумерацией строк кода, которым я располагаю. Дайте сообщения от того кода, который выложил я.
1
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 23:02  [ТС]
ida2, почему отличается, потому что у меня в конце программы много комментариев, и я решил не засорять текст программы и отправил Вам без них. Вот, пожалуйста.

Matlab M
1
2
3
4
5
6
Error using sym/double (line 43)
Error using maplemex
Error, (in MTM:-double) cannot handle unevaluated name `eps` in evalhf
 
Error in someone (line 67)
DS = double(NS);
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 23:10
Zoops, Первое, что приходит в голову, так это изменить имя переменной eps на что-нибудь другое. Вообще eps это встроенная функция. (Но это так, от безысходности.)
1
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 23:13  [ТС]
ida2, удалил Maple и появилась новая ошибка. Также, поменял eps на epsi.

Matlab M
1
2
3
4
Undefined function 'syms' for input arguments of type 'char'.
 
Error in someone (line 63)
syms epsi;
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 23:16
Zoops, Попробуйте вывести значение NS - это численное решение в символьном виде:
Matlab M
1
2
3
4
5
NS =
 
 3.0000000000000011895210884662615 - 0.00000000000000059417013974871600998831145607547i
            - 0.12692617347891034372762153122852 - 0.097291489743302433559303519361695i
             - 0.86500985643081517613250263330314 + 0.20131062089473910745521322571324i
И значение S - это чисто символьное решение:
Matlab M
1
2
3
4
5
S =
 
 root(z^3 - z^2*(81825365512232823984331332164550939/47080605572444455057145325856770365 + 18001160966694867555489226984689792i/47080605572444455057145325856770365) + z*(75738039027302602627647594871414279642509954956806867670709710891153591/66054185947829018635189499194857801047684351658372805989152708598550105 + 40458507441577221357755763217285152773929797702734052985420885180977808i/66054185947829018635189499194857801047684351658372805989152708598550105) - (553689001137179800132372604271604445715039627225312513360455947123592745/383114278497408308084099095330175246076569239618562274737085709871590609 + 3055652284854651591997490120250285210793137145836307510450954349673072i/383114278497408308084099095330175246076569239618562274737085709871590609), z, 1)^2 + 400/841
 root(z^3 - z^2*(81825365512232823984331332164550939/47080605572444455057145325856770365 + 18001160966694867555489226984689792i/47080605572444455057145325856770365) + z*(75738039027302602627647594871414279642509954956806867670709710891153591/66054185947829018635189499194857801047684351658372805989152708598550105 + 40458507441577221357755763217285152773929797702734052985420885180977808i/66054185947829018635189499194857801047684351658372805989152708598550105) - (553689001137179800132372604271604445715039627225312513360455947123592745/383114278497408308084099095330175246076569239618562274737085709871590609 + 3055652284854651591997490120250285210793137145836307510450954349673072i/383114278497408308084099095330175246076569239618562274737085709871590609), z, 2)^2 + 400/841
 root(z^3 - z^2*(81825365512232823984331332164550939/47080605572444455057145325856770365 + 18001160966694867555489226984689792i/47080605572444455057145325856770365) + z*(75738039027302602627647594871414279642509954956806867670709710891153591/66054185947829018635189499194857801047684351658372805989152708598550105 + 40458507441577221357755763217285152773929797702734052985420885180977808i/66054185947829018635189499194857801047684351658372805989152708598550105) - (553689001137179800132372604271604445715039627225312513360455947123592745/383114278497408308084099095330175246076569239618562274737085709871590609 + 3055652284854651591997490120250285210793137145836307510450954349673072i/383114278497408308084099095330175246076569239618562274737085709871590609), z, 3)^2 + 400/841
0
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
01.04.2018, 23:16  [ТС]
ida2, кажется, у меня проблема с матлабом, я так подозреваю. Все равно большое Вам спасибо! Завтра переустановлю, попробую.
0
164 / 134 / 61
Регистрация: 16.05.2015
Сообщений: 372
01.04.2018, 23:30
Цитата Сообщение от Zoops Посмотреть сообщение
проблема с матлабом
Или особенности 2013b.

Zoops, Вы eps заменили на epsi во всем коде?

Добавлено через 6 минут
Цитата Сообщение от Zoops Посмотреть сообщение
И еще вопрос, при изменении eps в начальных условиях на, допустим, 4 - восстанавливает ли 4 в первом комплексном числе?
Сразу не заметил. При eps = 4, имеем:
Matlab M
1
2
3
4
5
DS =
 
   4.0000 - 0.0000i
  -0.1271 - 0.1172i
  -1.4389 + 0.3396i
0
 Аватар для Zoops
17 / 9 / 2
Регистрация: 30.09.2012
Сообщений: 95
02.04.2018, 08:57  [ТС]
ida2, да, заменил во всем коде. Если 4 восстанавливается, то значит программа работает правильно. Премного благодарен.

Добавлено через 9 часов 22 минуты
ida2, установил 2016 - все работает! Только непонятно, откуда берутся еще 2 корня, ну то уже ладно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.04.2018, 08:57
Помогаю со студенческими работами здесь

Заполнить заранее созданный file1, и из этого файла скопировать содержимое в заранее созданный file2
Суть проги в том,чтобы я заполнил заранее созданный file1 из консоли и из этого файла содержимое скопировалось в заранее созданный file2,но...

Работа с константами
Имеются константы разные: const Cas = 'кек'; const hi = 'привет'; const Sel = 'хаю хай'; Потом эти константы будут искаться в...

Лямбды с константами
Всем привет! У меня вопрос: надо создать несколько функций-констант с разными значениями для последующего использования. funcs = ...

Класс с константами
Здравствуйте! Есть около двух десятков константных значений (строковых и числовых), как правильно оформить их в отдельный класс (или...

Проблема с константами
Добрый день! Помогите пожалуйста разобраться, ругается на константу Tab, пишет что ожидался константный инициализатор массива....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru