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, Супермодераторы



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

Сейчас этот форум просматривают: Dmitriy40


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

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