2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Вопрос по MATLAB
Сообщение25.06.2008, 12:39 


25/06/08
4
Помогите, я не халявщик и действительно пытаюсь понять.У меня возникла проблема. Задача была изобразить зависимость давления 1 моля Ван-дер-Ваальсовского газа от обьема (2D график) и от объема и температуры (3D график). Уравнение Ван-дер-Ваальса p=RT/(V-b)-a/V^2; параметры даны: R=0.082; a=3.67; b=0.013; T=298 (я опустил размерности). Ну вроде бы как всё. Задал значения переменных в интервалах и с шагом попытался написать само уравнение. Тут и возникли трудности. Как организовать поэлементные операции? Ведь перед значком операции нужно ставить точку. Но MATLABу это не нравится - ругается. В итоге я поубирал некоторые точки и ввёл такое: p=R*T./(V-0.013)-3.67./V.^2. Вообщем получилось у меня что-то невразумительное с отрицательным давлением. Как правильно ввести формулу? И главное - как ввести формулу для трёхмерного графика? 2D изотерма должна получиться такой (одна из них): http://www.chem.msu.su/rus/teaching/realgases/pic1.4.gif
Вместо этого получается какой-то бред.

 Профиль  
                  
 
 
Сообщение25.06.2008, 12:50 
Экс-модератор
Аватара пользователя


23/12/05
12063
Очень трудно понять, что и как Вы задавали.

Вы не могли бы процитировать текст вашей программы, используя тег code. Типа

Код:
R=0.82;
a=3.67;
...

plot(V,p)

 Профиль  
                  
 
 
Сообщение25.06.2008, 13:30 


25/06/08
4
Код:
>> R=0.082;
>> T=298;
>> a=3.67;
>> b=0.013;
>> V=[0:.1:10];
>> p=R*T./(V-0.013)-3.67./V.^2;
Warning: Divide by zero.
>> plot(V,p)

Какая-то изотерма непонятная. Чего-то снизу идёт.
Я не знаю как правильно ввести формулу для р (ну чтобы вычисления проводились с каждым элементом массива).

 Профиль  
                  
 
 
Сообщение25.06.2008, 13:46 
Экс-модератор
Аватара пользователя


23/12/05
12063
Во-первых, исходя из физического смысла, $V>b$, что у Вас не выполняется.

Код Ваш работоспособный, только непонятно, зачем Вы определяли $a$, $b$, если потом внесли их в формулу в виде чисел.

 Профиль  
                  
 
 
Сообщение25.06.2008, 14:10 


25/06/08
4
Сам не знаю почему. Меня тут все дергают. Отвлёкся.
У меня не получается постороить трёхмерный график (от объёма и температуры). Я пытаюсь, но он выдаёт мне какую-то плоскую линию.

 Профиль  
                  
 
 
Сообщение25.06.2008, 14:11 
Экс-модератор
Аватара пользователя


23/12/05
12063
Krypto писал(а):
Сам не знаю почему. Меня тут все дергают. Отвлёкся.
У меня не получается постороить трёхмерный график (от объёма и температуры). Я пытаюсь, но он выдаёт мне какую-то плоскую линию.


посмотрите примеры с использованием команд meshgrid(), mesh(), surf()

 Профиль  
                  
 
 
Сообщение26.06.2008, 20:32 


25/06/08
4
Большое всем спасибо! Я уже разобрался. Ещё вопрос.
Вот M-file("liqe.m"):
Код:
function y=liqe(k,p);
y=k(1)*k(2).*p./(1+k(1).*p)+(1-k(2))*k(3).*p./(1+k(3).*p);

А вот сам код:
Код:
>> teta=[.222 .224 .157 .128 .409 .482 .569 .669 .781 .806];
>> p=[2.9 3.3 7.7 12.3 23 44.9 93 180.6 360.1 722.2];
>> plot(p,teta,'o')
>> hold on
>> xlabel('Axis p')
>> ylabel('Axis teta')
>> k0=[1 1 1];
>> lsqcurvefit('liqe',k0,p,teta)
>> x=[0:800];
>> y=ans(1)*ans(2).*x./(1+ans(1).*x)+(1-ans(2))*ans(3).*x./(1+ans(3).*x);
>> plot(x,y)

Здесь всё очень сильно зависит от начального приближения. Что делать? Как сделать так, чтобы верхняя правая часть графика проходила ближе к точке. Как узнать эти начальные приближения?

 Профиль  
                  
 
 smooth
Сообщение13.09.2008, 19:19 
Аватара пользователя


16/09/07
21
Люди знающие, напишите, пожалуйста, как с математической точки зрения объяснить, что делает функция smooth? Или с физической...

 Профиль  
                  
 
 
Сообщение14.09.2008, 16:16 
Экс-модератор
Аватара пользователя


23/12/05
12063
Kirill.Netreba в сообщении #144294 писал(а):
что делает функция smooth?


усредняет по нескольким точкам.

Как именно усредняет, зависит от алгоритма усреднения, который будет выбран:

Цитата:
Z = SMOOTH(Y) uses the moving average method with span 5 and X=1:length(Y).

Z = SMOOTH(Y,7) uses the moving average method with span 7 and X=1:length(Y).

Z = SMOOTH(Y,'sgolay') uses the Savitzky-Golay method with DEGREE=2, SPAN = 5, X = 1:length(Y).

Z = SMOOTH(X,Y,'lowess') uses the lowess method with SPAN=5.

Z = SMOOTH(X,Y,SPAN,'rloess') uses the robust loess method.

Z = SMOOTH(X,Y) where X is unevenly distributed uses the 'lowess' method with span 5.

Z = SMOOTH(X,Y,8,'sgolay') uses the Savitzky-Golay method with span 7 (8 is reduced by 1 to make it odd).

Z = SMOOTH(X,Y,0.3,'loess') uses the loess method where span is 30% of the data, i.e. span = ceil(0.3*length(Y)).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group