Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
1

Ошибка в решении нелинейной системы уравнений

21.03.2014, 11:13. Показов 5820. Ответов 21
Метки faq+ (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Мне надо решить систему уравнений,но я не могу сообразить в чем ошибка.

0.25=exp(6*a + b) + c
1.25=exp(3*a + b) + c
1.75=exp(2*a + b) + c

Это код,писала по найденным примерам:

Matlab M
1
2
3
4
5
syms x y a b c double
Solution = solve(exp(6*a + b)+ c - 0.25,exp(3*a + b)+ c - 1.25,exp(2*a + b)+ c - 1.75,a,b,c);
A = double(Solution.a);
B = double(Solution.b);
C = double(Solution.c);
Надеюсь на помощь и совет,спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2014, 11:13
Ответы с готовыми решениями:

Ошибка при решении системы уравнений
clc clear L=8; R=15;...

Ошибка при решении системы дифференциальных уравнений через ode23
Не могу разобраться с ошибкой при решении системы дифф. уравнений через оператор ode23. Есть...

Коррекция переменных при решении системы дифференциальных уравнений
Уважаемые форумчане. Попробую пояснить на примере то, что хотелось бы получить. Есть программа...

Моделирование химических реакций (просьба в решении небольшой системы уравнений)
Всем здравствуйте! Помогите решить в Matlab короткую систему химических уравнений. ...

21
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
21.03.2014, 12:53 2
Лучший ответ Сообщение было отмечено Clarisse как решение

Решение

А что пишет?
можно попробовать численно посчитать, т.е. использовать fsolve (описание)
Matlab M
1
2
3
4
5
6
7
8
9
10
clear, clc
% x(1)->a, x(2)->b, x(3)->c
F = @(x) [exp(6*x(1) + x(2)) + x(3) - 0.25
    exp(3*x(1) + x(2)) + x(3) - 1.25
    exp(2*x(1) + x(2)) + x(3) - 1.75];
x0 = [1 0 0]; % начальное предположение
X = fsolve(F,x0);
a = X(1)
b = X(2)
c = X(3)
Проверяй но не забудь, что не все йогурты одинаково полезны системы имеют решение
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
21.03.2014, 22:18  [ТС] 3
А зачем здесь х0?

на мой код пишет :
??? Undefined function or method 'syms' for input arguments of type 'char'.


Есть график и по нему надо подобрать коэффициенты хотя бы примерно. Линеечкой мерила приблизительные x и y и подставляла в функцию exp(a*x+b)+c=y
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
21.03.2014, 22:44 4
численное решение начинает поиск решения из некоторого начального предположения

если ругается на syms то это грворит, что нет тулбокса символьных вычислений (что часто бывает в portable версиях)

хм... тебе по хорошему нужно не систему решать, а подбирать параметры, т.е. аппроксимацию делать а ее можно сделать с помощью cftool или метода наименьших квадратов lsqcurvefit

а мой вариант с fsolve работает?
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
21.03.2014, 23:04  [ТС] 5
в статье по которой я это все вычисляю сказано:определим коэффициенты,минимизируя соответствующий функционал невязки.
а если делать как Вы предложили,как это оформить?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
21.03.2014, 23:14 6
ну fsolve тоже минимизирует невязку
если после рассчетов подставить результат в функцию: F(X), то получим три очень маленьких числа (зависит от точности)

если ты для определения трех коэф-тов берешь три уравнения(точки), то решение будет единственным. если точек будет больше - придется применять метод наименьших квадратов lsqcurvefit: минимизация суммы квадратов невязок.
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
21.03.2014, 23:18  [ТС] 7
я решила,что раз неизвестных три,то и ур-ий должно быть три.Буду разбираться,надо ли мне больше точек. Большое спасибо за помощь!
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
21.03.2014, 23:25 8
обращайся, если что
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
27.03.2014, 16:41  [ТС] 9
День добрый,возникла проблемка. В статье есть график,к нему я и подбирала коэффициенты через систему уравнений. Но когда попыталась построить такие же графики(две линейные и экспоненциальные функции),оказалось экспонента не получается такой же. Может кто-нибудь поймет в чем дело,я уже по всякому пробовала

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
T=[0 0.6]
Q=[6.9*T + 1.24]
plot(T,Q);
axis([0 24 0 6])
 
T=[0.6 12];
%W=[exp(-0.6844*T + 2.0454) + 0.1326];
plot(T,(exp(-0.6844*T + 2.0454) + 0.1326));
axis([0 24 0 6])
 
T=[12 13]
E=[15.8667*T - 191.3667]
plot(T,E);
 
T=[13 24]
R=[exp(-0.0695*T - 2.1279) + 1.7908]
plot(T,R);
axis([0 24 0 6])
Миниатюры
Ошибка в решении нелинейной системы уравнений  
Вложения
Тип файла: txt код.txt (307 байт, 6 просмотров)
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
27.03.2014, 17:36 10
Clarisse, первым делом надо бы увеличить число точек времени, а то у тебя каждый график состоит всего из 2-х точек!
Правда это не полностью решает задачу: у второй экспоненты ошибка в коэфф-тах, проверяй!

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear, clc
 
T=0:0.01:0.6;
Q=6.9*T + 1.24;
plot(T,Q);
hold on
 
T=0.6:0.01:12;
W=exp(-0.6844*T + 2.0454) + 0.1326;
plot(T,W);
 
 
T=12:0.01:13;
E=15.8667*T - 191.3667;
plot(T,E);
 
T=13:0.01:24;
R=exp(-0.0695*T - 2.1279) + 1.7908;
plot(T,R);
axis([-1 24 0 6])
Ошибка в решении нелинейной системы уравнений
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
27.03.2014, 17:52  [ТС] 11
Буду пересчитывать, спасибо! А как Вы сделали, чтобы графики все строились в одном окне?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
27.03.2014, 17:53 12
немного игр не по теме
Matlab M
1
2
3
4
5
6
7
8
9
clear, clc
 
t = 0:0.01:10;
s = double(sin(t)>0); % прямоугольный сигнал
h = exp(-2*t); % переходная функция
S = abs(diff(s)); % модуль производной сигнала
Y = conv(S,h); % делаем свертку
plot(t,s,':b',t,Y(1:length(t)),'r')
axis([-1 10 -0.1 1.1])
Ошибка в решении нелинейной системы уравнений
1
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
27.03.2014, 17:54 13
Цитата Сообщение от Clarisse Посмотреть сообщение
А как Вы сделали, чтобы графики все строились в одном окне?
в 6-й строке написал hold on
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
27.03.2014, 17:56  [ТС] 14
А что это за игры?)
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
27.03.2014, 18:02 15
Clarisse, мне твои экспоненты напомнили прямоугольный сигнал на выходе дифф.звена
0
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
28.03.2014, 10:42  [ТС] 16
Добрый день. Возник вот такой вопрос. Экспонента вторая всё так и не строится. Пересчитала коэффициенты,поправила,но она по оси y не доходит и до 1-цы. Если её строить в таком же интервале как и первую,то всё строится и похоже на исходный график. Что при этом получается на графике. Как можно перенести график на нужную мне часть графика,или задать в коде,чтобы он строился по тем же точкам,что и первая экспонента,но при этом рисовал это дело на второй половине графика?
Миниатюры
Ошибка в решении нелинейной системы уравнений  
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
28.03.2014, 11:19 17
Лучший ответ Сообщение было отмечено Clarisse как решение

Решение

Clarisse, сдвинуть первый график не проблема
Если у нас есть функция f( x ), то чтобы сдвинуть на х0, нужно заменить х на х0 : f( (x-x0) )
получим:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
clear, clc
 
T=0:0.01:0.6;
Q=6.9*T + 1.24;
plot(T,Q);
hold on
 
T=0.6:0.01:12;
W=exp(-0.6844*T + 2.0454) + 0.1326;
plot(T,W);
 
T=12:0.01:13;
E=5.1261*T - 61.3789 ; % причесал
plot(T,E);
 
T=13:0.01:24;
R=exp(-0.6844*(T-13+0.6) + 2.0454) + 0.1326; 
% или если раскрыть скобки:
% R=exp(-0.6844*T+10.5324) + 0.1326; 
plot(T,R);
axis([-1 24 0 6])
обрати внимание: в скобках не просто (T-13), где 13 - время начала второй экспоненты, но (T-13+0.6), т.е. еще сдвиг влево на 0.6 - время начала первой экспоненты
Миниатюры
Ошибка в решении нелинейной системы уравнений  
1
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
28.03.2014, 13:21  [ТС] 18
Спасибо большое! )))
0
1 / 1 / 0
Регистрация: 02.11.2012
Сообщений: 63
02.04.2014, 14:10  [ТС] 19
Добрый день,еще один глупый вопрос. Как мне нарисовать такие же шарики в точках как на графике из статьи?
0
5242 / 3570 / 379
Регистрация: 02.04.2012
Сообщений: 6,473
Записей в блоге: 17
02.04.2014, 15:47 20
Matlab M
1
2
3
4
5
6
7
8
9
10
11
clear ,clc
 
T1 = 0:0.01:24;
T2 = 0:0.4:24;
Y = @(t) (6.9*t+1.24).*((t>=0)&(t<=0.6)) + ... % я ленивая попа :3
    (exp(-0.6844*t+2.0454)+0.1326).*((t>0.6)&(t<=12)) + ...
    (5.1261*t-61.3789).*((t>12)&(t<=13)) + ...
    (exp(-0.6844*t+10.5324)+0.1326).*(t>13);
 
plot(T1,Y(T1),'b', T2,Y(T2),'or');
axis([-1 24 0 6])
1
02.04.2014, 15:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.04.2014, 15:47
Помогаю со студенческими работами здесь

Ошибка при решении системы уравнений
не могу понять в чем дело, вроде все правильно ввожу, но выделяет красным. помогите пожалуйста...

Ошибка в графическом решении системы уравнений
Здравствуйте, это мой первый опыт работы в mathcad, и где-то я явно ошиблась. Буду очень...

Ошибка в решении системы нелинейных уравнений
решаю данную систему методом касательных (как сказал преподаватель). Насколько я понял, вместо...

Ошибка при решении системы уравнений
Если свести эти уравнения в 3 (то есть подставить выражения дельта т) то все решается, но как...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru